Show More
@@ -0,0 +1,157 b'' | |||||
|
1 | /* | |||
|
2 | ||||
|
3 | Original style from softwaremaniacs.org (c) Ivan Sagalaev <Maniac@SoftwareManiacs.Org> | |||
|
4 | Adapted from GitHub theme | |||
|
5 | ||||
|
6 | */ | |||
|
7 | ||||
|
8 | pre code { | |||
|
9 | display: block; | |||
|
10 | padding: 0.5em; | |||
|
11 | } | |||
|
12 | ||||
|
13 | .highlight-base, | |||
|
14 | pre code, | |||
|
15 | pre .subst, | |||
|
16 | pre .tag .title, | |||
|
17 | pre .lisp .title, | |||
|
18 | pre .clojure .built_in, | |||
|
19 | pre .nginx .title { | |||
|
20 | color: black; | |||
|
21 | } | |||
|
22 | ||||
|
23 | .highlight-string, | |||
|
24 | pre .string, | |||
|
25 | pre .constant, | |||
|
26 | pre .parent, | |||
|
27 | pre .tag .value, | |||
|
28 | pre .rules .value, | |||
|
29 | pre .rules .value .number, | |||
|
30 | pre .preprocessor, | |||
|
31 | pre .ruby .symbol, | |||
|
32 | pre .ruby .symbol .string, | |||
|
33 | pre .aggregate, | |||
|
34 | pre .template_tag, | |||
|
35 | pre .django .variable, | |||
|
36 | pre .smalltalk .class, | |||
|
37 | pre .addition, | |||
|
38 | pre .flow, | |||
|
39 | pre .stream, | |||
|
40 | pre .bash .variable, | |||
|
41 | pre .apache .tag, | |||
|
42 | pre .apache .cbracket, | |||
|
43 | pre .tex .command, | |||
|
44 | pre .tex .special, | |||
|
45 | pre .erlang_repl .function_or_atom, | |||
|
46 | pre .markdown .header { | |||
|
47 | color: #BA2121; | |||
|
48 | } | |||
|
49 | ||||
|
50 | .highlight-comment, | |||
|
51 | pre .comment, | |||
|
52 | pre .annotation, | |||
|
53 | pre .template_comment, | |||
|
54 | pre .diff .header, | |||
|
55 | pre .chunk, | |||
|
56 | pre .markdown .blockquote { | |||
|
57 | color: #408080; | |||
|
58 | font-style: italic; | |||
|
59 | } | |||
|
60 | ||||
|
61 | .highlight-number, | |||
|
62 | pre .number, | |||
|
63 | pre .date, | |||
|
64 | pre .regexp, | |||
|
65 | pre .literal, | |||
|
66 | pre .smalltalk .symbol, | |||
|
67 | pre .smalltalk .char, | |||
|
68 | pre .go .constant, | |||
|
69 | pre .change, | |||
|
70 | pre .markdown .bullet, | |||
|
71 | pre .markdown .link_url { | |||
|
72 | color: #080; | |||
|
73 | } | |||
|
74 | ||||
|
75 | pre .label, | |||
|
76 | pre .javadoc, | |||
|
77 | pre .ruby .string, | |||
|
78 | pre .decorator, | |||
|
79 | pre .filter .argument, | |||
|
80 | pre .localvars, | |||
|
81 | pre .array, | |||
|
82 | pre .attr_selector, | |||
|
83 | pre .important, | |||
|
84 | pre .pseudo, | |||
|
85 | pre .pi, | |||
|
86 | pre .doctype, | |||
|
87 | pre .deletion, | |||
|
88 | pre .envvar, | |||
|
89 | pre .shebang, | |||
|
90 | pre .apache .sqbracket, | |||
|
91 | pre .nginx .built_in, | |||
|
92 | pre .tex .formula, | |||
|
93 | pre .erlang_repl .reserved, | |||
|
94 | pre .prompt, | |||
|
95 | pre .markdown .link_label, | |||
|
96 | pre .vhdl .attribute, | |||
|
97 | pre .clojure .attribute, | |||
|
98 | pre .coffeescript .property { | |||
|
99 | color: #88F | |||
|
100 | } | |||
|
101 | ||||
|
102 | .highlight-keyword, | |||
|
103 | pre .keyword, | |||
|
104 | pre .id, | |||
|
105 | pre .phpdoc, | |||
|
106 | pre .aggregate, | |||
|
107 | pre .css .tag, | |||
|
108 | pre .javadoctag, | |||
|
109 | pre .phpdoc, | |||
|
110 | pre .yardoctag, | |||
|
111 | pre .smalltalk .class, | |||
|
112 | pre .winutils, | |||
|
113 | pre .bash .variable, | |||
|
114 | pre .apache .tag, | |||
|
115 | pre .go .typename, | |||
|
116 | pre .tex .command, | |||
|
117 | pre .markdown .strong, | |||
|
118 | pre .request, | |||
|
119 | pre .status { | |||
|
120 | color: #008000; | |||
|
121 | font-weight: bold; | |||
|
122 | } | |||
|
123 | ||||
|
124 | .highlight-builtin, | |||
|
125 | pre .built_in { | |||
|
126 | color: #008000; | |||
|
127 | } | |||
|
128 | ||||
|
129 | pre .markdown .emphasis { | |||
|
130 | font-style: italic; | |||
|
131 | } | |||
|
132 | ||||
|
133 | pre .nginx .built_in { | |||
|
134 | font-weight: normal; | |||
|
135 | } | |||
|
136 | ||||
|
137 | pre .coffeescript .javascript, | |||
|
138 | pre .javascript .xml, | |||
|
139 | pre .tex .formula, | |||
|
140 | pre .xml .javascript, | |||
|
141 | pre .xml .vbscript, | |||
|
142 | pre .xml .css, | |||
|
143 | pre .xml .cdata { | |||
|
144 | opacity: 0.5; | |||
|
145 | } | |||
|
146 | ||||
|
147 | /* apply the same style to codemirror */ | |||
|
148 | ||||
|
149 | .cm-s-ipython span.cm-variable { .highlight-base()} | |||
|
150 | .cm-s-ipython span.cm-keyword { .highlight-keyword() } | |||
|
151 | .cm-s-ipython span.cm-number { .highlight-number() } | |||
|
152 | .cm-s-ipython span.cm-comment { .highlight-comment() } | |||
|
153 | .cm-s-ipython span.cm-string { .highlight-string()} | |||
|
154 | .cm-s-ipython span.cm-builtin { .highlight-builtin() } | |||
|
155 | .cm-s-ipython span.cm-error { color: #f00; } | |||
|
156 | .cm-s-ipython span.cm-operator {color: #AA22FF; font-weight: bold;} | |||
|
157 | .cm-s-ipython span.cm-meta {color: #AA22FF;} |
@@ -1,3 +1,3 b'' | |||||
1 | [submodule "components"] |
|
1 | [submodule "components"] | |
2 | path = IPython/frontend/html/notebook/static/components |
|
2 | path = IPython/frontend/html/notebook/static/components | |
3 |
url = |
|
3 | url = https://github.com/ipython/ipython-components.git |
@@ -1,334 +1,343 b'' | |||||
1 | # encoding: utf-8 |
|
1 | # encoding: utf-8 | |
2 | """ |
|
2 | """ | |
3 | An application for IPython. |
|
3 | An application for IPython. | |
4 |
|
4 | |||
5 | All top-level applications should use the classes in this module for |
|
5 | All top-level applications should use the classes in this module for | |
6 | handling configuration and creating componenets. |
|
6 | handling configuration and creating componenets. | |
7 |
|
7 | |||
8 | The job of an :class:`Application` is to create the master configuration |
|
8 | The job of an :class:`Application` is to create the master configuration | |
9 | object and then create the configurable objects, passing the config to them. |
|
9 | object and then create the configurable objects, passing the config to them. | |
10 |
|
10 | |||
11 | Authors: |
|
11 | Authors: | |
12 |
|
12 | |||
13 | * Brian Granger |
|
13 | * Brian Granger | |
14 | * Fernando Perez |
|
14 | * Fernando Perez | |
15 | * Min RK |
|
15 | * Min RK | |
16 |
|
16 | |||
17 | """ |
|
17 | """ | |
18 |
|
18 | |||
19 | #----------------------------------------------------------------------------- |
|
19 | #----------------------------------------------------------------------------- | |
20 | # Copyright (C) 2008-2011 The IPython Development Team |
|
20 | # Copyright (C) 2008-2011 The IPython Development Team | |
21 | # |
|
21 | # | |
22 | # Distributed under the terms of the BSD License. The full license is in |
|
22 | # Distributed under the terms of the BSD License. The full license is in | |
23 | # the file COPYING, distributed as part of this software. |
|
23 | # the file COPYING, distributed as part of this software. | |
24 | #----------------------------------------------------------------------------- |
|
24 | #----------------------------------------------------------------------------- | |
25 |
|
25 | |||
26 | #----------------------------------------------------------------------------- |
|
26 | #----------------------------------------------------------------------------- | |
27 | # Imports |
|
27 | # Imports | |
28 | #----------------------------------------------------------------------------- |
|
28 | #----------------------------------------------------------------------------- | |
29 |
|
29 | |||
30 | import atexit |
|
30 | import atexit | |
31 | import glob |
|
31 | import glob | |
32 | import logging |
|
32 | import logging | |
33 | import os |
|
33 | import os | |
34 | import shutil |
|
34 | import shutil | |
35 | import sys |
|
35 | import sys | |
36 |
|
36 | |||
37 | from IPython.config.application import Application, catch_config_error |
|
37 | from IPython.config.application import Application, catch_config_error | |
38 | from IPython.config.loader import ConfigFileNotFound |
|
38 | from IPython.config.loader import ConfigFileNotFound | |
39 | from IPython.core import release, crashhandler |
|
39 | from IPython.core import release, crashhandler | |
40 | from IPython.core.profiledir import ProfileDir, ProfileDirError |
|
40 | from IPython.core.profiledir import ProfileDir, ProfileDirError | |
41 | from IPython.utils.path import get_ipython_dir, get_ipython_package_dir |
|
41 | from IPython.utils.path import get_ipython_dir, get_ipython_package_dir | |
42 | from IPython.utils.traitlets import List, Unicode, Type, Bool, Dict |
|
42 | from IPython.utils.traitlets import List, Unicode, Type, Bool, Dict | |
43 |
|
43 | |||
44 | #----------------------------------------------------------------------------- |
|
44 | #----------------------------------------------------------------------------- | |
45 | # Classes and functions |
|
45 | # Classes and functions | |
46 | #----------------------------------------------------------------------------- |
|
46 | #----------------------------------------------------------------------------- | |
47 |
|
47 | |||
48 |
|
48 | |||
49 | #----------------------------------------------------------------------------- |
|
49 | #----------------------------------------------------------------------------- | |
50 | # Base Application Class |
|
50 | # Base Application Class | |
51 | #----------------------------------------------------------------------------- |
|
51 | #----------------------------------------------------------------------------- | |
52 |
|
52 | |||
53 | # aliases and flags |
|
53 | # aliases and flags | |
54 |
|
54 | |||
55 | base_aliases = { |
|
55 | base_aliases = { | |
56 | 'profile' : 'BaseIPythonApplication.profile', |
|
56 | 'profile' : 'BaseIPythonApplication.profile', | |
57 | 'ipython-dir' : 'BaseIPythonApplication.ipython_dir', |
|
57 | 'ipython-dir' : 'BaseIPythonApplication.ipython_dir', | |
58 | 'log-level' : 'Application.log_level', |
|
58 | 'log-level' : 'Application.log_level', | |
59 | } |
|
59 | } | |
60 |
|
60 | |||
61 | base_flags = dict( |
|
61 | base_flags = dict( | |
62 | debug = ({'Application' : {'log_level' : logging.DEBUG}}, |
|
62 | debug = ({'Application' : {'log_level' : logging.DEBUG}}, | |
63 | "set log level to logging.DEBUG (maximize logging output)"), |
|
63 | "set log level to logging.DEBUG (maximize logging output)"), | |
64 | quiet = ({'Application' : {'log_level' : logging.CRITICAL}}, |
|
64 | quiet = ({'Application' : {'log_level' : logging.CRITICAL}}, | |
65 | "set log level to logging.CRITICAL (minimize logging output)"), |
|
65 | "set log level to logging.CRITICAL (minimize logging output)"), | |
66 | init = ({'BaseIPythonApplication' : { |
|
66 | init = ({'BaseIPythonApplication' : { | |
67 | 'copy_config_files' : True, |
|
67 | 'copy_config_files' : True, | |
68 | 'auto_create' : True} |
|
68 | 'auto_create' : True} | |
69 | }, """Initialize profile with default config files. This is equivalent |
|
69 | }, """Initialize profile with default config files. This is equivalent | |
70 | to running `ipython profile create <profile>` prior to startup. |
|
70 | to running `ipython profile create <profile>` prior to startup. | |
71 | """) |
|
71 | """) | |
72 | ) |
|
72 | ) | |
73 |
|
73 | |||
74 |
|
74 | |||
75 | class BaseIPythonApplication(Application): |
|
75 | class BaseIPythonApplication(Application): | |
76 |
|
76 | |||
77 | name = Unicode(u'ipython') |
|
77 | name = Unicode(u'ipython') | |
78 | description = Unicode(u'IPython: an enhanced interactive Python shell.') |
|
78 | description = Unicode(u'IPython: an enhanced interactive Python shell.') | |
79 | version = Unicode(release.version) |
|
79 | version = Unicode(release.version) | |
80 |
|
80 | |||
81 | aliases = Dict(base_aliases) |
|
81 | aliases = Dict(base_aliases) | |
82 | flags = Dict(base_flags) |
|
82 | flags = Dict(base_flags) | |
83 | classes = List([ProfileDir]) |
|
83 | classes = List([ProfileDir]) | |
84 |
|
84 | |||
85 | # Track whether the config_file has changed, |
|
85 | # Track whether the config_file has changed, | |
86 | # because some logic happens only if we aren't using the default. |
|
86 | # because some logic happens only if we aren't using the default. | |
87 | config_file_specified = Bool(False) |
|
87 | config_file_specified = Bool(False) | |
88 |
|
88 | |||
89 | config_file_name = Unicode(u'ipython_config.py') |
|
89 | config_file_name = Unicode(u'ipython_config.py') | |
90 | def _config_file_name_default(self): |
|
90 | def _config_file_name_default(self): | |
91 | return self.name.replace('-','_') + u'_config.py' |
|
91 | return self.name.replace('-','_') + u'_config.py' | |
92 | def _config_file_name_changed(self, name, old, new): |
|
92 | def _config_file_name_changed(self, name, old, new): | |
93 | if new != old: |
|
93 | if new != old: | |
94 | self.config_file_specified = True |
|
94 | self.config_file_specified = True | |
95 |
|
95 | |||
96 | # The directory that contains IPython's builtin profiles. |
|
96 | # The directory that contains IPython's builtin profiles. | |
97 | builtin_profile_dir = Unicode( |
|
97 | builtin_profile_dir = Unicode( | |
98 | os.path.join(get_ipython_package_dir(), u'config', u'profile', u'default') |
|
98 | os.path.join(get_ipython_package_dir(), u'config', u'profile', u'default') | |
99 | ) |
|
99 | ) | |
100 |
|
100 | |||
101 | config_file_paths = List(Unicode) |
|
101 | config_file_paths = List(Unicode) | |
102 | def _config_file_paths_default(self): |
|
102 | def _config_file_paths_default(self): | |
103 | return [os.getcwdu()] |
|
103 | return [os.getcwdu()] | |
104 |
|
104 | |||
105 | profile = Unicode(u'default', config=True, |
|
105 | profile = Unicode(u'default', config=True, | |
106 | help="""The IPython profile to use.""" |
|
106 | help="""The IPython profile to use.""" | |
107 | ) |
|
107 | ) | |
108 |
|
108 | |||
109 | def _profile_changed(self, name, old, new): |
|
109 | def _profile_changed(self, name, old, new): | |
110 | self.builtin_profile_dir = os.path.join( |
|
110 | self.builtin_profile_dir = os.path.join( | |
111 | get_ipython_package_dir(), u'config', u'profile', new |
|
111 | get_ipython_package_dir(), u'config', u'profile', new | |
112 | ) |
|
112 | ) | |
113 |
|
113 | |||
114 | ipython_dir = Unicode(get_ipython_dir(), config=True, |
|
114 | ipython_dir = Unicode(get_ipython_dir(), config=True, | |
115 | help=""" |
|
115 | help=""" | |
116 | The name of the IPython directory. This directory is used for logging |
|
116 | The name of the IPython directory. This directory is used for logging | |
117 | configuration (through profiles), history storage, etc. The default |
|
117 | configuration (through profiles), history storage, etc. The default | |
118 | is usually $HOME/.ipython. This options can also be specified through |
|
118 | is usually $HOME/.ipython. This options can also be specified through | |
119 | the environment variable IPYTHONDIR. |
|
119 | the environment variable IPYTHONDIR. | |
120 | """ |
|
120 | """ | |
121 | ) |
|
121 | ) | |
122 |
|
122 | |||
123 | overwrite = Bool(False, config=True, |
|
123 | overwrite = Bool(False, config=True, | |
124 | help="""Whether to overwrite existing config files when copying""") |
|
124 | help="""Whether to overwrite existing config files when copying""") | |
125 | auto_create = Bool(False, config=True, |
|
125 | auto_create = Bool(False, config=True, | |
126 | help="""Whether to create profile dir if it doesn't exist""") |
|
126 | help="""Whether to create profile dir if it doesn't exist""") | |
127 |
|
127 | |||
128 | config_files = List(Unicode) |
|
128 | config_files = List(Unicode) | |
129 | def _config_files_default(self): |
|
129 | def _config_files_default(self): | |
130 | return [u'ipython_config.py'] |
|
130 | return [u'ipython_config.py'] | |
131 |
|
131 | |||
132 | copy_config_files = Bool(False, config=True, |
|
132 | copy_config_files = Bool(False, config=True, | |
133 | help="""Whether to install the default config files into the profile dir. |
|
133 | help="""Whether to install the default config files into the profile dir. | |
134 | If a new profile is being created, and IPython contains config files for that |
|
134 | If a new profile is being created, and IPython contains config files for that | |
135 | profile, then they will be staged into the new directory. Otherwise, |
|
135 | profile, then they will be staged into the new directory. Otherwise, | |
136 | default config files will be automatically generated. |
|
136 | default config files will be automatically generated. | |
137 | """) |
|
137 | """) | |
138 |
|
138 | |||
139 | verbose_crash = Bool(False, config=True, |
|
139 | verbose_crash = Bool(False, config=True, | |
140 | help="""Create a massive crash report when IPython encounters what may be an |
|
140 | help="""Create a massive crash report when IPython encounters what may be an | |
141 | internal error. The default is to append a short message to the |
|
141 | internal error. The default is to append a short message to the | |
142 | usual traceback""") |
|
142 | usual traceback""") | |
143 |
|
143 | |||
144 | # The class to use as the crash handler. |
|
144 | # The class to use as the crash handler. | |
145 | crash_handler_class = Type(crashhandler.CrashHandler) |
|
145 | crash_handler_class = Type(crashhandler.CrashHandler) | |
146 |
|
146 | |||
|
147 | @catch_config_error | |||
147 | def __init__(self, **kwargs): |
|
148 | def __init__(self, **kwargs): | |
148 | super(BaseIPythonApplication, self).__init__(**kwargs) |
|
149 | super(BaseIPythonApplication, self).__init__(**kwargs) | |
|
150 | # ensure current working directory exists | |||
|
151 | try: | |||
|
152 | directory = os.getcwdu() | |||
|
153 | except: | |||
|
154 | # raise exception | |||
|
155 | self.log.error("Current working directory doesn't exist.") | |||
|
156 | raise | |||
|
157 | ||||
149 | # ensure even default IPYTHONDIR exists |
|
158 | # ensure even default IPYTHONDIR exists | |
150 | if not os.path.exists(self.ipython_dir): |
|
159 | if not os.path.exists(self.ipython_dir): | |
151 | self._ipython_dir_changed('ipython_dir', self.ipython_dir, self.ipython_dir) |
|
160 | self._ipython_dir_changed('ipython_dir', self.ipython_dir, self.ipython_dir) | |
152 |
|
161 | |||
153 | #------------------------------------------------------------------------- |
|
162 | #------------------------------------------------------------------------- | |
154 | # Various stages of Application creation |
|
163 | # Various stages of Application creation | |
155 | #------------------------------------------------------------------------- |
|
164 | #------------------------------------------------------------------------- | |
156 |
|
165 | |||
157 | def init_crash_handler(self): |
|
166 | def init_crash_handler(self): | |
158 | """Create a crash handler, typically setting sys.excepthook to it.""" |
|
167 | """Create a crash handler, typically setting sys.excepthook to it.""" | |
159 | self.crash_handler = self.crash_handler_class(self) |
|
168 | self.crash_handler = self.crash_handler_class(self) | |
160 | sys.excepthook = self.excepthook |
|
169 | sys.excepthook = self.excepthook | |
161 | def unset_crashhandler(): |
|
170 | def unset_crashhandler(): | |
162 | sys.excepthook = sys.__excepthook__ |
|
171 | sys.excepthook = sys.__excepthook__ | |
163 | atexit.register(unset_crashhandler) |
|
172 | atexit.register(unset_crashhandler) | |
164 |
|
173 | |||
165 | def excepthook(self, etype, evalue, tb): |
|
174 | def excepthook(self, etype, evalue, tb): | |
166 | """this is sys.excepthook after init_crashhandler |
|
175 | """this is sys.excepthook after init_crashhandler | |
167 |
|
176 | |||
168 | set self.verbose_crash=True to use our full crashhandler, instead of |
|
177 | set self.verbose_crash=True to use our full crashhandler, instead of | |
169 | a regular traceback with a short message (crash_handler_lite) |
|
178 | a regular traceback with a short message (crash_handler_lite) | |
170 | """ |
|
179 | """ | |
171 |
|
180 | |||
172 | if self.verbose_crash: |
|
181 | if self.verbose_crash: | |
173 | return self.crash_handler(etype, evalue, tb) |
|
182 | return self.crash_handler(etype, evalue, tb) | |
174 | else: |
|
183 | else: | |
175 | return crashhandler.crash_handler_lite(etype, evalue, tb) |
|
184 | return crashhandler.crash_handler_lite(etype, evalue, tb) | |
176 |
|
185 | |||
177 | def _ipython_dir_changed(self, name, old, new): |
|
186 | def _ipython_dir_changed(self, name, old, new): | |
178 | if old in sys.path: |
|
187 | if old in sys.path: | |
179 | sys.path.remove(old) |
|
188 | sys.path.remove(old) | |
180 | sys.path.append(os.path.abspath(new)) |
|
189 | sys.path.append(os.path.abspath(new)) | |
181 | if not os.path.isdir(new): |
|
190 | if not os.path.isdir(new): | |
182 | os.makedirs(new, mode=0o777) |
|
191 | os.makedirs(new, mode=0o777) | |
183 | readme = os.path.join(new, 'README') |
|
192 | readme = os.path.join(new, 'README') | |
184 | if not os.path.exists(readme): |
|
193 | if not os.path.exists(readme): | |
185 | path = os.path.join(get_ipython_package_dir(), u'config', u'profile') |
|
194 | path = os.path.join(get_ipython_package_dir(), u'config', u'profile') | |
186 | shutil.copy(os.path.join(path, 'README'), readme) |
|
195 | shutil.copy(os.path.join(path, 'README'), readme) | |
187 | self.log.debug("IPYTHONDIR set to: %s" % new) |
|
196 | self.log.debug("IPYTHONDIR set to: %s" % new) | |
188 |
|
197 | |||
189 | def load_config_file(self, suppress_errors=True): |
|
198 | def load_config_file(self, suppress_errors=True): | |
190 | """Load the config file. |
|
199 | """Load the config file. | |
191 |
|
200 | |||
192 | By default, errors in loading config are handled, and a warning |
|
201 | By default, errors in loading config are handled, and a warning | |
193 | printed on screen. For testing, the suppress_errors option is set |
|
202 | printed on screen. For testing, the suppress_errors option is set | |
194 | to False, so errors will make tests fail. |
|
203 | to False, so errors will make tests fail. | |
195 | """ |
|
204 | """ | |
196 | self.log.debug("Searching path %s for config files", self.config_file_paths) |
|
205 | self.log.debug("Searching path %s for config files", self.config_file_paths) | |
197 | base_config = 'ipython_config.py' |
|
206 | base_config = 'ipython_config.py' | |
198 | self.log.debug("Attempting to load config file: %s" % |
|
207 | self.log.debug("Attempting to load config file: %s" % | |
199 | base_config) |
|
208 | base_config) | |
200 | try: |
|
209 | try: | |
201 | Application.load_config_file( |
|
210 | Application.load_config_file( | |
202 | self, |
|
211 | self, | |
203 | base_config, |
|
212 | base_config, | |
204 | path=self.config_file_paths |
|
213 | path=self.config_file_paths | |
205 | ) |
|
214 | ) | |
206 | except ConfigFileNotFound: |
|
215 | except ConfigFileNotFound: | |
207 | # ignore errors loading parent |
|
216 | # ignore errors loading parent | |
208 | self.log.debug("Config file %s not found", base_config) |
|
217 | self.log.debug("Config file %s not found", base_config) | |
209 | pass |
|
218 | pass | |
210 | if self.config_file_name == base_config: |
|
219 | if self.config_file_name == base_config: | |
211 | # don't load secondary config |
|
220 | # don't load secondary config | |
212 | return |
|
221 | return | |
213 | self.log.debug("Attempting to load config file: %s" % |
|
222 | self.log.debug("Attempting to load config file: %s" % | |
214 | self.config_file_name) |
|
223 | self.config_file_name) | |
215 | try: |
|
224 | try: | |
216 | Application.load_config_file( |
|
225 | Application.load_config_file( | |
217 | self, |
|
226 | self, | |
218 | self.config_file_name, |
|
227 | self.config_file_name, | |
219 | path=self.config_file_paths |
|
228 | path=self.config_file_paths | |
220 | ) |
|
229 | ) | |
221 | except ConfigFileNotFound: |
|
230 | except ConfigFileNotFound: | |
222 | # Only warn if the default config file was NOT being used. |
|
231 | # Only warn if the default config file was NOT being used. | |
223 | if self.config_file_specified: |
|
232 | if self.config_file_specified: | |
224 | msg = self.log.warn |
|
233 | msg = self.log.warn | |
225 | else: |
|
234 | else: | |
226 | msg = self.log.debug |
|
235 | msg = self.log.debug | |
227 | msg("Config file not found, skipping: %s", self.config_file_name) |
|
236 | msg("Config file not found, skipping: %s", self.config_file_name) | |
228 | except: |
|
237 | except: | |
229 | # For testing purposes. |
|
238 | # For testing purposes. | |
230 | if not suppress_errors: |
|
239 | if not suppress_errors: | |
231 | raise |
|
240 | raise | |
232 | self.log.warn("Error loading config file: %s" % |
|
241 | self.log.warn("Error loading config file: %s" % | |
233 | self.config_file_name, exc_info=True) |
|
242 | self.config_file_name, exc_info=True) | |
234 |
|
243 | |||
235 | def init_profile_dir(self): |
|
244 | def init_profile_dir(self): | |
236 | """initialize the profile dir""" |
|
245 | """initialize the profile dir""" | |
237 | try: |
|
246 | try: | |
238 | # location explicitly specified: |
|
247 | # location explicitly specified: | |
239 | location = self.config.ProfileDir.location |
|
248 | location = self.config.ProfileDir.location | |
240 | except AttributeError: |
|
249 | except AttributeError: | |
241 | # location not specified, find by profile name |
|
250 | # location not specified, find by profile name | |
242 | try: |
|
251 | try: | |
243 | p = ProfileDir.find_profile_dir_by_name(self.ipython_dir, self.profile, self.config) |
|
252 | p = ProfileDir.find_profile_dir_by_name(self.ipython_dir, self.profile, self.config) | |
244 | except ProfileDirError: |
|
253 | except ProfileDirError: | |
245 | # not found, maybe create it (always create default profile) |
|
254 | # not found, maybe create it (always create default profile) | |
246 | if self.auto_create or self.profile == 'default': |
|
255 | if self.auto_create or self.profile == 'default': | |
247 | try: |
|
256 | try: | |
248 | p = ProfileDir.create_profile_dir_by_name(self.ipython_dir, self.profile, self.config) |
|
257 | p = ProfileDir.create_profile_dir_by_name(self.ipython_dir, self.profile, self.config) | |
249 | except ProfileDirError: |
|
258 | except ProfileDirError: | |
250 | self.log.fatal("Could not create profile: %r"%self.profile) |
|
259 | self.log.fatal("Could not create profile: %r"%self.profile) | |
251 | self.exit(1) |
|
260 | self.exit(1) | |
252 | else: |
|
261 | else: | |
253 | self.log.info("Created profile dir: %r"%p.location) |
|
262 | self.log.info("Created profile dir: %r"%p.location) | |
254 | else: |
|
263 | else: | |
255 | self.log.fatal("Profile %r not found."%self.profile) |
|
264 | self.log.fatal("Profile %r not found."%self.profile) | |
256 | self.exit(1) |
|
265 | self.exit(1) | |
257 | else: |
|
266 | else: | |
258 | self.log.info("Using existing profile dir: %r"%p.location) |
|
267 | self.log.info("Using existing profile dir: %r"%p.location) | |
259 | else: |
|
268 | else: | |
260 | # location is fully specified |
|
269 | # location is fully specified | |
261 | try: |
|
270 | try: | |
262 | p = ProfileDir.find_profile_dir(location, self.config) |
|
271 | p = ProfileDir.find_profile_dir(location, self.config) | |
263 | except ProfileDirError: |
|
272 | except ProfileDirError: | |
264 | # not found, maybe create it |
|
273 | # not found, maybe create it | |
265 | if self.auto_create: |
|
274 | if self.auto_create: | |
266 | try: |
|
275 | try: | |
267 | p = ProfileDir.create_profile_dir(location, self.config) |
|
276 | p = ProfileDir.create_profile_dir(location, self.config) | |
268 | except ProfileDirError: |
|
277 | except ProfileDirError: | |
269 | self.log.fatal("Could not create profile directory: %r"%location) |
|
278 | self.log.fatal("Could not create profile directory: %r"%location) | |
270 | self.exit(1) |
|
279 | self.exit(1) | |
271 | else: |
|
280 | else: | |
272 | self.log.info("Creating new profile dir: %r"%location) |
|
281 | self.log.info("Creating new profile dir: %r"%location) | |
273 | else: |
|
282 | else: | |
274 | self.log.fatal("Profile directory %r not found."%location) |
|
283 | self.log.fatal("Profile directory %r not found."%location) | |
275 | self.exit(1) |
|
284 | self.exit(1) | |
276 | else: |
|
285 | else: | |
277 | self.log.info("Using existing profile dir: %r"%location) |
|
286 | self.log.info("Using existing profile dir: %r"%location) | |
278 |
|
287 | |||
279 | self.profile_dir = p |
|
288 | self.profile_dir = p | |
280 | self.config_file_paths.append(p.location) |
|
289 | self.config_file_paths.append(p.location) | |
281 |
|
290 | |||
282 | def init_config_files(self): |
|
291 | def init_config_files(self): | |
283 | """[optionally] copy default config files into profile dir.""" |
|
292 | """[optionally] copy default config files into profile dir.""" | |
284 | # copy config files |
|
293 | # copy config files | |
285 | path = self.builtin_profile_dir |
|
294 | path = self.builtin_profile_dir | |
286 | if self.copy_config_files: |
|
295 | if self.copy_config_files: | |
287 | src = self.profile |
|
296 | src = self.profile | |
288 |
|
297 | |||
289 | cfg = self.config_file_name |
|
298 | cfg = self.config_file_name | |
290 | if path and os.path.exists(os.path.join(path, cfg)): |
|
299 | if path and os.path.exists(os.path.join(path, cfg)): | |
291 | self.log.warn("Staging %r from %s into %r [overwrite=%s]"%( |
|
300 | self.log.warn("Staging %r from %s into %r [overwrite=%s]"%( | |
292 | cfg, src, self.profile_dir.location, self.overwrite) |
|
301 | cfg, src, self.profile_dir.location, self.overwrite) | |
293 | ) |
|
302 | ) | |
294 | self.profile_dir.copy_config_file(cfg, path=path, overwrite=self.overwrite) |
|
303 | self.profile_dir.copy_config_file(cfg, path=path, overwrite=self.overwrite) | |
295 | else: |
|
304 | else: | |
296 | self.stage_default_config_file() |
|
305 | self.stage_default_config_file() | |
297 | else: |
|
306 | else: | |
298 | # Still stage *bundled* config files, but not generated ones |
|
307 | # Still stage *bundled* config files, but not generated ones | |
299 | # This is necessary for `ipython profile=sympy` to load the profile |
|
308 | # This is necessary for `ipython profile=sympy` to load the profile | |
300 | # on the first go |
|
309 | # on the first go | |
301 | files = glob.glob(os.path.join(path, '*.py')) |
|
310 | files = glob.glob(os.path.join(path, '*.py')) | |
302 | for fullpath in files: |
|
311 | for fullpath in files: | |
303 | cfg = os.path.basename(fullpath) |
|
312 | cfg = os.path.basename(fullpath) | |
304 | if self.profile_dir.copy_config_file(cfg, path=path, overwrite=False): |
|
313 | if self.profile_dir.copy_config_file(cfg, path=path, overwrite=False): | |
305 | # file was copied |
|
314 | # file was copied | |
306 | self.log.warn("Staging bundled %s from %s into %r"%( |
|
315 | self.log.warn("Staging bundled %s from %s into %r"%( | |
307 | cfg, self.profile, self.profile_dir.location) |
|
316 | cfg, self.profile, self.profile_dir.location) | |
308 | ) |
|
317 | ) | |
309 |
|
318 | |||
310 |
|
319 | |||
311 | def stage_default_config_file(self): |
|
320 | def stage_default_config_file(self): | |
312 | """auto generate default config file, and stage it into the profile.""" |
|
321 | """auto generate default config file, and stage it into the profile.""" | |
313 | s = self.generate_config_file() |
|
322 | s = self.generate_config_file() | |
314 | fname = os.path.join(self.profile_dir.location, self.config_file_name) |
|
323 | fname = os.path.join(self.profile_dir.location, self.config_file_name) | |
315 | if self.overwrite or not os.path.exists(fname): |
|
324 | if self.overwrite or not os.path.exists(fname): | |
316 | self.log.warn("Generating default config file: %r"%(fname)) |
|
325 | self.log.warn("Generating default config file: %r"%(fname)) | |
317 | with open(fname, 'w') as f: |
|
326 | with open(fname, 'w') as f: | |
318 | f.write(s) |
|
327 | f.write(s) | |
319 |
|
328 | |||
320 | @catch_config_error |
|
329 | @catch_config_error | |
321 | def initialize(self, argv=None): |
|
330 | def initialize(self, argv=None): | |
322 | # don't hook up crash handler before parsing command-line |
|
331 | # don't hook up crash handler before parsing command-line | |
323 | self.parse_command_line(argv) |
|
332 | self.parse_command_line(argv) | |
324 | self.init_crash_handler() |
|
333 | self.init_crash_handler() | |
325 | if self.subapp is not None: |
|
334 | if self.subapp is not None: | |
326 | # stop here if subapp is taking over |
|
335 | # stop here if subapp is taking over | |
327 | return |
|
336 | return | |
328 | cl_config = self.config |
|
337 | cl_config = self.config | |
329 | self.init_profile_dir() |
|
338 | self.init_profile_dir() | |
330 | self.init_config_files() |
|
339 | self.init_config_files() | |
331 | self.load_config_file() |
|
340 | self.load_config_file() | |
332 | # enforce cl-opts override configfile opts: |
|
341 | # enforce cl-opts override configfile opts: | |
333 | self.update_config(cl_config) |
|
342 | self.update_config(cl_config) | |
334 |
|
343 |
@@ -1,1118 +1,1177 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 | """Implementation of execution-related magic functions. |
|
2 | """Implementation of execution-related magic functions. | |
3 | """ |
|
3 | """ | |
4 | #----------------------------------------------------------------------------- |
|
4 | #----------------------------------------------------------------------------- | |
5 | # Copyright (c) 2012 The IPython Development Team. |
|
5 | # Copyright (c) 2012 The IPython Development Team. | |
6 | # |
|
6 | # | |
7 | # Distributed under the terms of the Modified BSD License. |
|
7 | # Distributed under the terms of the Modified BSD License. | |
8 | # |
|
8 | # | |
9 | # The full license is in the file COPYING.txt, distributed with this software. |
|
9 | # The full license is in the file COPYING.txt, distributed with this software. | |
10 | #----------------------------------------------------------------------------- |
|
10 | #----------------------------------------------------------------------------- | |
11 |
|
11 | |||
12 | #----------------------------------------------------------------------------- |
|
12 | #----------------------------------------------------------------------------- | |
13 | # Imports |
|
13 | # Imports | |
14 | #----------------------------------------------------------------------------- |
|
14 | #----------------------------------------------------------------------------- | |
15 |
|
15 | |||
16 | # Stdlib |
|
16 | # Stdlib | |
17 | import __builtin__ as builtin_mod |
|
17 | import __builtin__ as builtin_mod | |
18 | import ast |
|
18 | import ast | |
19 | import bdb |
|
19 | import bdb | |
20 | import os |
|
20 | import os | |
21 | import sys |
|
21 | import sys | |
22 | import time |
|
22 | import time | |
23 | from StringIO import StringIO |
|
23 | from StringIO import StringIO | |
24 |
|
24 | |||
25 | # cProfile was added in Python2.5 |
|
25 | # cProfile was added in Python2.5 | |
26 | try: |
|
26 | try: | |
27 | import cProfile as profile |
|
27 | import cProfile as profile | |
28 | import pstats |
|
28 | import pstats | |
29 | except ImportError: |
|
29 | except ImportError: | |
30 | # profile isn't bundled by default in Debian for license reasons |
|
30 | # profile isn't bundled by default in Debian for license reasons | |
31 | try: |
|
31 | try: | |
32 | import profile, pstats |
|
32 | import profile, pstats | |
33 | except ImportError: |
|
33 | except ImportError: | |
34 | profile = pstats = None |
|
34 | profile = pstats = None | |
35 |
|
35 | |||
36 | # Our own packages |
|
36 | # Our own packages | |
37 | from IPython.core import debugger, oinspect |
|
37 | from IPython.core import debugger, oinspect | |
38 | from IPython.core import magic_arguments |
|
38 | from IPython.core import magic_arguments | |
39 | from IPython.core import page |
|
39 | from IPython.core import page | |
40 | from IPython.core.error import UsageError |
|
40 | from IPython.core.error import UsageError | |
41 | from IPython.core.macro import Macro |
|
41 | from IPython.core.macro import Macro | |
42 | from IPython.core.magic import (Magics, magics_class, line_magic, cell_magic, |
|
42 | from IPython.core.magic import (Magics, magics_class, line_magic, cell_magic, | |
43 | line_cell_magic, on_off, needs_local_scope) |
|
43 | line_cell_magic, on_off, needs_local_scope) | |
44 | from IPython.testing.skipdoctest import skip_doctest |
|
44 | from IPython.testing.skipdoctest import skip_doctest | |
45 | from IPython.utils import py3compat |
|
45 | from IPython.utils import py3compat | |
46 | from IPython.utils.contexts import preserve_keys |
|
46 | from IPython.utils.contexts import preserve_keys | |
47 | from IPython.utils.io import capture_output |
|
47 | from IPython.utils.io import capture_output | |
48 | from IPython.utils.ipstruct import Struct |
|
48 | from IPython.utils.ipstruct import Struct | |
49 | from IPython.utils.module_paths import find_mod |
|
49 | from IPython.utils.module_paths import find_mod | |
50 | from IPython.utils.path import get_py_filename, unquote_filename, shellglob |
|
50 | from IPython.utils.path import get_py_filename, unquote_filename, shellglob | |
51 | from IPython.utils.timing import clock, clock2 |
|
51 | from IPython.utils.timing import clock, clock2 | |
52 | from IPython.utils.warn import warn, error |
|
52 | from IPython.utils.warn import warn, error | |
53 |
|
53 | |||
54 |
|
54 | |||
55 | #----------------------------------------------------------------------------- |
|
55 | #----------------------------------------------------------------------------- | |
56 | # Magic implementation classes |
|
56 | # Magic implementation classes | |
57 | #----------------------------------------------------------------------------- |
|
57 | #----------------------------------------------------------------------------- | |
58 |
|
58 | |||
59 | @magics_class |
|
59 | @magics_class | |
60 | class ExecutionMagics(Magics): |
|
60 | class ExecutionMagics(Magics): | |
61 | """Magics related to code execution, debugging, profiling, etc. |
|
61 | """Magics related to code execution, debugging, profiling, etc. | |
62 |
|
62 | |||
63 | """ |
|
63 | """ | |
64 |
|
64 | |||
65 | def __init__(self, shell): |
|
65 | def __init__(self, shell): | |
66 | super(ExecutionMagics, self).__init__(shell) |
|
66 | super(ExecutionMagics, self).__init__(shell) | |
67 | if profile is None: |
|
67 | if profile is None: | |
68 | self.prun = self.profile_missing_notice |
|
68 | self.prun = self.profile_missing_notice | |
69 | # Default execution function used to actually run user code. |
|
69 | # Default execution function used to actually run user code. | |
70 | self.default_runner = None |
|
70 | self.default_runner = None | |
71 |
|
71 | |||
72 | def profile_missing_notice(self, *args, **kwargs): |
|
72 | def profile_missing_notice(self, *args, **kwargs): | |
73 | error("""\ |
|
73 | error("""\ | |
74 | The profile module could not be found. It has been removed from the standard |
|
74 | The profile module could not be found. It has been removed from the standard | |
75 | python packages because of its non-free license. To use profiling, install the |
|
75 | python packages because of its non-free license. To use profiling, install the | |
76 | python-profiler package from non-free.""") |
|
76 | python-profiler package from non-free.""") | |
77 |
|
77 | |||
78 | @skip_doctest |
|
78 | @skip_doctest | |
79 | @line_cell_magic |
|
79 | @line_cell_magic | |
80 |
def prun(self, parameter_s='', cell=None |
|
80 | def prun(self, parameter_s='', cell=None): | |
81 | opts=None,arg_lst=None,prog_ns=None): |
|
|||
82 |
|
81 | |||
83 | """Run a statement through the python code profiler. |
|
82 | """Run a statement through the python code profiler. | |
84 |
|
83 | |||
85 | Usage, in line mode: |
|
84 | Usage, in line mode: | |
86 | %prun [options] statement |
|
85 | %prun [options] statement | |
87 |
|
86 | |||
88 | Usage, in cell mode: |
|
87 | Usage, in cell mode: | |
89 | %%prun [options] [statement] |
|
88 | %%prun [options] [statement] | |
90 | code... |
|
89 | code... | |
91 | code... |
|
90 | code... | |
92 |
|
91 | |||
93 | In cell mode, the additional code lines are appended to the (possibly |
|
92 | In cell mode, the additional code lines are appended to the (possibly | |
94 | empty) statement in the first line. Cell mode allows you to easily |
|
93 | empty) statement in the first line. Cell mode allows you to easily | |
95 | profile multiline blocks without having to put them in a separate |
|
94 | profile multiline blocks without having to put them in a separate | |
96 | function. |
|
95 | function. | |
97 |
|
96 | |||
98 | The given statement (which doesn't require quote marks) is run via the |
|
97 | The given statement (which doesn't require quote marks) is run via the | |
99 | python profiler in a manner similar to the profile.run() function. |
|
98 | python profiler in a manner similar to the profile.run() function. | |
100 | Namespaces are internally managed to work correctly; profile.run |
|
99 | Namespaces are internally managed to work correctly; profile.run | |
101 | cannot be used in IPython because it makes certain assumptions about |
|
100 | cannot be used in IPython because it makes certain assumptions about | |
102 | namespaces which do not hold under IPython. |
|
101 | namespaces which do not hold under IPython. | |
103 |
|
102 | |||
104 | Options: |
|
103 | Options: | |
105 |
|
104 | |||
106 | -l <limit>: you can place restrictions on what or how much of the |
|
105 | -l <limit>: you can place restrictions on what or how much of the | |
107 | profile gets printed. The limit value can be: |
|
106 | profile gets printed. The limit value can be: | |
108 |
|
107 | |||
109 | * A string: only information for function names containing this string |
|
108 | * A string: only information for function names containing this string | |
110 | is printed. |
|
109 | is printed. | |
111 |
|
110 | |||
112 | * An integer: only these many lines are printed. |
|
111 | * An integer: only these many lines are printed. | |
113 |
|
112 | |||
114 | * A float (between 0 and 1): this fraction of the report is printed |
|
113 | * A float (between 0 and 1): this fraction of the report is printed | |
115 | (for example, use a limit of 0.4 to see the topmost 40% only). |
|
114 | (for example, use a limit of 0.4 to see the topmost 40% only). | |
116 |
|
115 | |||
117 | You can combine several limits with repeated use of the option. For |
|
116 | You can combine several limits with repeated use of the option. For | |
118 | example, '-l __init__ -l 5' will print only the topmost 5 lines of |
|
117 | example, '-l __init__ -l 5' will print only the topmost 5 lines of | |
119 | information about class constructors. |
|
118 | information about class constructors. | |
120 |
|
119 | |||
121 | -r: return the pstats.Stats object generated by the profiling. This |
|
120 | -r: return the pstats.Stats object generated by the profiling. This | |
122 | object has all the information about the profile in it, and you can |
|
121 | object has all the information about the profile in it, and you can | |
123 | later use it for further analysis or in other functions. |
|
122 | later use it for further analysis or in other functions. | |
124 |
|
123 | |||
125 | -s <key>: sort profile by given key. You can provide more than one key |
|
124 | -s <key>: sort profile by given key. You can provide more than one key | |
126 | by using the option several times: '-s key1 -s key2 -s key3...'. The |
|
125 | by using the option several times: '-s key1 -s key2 -s key3...'. The | |
127 | default sorting key is 'time'. |
|
126 | default sorting key is 'time'. | |
128 |
|
127 | |||
129 | The following is copied verbatim from the profile documentation |
|
128 | The following is copied verbatim from the profile documentation | |
130 | referenced below: |
|
129 | referenced below: | |
131 |
|
130 | |||
132 | When more than one key is provided, additional keys are used as |
|
131 | When more than one key is provided, additional keys are used as | |
133 | secondary criteria when the there is equality in all keys selected |
|
132 | secondary criteria when the there is equality in all keys selected | |
134 | before them. |
|
133 | before them. | |
135 |
|
134 | |||
136 | Abbreviations can be used for any key names, as long as the |
|
135 | Abbreviations can be used for any key names, as long as the | |
137 | abbreviation is unambiguous. The following are the keys currently |
|
136 | abbreviation is unambiguous. The following are the keys currently | |
138 | defined: |
|
137 | defined: | |
139 |
|
138 | |||
140 | Valid Arg Meaning |
|
139 | Valid Arg Meaning | |
141 | "calls" call count |
|
140 | "calls" call count | |
142 | "cumulative" cumulative time |
|
141 | "cumulative" cumulative time | |
143 | "file" file name |
|
142 | "file" file name | |
144 | "module" file name |
|
143 | "module" file name | |
145 | "pcalls" primitive call count |
|
144 | "pcalls" primitive call count | |
146 | "line" line number |
|
145 | "line" line number | |
147 | "name" function name |
|
146 | "name" function name | |
148 | "nfl" name/file/line |
|
147 | "nfl" name/file/line | |
149 | "stdname" standard name |
|
148 | "stdname" standard name | |
150 | "time" internal time |
|
149 | "time" internal time | |
151 |
|
150 | |||
152 | Note that all sorts on statistics are in descending order (placing |
|
151 | Note that all sorts on statistics are in descending order (placing | |
153 | most time consuming items first), where as name, file, and line number |
|
152 | most time consuming items first), where as name, file, and line number | |
154 | searches are in ascending order (i.e., alphabetical). The subtle |
|
153 | searches are in ascending order (i.e., alphabetical). The subtle | |
155 | distinction between "nfl" and "stdname" is that the standard name is a |
|
154 | distinction between "nfl" and "stdname" is that the standard name is a | |
156 | sort of the name as printed, which means that the embedded line |
|
155 | sort of the name as printed, which means that the embedded line | |
157 | numbers get compared in an odd way. For example, lines 3, 20, and 40 |
|
156 | numbers get compared in an odd way. For example, lines 3, 20, and 40 | |
158 | would (if the file names were the same) appear in the string order |
|
157 | would (if the file names were the same) appear in the string order | |
159 | "20" "3" and "40". In contrast, "nfl" does a numeric compare of the |
|
158 | "20" "3" and "40". In contrast, "nfl" does a numeric compare of the | |
160 | line numbers. In fact, sort_stats("nfl") is the same as |
|
159 | line numbers. In fact, sort_stats("nfl") is the same as | |
161 | sort_stats("name", "file", "line"). |
|
160 | sort_stats("name", "file", "line"). | |
162 |
|
161 | |||
163 | -T <filename>: save profile results as shown on screen to a text |
|
162 | -T <filename>: save profile results as shown on screen to a text | |
164 | file. The profile is still shown on screen. |
|
163 | file. The profile is still shown on screen. | |
165 |
|
164 | |||
166 | -D <filename>: save (via dump_stats) profile statistics to given |
|
165 | -D <filename>: save (via dump_stats) profile statistics to given | |
167 | filename. This data is in a format understood by the pstats module, and |
|
166 | filename. This data is in a format understood by the pstats module, and | |
168 | is generated by a call to the dump_stats() method of profile |
|
167 | is generated by a call to the dump_stats() method of profile | |
169 | objects. The profile is still shown on screen. |
|
168 | objects. The profile is still shown on screen. | |
170 |
|
169 | |||
171 | -q: suppress output to the pager. Best used with -T and/or -D above. |
|
170 | -q: suppress output to the pager. Best used with -T and/or -D above. | |
172 |
|
171 | |||
173 | If you want to run complete programs under the profiler's control, use |
|
172 | If you want to run complete programs under the profiler's control, use | |
174 | '%run -p [prof_opts] filename.py [args to program]' where prof_opts |
|
173 | '%run -p [prof_opts] filename.py [args to program]' where prof_opts | |
175 | contains profiler specific options as described here. |
|
174 | contains profiler specific options as described here. | |
176 |
|
175 | |||
177 | You can read the complete documentation for the profile module with:: |
|
176 | You can read the complete documentation for the profile module with:: | |
178 |
|
177 | |||
179 | In [1]: import profile; profile.help() |
|
178 | In [1]: import profile; profile.help() | |
180 | """ |
|
179 | """ | |
|
180 | opts, arg_str = self.parse_options(parameter_s, 'D:l:rs:T:q', | |||
|
181 | list_all=True, posix=False) | |||
|
182 | if cell is not None: | |||
|
183 | arg_str += '\n' + cell | |||
|
184 | return self._run_with_profiler(arg_str, opts, self.shell.user_ns) | |||
181 |
|
185 | |||
182 | opts_def = Struct(D=[''],l=[],s=['time'],T=['']) |
|
186 | def _run_with_profiler(self, code, opts, namespace): | |
|
187 | """ | |||
|
188 | Run `code` with profiler. Used by ``%prun`` and ``%run -p``. | |||
183 |
|
|
189 | ||
184 | if user_mode: # regular user call |
|
190 | Parameters | |
185 | opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:q', |
|
191 | ---------- | |
186 | list_all=True, posix=False) |
|
192 | code : str | |
187 | namespace = self.shell.user_ns |
|
193 | Code to be executed. | |
188 | if cell is not None: |
|
194 | opts : Struct | |
189 | arg_str += '\n' + cell |
|
195 | Options parsed by `self.parse_options`. | |
190 | else: # called to run a program by %run -p |
|
196 | namespace : dict | |
191 | try: |
|
197 | A dictionary for Python namespace (e.g., `self.shell.user_ns`). | |
192 | filename = get_py_filename(arg_lst[0]) |
|
|||
193 | except IOError as e: |
|
|||
194 | try: |
|
|||
195 | msg = str(e) |
|
|||
196 | except UnicodeError: |
|
|||
197 | msg = e.message |
|
|||
198 | error(msg) |
|
|||
199 | return |
|
|||
200 |
|
|
198 | ||
201 | arg_str = 'execfile(filename,prog_ns)' |
|
199 | """ | |
202 | namespace = { |
|
|||
203 | 'execfile': self.shell.safe_execfile, |
|
|||
204 | 'prog_ns': prog_ns, |
|
|||
205 | 'filename': filename |
|
|||
206 | } |
|
|||
207 |
|
200 | |||
208 | opts.merge(opts_def) |
|
201 | # Fill default values for unspecified options: | |
|
202 | opts.merge(Struct(D=[''], l=[], s=['time'], T=[''])) | |||
209 |
|
203 | |||
210 | prof = profile.Profile() |
|
204 | prof = profile.Profile() | |
211 | try: |
|
205 | try: | |
212 |
prof = prof.runctx( |
|
206 | prof = prof.runctx(code, namespace, namespace) | |
213 | sys_exit = '' |
|
207 | sys_exit = '' | |
214 | except SystemExit: |
|
208 | except SystemExit: | |
215 | sys_exit = """*** SystemExit exception caught in code being profiled.""" |
|
209 | sys_exit = """*** SystemExit exception caught in code being profiled.""" | |
216 |
|
210 | |||
217 | stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s) |
|
211 | stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s) | |
218 |
|
212 | |||
219 | lims = opts.l |
|
213 | lims = opts.l | |
220 | if lims: |
|
214 | if lims: | |
221 | lims = [] # rebuild lims with ints/floats/strings |
|
215 | lims = [] # rebuild lims with ints/floats/strings | |
222 | for lim in opts.l: |
|
216 | for lim in opts.l: | |
223 | try: |
|
217 | try: | |
224 | lims.append(int(lim)) |
|
218 | lims.append(int(lim)) | |
225 | except ValueError: |
|
219 | except ValueError: | |
226 | try: |
|
220 | try: | |
227 | lims.append(float(lim)) |
|
221 | lims.append(float(lim)) | |
228 | except ValueError: |
|
222 | except ValueError: | |
229 | lims.append(lim) |
|
223 | lims.append(lim) | |
230 |
|
224 | |||
231 | # Trap output. |
|
225 | # Trap output. | |
232 | stdout_trap = StringIO() |
|
226 | stdout_trap = StringIO() | |
233 | stats_stream = stats.stream |
|
227 | stats_stream = stats.stream | |
234 | try: |
|
228 | try: | |
235 | stats.stream = stdout_trap |
|
229 | stats.stream = stdout_trap | |
236 | stats.print_stats(*lims) |
|
230 | stats.print_stats(*lims) | |
237 | finally: |
|
231 | finally: | |
238 | stats.stream = stats_stream |
|
232 | stats.stream = stats_stream | |
239 |
|
233 | |||
240 | output = stdout_trap.getvalue() |
|
234 | output = stdout_trap.getvalue() | |
241 | output = output.rstrip() |
|
235 | output = output.rstrip() | |
242 |
|
236 | |||
243 | if 'q' not in opts: |
|
237 | if 'q' not in opts: | |
244 | page.page(output) |
|
238 | page.page(output) | |
245 | print sys_exit, |
|
239 | print sys_exit, | |
246 |
|
240 | |||
247 | dump_file = opts.D[0] |
|
241 | dump_file = opts.D[0] | |
248 | text_file = opts.T[0] |
|
242 | text_file = opts.T[0] | |
249 | if dump_file: |
|
243 | if dump_file: | |
250 | dump_file = unquote_filename(dump_file) |
|
244 | dump_file = unquote_filename(dump_file) | |
251 | prof.dump_stats(dump_file) |
|
245 | prof.dump_stats(dump_file) | |
252 | print '\n*** Profile stats marshalled to file',\ |
|
246 | print '\n*** Profile stats marshalled to file',\ | |
253 | repr(dump_file)+'.',sys_exit |
|
247 | repr(dump_file)+'.',sys_exit | |
254 | if text_file: |
|
248 | if text_file: | |
255 | text_file = unquote_filename(text_file) |
|
249 | text_file = unquote_filename(text_file) | |
256 | pfile = open(text_file,'w') |
|
250 | pfile = open(text_file,'w') | |
257 | pfile.write(output) |
|
251 | pfile.write(output) | |
258 | pfile.close() |
|
252 | pfile.close() | |
259 | print '\n*** Profile printout saved to text file',\ |
|
253 | print '\n*** Profile printout saved to text file',\ | |
260 | repr(text_file)+'.',sys_exit |
|
254 | repr(text_file)+'.',sys_exit | |
261 |
|
255 | |||
262 | if 'r' in opts: |
|
256 | if 'r' in opts: | |
263 | return stats |
|
257 | return stats | |
264 | else: |
|
258 | else: | |
265 | return None |
|
259 | return None | |
266 |
|
260 | |||
267 | @line_magic |
|
261 | @line_magic | |
268 | def pdb(self, parameter_s=''): |
|
262 | def pdb(self, parameter_s=''): | |
269 | """Control the automatic calling of the pdb interactive debugger. |
|
263 | """Control the automatic calling of the pdb interactive debugger. | |
270 |
|
264 | |||
271 | Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without |
|
265 | Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without | |
272 | argument it works as a toggle. |
|
266 | argument it works as a toggle. | |
273 |
|
267 | |||
274 | When an exception is triggered, IPython can optionally call the |
|
268 | When an exception is triggered, IPython can optionally call the | |
275 | interactive pdb debugger after the traceback printout. %pdb toggles |
|
269 | interactive pdb debugger after the traceback printout. %pdb toggles | |
276 | this feature on and off. |
|
270 | this feature on and off. | |
277 |
|
271 | |||
278 | The initial state of this feature is set in your configuration |
|
272 | The initial state of this feature is set in your configuration | |
279 | file (the option is ``InteractiveShell.pdb``). |
|
273 | file (the option is ``InteractiveShell.pdb``). | |
280 |
|
274 | |||
281 | If you want to just activate the debugger AFTER an exception has fired, |
|
275 | If you want to just activate the debugger AFTER an exception has fired, | |
282 | without having to type '%pdb on' and rerunning your code, you can use |
|
276 | without having to type '%pdb on' and rerunning your code, you can use | |
283 | the %debug magic.""" |
|
277 | the %debug magic.""" | |
284 |
|
278 | |||
285 | par = parameter_s.strip().lower() |
|
279 | par = parameter_s.strip().lower() | |
286 |
|
280 | |||
287 | if par: |
|
281 | if par: | |
288 | try: |
|
282 | try: | |
289 | new_pdb = {'off':0,'0':0,'on':1,'1':1}[par] |
|
283 | new_pdb = {'off':0,'0':0,'on':1,'1':1}[par] | |
290 | except KeyError: |
|
284 | except KeyError: | |
291 | print ('Incorrect argument. Use on/1, off/0, ' |
|
285 | print ('Incorrect argument. Use on/1, off/0, ' | |
292 | 'or nothing for a toggle.') |
|
286 | 'or nothing for a toggle.') | |
293 | return |
|
287 | return | |
294 | else: |
|
288 | else: | |
295 | # toggle |
|
289 | # toggle | |
296 | new_pdb = not self.shell.call_pdb |
|
290 | new_pdb = not self.shell.call_pdb | |
297 |
|
291 | |||
298 | # set on the shell |
|
292 | # set on the shell | |
299 | self.shell.call_pdb = new_pdb |
|
293 | self.shell.call_pdb = new_pdb | |
300 | print 'Automatic pdb calling has been turned',on_off(new_pdb) |
|
294 | print 'Automatic pdb calling has been turned',on_off(new_pdb) | |
301 |
|
295 | |||
302 | @line_magic |
|
296 | @line_magic | |
303 | def debug(self, parameter_s=''): |
|
297 | def debug(self, parameter_s=''): | |
304 | """Activate the interactive debugger in post-mortem mode. |
|
298 | """Activate the interactive debugger in post-mortem mode. | |
305 |
|
299 | |||
306 | If an exception has just occurred, this lets you inspect its stack |
|
300 | If an exception has just occurred, this lets you inspect its stack | |
307 | frames interactively. Note that this will always work only on the last |
|
301 | frames interactively. Note that this will always work only on the last | |
308 | traceback that occurred, so you must call this quickly after an |
|
302 | traceback that occurred, so you must call this quickly after an | |
309 | exception that you wish to inspect has fired, because if another one |
|
303 | exception that you wish to inspect has fired, because if another one | |
310 | occurs, it clobbers the previous one. |
|
304 | occurs, it clobbers the previous one. | |
311 |
|
305 | |||
312 | If you want IPython to automatically do this on every exception, see |
|
306 | If you want IPython to automatically do this on every exception, see | |
313 | the %pdb magic for more details. |
|
307 | the %pdb magic for more details. | |
314 | """ |
|
308 | """ | |
315 | self.shell.debugger(force=True) |
|
309 | self.shell.debugger(force=True) | |
316 |
|
310 | |||
317 | @line_magic |
|
311 | @line_magic | |
318 | def tb(self, s): |
|
312 | def tb(self, s): | |
319 | """Print the last traceback with the currently active exception mode. |
|
313 | """Print the last traceback with the currently active exception mode. | |
320 |
|
314 | |||
321 | See %xmode for changing exception reporting modes.""" |
|
315 | See %xmode for changing exception reporting modes.""" | |
322 | self.shell.showtraceback() |
|
316 | self.shell.showtraceback() | |
323 |
|
317 | |||
324 | @skip_doctest |
|
318 | @skip_doctest | |
325 | @line_magic |
|
319 | @line_magic | |
326 | def run(self, parameter_s='', runner=None, |
|
320 | def run(self, parameter_s='', runner=None, | |
327 | file_finder=get_py_filename): |
|
321 | file_finder=get_py_filename): | |
328 | """Run the named file inside IPython as a program. |
|
322 | """Run the named file inside IPython as a program. | |
329 |
|
323 | |||
330 |
Usage: |
|
324 | Usage: | |
331 | %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options] -G] file [args] |
|
325 | %run [-n -i -e -G] | |
|
326 | [( -t [-N<N>] | -d [-b<N>] | -p [profile options] )] | |||
|
327 | ( -m mod | file ) [args] | |||
332 |
|
328 | |||
333 | Parameters after the filename are passed as command-line arguments to |
|
329 | Parameters after the filename are passed as command-line arguments to | |
334 | the program (put in sys.argv). Then, control returns to IPython's |
|
330 | the program (put in sys.argv). Then, control returns to IPython's | |
335 | prompt. |
|
331 | prompt. | |
336 |
|
332 | |||
337 | This is similar to running at a system prompt:\\ |
|
333 | This is similar to running at a system prompt:\\ | |
338 | $ python file args\\ |
|
334 | $ python file args\\ | |
339 | but with the advantage of giving you IPython's tracebacks, and of |
|
335 | but with the advantage of giving you IPython's tracebacks, and of | |
340 | loading all variables into your interactive namespace for further use |
|
336 | loading all variables into your interactive namespace for further use | |
341 | (unless -p is used, see below). |
|
337 | (unless -p is used, see below). | |
342 |
|
338 | |||
343 | The file is executed in a namespace initially consisting only of |
|
339 | The file is executed in a namespace initially consisting only of | |
344 | __name__=='__main__' and sys.argv constructed as indicated. It thus |
|
340 | __name__=='__main__' and sys.argv constructed as indicated. It thus | |
345 | sees its environment as if it were being run as a stand-alone program |
|
341 | sees its environment as if it were being run as a stand-alone program | |
346 | (except for sharing global objects such as previously imported |
|
342 | (except for sharing global objects such as previously imported | |
347 | modules). But after execution, the IPython interactive namespace gets |
|
343 | modules). But after execution, the IPython interactive namespace gets | |
348 | updated with all variables defined in the program (except for __name__ |
|
344 | updated with all variables defined in the program (except for __name__ | |
349 | and sys.argv). This allows for very convenient loading of code for |
|
345 | and sys.argv). This allows for very convenient loading of code for | |
350 | interactive work, while giving each program a 'clean sheet' to run in. |
|
346 | interactive work, while giving each program a 'clean sheet' to run in. | |
351 |
|
347 | |||
352 | Arguments are expanded using shell-like glob match. Patterns |
|
348 | Arguments are expanded using shell-like glob match. Patterns | |
353 | '*', '?', '[seq]' and '[!seq]' can be used. Additionally, |
|
349 | '*', '?', '[seq]' and '[!seq]' can be used. Additionally, | |
354 | tilde '~' will be expanded into user's home directory. Unlike |
|
350 | tilde '~' will be expanded into user's home directory. Unlike | |
355 | real shells, quotation does not suppress expansions. Use |
|
351 | real shells, quotation does not suppress expansions. Use | |
356 | *two* back slashes (e.g., '\\\\*') to suppress expansions. |
|
352 | *two* back slashes (e.g., '\\\\*') to suppress expansions. | |
357 | To completely disable these expansions, you can use -G flag. |
|
353 | To completely disable these expansions, you can use -G flag. | |
358 |
|
354 | |||
359 | Options: |
|
355 | Options: | |
360 |
|
356 | |||
361 | -n: __name__ is NOT set to '__main__', but to the running file's name |
|
357 | -n: __name__ is NOT set to '__main__', but to the running file's name | |
362 | without extension (as python does under import). This allows running |
|
358 | without extension (as python does under import). This allows running | |
363 | scripts and reloading the definitions in them without calling code |
|
359 | scripts and reloading the definitions in them without calling code | |
364 | protected by an ' if __name__ == "__main__" ' clause. |
|
360 | protected by an ' if __name__ == "__main__" ' clause. | |
365 |
|
361 | |||
366 | -i: run the file in IPython's namespace instead of an empty one. This |
|
362 | -i: run the file in IPython's namespace instead of an empty one. This | |
367 | is useful if you are experimenting with code written in a text editor |
|
363 | is useful if you are experimenting with code written in a text editor | |
368 | which depends on variables defined interactively. |
|
364 | which depends on variables defined interactively. | |
369 |
|
365 | |||
370 | -e: ignore sys.exit() calls or SystemExit exceptions in the script |
|
366 | -e: ignore sys.exit() calls or SystemExit exceptions in the script | |
371 | being run. This is particularly useful if IPython is being used to |
|
367 | being run. This is particularly useful if IPython is being used to | |
372 | run unittests, which always exit with a sys.exit() call. In such |
|
368 | run unittests, which always exit with a sys.exit() call. In such | |
373 | cases you are interested in the output of the test results, not in |
|
369 | cases you are interested in the output of the test results, not in | |
374 | seeing a traceback of the unittest module. |
|
370 | seeing a traceback of the unittest module. | |
375 |
|
371 | |||
376 | -t: print timing information at the end of the run. IPython will give |
|
372 | -t: print timing information at the end of the run. IPython will give | |
377 | you an estimated CPU time consumption for your script, which under |
|
373 | you an estimated CPU time consumption for your script, which under | |
378 | Unix uses the resource module to avoid the wraparound problems of |
|
374 | Unix uses the resource module to avoid the wraparound problems of | |
379 | time.clock(). Under Unix, an estimate of time spent on system tasks |
|
375 | time.clock(). Under Unix, an estimate of time spent on system tasks | |
380 | is also given (for Windows platforms this is reported as 0.0). |
|
376 | is also given (for Windows platforms this is reported as 0.0). | |
381 |
|
377 | |||
382 | If -t is given, an additional -N<N> option can be given, where <N> |
|
378 | If -t is given, an additional -N<N> option can be given, where <N> | |
383 | must be an integer indicating how many times you want the script to |
|
379 | must be an integer indicating how many times you want the script to | |
384 | run. The final timing report will include total and per run results. |
|
380 | run. The final timing report will include total and per run results. | |
385 |
|
381 | |||
386 | For example (testing the script uniq_stable.py):: |
|
382 | For example (testing the script uniq_stable.py):: | |
387 |
|
383 | |||
388 | In [1]: run -t uniq_stable |
|
384 | In [1]: run -t uniq_stable | |
389 |
|
385 | |||
390 | IPython CPU timings (estimated):\\ |
|
386 | IPython CPU timings (estimated):\\ | |
391 | User : 0.19597 s.\\ |
|
387 | User : 0.19597 s.\\ | |
392 | System: 0.0 s.\\ |
|
388 | System: 0.0 s.\\ | |
393 |
|
389 | |||
394 | In [2]: run -t -N5 uniq_stable |
|
390 | In [2]: run -t -N5 uniq_stable | |
395 |
|
391 | |||
396 | IPython CPU timings (estimated):\\ |
|
392 | IPython CPU timings (estimated):\\ | |
397 | Total runs performed: 5\\ |
|
393 | Total runs performed: 5\\ | |
398 | Times : Total Per run\\ |
|
394 | Times : Total Per run\\ | |
399 | User : 0.910862 s, 0.1821724 s.\\ |
|
395 | User : 0.910862 s, 0.1821724 s.\\ | |
400 | System: 0.0 s, 0.0 s. |
|
396 | System: 0.0 s, 0.0 s. | |
401 |
|
397 | |||
402 | -d: run your program under the control of pdb, the Python debugger. |
|
398 | -d: run your program under the control of pdb, the Python debugger. | |
403 | This allows you to execute your program step by step, watch variables, |
|
399 | This allows you to execute your program step by step, watch variables, | |
404 | etc. Internally, what IPython does is similar to calling: |
|
400 | etc. Internally, what IPython does is similar to calling: | |
405 |
|
401 | |||
406 | pdb.run('execfile("YOURFILENAME")') |
|
402 | pdb.run('execfile("YOURFILENAME")') | |
407 |
|
403 | |||
408 | with a breakpoint set on line 1 of your file. You can change the line |
|
404 | with a breakpoint set on line 1 of your file. You can change the line | |
409 | number for this automatic breakpoint to be <N> by using the -bN option |
|
405 | number for this automatic breakpoint to be <N> by using the -bN option | |
410 | (where N must be an integer). For example:: |
|
406 | (where N must be an integer). For example:: | |
411 |
|
407 | |||
412 | %run -d -b40 myscript |
|
408 | %run -d -b40 myscript | |
413 |
|
409 | |||
414 | will set the first breakpoint at line 40 in myscript.py. Note that |
|
410 | will set the first breakpoint at line 40 in myscript.py. Note that | |
415 | the first breakpoint must be set on a line which actually does |
|
411 | the first breakpoint must be set on a line which actually does | |
416 | something (not a comment or docstring) for it to stop execution. |
|
412 | something (not a comment or docstring) for it to stop execution. | |
417 |
|
413 | |||
418 | Or you can specify a breakpoint in a different file:: |
|
414 | Or you can specify a breakpoint in a different file:: | |
419 |
|
415 | |||
420 | %run -d -b myotherfile.py:20 myscript |
|
416 | %run -d -b myotherfile.py:20 myscript | |
421 |
|
417 | |||
422 | When the pdb debugger starts, you will see a (Pdb) prompt. You must |
|
418 | When the pdb debugger starts, you will see a (Pdb) prompt. You must | |
423 | first enter 'c' (without quotes) to start execution up to the first |
|
419 | first enter 'c' (without quotes) to start execution up to the first | |
424 | breakpoint. |
|
420 | breakpoint. | |
425 |
|
421 | |||
426 | Entering 'help' gives information about the use of the debugger. You |
|
422 | Entering 'help' gives information about the use of the debugger. You | |
427 | can easily see pdb's full documentation with "import pdb;pdb.help()" |
|
423 | can easily see pdb's full documentation with "import pdb;pdb.help()" | |
428 | at a prompt. |
|
424 | at a prompt. | |
429 |
|
425 | |||
430 | -p: run program under the control of the Python profiler module (which |
|
426 | -p: run program under the control of the Python profiler module (which | |
431 | prints a detailed report of execution times, function calls, etc). |
|
427 | prints a detailed report of execution times, function calls, etc). | |
432 |
|
428 | |||
433 | You can pass other options after -p which affect the behavior of the |
|
429 | You can pass other options after -p which affect the behavior of the | |
434 | profiler itself. See the docs for %prun for details. |
|
430 | profiler itself. See the docs for %prun for details. | |
435 |
|
431 | |||
436 | In this mode, the program's variables do NOT propagate back to the |
|
432 | In this mode, the program's variables do NOT propagate back to the | |
437 | IPython interactive namespace (because they remain in the namespace |
|
433 | IPython interactive namespace (because they remain in the namespace | |
438 | where the profiler executes them). |
|
434 | where the profiler executes them). | |
439 |
|
435 | |||
440 | Internally this triggers a call to %prun, see its documentation for |
|
436 | Internally this triggers a call to %prun, see its documentation for | |
441 | details on the options available specifically for profiling. |
|
437 | details on the options available specifically for profiling. | |
442 |
|
438 | |||
443 | There is one special usage for which the text above doesn't apply: |
|
439 | There is one special usage for which the text above doesn't apply: | |
444 | if the filename ends with .ipy, the file is run as ipython script, |
|
440 | if the filename ends with .ipy, the file is run as ipython script, | |
445 | just as if the commands were written on IPython prompt. |
|
441 | just as if the commands were written on IPython prompt. | |
446 |
|
442 | |||
447 | -m: specify module name to load instead of script path. Similar to |
|
443 | -m: specify module name to load instead of script path. Similar to | |
448 | the -m option for the python interpreter. Use this option last if you |
|
444 | the -m option for the python interpreter. Use this option last if you | |
449 | want to combine with other %run options. Unlike the python interpreter |
|
445 | want to combine with other %run options. Unlike the python interpreter | |
450 | only source modules are allowed no .pyc or .pyo files. |
|
446 | only source modules are allowed no .pyc or .pyo files. | |
451 | For example:: |
|
447 | For example:: | |
452 |
|
448 | |||
453 | %run -m example |
|
449 | %run -m example | |
454 |
|
450 | |||
455 | will run the example module. |
|
451 | will run the example module. | |
456 |
|
452 | |||
457 | -G: disable shell-like glob expansion of arguments. |
|
453 | -G: disable shell-like glob expansion of arguments. | |
458 |
|
454 | |||
459 | """ |
|
455 | """ | |
460 |
|
456 | |||
461 | # get arguments and set sys.argv for program to be run. |
|
457 | # get arguments and set sys.argv for program to be run. | |
462 | opts, arg_lst = self.parse_options(parameter_s, |
|
458 | opts, arg_lst = self.parse_options(parameter_s, | |
463 | 'nidtN:b:pD:l:rs:T:em:G', |
|
459 | 'nidtN:b:pD:l:rs:T:em:G', | |
464 | mode='list', list_all=1) |
|
460 | mode='list', list_all=1) | |
465 | if "m" in opts: |
|
461 | if "m" in opts: | |
466 | modulename = opts["m"][0] |
|
462 | modulename = opts["m"][0] | |
467 | modpath = find_mod(modulename) |
|
463 | modpath = find_mod(modulename) | |
468 | if modpath is None: |
|
464 | if modpath is None: | |
469 | warn('%r is not a valid modulename on sys.path'%modulename) |
|
465 | warn('%r is not a valid modulename on sys.path'%modulename) | |
470 | return |
|
466 | return | |
471 | arg_lst = [modpath] + arg_lst |
|
467 | arg_lst = [modpath] + arg_lst | |
472 | try: |
|
468 | try: | |
473 | filename = file_finder(arg_lst[0]) |
|
469 | filename = file_finder(arg_lst[0]) | |
474 | except IndexError: |
|
470 | except IndexError: | |
475 | warn('you must provide at least a filename.') |
|
471 | warn('you must provide at least a filename.') | |
476 | print '\n%run:\n', oinspect.getdoc(self.run) |
|
472 | print '\n%run:\n', oinspect.getdoc(self.run) | |
477 | return |
|
473 | return | |
478 | except IOError as e: |
|
474 | except IOError as e: | |
479 | try: |
|
475 | try: | |
480 | msg = str(e) |
|
476 | msg = str(e) | |
481 | except UnicodeError: |
|
477 | except UnicodeError: | |
482 | msg = e.message |
|
478 | msg = e.message | |
483 | error(msg) |
|
479 | error(msg) | |
484 | return |
|
480 | return | |
485 |
|
481 | |||
486 | if filename.lower().endswith('.ipy'): |
|
482 | if filename.lower().endswith('.ipy'): | |
487 | with preserve_keys(self.shell.user_ns, '__file__'): |
|
483 | with preserve_keys(self.shell.user_ns, '__file__'): | |
488 | self.shell.user_ns['__file__'] = filename |
|
484 | self.shell.user_ns['__file__'] = filename | |
489 | self.shell.safe_execfile_ipy(filename) |
|
485 | self.shell.safe_execfile_ipy(filename) | |
490 | return |
|
486 | return | |
491 |
|
487 | |||
492 | # Control the response to exit() calls made by the script being run |
|
488 | # Control the response to exit() calls made by the script being run | |
493 | exit_ignore = 'e' in opts |
|
489 | exit_ignore = 'e' in opts | |
494 |
|
490 | |||
495 | # Make sure that the running script gets a proper sys.argv as if it |
|
491 | # Make sure that the running script gets a proper sys.argv as if it | |
496 | # were run from a system shell. |
|
492 | # were run from a system shell. | |
497 | save_argv = sys.argv # save it for later restoring |
|
493 | save_argv = sys.argv # save it for later restoring | |
498 |
|
494 | |||
499 | if 'G' in opts: |
|
495 | if 'G' in opts: | |
500 | args = arg_lst[1:] |
|
496 | args = arg_lst[1:] | |
501 | else: |
|
497 | else: | |
502 | # tilde and glob expansion |
|
498 | # tilde and glob expansion | |
503 | args = shellglob(map(os.path.expanduser, arg_lst[1:])) |
|
499 | args = shellglob(map(os.path.expanduser, arg_lst[1:])) | |
504 |
|
500 | |||
505 | sys.argv = [filename] + args # put in the proper filename |
|
501 | sys.argv = [filename] + args # put in the proper filename | |
506 | # protect sys.argv from potential unicode strings on Python 2: |
|
502 | # protect sys.argv from potential unicode strings on Python 2: | |
507 | if not py3compat.PY3: |
|
503 | if not py3compat.PY3: | |
508 | sys.argv = [ py3compat.cast_bytes(a) for a in sys.argv ] |
|
504 | sys.argv = [ py3compat.cast_bytes(a) for a in sys.argv ] | |
509 |
|
505 | |||
510 | if 'i' in opts: |
|
506 | if 'i' in opts: | |
511 | # Run in user's interactive namespace |
|
507 | # Run in user's interactive namespace | |
512 | prog_ns = self.shell.user_ns |
|
508 | prog_ns = self.shell.user_ns | |
513 | __name__save = self.shell.user_ns['__name__'] |
|
509 | __name__save = self.shell.user_ns['__name__'] | |
514 | prog_ns['__name__'] = '__main__' |
|
510 | prog_ns['__name__'] = '__main__' | |
515 | main_mod = self.shell.new_main_mod(prog_ns) |
|
511 | main_mod = self.shell.new_main_mod(prog_ns) | |
516 | else: |
|
512 | else: | |
517 | # Run in a fresh, empty namespace |
|
513 | # Run in a fresh, empty namespace | |
518 | if 'n' in opts: |
|
514 | if 'n' in opts: | |
519 | name = os.path.splitext(os.path.basename(filename))[0] |
|
515 | name = os.path.splitext(os.path.basename(filename))[0] | |
520 | else: |
|
516 | else: | |
521 | name = '__main__' |
|
517 | name = '__main__' | |
522 |
|
518 | |||
523 | main_mod = self.shell.new_main_mod() |
|
519 | main_mod = self.shell.new_main_mod() | |
524 | prog_ns = main_mod.__dict__ |
|
520 | prog_ns = main_mod.__dict__ | |
525 | prog_ns['__name__'] = name |
|
521 | prog_ns['__name__'] = name | |
526 |
|
522 | |||
527 | # Since '%run foo' emulates 'python foo.py' at the cmd line, we must |
|
523 | # Since '%run foo' emulates 'python foo.py' at the cmd line, we must | |
528 | # set the __file__ global in the script's namespace |
|
524 | # set the __file__ global in the script's namespace | |
529 | prog_ns['__file__'] = filename |
|
525 | prog_ns['__file__'] = filename | |
530 |
|
526 | |||
531 | # pickle fix. See interactiveshell for an explanation. But we need to |
|
527 | # pickle fix. See interactiveshell for an explanation. But we need to | |
532 | # make sure that, if we overwrite __main__, we replace it at the end |
|
528 | # make sure that, if we overwrite __main__, we replace it at the end | |
533 | main_mod_name = prog_ns['__name__'] |
|
529 | main_mod_name = prog_ns['__name__'] | |
534 |
|
530 | |||
535 | if main_mod_name == '__main__': |
|
531 | if main_mod_name == '__main__': | |
536 | restore_main = sys.modules['__main__'] |
|
532 | restore_main = sys.modules['__main__'] | |
537 | else: |
|
533 | else: | |
538 | restore_main = False |
|
534 | restore_main = False | |
539 |
|
535 | |||
540 | # This needs to be undone at the end to prevent holding references to |
|
536 | # This needs to be undone at the end to prevent holding references to | |
541 | # every single object ever created. |
|
537 | # every single object ever created. | |
542 | sys.modules[main_mod_name] = main_mod |
|
538 | sys.modules[main_mod_name] = main_mod | |
543 |
|
539 | |||
|
540 | if 'p' in opts or 'd' in opts: | |||
|
541 | if 'm' in opts: | |||
|
542 | code = 'run_module(modulename, prog_ns)' | |||
|
543 | code_ns = { | |||
|
544 | 'run_module': self.shell.safe_run_module, | |||
|
545 | 'prog_ns': prog_ns, | |||
|
546 | 'modulename': modulename, | |||
|
547 | } | |||
|
548 | else: | |||
|
549 | code = 'execfile(filename, prog_ns)' | |||
|
550 | code_ns = { | |||
|
551 | 'execfile': self.shell.safe_execfile, | |||
|
552 | 'prog_ns': prog_ns, | |||
|
553 | 'filename': get_py_filename(filename), | |||
|
554 | } | |||
|
555 | ||||
544 | try: |
|
556 | try: | |
545 | stats = None |
|
557 | stats = None | |
546 | with self.shell.readline_no_record: |
|
558 | with self.shell.readline_no_record: | |
547 | if 'p' in opts: |
|
559 | if 'p' in opts: | |
548 |
stats = self. |
|
560 | stats = self._run_with_profiler(code, opts, code_ns) | |
549 | else: |
|
561 | else: | |
550 | if 'd' in opts: |
|
562 | if 'd' in opts: | |
551 |
|
|
563 | self._run_with_debugger( | |
552 | # reset Breakpoint state, which is moronically kept |
|
564 | code, code_ns, opts.get('b', ['1'])[0], filename) | |
553 | # in a class |
|
|||
554 | bdb.Breakpoint.next = 1 |
|
|||
555 | bdb.Breakpoint.bplist = {} |
|
|||
556 | bdb.Breakpoint.bpbynumber = [None] |
|
|||
557 | # Set an initial breakpoint to stop execution |
|
|||
558 | maxtries = 10 |
|
|||
559 | bp_file, bp_line = parse_breakpoint(opts.get('b', ['1'])[0], filename) |
|
|||
560 | checkline = deb.checkline(bp_file, bp_line) |
|
|||
561 | if not checkline: |
|
|||
562 | for bp in range(bp_line + 1, bp_line + maxtries + 1): |
|
|||
563 | if deb.checkline(bp_file, bp): |
|
|||
564 | break |
|
|||
565 | else: |
|
|||
566 | msg = ("\nI failed to find a valid line to set " |
|
|||
567 | "a breakpoint\n" |
|
|||
568 | "after trying up to line: %s.\n" |
|
|||
569 | "Please set a valid breakpoint manually " |
|
|||
570 | "with the -b option." % bp) |
|
|||
571 | error(msg) |
|
|||
572 | return |
|
|||
573 | # if we find a good linenumber, set the breakpoint |
|
|||
574 | deb.do_break('%s:%s' % (bp_file, bp_line)) |
|
|||
575 |
|
||||
576 | # Mimic Pdb._runscript(...) |
|
|||
577 | deb._wait_for_mainpyfile = True |
|
|||
578 | deb.mainpyfile = deb.canonic(filename) |
|
|||
579 |
|
||||
580 | # Start file run |
|
|||
581 | print "NOTE: Enter 'c' at the", |
|
|||
582 | print "%s prompt to start your script." % deb.prompt |
|
|||
583 | ns = {'execfile': py3compat.execfile, 'prog_ns': prog_ns} |
|
|||
584 | try: |
|
|||
585 | #save filename so it can be used by methods on the deb object |
|
|||
586 | deb._exec_filename = filename |
|
|||
587 | deb.run('execfile("%s", prog_ns)' % filename, ns) |
|
|||
588 |
|
||||
589 | except: |
|
|||
590 | etype, value, tb = sys.exc_info() |
|
|||
591 | # Skip three frames in the traceback: the %run one, |
|
|||
592 | # one inside bdb.py, and the command-line typed by the |
|
|||
593 | # user (run by exec in pdb itself). |
|
|||
594 | self.shell.InteractiveTB(etype, value, tb, tb_offset=3) |
|
|||
595 | else: |
|
565 | else: | |
596 |
if |
|
566 | if 'm' in opts: | |
597 |
|
|
567 | def run(): | |
598 | if runner is None: |
|
568 | self.shell.safe_run_module(modulename, prog_ns) | |
599 |
|
|
569 | else: | |
|
570 | if runner is None: | |||
|
571 | runner = self.default_runner | |||
|
572 | if runner is None: | |||
|
573 | runner = self.shell.safe_execfile | |||
|
574 | ||||
|
575 | def run(): | |||
|
576 | runner(filename, prog_ns, prog_ns, | |||
|
577 | exit_ignore=exit_ignore) | |||
|
578 | ||||
600 | if 't' in opts: |
|
579 | if 't' in opts: | |
601 | # timed execution |
|
580 | # timed execution | |
602 | try: |
|
581 | try: | |
603 | nruns = int(opts['N'][0]) |
|
582 | nruns = int(opts['N'][0]) | |
604 | if nruns < 1: |
|
583 | if nruns < 1: | |
605 | error('Number of runs must be >=1') |
|
584 | error('Number of runs must be >=1') | |
606 | return |
|
585 | return | |
607 | except (KeyError): |
|
586 | except (KeyError): | |
608 | nruns = 1 |
|
587 | nruns = 1 | |
609 |
|
|
588 | self._run_with_timing(run, nruns) | |
610 | if nruns == 1: |
|
|||
611 | t0 = clock2() |
|
|||
612 | runner(filename, prog_ns, prog_ns, |
|
|||
613 | exit_ignore=exit_ignore) |
|
|||
614 | t1 = clock2() |
|
|||
615 | t_usr = t1[0] - t0[0] |
|
|||
616 | t_sys = t1[1] - t0[1] |
|
|||
617 | print "\nIPython CPU timings (estimated):" |
|
|||
618 | print " User : %10.2f s." % t_usr |
|
|||
619 | print " System : %10.2f s." % t_sys |
|
|||
620 | else: |
|
|||
621 | runs = range(nruns) |
|
|||
622 | t0 = clock2() |
|
|||
623 | for nr in runs: |
|
|||
624 | runner(filename, prog_ns, prog_ns, |
|
|||
625 | exit_ignore=exit_ignore) |
|
|||
626 | t1 = clock2() |
|
|||
627 | t_usr = t1[0] - t0[0] |
|
|||
628 | t_sys = t1[1] - t0[1] |
|
|||
629 | print "\nIPython CPU timings (estimated):" |
|
|||
630 | print "Total runs performed:", nruns |
|
|||
631 | print " Times : %10s %10s" % ('Total', 'Per run') |
|
|||
632 | print " User : %10.2f s, %10.2f s." % (t_usr, t_usr / nruns) |
|
|||
633 | print " System : %10.2f s, %10.2f s." % (t_sys, t_sys / nruns) |
|
|||
634 | twall1 = time.time() |
|
|||
635 | print "Wall time: %10.2f s." % (twall1 - twall0) |
|
|||
636 |
|
||||
637 | else: |
|
589 | else: | |
638 | # regular execution |
|
590 | # regular execution | |
639 | runner(filename, prog_ns, prog_ns, exit_ignore=exit_ignore) |
|
591 | run() | |
640 |
|
592 | |||
641 | if 'i' in opts: |
|
593 | if 'i' in opts: | |
642 | self.shell.user_ns['__name__'] = __name__save |
|
594 | self.shell.user_ns['__name__'] = __name__save | |
643 | else: |
|
595 | else: | |
644 | # The shell MUST hold a reference to prog_ns so after %run |
|
596 | # The shell MUST hold a reference to prog_ns so after %run | |
645 | # exits, the python deletion mechanism doesn't zero it out |
|
597 | # exits, the python deletion mechanism doesn't zero it out | |
646 | # (leaving dangling references). |
|
598 | # (leaving dangling references). | |
647 | self.shell.cache_main_mod(prog_ns, filename) |
|
599 | self.shell.cache_main_mod(prog_ns, filename) | |
648 | # update IPython interactive namespace |
|
600 | # update IPython interactive namespace | |
649 |
|
601 | |||
650 | # Some forms of read errors on the file may mean the |
|
602 | # Some forms of read errors on the file may mean the | |
651 | # __name__ key was never set; using pop we don't have to |
|
603 | # __name__ key was never set; using pop we don't have to | |
652 | # worry about a possible KeyError. |
|
604 | # worry about a possible KeyError. | |
653 | prog_ns.pop('__name__', None) |
|
605 | prog_ns.pop('__name__', None) | |
654 |
|
606 | |||
655 | with preserve_keys(self.shell.user_ns, '__file__'): |
|
607 | with preserve_keys(self.shell.user_ns, '__file__'): | |
656 | self.shell.user_ns.update(prog_ns) |
|
608 | self.shell.user_ns.update(prog_ns) | |
657 | finally: |
|
609 | finally: | |
658 | # It's a bit of a mystery why, but __builtins__ can change from |
|
610 | # It's a bit of a mystery why, but __builtins__ can change from | |
659 | # being a module to becoming a dict missing some key data after |
|
611 | # being a module to becoming a dict missing some key data after | |
660 | # %run. As best I can see, this is NOT something IPython is doing |
|
612 | # %run. As best I can see, this is NOT something IPython is doing | |
661 | # at all, and similar problems have been reported before: |
|
613 | # at all, and similar problems have been reported before: | |
662 | # http://coding.derkeiler.com/Archive/Python/comp.lang.python/2004-10/0188.html |
|
614 | # http://coding.derkeiler.com/Archive/Python/comp.lang.python/2004-10/0188.html | |
663 | # Since this seems to be done by the interpreter itself, the best |
|
615 | # Since this seems to be done by the interpreter itself, the best | |
664 | # we can do is to at least restore __builtins__ for the user on |
|
616 | # we can do is to at least restore __builtins__ for the user on | |
665 | # exit. |
|
617 | # exit. | |
666 | self.shell.user_ns['__builtins__'] = builtin_mod |
|
618 | self.shell.user_ns['__builtins__'] = builtin_mod | |
667 |
|
619 | |||
668 | # Ensure key global structures are restored |
|
620 | # Ensure key global structures are restored | |
669 | sys.argv = save_argv |
|
621 | sys.argv = save_argv | |
670 | if restore_main: |
|
622 | if restore_main: | |
671 | sys.modules['__main__'] = restore_main |
|
623 | sys.modules['__main__'] = restore_main | |
672 | else: |
|
624 | else: | |
673 | # Remove from sys.modules the reference to main_mod we'd |
|
625 | # Remove from sys.modules the reference to main_mod we'd | |
674 | # added. Otherwise it will trap references to objects |
|
626 | # added. Otherwise it will trap references to objects | |
675 | # contained therein. |
|
627 | # contained therein. | |
676 | del sys.modules[main_mod_name] |
|
628 | del sys.modules[main_mod_name] | |
677 |
|
629 | |||
678 | return stats |
|
630 | return stats | |
679 |
|
631 | |||
|
632 | def _run_with_debugger(self, code, code_ns, break_point, filename): | |||
|
633 | """ | |||
|
634 | Run `code` in debugger with a break point. | |||
|
635 | ||||
|
636 | Parameters | |||
|
637 | ---------- | |||
|
638 | code : str | |||
|
639 | Code to execute. | |||
|
640 | code_ns : dict | |||
|
641 | A namespace in which `code` is executed. | |||
|
642 | break_point : str | |||
|
643 | Line number in the file specified by `filename` argument | |||
|
644 | or a string in the format ``file:line``. In the latter | |||
|
645 | case, `filename` is ignored. | |||
|
646 | See also :func:`.parse_breakpoint`. | |||
|
647 | filename : str | |||
|
648 | Path to the file in which break point is specified. | |||
|
649 | ||||
|
650 | Raises | |||
|
651 | ------ | |||
|
652 | UsageError | |||
|
653 | If no meaningful break point is given by `break_point` and | |||
|
654 | `filename`. | |||
|
655 | ||||
|
656 | """ | |||
|
657 | deb = debugger.Pdb(self.shell.colors) | |||
|
658 | # reset Breakpoint state, which is moronically kept | |||
|
659 | # in a class | |||
|
660 | bdb.Breakpoint.next = 1 | |||
|
661 | bdb.Breakpoint.bplist = {} | |||
|
662 | bdb.Breakpoint.bpbynumber = [None] | |||
|
663 | # Set an initial breakpoint to stop execution | |||
|
664 | maxtries = 10 | |||
|
665 | bp_file, bp_line = parse_breakpoint(break_point, filename) | |||
|
666 | checkline = deb.checkline(bp_file, bp_line) | |||
|
667 | if not checkline: | |||
|
668 | for bp in range(bp_line + 1, bp_line + maxtries + 1): | |||
|
669 | if deb.checkline(bp_file, bp): | |||
|
670 | break | |||
|
671 | else: | |||
|
672 | msg = ("\nI failed to find a valid line to set " | |||
|
673 | "a breakpoint\n" | |||
|
674 | "after trying up to line: %s.\n" | |||
|
675 | "Please set a valid breakpoint manually " | |||
|
676 | "with the -b option." % bp) | |||
|
677 | raise UsageError(msg) | |||
|
678 | # if we find a good linenumber, set the breakpoint | |||
|
679 | deb.do_break('%s:%s' % (bp_file, bp_line)) | |||
|
680 | ||||
|
681 | # Mimic Pdb._runscript(...) | |||
|
682 | deb._wait_for_mainpyfile = True | |||
|
683 | deb.mainpyfile = deb.canonic(filename) | |||
|
684 | ||||
|
685 | # Start file run | |||
|
686 | print "NOTE: Enter 'c' at the", | |||
|
687 | print "%s prompt to start your script." % deb.prompt | |||
|
688 | try: | |||
|
689 | #save filename so it can be used by methods on the deb object | |||
|
690 | deb._exec_filename = filename | |||
|
691 | deb.run(code, code_ns) | |||
|
692 | ||||
|
693 | except: | |||
|
694 | etype, value, tb = sys.exc_info() | |||
|
695 | # Skip three frames in the traceback: the %run one, | |||
|
696 | # one inside bdb.py, and the command-line typed by the | |||
|
697 | # user (run by exec in pdb itself). | |||
|
698 | self.shell.InteractiveTB(etype, value, tb, tb_offset=3) | |||
|
699 | ||||
|
700 | @staticmethod | |||
|
701 | def _run_with_timing(run, nruns): | |||
|
702 | """ | |||
|
703 | Run function `run` and print timing information. | |||
|
704 | ||||
|
705 | Parameters | |||
|
706 | ---------- | |||
|
707 | run : callable | |||
|
708 | Any callable object which takes no argument. | |||
|
709 | nruns : int | |||
|
710 | Number of times to execute `run`. | |||
|
711 | ||||
|
712 | """ | |||
|
713 | twall0 = time.time() | |||
|
714 | if nruns == 1: | |||
|
715 | t0 = clock2() | |||
|
716 | run() | |||
|
717 | t1 = clock2() | |||
|
718 | t_usr = t1[0] - t0[0] | |||
|
719 | t_sys = t1[1] - t0[1] | |||
|
720 | print "\nIPython CPU timings (estimated):" | |||
|
721 | print " User : %10.2f s." % t_usr | |||
|
722 | print " System : %10.2f s." % t_sys | |||
|
723 | else: | |||
|
724 | runs = range(nruns) | |||
|
725 | t0 = clock2() | |||
|
726 | for nr in runs: | |||
|
727 | run() | |||
|
728 | t1 = clock2() | |||
|
729 | t_usr = t1[0] - t0[0] | |||
|
730 | t_sys = t1[1] - t0[1] | |||
|
731 | print "\nIPython CPU timings (estimated):" | |||
|
732 | print "Total runs performed:", nruns | |||
|
733 | print " Times : %10s %10s" % ('Total', 'Per run') | |||
|
734 | print " User : %10.2f s, %10.2f s." % (t_usr, t_usr / nruns) | |||
|
735 | print " System : %10.2f s, %10.2f s." % (t_sys, t_sys / nruns) | |||
|
736 | twall1 = time.time() | |||
|
737 | print "Wall time: %10.2f s." % (twall1 - twall0) | |||
|
738 | ||||
680 | @skip_doctest |
|
739 | @skip_doctest | |
681 | @line_cell_magic |
|
740 | @line_cell_magic | |
682 | def timeit(self, line='', cell=None): |
|
741 | def timeit(self, line='', cell=None): | |
683 | """Time execution of a Python statement or expression |
|
742 | """Time execution of a Python statement or expression | |
684 |
|
743 | |||
685 | Usage, in line mode: |
|
744 | Usage, in line mode: | |
686 | %timeit [-n<N> -r<R> [-t|-c]] statement |
|
745 | %timeit [-n<N> -r<R> [-t|-c]] statement | |
687 | or in cell mode: |
|
746 | or in cell mode: | |
688 | %%timeit [-n<N> -r<R> [-t|-c]] setup_code |
|
747 | %%timeit [-n<N> -r<R> [-t|-c]] setup_code | |
689 | code |
|
748 | code | |
690 | code... |
|
749 | code... | |
691 |
|
750 | |||
692 | Time execution of a Python statement or expression using the timeit |
|
751 | Time execution of a Python statement or expression using the timeit | |
693 | module. This function can be used both as a line and cell magic: |
|
752 | module. This function can be used both as a line and cell magic: | |
694 |
|
753 | |||
695 | - In line mode you can time a single-line statement (though multiple |
|
754 | - In line mode you can time a single-line statement (though multiple | |
696 | ones can be chained with using semicolons). |
|
755 | ones can be chained with using semicolons). | |
697 |
|
756 | |||
698 | - In cell mode, the statement in the first line is used as setup code |
|
757 | - In cell mode, the statement in the first line is used as setup code | |
699 | (executed but not timed) and the body of the cell is timed. The cell |
|
758 | (executed but not timed) and the body of the cell is timed. The cell | |
700 | body has access to any variables created in the setup code. |
|
759 | body has access to any variables created in the setup code. | |
701 |
|
760 | |||
702 | Options: |
|
761 | Options: | |
703 | -n<N>: execute the given statement <N> times in a loop. If this value |
|
762 | -n<N>: execute the given statement <N> times in a loop. If this value | |
704 | is not given, a fitting value is chosen. |
|
763 | is not given, a fitting value is chosen. | |
705 |
|
764 | |||
706 | -r<R>: repeat the loop iteration <R> times and take the best result. |
|
765 | -r<R>: repeat the loop iteration <R> times and take the best result. | |
707 | Default: 3 |
|
766 | Default: 3 | |
708 |
|
767 | |||
709 | -t: use time.time to measure the time, which is the default on Unix. |
|
768 | -t: use time.time to measure the time, which is the default on Unix. | |
710 | This function measures wall time. |
|
769 | This function measures wall time. | |
711 |
|
770 | |||
712 | -c: use time.clock to measure the time, which is the default on |
|
771 | -c: use time.clock to measure the time, which is the default on | |
713 | Windows and measures wall time. On Unix, resource.getrusage is used |
|
772 | Windows and measures wall time. On Unix, resource.getrusage is used | |
714 | instead and returns the CPU user time. |
|
773 | instead and returns the CPU user time. | |
715 |
|
774 | |||
716 | -p<P>: use a precision of <P> digits to display the timing result. |
|
775 | -p<P>: use a precision of <P> digits to display the timing result. | |
717 | Default: 3 |
|
776 | Default: 3 | |
718 |
|
777 | |||
719 |
|
778 | |||
720 | Examples |
|
779 | Examples | |
721 | -------- |
|
780 | -------- | |
722 | :: |
|
781 | :: | |
723 |
|
782 | |||
724 | In [1]: %timeit pass |
|
783 | In [1]: %timeit pass | |
725 | 10000000 loops, best of 3: 53.3 ns per loop |
|
784 | 10000000 loops, best of 3: 53.3 ns per loop | |
726 |
|
785 | |||
727 | In [2]: u = None |
|
786 | In [2]: u = None | |
728 |
|
787 | |||
729 | In [3]: %timeit u is None |
|
788 | In [3]: %timeit u is None | |
730 | 10000000 loops, best of 3: 184 ns per loop |
|
789 | 10000000 loops, best of 3: 184 ns per loop | |
731 |
|
790 | |||
732 | In [4]: %timeit -r 4 u == None |
|
791 | In [4]: %timeit -r 4 u == None | |
733 | 1000000 loops, best of 4: 242 ns per loop |
|
792 | 1000000 loops, best of 4: 242 ns per loop | |
734 |
|
793 | |||
735 | In [5]: import time |
|
794 | In [5]: import time | |
736 |
|
795 | |||
737 | In [6]: %timeit -n1 time.sleep(2) |
|
796 | In [6]: %timeit -n1 time.sleep(2) | |
738 | 1 loops, best of 3: 2 s per loop |
|
797 | 1 loops, best of 3: 2 s per loop | |
739 |
|
798 | |||
740 |
|
799 | |||
741 | The times reported by %timeit will be slightly higher than those |
|
800 | The times reported by %timeit will be slightly higher than those | |
742 | reported by the timeit.py script when variables are accessed. This is |
|
801 | reported by the timeit.py script when variables are accessed. This is | |
743 | due to the fact that %timeit executes the statement in the namespace |
|
802 | due to the fact that %timeit executes the statement in the namespace | |
744 | of the shell, compared with timeit.py, which uses a single setup |
|
803 | of the shell, compared with timeit.py, which uses a single setup | |
745 | statement to import function or create variables. Generally, the bias |
|
804 | statement to import function or create variables. Generally, the bias | |
746 | does not matter as long as results from timeit.py are not mixed with |
|
805 | does not matter as long as results from timeit.py are not mixed with | |
747 | those from %timeit.""" |
|
806 | those from %timeit.""" | |
748 |
|
807 | |||
749 | import timeit |
|
808 | import timeit | |
750 |
|
809 | |||
751 | opts, stmt = self.parse_options(line,'n:r:tcp:', |
|
810 | opts, stmt = self.parse_options(line,'n:r:tcp:', | |
752 | posix=False, strict=False) |
|
811 | posix=False, strict=False) | |
753 | if stmt == "" and cell is None: |
|
812 | if stmt == "" and cell is None: | |
754 | return |
|
813 | return | |
755 |
|
814 | |||
756 | timefunc = timeit.default_timer |
|
815 | timefunc = timeit.default_timer | |
757 | number = int(getattr(opts, "n", 0)) |
|
816 | number = int(getattr(opts, "n", 0)) | |
758 | repeat = int(getattr(opts, "r", timeit.default_repeat)) |
|
817 | repeat = int(getattr(opts, "r", timeit.default_repeat)) | |
759 | precision = int(getattr(opts, "p", 3)) |
|
818 | precision = int(getattr(opts, "p", 3)) | |
760 | if hasattr(opts, "t"): |
|
819 | if hasattr(opts, "t"): | |
761 | timefunc = time.time |
|
820 | timefunc = time.time | |
762 | if hasattr(opts, "c"): |
|
821 | if hasattr(opts, "c"): | |
763 | timefunc = clock |
|
822 | timefunc = clock | |
764 |
|
823 | |||
765 | timer = timeit.Timer(timer=timefunc) |
|
824 | timer = timeit.Timer(timer=timefunc) | |
766 | # this code has tight coupling to the inner workings of timeit.Timer, |
|
825 | # this code has tight coupling to the inner workings of timeit.Timer, | |
767 | # but is there a better way to achieve that the code stmt has access |
|
826 | # but is there a better way to achieve that the code stmt has access | |
768 | # to the shell namespace? |
|
827 | # to the shell namespace? | |
769 | transform = self.shell.input_splitter.transform_cell |
|
828 | transform = self.shell.input_splitter.transform_cell | |
770 |
|
829 | |||
771 | if cell is None: |
|
830 | if cell is None: | |
772 | # called as line magic |
|
831 | # called as line magic | |
773 | ast_setup = ast.parse("pass") |
|
832 | ast_setup = ast.parse("pass") | |
774 | ast_stmt = ast.parse(transform(stmt)) |
|
833 | ast_stmt = ast.parse(transform(stmt)) | |
775 | else: |
|
834 | else: | |
776 | ast_setup = ast.parse(transform(stmt)) |
|
835 | ast_setup = ast.parse(transform(stmt)) | |
777 | ast_stmt = ast.parse(transform(cell)) |
|
836 | ast_stmt = ast.parse(transform(cell)) | |
778 |
|
837 | |||
779 | ast_setup = self.shell.transform_ast(ast_setup) |
|
838 | ast_setup = self.shell.transform_ast(ast_setup) | |
780 | ast_stmt = self.shell.transform_ast(ast_stmt) |
|
839 | ast_stmt = self.shell.transform_ast(ast_stmt) | |
781 |
|
840 | |||
782 | # This codestring is taken from timeit.template - we fill it in as an |
|
841 | # This codestring is taken from timeit.template - we fill it in as an | |
783 | # AST, so that we can apply our AST transformations to the user code |
|
842 | # AST, so that we can apply our AST transformations to the user code | |
784 | # without affecting the timing code. |
|
843 | # without affecting the timing code. | |
785 | timeit_ast_template = ast.parse('def inner(_it, _timer):\n' |
|
844 | timeit_ast_template = ast.parse('def inner(_it, _timer):\n' | |
786 | ' setup\n' |
|
845 | ' setup\n' | |
787 | ' _t0 = _timer()\n' |
|
846 | ' _t0 = _timer()\n' | |
788 | ' for _i in _it:\n' |
|
847 | ' for _i in _it:\n' | |
789 | ' stmt\n' |
|
848 | ' stmt\n' | |
790 | ' _t1 = _timer()\n' |
|
849 | ' _t1 = _timer()\n' | |
791 | ' return _t1 - _t0\n') |
|
850 | ' return _t1 - _t0\n') | |
792 |
|
851 | |||
793 | class TimeitTemplateFiller(ast.NodeTransformer): |
|
852 | class TimeitTemplateFiller(ast.NodeTransformer): | |
794 | "This is quite tightly tied to the template definition above." |
|
853 | "This is quite tightly tied to the template definition above." | |
795 | def visit_FunctionDef(self, node): |
|
854 | def visit_FunctionDef(self, node): | |
796 | "Fill in the setup statement" |
|
855 | "Fill in the setup statement" | |
797 | self.generic_visit(node) |
|
856 | self.generic_visit(node) | |
798 | if node.name == "inner": |
|
857 | if node.name == "inner": | |
799 | node.body[:1] = ast_setup.body |
|
858 | node.body[:1] = ast_setup.body | |
800 |
|
859 | |||
801 | return node |
|
860 | return node | |
802 |
|
861 | |||
803 | def visit_For(self, node): |
|
862 | def visit_For(self, node): | |
804 | "Fill in the statement to be timed" |
|
863 | "Fill in the statement to be timed" | |
805 | if getattr(getattr(node.body[0], 'value', None), 'id', None) == 'stmt': |
|
864 | if getattr(getattr(node.body[0], 'value', None), 'id', None) == 'stmt': | |
806 | node.body = ast_stmt.body |
|
865 | node.body = ast_stmt.body | |
807 | return node |
|
866 | return node | |
808 |
|
867 | |||
809 | timeit_ast = TimeitTemplateFiller().visit(timeit_ast_template) |
|
868 | timeit_ast = TimeitTemplateFiller().visit(timeit_ast_template) | |
810 | timeit_ast = ast.fix_missing_locations(timeit_ast) |
|
869 | timeit_ast = ast.fix_missing_locations(timeit_ast) | |
811 |
|
870 | |||
812 | # Track compilation time so it can be reported if too long |
|
871 | # Track compilation time so it can be reported if too long | |
813 | # Minimum time above which compilation time will be reported |
|
872 | # Minimum time above which compilation time will be reported | |
814 | tc_min = 0.1 |
|
873 | tc_min = 0.1 | |
815 |
|
874 | |||
816 | t0 = clock() |
|
875 | t0 = clock() | |
817 | code = compile(timeit_ast, "<magic-timeit>", "exec") |
|
876 | code = compile(timeit_ast, "<magic-timeit>", "exec") | |
818 | tc = clock()-t0 |
|
877 | tc = clock()-t0 | |
819 |
|
878 | |||
820 | ns = {} |
|
879 | ns = {} | |
821 | exec code in self.shell.user_ns, ns |
|
880 | exec code in self.shell.user_ns, ns | |
822 | timer.inner = ns["inner"] |
|
881 | timer.inner = ns["inner"] | |
823 |
|
882 | |||
824 | if number == 0: |
|
883 | if number == 0: | |
825 | # determine number so that 0.2 <= total time < 2.0 |
|
884 | # determine number so that 0.2 <= total time < 2.0 | |
826 | number = 1 |
|
885 | number = 1 | |
827 | for i in range(1, 10): |
|
886 | for i in range(1, 10): | |
828 | if timer.timeit(number) >= 0.2: |
|
887 | if timer.timeit(number) >= 0.2: | |
829 | break |
|
888 | break | |
830 | number *= 10 |
|
889 | number *= 10 | |
831 |
|
890 | |||
832 | best = min(timer.repeat(repeat, number)) / number |
|
891 | best = min(timer.repeat(repeat, number)) / number | |
833 |
|
892 | |||
834 | print u"%d loops, best of %d: %s per loop" % (number, repeat, |
|
893 | print u"%d loops, best of %d: %s per loop" % (number, repeat, | |
835 | _format_time(best, precision)) |
|
894 | _format_time(best, precision)) | |
836 | if tc > tc_min: |
|
895 | if tc > tc_min: | |
837 | print "Compiler time: %.2f s" % tc |
|
896 | print "Compiler time: %.2f s" % tc | |
838 |
|
897 | |||
839 | @skip_doctest |
|
898 | @skip_doctest | |
840 | @needs_local_scope |
|
899 | @needs_local_scope | |
841 | @line_cell_magic |
|
900 | @line_cell_magic | |
842 | def time(self,line='', cell=None, local_ns=None): |
|
901 | def time(self,line='', cell=None, local_ns=None): | |
843 | """Time execution of a Python statement or expression. |
|
902 | """Time execution of a Python statement or expression. | |
844 |
|
903 | |||
845 | The CPU and wall clock times are printed, and the value of the |
|
904 | The CPU and wall clock times are printed, and the value of the | |
846 | expression (if any) is returned. Note that under Win32, system time |
|
905 | expression (if any) is returned. Note that under Win32, system time | |
847 | is always reported as 0, since it can not be measured. |
|
906 | is always reported as 0, since it can not be measured. | |
848 |
|
907 | |||
849 | This function can be used both as a line and cell magic: |
|
908 | This function can be used both as a line and cell magic: | |
850 |
|
909 | |||
851 | - In line mode you can time a single-line statement (though multiple |
|
910 | - In line mode you can time a single-line statement (though multiple | |
852 | ones can be chained with using semicolons). |
|
911 | ones can be chained with using semicolons). | |
853 |
|
912 | |||
854 | - In cell mode, you can time the cell body (a directly |
|
913 | - In cell mode, you can time the cell body (a directly | |
855 | following statement raises an error). |
|
914 | following statement raises an error). | |
856 |
|
915 | |||
857 | This function provides very basic timing functionality. Use the timeit |
|
916 | This function provides very basic timing functionality. Use the timeit | |
858 | magic for more controll over the measurement. |
|
917 | magic for more controll over the measurement. | |
859 |
|
918 | |||
860 | Examples |
|
919 | Examples | |
861 | -------- |
|
920 | -------- | |
862 | :: |
|
921 | :: | |
863 |
|
922 | |||
864 | In [1]: %time 2**128 |
|
923 | In [1]: %time 2**128 | |
865 | CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s |
|
924 | CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s | |
866 | Wall time: 0.00 |
|
925 | Wall time: 0.00 | |
867 | Out[1]: 340282366920938463463374607431768211456L |
|
926 | Out[1]: 340282366920938463463374607431768211456L | |
868 |
|
927 | |||
869 | In [2]: n = 1000000 |
|
928 | In [2]: n = 1000000 | |
870 |
|
929 | |||
871 | In [3]: %time sum(range(n)) |
|
930 | In [3]: %time sum(range(n)) | |
872 | CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s |
|
931 | CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s | |
873 | Wall time: 1.37 |
|
932 | Wall time: 1.37 | |
874 | Out[3]: 499999500000L |
|
933 | Out[3]: 499999500000L | |
875 |
|
934 | |||
876 | In [4]: %time print 'hello world' |
|
935 | In [4]: %time print 'hello world' | |
877 | hello world |
|
936 | hello world | |
878 | CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s |
|
937 | CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s | |
879 | Wall time: 0.00 |
|
938 | Wall time: 0.00 | |
880 |
|
939 | |||
881 | Note that the time needed by Python to compile the given expression |
|
940 | Note that the time needed by Python to compile the given expression | |
882 | will be reported if it is more than 0.1s. In this example, the |
|
941 | will be reported if it is more than 0.1s. In this example, the | |
883 | actual exponentiation is done by Python at compilation time, so while |
|
942 | actual exponentiation is done by Python at compilation time, so while | |
884 | the expression can take a noticeable amount of time to compute, that |
|
943 | the expression can take a noticeable amount of time to compute, that | |
885 | time is purely due to the compilation: |
|
944 | time is purely due to the compilation: | |
886 |
|
945 | |||
887 | In [5]: %time 3**9999; |
|
946 | In [5]: %time 3**9999; | |
888 | CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s |
|
947 | CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s | |
889 | Wall time: 0.00 s |
|
948 | Wall time: 0.00 s | |
890 |
|
949 | |||
891 | In [6]: %time 3**999999; |
|
950 | In [6]: %time 3**999999; | |
892 | CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s |
|
951 | CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s | |
893 | Wall time: 0.00 s |
|
952 | Wall time: 0.00 s | |
894 | Compiler : 0.78 s |
|
953 | Compiler : 0.78 s | |
895 | """ |
|
954 | """ | |
896 |
|
955 | |||
897 | # fail immediately if the given expression can't be compiled |
|
956 | # fail immediately if the given expression can't be compiled | |
898 |
|
957 | |||
899 | if line and cell: |
|
958 | if line and cell: | |
900 | raise UsageError("Can't use statement directly after '%%time'!") |
|
959 | raise UsageError("Can't use statement directly after '%%time'!") | |
901 |
|
960 | |||
902 | if cell: |
|
961 | if cell: | |
903 | expr = self.shell.prefilter(cell,False) |
|
962 | expr = self.shell.prefilter(cell,False) | |
904 | else: |
|
963 | else: | |
905 | expr = self.shell.prefilter(line,False) |
|
964 | expr = self.shell.prefilter(line,False) | |
906 |
|
965 | |||
907 | # Minimum time above which parse time will be reported |
|
966 | # Minimum time above which parse time will be reported | |
908 | tp_min = 0.1 |
|
967 | tp_min = 0.1 | |
909 |
|
968 | |||
910 | t0 = clock() |
|
969 | t0 = clock() | |
911 | expr_ast = ast.parse(expr) |
|
970 | expr_ast = ast.parse(expr) | |
912 | tp = clock()-t0 |
|
971 | tp = clock()-t0 | |
913 |
|
972 | |||
914 | # Apply AST transformations |
|
973 | # Apply AST transformations | |
915 | expr_ast = self.shell.transform_ast(expr_ast) |
|
974 | expr_ast = self.shell.transform_ast(expr_ast) | |
916 |
|
975 | |||
917 | # Minimum time above which compilation time will be reported |
|
976 | # Minimum time above which compilation time will be reported | |
918 | tc_min = 0.1 |
|
977 | tc_min = 0.1 | |
919 |
|
978 | |||
920 | if len(expr_ast.body)==1 and isinstance(expr_ast.body[0], ast.Expr): |
|
979 | if len(expr_ast.body)==1 and isinstance(expr_ast.body[0], ast.Expr): | |
921 | mode = 'eval' |
|
980 | mode = 'eval' | |
922 | source = '<timed eval>' |
|
981 | source = '<timed eval>' | |
923 | expr_ast = ast.Expression(expr_ast.body[0].value) |
|
982 | expr_ast = ast.Expression(expr_ast.body[0].value) | |
924 | else: |
|
983 | else: | |
925 | mode = 'exec' |
|
984 | mode = 'exec' | |
926 | source = '<timed exec>' |
|
985 | source = '<timed exec>' | |
927 | t0 = clock() |
|
986 | t0 = clock() | |
928 | code = compile(expr_ast, source, mode) |
|
987 | code = compile(expr_ast, source, mode) | |
929 | tc = clock()-t0 |
|
988 | tc = clock()-t0 | |
930 |
|
989 | |||
931 | # skew measurement as little as possible |
|
990 | # skew measurement as little as possible | |
932 | glob = self.shell.user_ns |
|
991 | glob = self.shell.user_ns | |
933 | wtime = time.time |
|
992 | wtime = time.time | |
934 | # time execution |
|
993 | # time execution | |
935 | wall_st = wtime() |
|
994 | wall_st = wtime() | |
936 | if mode=='eval': |
|
995 | if mode=='eval': | |
937 | st = clock2() |
|
996 | st = clock2() | |
938 | out = eval(code, glob, local_ns) |
|
997 | out = eval(code, glob, local_ns) | |
939 | end = clock2() |
|
998 | end = clock2() | |
940 | else: |
|
999 | else: | |
941 | st = clock2() |
|
1000 | st = clock2() | |
942 | exec code in glob, local_ns |
|
1001 | exec code in glob, local_ns | |
943 | end = clock2() |
|
1002 | end = clock2() | |
944 | out = None |
|
1003 | out = None | |
945 | wall_end = wtime() |
|
1004 | wall_end = wtime() | |
946 | # Compute actual times and report |
|
1005 | # Compute actual times and report | |
947 | wall_time = wall_end-wall_st |
|
1006 | wall_time = wall_end-wall_st | |
948 | cpu_user = end[0]-st[0] |
|
1007 | cpu_user = end[0]-st[0] | |
949 | cpu_sys = end[1]-st[1] |
|
1008 | cpu_sys = end[1]-st[1] | |
950 | cpu_tot = cpu_user+cpu_sys |
|
1009 | cpu_tot = cpu_user+cpu_sys | |
951 | # On windows cpu_sys is always zero, so no new information to the next print |
|
1010 | # On windows cpu_sys is always zero, so no new information to the next print | |
952 | if sys.platform != 'win32': |
|
1011 | if sys.platform != 'win32': | |
953 | print "CPU times: user %s, sys: %s, total: %s" % \ |
|
1012 | print "CPU times: user %s, sys: %s, total: %s" % \ | |
954 | (_format_time(cpu_user),_format_time(cpu_sys),_format_time(cpu_tot)) |
|
1013 | (_format_time(cpu_user),_format_time(cpu_sys),_format_time(cpu_tot)) | |
955 | print "Wall time: %s" % _format_time(wall_time) |
|
1014 | print "Wall time: %s" % _format_time(wall_time) | |
956 | if tc > tc_min: |
|
1015 | if tc > tc_min: | |
957 | print "Compiler : %s" % _format_time(tc) |
|
1016 | print "Compiler : %s" % _format_time(tc) | |
958 | if tp > tp_min: |
|
1017 | if tp > tp_min: | |
959 | print "Parser : %s" % _format_time(tp) |
|
1018 | print "Parser : %s" % _format_time(tp) | |
960 | return out |
|
1019 | return out | |
961 |
|
1020 | |||
962 | @skip_doctest |
|
1021 | @skip_doctest | |
963 | @line_magic |
|
1022 | @line_magic | |
964 | def macro(self, parameter_s=''): |
|
1023 | def macro(self, parameter_s=''): | |
965 | """Define a macro for future re-execution. It accepts ranges of history, |
|
1024 | """Define a macro for future re-execution. It accepts ranges of history, | |
966 | filenames or string objects. |
|
1025 | filenames or string objects. | |
967 |
|
1026 | |||
968 | Usage:\\ |
|
1027 | Usage:\\ | |
969 | %macro [options] name n1-n2 n3-n4 ... n5 .. n6 ... |
|
1028 | %macro [options] name n1-n2 n3-n4 ... n5 .. n6 ... | |
970 |
|
1029 | |||
971 | Options: |
|
1030 | Options: | |
972 |
|
1031 | |||
973 | -r: use 'raw' input. By default, the 'processed' history is used, |
|
1032 | -r: use 'raw' input. By default, the 'processed' history is used, | |
974 | so that magics are loaded in their transformed version to valid |
|
1033 | so that magics are loaded in their transformed version to valid | |
975 | Python. If this option is given, the raw input as typed as the |
|
1034 | Python. If this option is given, the raw input as typed as the | |
976 | command line is used instead. |
|
1035 | command line is used instead. | |
977 |
|
1036 | |||
978 | This will define a global variable called `name` which is a string |
|
1037 | This will define a global variable called `name` which is a string | |
979 | made of joining the slices and lines you specify (n1,n2,... numbers |
|
1038 | made of joining the slices and lines you specify (n1,n2,... numbers | |
980 | above) from your input history into a single string. This variable |
|
1039 | above) from your input history into a single string. This variable | |
981 | acts like an automatic function which re-executes those lines as if |
|
1040 | acts like an automatic function which re-executes those lines as if | |
982 | you had typed them. You just type 'name' at the prompt and the code |
|
1041 | you had typed them. You just type 'name' at the prompt and the code | |
983 | executes. |
|
1042 | executes. | |
984 |
|
1043 | |||
985 | The syntax for indicating input ranges is described in %history. |
|
1044 | The syntax for indicating input ranges is described in %history. | |
986 |
|
1045 | |||
987 | Note: as a 'hidden' feature, you can also use traditional python slice |
|
1046 | Note: as a 'hidden' feature, you can also use traditional python slice | |
988 | notation, where N:M means numbers N through M-1. |
|
1047 | notation, where N:M means numbers N through M-1. | |
989 |
|
1048 | |||
990 | For example, if your history contains (%hist prints it):: |
|
1049 | For example, if your history contains (%hist prints it):: | |
991 |
|
1050 | |||
992 | 44: x=1 |
|
1051 | 44: x=1 | |
993 | 45: y=3 |
|
1052 | 45: y=3 | |
994 | 46: z=x+y |
|
1053 | 46: z=x+y | |
995 | 47: print x |
|
1054 | 47: print x | |
996 | 48: a=5 |
|
1055 | 48: a=5 | |
997 | 49: print 'x',x,'y',y |
|
1056 | 49: print 'x',x,'y',y | |
998 |
|
1057 | |||
999 | you can create a macro with lines 44 through 47 (included) and line 49 |
|
1058 | you can create a macro with lines 44 through 47 (included) and line 49 | |
1000 | called my_macro with:: |
|
1059 | called my_macro with:: | |
1001 |
|
1060 | |||
1002 | In [55]: %macro my_macro 44-47 49 |
|
1061 | In [55]: %macro my_macro 44-47 49 | |
1003 |
|
1062 | |||
1004 | Now, typing `my_macro` (without quotes) will re-execute all this code |
|
1063 | Now, typing `my_macro` (without quotes) will re-execute all this code | |
1005 | in one pass. |
|
1064 | in one pass. | |
1006 |
|
1065 | |||
1007 | You don't need to give the line-numbers in order, and any given line |
|
1066 | You don't need to give the line-numbers in order, and any given line | |
1008 | number can appear multiple times. You can assemble macros with any |
|
1067 | number can appear multiple times. You can assemble macros with any | |
1009 | lines from your input history in any order. |
|
1068 | lines from your input history in any order. | |
1010 |
|
1069 | |||
1011 | The macro is a simple object which holds its value in an attribute, |
|
1070 | The macro is a simple object which holds its value in an attribute, | |
1012 | but IPython's display system checks for macros and executes them as |
|
1071 | but IPython's display system checks for macros and executes them as | |
1013 | code instead of printing them when you type their name. |
|
1072 | code instead of printing them when you type their name. | |
1014 |
|
1073 | |||
1015 | You can view a macro's contents by explicitly printing it with:: |
|
1074 | You can view a macro's contents by explicitly printing it with:: | |
1016 |
|
1075 | |||
1017 | print macro_name |
|
1076 | print macro_name | |
1018 |
|
1077 | |||
1019 | """ |
|
1078 | """ | |
1020 | opts,args = self.parse_options(parameter_s,'r',mode='list') |
|
1079 | opts,args = self.parse_options(parameter_s,'r',mode='list') | |
1021 | if not args: # List existing macros |
|
1080 | if not args: # List existing macros | |
1022 | return sorted(k for k,v in self.shell.user_ns.iteritems() if\ |
|
1081 | return sorted(k for k,v in self.shell.user_ns.iteritems() if\ | |
1023 | isinstance(v, Macro)) |
|
1082 | isinstance(v, Macro)) | |
1024 | if len(args) == 1: |
|
1083 | if len(args) == 1: | |
1025 | raise UsageError( |
|
1084 | raise UsageError( | |
1026 | "%macro insufficient args; usage '%macro name n1-n2 n3-4...") |
|
1085 | "%macro insufficient args; usage '%macro name n1-n2 n3-4...") | |
1027 | name, codefrom = args[0], " ".join(args[1:]) |
|
1086 | name, codefrom = args[0], " ".join(args[1:]) | |
1028 |
|
1087 | |||
1029 | #print 'rng',ranges # dbg |
|
1088 | #print 'rng',ranges # dbg | |
1030 | try: |
|
1089 | try: | |
1031 | lines = self.shell.find_user_code(codefrom, 'r' in opts) |
|
1090 | lines = self.shell.find_user_code(codefrom, 'r' in opts) | |
1032 | except (ValueError, TypeError) as e: |
|
1091 | except (ValueError, TypeError) as e: | |
1033 | print e.args[0] |
|
1092 | print e.args[0] | |
1034 | return |
|
1093 | return | |
1035 | macro = Macro(lines) |
|
1094 | macro = Macro(lines) | |
1036 | self.shell.define_macro(name, macro) |
|
1095 | self.shell.define_macro(name, macro) | |
1037 | print 'Macro `%s` created. To execute, type its name (without quotes).' % name |
|
1096 | print 'Macro `%s` created. To execute, type its name (without quotes).' % name | |
1038 | print '=== Macro contents: ===' |
|
1097 | print '=== Macro contents: ===' | |
1039 | print macro, |
|
1098 | print macro, | |
1040 |
|
1099 | |||
1041 | @magic_arguments.magic_arguments() |
|
1100 | @magic_arguments.magic_arguments() | |
1042 | @magic_arguments.argument('output', type=str, default='', nargs='?', |
|
1101 | @magic_arguments.argument('output', type=str, default='', nargs='?', | |
1043 | help="""The name of the variable in which to store output. |
|
1102 | help="""The name of the variable in which to store output. | |
1044 | This is a utils.io.CapturedIO object with stdout/err attributes |
|
1103 | This is a utils.io.CapturedIO object with stdout/err attributes | |
1045 | for the text of the captured output. |
|
1104 | for the text of the captured output. | |
1046 |
|
1105 | |||
1047 | CapturedOutput also has a show() method for displaying the output, |
|
1106 | CapturedOutput also has a show() method for displaying the output, | |
1048 | and __call__ as well, so you can use that to quickly display the |
|
1107 | and __call__ as well, so you can use that to quickly display the | |
1049 | output. |
|
1108 | output. | |
1050 |
|
1109 | |||
1051 | If unspecified, captured output is discarded. |
|
1110 | If unspecified, captured output is discarded. | |
1052 | """ |
|
1111 | """ | |
1053 | ) |
|
1112 | ) | |
1054 | @magic_arguments.argument('--no-stderr', action="store_true", |
|
1113 | @magic_arguments.argument('--no-stderr', action="store_true", | |
1055 | help="""Don't capture stderr.""" |
|
1114 | help="""Don't capture stderr.""" | |
1056 | ) |
|
1115 | ) | |
1057 | @magic_arguments.argument('--no-stdout', action="store_true", |
|
1116 | @magic_arguments.argument('--no-stdout', action="store_true", | |
1058 | help="""Don't capture stdout.""" |
|
1117 | help="""Don't capture stdout.""" | |
1059 | ) |
|
1118 | ) | |
1060 | @cell_magic |
|
1119 | @cell_magic | |
1061 | def capture(self, line, cell): |
|
1120 | def capture(self, line, cell): | |
1062 | """run the cell, capturing stdout/err""" |
|
1121 | """run the cell, capturing stdout/err""" | |
1063 | args = magic_arguments.parse_argstring(self.capture, line) |
|
1122 | args = magic_arguments.parse_argstring(self.capture, line) | |
1064 | out = not args.no_stdout |
|
1123 | out = not args.no_stdout | |
1065 | err = not args.no_stderr |
|
1124 | err = not args.no_stderr | |
1066 | with capture_output(out, err) as io: |
|
1125 | with capture_output(out, err) as io: | |
1067 | self.shell.run_cell(cell) |
|
1126 | self.shell.run_cell(cell) | |
1068 | if args.output: |
|
1127 | if args.output: | |
1069 | self.shell.user_ns[args.output] = io |
|
1128 | self.shell.user_ns[args.output] = io | |
1070 |
|
1129 | |||
1071 | def parse_breakpoint(text, current_file): |
|
1130 | def parse_breakpoint(text, current_file): | |
1072 | '''Returns (file, line) for file:line and (current_file, line) for line''' |
|
1131 | '''Returns (file, line) for file:line and (current_file, line) for line''' | |
1073 | colon = text.find(':') |
|
1132 | colon = text.find(':') | |
1074 | if colon == -1: |
|
1133 | if colon == -1: | |
1075 | return current_file, int(text) |
|
1134 | return current_file, int(text) | |
1076 | else: |
|
1135 | else: | |
1077 | return text[:colon], int(text[colon+1:]) |
|
1136 | return text[:colon], int(text[colon+1:]) | |
1078 |
|
1137 | |||
1079 | def _format_time(timespan, precision=3): |
|
1138 | def _format_time(timespan, precision=3): | |
1080 | """Formats the timespan in a human readable form""" |
|
1139 | """Formats the timespan in a human readable form""" | |
1081 | import math |
|
1140 | import math | |
1082 |
|
1141 | |||
1083 | if timespan >= 60.0: |
|
1142 | if timespan >= 60.0: | |
1084 | # we have more than a minute, format that in a human readable form |
|
1143 | # we have more than a minute, format that in a human readable form | |
1085 | # Idea from http://snipplr.com/view/5713/ |
|
1144 | # Idea from http://snipplr.com/view/5713/ | |
1086 | parts = [("d", 60*60*24),("h", 60*60),("min", 60), ("s", 1)] |
|
1145 | parts = [("d", 60*60*24),("h", 60*60),("min", 60), ("s", 1)] | |
1087 | time = [] |
|
1146 | time = [] | |
1088 | leftover = timespan |
|
1147 | leftover = timespan | |
1089 | for suffix, length in parts: |
|
1148 | for suffix, length in parts: | |
1090 | value = int(leftover / length) |
|
1149 | value = int(leftover / length) | |
1091 | if value > 0: |
|
1150 | if value > 0: | |
1092 | leftover = leftover % length |
|
1151 | leftover = leftover % length | |
1093 | time.append(u'%s%s' % (str(value), suffix)) |
|
1152 | time.append(u'%s%s' % (str(value), suffix)) | |
1094 | if leftover < 1: |
|
1153 | if leftover < 1: | |
1095 | break |
|
1154 | break | |
1096 | return " ".join(time) |
|
1155 | return " ".join(time) | |
1097 |
|
1156 | |||
1098 |
|
1157 | |||
1099 | # Unfortunately the unicode 'micro' symbol can cause problems in |
|
1158 | # Unfortunately the unicode 'micro' symbol can cause problems in | |
1100 | # certain terminals. |
|
1159 | # certain terminals. | |
1101 | # See bug: https://bugs.launchpad.net/ipython/+bug/348466 |
|
1160 | # See bug: https://bugs.launchpad.net/ipython/+bug/348466 | |
1102 | # Try to prevent crashes by being more secure than it needs to |
|
1161 | # Try to prevent crashes by being more secure than it needs to | |
1103 | # E.g. eclipse is able to print a µ, but has no sys.stdout.encoding set. |
|
1162 | # E.g. eclipse is able to print a µ, but has no sys.stdout.encoding set. | |
1104 | units = [u"s", u"ms",u'us',"ns"] # the save value |
|
1163 | units = [u"s", u"ms",u'us',"ns"] # the save value | |
1105 | if hasattr(sys.stdout, 'encoding') and sys.stdout.encoding: |
|
1164 | if hasattr(sys.stdout, 'encoding') and sys.stdout.encoding: | |
1106 | try: |
|
1165 | try: | |
1107 | u'\xb5'.encode(sys.stdout.encoding) |
|
1166 | u'\xb5'.encode(sys.stdout.encoding) | |
1108 | units = [u"s", u"ms",u'\xb5s',"ns"] |
|
1167 | units = [u"s", u"ms",u'\xb5s',"ns"] | |
1109 | except: |
|
1168 | except: | |
1110 | pass |
|
1169 | pass | |
1111 | scaling = [1, 1e3, 1e6, 1e9] |
|
1170 | scaling = [1, 1e3, 1e6, 1e9] | |
1112 |
|
1171 | |||
1113 | if timespan > 0.0: |
|
1172 | if timespan > 0.0: | |
1114 | order = min(-int(math.floor(math.log10(timespan)) // 3), 3) |
|
1173 | order = min(-int(math.floor(math.log10(timespan)) // 3), 3) | |
1115 | else: |
|
1174 | else: | |
1116 | order = 3 |
|
1175 | order = 3 | |
1117 | ret = u"%.*g %s" % (precision, timespan * scaling[order], units[order]) |
|
1176 | ret = u"%.*g %s" % (precision, timespan * scaling[order], units[order]) | |
1118 | return ret |
|
1177 | return ret |
@@ -1,339 +1,416 b'' | |||||
1 | # encoding: utf-8 |
|
1 | # encoding: utf-8 | |
2 | """Tests for code execution (%run and related), which is particularly tricky. |
|
2 | """Tests for code execution (%run and related), which is particularly tricky. | |
3 |
|
3 | |||
4 | Because of how %run manages namespaces, and the fact that we are trying here to |
|
4 | Because of how %run manages namespaces, and the fact that we are trying here to | |
5 | verify subtle object deletion and reference counting issues, the %run tests |
|
5 | verify subtle object deletion and reference counting issues, the %run tests | |
6 | will be kept in this separate file. This makes it easier to aggregate in one |
|
6 | will be kept in this separate file. This makes it easier to aggregate in one | |
7 | place the tricks needed to handle it; most other magics are much easier to test |
|
7 | place the tricks needed to handle it; most other magics are much easier to test | |
8 | and we do so in a common test_magic file. |
|
8 | and we do so in a common test_magic file. | |
9 | """ |
|
9 | """ | |
10 | from __future__ import absolute_import |
|
10 | from __future__ import absolute_import | |
11 |
|
11 | |||
12 | #----------------------------------------------------------------------------- |
|
12 | #----------------------------------------------------------------------------- | |
13 | # Imports |
|
13 | # Imports | |
14 | #----------------------------------------------------------------------------- |
|
14 | #----------------------------------------------------------------------------- | |
15 |
|
15 | |||
|
16 | import functools | |||
16 | import os |
|
17 | import os | |
|
18 | import random | |||
17 | import sys |
|
19 | import sys | |
18 | import tempfile |
|
20 | import tempfile | |
|
21 | import textwrap | |||
|
22 | import unittest | |||
19 |
|
23 | |||
20 | import nose.tools as nt |
|
24 | import nose.tools as nt | |
21 | from nose import SkipTest |
|
25 | from nose import SkipTest | |
22 |
|
26 | |||
23 | from IPython.testing import decorators as dec |
|
27 | from IPython.testing import decorators as dec | |
24 | from IPython.testing import tools as tt |
|
28 | from IPython.testing import tools as tt | |
25 | from IPython.utils import py3compat |
|
29 | from IPython.utils import py3compat | |
|
30 | from IPython.utils.tempdir import TemporaryDirectory | |||
|
31 | from IPython.core import debugger | |||
26 |
|
32 | |||
27 | #----------------------------------------------------------------------------- |
|
33 | #----------------------------------------------------------------------------- | |
28 | # Test functions begin |
|
34 | # Test functions begin | |
29 | #----------------------------------------------------------------------------- |
|
35 | #----------------------------------------------------------------------------- | |
30 |
|
36 | |||
31 | def doctest_refbug(): |
|
37 | def doctest_refbug(): | |
32 | """Very nasty problem with references held by multiple runs of a script. |
|
38 | """Very nasty problem with references held by multiple runs of a script. | |
33 | See: https://github.com/ipython/ipython/issues/141 |
|
39 | See: https://github.com/ipython/ipython/issues/141 | |
34 |
|
40 | |||
35 | In [1]: _ip.clear_main_mod_cache() |
|
41 | In [1]: _ip.clear_main_mod_cache() | |
36 | # random |
|
42 | # random | |
37 |
|
43 | |||
38 | In [2]: %run refbug |
|
44 | In [2]: %run refbug | |
39 |
|
45 | |||
40 | In [3]: call_f() |
|
46 | In [3]: call_f() | |
41 | lowercased: hello |
|
47 | lowercased: hello | |
42 |
|
48 | |||
43 | In [4]: %run refbug |
|
49 | In [4]: %run refbug | |
44 |
|
50 | |||
45 | In [5]: call_f() |
|
51 | In [5]: call_f() | |
46 | lowercased: hello |
|
52 | lowercased: hello | |
47 | lowercased: hello |
|
53 | lowercased: hello | |
48 | """ |
|
54 | """ | |
49 |
|
55 | |||
50 |
|
56 | |||
51 | def doctest_run_builtins(): |
|
57 | def doctest_run_builtins(): | |
52 | r"""Check that %run doesn't damage __builtins__. |
|
58 | r"""Check that %run doesn't damage __builtins__. | |
53 |
|
59 | |||
54 | In [1]: import tempfile |
|
60 | In [1]: import tempfile | |
55 |
|
61 | |||
56 | In [2]: bid1 = id(__builtins__) |
|
62 | In [2]: bid1 = id(__builtins__) | |
57 |
|
63 | |||
58 | In [3]: fname = tempfile.mkstemp('.py')[1] |
|
64 | In [3]: fname = tempfile.mkstemp('.py')[1] | |
59 |
|
65 | |||
60 | In [3]: f = open(fname,'w') |
|
66 | In [3]: f = open(fname,'w') | |
61 |
|
67 | |||
62 | In [4]: dummy= f.write('pass\n') |
|
68 | In [4]: dummy= f.write('pass\n') | |
63 |
|
69 | |||
64 | In [5]: f.flush() |
|
70 | In [5]: f.flush() | |
65 |
|
71 | |||
66 | In [6]: t1 = type(__builtins__) |
|
72 | In [6]: t1 = type(__builtins__) | |
67 |
|
73 | |||
68 | In [7]: %run $fname |
|
74 | In [7]: %run $fname | |
69 |
|
75 | |||
70 | In [7]: f.close() |
|
76 | In [7]: f.close() | |
71 |
|
77 | |||
72 | In [8]: bid2 = id(__builtins__) |
|
78 | In [8]: bid2 = id(__builtins__) | |
73 |
|
79 | |||
74 | In [9]: t2 = type(__builtins__) |
|
80 | In [9]: t2 = type(__builtins__) | |
75 |
|
81 | |||
76 | In [10]: t1 == t2 |
|
82 | In [10]: t1 == t2 | |
77 | Out[10]: True |
|
83 | Out[10]: True | |
78 |
|
84 | |||
79 | In [10]: bid1 == bid2 |
|
85 | In [10]: bid1 == bid2 | |
80 | Out[10]: True |
|
86 | Out[10]: True | |
81 |
|
87 | |||
82 | In [12]: try: |
|
88 | In [12]: try: | |
83 | ....: os.unlink(fname) |
|
89 | ....: os.unlink(fname) | |
84 | ....: except: |
|
90 | ....: except: | |
85 | ....: pass |
|
91 | ....: pass | |
86 | ....: |
|
92 | ....: | |
87 | """ |
|
93 | """ | |
88 |
|
94 | |||
89 |
|
95 | |||
90 | def doctest_run_option_parser(): |
|
96 | def doctest_run_option_parser(): | |
91 | r"""Test option parser in %run. |
|
97 | r"""Test option parser in %run. | |
92 |
|
98 | |||
93 | In [1]: %run print_argv.py |
|
99 | In [1]: %run print_argv.py | |
94 | [] |
|
100 | [] | |
95 |
|
101 | |||
96 | In [2]: %run print_argv.py print*.py |
|
102 | In [2]: %run print_argv.py print*.py | |
97 | ['print_argv.py'] |
|
103 | ['print_argv.py'] | |
98 |
|
104 | |||
99 | In [3]: %run -G print_argv.py print*.py |
|
105 | In [3]: %run -G print_argv.py print*.py | |
100 | ['print*.py'] |
|
106 | ['print*.py'] | |
101 |
|
107 | |||
102 | """ |
|
108 | """ | |
103 |
|
109 | |||
104 |
|
110 | |||
105 | @dec.skip_win32 |
|
111 | @dec.skip_win32 | |
106 | def doctest_run_option_parser_for_posix(): |
|
112 | def doctest_run_option_parser_for_posix(): | |
107 | r"""Test option parser in %run (Linux/OSX specific). |
|
113 | r"""Test option parser in %run (Linux/OSX specific). | |
108 |
|
114 | |||
109 | You need double quote to escape glob in POSIX systems: |
|
115 | You need double quote to escape glob in POSIX systems: | |
110 |
|
116 | |||
111 | In [1]: %run print_argv.py print\\*.py |
|
117 | In [1]: %run print_argv.py print\\*.py | |
112 | ['print*.py'] |
|
118 | ['print*.py'] | |
113 |
|
119 | |||
114 | You can't use quote to escape glob in POSIX systems: |
|
120 | You can't use quote to escape glob in POSIX systems: | |
115 |
|
121 | |||
116 | In [2]: %run print_argv.py 'print*.py' |
|
122 | In [2]: %run print_argv.py 'print*.py' | |
117 | ['print_argv.py'] |
|
123 | ['print_argv.py'] | |
118 |
|
124 | |||
119 | """ |
|
125 | """ | |
120 |
|
126 | |||
121 |
|
127 | |||
122 | @dec.skip_if_not_win32 |
|
128 | @dec.skip_if_not_win32 | |
123 | def doctest_run_option_parser_for_windows(): |
|
129 | def doctest_run_option_parser_for_windows(): | |
124 | r"""Test option parser in %run (Windows specific). |
|
130 | r"""Test option parser in %run (Windows specific). | |
125 |
|
131 | |||
126 | In Windows, you can't escape ``*` `by backslash: |
|
132 | In Windows, you can't escape ``*` `by backslash: | |
127 |
|
133 | |||
128 | In [1]: %run print_argv.py print\\*.py |
|
134 | In [1]: %run print_argv.py print\\*.py | |
129 | ['print\\*.py'] |
|
135 | ['print\\*.py'] | |
130 |
|
136 | |||
131 | You can use quote to escape glob: |
|
137 | You can use quote to escape glob: | |
132 |
|
138 | |||
133 | In [2]: %run print_argv.py 'print*.py' |
|
139 | In [2]: %run print_argv.py 'print*.py' | |
134 | ['print*.py'] |
|
140 | ['print*.py'] | |
135 |
|
141 | |||
136 | """ |
|
142 | """ | |
137 |
|
143 | |||
138 |
|
144 | |||
139 | @py3compat.doctest_refactor_print |
|
145 | @py3compat.doctest_refactor_print | |
140 | def doctest_reset_del(): |
|
146 | def doctest_reset_del(): | |
141 | """Test that resetting doesn't cause errors in __del__ methods. |
|
147 | """Test that resetting doesn't cause errors in __del__ methods. | |
142 |
|
148 | |||
143 | In [2]: class A(object): |
|
149 | In [2]: class A(object): | |
144 | ...: def __del__(self): |
|
150 | ...: def __del__(self): | |
145 | ...: print str("Hi") |
|
151 | ...: print str("Hi") | |
146 | ...: |
|
152 | ...: | |
147 |
|
153 | |||
148 | In [3]: a = A() |
|
154 | In [3]: a = A() | |
149 |
|
155 | |||
150 | In [4]: get_ipython().reset() |
|
156 | In [4]: get_ipython().reset() | |
151 | Hi |
|
157 | Hi | |
152 |
|
158 | |||
153 | In [5]: 1+1 |
|
159 | In [5]: 1+1 | |
154 | Out[5]: 2 |
|
160 | Out[5]: 2 | |
155 | """ |
|
161 | """ | |
156 |
|
162 | |||
157 | # For some tests, it will be handy to organize them in a class with a common |
|
163 | # For some tests, it will be handy to organize them in a class with a common | |
158 | # setup that makes a temp file |
|
164 | # setup that makes a temp file | |
159 |
|
165 | |||
160 | class TestMagicRunPass(tt.TempFileMixin): |
|
166 | class TestMagicRunPass(tt.TempFileMixin): | |
161 |
|
167 | |||
162 | def setup(self): |
|
168 | def setup(self): | |
163 | """Make a valid python temp file.""" |
|
169 | """Make a valid python temp file.""" | |
164 | self.mktmp('pass\n') |
|
170 | self.mktmp('pass\n') | |
165 |
|
171 | |||
166 | def run_tmpfile(self): |
|
172 | def run_tmpfile(self): | |
167 | _ip = get_ipython() |
|
173 | _ip = get_ipython() | |
168 | # This fails on Windows if self.tmpfile.name has spaces or "~" in it. |
|
174 | # This fails on Windows if self.tmpfile.name has spaces or "~" in it. | |
169 | # See below and ticket https://bugs.launchpad.net/bugs/366353 |
|
175 | # See below and ticket https://bugs.launchpad.net/bugs/366353 | |
170 | _ip.magic('run %s' % self.fname) |
|
176 | _ip.magic('run %s' % self.fname) | |
171 |
|
177 | |||
172 | def run_tmpfile_p(self): |
|
178 | def run_tmpfile_p(self): | |
173 | _ip = get_ipython() |
|
179 | _ip = get_ipython() | |
174 | # This fails on Windows if self.tmpfile.name has spaces or "~" in it. |
|
180 | # This fails on Windows if self.tmpfile.name has spaces or "~" in it. | |
175 | # See below and ticket https://bugs.launchpad.net/bugs/366353 |
|
181 | # See below and ticket https://bugs.launchpad.net/bugs/366353 | |
176 | _ip.magic('run -p %s' % self.fname) |
|
182 | _ip.magic('run -p %s' % self.fname) | |
177 |
|
183 | |||
178 | def test_builtins_id(self): |
|
184 | def test_builtins_id(self): | |
179 | """Check that %run doesn't damage __builtins__ """ |
|
185 | """Check that %run doesn't damage __builtins__ """ | |
180 | _ip = get_ipython() |
|
186 | _ip = get_ipython() | |
181 | # Test that the id of __builtins__ is not modified by %run |
|
187 | # Test that the id of __builtins__ is not modified by %run | |
182 | bid1 = id(_ip.user_ns['__builtins__']) |
|
188 | bid1 = id(_ip.user_ns['__builtins__']) | |
183 | self.run_tmpfile() |
|
189 | self.run_tmpfile() | |
184 | bid2 = id(_ip.user_ns['__builtins__']) |
|
190 | bid2 = id(_ip.user_ns['__builtins__']) | |
185 | nt.assert_equal(bid1, bid2) |
|
191 | nt.assert_equal(bid1, bid2) | |
186 |
|
192 | |||
187 | def test_builtins_type(self): |
|
193 | def test_builtins_type(self): | |
188 | """Check that the type of __builtins__ doesn't change with %run. |
|
194 | """Check that the type of __builtins__ doesn't change with %run. | |
189 |
|
195 | |||
190 | However, the above could pass if __builtins__ was already modified to |
|
196 | However, the above could pass if __builtins__ was already modified to | |
191 | be a dict (it should be a module) by a previous use of %run. So we |
|
197 | be a dict (it should be a module) by a previous use of %run. So we | |
192 | also check explicitly that it really is a module: |
|
198 | also check explicitly that it really is a module: | |
193 | """ |
|
199 | """ | |
194 | _ip = get_ipython() |
|
200 | _ip = get_ipython() | |
195 | self.run_tmpfile() |
|
201 | self.run_tmpfile() | |
196 | nt.assert_equal(type(_ip.user_ns['__builtins__']),type(sys)) |
|
202 | nt.assert_equal(type(_ip.user_ns['__builtins__']),type(sys)) | |
197 |
|
203 | |||
198 | def test_prompts(self): |
|
204 | def test_prompts(self): | |
199 | """Test that prompts correctly generate after %run""" |
|
205 | """Test that prompts correctly generate after %run""" | |
200 | self.run_tmpfile() |
|
206 | self.run_tmpfile() | |
201 | _ip = get_ipython() |
|
207 | _ip = get_ipython() | |
202 | p2 = _ip.prompt_manager.render('in2').strip() |
|
208 | p2 = _ip.prompt_manager.render('in2').strip() | |
203 | nt.assert_equal(p2[:3], '...') |
|
209 | nt.assert_equal(p2[:3], '...') | |
204 |
|
210 | |||
205 | def test_run_profile( self ): |
|
211 | def test_run_profile( self ): | |
206 | """Test that the option -p, which invokes the profiler, do not |
|
212 | """Test that the option -p, which invokes the profiler, do not | |
207 | crash by invoking execfile""" |
|
213 | crash by invoking execfile""" | |
208 | _ip = get_ipython() |
|
214 | _ip = get_ipython() | |
209 | self.run_tmpfile_p() |
|
215 | self.run_tmpfile_p() | |
210 |
|
216 | |||
211 |
|
217 | |||
212 | class TestMagicRunSimple(tt.TempFileMixin): |
|
218 | class TestMagicRunSimple(tt.TempFileMixin): | |
213 |
|
219 | |||
214 | def test_simpledef(self): |
|
220 | def test_simpledef(self): | |
215 | """Test that simple class definitions work.""" |
|
221 | """Test that simple class definitions work.""" | |
216 | src = ("class foo: pass\n" |
|
222 | src = ("class foo: pass\n" | |
217 | "def f(): return foo()") |
|
223 | "def f(): return foo()") | |
218 | self.mktmp(src) |
|
224 | self.mktmp(src) | |
219 | _ip.magic('run %s' % self.fname) |
|
225 | _ip.magic('run %s' % self.fname) | |
220 | _ip.run_cell('t = isinstance(f(), foo)') |
|
226 | _ip.run_cell('t = isinstance(f(), foo)') | |
221 | nt.assert_true(_ip.user_ns['t']) |
|
227 | nt.assert_true(_ip.user_ns['t']) | |
222 |
|
228 | |||
223 | def test_obj_del(self): |
|
229 | def test_obj_del(self): | |
224 | """Test that object's __del__ methods are called on exit.""" |
|
230 | """Test that object's __del__ methods are called on exit.""" | |
225 | if sys.platform == 'win32': |
|
231 | if sys.platform == 'win32': | |
226 | try: |
|
232 | try: | |
227 | import win32api |
|
233 | import win32api | |
228 | except ImportError: |
|
234 | except ImportError: | |
229 | raise SkipTest("Test requires pywin32") |
|
235 | raise SkipTest("Test requires pywin32") | |
230 | src = ("class A(object):\n" |
|
236 | src = ("class A(object):\n" | |
231 | " def __del__(self):\n" |
|
237 | " def __del__(self):\n" | |
232 | " print 'object A deleted'\n" |
|
238 | " print 'object A deleted'\n" | |
233 | "a = A()\n") |
|
239 | "a = A()\n") | |
234 | self.mktmp(py3compat.doctest_refactor_print(src)) |
|
240 | self.mktmp(py3compat.doctest_refactor_print(src)) | |
235 | if dec.module_not_available('sqlite3'): |
|
241 | if dec.module_not_available('sqlite3'): | |
236 | err = 'WARNING: IPython History requires SQLite, your history will not be saved\n' |
|
242 | err = 'WARNING: IPython History requires SQLite, your history will not be saved\n' | |
237 | else: |
|
243 | else: | |
238 | err = None |
|
244 | err = None | |
239 | tt.ipexec_validate(self.fname, 'object A deleted', err) |
|
245 | tt.ipexec_validate(self.fname, 'object A deleted', err) | |
240 |
|
246 | |||
241 | @dec.skip_known_failure |
|
247 | @dec.skip_known_failure | |
242 | def test_aggressive_namespace_cleanup(self): |
|
248 | def test_aggressive_namespace_cleanup(self): | |
243 | """Test that namespace cleanup is not too aggressive GH-238 |
|
249 | """Test that namespace cleanup is not too aggressive GH-238 | |
244 |
|
250 | |||
245 | Returning from another run magic deletes the namespace""" |
|
251 | Returning from another run magic deletes the namespace""" | |
246 | # see ticket https://github.com/ipython/ipython/issues/238 |
|
252 | # see ticket https://github.com/ipython/ipython/issues/238 | |
247 | class secondtmp(tt.TempFileMixin): pass |
|
253 | class secondtmp(tt.TempFileMixin): pass | |
248 | empty = secondtmp() |
|
254 | empty = secondtmp() | |
249 | empty.mktmp('') |
|
255 | empty.mktmp('') | |
250 | src = ("ip = get_ipython()\n" |
|
256 | src = ("ip = get_ipython()\n" | |
251 | "for i in range(5):\n" |
|
257 | "for i in range(5):\n" | |
252 | " try:\n" |
|
258 | " try:\n" | |
253 | " ip.magic('run %s')\n" |
|
259 | " ip.magic('run %s')\n" | |
254 | " except NameError as e:\n" |
|
260 | " except NameError as e:\n" | |
255 | " print i;break\n" % empty.fname) |
|
261 | " print i;break\n" % empty.fname) | |
256 | self.mktmp(py3compat.doctest_refactor_print(src)) |
|
262 | self.mktmp(py3compat.doctest_refactor_print(src)) | |
257 | _ip.magic('run %s' % self.fname) |
|
263 | _ip.magic('run %s' % self.fname) | |
258 | _ip.run_cell('ip == get_ipython()') |
|
264 | _ip.run_cell('ip == get_ipython()') | |
259 | nt.assert_equal(_ip.user_ns['i'], 5) |
|
265 | nt.assert_equal(_ip.user_ns['i'], 5) | |
260 |
|
266 | |||
261 | @dec.skip_win32 |
|
267 | @dec.skip_win32 | |
262 | def test_tclass(self): |
|
268 | def test_tclass(self): | |
263 | mydir = os.path.dirname(__file__) |
|
269 | mydir = os.path.dirname(__file__) | |
264 | tc = os.path.join(mydir, 'tclass') |
|
270 | tc = os.path.join(mydir, 'tclass') | |
265 | src = ("%%run '%s' C-first\n" |
|
271 | src = ("%%run '%s' C-first\n" | |
266 | "%%run '%s' C-second\n" |
|
272 | "%%run '%s' C-second\n" | |
267 | "%%run '%s' C-third\n") % (tc, tc, tc) |
|
273 | "%%run '%s' C-third\n") % (tc, tc, tc) | |
268 | self.mktmp(src, '.ipy') |
|
274 | self.mktmp(src, '.ipy') | |
269 | out = """\ |
|
275 | out = """\ | |
270 | ARGV 1-: ['C-first'] |
|
276 | ARGV 1-: ['C-first'] | |
271 | ARGV 1-: ['C-second'] |
|
277 | ARGV 1-: ['C-second'] | |
272 | tclass.py: deleting object: C-first |
|
278 | tclass.py: deleting object: C-first | |
273 | ARGV 1-: ['C-third'] |
|
279 | ARGV 1-: ['C-third'] | |
274 | tclass.py: deleting object: C-second |
|
280 | tclass.py: deleting object: C-second | |
275 | tclass.py: deleting object: C-third |
|
281 | tclass.py: deleting object: C-third | |
276 | """ |
|
282 | """ | |
277 | if dec.module_not_available('sqlite3'): |
|
283 | if dec.module_not_available('sqlite3'): | |
278 | err = 'WARNING: IPython History requires SQLite, your history will not be saved\n' |
|
284 | err = 'WARNING: IPython History requires SQLite, your history will not be saved\n' | |
279 | else: |
|
285 | else: | |
280 | err = None |
|
286 | err = None | |
281 | tt.ipexec_validate(self.fname, out, err) |
|
287 | tt.ipexec_validate(self.fname, out, err) | |
282 |
|
288 | |||
283 | def test_run_i_after_reset(self): |
|
289 | def test_run_i_after_reset(self): | |
284 | """Check that %run -i still works after %reset (gh-693)""" |
|
290 | """Check that %run -i still works after %reset (gh-693)""" | |
285 | src = "yy = zz\n" |
|
291 | src = "yy = zz\n" | |
286 | self.mktmp(src) |
|
292 | self.mktmp(src) | |
287 | _ip.run_cell("zz = 23") |
|
293 | _ip.run_cell("zz = 23") | |
288 | _ip.magic('run -i %s' % self.fname) |
|
294 | _ip.magic('run -i %s' % self.fname) | |
289 | nt.assert_equal(_ip.user_ns['yy'], 23) |
|
295 | nt.assert_equal(_ip.user_ns['yy'], 23) | |
290 | _ip.magic('reset -f') |
|
296 | _ip.magic('reset -f') | |
291 | _ip.run_cell("zz = 23") |
|
297 | _ip.run_cell("zz = 23") | |
292 | _ip.magic('run -i %s' % self.fname) |
|
298 | _ip.magic('run -i %s' % self.fname) | |
293 | nt.assert_equal(_ip.user_ns['yy'], 23) |
|
299 | nt.assert_equal(_ip.user_ns['yy'], 23) | |
294 |
|
300 | |||
295 | def test_unicode(self): |
|
301 | def test_unicode(self): | |
296 | """Check that files in odd encodings are accepted.""" |
|
302 | """Check that files in odd encodings are accepted.""" | |
297 | mydir = os.path.dirname(__file__) |
|
303 | mydir = os.path.dirname(__file__) | |
298 | na = os.path.join(mydir, 'nonascii.py') |
|
304 | na = os.path.join(mydir, 'nonascii.py') | |
299 | _ip.magic('run "%s"' % na) |
|
305 | _ip.magic('run "%s"' % na) | |
300 | nt.assert_equal(_ip.user_ns['u'], u'Ўт№Ф') |
|
306 | nt.assert_equal(_ip.user_ns['u'], u'Ўт№Ф') | |
301 |
|
307 | |||
302 | def test_run_py_file_attribute(self): |
|
308 | def test_run_py_file_attribute(self): | |
303 | """Test handling of `__file__` attribute in `%run <file>.py`.""" |
|
309 | """Test handling of `__file__` attribute in `%run <file>.py`.""" | |
304 | src = "t = __file__\n" |
|
310 | src = "t = __file__\n" | |
305 | self.mktmp(src) |
|
311 | self.mktmp(src) | |
306 | _missing = object() |
|
312 | _missing = object() | |
307 | file1 = _ip.user_ns.get('__file__', _missing) |
|
313 | file1 = _ip.user_ns.get('__file__', _missing) | |
308 | _ip.magic('run %s' % self.fname) |
|
314 | _ip.magic('run %s' % self.fname) | |
309 | file2 = _ip.user_ns.get('__file__', _missing) |
|
315 | file2 = _ip.user_ns.get('__file__', _missing) | |
310 |
|
316 | |||
311 | # Check that __file__ was equal to the filename in the script's |
|
317 | # Check that __file__ was equal to the filename in the script's | |
312 | # namespace. |
|
318 | # namespace. | |
313 | nt.assert_equal(_ip.user_ns['t'], self.fname) |
|
319 | nt.assert_equal(_ip.user_ns['t'], self.fname) | |
314 |
|
320 | |||
315 | # Check that __file__ was not leaked back into user_ns. |
|
321 | # Check that __file__ was not leaked back into user_ns. | |
316 | nt.assert_equal(file1, file2) |
|
322 | nt.assert_equal(file1, file2) | |
317 |
|
323 | |||
318 | def test_run_ipy_file_attribute(self): |
|
324 | def test_run_ipy_file_attribute(self): | |
319 | """Test handling of `__file__` attribute in `%run <file.ipy>`.""" |
|
325 | """Test handling of `__file__` attribute in `%run <file.ipy>`.""" | |
320 | src = "t = __file__\n" |
|
326 | src = "t = __file__\n" | |
321 | self.mktmp(src, ext='.ipy') |
|
327 | self.mktmp(src, ext='.ipy') | |
322 | _missing = object() |
|
328 | _missing = object() | |
323 | file1 = _ip.user_ns.get('__file__', _missing) |
|
329 | file1 = _ip.user_ns.get('__file__', _missing) | |
324 | _ip.magic('run %s' % self.fname) |
|
330 | _ip.magic('run %s' % self.fname) | |
325 | file2 = _ip.user_ns.get('__file__', _missing) |
|
331 | file2 = _ip.user_ns.get('__file__', _missing) | |
326 |
|
332 | |||
327 | # Check that __file__ was equal to the filename in the script's |
|
333 | # Check that __file__ was equal to the filename in the script's | |
328 | # namespace. |
|
334 | # namespace. | |
329 | nt.assert_equal(_ip.user_ns['t'], self.fname) |
|
335 | nt.assert_equal(_ip.user_ns['t'], self.fname) | |
330 |
|
336 | |||
331 | # Check that __file__ was not leaked back into user_ns. |
|
337 | # Check that __file__ was not leaked back into user_ns. | |
332 | nt.assert_equal(file1, file2) |
|
338 | nt.assert_equal(file1, file2) | |
333 |
|
339 | |||
334 | def test_run_formatting(self): |
|
340 | def test_run_formatting(self): | |
335 | """ Test that %run -t -N<N> does not raise a TypeError for N > 1.""" |
|
341 | """ Test that %run -t -N<N> does not raise a TypeError for N > 1.""" | |
336 | src = "pass" |
|
342 | src = "pass" | |
337 | self.mktmp(src) |
|
343 | self.mktmp(src) | |
338 | _ip.magic('run -t -N 1 %s' % self.fname) |
|
344 | _ip.magic('run -t -N 1 %s' % self.fname) | |
339 | _ip.magic('run -t -N 10 %s' % self.fname) |
|
345 | _ip.magic('run -t -N 10 %s' % self.fname) | |
|
346 | ||||
|
347 | ||||
|
348 | class TestMagicRunWithPackage(unittest.TestCase): | |||
|
349 | ||||
|
350 | def writefile(self, name, content): | |||
|
351 | path = os.path.join(self.tempdir.name, name) | |||
|
352 | d = os.path.dirname(path) | |||
|
353 | if not os.path.isdir(d): | |||
|
354 | os.makedirs(d) | |||
|
355 | with open(path, 'w') as f: | |||
|
356 | f.write(textwrap.dedent(content)) | |||
|
357 | ||||
|
358 | def setUp(self): | |||
|
359 | self.package = package = 'tmp{0}'.format(repr(random.random())[2:]) | |||
|
360 | """Temporary valid python package name.""" | |||
|
361 | ||||
|
362 | self.value = int(random.random() * 10000) | |||
|
363 | ||||
|
364 | self.tempdir = TemporaryDirectory() | |||
|
365 | self.__orig_cwd = os.getcwdu() | |||
|
366 | sys.path.insert(0, self.tempdir.name) | |||
|
367 | ||||
|
368 | self.writefile(os.path.join(package, '__init__.py'), '') | |||
|
369 | self.writefile(os.path.join(package, 'sub.py'), """ | |||
|
370 | x = {0!r} | |||
|
371 | """.format(self.value)) | |||
|
372 | self.writefile(os.path.join(package, 'relative.py'), """ | |||
|
373 | from .sub import x | |||
|
374 | """) | |||
|
375 | self.writefile(os.path.join(package, 'absolute.py'), """ | |||
|
376 | from {0}.sub import x | |||
|
377 | """.format(package)) | |||
|
378 | ||||
|
379 | def tearDown(self): | |||
|
380 | os.chdir(self.__orig_cwd) | |||
|
381 | sys.path[:] = [p for p in sys.path if p != self.tempdir.name] | |||
|
382 | self.tempdir.cleanup() | |||
|
383 | ||||
|
384 | def check_run_submodule(self, submodule, opts=''): | |||
|
385 | _ip.magic('run {2} -m {0}.{1}'.format(self.package, submodule, opts)) | |||
|
386 | self.assertEqual(_ip.user_ns['x'], self.value, | |||
|
387 | 'Variable `x` is not loaded from module `{0}`.' | |||
|
388 | .format(submodule)) | |||
|
389 | ||||
|
390 | def test_run_submodule_with_absolute_import(self): | |||
|
391 | self.check_run_submodule('absolute') | |||
|
392 | ||||
|
393 | def test_run_submodule_with_relative_import(self): | |||
|
394 | """Run submodule that has a relative import statement (#2727).""" | |||
|
395 | self.check_run_submodule('relative') | |||
|
396 | ||||
|
397 | def test_prun_submodule_with_absolute_import(self): | |||
|
398 | self.check_run_submodule('absolute', '-p') | |||
|
399 | ||||
|
400 | def test_prun_submodule_with_relative_import(self): | |||
|
401 | self.check_run_submodule('relative', '-p') | |||
|
402 | ||||
|
403 | def with_fake_debugger(func): | |||
|
404 | @functools.wraps(func) | |||
|
405 | def wrapper(*args, **kwds): | |||
|
406 | with tt.monkeypatch(debugger.Pdb, 'run', staticmethod(eval)): | |||
|
407 | return func(*args, **kwds) | |||
|
408 | return wrapper | |||
|
409 | ||||
|
410 | @with_fake_debugger | |||
|
411 | def test_debug_run_submodule_with_absolute_import(self): | |||
|
412 | self.check_run_submodule('absolute', '-d') | |||
|
413 | ||||
|
414 | @with_fake_debugger | |||
|
415 | def test_debug_run_submodule_with_relative_import(self): | |||
|
416 | self.check_run_submodule('relative', '-d') |
@@ -1,1 +1,1 b'' | |||||
1 | Subproject commit f7467391a9f9d4868f0bbf0d088fd572625862a4 |
|
1 | Subproject commit 945dfca396a1a7ca66d36ee758c7d8dca2b11287 |
@@ -1,981 +1,1001 b'' | |||||
1 | article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block;} |
|
1 | article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block;} | |
2 | audio,canvas,video{display:inline-block;*display:inline;*zoom:1;} |
|
2 | audio,canvas,video{display:inline-block;*display:inline;*zoom:1;} | |
3 | audio:not([controls]){display:none;} |
|
3 | audio:not([controls]){display:none;} | |
4 | html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;} |
|
4 | html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;} | |
5 | a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} |
|
5 | a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} | |
6 | a:hover,a:active{outline:0;} |
|
6 | a:hover,a:active{outline:0;} | |
7 | sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline;} |
|
7 | sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline;} | |
8 | sup{top:-0.5em;} |
|
8 | sup{top:-0.5em;} | |
9 | sub{bottom:-0.25em;} |
|
9 | sub{bottom:-0.25em;} | |
10 | img{max-width:100%;width:auto\9;height:auto;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic;} |
|
10 | img{max-width:100%;width:auto\9;height:auto;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic;} | |
11 | #map_canvas img,.google-maps img{max-width:none;} |
|
11 | #map_canvas img,.google-maps img{max-width:none;} | |
12 | button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle;} |
|
12 | button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle;} | |
13 | button,input{*overflow:visible;line-height:normal;} |
|
13 | button,input{*overflow:visible;line-height:normal;} | |
14 | button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0;} |
|
14 | button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0;} | |
15 | button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer;} |
|
15 | button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer;} | |
16 | label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer;} |
|
16 | label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer;} | |
17 | input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield;} |
|
17 | input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield;} | |
18 | input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none;} |
|
18 | input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none;} | |
19 | textarea{overflow:auto;vertical-align:top;} |
|
19 | textarea{overflow:auto;vertical-align:top;} | |
20 | @media print{*{text-shadow:none !important;color:#000 !important;background:transparent !important;box-shadow:none !important;} a,a:visited{text-decoration:underline;} a[href]:after{content:" (" attr(href) ")";} abbr[title]:after{content:" (" attr(title) ")";} .ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:"";} pre,blockquote{border:1px solid #999;page-break-inside:avoid;} thead{display:table-header-group;} tr,img{page-break-inside:avoid;} img{max-width:100% !important;} @page {margin:0.5cm;}p,h2,h3{orphans:3;widows:3;} h2,h3{page-break-after:avoid;}}.clearfix{*zoom:1;}.clearfix:before,.clearfix:after{display:table;content:"";line-height:0;} |
|
20 | @media print{*{text-shadow:none !important;color:#000 !important;background:transparent !important;box-shadow:none !important;} a,a:visited{text-decoration:underline;} a[href]:after{content:" (" attr(href) ")";} abbr[title]:after{content:" (" attr(title) ")";} .ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:"";} pre,blockquote{border:1px solid #999;page-break-inside:avoid;} thead{display:table-header-group;} tr,img{page-break-inside:avoid;} img{max-width:100% !important;} @page {margin:0.5cm;}p,h2,h3{orphans:3;widows:3;} h2,h3{page-break-after:avoid;}}.clearfix{*zoom:1;}.clearfix:before,.clearfix:after{display:table;content:"";line-height:0;} | |
21 | .clearfix:after{clear:both;} |
|
21 | .clearfix:after{clear:both;} | |
22 | .hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0;} |
|
22 | .hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0;} | |
23 | .input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;} |
|
23 | .input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;} | |
24 | body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;line-height:20px;color:#000000;background-color:#ffffff;} |
|
24 | body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;line-height:20px;color:#000000;background-color:#ffffff;} | |
25 | a{color:#0088cc;text-decoration:none;} |
|
25 | a{color:#0088cc;text-decoration:none;} | |
26 | a:hover,a:focus{color:#005580;text-decoration:underline;} |
|
26 | a:hover,a:focus{color:#005580;text-decoration:underline;} | |
27 | .img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;} |
|
27 | .img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;} | |
28 | .img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.2);-webkit-box-shadow:0 1px 3px rgba(0, 0, 0, 0.1);-moz-box-shadow:0 1px 3px rgba(0, 0, 0, 0.1);box-shadow:0 1px 3px rgba(0, 0, 0, 0.1);} |
|
28 | .img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.2);-webkit-box-shadow:0 1px 3px rgba(0, 0, 0, 0.1);-moz-box-shadow:0 1px 3px rgba(0, 0, 0, 0.1);box-shadow:0 1px 3px rgba(0, 0, 0, 0.1);} | |
29 | .img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px;} |
|
29 | .img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px;} | |
30 | .row{margin-left:-20px;*zoom:1;}.row:before,.row:after{display:table;content:"";line-height:0;} |
|
30 | .row{margin-left:-20px;*zoom:1;}.row:before,.row:after{display:table;content:"";line-height:0;} | |
31 | .row:after{clear:both;} |
|
31 | .row:after{clear:both;} | |
32 | [class*="span"]{float:left;min-height:1px;margin-left:20px;} |
|
32 | [class*="span"]{float:left;min-height:1px;margin-left:20px;} | |
33 | .container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px;} |
|
33 | .container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px;} | |
34 | .span12{width:940px;} |
|
34 | .span12{width:940px;} | |
35 | .span11{width:860px;} |
|
35 | .span11{width:860px;} | |
36 | .span10{width:780px;} |
|
36 | .span10{width:780px;} | |
37 | .span9{width:700px;} |
|
37 | .span9{width:700px;} | |
38 | .span8{width:620px;} |
|
38 | .span8{width:620px;} | |
39 | .span7{width:540px;} |
|
39 | .span7{width:540px;} | |
40 | .span6{width:460px;} |
|
40 | .span6{width:460px;} | |
41 | .span5{width:380px;} |
|
41 | .span5{width:380px;} | |
42 | .span4{width:300px;} |
|
42 | .span4{width:300px;} | |
43 | .span3{width:220px;} |
|
43 | .span3{width:220px;} | |
44 | .span2{width:140px;} |
|
44 | .span2{width:140px;} | |
45 | .span1{width:60px;} |
|
45 | .span1{width:60px;} | |
46 | .offset12{margin-left:980px;} |
|
46 | .offset12{margin-left:980px;} | |
47 | .offset11{margin-left:900px;} |
|
47 | .offset11{margin-left:900px;} | |
48 | .offset10{margin-left:820px;} |
|
48 | .offset10{margin-left:820px;} | |
49 | .offset9{margin-left:740px;} |
|
49 | .offset9{margin-left:740px;} | |
50 | .offset8{margin-left:660px;} |
|
50 | .offset8{margin-left:660px;} | |
51 | .offset7{margin-left:580px;} |
|
51 | .offset7{margin-left:580px;} | |
52 | .offset6{margin-left:500px;} |
|
52 | .offset6{margin-left:500px;} | |
53 | .offset5{margin-left:420px;} |
|
53 | .offset5{margin-left:420px;} | |
54 | .offset4{margin-left:340px;} |
|
54 | .offset4{margin-left:340px;} | |
55 | .offset3{margin-left:260px;} |
|
55 | .offset3{margin-left:260px;} | |
56 | .offset2{margin-left:180px;} |
|
56 | .offset2{margin-left:180px;} | |
57 | .offset1{margin-left:100px;} |
|
57 | .offset1{margin-left:100px;} | |
58 | .row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";line-height:0;} |
|
58 | .row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";line-height:0;} | |
59 | .row-fluid:after{clear:both;} |
|
59 | .row-fluid:after{clear:both;} | |
60 | .row-fluid [class*="span"]{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;float:left;margin-left:2.127659574468085%;*margin-left:2.074468085106383%;} |
|
60 | .row-fluid [class*="span"]{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;float:left;margin-left:2.127659574468085%;*margin-left:2.074468085106383%;} | |
61 | .row-fluid [class*="span"]:first-child{margin-left:0;} |
|
61 | .row-fluid [class*="span"]:first-child{margin-left:0;} | |
62 | .row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%;} |
|
62 | .row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%;} | |
63 | .row-fluid .span12{width:100%;*width:99.94680851063829%;} |
|
63 | .row-fluid .span12{width:100%;*width:99.94680851063829%;} | |
64 | .row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%;} |
|
64 | .row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%;} | |
65 | .row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%;} |
|
65 | .row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%;} | |
66 | .row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%;} |
|
66 | .row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%;} | |
67 | .row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%;} |
|
67 | .row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%;} | |
68 | .row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%;} |
|
68 | .row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%;} | |
69 | .row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%;} |
|
69 | .row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%;} | |
70 | .row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%;} |
|
70 | .row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%;} | |
71 | .row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%;} |
|
71 | .row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%;} | |
72 | .row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%;} |
|
72 | .row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%;} | |
73 | .row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%;} |
|
73 | .row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%;} | |
74 | .row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%;} |
|
74 | .row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%;} | |
75 | .row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%;} |
|
75 | .row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%;} | |
76 | .row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%;} |
|
76 | .row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%;} | |
77 | .row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%;} |
|
77 | .row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%;} | |
78 | .row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%;} |
|
78 | .row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%;} | |
79 | .row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%;} |
|
79 | .row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%;} | |
80 | .row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%;} |
|
80 | .row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%;} | |
81 | .row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%;} |
|
81 | .row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%;} | |
82 | .row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%;} |
|
82 | .row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%;} | |
83 | .row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%;} |
|
83 | .row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%;} | |
84 | .row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%;} |
|
84 | .row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%;} | |
85 | .row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%;} |
|
85 | .row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%;} | |
86 | .row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%;} |
|
86 | .row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%;} | |
87 | .row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%;} |
|
87 | .row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%;} | |
88 | .row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%;} |
|
88 | .row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%;} | |
89 | .row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%;} |
|
89 | .row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%;} | |
90 | .row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%;} |
|
90 | .row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%;} | |
91 | .row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%;} |
|
91 | .row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%;} | |
92 | .row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%;} |
|
92 | .row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%;} | |
93 | .row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%;} |
|
93 | .row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%;} | |
94 | .row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%;} |
|
94 | .row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%;} | |
95 | .row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%;} |
|
95 | .row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%;} | |
96 | .row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%;} |
|
96 | .row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%;} | |
97 | .row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%;} |
|
97 | .row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%;} | |
98 | .row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%;} |
|
98 | .row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%;} | |
99 | [class*="span"].hide,.row-fluid [class*="span"].hide{display:none;} |
|
99 | [class*="span"].hide,.row-fluid [class*="span"].hide{display:none;} | |
100 | [class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right;} |
|
100 | [class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right;} | |
101 | .container{margin-right:auto;margin-left:auto;*zoom:1;}.container:before,.container:after{display:table;content:"";line-height:0;} |
|
101 | .container{margin-right:auto;margin-left:auto;*zoom:1;}.container:before,.container:after{display:table;content:"";line-height:0;} | |
102 | .container:after{clear:both;} |
|
102 | .container:after{clear:both;} | |
103 | .container-fluid{padding-right:20px;padding-left:20px;*zoom:1;}.container-fluid:before,.container-fluid:after{display:table;content:"";line-height:0;} |
|
103 | .container-fluid{padding-right:20px;padding-left:20px;*zoom:1;}.container-fluid:before,.container-fluid:after{display:table;content:"";line-height:0;} | |
104 | .container-fluid:after{clear:both;} |
|
104 | .container-fluid:after{clear:both;} | |
105 | p{margin:0 0 10px;} |
|
105 | p{margin:0 0 10px;} | |
106 | .lead{margin-bottom:20px;font-size:19.5px;font-weight:200;line-height:30px;} |
|
106 | .lead{margin-bottom:20px;font-size:19.5px;font-weight:200;line-height:30px;} | |
107 | small{font-size:85%;} |
|
107 | small{font-size:85%;} | |
108 | strong{font-weight:bold;} |
|
108 | strong{font-weight:bold;} | |
109 | em{font-style:italic;} |
|
109 | em{font-style:italic;} | |
110 | cite{font-style:normal;} |
|
110 | cite{font-style:normal;} | |
111 | .muted{color:#999999;} |
|
111 | .muted{color:#999999;} | |
112 | a.muted:hover,a.muted:focus{color:#808080;} |
|
112 | a.muted:hover,a.muted:focus{color:#808080;} | |
113 | .text-warning{color:#c09853;} |
|
113 | .text-warning{color:#c09853;} | |
114 | a.text-warning:hover,a.text-warning:focus{color:#a47e3c;} |
|
114 | a.text-warning:hover,a.text-warning:focus{color:#a47e3c;} | |
115 | .text-error{color:#b94a48;} |
|
115 | .text-error{color:#b94a48;} | |
116 | a.text-error:hover,a.text-error:focus{color:#953b39;} |
|
116 | a.text-error:hover,a.text-error:focus{color:#953b39;} | |
117 | .text-info{color:#3a87ad;} |
|
117 | .text-info{color:#3a87ad;} | |
118 | a.text-info:hover,a.text-info:focus{color:#2d6987;} |
|
118 | a.text-info:hover,a.text-info:focus{color:#2d6987;} | |
119 | .text-success{color:#468847;} |
|
119 | .text-success{color:#468847;} | |
120 | a.text-success:hover,a.text-success:focus{color:#356635;} |
|
120 | a.text-success:hover,a.text-success:focus{color:#356635;} | |
121 | .text-left{text-align:left;} |
|
121 | .text-left{text-align:left;} | |
122 | .text-right{text-align:right;} |
|
122 | .text-right{text-align:right;} | |
123 | .text-center{text-align:center;} |
|
123 | .text-center{text-align:center;} | |
124 | h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:inherit;font-weight:bold;line-height:20px;color:inherit;text-rendering:optimizelegibility;}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#999999;} |
|
124 | h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:inherit;font-weight:bold;line-height:20px;color:inherit;text-rendering:optimizelegibility;}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#999999;} | |
125 | h1,h2,h3{line-height:40px;} |
|
125 | h1,h2,h3{line-height:40px;} | |
126 | h1{font-size:35.75px;} |
|
126 | h1{font-size:35.75px;} | |
127 | h2{font-size:29.25px;} |
|
127 | h2{font-size:29.25px;} | |
128 | h3{font-size:22.75px;} |
|
128 | h3{font-size:22.75px;} | |
129 | h4{font-size:16.25px;} |
|
129 | h4{font-size:16.25px;} | |
130 | h5{font-size:13px;} |
|
130 | h5{font-size:13px;} | |
131 | h6{font-size:11.049999999999999px;} |
|
131 | h6{font-size:11.049999999999999px;} | |
132 | h1 small{font-size:22.75px;} |
|
132 | h1 small{font-size:22.75px;} | |
133 | h2 small{font-size:16.25px;} |
|
133 | h2 small{font-size:16.25px;} | |
134 | h3 small{font-size:13px;} |
|
134 | h3 small{font-size:13px;} | |
135 | h4 small{font-size:13px;} |
|
135 | h4 small{font-size:13px;} | |
136 | .page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #eeeeee;} |
|
136 | .page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #eeeeee;} | |
137 | ul,ol{padding:0;margin:0 0 10px 25px;} |
|
137 | ul,ol{padding:0;margin:0 0 10px 25px;} | |
138 | ul ul,ul ol,ol ol,ol ul{margin-bottom:0;} |
|
138 | ul ul,ul ol,ol ol,ol ul{margin-bottom:0;} | |
139 | li{line-height:20px;} |
|
139 | li{line-height:20px;} | |
140 | ul.unstyled,ol.unstyled{margin-left:0;list-style:none;} |
|
140 | ul.unstyled,ol.unstyled{margin-left:0;list-style:none;} | |
141 | ul.inline,ol.inline{margin-left:0;list-style:none;}ul.inline>li,ol.inline>li{display:inline-block;*display:inline;*zoom:1;padding-left:5px;padding-right:5px;} |
|
141 | ul.inline,ol.inline{margin-left:0;list-style:none;}ul.inline>li,ol.inline>li{display:inline-block;*display:inline;*zoom:1;padding-left:5px;padding-right:5px;} | |
142 | dl{margin-bottom:20px;} |
|
142 | dl{margin-bottom:20px;} | |
143 | dt,dd{line-height:20px;} |
|
143 | dt,dd{line-height:20px;} | |
144 | dt{font-weight:bold;} |
|
144 | dt{font-weight:bold;} | |
145 | dd{margin-left:10px;} |
|
145 | dd{margin-left:10px;} | |
146 | .dl-horizontal{*zoom:1;}.dl-horizontal:before,.dl-horizontal:after{display:table;content:"";line-height:0;} |
|
146 | .dl-horizontal{*zoom:1;}.dl-horizontal:before,.dl-horizontal:after{display:table;content:"";line-height:0;} | |
147 | .dl-horizontal:after{clear:both;} |
|
147 | .dl-horizontal:after{clear:both;} | |
148 | .dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;} |
|
148 | .dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;} | |
149 | .dl-horizontal dd{margin-left:180px;} |
|
149 | .dl-horizontal dd{margin-left:180px;} | |
150 | hr{margin:20px 0;border:0;border-top:1px solid #eeeeee;border-bottom:1px solid #ffffff;} |
|
150 | hr{margin:20px 0;border:0;border-top:1px solid #eeeeee;border-bottom:1px solid #ffffff;} | |
151 | abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999999;} |
|
151 | abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999999;} | |
152 | abbr.initialism{font-size:90%;text-transform:uppercase;} |
|
152 | abbr.initialism{font-size:90%;text-transform:uppercase;} | |
153 | blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eeeeee;}blockquote p{margin-bottom:0;font-size:16.25px;font-weight:300;line-height:1.25;} |
|
153 | blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eeeeee;}blockquote p{margin-bottom:0;font-size:16.25px;font-weight:300;line-height:1.25;} | |
154 | blockquote small{display:block;line-height:20px;color:#999999;}blockquote small:before{content:'\2014 \00A0';} |
|
154 | blockquote small{display:block;line-height:20px;color:#999999;}blockquote small:before{content:'\2014 \00A0';} | |
155 | blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eeeeee;border-left:0;}blockquote.pull-right p,blockquote.pull-right small{text-align:right;} |
|
155 | blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eeeeee;border-left:0;}blockquote.pull-right p,blockquote.pull-right small{text-align:right;} | |
156 | blockquote.pull-right small:before{content:'';} |
|
156 | blockquote.pull-right small:before{content:'';} | |
157 | blockquote.pull-right small:after{content:'\00A0 \2014';} |
|
157 | blockquote.pull-right small:after{content:'\00A0 \2014';} | |
158 | q:before,q:after,blockquote:before,blockquote:after{content:"";} |
|
158 | q:before,q:after,blockquote:before,blockquote:after{content:"";} | |
159 | address{display:block;margin-bottom:20px;font-style:normal;line-height:20px;} |
|
159 | address{display:block;margin-bottom:20px;font-style:normal;line-height:20px;} | |
160 | form{margin:0 0 20px;} |
|
160 | form{margin:0 0 20px;} | |
161 | fieldset{padding:0;margin:0;border:0;} |
|
161 | fieldset{padding:0;margin:0;border:0;} | |
162 | legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:19.5px;line-height:40px;color:#333333;border:0;border-bottom:1px solid #e5e5e5;}legend small{font-size:15px;color:#999999;} |
|
162 | legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:19.5px;line-height:40px;color:#333333;border:0;border-bottom:1px solid #e5e5e5;}legend small{font-size:15px;color:#999999;} | |
163 | label,input,button,select,textarea{font-size:13px;font-weight:normal;line-height:20px;} |
|
163 | label,input,button,select,textarea{font-size:13px;font-weight:normal;line-height:20px;} | |
164 | input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;} |
|
164 | input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;} | |
165 | label{display:block;margin-bottom:5px;} |
|
165 | label{display:block;margin-bottom:5px;} | |
166 | select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:10px;font-size:13px;line-height:20px;color:#555555;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;vertical-align:middle;} |
|
166 | select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:10px;font-size:13px;line-height:20px;color:#555555;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;vertical-align:middle;} | |
167 | input,textarea,.uneditable-input{width:206px;} |
|
167 | input,textarea,.uneditable-input{width:206px;} | |
168 | textarea{height:auto;} |
|
168 | textarea{height:auto;} | |
169 | textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#ffffff;border:1px solid #cccccc;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-webkit-transition:border linear .2s, box-shadow linear .2s;-moz-transition:border linear .2s, box-shadow linear .2s;-o-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82, 168, 236, 0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);} |
|
169 | textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#ffffff;border:1px solid #cccccc;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-webkit-transition:border linear .2s, box-shadow linear .2s;-moz-transition:border linear .2s, box-shadow linear .2s;-o-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82, 168, 236, 0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);} | |
170 | input[type="radio"],input[type="checkbox"]{margin:4px 0 0;*margin-top:0;margin-top:1px \9;line-height:normal;} |
|
170 | input[type="radio"],input[type="checkbox"]{margin:4px 0 0;*margin-top:0;margin-top:1px \9;line-height:normal;} | |
171 | input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto;} |
|
171 | input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto;} | |
172 | select,input[type="file"]{height:30px;*margin-top:4px;line-height:30px;} |
|
172 | select,input[type="file"]{height:30px;*margin-top:4px;line-height:30px;} | |
173 | select{width:220px;border:1px solid #cccccc;background-color:#ffffff;} |
|
173 | select{width:220px;border:1px solid #cccccc;background-color:#ffffff;} | |
174 | select[multiple],select[size]{height:auto;} |
|
174 | select[multiple],select[size]{height:auto;} | |
175 | select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} |
|
175 | select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} | |
176 | .uneditable-input,.uneditable-textarea{color:#999999;background-color:#fcfcfc;border-color:#cccccc;-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);cursor:not-allowed;} |
|
176 | .uneditable-input,.uneditable-textarea{color:#999999;background-color:#fcfcfc;border-color:#cccccc;-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);cursor:not-allowed;} | |
177 | .uneditable-input{overflow:hidden;white-space:nowrap;} |
|
177 | .uneditable-input{overflow:hidden;white-space:nowrap;} | |
178 | .uneditable-textarea{width:auto;height:auto;} |
|
178 | .uneditable-textarea{width:auto;height:auto;} | |
179 | input:-moz-placeholder,textarea:-moz-placeholder{color:#999999;} |
|
179 | input:-moz-placeholder,textarea:-moz-placeholder{color:#999999;} | |
180 | input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#999999;} |
|
180 | input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#999999;} | |
181 | input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999999;} |
|
181 | input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999999;} | |
182 | .radio,.checkbox{min-height:20px;padding-left:20px;} |
|
182 | .radio,.checkbox{min-height:20px;padding-left:20px;} | |
183 | .radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px;} |
|
183 | .radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px;} | |
184 | .controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px;} |
|
184 | .controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px;} | |
185 | .radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle;} |
|
185 | .radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle;} | |
186 | .radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px;} |
|
186 | .radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px;} | |
187 | .input-mini{width:60px;} |
|
187 | .input-mini{width:60px;} | |
188 | .input-small{width:90px;} |
|
188 | .input-small{width:90px;} | |
189 | .input-medium{width:150px;} |
|
189 | .input-medium{width:150px;} | |
190 | .input-large{width:210px;} |
|
190 | .input-large{width:210px;} | |
191 | .input-xlarge{width:270px;} |
|
191 | .input-xlarge{width:270px;} | |
192 | .input-xxlarge{width:530px;} |
|
192 | .input-xxlarge{width:530px;} | |
193 | input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0;} |
|
193 | input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0;} | |
194 | .input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block;} |
|
194 | .input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block;} | |
195 | input,textarea,.uneditable-input{margin-left:0;} |
|
195 | input,textarea,.uneditable-input{margin-left:0;} | |
196 | .controls-row [class*="span"]+[class*="span"]{margin-left:20px;} |
|
196 | .controls-row [class*="span"]+[class*="span"]{margin-left:20px;} | |
197 | input.span12,textarea.span12,.uneditable-input.span12{width:926px;} |
|
197 | input.span12,textarea.span12,.uneditable-input.span12{width:926px;} | |
198 | input.span11,textarea.span11,.uneditable-input.span11{width:846px;} |
|
198 | input.span11,textarea.span11,.uneditable-input.span11{width:846px;} | |
199 | input.span10,textarea.span10,.uneditable-input.span10{width:766px;} |
|
199 | input.span10,textarea.span10,.uneditable-input.span10{width:766px;} | |
200 | input.span9,textarea.span9,.uneditable-input.span9{width:686px;} |
|
200 | input.span9,textarea.span9,.uneditable-input.span9{width:686px;} | |
201 | input.span8,textarea.span8,.uneditable-input.span8{width:606px;} |
|
201 | input.span8,textarea.span8,.uneditable-input.span8{width:606px;} | |
202 | input.span7,textarea.span7,.uneditable-input.span7{width:526px;} |
|
202 | input.span7,textarea.span7,.uneditable-input.span7{width:526px;} | |
203 | input.span6,textarea.span6,.uneditable-input.span6{width:446px;} |
|
203 | input.span6,textarea.span6,.uneditable-input.span6{width:446px;} | |
204 | input.span5,textarea.span5,.uneditable-input.span5{width:366px;} |
|
204 | input.span5,textarea.span5,.uneditable-input.span5{width:366px;} | |
205 | input.span4,textarea.span4,.uneditable-input.span4{width:286px;} |
|
205 | input.span4,textarea.span4,.uneditable-input.span4{width:286px;} | |
206 | input.span3,textarea.span3,.uneditable-input.span3{width:206px;} |
|
206 | input.span3,textarea.span3,.uneditable-input.span3{width:206px;} | |
207 | input.span2,textarea.span2,.uneditable-input.span2{width:126px;} |
|
207 | input.span2,textarea.span2,.uneditable-input.span2{width:126px;} | |
208 | input.span1,textarea.span1,.uneditable-input.span1{width:46px;} |
|
208 | input.span1,textarea.span1,.uneditable-input.span1{width:46px;} | |
209 | .controls-row{*zoom:1;}.controls-row:before,.controls-row:after{display:table;content:"";line-height:0;} |
|
209 | .controls-row{*zoom:1;}.controls-row:before,.controls-row:after{display:table;content:"";line-height:0;} | |
210 | .controls-row:after{clear:both;} |
|
210 | .controls-row:after{clear:both;} | |
211 | .controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left;} |
|
211 | .controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left;} | |
212 | .controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px;} |
|
212 | .controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px;} | |
213 | input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eeeeee;} |
|
213 | input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eeeeee;} | |
214 | input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent;} |
|
214 | input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent;} | |
215 | .control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853;} |
|
215 | .control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853;} | |
216 | .control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853;} |
|
216 | .control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853;} | |
217 | .control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #dbc59e;-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #dbc59e;} |
|
217 | .control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #dbc59e;-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #dbc59e;} | |
218 | .control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853;} |
|
218 | .control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853;} | |
219 | .control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48;} |
|
219 | .control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48;} | |
220 | .control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48;} |
|
220 | .control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48;} | |
221 | .control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #d59392;-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #d59392;} |
|
221 | .control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #d59392;-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #d59392;} | |
222 | .control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48;} |
|
222 | .control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48;} | |
223 | .control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847;} |
|
223 | .control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847;} | |
224 | .control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847;} |
|
224 | .control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847;} | |
225 | .control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #7aba7b;-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #7aba7b;} |
|
225 | .control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #7aba7b;-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #7aba7b;} | |
226 | .control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847;} |
|
226 | .control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847;} | |
227 | .control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#3a87ad;} |
|
227 | .control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#3a87ad;} | |
228 | .control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#3a87ad;} |
|
228 | .control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#3a87ad;} | |
229 | .control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#3a87ad;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#2d6987;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #7ab5d3;-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #7ab5d3;box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #7ab5d3;} |
|
229 | .control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#3a87ad;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#2d6987;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #7ab5d3;-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #7ab5d3;box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #7ab5d3;} | |
230 | .control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#3a87ad;background-color:#d9edf7;border-color:#3a87ad;} |
|
230 | .control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#3a87ad;background-color:#d9edf7;border-color:#3a87ad;} | |
231 | input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b;}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7;} |
|
231 | input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b;}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7;} | |
232 | .form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1;}.form-actions:before,.form-actions:after{display:table;content:"";line-height:0;} |
|
232 | .form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1;}.form-actions:before,.form-actions:after{display:table;content:"";line-height:0;} | |
233 | .form-actions:after{clear:both;} |
|
233 | .form-actions:after{clear:both;} | |
234 | .help-block,.help-inline{color:#262626;} |
|
234 | .help-block,.help-inline{color:#262626;} | |
235 | .help-block{display:block;margin-bottom:10px;} |
|
235 | .help-block{display:block;margin-bottom:10px;} | |
236 | .help-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;padding-left:5px;} |
|
236 | .help-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;padding-left:5px;} | |
237 | .input-append,.input-prepend{display:inline-block;margin-bottom:10px;vertical-align:middle;font-size:0;white-space:nowrap;}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu,.input-append .popover,.input-prepend .popover{font-size:13px;} |
|
237 | .input-append,.input-prepend{display:inline-block;margin-bottom:10px;vertical-align:middle;font-size:0;white-space:nowrap;}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu,.input-append .popover,.input-prepend .popover{font-size:13px;} | |
238 | .input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2;} |
|
238 | .input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2;} | |
239 | .input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:13px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #ffffff;background-color:#eeeeee;border:1px solid #ccc;} |
|
239 | .input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:13px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #ffffff;background-color:#eeeeee;border:1px solid #ccc;} | |
240 | .input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} |
|
240 | .input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} | |
241 | .input-append .active,.input-prepend .active{background-color:#a9dba9;border-color:#46a546;} |
|
241 | .input-append .active,.input-prepend .active{background-color:#a9dba9;border-color:#46a546;} | |
242 | .input-prepend .add-on,.input-prepend .btn{margin-right:-1px;} |
|
242 | .input-prepend .add-on,.input-prepend .btn{margin-right:-1px;} | |
243 | .input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px;} |
|
243 | .input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px;} | |
244 | .input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px;}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;} |
|
244 | .input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px;}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;} | |
245 | .input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px;} |
|
245 | .input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px;} | |
246 | .input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;} |
|
246 | .input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;} | |
247 | .input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;} |
|
247 | .input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;} | |
248 | .input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px;} |
|
248 | .input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px;} | |
249 | .input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;} |
|
249 | .input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;} | |
250 | .input-prepend.input-append .btn-group:first-child{margin-left:0;} |
|
250 | .input-prepend.input-append .btn-group:first-child{margin-left:0;} | |
251 | input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;} |
|
251 | input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;} | |
252 | .form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} |
|
252 | .form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} | |
253 | .form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px;} |
|
253 | .form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px;} | |
254 | .form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0;} |
|
254 | .form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0;} | |
255 | .form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0;} |
|
255 | .form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0;} | |
256 | .form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px;} |
|
256 | .form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px;} | |
257 | .form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;*zoom:1;margin-bottom:0;vertical-align:middle;} |
|
257 | .form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;*zoom:1;margin-bottom:0;vertical-align:middle;} | |
258 | .form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none;} |
|
258 | .form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none;} | |
259 | .form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block;} |
|
259 | .form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block;} | |
260 | .form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0;} |
|
260 | .form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0;} | |
261 | .form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle;} |
|
261 | .form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle;} | |
262 | .form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0;} |
|
262 | .form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0;} | |
263 | .control-group{margin-bottom:10px;} |
|
263 | .control-group{margin-bottom:10px;} | |
264 | legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate;} |
|
264 | legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate;} | |
265 | .form-horizontal .control-group{margin-bottom:20px;*zoom:1;}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;content:"";line-height:0;} |
|
265 | .form-horizontal .control-group{margin-bottom:20px;*zoom:1;}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;content:"";line-height:0;} | |
266 | .form-horizontal .control-group:after{clear:both;} |
|
266 | .form-horizontal .control-group:after{clear:both;} | |
267 | .form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right;} |
|
267 | .form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right;} | |
268 | .form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0;}.form-horizontal .controls:first-child{*padding-left:180px;} |
|
268 | .form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0;}.form-horizontal .controls:first-child{*padding-left:180px;} | |
269 | .form-horizontal .help-block{margin-bottom:0;} |
|
269 | .form-horizontal .help-block{margin-bottom:0;} | |
270 | .form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10px;} |
|
270 | .form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10px;} | |
271 | .form-horizontal .form-actions{padding-left:180px;} |
|
271 | .form-horizontal .form-actions{padding-left:180px;} | |
272 | table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0;} |
|
272 | table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0;} | |
273 | .table{width:100%;margin-bottom:20px;}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #dddddd;} |
|
273 | .table{width:100%;margin-bottom:20px;}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #dddddd;} | |
274 | .table th{font-weight:bold;} |
|
274 | .table th{font-weight:bold;} | |
275 | .table thead th{vertical-align:bottom;} |
|
275 | .table thead th{vertical-align:bottom;} | |
276 | .table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0;} |
|
276 | .table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0;} | |
277 | .table tbody+tbody{border-top:2px solid #dddddd;} |
|
277 | .table tbody+tbody{border-top:2px solid #dddddd;} | |
278 | .table .table{background-color:#ffffff;} |
|
278 | .table .table{background-color:#ffffff;} | |
279 | .table-condensed th,.table-condensed td{padding:4px 5px;} |
|
279 | .table-condensed th,.table-condensed td{padding:4px 5px;} | |
280 | .table-bordered{border:1px solid #dddddd;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}.table-bordered th,.table-bordered td{border-left:1px solid #dddddd;} |
|
280 | .table-bordered{border:1px solid #dddddd;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}.table-bordered th,.table-bordered td{border-left:1px solid #dddddd;} | |
281 | .table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0;} |
|
281 | .table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0;} | |
282 | .table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child,.table-bordered tbody:first-child tr:first-child>th:first-child{-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;} |
|
282 | .table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child,.table-bordered tbody:first-child tr:first-child>th:first-child{-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;} | |
283 | .table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child,.table-bordered tbody:first-child tr:first-child>th:last-child{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;} |
|
283 | .table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child,.table-bordered tbody:first-child tr:first-child>th:last-child{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;} | |
284 | .table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tbody:last-child tr:last-child>th:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>th:first-child{-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;} |
|
284 | .table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tbody:last-child tr:last-child>th:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>th:first-child{-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;} | |
285 | .table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tbody:last-child tr:last-child>th:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>th:last-child{-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;} |
|
285 | .table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tbody:last-child tr:last-child>th:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>th:last-child{-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;} | |
286 | .table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;-moz-border-radius-bottomleft:0;border-bottom-left-radius:0;} |
|
286 | .table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;-moz-border-radius-bottomleft:0;border-bottom-left-radius:0;} | |
287 | .table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;-moz-border-radius-bottomright:0;border-bottom-right-radius:0;} |
|
287 | .table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;-moz-border-radius-bottomright:0;border-bottom-right-radius:0;} | |
288 | .table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;} |
|
288 | .table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;} | |
289 | .table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;} |
|
289 | .table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;} | |
290 | .table-striped tbody>tr:nth-child(odd)>td,.table-striped tbody>tr:nth-child(odd)>th{background-color:#f9f9f9;} |
|
290 | .table-striped tbody>tr:nth-child(odd)>td,.table-striped tbody>tr:nth-child(odd)>th{background-color:#f9f9f9;} | |
291 | .table-hover tbody tr:hover>td,.table-hover tbody tr:hover>th{background-color:#f5f5f5;} |
|
291 | .table-hover tbody tr:hover>td,.table-hover tbody tr:hover>th{background-color:#f5f5f5;} | |
292 | table td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0;} |
|
292 | table td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0;} | |
293 | .table td.span1,.table th.span1{float:none;width:44px;margin-left:0;} |
|
293 | .table td.span1,.table th.span1{float:none;width:44px;margin-left:0;} | |
294 | .table td.span2,.table th.span2{float:none;width:124px;margin-left:0;} |
|
294 | .table td.span2,.table th.span2{float:none;width:124px;margin-left:0;} | |
295 | .table td.span3,.table th.span3{float:none;width:204px;margin-left:0;} |
|
295 | .table td.span3,.table th.span3{float:none;width:204px;margin-left:0;} | |
296 | .table td.span4,.table th.span4{float:none;width:284px;margin-left:0;} |
|
296 | .table td.span4,.table th.span4{float:none;width:284px;margin-left:0;} | |
297 | .table td.span5,.table th.span5{float:none;width:364px;margin-left:0;} |
|
297 | .table td.span5,.table th.span5{float:none;width:364px;margin-left:0;} | |
298 | .table td.span6,.table th.span6{float:none;width:444px;margin-left:0;} |
|
298 | .table td.span6,.table th.span6{float:none;width:444px;margin-left:0;} | |
299 | .table td.span7,.table th.span7{float:none;width:524px;margin-left:0;} |
|
299 | .table td.span7,.table th.span7{float:none;width:524px;margin-left:0;} | |
300 | .table td.span8,.table th.span8{float:none;width:604px;margin-left:0;} |
|
300 | .table td.span8,.table th.span8{float:none;width:604px;margin-left:0;} | |
301 | .table td.span9,.table th.span9{float:none;width:684px;margin-left:0;} |
|
301 | .table td.span9,.table th.span9{float:none;width:684px;margin-left:0;} | |
302 | .table td.span10,.table th.span10{float:none;width:764px;margin-left:0;} |
|
302 | .table td.span10,.table th.span10{float:none;width:764px;margin-left:0;} | |
303 | .table td.span11,.table th.span11{float:none;width:844px;margin-left:0;} |
|
303 | .table td.span11,.table th.span11{float:none;width:844px;margin-left:0;} | |
304 | .table td.span12,.table th.span12{float:none;width:924px;margin-left:0;} |
|
304 | .table td.span12,.table th.span12{float:none;width:924px;margin-left:0;} | |
305 | .table tbody tr.success>td{background-color:#dff0d8;} |
|
305 | .table tbody tr.success>td{background-color:#dff0d8;} | |
306 | .table tbody tr.error>td{background-color:#f2dede;} |
|
306 | .table tbody tr.error>td{background-color:#f2dede;} | |
307 | .table tbody tr.warning>td{background-color:#fcf8e3;} |
|
307 | .table tbody tr.warning>td{background-color:#fcf8e3;} | |
308 | .table tbody tr.info>td{background-color:#d9edf7;} |
|
308 | .table tbody tr.info>td{background-color:#d9edf7;} | |
309 | .table-hover tbody tr.success:hover>td{background-color:#d0e9c6;} |
|
309 | .table-hover tbody tr.success:hover>td{background-color:#d0e9c6;} | |
310 | .table-hover tbody tr.error:hover>td{background-color:#ebcccc;} |
|
310 | .table-hover tbody tr.error:hover>td{background-color:#ebcccc;} | |
311 | .table-hover tbody tr.warning:hover>td{background-color:#faf2cc;} |
|
311 | .table-hover tbody tr.warning:hover>td{background-color:#faf2cc;} | |
312 | .table-hover tbody tr.info:hover>td{background-color:#c4e3f3;} |
|
312 | .table-hover tbody tr.info:hover>td{background-color:#c4e3f3;} | |
313 | [class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat;margin-top:1px;} |
|
313 | [class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat;margin-top:1px;} | |
314 | .icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:focus>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>li>a:focus>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:focus>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"],.dropdown-submenu:focus>a>[class*=" icon-"]{background-image:url("../img/glyphicons-halflings-white.png");} |
|
314 | .icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:focus>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>li>a:focus>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:focus>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"],.dropdown-submenu:focus>a>[class*=" icon-"]{background-image:url("../img/glyphicons-halflings-white.png");} | |
315 | .icon-glass{background-position:0 0;} |
|
315 | .icon-glass{background-position:0 0;} | |
316 | .icon-music{background-position:-24px 0;} |
|
316 | .icon-music{background-position:-24px 0;} | |
317 | .icon-search{background-position:-48px 0;} |
|
317 | .icon-search{background-position:-48px 0;} | |
318 | .icon-envelope{background-position:-72px 0;} |
|
318 | .icon-envelope{background-position:-72px 0;} | |
319 | .icon-heart{background-position:-96px 0;} |
|
319 | .icon-heart{background-position:-96px 0;} | |
320 | .icon-star{background-position:-120px 0;} |
|
320 | .icon-star{background-position:-120px 0;} | |
321 | .icon-star-empty{background-position:-144px 0;} |
|
321 | .icon-star-empty{background-position:-144px 0;} | |
322 | .icon-user{background-position:-168px 0;} |
|
322 | .icon-user{background-position:-168px 0;} | |
323 | .icon-film{background-position:-192px 0;} |
|
323 | .icon-film{background-position:-192px 0;} | |
324 | .icon-th-large{background-position:-216px 0;} |
|
324 | .icon-th-large{background-position:-216px 0;} | |
325 | .icon-th{background-position:-240px 0;} |
|
325 | .icon-th{background-position:-240px 0;} | |
326 | .icon-th-list{background-position:-264px 0;} |
|
326 | .icon-th-list{background-position:-264px 0;} | |
327 | .icon-ok{background-position:-288px 0;} |
|
327 | .icon-ok{background-position:-288px 0;} | |
328 | .icon-remove{background-position:-312px 0;} |
|
328 | .icon-remove{background-position:-312px 0;} | |
329 | .icon-zoom-in{background-position:-336px 0;} |
|
329 | .icon-zoom-in{background-position:-336px 0;} | |
330 | .icon-zoom-out{background-position:-360px 0;} |
|
330 | .icon-zoom-out{background-position:-360px 0;} | |
331 | .icon-off{background-position:-384px 0;} |
|
331 | .icon-off{background-position:-384px 0;} | |
332 | .icon-signal{background-position:-408px 0;} |
|
332 | .icon-signal{background-position:-408px 0;} | |
333 | .icon-cog{background-position:-432px 0;} |
|
333 | .icon-cog{background-position:-432px 0;} | |
334 | .icon-trash{background-position:-456px 0;} |
|
334 | .icon-trash{background-position:-456px 0;} | |
335 | .icon-home{background-position:0 -24px;} |
|
335 | .icon-home{background-position:0 -24px;} | |
336 | .icon-file{background-position:-24px -24px;} |
|
336 | .icon-file{background-position:-24px -24px;} | |
337 | .icon-time{background-position:-48px -24px;} |
|
337 | .icon-time{background-position:-48px -24px;} | |
338 | .icon-road{background-position:-72px -24px;} |
|
338 | .icon-road{background-position:-72px -24px;} | |
339 | .icon-download-alt{background-position:-96px -24px;} |
|
339 | .icon-download-alt{background-position:-96px -24px;} | |
340 | .icon-download{background-position:-120px -24px;} |
|
340 | .icon-download{background-position:-120px -24px;} | |
341 | .icon-upload{background-position:-144px -24px;} |
|
341 | .icon-upload{background-position:-144px -24px;} | |
342 | .icon-inbox{background-position:-168px -24px;} |
|
342 | .icon-inbox{background-position:-168px -24px;} | |
343 | .icon-play-circle{background-position:-192px -24px;} |
|
343 | .icon-play-circle{background-position:-192px -24px;} | |
344 | .icon-repeat{background-position:-216px -24px;} |
|
344 | .icon-repeat{background-position:-216px -24px;} | |
345 | .icon-refresh{background-position:-240px -24px;} |
|
345 | .icon-refresh{background-position:-240px -24px;} | |
346 | .icon-list-alt{background-position:-264px -24px;} |
|
346 | .icon-list-alt{background-position:-264px -24px;} | |
347 | .icon-lock{background-position:-287px -24px;} |
|
347 | .icon-lock{background-position:-287px -24px;} | |
348 | .icon-flag{background-position:-312px -24px;} |
|
348 | .icon-flag{background-position:-312px -24px;} | |
349 | .icon-headphones{background-position:-336px -24px;} |
|
349 | .icon-headphones{background-position:-336px -24px;} | |
350 | .icon-volume-off{background-position:-360px -24px;} |
|
350 | .icon-volume-off{background-position:-360px -24px;} | |
351 | .icon-volume-down{background-position:-384px -24px;} |
|
351 | .icon-volume-down{background-position:-384px -24px;} | |
352 | .icon-volume-up{background-position:-408px -24px;} |
|
352 | .icon-volume-up{background-position:-408px -24px;} | |
353 | .icon-qrcode{background-position:-432px -24px;} |
|
353 | .icon-qrcode{background-position:-432px -24px;} | |
354 | .icon-barcode{background-position:-456px -24px;} |
|
354 | .icon-barcode{background-position:-456px -24px;} | |
355 | .icon-tag{background-position:0 -48px;} |
|
355 | .icon-tag{background-position:0 -48px;} | |
356 | .icon-tags{background-position:-25px -48px;} |
|
356 | .icon-tags{background-position:-25px -48px;} | |
357 | .icon-book{background-position:-48px -48px;} |
|
357 | .icon-book{background-position:-48px -48px;} | |
358 | .icon-bookmark{background-position:-72px -48px;} |
|
358 | .icon-bookmark{background-position:-72px -48px;} | |
359 | .icon-print{background-position:-96px -48px;} |
|
359 | .icon-print{background-position:-96px -48px;} | |
360 | .icon-camera{background-position:-120px -48px;} |
|
360 | .icon-camera{background-position:-120px -48px;} | |
361 | .icon-font{background-position:-144px -48px;} |
|
361 | .icon-font{background-position:-144px -48px;} | |
362 | .icon-bold{background-position:-167px -48px;} |
|
362 | .icon-bold{background-position:-167px -48px;} | |
363 | .icon-italic{background-position:-192px -48px;} |
|
363 | .icon-italic{background-position:-192px -48px;} | |
364 | .icon-text-height{background-position:-216px -48px;} |
|
364 | .icon-text-height{background-position:-216px -48px;} | |
365 | .icon-text-width{background-position:-240px -48px;} |
|
365 | .icon-text-width{background-position:-240px -48px;} | |
366 | .icon-align-left{background-position:-264px -48px;} |
|
366 | .icon-align-left{background-position:-264px -48px;} | |
367 | .icon-align-center{background-position:-288px -48px;} |
|
367 | .icon-align-center{background-position:-288px -48px;} | |
368 | .icon-align-right{background-position:-312px -48px;} |
|
368 | .icon-align-right{background-position:-312px -48px;} | |
369 | .icon-align-justify{background-position:-336px -48px;} |
|
369 | .icon-align-justify{background-position:-336px -48px;} | |
370 | .icon-list{background-position:-360px -48px;} |
|
370 | .icon-list{background-position:-360px -48px;} | |
371 | .icon-indent-left{background-position:-384px -48px;} |
|
371 | .icon-indent-left{background-position:-384px -48px;} | |
372 | .icon-indent-right{background-position:-408px -48px;} |
|
372 | .icon-indent-right{background-position:-408px -48px;} | |
373 | .icon-facetime-video{background-position:-432px -48px;} |
|
373 | .icon-facetime-video{background-position:-432px -48px;} | |
374 | .icon-picture{background-position:-456px -48px;} |
|
374 | .icon-picture{background-position:-456px -48px;} | |
375 | .icon-pencil{background-position:0 -72px;} |
|
375 | .icon-pencil{background-position:0 -72px;} | |
376 | .icon-map-marker{background-position:-24px -72px;} |
|
376 | .icon-map-marker{background-position:-24px -72px;} | |
377 | .icon-adjust{background-position:-48px -72px;} |
|
377 | .icon-adjust{background-position:-48px -72px;} | |
378 | .icon-tint{background-position:-72px -72px;} |
|
378 | .icon-tint{background-position:-72px -72px;} | |
379 | .icon-edit{background-position:-96px -72px;} |
|
379 | .icon-edit{background-position:-96px -72px;} | |
380 | .icon-share{background-position:-120px -72px;} |
|
380 | .icon-share{background-position:-120px -72px;} | |
381 | .icon-check{background-position:-144px -72px;} |
|
381 | .icon-check{background-position:-144px -72px;} | |
382 | .icon-move{background-position:-168px -72px;} |
|
382 | .icon-move{background-position:-168px -72px;} | |
383 | .icon-step-backward{background-position:-192px -72px;} |
|
383 | .icon-step-backward{background-position:-192px -72px;} | |
384 | .icon-fast-backward{background-position:-216px -72px;} |
|
384 | .icon-fast-backward{background-position:-216px -72px;} | |
385 | .icon-backward{background-position:-240px -72px;} |
|
385 | .icon-backward{background-position:-240px -72px;} | |
386 | .icon-play{background-position:-264px -72px;} |
|
386 | .icon-play{background-position:-264px -72px;} | |
387 | .icon-pause{background-position:-288px -72px;} |
|
387 | .icon-pause{background-position:-288px -72px;} | |
388 | .icon-stop{background-position:-312px -72px;} |
|
388 | .icon-stop{background-position:-312px -72px;} | |
389 | .icon-forward{background-position:-336px -72px;} |
|
389 | .icon-forward{background-position:-336px -72px;} | |
390 | .icon-fast-forward{background-position:-360px -72px;} |
|
390 | .icon-fast-forward{background-position:-360px -72px;} | |
391 | .icon-step-forward{background-position:-384px -72px;} |
|
391 | .icon-step-forward{background-position:-384px -72px;} | |
392 | .icon-eject{background-position:-408px -72px;} |
|
392 | .icon-eject{background-position:-408px -72px;} | |
393 | .icon-chevron-left{background-position:-432px -72px;} |
|
393 | .icon-chevron-left{background-position:-432px -72px;} | |
394 | .icon-chevron-right{background-position:-456px -72px;} |
|
394 | .icon-chevron-right{background-position:-456px -72px;} | |
395 | .icon-plus-sign{background-position:0 -96px;} |
|
395 | .icon-plus-sign{background-position:0 -96px;} | |
396 | .icon-minus-sign{background-position:-24px -96px;} |
|
396 | .icon-minus-sign{background-position:-24px -96px;} | |
397 | .icon-remove-sign{background-position:-48px -96px;} |
|
397 | .icon-remove-sign{background-position:-48px -96px;} | |
398 | .icon-ok-sign{background-position:-72px -96px;} |
|
398 | .icon-ok-sign{background-position:-72px -96px;} | |
399 | .icon-question-sign{background-position:-96px -96px;} |
|
399 | .icon-question-sign{background-position:-96px -96px;} | |
400 | .icon-info-sign{background-position:-120px -96px;} |
|
400 | .icon-info-sign{background-position:-120px -96px;} | |
401 | .icon-screenshot{background-position:-144px -96px;} |
|
401 | .icon-screenshot{background-position:-144px -96px;} | |
402 | .icon-remove-circle{background-position:-168px -96px;} |
|
402 | .icon-remove-circle{background-position:-168px -96px;} | |
403 | .icon-ok-circle{background-position:-192px -96px;} |
|
403 | .icon-ok-circle{background-position:-192px -96px;} | |
404 | .icon-ban-circle{background-position:-216px -96px;} |
|
404 | .icon-ban-circle{background-position:-216px -96px;} | |
405 | .icon-arrow-left{background-position:-240px -96px;} |
|
405 | .icon-arrow-left{background-position:-240px -96px;} | |
406 | .icon-arrow-right{background-position:-264px -96px;} |
|
406 | .icon-arrow-right{background-position:-264px -96px;} | |
407 | .icon-arrow-up{background-position:-289px -96px;} |
|
407 | .icon-arrow-up{background-position:-289px -96px;} | |
408 | .icon-arrow-down{background-position:-312px -96px;} |
|
408 | .icon-arrow-down{background-position:-312px -96px;} | |
409 | .icon-share-alt{background-position:-336px -96px;} |
|
409 | .icon-share-alt{background-position:-336px -96px;} | |
410 | .icon-resize-full{background-position:-360px -96px;} |
|
410 | .icon-resize-full{background-position:-360px -96px;} | |
411 | .icon-resize-small{background-position:-384px -96px;} |
|
411 | .icon-resize-small{background-position:-384px -96px;} | |
412 | .icon-plus{background-position:-408px -96px;} |
|
412 | .icon-plus{background-position:-408px -96px;} | |
413 | .icon-minus{background-position:-433px -96px;} |
|
413 | .icon-minus{background-position:-433px -96px;} | |
414 | .icon-asterisk{background-position:-456px -96px;} |
|
414 | .icon-asterisk{background-position:-456px -96px;} | |
415 | .icon-exclamation-sign{background-position:0 -120px;} |
|
415 | .icon-exclamation-sign{background-position:0 -120px;} | |
416 | .icon-gift{background-position:-24px -120px;} |
|
416 | .icon-gift{background-position:-24px -120px;} | |
417 | .icon-leaf{background-position:-48px -120px;} |
|
417 | .icon-leaf{background-position:-48px -120px;} | |
418 | .icon-fire{background-position:-72px -120px;} |
|
418 | .icon-fire{background-position:-72px -120px;} | |
419 | .icon-eye-open{background-position:-96px -120px;} |
|
419 | .icon-eye-open{background-position:-96px -120px;} | |
420 | .icon-eye-close{background-position:-120px -120px;} |
|
420 | .icon-eye-close{background-position:-120px -120px;} | |
421 | .icon-warning-sign{background-position:-144px -120px;} |
|
421 | .icon-warning-sign{background-position:-144px -120px;} | |
422 | .icon-plane{background-position:-168px -120px;} |
|
422 | .icon-plane{background-position:-168px -120px;} | |
423 | .icon-calendar{background-position:-192px -120px;} |
|
423 | .icon-calendar{background-position:-192px -120px;} | |
424 | .icon-random{background-position:-216px -120px;width:16px;} |
|
424 | .icon-random{background-position:-216px -120px;width:16px;} | |
425 | .icon-comment{background-position:-240px -120px;} |
|
425 | .icon-comment{background-position:-240px -120px;} | |
426 | .icon-magnet{background-position:-264px -120px;} |
|
426 | .icon-magnet{background-position:-264px -120px;} | |
427 | .icon-chevron-up{background-position:-288px -120px;} |
|
427 | .icon-chevron-up{background-position:-288px -120px;} | |
428 | .icon-chevron-down{background-position:-313px -119px;} |
|
428 | .icon-chevron-down{background-position:-313px -119px;} | |
429 | .icon-retweet{background-position:-336px -120px;} |
|
429 | .icon-retweet{background-position:-336px -120px;} | |
430 | .icon-shopping-cart{background-position:-360px -120px;} |
|
430 | .icon-shopping-cart{background-position:-360px -120px;} | |
431 | .icon-folder-close{background-position:-384px -120px;width:16px;} |
|
431 | .icon-folder-close{background-position:-384px -120px;width:16px;} | |
432 | .icon-folder-open{background-position:-408px -120px;width:16px;} |
|
432 | .icon-folder-open{background-position:-408px -120px;width:16px;} | |
433 | .icon-resize-vertical{background-position:-432px -119px;} |
|
433 | .icon-resize-vertical{background-position:-432px -119px;} | |
434 | .icon-resize-horizontal{background-position:-456px -118px;} |
|
434 | .icon-resize-horizontal{background-position:-456px -118px;} | |
435 | .icon-hdd{background-position:0 -144px;} |
|
435 | .icon-hdd{background-position:0 -144px;} | |
436 | .icon-bullhorn{background-position:-24px -144px;} |
|
436 | .icon-bullhorn{background-position:-24px -144px;} | |
437 | .icon-bell{background-position:-48px -144px;} |
|
437 | .icon-bell{background-position:-48px -144px;} | |
438 | .icon-certificate{background-position:-72px -144px;} |
|
438 | .icon-certificate{background-position:-72px -144px;} | |
439 | .icon-thumbs-up{background-position:-96px -144px;} |
|
439 | .icon-thumbs-up{background-position:-96px -144px;} | |
440 | .icon-thumbs-down{background-position:-120px -144px;} |
|
440 | .icon-thumbs-down{background-position:-120px -144px;} | |
441 | .icon-hand-right{background-position:-144px -144px;} |
|
441 | .icon-hand-right{background-position:-144px -144px;} | |
442 | .icon-hand-left{background-position:-168px -144px;} |
|
442 | .icon-hand-left{background-position:-168px -144px;} | |
443 | .icon-hand-up{background-position:-192px -144px;} |
|
443 | .icon-hand-up{background-position:-192px -144px;} | |
444 | .icon-hand-down{background-position:-216px -144px;} |
|
444 | .icon-hand-down{background-position:-216px -144px;} | |
445 | .icon-circle-arrow-right{background-position:-240px -144px;} |
|
445 | .icon-circle-arrow-right{background-position:-240px -144px;} | |
446 | .icon-circle-arrow-left{background-position:-264px -144px;} |
|
446 | .icon-circle-arrow-left{background-position:-264px -144px;} | |
447 | .icon-circle-arrow-up{background-position:-288px -144px;} |
|
447 | .icon-circle-arrow-up{background-position:-288px -144px;} | |
448 | .icon-circle-arrow-down{background-position:-312px -144px;} |
|
448 | .icon-circle-arrow-down{background-position:-312px -144px;} | |
449 | .icon-globe{background-position:-336px -144px;} |
|
449 | .icon-globe{background-position:-336px -144px;} | |
450 | .icon-wrench{background-position:-360px -144px;} |
|
450 | .icon-wrench{background-position:-360px -144px;} | |
451 | .icon-tasks{background-position:-384px -144px;} |
|
451 | .icon-tasks{background-position:-384px -144px;} | |
452 | .icon-filter{background-position:-408px -144px;} |
|
452 | .icon-filter{background-position:-408px -144px;} | |
453 | .icon-briefcase{background-position:-432px -144px;} |
|
453 | .icon-briefcase{background-position:-432px -144px;} | |
454 | .icon-fullscreen{background-position:-456px -144px;} |
|
454 | .icon-fullscreen{background-position:-456px -144px;} | |
455 | .dropup,.dropdown{position:relative;} |
|
455 | .dropup,.dropdown{position:relative;} | |
456 | .dropdown-toggle{*margin-bottom:-3px;} |
|
456 | .dropdown-toggle{*margin-bottom:-3px;} | |
457 | .dropdown-toggle:active,.open .dropdown-toggle{outline:0;} |
|
457 | .dropdown-toggle:active,.open .dropdown-toggle{outline:0;} | |
458 | .caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000000;border-right:4px solid transparent;border-left:4px solid transparent;content:"";} |
|
458 | .caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000000;border-right:4px solid transparent;border-left:4px solid transparent;content:"";} | |
459 | .dropdown .caret{margin-top:8px;margin-left:2px;} |
|
459 | .dropdown .caret{margin-top:8px;margin-left:2px;} | |
460 | .dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#ffffff;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;}.dropdown-menu.pull-right{right:0;left:auto;} |
|
460 | .dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#ffffff;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;}.dropdown-menu.pull-right{right:0;left:auto;} | |
461 | .dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #ffffff;} |
|
461 | .dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #ffffff;} | |
462 | .dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:20px;color:#333333;white-space:nowrap;} |
|
462 | .dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:20px;color:#333333;white-space:nowrap;} | |
463 | .dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-submenu:hover>a,.dropdown-submenu:focus>a{text-decoration:none;color:#ffffff;background-color:#0081c2;background-image:-moz-linear-gradient(top, #0088cc, #0077b3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3));background-image:-webkit-linear-gradient(top, #0088cc, #0077b3);background-image:-o-linear-gradient(top, #0088cc, #0077b3);background-image:linear-gradient(to bottom, #0088cc, #0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0);} |
|
463 | .dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-submenu:hover>a,.dropdown-submenu:focus>a{text-decoration:none;color:#ffffff;background-color:#0081c2;background-image:-moz-linear-gradient(top, #0088cc, #0077b3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3));background-image:-webkit-linear-gradient(top, #0088cc, #0077b3);background-image:-o-linear-gradient(top, #0088cc, #0077b3);background-image:linear-gradient(to bottom, #0088cc, #0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0);} | |
464 | .dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#ffffff;text-decoration:none;outline:0;background-color:#0081c2;background-image:-moz-linear-gradient(top, #0088cc, #0077b3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3));background-image:-webkit-linear-gradient(top, #0088cc, #0077b3);background-image:-o-linear-gradient(top, #0088cc, #0077b3);background-image:linear-gradient(to bottom, #0088cc, #0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0);} |
|
464 | .dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#ffffff;text-decoration:none;outline:0;background-color:#0081c2;background-image:-moz-linear-gradient(top, #0088cc, #0077b3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3));background-image:-webkit-linear-gradient(top, #0088cc, #0077b3);background-image:-o-linear-gradient(top, #0088cc, #0077b3);background-image:linear-gradient(to bottom, #0088cc, #0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0);} | |
465 | .dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999999;} |
|
465 | .dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999999;} | |
466 | .dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:default;} |
|
466 | .dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:default;} | |
467 | .open{*z-index:1000;}.open>.dropdown-menu{display:block;} |
|
467 | .open{*z-index:1000;}.open>.dropdown-menu{display:block;} | |
468 | .pull-right>.dropdown-menu{right:0;left:auto;} |
|
468 | .pull-right>.dropdown-menu{right:0;left:auto;} | |
469 | .dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000000;content:"";} |
|
469 | .dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000000;content:"";} | |
470 | .dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px;} |
|
470 | .dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px;} | |
471 | .dropdown-submenu{position:relative;} |
|
471 | .dropdown-submenu{position:relative;} | |
472 | .dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px;} |
|
472 | .dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px;} | |
473 | .dropdown-submenu:hover>.dropdown-menu{display:block;} |
|
473 | .dropdown-submenu:hover>.dropdown-menu{display:block;} | |
474 | .dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0;} |
|
474 | .dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0;} | |
475 | .dropdown-submenu>a:after{display:block;content:" ";float:right;width:0;height:0;border-color:transparent;border-style:solid;border-width:5px 0 5px 5px;border-left-color:#cccccc;margin-top:5px;margin-right:-10px;} |
|
475 | .dropdown-submenu>a:after{display:block;content:" ";float:right;width:0;height:0;border-color:transparent;border-style:solid;border-width:5px 0 5px 5px;border-left-color:#cccccc;margin-top:5px;margin-right:-10px;} | |
476 | .dropdown-submenu:hover>a:after{border-left-color:#ffffff;} |
|
476 | .dropdown-submenu:hover>a:after{border-left-color:#ffffff;} | |
477 | .dropdown-submenu.pull-left{float:none;}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px;} |
|
477 | .dropdown-submenu.pull-left{float:none;}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px;} | |
478 | .dropdown .dropdown-menu .nav-header{padding-left:20px;padding-right:20px;} |
|
478 | .dropdown .dropdown-menu .nav-header{padding-left:20px;padding-right:20px;} | |
479 | .typeahead{z-index:1051;margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} |
|
479 | .typeahead{z-index:1051;margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} | |
480 | .well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);}.well blockquote{border-color:#ddd;border-color:rgba(0, 0, 0, 0.15);} |
|
480 | .well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);}.well blockquote{border-color:#ddd;border-color:rgba(0, 0, 0, 0.15);} | |
481 | .well-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;} |
|
481 | .well-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;} | |
482 | .well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} |
|
482 | .well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} | |
483 | .fade{opacity:0;-webkit-transition:opacity 0.15s linear;-moz-transition:opacity 0.15s linear;-o-transition:opacity 0.15s linear;transition:opacity 0.15s linear;}.fade.in{opacity:1;} |
|
483 | .fade{opacity:0;-webkit-transition:opacity 0.15s linear;-moz-transition:opacity 0.15s linear;-o-transition:opacity 0.15s linear;transition:opacity 0.15s linear;}.fade.in{opacity:1;} | |
484 | .collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height 0.35s ease;-moz-transition:height 0.35s ease;-o-transition:height 0.35s ease;transition:height 0.35s ease;}.collapse.in{height:auto;} |
|
484 | .collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height 0.35s ease;-moz-transition:height 0.35s ease;-o-transition:height 0.35s ease;transition:height 0.35s ease;}.collapse.in{height:auto;} | |
485 | .close{float:right;font-size:20px;font-weight:bold;line-height:20px;color:#000000;text-shadow:0 1px 0 #ffffff;opacity:0.2;filter:alpha(opacity=20);}.close:hover,.close:focus{color:#000000;text-decoration:none;cursor:pointer;opacity:0.4;filter:alpha(opacity=40);} |
|
485 | .close{float:right;font-size:20px;font-weight:bold;line-height:20px;color:#000000;text-shadow:0 1px 0 #ffffff;opacity:0.2;filter:alpha(opacity=20);}.close:hover,.close:focus{color:#000000;text-decoration:none;cursor:pointer;opacity:0.4;filter:alpha(opacity=40);} | |
486 | button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none;} |
|
486 | button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none;} | |
487 | .btn{display:inline-block;*display:inline;*zoom:1;padding:4px 12px;margin-bottom:0;font-size:13px;line-height:20px;text-align:center;vertical-align:middle;cursor:pointer;color:#333333;text-shadow:0 1px 1px rgba(255, 255, 255, 0.75);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(to bottom, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#e6e6e6;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);border:1px solid #bbbbbb;*border:0;border-bottom-color:#a2a2a2;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*margin-left:.3em;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#333333;background-color:#e6e6e6;*background-color:#d9d9d9;} |
|
487 | .btn{display:inline-block;*display:inline;*zoom:1;padding:4px 12px;margin-bottom:0;font-size:13px;line-height:20px;text-align:center;vertical-align:middle;cursor:pointer;color:#333333;text-shadow:0 1px 1px rgba(255, 255, 255, 0.75);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(to bottom, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#e6e6e6;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);border:1px solid #bbbbbb;*border:0;border-bottom-color:#a2a2a2;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*margin-left:.3em;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#333333;background-color:#e6e6e6;*background-color:#d9d9d9;} | |
488 | .btn:active,.btn.active{background-color:#cccccc \9;} |
|
488 | .btn:active,.btn.active{background-color:#cccccc \9;} | |
489 | .btn:first-child{*margin-left:0;} |
|
489 | .btn:first-child{*margin-left:0;} | |
490 | .btn:hover,.btn:focus{color:#333333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position 0.1s linear;-moz-transition:background-position 0.1s linear;-o-transition:background-position 0.1s linear;transition:background-position 0.1s linear;} |
|
490 | .btn:hover,.btn:focus{color:#333333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position 0.1s linear;-moz-transition:background-position 0.1s linear;-o-transition:background-position 0.1s linear;transition:background-position 0.1s linear;} | |
491 | .btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} |
|
491 | .btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} | |
492 | .btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);} |
|
492 | .btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);} | |
493 | .btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:0.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} |
|
493 | .btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:0.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} | |
494 | .btn-large{padding:11px 19px;font-size:16.25px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;} |
|
494 | .btn-large{padding:11px 19px;font-size:16.25px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;} | |
495 | .btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px;} |
|
495 | .btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px;} | |
496 | .btn-small{padding:2px 10px;font-size:11.049999999999999px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} |
|
496 | .btn-small{padding:2px 10px;font-size:11.049999999999999px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} | |
497 | .btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0;} |
|
497 | .btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0;} | |
498 | .btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px;} |
|
498 | .btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px;} | |
499 | .btn-mini{padding:0 6px;font-size:9.75px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} |
|
499 | .btn-mini{padding:0 6px;font-size:9.75px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} | |
500 | .btn-block{display:block;width:100%;padding-left:0;padding-right:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;} |
|
500 | .btn-block{display:block;width:100%;padding-left:0;padding-right:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;} | |
501 | .btn-block+.btn-block{margin-top:5px;} |
|
501 | .btn-block+.btn-block{margin-top:5px;} | |
502 | input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%;} |
|
502 | input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%;} | |
503 | .btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255, 255, 255, 0.75);} |
|
503 | .btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255, 255, 255, 0.75);} | |
504 | .btn-primary{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#006dcc;background-image:-moz-linear-gradient(top, #0088cc, #0044cc);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));background-image:-webkit-linear-gradient(top, #0088cc, #0044cc);background-image:-o-linear-gradient(top, #0088cc, #0044cc);background-image:linear-gradient(to bottom, #0088cc, #0044cc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);border-color:#0044cc #0044cc #002a80;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#0044cc;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#ffffff;background-color:#0044cc;*background-color:#003bb3;} |
|
504 | .btn-primary{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#006dcc;background-image:-moz-linear-gradient(top, #0088cc, #0044cc);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));background-image:-webkit-linear-gradient(top, #0088cc, #0044cc);background-image:-o-linear-gradient(top, #0088cc, #0044cc);background-image:linear-gradient(to bottom, #0088cc, #0044cc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);border-color:#0044cc #0044cc #002a80;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#0044cc;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#ffffff;background-color:#0044cc;*background-color:#003bb3;} | |
505 | .btn-primary:active,.btn-primary.active{background-color:#003399 \9;} |
|
505 | .btn-primary:active,.btn-primary.active{background-color:#003399 \9;} | |
506 | .btn-warning{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(to bottom, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0);border-color:#f89406 #f89406 #ad6704;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#f89406;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#ffffff;background-color:#f89406;*background-color:#df8505;} |
|
506 | .btn-warning{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(to bottom, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0);border-color:#f89406 #f89406 #ad6704;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#f89406;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#ffffff;background-color:#f89406;*background-color:#df8505;} | |
507 | .btn-warning:active,.btn-warning.active{background-color:#c67605 \9;} |
|
507 | .btn-warning:active,.btn-warning.active{background-color:#c67605 \9;} | |
508 | .btn-danger{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#da4f49;background-image:-moz-linear-gradient(top, #ee5f5b, #bd362f);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));background-image:-webkit-linear-gradient(top, #ee5f5b, #bd362f);background-image:-o-linear-gradient(top, #ee5f5b, #bd362f);background-image:linear-gradient(to bottom, #ee5f5b, #bd362f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0);border-color:#bd362f #bd362f #802420;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#bd362f;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#ffffff;background-color:#bd362f;*background-color:#a9302a;} |
|
508 | .btn-danger{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#da4f49;background-image:-moz-linear-gradient(top, #ee5f5b, #bd362f);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));background-image:-webkit-linear-gradient(top, #ee5f5b, #bd362f);background-image:-o-linear-gradient(top, #ee5f5b, #bd362f);background-image:linear-gradient(to bottom, #ee5f5b, #bd362f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0);border-color:#bd362f #bd362f #802420;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#bd362f;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#ffffff;background-color:#bd362f;*background-color:#a9302a;} | |
509 | .btn-danger:active,.btn-danger.active{background-color:#942a25 \9;} |
|
509 | .btn-danger:active,.btn-danger.active{background-color:#942a25 \9;} | |
510 | .btn-success{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#5bb75b;background-image:-moz-linear-gradient(top, #62c462, #51a351);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));background-image:-webkit-linear-gradient(top, #62c462, #51a351);background-image:-o-linear-gradient(top, #62c462, #51a351);background-image:linear-gradient(to bottom, #62c462, #51a351);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0);border-color:#51a351 #51a351 #387038;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#51a351;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#ffffff;background-color:#51a351;*background-color:#499249;} |
|
510 | .btn-success{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#5bb75b;background-image:-moz-linear-gradient(top, #62c462, #51a351);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));background-image:-webkit-linear-gradient(top, #62c462, #51a351);background-image:-o-linear-gradient(top, #62c462, #51a351);background-image:linear-gradient(to bottom, #62c462, #51a351);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0);border-color:#51a351 #51a351 #387038;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#51a351;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#ffffff;background-color:#51a351;*background-color:#499249;} | |
511 | .btn-success:active,.btn-success.active{background-color:#408140 \9;} |
|
511 | .btn-success:active,.btn-success.active{background-color:#408140 \9;} | |
512 | .btn-info{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#49afcd;background-image:-moz-linear-gradient(top, #5bc0de, #2f96b4);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));background-image:-webkit-linear-gradient(top, #5bc0de, #2f96b4);background-image:-o-linear-gradient(top, #5bc0de, #2f96b4);background-image:linear-gradient(to bottom, #5bc0de, #2f96b4);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0);border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#2f96b4;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#ffffff;background-color:#2f96b4;*background-color:#2a85a0;} |
|
512 | .btn-info{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#49afcd;background-image:-moz-linear-gradient(top, #5bc0de, #2f96b4);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));background-image:-webkit-linear-gradient(top, #5bc0de, #2f96b4);background-image:-o-linear-gradient(top, #5bc0de, #2f96b4);background-image:linear-gradient(to bottom, #5bc0de, #2f96b4);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0);border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#2f96b4;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#ffffff;background-color:#2f96b4;*background-color:#2a85a0;} | |
513 | .btn-info:active,.btn-info.active{background-color:#24748c \9;} |
|
513 | .btn-info:active,.btn-info.active{background-color:#24748c \9;} | |
514 | .btn-inverse{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#363636;background-image:-moz-linear-gradient(top, #444444, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222));background-image:-webkit-linear-gradient(top, #444444, #222222);background-image:-o-linear-gradient(top, #444444, #222222);background-image:linear-gradient(to bottom, #444444, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0);border-color:#222222 #222222 #000000;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#222222;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#ffffff;background-color:#222222;*background-color:#151515;} |
|
514 | .btn-inverse{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#363636;background-image:-moz-linear-gradient(top, #444444, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222));background-image:-webkit-linear-gradient(top, #444444, #222222);background-image:-o-linear-gradient(top, #444444, #222222);background-image:linear-gradient(to bottom, #444444, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0);border-color:#222222 #222222 #000000;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#222222;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#ffffff;background-color:#222222;*background-color:#151515;} | |
515 | .btn-inverse:active,.btn-inverse.active{background-color:#080808 \9;} |
|
515 | .btn-inverse:active,.btn-inverse.active{background-color:#080808 \9;} | |
516 | button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px;}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0;} |
|
516 | button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px;}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0;} | |
517 | button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px;} |
|
517 | button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px;} | |
518 | button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px;} |
|
518 | button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px;} | |
519 | button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px;} |
|
519 | button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px;} | |
520 | .btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} |
|
520 | .btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} | |
521 | .btn-link{border-color:transparent;cursor:pointer;color:#0088cc;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} |
|
521 | .btn-link{border-color:transparent;cursor:pointer;color:#0088cc;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} | |
522 | .btn-link:hover,.btn-link:focus{color:#005580;text-decoration:underline;background-color:transparent;} |
|
522 | .btn-link:hover,.btn-link:focus{color:#005580;text-decoration:underline;background-color:transparent;} | |
523 | .btn-link[disabled]:hover,.btn-link[disabled]:focus{color:#333333;text-decoration:none;} |
|
523 | .btn-link[disabled]:hover,.btn-link[disabled]:focus{color:#333333;text-decoration:none;} | |
524 | .btn-group{position:relative;display:inline-block;*display:inline;*zoom:1;font-size:0;vertical-align:middle;white-space:nowrap;*margin-left:.3em;}.btn-group:first-child{*margin-left:0;} |
|
524 | .btn-group{position:relative;display:inline-block;*display:inline;*zoom:1;font-size:0;vertical-align:middle;white-space:nowrap;*margin-left:.3em;}.btn-group:first-child{*margin-left:0;} | |
525 | .btn-group+.btn-group{margin-left:5px;} |
|
525 | .btn-group+.btn-group{margin-left:5px;} | |
526 | .btn-toolbar{font-size:0;margin-top:10px;margin-bottom:10px;}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px;} |
|
526 | .btn-toolbar{font-size:0;margin-top:10px;margin-bottom:10px;}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px;} | |
527 | .btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} |
|
527 | .btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} | |
528 | .btn-group>.btn+.btn{margin-left:-1px;} |
|
528 | .btn-group>.btn+.btn{margin-left:-1px;} | |
529 | .btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-size:13px;} |
|
529 | .btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-size:13px;} | |
530 | .btn-group>.btn-mini{font-size:9.75px;} |
|
530 | .btn-group>.btn-mini{font-size:9.75px;} | |
531 | .btn-group>.btn-small{font-size:11.049999999999999px;} |
|
531 | .btn-group>.btn-small{font-size:11.049999999999999px;} | |
532 | .btn-group>.btn-large{font-size:16.25px;} |
|
532 | .btn-group>.btn-large{font-size:16.25px;} | |
533 | .btn-group>.btn:first-child{margin-left:0;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;} |
|
533 | .btn-group>.btn:first-child{margin-left:0;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;} | |
534 | .btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;} |
|
534 | .btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;} | |
535 | .btn-group>.btn.large:first-child{margin-left:0;-webkit-border-top-left-radius:6px;-moz-border-radius-topleft:6px;border-top-left-radius:6px;-webkit-border-bottom-left-radius:6px;-moz-border-radius-bottomleft:6px;border-bottom-left-radius:6px;} |
|
535 | .btn-group>.btn.large:first-child{margin-left:0;-webkit-border-top-left-radius:6px;-moz-border-radius-topleft:6px;border-top-left-radius:6px;-webkit-border-bottom-left-radius:6px;-moz-border-radius-bottomleft:6px;border-bottom-left-radius:6px;} | |
536 | .btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;-moz-border-radius-topright:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;-moz-border-radius-bottomright:6px;border-bottom-right-radius:6px;} |
|
536 | .btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;-moz-border-radius-topright:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;-moz-border-radius-bottomright:6px;border-bottom-right-radius:6px;} | |
537 | .btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2;} |
|
537 | .btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2;} | |
538 | .btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0;} |
|
538 | .btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0;} | |
539 | .btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);*padding-top:5px;*padding-bottom:5px;} |
|
539 | .btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);*padding-top:5px;*padding-bottom:5px;} | |
540 | .btn-group>.btn-mini+.dropdown-toggle{padding-left:5px;padding-right:5px;*padding-top:2px;*padding-bottom:2px;} |
|
540 | .btn-group>.btn-mini+.dropdown-toggle{padding-left:5px;padding-right:5px;*padding-top:2px;*padding-bottom:2px;} | |
541 | .btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px;} |
|
541 | .btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px;} | |
542 | .btn-group>.btn-large+.dropdown-toggle{padding-left:12px;padding-right:12px;*padding-top:7px;*padding-bottom:7px;} |
|
542 | .btn-group>.btn-large+.dropdown-toggle{padding-left:12px;padding-right:12px;*padding-top:7px;*padding-bottom:7px;} | |
543 | .btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);} |
|
543 | .btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);} | |
544 | .btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6;} |
|
544 | .btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6;} | |
545 | .btn-group.open .btn-primary.dropdown-toggle{background-color:#0044cc;} |
|
545 | .btn-group.open .btn-primary.dropdown-toggle{background-color:#0044cc;} | |
546 | .btn-group.open .btn-warning.dropdown-toggle{background-color:#f89406;} |
|
546 | .btn-group.open .btn-warning.dropdown-toggle{background-color:#f89406;} | |
547 | .btn-group.open .btn-danger.dropdown-toggle{background-color:#bd362f;} |
|
547 | .btn-group.open .btn-danger.dropdown-toggle{background-color:#bd362f;} | |
548 | .btn-group.open .btn-success.dropdown-toggle{background-color:#51a351;} |
|
548 | .btn-group.open .btn-success.dropdown-toggle{background-color:#51a351;} | |
549 | .btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4;} |
|
549 | .btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4;} | |
550 | .btn-group.open .btn-inverse.dropdown-toggle{background-color:#222222;} |
|
550 | .btn-group.open .btn-inverse.dropdown-toggle{background-color:#222222;} | |
551 | .btn .caret{margin-top:8px;margin-left:0;} |
|
551 | .btn .caret{margin-top:8px;margin-left:0;} | |
552 | .btn-large .caret{margin-top:6px;} |
|
552 | .btn-large .caret{margin-top:6px;} | |
553 | .btn-large .caret{border-left-width:5px;border-right-width:5px;border-top-width:5px;} |
|
553 | .btn-large .caret{border-left-width:5px;border-right-width:5px;border-top-width:5px;} | |
554 | .btn-mini .caret,.btn-small .caret{margin-top:8px;} |
|
554 | .btn-mini .caret,.btn-small .caret{margin-top:8px;} | |
555 | .dropup .btn-large .caret{border-bottom-width:5px;} |
|
555 | .dropup .btn-large .caret{border-bottom-width:5px;} | |
556 | .btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;} |
|
556 | .btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;} | |
557 | .btn-group-vertical{display:inline-block;*display:inline;*zoom:1;} |
|
557 | .btn-group-vertical{display:inline-block;*display:inline;*zoom:1;} | |
558 | .btn-group-vertical>.btn{display:block;float:none;max-width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} |
|
558 | .btn-group-vertical>.btn{display:block;float:none;max-width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} | |
559 | .btn-group-vertical>.btn+.btn{margin-left:0;margin-top:-1px;} |
|
559 | .btn-group-vertical>.btn+.btn{margin-left:0;margin-top:-1px;} | |
560 | .btn-group-vertical>.btn:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;} |
|
560 | .btn-group-vertical>.btn:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;} | |
561 | .btn-group-vertical>.btn:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;} |
|
561 | .btn-group-vertical>.btn:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;} | |
562 | .btn-group-vertical>.btn-large:first-child{-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0;} |
|
562 | .btn-group-vertical>.btn-large:first-child{-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0;} | |
563 | .btn-group-vertical>.btn-large:last-child{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;} |
|
563 | .btn-group-vertical>.btn-large:last-child{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;} | |
564 | .alert{padding:8px 35px 8px 14px;margin-bottom:20px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} |
|
564 | .alert{padding:8px 35px 8px 14px;margin-bottom:20px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} | |
565 | .alert,.alert h4{color:#c09853;} |
|
565 | .alert,.alert h4{color:#c09853;} | |
566 | .alert h4{margin:0;} |
|
566 | .alert h4{margin:0;} | |
567 | .alert .close{position:relative;top:-2px;right:-21px;line-height:20px;} |
|
567 | .alert .close{position:relative;top:-2px;right:-21px;line-height:20px;} | |
568 | .alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#468847;} |
|
568 | .alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#468847;} | |
569 | .alert-success h4{color:#468847;} |
|
569 | .alert-success h4{color:#468847;} | |
570 | .alert-danger,.alert-error{background-color:#f2dede;border-color:#eed3d7;color:#b94a48;} |
|
570 | .alert-danger,.alert-error{background-color:#f2dede;border-color:#eed3d7;color:#b94a48;} | |
571 | .alert-danger h4,.alert-error h4{color:#b94a48;} |
|
571 | .alert-danger h4,.alert-error h4{color:#b94a48;} | |
572 | .alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#3a87ad;} |
|
572 | .alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#3a87ad;} | |
573 | .alert-info h4{color:#3a87ad;} |
|
573 | .alert-info h4{color:#3a87ad;} | |
574 | .alert-block{padding-top:14px;padding-bottom:14px;} |
|
574 | .alert-block{padding-top:14px;padding-bottom:14px;} | |
575 | .alert-block>p,.alert-block>ul{margin-bottom:0;} |
|
575 | .alert-block>p,.alert-block>ul{margin-bottom:0;} | |
576 | .alert-block p+p{margin-top:5px;} |
|
576 | .alert-block p+p{margin-top:5px;} | |
577 | .nav{margin-left:0;margin-bottom:20px;list-style:none;} |
|
577 | .nav{margin-left:0;margin-bottom:20px;list-style:none;} | |
578 | .nav>li>a{display:block;} |
|
578 | .nav>li>a{display:block;} | |
579 | .nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eeeeee;} |
|
579 | .nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eeeeee;} | |
580 | .nav>li>a>img{max-width:none;} |
|
580 | .nav>li>a>img{max-width:none;} | |
581 | .nav>.pull-right{float:right;} |
|
581 | .nav>.pull-right{float:right;} | |
582 | .nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:20px;color:#999999;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);text-transform:uppercase;} |
|
582 | .nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:20px;color:#999999;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);text-transform:uppercase;} | |
583 | .nav li+.nav-header{margin-top:9px;} |
|
583 | .nav li+.nav-header{margin-top:9px;} | |
584 | .nav-list{padding-left:15px;padding-right:15px;margin-bottom:0;} |
|
584 | .nav-list{padding-left:15px;padding-right:15px;margin-bottom:0;} | |
585 | .nav-list>li>a,.nav-list .nav-header{margin-left:-15px;margin-right:-15px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);} |
|
585 | .nav-list>li>a,.nav-list .nav-header{margin-left:-15px;margin-right:-15px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);} | |
586 | .nav-list>li>a{padding:3px 15px;} |
|
586 | .nav-list>li>a{padding:3px 15px;} | |
587 | .nav-list>.active>a,.nav-list>.active>a:hover,.nav-list>.active>a:focus{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.2);background-color:#0088cc;} |
|
587 | .nav-list>.active>a,.nav-list>.active>a:hover,.nav-list>.active>a:focus{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.2);background-color:#0088cc;} | |
588 | .nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px;} |
|
588 | .nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px;} | |
589 | .nav-list .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #ffffff;} |
|
589 | .nav-list .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #ffffff;} | |
590 | .nav-tabs,.nav-pills{*zoom:1;}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;content:"";line-height:0;} |
|
590 | .nav-tabs,.nav-pills{*zoom:1;}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;content:"";line-height:0;} | |
591 | .nav-tabs:after,.nav-pills:after{clear:both;} |
|
591 | .nav-tabs:after,.nav-pills:after{clear:both;} | |
592 | .nav-tabs>li,.nav-pills>li{float:left;} |
|
592 | .nav-tabs>li,.nav-pills>li{float:left;} | |
593 | .nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px;} |
|
593 | .nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px;} | |
594 | .nav-tabs{border-bottom:1px solid #ddd;} |
|
594 | .nav-tabs{border-bottom:1px solid #ddd;} | |
595 | .nav-tabs>li{margin-bottom:-1px;} |
|
595 | .nav-tabs>li{margin-bottom:-1px;} | |
596 | .nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:20px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;}.nav-tabs>li>a:hover,.nav-tabs>li>a:focus{border-color:#eeeeee #eeeeee #dddddd;} |
|
596 | .nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:20px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;}.nav-tabs>li>a:hover,.nav-tabs>li>a:focus{border-color:#eeeeee #eeeeee #dddddd;} | |
597 | .nav-tabs>.active>a,.nav-tabs>.active>a:hover,.nav-tabs>.active>a:focus{color:#555555;background-color:#ffffff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default;} |
|
597 | .nav-tabs>.active>a,.nav-tabs>.active>a:hover,.nav-tabs>.active>a:focus{color:#555555;background-color:#ffffff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default;} | |
598 | .nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;} |
|
598 | .nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;} | |
599 | .nav-pills>.active>a,.nav-pills>.active>a:hover,.nav-pills>.active>a:focus{color:#ffffff;background-color:#0088cc;} |
|
599 | .nav-pills>.active>a,.nav-pills>.active>a:hover,.nav-pills>.active>a:focus{color:#ffffff;background-color:#0088cc;} | |
600 | .nav-stacked>li{float:none;} |
|
600 | .nav-stacked>li{float:none;} | |
601 | .nav-stacked>li>a{margin-right:0;} |
|
601 | .nav-stacked>li>a{margin-right:0;} | |
602 | .nav-tabs.nav-stacked{border-bottom:0;} |
|
602 | .nav-tabs.nav-stacked{border-bottom:0;} | |
603 | .nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} |
|
603 | .nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} | |
604 | .nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;} |
|
604 | .nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;} | |
605 | .nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;} |
|
605 | .nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;} | |
606 | .nav-tabs.nav-stacked>li>a:hover,.nav-tabs.nav-stacked>li>a:focus{border-color:#ddd;z-index:2;} |
|
606 | .nav-tabs.nav-stacked>li>a:hover,.nav-tabs.nav-stacked>li>a:focus{border-color:#ddd;z-index:2;} | |
607 | .nav-pills.nav-stacked>li>a{margin-bottom:3px;} |
|
607 | .nav-pills.nav-stacked>li>a{margin-bottom:3px;} | |
608 | .nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px;} |
|
608 | .nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px;} | |
609 | .nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;} |
|
609 | .nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;} | |
610 | .nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;} |
|
610 | .nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;} | |
611 | .nav .dropdown-toggle .caret{border-top-color:#0088cc;border-bottom-color:#0088cc;margin-top:6px;} |
|
611 | .nav .dropdown-toggle .caret{border-top-color:#0088cc;border-bottom-color:#0088cc;margin-top:6px;} | |
612 | .nav .dropdown-toggle:hover .caret,.nav .dropdown-toggle:focus .caret{border-top-color:#005580;border-bottom-color:#005580;} |
|
612 | .nav .dropdown-toggle:hover .caret,.nav .dropdown-toggle:focus .caret{border-top-color:#005580;border-bottom-color:#005580;} | |
613 | .nav-tabs .dropdown-toggle .caret{margin-top:8px;} |
|
613 | .nav-tabs .dropdown-toggle .caret{margin-top:8px;} | |
614 | .nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff;} |
|
614 | .nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff;} | |
615 | .nav-tabs .active .dropdown-toggle .caret{border-top-color:#555555;border-bottom-color:#555555;} |
|
615 | .nav-tabs .active .dropdown-toggle .caret{border-top-color:#555555;border-bottom-color:#555555;} | |
616 | .nav>.dropdown.active>a:hover,.nav>.dropdown.active>a:focus{cursor:pointer;} |
|
616 | .nav>.dropdown.active>a:hover,.nav>.dropdown.active>a:focus{cursor:pointer;} | |
617 | .nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover,.nav>li.dropdown.open.active>a:focus{color:#ffffff;background-color:#999999;border-color:#999999;} |
|
617 | .nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover,.nav>li.dropdown.open.active>a:focus{color:#ffffff;background-color:#999999;border-color:#999999;} | |
618 | .nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret,.nav li.dropdown.open a:focus .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;opacity:1;filter:alpha(opacity=100);} |
|
618 | .nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret,.nav li.dropdown.open a:focus .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;opacity:1;filter:alpha(opacity=100);} | |
619 | .tabs-stacked .open>a:hover,.tabs-stacked .open>a:focus{border-color:#999999;} |
|
619 | .tabs-stacked .open>a:hover,.tabs-stacked .open>a:focus{border-color:#999999;} | |
620 | .tabbable{*zoom:1;}.tabbable:before,.tabbable:after{display:table;content:"";line-height:0;} |
|
620 | .tabbable{*zoom:1;}.tabbable:before,.tabbable:after{display:table;content:"";line-height:0;} | |
621 | .tabbable:after{clear:both;} |
|
621 | .tabbable:after{clear:both;} | |
622 | .tab-content{overflow:auto;} |
|
622 | .tab-content{overflow:auto;} | |
623 | .tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0;} |
|
623 | .tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0;} | |
624 | .tab-content>.tab-pane,.pill-content>.pill-pane{display:none;} |
|
624 | .tab-content>.tab-pane,.pill-content>.pill-pane{display:none;} | |
625 | .tab-content>.active,.pill-content>.active{display:block;} |
|
625 | .tab-content>.active,.pill-content>.active{display:block;} | |
626 | .tabs-below>.nav-tabs{border-top:1px solid #ddd;} |
|
626 | .tabs-below>.nav-tabs{border-top:1px solid #ddd;} | |
627 | .tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0;} |
|
627 | .tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0;} | |
628 | .tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;}.tabs-below>.nav-tabs>li>a:hover,.tabs-below>.nav-tabs>li>a:focus{border-bottom-color:transparent;border-top-color:#ddd;} |
|
628 | .tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;}.tabs-below>.nav-tabs>li>a:hover,.tabs-below>.nav-tabs>li>a:focus{border-bottom-color:transparent;border-top-color:#ddd;} | |
629 | .tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover,.tabs-below>.nav-tabs>.active>a:focus{border-color:transparent #ddd #ddd #ddd;} |
|
629 | .tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover,.tabs-below>.nav-tabs>.active>a:focus{border-color:transparent #ddd #ddd #ddd;} | |
630 | .tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none;} |
|
630 | .tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none;} | |
631 | .tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px;} |
|
631 | .tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px;} | |
632 | .tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd;} |
|
632 | .tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd;} | |
633 | .tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px;} |
|
633 | .tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px;} | |
634 | .tabs-left>.nav-tabs>li>a:hover,.tabs-left>.nav-tabs>li>a:focus{border-color:#eeeeee #dddddd #eeeeee #eeeeee;} |
|
634 | .tabs-left>.nav-tabs>li>a:hover,.tabs-left>.nav-tabs>li>a:focus{border-color:#eeeeee #dddddd #eeeeee #eeeeee;} | |
635 | .tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover,.tabs-left>.nav-tabs .active>a:focus{border-color:#ddd transparent #ddd #ddd;*border-right-color:#ffffff;} |
|
635 | .tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover,.tabs-left>.nav-tabs .active>a:focus{border-color:#ddd transparent #ddd #ddd;*border-right-color:#ffffff;} | |
636 | .tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd;} |
|
636 | .tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd;} | |
637 | .tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;} |
|
637 | .tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;} | |
638 | .tabs-right>.nav-tabs>li>a:hover,.tabs-right>.nav-tabs>li>a:focus{border-color:#eeeeee #eeeeee #eeeeee #dddddd;} |
|
638 | .tabs-right>.nav-tabs>li>a:hover,.tabs-right>.nav-tabs>li>a:focus{border-color:#eeeeee #eeeeee #eeeeee #dddddd;} | |
639 | .tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover,.tabs-right>.nav-tabs .active>a:focus{border-color:#ddd #ddd #ddd transparent;*border-left-color:#ffffff;} |
|
639 | .tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover,.tabs-right>.nav-tabs .active>a:focus{border-color:#ddd #ddd #ddd transparent;*border-left-color:#ffffff;} | |
640 | .nav>.disabled>a{color:#999999;} |
|
640 | .nav>.disabled>a{color:#999999;} | |
641 | .nav>.disabled>a:hover,.nav>.disabled>a:focus{text-decoration:none;background-color:transparent;cursor:default;} |
|
641 | .nav>.disabled>a:hover,.nav>.disabled>a:focus{text-decoration:none;background-color:transparent;cursor:default;} | |
642 | .navbar{overflow:visible;margin-bottom:20px;*position:relative;*z-index:2;} |
|
642 | .navbar{overflow:visible;margin-bottom:20px;*position:relative;*z-index:2;} | |
643 | .navbar-inner{min-height:40px;padding-left:20px;padding-right:20px;background-color:#fafafa;background-image:-moz-linear-gradient(top, #ffffff, #f2f2f2);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2));background-image:-webkit-linear-gradient(top, #ffffff, #f2f2f2);background-image:-o-linear-gradient(top, #ffffff, #f2f2f2);background-image:linear-gradient(to bottom, #ffffff, #f2f2f2);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0);border:1px solid #d4d4d4;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 4px rgba(0, 0, 0, 0.065);-moz-box-shadow:0 1px 4px rgba(0, 0, 0, 0.065);box-shadow:0 1px 4px rgba(0, 0, 0, 0.065);*zoom:1;}.navbar-inner:before,.navbar-inner:after{display:table;content:"";line-height:0;} |
|
643 | .navbar-inner{min-height:40px;padding-left:20px;padding-right:20px;background-color:#fafafa;background-image:-moz-linear-gradient(top, #ffffff, #f2f2f2);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2));background-image:-webkit-linear-gradient(top, #ffffff, #f2f2f2);background-image:-o-linear-gradient(top, #ffffff, #f2f2f2);background-image:linear-gradient(to bottom, #ffffff, #f2f2f2);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0);border:1px solid #d4d4d4;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 4px rgba(0, 0, 0, 0.065);-moz-box-shadow:0 1px 4px rgba(0, 0, 0, 0.065);box-shadow:0 1px 4px rgba(0, 0, 0, 0.065);*zoom:1;}.navbar-inner:before,.navbar-inner:after{display:table;content:"";line-height:0;} | |
644 | .navbar-inner:after{clear:both;} |
|
644 | .navbar-inner:after{clear:both;} | |
645 | .navbar .container{width:auto;} |
|
645 | .navbar .container{width:auto;} | |
646 | .nav-collapse.collapse{height:auto;overflow:visible;} |
|
646 | .nav-collapse.collapse{height:auto;overflow:visible;} | |
647 | .navbar .brand{float:left;display:block;padding:10px 20px 10px;margin-left:-20px;font-size:20px;font-weight:200;color:#777777;text-shadow:0 1px 0 #ffffff;}.navbar .brand:hover,.navbar .brand:focus{text-decoration:none;} |
|
647 | .navbar .brand{float:left;display:block;padding:10px 20px 10px;margin-left:-20px;font-size:20px;font-weight:200;color:#777777;text-shadow:0 1px 0 #ffffff;}.navbar .brand:hover,.navbar .brand:focus{text-decoration:none;} | |
648 | .navbar-text{margin-bottom:0;line-height:40px;color:#777777;} |
|
648 | .navbar-text{margin-bottom:0;line-height:40px;color:#777777;} | |
649 | .navbar-link{color:#777777;}.navbar-link:hover,.navbar-link:focus{color:#333333;} |
|
649 | .navbar-link{color:#777777;}.navbar-link:hover,.navbar-link:focus{color:#333333;} | |
650 | .navbar .divider-vertical{height:40px;margin:0 9px;border-left:1px solid #f2f2f2;border-right:1px solid #ffffff;} |
|
650 | .navbar .divider-vertical{height:40px;margin:0 9px;border-left:1px solid #f2f2f2;border-right:1px solid #ffffff;} | |
651 | .navbar .btn,.navbar .btn-group{margin-top:5px;} |
|
651 | .navbar .btn,.navbar .btn-group{margin-top:5px;} | |
652 | .navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn,.navbar .input-prepend .btn-group,.navbar .input-append .btn-group{margin-top:0;} |
|
652 | .navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn,.navbar .input-prepend .btn-group,.navbar .input-append .btn-group{margin-top:0;} | |
653 | .navbar-form{margin-bottom:0;*zoom:1;}.navbar-form:before,.navbar-form:after{display:table;content:"";line-height:0;} |
|
653 | .navbar-form{margin-bottom:0;*zoom:1;}.navbar-form:before,.navbar-form:after{display:table;content:"";line-height:0;} | |
654 | .navbar-form:after{clear:both;} |
|
654 | .navbar-form:after{clear:both;} | |
655 | .navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:5px;} |
|
655 | .navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:5px;} | |
656 | .navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0;} |
|
656 | .navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0;} | |
657 | .navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px;} |
|
657 | .navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px;} | |
658 | .navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap;}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0;} |
|
658 | .navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap;}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0;} | |
659 | .navbar-search{position:relative;float:left;margin-top:5px;margin-bottom:0;}.navbar-search .search-query{margin-bottom:0;padding:4px 14px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;} |
|
659 | .navbar-search{position:relative;float:left;margin-top:5px;margin-bottom:0;}.navbar-search .search-query{margin-bottom:0;padding:4px 14px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;} | |
660 | .navbar-static-top{position:static;margin-bottom:0;}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} |
|
660 | .navbar-static-top{position:static;margin-bottom:0;}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} | |
661 | .navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0;} |
|
661 | .navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0;} | |
662 | .navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px;} |
|
662 | .navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px;} | |
663 | .navbar-fixed-bottom .navbar-inner{border-width:1px 0 0;} |
|
663 | .navbar-fixed-bottom .navbar-inner{border-width:1px 0 0;} | |
664 | .navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-left:0;padding-right:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} |
|
664 | .navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-left:0;padding-right:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} | |
665 | .navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px;} |
|
665 | .navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px;} | |
666 | .navbar-fixed-top{top:0;} |
|
666 | .navbar-fixed-top{top:0;} | |
667 | .navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,.1);box-shadow:0 1px 10px rgba(0,0,0,.1);} |
|
667 | .navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,.1);box-shadow:0 1px 10px rgba(0,0,0,.1);} | |
668 | .navbar-fixed-bottom{bottom:0;}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,.1);box-shadow:0 -1px 10px rgba(0,0,0,.1);} |
|
668 | .navbar-fixed-bottom{bottom:0;}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,.1);box-shadow:0 -1px 10px rgba(0,0,0,.1);} | |
669 | .navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0;} |
|
669 | .navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0;} | |
670 | .navbar .nav.pull-right{float:right;margin-right:0;} |
|
670 | .navbar .nav.pull-right{float:right;margin-right:0;} | |
671 | .navbar .nav>li{float:left;} |
|
671 | .navbar .nav>li{float:left;} | |
672 | .navbar .nav>li>a{float:none;padding:10px 15px 10px;color:#777777;text-decoration:none;text-shadow:0 1px 0 #ffffff;} |
|
672 | .navbar .nav>li>a{float:none;padding:10px 15px 10px;color:#777777;text-decoration:none;text-shadow:0 1px 0 #ffffff;} | |
673 | .navbar .nav .dropdown-toggle .caret{margin-top:8px;} |
|
673 | .navbar .nav .dropdown-toggle .caret{margin-top:8px;} | |
674 | .navbar .nav>li>a:focus,.navbar .nav>li>a:hover{background-color:transparent;color:#333333;text-decoration:none;} |
|
674 | .navbar .nav>li>a:focus,.navbar .nav>li>a:hover{background-color:transparent;color:#333333;text-decoration:none;} | |
675 | .navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#555555;text-decoration:none;background-color:#e5e5e5;-webkit-box-shadow:inset 0 3px 8px rgba(0, 0, 0, 0.125);-moz-box-shadow:inset 0 3px 8px rgba(0, 0, 0, 0.125);box-shadow:inset 0 3px 8px rgba(0, 0, 0, 0.125);} |
|
675 | .navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#555555;text-decoration:none;background-color:#e5e5e5;-webkit-box-shadow:inset 0 3px 8px rgba(0, 0, 0, 0.125);-moz-box-shadow:inset 0 3px 8px rgba(0, 0, 0, 0.125);box-shadow:inset 0 3px 8px rgba(0, 0, 0, 0.125);} | |
676 | .navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-left:5px;margin-right:5px;color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#ededed;background-image:-moz-linear-gradient(top, #f2f2f2, #e5e5e5);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#e5e5e5));background-image:-webkit-linear-gradient(top, #f2f2f2, #e5e5e5);background-image:-o-linear-gradient(top, #f2f2f2, #e5e5e5);background-image:linear-gradient(to bottom, #f2f2f2, #e5e5e5);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffe5e5e5', GradientType=0);border-color:#e5e5e5 #e5e5e5 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#e5e5e5;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);}.navbar .btn-navbar:hover,.navbar .btn-navbar:focus,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#ffffff;background-color:#e5e5e5;*background-color:#d9d9d9;} |
|
676 | .navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-left:5px;margin-right:5px;color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#ededed;background-image:-moz-linear-gradient(top, #f2f2f2, #e5e5e5);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#e5e5e5));background-image:-webkit-linear-gradient(top, #f2f2f2, #e5e5e5);background-image:-o-linear-gradient(top, #f2f2f2, #e5e5e5);background-image:linear-gradient(to bottom, #f2f2f2, #e5e5e5);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffe5e5e5', GradientType=0);border-color:#e5e5e5 #e5e5e5 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#e5e5e5;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);}.navbar .btn-navbar:hover,.navbar .btn-navbar:focus,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#ffffff;background-color:#e5e5e5;*background-color:#d9d9d9;} | |
677 | .navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#cccccc \9;} |
|
677 | .navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#cccccc \9;} | |
678 | .navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);-moz-box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);} |
|
678 | .navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);-moz-box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);} | |
679 | .btn-navbar .icon-bar+.icon-bar{margin-top:3px;} |
|
679 | .btn-navbar .icon-bar+.icon-bar{margin-top:3px;} | |
680 | .navbar .nav>li>.dropdown-menu:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0, 0, 0, 0.2);position:absolute;top:-7px;left:9px;} |
|
680 | .navbar .nav>li>.dropdown-menu:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0, 0, 0, 0.2);position:absolute;top:-7px;left:9px;} | |
681 | .navbar .nav>li>.dropdown-menu:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #ffffff;position:absolute;top:-6px;left:10px;} |
|
681 | .navbar .nav>li>.dropdown-menu:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #ffffff;position:absolute;top:-6px;left:10px;} | |
682 | .navbar-fixed-bottom .nav>li>.dropdown-menu:before{border-top:7px solid #ccc;border-top-color:rgba(0, 0, 0, 0.2);border-bottom:0;bottom:-7px;top:auto;} |
|
682 | .navbar-fixed-bottom .nav>li>.dropdown-menu:before{border-top:7px solid #ccc;border-top-color:rgba(0, 0, 0, 0.2);border-bottom:0;bottom:-7px;top:auto;} | |
683 | .navbar-fixed-bottom .nav>li>.dropdown-menu:after{border-top:6px solid #ffffff;border-bottom:0;bottom:-6px;top:auto;} |
|
683 | .navbar-fixed-bottom .nav>li>.dropdown-menu:after{border-top:6px solid #ffffff;border-bottom:0;bottom:-6px;top:auto;} | |
684 | .navbar .nav li.dropdown>a:hover .caret,.navbar .nav li.dropdown>a:focus .caret{border-top-color:#333333;border-bottom-color:#333333;} |
|
684 | .navbar .nav li.dropdown>a:hover .caret,.navbar .nav li.dropdown>a:focus .caret{border-top-color:#333333;border-bottom-color:#333333;} | |
685 | .navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{background-color:#e5e5e5;color:#555555;} |
|
685 | .navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{background-color:#e5e5e5;color:#555555;} | |
686 | .navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#777777;border-bottom-color:#777777;} |
|
686 | .navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#777777;border-bottom-color:#777777;} | |
687 | .navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#555555;border-bottom-color:#555555;} |
|
687 | .navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#555555;border-bottom-color:#555555;} | |
688 | .navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{left:auto;right:0;}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{left:auto;right:12px;} |
|
688 | .navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{left:auto;right:0;}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{left:auto;right:12px;} | |
689 | .navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{left:auto;right:13px;} |
|
689 | .navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{left:auto;right:13px;} | |
690 | .navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{left:auto;right:100%;margin-left:0;margin-right:-1px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px;} |
|
690 | .navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{left:auto;right:100%;margin-left:0;margin-right:-1px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px;} | |
691 | .navbar-inverse .navbar-inner{background-color:#1b1b1b;background-image:-moz-linear-gradient(top, #222222, #111111);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#222222), to(#111111));background-image:-webkit-linear-gradient(top, #222222, #111111);background-image:-o-linear-gradient(top, #222222, #111111);background-image:linear-gradient(to bottom, #222222, #111111);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0);border-color:#252525;} |
|
691 | .navbar-inverse .navbar-inner{background-color:#1b1b1b;background-image:-moz-linear-gradient(top, #222222, #111111);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#222222), to(#111111));background-image:-webkit-linear-gradient(top, #222222, #111111);background-image:-o-linear-gradient(top, #222222, #111111);background-image:linear-gradient(to bottom, #222222, #111111);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0);border-color:#252525;} | |
692 | .navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#999999;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover,.navbar-inverse .brand:focus,.navbar-inverse .nav>li>a:focus{color:#ffffff;} |
|
692 | .navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#999999;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover,.navbar-inverse .brand:focus,.navbar-inverse .nav>li>a:focus{color:#ffffff;} | |
693 | .navbar-inverse .brand{color:#999999;} |
|
693 | .navbar-inverse .brand{color:#999999;} | |
694 | .navbar-inverse .navbar-text{color:#999999;} |
|
694 | .navbar-inverse .navbar-text{color:#999999;} | |
695 | .navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{background-color:transparent;color:#ffffff;} |
|
695 | .navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{background-color:transparent;color:#ffffff;} | |
696 | .navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#ffffff;background-color:#111111;} |
|
696 | .navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#ffffff;background-color:#111111;} | |
697 | .navbar-inverse .navbar-link{color:#999999;}.navbar-inverse .navbar-link:hover,.navbar-inverse .navbar-link:focus{color:#ffffff;} |
|
697 | .navbar-inverse .navbar-link{color:#999999;}.navbar-inverse .navbar-link:hover,.navbar-inverse .navbar-link:focus{color:#ffffff;} | |
698 | .navbar-inverse .divider-vertical{border-left-color:#111111;border-right-color:#222222;} |
|
698 | .navbar-inverse .divider-vertical{border-left-color:#111111;border-right-color:#222222;} | |
699 | .navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{background-color:#111111;color:#ffffff;} |
|
699 | .navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{background-color:#111111;color:#ffffff;} | |
700 | .navbar-inverse .nav li.dropdown>a:hover .caret,.navbar-inverse .nav li.dropdown>a:focus .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;} |
|
700 | .navbar-inverse .nav li.dropdown>a:hover .caret,.navbar-inverse .nav li.dropdown>a:focus .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;} | |
701 | .navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#999999;border-bottom-color:#999999;} |
|
701 | .navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#999999;border-bottom-color:#999999;} | |
702 | .navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;} |
|
702 | .navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;} | |
703 | .navbar-inverse .navbar-search .search-query{color:#ffffff;background-color:#515151;border-color:#111111;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none;}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#cccccc;} |
|
703 | .navbar-inverse .navbar-search .search-query{color:#ffffff;background-color:#515151;border-color:#111111;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none;}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#cccccc;} | |
704 | .navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#cccccc;} |
|
704 | .navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#cccccc;} | |
705 | .navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#cccccc;} |
|
705 | .navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#cccccc;} | |
706 | .navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#333333;text-shadow:0 1px 0 #ffffff;background-color:#ffffff;border:0;-webkit-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);-moz-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);box-shadow:0 0 3px rgba(0, 0, 0, 0.15);outline:0;} |
|
706 | .navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#333333;text-shadow:0 1px 0 #ffffff;background-color:#ffffff;border:0;-webkit-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);-moz-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);box-shadow:0 0 3px rgba(0, 0, 0, 0.15);outline:0;} | |
707 | .navbar-inverse .btn-navbar{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#0e0e0e;background-image:-moz-linear-gradient(top, #151515, #040404);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#151515), to(#040404));background-image:-webkit-linear-gradient(top, #151515, #040404);background-image:-o-linear-gradient(top, #151515, #040404);background-image:linear-gradient(to bottom, #151515, #040404);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515', endColorstr='#ff040404', GradientType=0);border-color:#040404 #040404 #000000;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#040404;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:focus,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#ffffff;background-color:#040404;*background-color:#000000;} |
|
707 | .navbar-inverse .btn-navbar{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#0e0e0e;background-image:-moz-linear-gradient(top, #151515, #040404);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#151515), to(#040404));background-image:-webkit-linear-gradient(top, #151515, #040404);background-image:-o-linear-gradient(top, #151515, #040404);background-image:linear-gradient(to bottom, #151515, #040404);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515', endColorstr='#ff040404', GradientType=0);border-color:#040404 #040404 #000000;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#040404;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:focus,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#ffffff;background-color:#040404;*background-color:#000000;} | |
708 | .navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#000000 \9;} |
|
708 | .navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#000000 \9;} | |
709 | .breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}.breadcrumb>li{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 0 #ffffff;}.breadcrumb>li>.divider{padding:0 5px;color:#ccc;} |
|
709 | .breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}.breadcrumb>li{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 0 #ffffff;}.breadcrumb>li>.divider{padding:0 5px;color:#ccc;} | |
710 | .breadcrumb>.active{color:#999999;} |
|
710 | .breadcrumb>.active{color:#999999;} | |
711 | .pagination{margin:20px 0;} |
|
711 | .pagination{margin:20px 0;} | |
712 | .pagination ul{display:inline-block;*display:inline;*zoom:1;margin-left:0;margin-bottom:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);} |
|
712 | .pagination ul{display:inline-block;*display:inline;*zoom:1;margin-left:0;margin-bottom:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);} | |
713 | .pagination ul>li{display:inline;} |
|
713 | .pagination ul>li{display:inline;} | |
714 | .pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:20px;text-decoration:none;background-color:#ffffff;border:1px solid #dddddd;border-left-width:0;} |
|
714 | .pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:20px;text-decoration:none;background-color:#ffffff;border:1px solid #dddddd;border-left-width:0;} | |
715 | .pagination ul>li>a:hover,.pagination ul>li>a:focus,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#f5f5f5;} |
|
715 | .pagination ul>li>a:hover,.pagination ul>li>a:focus,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#f5f5f5;} | |
716 | .pagination ul>.active>a,.pagination ul>.active>span{color:#999999;cursor:default;} |
|
716 | .pagination ul>.active>a,.pagination ul>.active>span{color:#999999;cursor:default;} | |
717 | .pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>a:focus{color:#999999;background-color:transparent;cursor:default;} |
|
717 | .pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>a:focus{color:#999999;background-color:transparent;cursor:default;} | |
718 | .pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;} |
|
718 | .pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;} | |
719 | .pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;} |
|
719 | .pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;} | |
720 | .pagination-centered{text-align:center;} |
|
720 | .pagination-centered{text-align:center;} | |
721 | .pagination-right{text-align:right;} |
|
721 | .pagination-right{text-align:right;} | |
722 | .pagination-large ul>li>a,.pagination-large ul>li>span{padding:11px 19px;font-size:16.25px;} |
|
722 | .pagination-large ul>li>a,.pagination-large ul>li>span{padding:11px 19px;font-size:16.25px;} | |
723 | .pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-top-left-radius:6px;-moz-border-radius-topleft:6px;border-top-left-radius:6px;-webkit-border-bottom-left-radius:6px;-moz-border-radius-bottomleft:6px;border-bottom-left-radius:6px;} |
|
723 | .pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-top-left-radius:6px;-moz-border-radius-topleft:6px;border-top-left-radius:6px;-webkit-border-bottom-left-radius:6px;-moz-border-radius-bottomleft:6px;border-bottom-left-radius:6px;} | |
724 | .pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:6px;-moz-border-radius-topright:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;-moz-border-radius-bottomright:6px;border-bottom-right-radius:6px;} |
|
724 | .pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:6px;-moz-border-radius-topright:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;-moz-border-radius-bottomright:6px;border-bottom-right-radius:6px;} | |
725 | .pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>span{-webkit-border-top-left-radius:3px;-moz-border-radius-topleft:3px;border-top-left-radius:3px;-webkit-border-bottom-left-radius:3px;-moz-border-radius-bottomleft:3px;border-bottom-left-radius:3px;} |
|
725 | .pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>span{-webkit-border-top-left-radius:3px;-moz-border-radius-topleft:3px;border-top-left-radius:3px;-webkit-border-bottom-left-radius:3px;-moz-border-radius-bottomleft:3px;border-bottom-left-radius:3px;} | |
726 | .pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:3px;-moz-border-radius-topright:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;-moz-border-radius-bottomright:3px;border-bottom-right-radius:3px;} |
|
726 | .pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:3px;-moz-border-radius-topright:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;-moz-border-radius-bottomright:3px;border-bottom-right-radius:3px;} | |
727 | .pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:11.049999999999999px;} |
|
727 | .pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:11.049999999999999px;} | |
728 | .pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:0 6px;font-size:9.75px;} |
|
728 | .pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:0 6px;font-size:9.75px;} | |
729 | .pager{margin:20px 0;list-style:none;text-align:center;*zoom:1;}.pager:before,.pager:after{display:table;content:"";line-height:0;} |
|
729 | .pager{margin:20px 0;list-style:none;text-align:center;*zoom:1;}.pager:before,.pager:after{display:table;content:"";line-height:0;} | |
730 | .pager:after{clear:both;} |
|
730 | .pager:after{clear:both;} | |
731 | .pager li{display:inline;} |
|
731 | .pager li{display:inline;} | |
732 | .pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;} |
|
732 | .pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;} | |
733 | .pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#f5f5f5;} |
|
733 | .pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#f5f5f5;} | |
734 | .pager .next>a,.pager .next>span{float:right;} |
|
734 | .pager .next>a,.pager .next>span{float:right;} | |
735 | .pager .previous>a,.pager .previous>span{float:left;} |
|
735 | .pager .previous>a,.pager .previous>span{float:left;} | |
736 | .pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999999;background-color:#fff;cursor:default;} |
|
736 | .pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999999;background-color:#fff;cursor:default;} | |
737 | .modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000000;}.modal-backdrop.fade{opacity:0;} |
|
737 | .modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000000;}.modal-backdrop.fade{opacity:0;} | |
738 | .modal-backdrop,.modal-backdrop.fade.in{opacity:0.8;filter:alpha(opacity=80);} |
|
738 | .modal-backdrop,.modal-backdrop.fade.in{opacity:0.8;filter:alpha(opacity=80);} | |
739 | .modal{position:fixed;top:10%;left:50%;z-index:1050;width:560px;margin-left:-280px;background-color:#ffffff;border:1px solid #999;border:1px solid rgba(0, 0, 0, 0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;outline:none;}.modal.fade{-webkit-transition:opacity .3s linear, top .3s ease-out;-moz-transition:opacity .3s linear, top .3s ease-out;-o-transition:opacity .3s linear, top .3s ease-out;transition:opacity .3s linear, top .3s ease-out;top:-25%;} |
|
739 | .modal{position:fixed;top:10%;left:50%;z-index:1050;width:560px;margin-left:-280px;background-color:#ffffff;border:1px solid #999;border:1px solid rgba(0, 0, 0, 0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;outline:none;}.modal.fade{-webkit-transition:opacity .3s linear, top .3s ease-out;-moz-transition:opacity .3s linear, top .3s ease-out;-o-transition:opacity .3s linear, top .3s ease-out;transition:opacity .3s linear, top .3s ease-out;top:-25%;} | |
740 | .modal.fade.in{top:10%;} |
|
740 | .modal.fade.in{top:10%;} | |
741 | .modal-header{padding:9px 15px;border-bottom:1px solid #eee;}.modal-header .close{margin-top:2px;} |
|
741 | .modal-header{padding:9px 15px;border-bottom:1px solid #eee;}.modal-header .close{margin-top:2px;} | |
742 | .modal-header h3{margin:0;line-height:30px;} |
|
742 | .modal-header h3{margin:0;line-height:30px;} | |
743 | .modal-body{position:relative;overflow-y:auto;max-height:400px;padding:15px;} |
|
743 | .modal-body{position:relative;overflow-y:auto;max-height:400px;padding:15px;} | |
744 | .modal-form{margin-bottom:0;} |
|
744 | .modal-form{margin-bottom:0;} | |
745 | .modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;*zoom:1;}.modal-footer:before,.modal-footer:after{display:table;content:"";line-height:0;} |
|
745 | .modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;*zoom:1;}.modal-footer:before,.modal-footer:after{display:table;content:"";line-height:0;} | |
746 | .modal-footer:after{clear:both;} |
|
746 | .modal-footer:after{clear:both;} | |
747 | .modal-footer .btn+.btn{margin-left:5px;margin-bottom:0;} |
|
747 | .modal-footer .btn+.btn{margin-left:5px;margin-bottom:0;} | |
748 | .modal-footer .btn-group .btn+.btn{margin-left:-1px;} |
|
748 | .modal-footer .btn-group .btn+.btn{margin-left:-1px;} | |
749 | .modal-footer .btn-block+.btn-block{margin-left:0;} |
|
749 | .modal-footer .btn-block+.btn-block{margin-left:0;} | |
750 | .tooltip{position:absolute;z-index:1030;display:block;visibility:visible;font-size:11px;line-height:1.4;opacity:0;filter:alpha(opacity=0);}.tooltip.in{opacity:0.8;filter:alpha(opacity=80);} |
|
750 | .tooltip{position:absolute;z-index:1030;display:block;visibility:visible;font-size:11px;line-height:1.4;opacity:0;filter:alpha(opacity=0);}.tooltip.in{opacity:0.8;filter:alpha(opacity=80);} | |
751 | .tooltip.top{margin-top:-3px;padding:5px 0;} |
|
751 | .tooltip.top{margin-top:-3px;padding:5px 0;} | |
752 | .tooltip.right{margin-left:3px;padding:0 5px;} |
|
752 | .tooltip.right{margin-left:3px;padding:0 5px;} | |
753 | .tooltip.bottom{margin-top:3px;padding:5px 0;} |
|
753 | .tooltip.bottom{margin-top:3px;padding:5px 0;} | |
754 | .tooltip.left{margin-left:-3px;padding:0 5px;} |
|
754 | .tooltip.left{margin-left:-3px;padding:0 5px;} | |
755 | .tooltip-inner{max-width:200px;padding:8px;color:#ffffff;text-align:center;text-decoration:none;background-color:#000000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} |
|
755 | .tooltip-inner{max-width:200px;padding:8px;color:#ffffff;text-align:center;text-decoration:none;background-color:#000000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} | |
756 | .tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid;} |
|
756 | .tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid;} | |
757 | .tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000000;} |
|
757 | .tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000000;} | |
758 | .tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000000;} |
|
758 | .tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000000;} | |
759 | .tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000000;} |
|
759 | .tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000000;} | |
760 | .tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000000;} |
|
760 | .tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000000;} | |
761 | .popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;background-color:#ffffff;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);white-space:normal;}.popover.top{margin-top:-10px;} |
|
761 | .popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;background-color:#ffffff;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);white-space:normal;}.popover.top{margin-top:-10px;} | |
762 | .popover.right{margin-left:10px;} |
|
762 | .popover.right{margin-left:10px;} | |
763 | .popover.bottom{margin-top:10px;} |
|
763 | .popover.bottom{margin-top:10px;} | |
764 | .popover.left{margin-left:-10px;} |
|
764 | .popover.left{margin-left:-10px;} | |
765 | .popover-title{margin:0;padding:8px 14px;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0;}.popover-title:empty{display:none;} |
|
765 | .popover-title{margin:0;padding:8px 14px;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0;}.popover-title:empty{display:none;} | |
766 | .popover-content{padding:9px 14px;} |
|
766 | .popover-content{padding:9px 14px;} | |
767 | .popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid;} |
|
767 | .popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid;} | |
768 | .popover .arrow{border-width:11px;} |
|
768 | .popover .arrow{border-width:11px;} | |
769 | .popover .arrow:after{border-width:10px;content:"";} |
|
769 | .popover .arrow:after{border-width:10px;content:"";} | |
770 | .popover.top .arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0, 0, 0, 0.25);bottom:-11px;}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#ffffff;} |
|
770 | .popover.top .arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0, 0, 0, 0.25);bottom:-11px;}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#ffffff;} | |
771 | .popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0, 0, 0, 0.25);}.popover.right .arrow:after{left:1px;bottom:-10px;border-left-width:0;border-right-color:#ffffff;} |
|
771 | .popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0, 0, 0, 0.25);}.popover.right .arrow:after{left:1px;bottom:-10px;border-left-width:0;border-right-color:#ffffff;} | |
772 | .popover.bottom .arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0, 0, 0, 0.25);top:-11px;}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#ffffff;} |
|
772 | .popover.bottom .arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0, 0, 0, 0.25);top:-11px;}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#ffffff;} | |
773 | .popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0, 0, 0, 0.25);}.popover.left .arrow:after{right:1px;border-right-width:0;border-left-color:#ffffff;bottom:-10px;} |
|
773 | .popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0, 0, 0, 0.25);}.popover.left .arrow:after{right:1px;border-right-width:0;border-left-color:#ffffff;bottom:-10px;} | |
774 | .thumbnails{margin-left:-20px;list-style:none;*zoom:1;}.thumbnails:before,.thumbnails:after{display:table;content:"";line-height:0;} |
|
774 | .thumbnails{margin-left:-20px;list-style:none;*zoom:1;}.thumbnails:before,.thumbnails:after{display:table;content:"";line-height:0;} | |
775 | .thumbnails:after{clear:both;} |
|
775 | .thumbnails:after{clear:both;} | |
776 | .row-fluid .thumbnails{margin-left:0;} |
|
776 | .row-fluid .thumbnails{margin-left:0;} | |
777 | .thumbnails>li{float:left;margin-bottom:20px;margin-left:20px;} |
|
777 | .thumbnails>li{float:left;margin-bottom:20px;margin-left:20px;} | |
778 | .thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0, 0, 0, 0.055);-moz-box-shadow:0 1px 3px rgba(0, 0, 0, 0.055);box-shadow:0 1px 3px rgba(0, 0, 0, 0.055);-webkit-transition:all 0.2s ease-in-out;-moz-transition:all 0.2s ease-in-out;-o-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;} |
|
778 | .thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0, 0, 0, 0.055);-moz-box-shadow:0 1px 3px rgba(0, 0, 0, 0.055);box-shadow:0 1px 3px rgba(0, 0, 0, 0.055);-webkit-transition:all 0.2s ease-in-out;-moz-transition:all 0.2s ease-in-out;-o-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;} | |
779 | a.thumbnail:hover,a.thumbnail:focus{border-color:#0088cc;-webkit-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);-moz-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);} |
|
779 | a.thumbnail:hover,a.thumbnail:focus{border-color:#0088cc;-webkit-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);-moz-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);} | |
780 | .thumbnail>img{display:block;max-width:100%;margin-left:auto;margin-right:auto;} |
|
780 | .thumbnail>img{display:block;max-width:100%;margin-left:auto;margin-right:auto;} | |
781 | .thumbnail .caption{padding:9px;color:#555555;} |
|
781 | .thumbnail .caption{padding:9px;color:#555555;} | |
782 | .media,.media-body{overflow:hidden;*overflow:visible;zoom:1;} |
|
782 | .media,.media-body{overflow:hidden;*overflow:visible;zoom:1;} | |
783 | .media,.media .media{margin-top:15px;} |
|
783 | .media,.media .media{margin-top:15px;} | |
784 | .media:first-child{margin-top:0;} |
|
784 | .media:first-child{margin-top:0;} | |
785 | .media-object{display:block;} |
|
785 | .media-object{display:block;} | |
786 | .media-heading{margin:0 0 5px;} |
|
786 | .media-heading{margin:0 0 5px;} | |
787 | .media>.pull-left{margin-right:10px;} |
|
787 | .media>.pull-left{margin-right:10px;} | |
788 | .media>.pull-right{margin-left:10px;} |
|
788 | .media>.pull-right{margin-left:10px;} | |
789 | .media-list{margin-left:0;list-style:none;} |
|
789 | .media-list{margin-left:0;list-style:none;} | |
790 | .label,.badge{display:inline-block;padding:2px 4px;font-size:10.998px;font-weight:bold;line-height:14px;color:#ffffff;vertical-align:baseline;white-space:nowrap;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#999999;} |
|
790 | .label,.badge{display:inline-block;padding:2px 4px;font-size:10.998px;font-weight:bold;line-height:14px;color:#ffffff;vertical-align:baseline;white-space:nowrap;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#999999;} | |
791 | .label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} |
|
791 | .label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} | |
792 | .badge{padding-left:9px;padding-right:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px;} |
|
792 | .badge{padding-left:9px;padding-right:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px;} | |
793 | .label:empty,.badge:empty{display:none;} |
|
793 | .label:empty,.badge:empty{display:none;} | |
794 | a.label:hover,a.label:focus,a.badge:hover,a.badge:focus{color:#ffffff;text-decoration:none;cursor:pointer;} |
|
794 | a.label:hover,a.label:focus,a.badge:hover,a.badge:focus{color:#ffffff;text-decoration:none;cursor:pointer;} | |
795 | .label-important,.badge-important{background-color:#b94a48;} |
|
795 | .label-important,.badge-important{background-color:#b94a48;} | |
796 | .label-important[href],.badge-important[href]{background-color:#953b39;} |
|
796 | .label-important[href],.badge-important[href]{background-color:#953b39;} | |
797 | .label-warning,.badge-warning{background-color:#f89406;} |
|
797 | .label-warning,.badge-warning{background-color:#f89406;} | |
798 | .label-warning[href],.badge-warning[href]{background-color:#c67605;} |
|
798 | .label-warning[href],.badge-warning[href]{background-color:#c67605;} | |
799 | .label-success,.badge-success{background-color:#468847;} |
|
799 | .label-success,.badge-success{background-color:#468847;} | |
800 | .label-success[href],.badge-success[href]{background-color:#356635;} |
|
800 | .label-success[href],.badge-success[href]{background-color:#356635;} | |
801 | .label-info,.badge-info{background-color:#3a87ad;} |
|
801 | .label-info,.badge-info{background-color:#3a87ad;} | |
802 | .label-info[href],.badge-info[href]{background-color:#2d6987;} |
|
802 | .label-info[href],.badge-info[href]{background-color:#2d6987;} | |
803 | .label-inverse,.badge-inverse{background-color:#333333;} |
|
803 | .label-inverse,.badge-inverse{background-color:#333333;} | |
804 | .label-inverse[href],.badge-inverse[href]{background-color:#1a1a1a;} |
|
804 | .label-inverse[href],.badge-inverse[href]{background-color:#1a1a1a;} | |
805 | .btn .label,.btn .badge{position:relative;top:-1px;} |
|
805 | .btn .label,.btn .badge{position:relative;top:-1px;} | |
806 | .btn-mini .label,.btn-mini .badge{top:0;} |
|
806 | .btn-mini .label,.btn-mini .badge{top:0;} | |
807 | @-webkit-keyframes progress-bar-stripes{from{background-position:40px 0;} to{background-position:0 0;}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0;} to{background-position:0 0;}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0;} to{background-position:0 0;}}@-o-keyframes progress-bar-stripes{from{background-position:0 0;} to{background-position:40px 0;}}@keyframes progress-bar-stripes{from{background-position:40px 0;} to{background-position:0 0;}}.progress{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f7f7f7;background-image:-moz-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9));background-image:-webkit-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-o-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:linear-gradient(to bottom, #f5f5f5, #f9f9f9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} |
|
807 | @-webkit-keyframes progress-bar-stripes{from{background-position:40px 0;} to{background-position:0 0;}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0;} to{background-position:0 0;}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0;} to{background-position:0 0;}}@-o-keyframes progress-bar-stripes{from{background-position:0 0;} to{background-position:40px 0;}}@keyframes progress-bar-stripes{from{background-position:40px 0;} to{background-position:0 0;}}.progress{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f7f7f7;background-image:-moz-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9));background-image:-webkit-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-o-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:linear-gradient(to bottom, #f5f5f5, #f9f9f9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} | |
808 | .progress .bar{width:0%;height:100%;color:#ffffff;float:left;font-size:12px;text-align:center;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top, #149bdf, #0480be);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be));background-image:-webkit-linear-gradient(top, #149bdf, #0480be);background-image:-o-linear-gradient(top, #149bdf, #0480be);background-image:linear-gradient(to bottom, #149bdf, #0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width 0.6s ease;-moz-transition:width 0.6s ease;-o-transition:width 0.6s ease;transition:width 0.6s ease;} |
|
808 | .progress .bar{width:0%;height:100%;color:#ffffff;float:left;font-size:12px;text-align:center;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top, #149bdf, #0480be);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be));background-image:-webkit-linear-gradient(top, #149bdf, #0480be);background-image:-o-linear-gradient(top, #149bdf, #0480be);background-image:linear-gradient(to bottom, #149bdf, #0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width 0.6s ease;-moz-transition:width 0.6s ease;-o-transition:width 0.6s ease;transition:width 0.6s ease;} | |
809 | .progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15);} |
|
809 | .progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15);} | |
810 | .progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px;} |
|
810 | .progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px;} | |
811 | .progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite;} |
|
811 | .progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite;} | |
812 | .progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top, #ee5f5b, #c43c35);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35));background-image:-webkit-linear-gradient(top, #ee5f5b, #c43c35);background-image:-o-linear-gradient(top, #ee5f5b, #c43c35);background-image:linear-gradient(to bottom, #ee5f5b, #c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0);} |
|
812 | .progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top, #ee5f5b, #c43c35);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35));background-image:-webkit-linear-gradient(top, #ee5f5b, #c43c35);background-image:-o-linear-gradient(top, #ee5f5b, #c43c35);background-image:linear-gradient(to bottom, #ee5f5b, #c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0);} | |
813 | .progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);} |
|
813 | .progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);} | |
814 | .progress-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top, #62c462, #57a957);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957));background-image:-webkit-linear-gradient(top, #62c462, #57a957);background-image:-o-linear-gradient(top, #62c462, #57a957);background-image:linear-gradient(to bottom, #62c462, #57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0);} |
|
814 | .progress-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top, #62c462, #57a957);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957));background-image:-webkit-linear-gradient(top, #62c462, #57a957);background-image:-o-linear-gradient(top, #62c462, #57a957);background-image:linear-gradient(to bottom, #62c462, #57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0);} | |
815 | .progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);} |
|
815 | .progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);} | |
816 | .progress-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top, #5bc0de, #339bb9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9));background-image:-webkit-linear-gradient(top, #5bc0de, #339bb9);background-image:-o-linear-gradient(top, #5bc0de, #339bb9);background-image:linear-gradient(to bottom, #5bc0de, #339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0);} |
|
816 | .progress-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top, #5bc0de, #339bb9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9));background-image:-webkit-linear-gradient(top, #5bc0de, #339bb9);background-image:-o-linear-gradient(top, #5bc0de, #339bb9);background-image:linear-gradient(to bottom, #5bc0de, #339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0);} | |
817 | .progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);} |
|
817 | .progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);} | |
818 | .progress-warning .bar,.progress .bar-warning{background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(to bottom, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0);} |
|
818 | .progress-warning .bar,.progress .bar-warning{background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(to bottom, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0);} | |
819 | .progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#fbb450;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);} |
|
819 | .progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#fbb450;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);} | |
820 | .accordion{margin-bottom:20px;} |
|
820 | .accordion{margin-bottom:20px;} | |
821 | .accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} |
|
821 | .accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} | |
822 | .accordion-heading{border-bottom:0;} |
|
822 | .accordion-heading{border-bottom:0;} | |
823 | .accordion-heading .accordion-toggle{display:block;padding:8px 15px;} |
|
823 | .accordion-heading .accordion-toggle{display:block;padding:8px 15px;} | |
824 | .accordion-toggle{cursor:pointer;} |
|
824 | .accordion-toggle{cursor:pointer;} | |
825 | .accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5;} |
|
825 | .accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5;} | |
826 | .carousel{position:relative;margin-bottom:20px;line-height:1;} |
|
826 | .carousel{position:relative;margin-bottom:20px;line-height:1;} | |
827 | .carousel-inner{overflow:hidden;width:100%;position:relative;} |
|
827 | .carousel-inner{overflow:hidden;width:100%;position:relative;} | |
828 | .carousel-inner>.item{display:none;position:relative;-webkit-transition:0.6s ease-in-out left;-moz-transition:0.6s ease-in-out left;-o-transition:0.6s ease-in-out left;transition:0.6s ease-in-out left;}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;line-height:1;} |
|
828 | .carousel-inner>.item{display:none;position:relative;-webkit-transition:0.6s ease-in-out left;-moz-transition:0.6s ease-in-out left;-o-transition:0.6s ease-in-out left;transition:0.6s ease-in-out left;}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;line-height:1;} | |
829 | .carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block;} |
|
829 | .carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block;} | |
830 | .carousel-inner>.active{left:0;} |
|
830 | .carousel-inner>.active{left:0;} | |
831 | .carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%;} |
|
831 | .carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%;} | |
832 | .carousel-inner>.next{left:100%;} |
|
832 | .carousel-inner>.next{left:100%;} | |
833 | .carousel-inner>.prev{left:-100%;} |
|
833 | .carousel-inner>.prev{left:-100%;} | |
834 | .carousel-inner>.next.left,.carousel-inner>.prev.right{left:0;} |
|
834 | .carousel-inner>.next.left,.carousel-inner>.prev.right{left:0;} | |
835 | .carousel-inner>.active.left{left:-100%;} |
|
835 | .carousel-inner>.active.left{left:-100%;} | |
836 | .carousel-inner>.active.right{left:100%;} |
|
836 | .carousel-inner>.active.right{left:100%;} | |
837 | .carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#ffffff;text-align:center;background:#222222;border:3px solid #ffffff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:0.5;filter:alpha(opacity=50);}.carousel-control.right{left:auto;right:15px;} |
|
837 | .carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#ffffff;text-align:center;background:#222222;border:3px solid #ffffff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:0.5;filter:alpha(opacity=50);}.carousel-control.right{left:auto;right:15px;} | |
838 | .carousel-control:hover,.carousel-control:focus{color:#ffffff;text-decoration:none;opacity:0.9;filter:alpha(opacity=90);} |
|
838 | .carousel-control:hover,.carousel-control:focus{color:#ffffff;text-decoration:none;opacity:0.9;filter:alpha(opacity=90);} | |
839 | .carousel-indicators{position:absolute;top:15px;right:15px;z-index:5;margin:0;list-style:none;}.carousel-indicators li{display:block;float:left;width:10px;height:10px;margin-left:5px;text-indent:-999px;background-color:#ccc;background-color:rgba(255, 255, 255, 0.25);border-radius:5px;} |
|
839 | .carousel-indicators{position:absolute;top:15px;right:15px;z-index:5;margin:0;list-style:none;}.carousel-indicators li{display:block;float:left;width:10px;height:10px;margin-left:5px;text-indent:-999px;background-color:#ccc;background-color:rgba(255, 255, 255, 0.25);border-radius:5px;} | |
840 | .carousel-indicators .active{background-color:#fff;} |
|
840 | .carousel-indicators .active{background-color:#fff;} | |
841 | .carousel-caption{position:absolute;left:0;right:0;bottom:0;padding:15px;background:#333333;background:rgba(0, 0, 0, 0.75);} |
|
841 | .carousel-caption{position:absolute;left:0;right:0;bottom:0;padding:15px;background:#333333;background:rgba(0, 0, 0, 0.75);} | |
842 | .carousel-caption h4,.carousel-caption p{color:#ffffff;line-height:20px;} |
|
842 | .carousel-caption h4,.carousel-caption p{color:#ffffff;line-height:20px;} | |
843 | .carousel-caption h4{margin:0 0 5px;} |
|
843 | .carousel-caption h4{margin:0 0 5px;} | |
844 | .carousel-caption p{margin-bottom:0;} |
|
844 | .carousel-caption p{margin-bottom:0;} | |
845 | .hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:30px;color:inherit;background-color:#eeeeee;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;color:inherit;letter-spacing:-1px;} |
|
845 | .hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:30px;color:inherit;background-color:#eeeeee;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;color:inherit;letter-spacing:-1px;} | |
846 | .hero-unit li{line-height:30px;} |
|
846 | .hero-unit li{line-height:30px;} | |
847 | .pull-right{float:right;} |
|
847 | .pull-right{float:right;} | |
848 | .pull-left{float:left;} |
|
848 | .pull-left{float:left;} | |
849 | .hide{display:none;} |
|
849 | .hide{display:none;} | |
850 | .show{display:block;} |
|
850 | .show{display:block;} | |
851 | .invisible{visibility:hidden;} |
|
851 | .invisible{visibility:hidden;} | |
852 | .affix{position:fixed;} |
|
852 | .affix{position:fixed;} | |
853 | .corner-all{border-radius:4px;} |
|
853 | .corner-all{border-radius:4px;} | |
854 | .hbox{display:-webkit-box;-webkit-box-orient:horizontal;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:horizontal;-moz-box-align:stretch;display:box;box-orient:horizontal;box-align:stretch;} |
|
854 | .hbox{display:-webkit-box;-webkit-box-orient:horizontal;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:horizontal;-moz-box-align:stretch;display:box;box-orient:horizontal;box-align:stretch;} | |
855 | .hbox>*{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;} |
|
855 | .hbox>*{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;} | |
856 | .vbox{display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;width:100%;} |
|
856 | .vbox{display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;width:100%;} | |
857 | .vbox>*{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;} |
|
857 | .vbox>*{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;} | |
858 | .reverse{-webkit-box-direction:reverse;-moz-box-direction:reverse;box-direction:reverse;} |
|
858 | .reverse{-webkit-box-direction:reverse;-moz-box-direction:reverse;box-direction:reverse;} | |
859 | .box-flex0{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;} |
|
859 | .box-flex0{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;} | |
860 | .box-flex1{-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;} |
|
860 | .box-flex1{-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;} | |
861 | .box-flex{-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;} |
|
861 | .box-flex{-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;} | |
862 | .box-flex2{-webkit-box-flex:2;-moz-box-flex:2;box-flex:2;} |
|
862 | .box-flex2{-webkit-box-flex:2;-moz-box-flex:2;box-flex:2;} | |
863 | .box-group1{-webkit-box-flex-group:1;-moz-box-flex-group:1;box-flex-group:1;} |
|
863 | .box-group1{-webkit-box-flex-group:1;-moz-box-flex-group:1;box-flex-group:1;} | |
864 | .box-group2{-webkit-box-flex-group:2;-moz-box-flex-group:2;box-flex-group:2;} |
|
864 | .box-group2{-webkit-box-flex-group:2;-moz-box-flex-group:2;box-flex-group:2;} | |
865 | .start{-webkit-box-pack:start;-moz-box-pack:start;box-pack:start;} |
|
865 | .start{-webkit-box-pack:start;-moz-box-pack:start;box-pack:start;} | |
866 | .end{-webkit-box-pack:end;-moz-box-pack:end;box-pack:end;} |
|
866 | .end{-webkit-box-pack:end;-moz-box-pack:end;box-pack:end;} | |
867 | .center{-webkit-box-pack:center;-moz-box-pack:center;box-pack:center;} |
|
867 | .center{-webkit-box-pack:center;-moz-box-pack:center;box-pack:center;} | |
868 | .corner-all{border-radius:4px;} |
|
868 | .corner-all{border-radius:4px;} | |
|
869 | pre code{display:block;padding:0.5em;} | |||
|
870 | .highlight-base,pre code,pre .subst,pre .tag .title,pre .lisp .title,pre .clojure .built_in,pre .nginx .title{color:black;} | |||
|
871 | .highlight-string,pre .string,pre .constant,pre .parent,pre .tag .value,pre .rules .value,pre .rules .value .number,pre .preprocessor,pre .ruby .symbol,pre .ruby .symbol .string,pre .aggregate,pre .template_tag,pre .django .variable,pre .smalltalk .class,pre .addition,pre .flow,pre .stream,pre .bash .variable,pre .apache .tag,pre .apache .cbracket,pre .tex .command,pre .tex .special,pre .erlang_repl .function_or_atom,pre .markdown .header{color:#BA2121;} | |||
|
872 | .highlight-comment,pre .comment,pre .annotation,pre .template_comment,pre .diff .header,pre .chunk,pre .markdown .blockquote{color:#408080;font-style:italic;} | |||
|
873 | .highlight-number,pre .number,pre .date,pre .regexp,pre .literal,pre .smalltalk .symbol,pre .smalltalk .char,pre .go .constant,pre .change,pre .markdown .bullet,pre .markdown .link_url{color:#080;} | |||
|
874 | pre .label,pre .javadoc,pre .ruby .string,pre .decorator,pre .filter .argument,pre .localvars,pre .array,pre .attr_selector,pre .important,pre .pseudo,pre .pi,pre .doctype,pre .deletion,pre .envvar,pre .shebang,pre .apache .sqbracket,pre .nginx .built_in,pre .tex .formula,pre .erlang_repl .reserved,pre .prompt,pre .markdown .link_label,pre .vhdl .attribute,pre .clojure .attribute,pre .coffeescript .property{color:#8888ff;} | |||
|
875 | .highlight-keyword,pre .keyword,pre .id,pre .phpdoc,pre .aggregate,pre .css .tag,pre .javadoctag,pre .phpdoc,pre .yardoctag,pre .smalltalk .class,pre .winutils,pre .bash .variable,pre .apache .tag,pre .go .typename,pre .tex .command,pre .markdown .strong,pre .request,pre .status{color:#008000;font-weight:bold;} | |||
|
876 | .highlight-builtin,pre .built_in{color:#008000;} | |||
|
877 | pre .markdown .emphasis{font-style:italic;} | |||
|
878 | pre .nginx .built_in{font-weight:normal;} | |||
|
879 | pre .coffeescript .javascript,pre .javascript .xml,pre .tex .formula,pre .xml .javascript,pre .xml .vbscript,pre .xml .css,pre .xml .cdata{opacity:0.5;} | |||
|
880 | .cm-s-ipython span.cm-variable{color:black;} | |||
|
881 | .cm-s-ipython span.cm-keyword{color:#008000;font-weight:bold;} | |||
|
882 | .cm-s-ipython span.cm-number{color:#080;} | |||
|
883 | .cm-s-ipython span.cm-comment{color:#408080;font-style:italic;} | |||
|
884 | .cm-s-ipython span.cm-string{color:#BA2121;} | |||
|
885 | .cm-s-ipython span.cm-builtin{color:#008000;} | |||
|
886 | .cm-s-ipython span.cm-error{color:#f00;} | |||
|
887 | .cm-s-ipython span.cm-operator{color:#AA22FF;font-weight:bold;} | |||
|
888 | .cm-s-ipython span.cm-meta{color:#AA22FF;} | |||
869 | body{background-color:#ffffff;} |
|
889 | body{background-color:#ffffff;} | |
870 | body.notebook_app{overflow:hidden;} |
|
890 | body.notebook_app{overflow:hidden;} | |
871 | blockquote{border-left:4px solid #DDD;padding:0 15px;color:#777;} |
|
891 | blockquote{border-left:4px solid #DDD;padding:0 15px;color:#777;} | |
872 | span#save_widget{padding:5px;margin:0px 0px 0px 300px;display:inline-block;} |
|
892 | span#save_widget{padding:5px;margin:0px 0px 0px 300px;display:inline-block;} | |
873 | span#checkpoint_status span#autosave_status{font-size:small;} |
|
893 | span#checkpoint_status span#autosave_status{font-size:small;} | |
874 | span#notebook_name{height:1em;line-height:1em;padding:3px;border:none;font-size:146.5%;} |
|
894 | span#notebook_name{height:1em;line-height:1em;padding:3px;border:none;font-size:146.5%;} | |
875 | .ui-menubar-item .ui-button .ui-button-text{padding:0.4em 1.0em;font-size:100%;} |
|
895 | .ui-menubar-item .ui-button .ui-button-text{padding:0.4em 1.0em;font-size:100%;} | |
876 | .ui-menu{-webkit-box-shadow:0px 6px 10px -1px #adadad;-moz-box-shadow:0px 6px 10px -1px #adadad;box-shadow:0px 6px 10px -1px #adadad;} |
|
896 | .ui-menu{-webkit-box-shadow:0px 6px 10px -1px #adadad;-moz-box-shadow:0px 6px 10px -1px #adadad;box-shadow:0px 6px 10px -1px #adadad;} | |
877 | .ui-menu .ui-menu-item a{border:1px solid transparent;padding:2px 1.6em;} |
|
897 | .ui-menu .ui-menu-item a{border:1px solid transparent;padding:2px 1.6em;} | |
878 | .ui-menu .ui-menu-item a.ui-state-focus{margin:0;} |
|
898 | .ui-menu .ui-menu-item a.ui-state-focus{margin:0;} | |
879 | .ui-menu hr{margin:0.3em 0;} |
|
899 | .ui-menu hr{margin:0.3em 0;} | |
880 | #menubar_container{position:relative;} |
|
900 | #menubar_container{position:relative;} | |
881 | #notification_area{position:absolute;right:0px;top:0px;height:25px;padding:3px 0px;padding-right:3px;z-index:10;} |
|
901 | #notification_area{position:absolute;right:0px;top:0px;height:25px;padding:3px 0px;padding-right:3px;z-index:10;} | |
882 | .notification_widget{float:right;right:0px;top:1px;height:25px;padding:3px 6px;z-index:10;} |
|
902 | .notification_widget{float:right;right:0px;top:1px;height:25px;padding:3px 6px;z-index:10;} | |
883 | .toolbar{padding:3px 15px;border-bottom:1px #ababab solid;}.toolbar button{margin-top:2px;margin-bottom:2px;} |
|
903 | .toolbar{padding:3px 15px;border-bottom:1px #ababab solid;}.toolbar button{margin-top:2px;margin-bottom:2px;} | |
884 | .toolbar select,.toolbar label{height:19px;vertical-align:middle;margin-right:2px;margin-bottom:0;display:inline;font-size:92%;margin-left:0.3em;margin-right:0.3em;padding:0px;} |
|
904 | .toolbar select,.toolbar label{height:19px;vertical-align:middle;margin-right:2px;margin-bottom:0;display:inline;font-size:92%;margin-left:0.3em;margin-right:0.3em;padding:0px;} | |
885 | .toolbar select{width:auto;} |
|
905 | .toolbar select{width:auto;} | |
886 | #ipython-main-app{width:100%;position:relative;font-size:110%;} |
|
906 | #ipython-main-app{width:100%;position:relative;font-size:110%;} | |
887 | span#quick_help_area{position:static;padding:5px 0px;margin:0px 0px 0px 0px;} |
|
907 | span#quick_help_area{position:static;padding:5px 0px;margin:0px 0px 0px 0px;} | |
888 | .help_string{float:right;width:170px;padding:0px 5px;text-align:left;font-size:85%;} |
|
908 | .help_string{float:right;width:170px;padding:0px 5px;text-align:left;font-size:85%;} | |
889 | .help_string_label{float:right;font-size:85%;} |
|
909 | .help_string_label{float:right;font-size:85%;} | |
890 | div#notebook_panel{margin:0px 0px 0px 0px;padding:0px;} |
|
910 | div#notebook_panel{margin:0px 0px 0px 0px;padding:0px;} | |
891 | div#notebook{overflow-y:scroll;overflow-x:auto;width:100%;padding:5px 5px 15px 5px;margin:0px;} |
|
911 | div#notebook{overflow-y:scroll;overflow-x:auto;width:100%;padding:5px 5px 15px 5px;margin:0px;} | |
892 | div#pager_splitter{height:8px;} |
|
912 | div#pager_splitter{height:8px;} | |
893 | #pager_container{position:relative;} |
|
913 | #pager_container{position:relative;} | |
894 | div#pager{padding:15px;overflow:auto;display:none;} |
|
914 | div#pager{padding:15px;overflow:auto;display:none;} | |
895 | div.ui-widget-content{border:1px solid #ababab;outline:none;} |
|
915 | div.ui-widget-content{border:1px solid #ababab;outline:none;} | |
896 | .cell{border:1px solid transparent;display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;width:100%;}.cell.selected{border-radius:4px;border:thin #ababab solid;} |
|
916 | .cell{border:1px solid transparent;display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;width:100%;}.cell.selected{border-radius:4px;border:thin #ababab solid;} | |
897 | div.cell{width:100%;padding:5px 5px 5px 0px;margin:2px 0px 2px 0px;outline:none;} |
|
917 | div.cell{width:100%;padding:5px 5px 5px 0px;margin:2px 0px 2px 0px;outline:none;} | |
898 | div.prompt{width:11ex;padding:0.4em;margin:0px;font-family:monospace;text-align:right;line-height:1.231;} |
|
918 | div.prompt{width:11ex;padding:0.4em;margin:0px;font-family:monospace;text-align:right;line-height:1.231;} | |
899 | div.input{page-break-inside:avoid;display:-webkit-box;-webkit-box-orient:horizontal;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:horizontal;-moz-box-align:stretch;display:box;box-orient:horizontal;box-align:stretch;} |
|
919 | div.input{page-break-inside:avoid;display:-webkit-box;-webkit-box-orient:horizontal;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:horizontal;-moz-box-align:stretch;display:box;box-orient:horizontal;box-align:stretch;} | |
900 | div.input_area{border:1px solid #cfcfcf;border-radius:4px;background:#f7f7f7;} |
|
920 | div.input_area{border:1px solid #cfcfcf;border-radius:4px;background:#f7f7f7;} | |
901 | div.input_prompt{color:navy;border-top:1px solid transparent;} |
|
921 | div.input_prompt{color:navy;border-top:1px solid transparent;} | |
902 | div.output_wrapper{margin-top:5px;margin-left:5px;width:100%;position:relative;} |
|
922 | div.output_wrapper{margin-top:5px;margin-left:5px;width:100%;position:relative;} | |
903 | div.output_scroll{height:24em;width:100%;overflow:auto;border-radius:4px;-webkit-box-shadow:inset 0 2px 8px rgba(0, 0, 0, 0.8);-moz-box-shadow:inset 0 2px 8px rgba(0, 0, 0, 0.8);box-shadow:inset 0 2px 8px rgba(0, 0, 0, 0.8);} |
|
923 | div.output_scroll{height:24em;width:100%;overflow:auto;border-radius:4px;-webkit-box-shadow:inset 0 2px 8px rgba(0, 0, 0, 0.8);-moz-box-shadow:inset 0 2px 8px rgba(0, 0, 0, 0.8);box-shadow:inset 0 2px 8px rgba(0, 0, 0, 0.8);} | |
904 | div.output_collapsed{margin-right:5px;} |
|
924 | div.output_collapsed{margin-right:5px;} | |
905 | div.out_prompt_overlay{height:100%;padding:0px;position:absolute;border-radius:4px;} |
|
925 | div.out_prompt_overlay{height:100%;padding:0px;position:absolute;border-radius:4px;} | |
906 | div.out_prompt_overlay:hover{-webkit-box-shadow:inset 0 0 1px #000000;-moz-box-shadow:inset 0 0 1px #000000;box-shadow:inset 0 0 1px #000000;background:rgba(240, 240, 240, 0.5);} |
|
926 | div.out_prompt_overlay:hover{-webkit-box-shadow:inset 0 0 1px #000000;-moz-box-shadow:inset 0 0 1px #000000;box-shadow:inset 0 0 1px #000000;background:rgba(240, 240, 240, 0.5);} | |
907 | div.output_prompt{color:darkred;margin:0 5px 0 -5px;} |
|
927 | div.output_prompt{color:darkred;margin:0 5px 0 -5px;} | |
908 | div.output_area{padding:0px;page-break-inside:avoid;display:-webkit-box;-webkit-box-orient:horizontal;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:horizontal;-moz-box-align:stretch;display:box;box-orient:horizontal;box-align:stretch;} |
|
928 | div.output_area{padding:0px;page-break-inside:avoid;display:-webkit-box;-webkit-box-orient:horizontal;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:horizontal;-moz-box-align:stretch;display:box;box-orient:horizontal;box-align:stretch;} | |
909 | div.output_area pre{font-family:monospace;margin:0;padding:0;border:0;font-size:100%;vertical-align:baseline;color:black;} |
|
929 | div.output_area pre{font-family:monospace;margin:0;padding:0;border:0;font-size:100%;vertical-align:baseline;color:black;} | |
910 | div.output_subarea{padding:0.44em 0.4em 0.4em 1px;-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;} |
|
930 | div.output_subarea{padding:0.44em 0.4em 0.4em 1px;-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;} | |
911 | div.output_text{text-align:left;color:#000000;font-family:monospace;line-height:1.231;} |
|
931 | div.output_text{text-align:left;color:#000000;font-family:monospace;line-height:1.231;} | |
912 | div.output_stream{padding-top:0.0em;padding-bottom:0.0em;} |
|
932 | div.output_stream{padding-top:0.0em;padding-bottom:0.0em;} | |
913 | div.output_stderr{background:#fdd;} |
|
933 | div.output_stderr{background:#fdd;} | |
914 | div.output_latex{text-align:left;} |
|
934 | div.output_latex{text-align:left;} | |
915 | div.text_cell{padding:5px 5px 5px 5px;} |
|
935 | div.text_cell{padding:5px 5px 5px 5px;} | |
916 | div.text_cell_input{color:#000000;border:1px solid #cfcfcf;border-radius:4px;background:#f7f7f7;} |
|
936 | div.text_cell_input{color:#000000;border:1px solid #cfcfcf;border-radius:4px;background:#f7f7f7;} | |
917 | div.text_cell_render{outline:none;resize:none;width:inherit;border-style:none;padding:5px;color:#000000;} |
|
937 | div.text_cell_render{outline:none;resize:none;width:inherit;border-style:none;padding:5px;color:#000000;} | |
918 | .CodeMirror{line-height:1.231;height:auto;background:none;} |
|
938 | .CodeMirror{line-height:1.231;height:auto;background:none;} | |
919 | .CodeMirror-scroll{overflow-y:hidden;overflow-x:auto;} |
|
939 | .CodeMirror-scroll{overflow-y:hidden;overflow-x:auto;} | |
920 | .CodeMirror-lines{padding:0.4em;} |
|
940 | .CodeMirror-lines{padding:0.4em;} | |
921 | .CodeMirror pre{padding:0;} |
|
941 | .CodeMirror pre{padding:0;} | |
922 | .ansiblack{color:#000000;} |
|
942 | .ansiblack{color:#000000;} | |
923 | .ansired{color:darkred;} |
|
943 | .ansired{color:darkred;} | |
924 | .ansigreen{color:darkgreen;} |
|
944 | .ansigreen{color:darkgreen;} | |
925 | .ansiyellow{color:brown;} |
|
945 | .ansiyellow{color:brown;} | |
926 | .ansiblue{color:darkblue;} |
|
946 | .ansiblue{color:darkblue;} | |
927 | .ansipurple{color:darkviolet;} |
|
947 | .ansipurple{color:darkviolet;} | |
928 | .ansicyan{color:steelblue;} |
|
948 | .ansicyan{color:steelblue;} | |
929 | .ansigrey{color:grey;} |
|
949 | .ansigrey{color:grey;} | |
930 | .ansibold{font-weight:bold;} |
|
950 | .ansibold{font-weight:bold;} | |
931 | .completions{position:absolute;z-index:10;overflow:hidden;border:1px solid #ababab;border-radius:4px;-webkit-box-shadow:0px 6px 10px -1px #adadad;-moz-box-shadow:0px 6px 10px -1px #adadad;box-shadow:0px 6px 10px -1px #adadad;} |
|
951 | .completions{position:absolute;z-index:10;overflow:hidden;border:1px solid #ababab;border-radius:4px;-webkit-box-shadow:0px 6px 10px -1px #adadad;-moz-box-shadow:0px 6px 10px -1px #adadad;box-shadow:0px 6px 10px -1px #adadad;} | |
932 | .completions select{background:white;outline:none;border:none;padding:0px;margin:0px;overflow:auto;font-family:monospace;font-size:110%;color:#000000;} |
|
952 | .completions select{background:white;outline:none;border:none;padding:0px;margin:0px;overflow:auto;font-family:monospace;font-size:110%;color:#000000;} | |
933 | .completions select option.context{color:#0064cd;} |
|
953 | .completions select option.context{color:#0064cd;} | |
934 | pre.dialog{background-color:#f7f7f7;border:1px solid #ddd;border-radius:4px;padding:0.4em;padding-left:2em;} |
|
954 | pre.dialog{background-color:#f7f7f7;border:1px solid #ddd;border-radius:4px;padding:0.4em;padding-left:2em;} | |
935 | p.dialog{padding:0.2em;} |
|
955 | p.dialog{padding:0.2em;} | |
936 | .shortcut_key{display:inline-block;width:15ex;text-align:right;font-family:monospace;} |
|
956 | .shortcut_key{display:inline-block;width:15ex;text-align:right;font-family:monospace;} | |
937 | pre,code,kbd,samp{white-space:pre-wrap;} |
|
957 | pre,code,kbd,samp{white-space:pre-wrap;} | |
938 | #fonttest{font-family:monospace;} |
|
958 | #fonttest{font-family:monospace;} | |
939 | .js-error{color:darkred;} |
|
959 | .js-error{color:darkred;} | |
940 | a{text-decoration:underline;} |
|
960 | a{text-decoration:underline;} | |
941 | p{margin-bottom:0;} |
|
961 | p{margin-bottom:0;} | |
942 | a.heading-anchor:link,a.heading-anchor:visited{text-decoration:none;color:inherit;} |
|
962 | a.heading-anchor:link,a.heading-anchor:visited{text-decoration:none;color:inherit;} | |
943 | div.raw_input{padding-top:0px;padding-bottom:0px;height:1em;line-height:1em;font-family:monospace;} |
|
963 | div.raw_input{padding-top:0px;padding-bottom:0px;height:1em;line-height:1em;font-family:monospace;} | |
944 | span.input_prompt{font-family:inherit;} |
|
964 | span.input_prompt{font-family:inherit;} | |
945 | input.raw_input{font-family:inherit;font-size:inherit;color:inherit;width:auto;margin:-2px 0px 0px 1px;padding-left:1px;padding-top:2px;height:1em;} |
|
965 | input.raw_input{font-family:inherit;font-size:inherit;color:inherit;width:auto;margin:-2px 0px 0px 1px;padding-left:1px;padding-top:2px;height:1em;} | |
946 | p.p-space{margin-bottom:10px;} |
|
966 | p.p-space{margin-bottom:10px;} | |
947 | .rendered_html{color:black;}.rendered_html em{font-style:italic;} |
|
967 | .rendered_html{color:black;}.rendered_html em{font-style:italic;} | |
948 | .rendered_html strong{font-weight:bold;} |
|
968 | .rendered_html strong{font-weight:bold;} | |
949 | .rendered_html u{text-decoration:underline;} |
|
969 | .rendered_html u{text-decoration:underline;} | |
950 | .rendered_html :link{text-decoration:underline;} |
|
970 | .rendered_html :link{text-decoration:underline;} | |
951 | .rendered_html :visited{text-decoration:underline;} |
|
971 | .rendered_html :visited{text-decoration:underline;} | |
952 | .rendered_html h1{font-size:197%;margin:.65em 0;font-weight:bold;} |
|
972 | .rendered_html h1{font-size:197%;margin:.65em 0;font-weight:bold;} | |
953 | .rendered_html h2{font-size:153.9%;margin:.75em 0;font-weight:bold;} |
|
973 | .rendered_html h2{font-size:153.9%;margin:.75em 0;font-weight:bold;} | |
954 | .rendered_html h3{font-size:123.1%;margin:.85em 0;font-weight:bold;} |
|
974 | .rendered_html h3{font-size:123.1%;margin:.85em 0;font-weight:bold;} | |
955 | .rendered_html h4{font-size:100%;margin:0.95em 0;font-weight:bold;} |
|
975 | .rendered_html h4{font-size:100%;margin:0.95em 0;font-weight:bold;} | |
956 | .rendered_html h5{font-size:85%;margin:1.5em 0;font-weight:bold;} |
|
976 | .rendered_html h5{font-size:85%;margin:1.5em 0;font-weight:bold;} | |
957 | .rendered_html h6{font-size:77%;margin:1.65em 0;font-weight:bold;} |
|
977 | .rendered_html h6{font-size:77%;margin:1.65em 0;font-weight:bold;} | |
958 | .rendered_html ul{list-style:disc;margin:1em 2em;} |
|
978 | .rendered_html ul{list-style:disc;margin:1em 2em;} | |
959 | .rendered_html ul ul{list-style:square;margin:0em 2em;} |
|
979 | .rendered_html ul ul{list-style:square;margin:0em 2em;} | |
960 | .rendered_html ul ul ul{list-style:circle;margin:0em 2em;} |
|
980 | .rendered_html ul ul ul{list-style:circle;margin:0em 2em;} | |
961 | .rendered_html ol{list-style:decimal;margin:1em 2em;} |
|
981 | .rendered_html ol{list-style:decimal;margin:1em 2em;} | |
962 | .rendered_html ol ol{list-style:upper-alpha;margin:0em 2em;} |
|
982 | .rendered_html ol ol{list-style:upper-alpha;margin:0em 2em;} | |
963 | .rendered_html ol ol ol{list-style:lower-alpha;margin:0em 2em;} |
|
983 | .rendered_html ol ol ol{list-style:lower-alpha;margin:0em 2em;} | |
964 | .rendered_html ol ol ol ol{list-style:lower-roman;margin:0em 2em;} |
|
984 | .rendered_html ol ol ol ol{list-style:lower-roman;margin:0em 2em;} | |
965 | .rendered_html ol ol ol ol ol{list-style:decimal;margin:0em 2em;} |
|
985 | .rendered_html ol ol ol ol ol{list-style:decimal;margin:0em 2em;} | |
966 | .rendered_html hr{color:black;background-color:black;} |
|
986 | .rendered_html hr{color:black;background-color:black;} | |
967 | .rendered_html pre{margin:1em 2em;} |
|
987 | .rendered_html pre{margin:1em 2em;} | |
968 | .rendered_html blockquote{margin:1em 2em;} |
|
988 | .rendered_html blockquote{margin:1em 2em;} | |
969 | .rendered_html table,.rendered_html tr,.rendered_html th,.rendered_html td{border:1px solid black;border-collapse:collapse;margin:1em 2em;} |
|
989 | .rendered_html table,.rendered_html tr,.rendered_html th,.rendered_html td{border:1px solid black;border-collapse:collapse;margin:1em 2em;} | |
970 | .rendered_html td,.rendered_html th{text-align:left;vertical-align:middle;padding:4px;} |
|
990 | .rendered_html td,.rendered_html th{text-align:left;vertical-align:middle;padding:4px;} | |
971 | .rendered_html th{font-weight:bold;} |
|
991 | .rendered_html th{font-weight:bold;} | |
972 | .rendered_html p{text-align:justify;} |
|
992 | .rendered_html p{text-align:justify;} | |
973 | .rendered_html p+p{margin-top:1em;} |
|
993 | .rendered_html p+p{margin-top:1em;} | |
974 | .corner-all{border-radius:4px;} |
|
994 | .corner-all{border-radius:4px;} | |
975 | @-moz-keyframes fadeOut{from{opacity:1;} to{opacity:0;}}@-webkit-keyframes fadeOut{from{opacity:1;} to{opacity:0;}}@-moz-keyframes fadeIn{from{opacity:0;} to{opacity:1;}}@-webkit-keyframes fadeIn{from{opacity:0;} to{opacity:1;}}.bigtooltip{overflow:auto;height:200px;-webkit-transition-property:height;-webkit-transition-duration:500ms;-moz-transition-property:height;-moz-transition-duration:500ms;transition-property:height;transition-duration:500ms;} |
|
995 | @-moz-keyframes fadeOut{from{opacity:1;} to{opacity:0;}}@-webkit-keyframes fadeOut{from{opacity:1;} to{opacity:0;}}@-moz-keyframes fadeIn{from{opacity:0;} to{opacity:1;}}@-webkit-keyframes fadeIn{from{opacity:0;} to{opacity:1;}}.bigtooltip{overflow:auto;height:200px;-webkit-transition-property:height;-webkit-transition-duration:500ms;-moz-transition-property:height;-moz-transition-duration:500ms;transition-property:height;transition-duration:500ms;} | |
976 | .smalltooltip{-webkit-transition-property:height;-webkit-transition-duration:500ms;-moz-transition-property:height;-moz-transition-duration:500ms;transition-property:height;transition-duration:500ms;text-overflow:ellipsis;overflow:hidden;height:80px;} |
|
996 | .smalltooltip{-webkit-transition-property:height;-webkit-transition-duration:500ms;-moz-transition-property:height;-moz-transition-duration:500ms;transition-property:height;transition-duration:500ms;text-overflow:ellipsis;overflow:hidden;height:80px;} | |
977 | .tooltipbuttons{position:absolute;padding-right:15px;top:0px;right:0px;} |
|
997 | .tooltipbuttons{position:absolute;padding-right:15px;top:0px;right:0px;} | |
978 | .tooltiptext{padding-right:30px;} |
|
998 | .tooltiptext{padding-right:30px;} | |
979 | .ipython_tooltip{max-width:700px;-webkit-animation:fadeOut 400ms;-moz-animation:fadeOut 400ms;animation:fadeOut 400ms;-webkit-animation:fadeIn 400ms;-moz-animation:fadeIn 400ms;animation:fadeIn 400ms;vertical-align:middle;background-color:#f7f7f7;overflow:visible;border:#ababab 1px solid;outline:none;padding:3px;margin:0px;padding-left:7px;font-family:monospace;min-height:50px;-moz-box-shadow:0px 6px 10px -1px #adadad;-webkit-box-shadow:0px 6px 10px -1px #adadad;box-shadow:0px 6px 10px -1px #adadad;border-radius:4px;position:absolute;z-index:2;}.ipython_tooltip a{float:right;} |
|
999 | .ipython_tooltip{max-width:700px;-webkit-animation:fadeOut 400ms;-moz-animation:fadeOut 400ms;animation:fadeOut 400ms;-webkit-animation:fadeIn 400ms;-moz-animation:fadeIn 400ms;animation:fadeIn 400ms;vertical-align:middle;background-color:#f7f7f7;overflow:visible;border:#ababab 1px solid;outline:none;padding:3px;margin:0px;padding-left:7px;font-family:monospace;min-height:50px;-moz-box-shadow:0px 6px 10px -1px #adadad;-webkit-box-shadow:0px 6px 10px -1px #adadad;box-shadow:0px 6px 10px -1px #adadad;border-radius:4px;position:absolute;z-index:2;}.ipython_tooltip a{float:right;} | |
980 | .pretooltiparrow{left:0px;margin:0px;top:-16px;width:40px;height:16px;overflow:hidden;position:absolute;} |
|
1000 | .pretooltiparrow{left:0px;margin:0px;top:-16px;width:40px;height:16px;overflow:hidden;position:absolute;} | |
981 | .pretooltiparrow:before{background-color:#f7f7f7;border:1px #ababab solid;z-index:11;content:"";position:absolute;left:15px;top:10px;width:25px;height:25px;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);} |
|
1001 | .pretooltiparrow:before{background-color:#f7f7f7;border:1px #ababab solid;z-index:11;content:"";position:absolute;left:15px;top:10px;width:25px;height:25px;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);} |
@@ -1,99 +1,115 b'' | |||||
1 | //---------------------------------------------------------------------------- |
|
1 | //---------------------------------------------------------------------------- | |
2 | // Copyright (C) 2011 The IPython Development Team |
|
2 | // Copyright (C) 2011 The IPython Development Team | |
3 | // |
|
3 | // | |
4 | // Distributed under the terms of the BSD License. The full license is in |
|
4 | // Distributed under the terms of the BSD License. The full license is in | |
5 | // the file COPYING, distributed as part of this software. |
|
5 | // the file COPYING, distributed as part of this software. | |
6 | //---------------------------------------------------------------------------- |
|
6 | //---------------------------------------------------------------------------- | |
7 |
|
7 | |||
8 | //============================================================================ |
|
8 | //============================================================================ | |
9 | // On document ready |
|
9 | // On document ready | |
10 | //============================================================================ |
|
10 | //============================================================================ | |
11 |
|
11 | |||
12 |
|
12 | |||
13 | $(document).ready(function () { |
|
13 | $(document).ready(function () { | |
14 |
|
14 | |||
15 | // monkey patch CM to be able to syntax highlight cell magics |
|
15 | // monkey patch CM to be able to syntax highlight cell magics | |
16 | // bug reported upstream, |
|
16 | // bug reported upstream, | |
17 | // see https://github.com/marijnh/CodeMirror2/issues/670 |
|
17 | // see https://github.com/marijnh/CodeMirror2/issues/670 | |
18 | if(CodeMirror.getMode(1,'text/plain').indent == undefined ){ |
|
18 | if(CodeMirror.getMode(1,'text/plain').indent == undefined ){ | |
19 | console.log('patching CM for undefined indent'); |
|
19 | console.log('patching CM for undefined indent'); | |
20 | CodeMirror.modes.null = function() { return {token: function(stream) {stream.skipToEnd();},indent : function(){return 0}}} |
|
20 | CodeMirror.modes.null = function() { return {token: function(stream) {stream.skipToEnd();},indent : function(){return 0}}} | |
21 | } |
|
21 | } | |
22 |
|
22 | |||
23 | CodeMirror.patchedGetMode = function(config, mode){ |
|
23 | CodeMirror.patchedGetMode = function(config, mode){ | |
24 | var cmmode = CodeMirror.getMode(config, mode); |
|
24 | var cmmode = CodeMirror.getMode(config, mode); | |
25 | if(cmmode.indent == null) |
|
25 | if(cmmode.indent == null) | |
26 | { |
|
26 | { | |
27 | console.log('patch mode "' , mode, '" on the fly'); |
|
27 | console.log('patch mode "' , mode, '" on the fly'); | |
28 | cmmode.indent = function(){return 0}; |
|
28 | cmmode.indent = function(){return 0}; | |
29 | } |
|
29 | } | |
30 | return cmmode; |
|
30 | return cmmode; | |
31 | } |
|
31 | } | |
32 | // end monkey patching CodeMirror |
|
32 | // end monkey patching CodeMirror | |
33 |
|
33 | |||
34 | IPython.mathjaxutils.init(); |
|
34 | IPython.mathjaxutils.init(); | |
35 |
|
35 | |||
36 | IPython.read_only = $('body').data('readOnly') === 'True'; |
|
36 | IPython.read_only = $('body').data('readOnly') === 'True'; | |
37 | $('#ipython-main-app').addClass('border-box-sizing'); |
|
37 | $('#ipython-main-app').addClass('border-box-sizing'); | |
38 | $('div#notebook_panel').addClass('border-box-sizing'); |
|
38 | $('div#notebook_panel').addClass('border-box-sizing'); | |
39 | // The header's bottom border is provided by the menu bar so we remove it. |
|
39 | // The header's bottom border is provided by the menu bar so we remove it. | |
40 | $('div#header').css('border-bottom-style','none'); |
|
40 | $('div#header').css('border-bottom-style','none'); | |
41 |
|
41 | |||
42 | var baseProjectUrl = $('body').data('baseProjectUrl') |
|
42 | var baseProjectUrl = $('body').data('baseProjectUrl') | |
43 |
|
43 | |||
44 | IPython.page = new IPython.Page(); |
|
44 | IPython.page = new IPython.Page(); | |
45 | IPython.markdown_converter = new Markdown.Converter(); |
|
|||
46 | IPython.layout_manager = new IPython.LayoutManager(); |
|
45 | IPython.layout_manager = new IPython.LayoutManager(); | |
47 | IPython.pager = new IPython.Pager('div#pager', 'div#pager_splitter'); |
|
46 | IPython.pager = new IPython.Pager('div#pager', 'div#pager_splitter'); | |
48 | IPython.quick_help = new IPython.QuickHelp('span#quick_help_area'); |
|
47 | IPython.quick_help = new IPython.QuickHelp('span#quick_help_area'); | |
49 | IPython.login_widget = new IPython.LoginWidget('span#login_widget',{baseProjectUrl:baseProjectUrl}); |
|
48 | IPython.login_widget = new IPython.LoginWidget('span#login_widget',{baseProjectUrl:baseProjectUrl}); | |
50 | IPython.notebook = new IPython.Notebook('div#notebook',{baseProjectUrl:baseProjectUrl, read_only:IPython.read_only}); |
|
49 | IPython.notebook = new IPython.Notebook('div#notebook',{baseProjectUrl:baseProjectUrl, read_only:IPython.read_only}); | |
51 | IPython.save_widget = new IPython.SaveWidget('span#save_widget'); |
|
50 | IPython.save_widget = new IPython.SaveWidget('span#save_widget'); | |
52 | IPython.menubar = new IPython.MenuBar('#menubar',{baseProjectUrl:baseProjectUrl}) |
|
51 | IPython.menubar = new IPython.MenuBar('#menubar',{baseProjectUrl:baseProjectUrl}) | |
53 | IPython.toolbar = new IPython.MainToolBar('#maintoolbar') |
|
52 | IPython.toolbar = new IPython.MainToolBar('#maintoolbar') | |
54 | IPython.tooltip = new IPython.Tooltip() |
|
53 | IPython.tooltip = new IPython.Tooltip() | |
55 | IPython.notification_area = new IPython.NotificationArea('#notification_area') |
|
54 | IPython.notification_area = new IPython.NotificationArea('#notification_area') | |
56 | IPython.notification_area.init_notification_widgets(); |
|
55 | IPython.notification_area.init_notification_widgets(); | |
57 |
|
56 | |||
58 | IPython.layout_manager.do_resize(); |
|
57 | IPython.layout_manager.do_resize(); | |
59 |
|
58 | |||
60 | $('body').append('<div id="fonttest"><pre><span id="test1">x</span>'+ |
|
59 | $('body').append('<div id="fonttest"><pre><span id="test1">x</span>'+ | |
61 | '<span id="test2" style="font-weight: bold;">x</span>'+ |
|
60 | '<span id="test2" style="font-weight: bold;">x</span>'+ | |
62 | '<span id="test3" style="font-style: italic;">x</span></pre></div>') |
|
61 | '<span id="test3" style="font-style: italic;">x</span></pre></div>') | |
63 | var nh = $('#test1').innerHeight(); |
|
62 | var nh = $('#test1').innerHeight(); | |
64 | var bh = $('#test2').innerHeight(); |
|
63 | var bh = $('#test2').innerHeight(); | |
65 | var ih = $('#test3').innerHeight(); |
|
64 | var ih = $('#test3').innerHeight(); | |
66 | if(nh != bh || nh != ih) { |
|
65 | if(nh != bh || nh != ih) { | |
67 | $('head').append('<style>.CodeMirror span { vertical-align: bottom; }</style>'); |
|
66 | $('head').append('<style>.CodeMirror span { vertical-align: bottom; }</style>'); | |
68 | } |
|
67 | } | |
69 | $('#fonttest').remove(); |
|
68 | $('#fonttest').remove(); | |
70 |
|
69 | |||
71 | if(IPython.read_only){ |
|
70 | if(IPython.read_only){ | |
72 | // hide various elements from read-only view |
|
71 | // hide various elements from read-only view | |
73 | $('div#pager').remove(); |
|
72 | $('div#pager').remove(); | |
74 | $('div#pager_splitter').remove(); |
|
73 | $('div#pager_splitter').remove(); | |
75 |
|
74 | |||
76 | // set the notebook name field as not modifiable |
|
75 | // set the notebook name field as not modifiable | |
77 | $('#notebook_name').attr('disabled','disabled') |
|
76 | $('#notebook_name').attr('disabled','disabled') | |
78 | } |
|
77 | } | |
79 |
|
78 | |||
80 | IPython.page.show(); |
|
79 | IPython.page.show(); | |
81 |
|
80 | |||
82 | IPython.layout_manager.do_resize(); |
|
81 | IPython.layout_manager.do_resize(); | |
83 | var first_load = function () { |
|
82 | var first_load = function () { | |
84 | IPython.layout_manager.do_resize(); |
|
83 | IPython.layout_manager.do_resize(); | |
85 | var hash = document.location.hash; |
|
84 | var hash = document.location.hash; | |
86 | if (hash) { |
|
85 | if (hash) { | |
87 | document.location.hash = ''; |
|
86 | document.location.hash = ''; | |
88 | document.location.hash = hash; |
|
87 | document.location.hash = hash; | |
89 | } |
|
88 | } | |
90 | IPython.notebook.set_autosave_interval(IPython.notebook.minimum_autosave_interval); |
|
89 | IPython.notebook.set_autosave_interval(IPython.notebook.minimum_autosave_interval); | |
91 | // only do this once |
|
90 | // only do this once | |
92 | $([IPython.events]).off('notebook_loaded.Notebook', first_load); |
|
91 | $([IPython.events]).off('notebook_loaded.Notebook', first_load); | |
93 | }; |
|
92 | }; | |
94 |
|
93 | |||
95 | $([IPython.events]).on('notebook_loaded.Notebook', first_load); |
|
94 | $([IPython.events]).on('notebook_loaded.Notebook', first_load); | |
96 | IPython.notebook.load_notebook($('body').data('notebookId')); |
|
95 | IPython.notebook.load_notebook($('body').data('notebookId')); | |
|
96 | ||||
|
97 | if (marked) { | |||
|
98 | marked.setOptions({ | |||
|
99 | gfm : true, | |||
|
100 | tables: true, | |||
|
101 | langPrefix: "language-", | |||
|
102 | highlight: function(code, lang) { | |||
|
103 | var highlighted; | |||
|
104 | try { | |||
|
105 | highlighted = hljs.highlight(lang, code, false); | |||
|
106 | } catch(err) { | |||
|
107 | highlighted = hljs.highlightAuto(code); | |||
|
108 | } | |||
|
109 | return highlighted.value; | |||
|
110 | } | |||
|
111 | }) | |||
|
112 | } | |||
97 |
|
113 | |||
98 | }); |
|
114 | }); | |
99 |
|
115 |
@@ -1,161 +1,162 b'' | |||||
1 | //---------------------------------------------------------------------------- |
|
1 | //---------------------------------------------------------------------------- | |
2 | // Copyright (C) 2008-2011 The IPython Development Team |
|
2 | // Copyright (C) 2008-2011 The IPython Development Team | |
3 | // |
|
3 | // | |
4 | // Distributed under the terms of the BSD License. The full license is in |
|
4 | // Distributed under the terms of the BSD License. The full license is in | |
5 | // the file COPYING, distributed as part of this software. |
|
5 | // the file COPYING, distributed as part of this software. | |
6 | //---------------------------------------------------------------------------- |
|
6 | //---------------------------------------------------------------------------- | |
7 |
|
7 | |||
8 | //============================================================================ |
|
8 | //============================================================================ | |
9 | // SaveWidget |
|
9 | // SaveWidget | |
10 | //============================================================================ |
|
10 | //============================================================================ | |
11 |
|
11 | |||
12 | var IPython = (function (IPython) { |
|
12 | var IPython = (function (IPython) { | |
13 |
|
13 | |||
14 | var utils = IPython.utils; |
|
14 | var utils = IPython.utils; | |
15 |
|
15 | |||
16 | var SaveWidget = function (selector) { |
|
16 | var SaveWidget = function (selector) { | |
17 | this.selector = selector; |
|
17 | this.selector = selector; | |
18 | if (this.selector !== undefined) { |
|
18 | if (this.selector !== undefined) { | |
19 | this.element = $(selector); |
|
19 | this.element = $(selector); | |
20 | this.style(); |
|
20 | this.style(); | |
21 | this.bind_events(); |
|
21 | this.bind_events(); | |
22 | } |
|
22 | } | |
23 | }; |
|
23 | }; | |
24 |
|
24 | |||
25 |
|
25 | |||
26 | SaveWidget.prototype.style = function () { |
|
26 | SaveWidget.prototype.style = function () { | |
27 | this.element.find('span#save_widget').addClass('ui-widget'); |
|
27 | this.element.find('span#save_widget').addClass('ui-widget'); | |
28 | this.element.find('span#notebook_name').addClass('ui-widget'); |
|
28 | this.element.find('span#notebook_name').addClass('ui-widget'); | |
29 | this.element.find('span#autosave_status').addClass('ui-widget') |
|
29 | this.element.find('span#autosave_status').addClass('ui-widget') | |
30 | .css({border: 'none'}); |
|
30 | .css({border: 'none'}); | |
31 | this.element.find('span#checkpoint_status').addClass('ui-widget') |
|
31 | this.element.find('span#checkpoint_status').addClass('ui-widget') | |
32 | .css({border: 'none', 'margin-left': '20px'}); |
|
32 | .css({border: 'none', 'margin-left': '20px'}); | |
33 | }; |
|
33 | }; | |
34 |
|
34 | |||
35 |
|
35 | |||
36 | SaveWidget.prototype.bind_events = function () { |
|
36 | SaveWidget.prototype.bind_events = function () { | |
37 | var that = this; |
|
37 | var that = this; | |
38 | this.element.find('span#notebook_name').click(function () { |
|
38 | this.element.find('span#notebook_name').click(function () { | |
39 | that.rename_notebook(); |
|
39 | that.rename_notebook(); | |
40 | }); |
|
40 | }); | |
41 | this.element.find('span#notebook_name').hover(function () { |
|
41 | this.element.find('span#notebook_name').hover(function () { | |
42 | $(this).addClass("ui-state-hover"); |
|
42 | $(this).addClass("ui-state-hover"); | |
43 | }, function () { |
|
43 | }, function () { | |
44 | $(this).removeClass("ui-state-hover"); |
|
44 | $(this).removeClass("ui-state-hover"); | |
45 | }); |
|
45 | }); | |
46 | $([IPython.events]).on('notebook_loaded.Notebook', function () { |
|
46 | $([IPython.events]).on('notebook_loaded.Notebook', function () { | |
47 | that.set_last_saved(); |
|
47 | that.set_last_saved(); | |
48 | that.update_notebook_name(); |
|
48 | that.update_notebook_name(); | |
49 | that.update_document_title(); |
|
49 | that.update_document_title(); | |
50 | }); |
|
50 | }); | |
51 | $([IPython.events]).on('notebook_saved.Notebook', function () { |
|
51 | $([IPython.events]).on('notebook_saved.Notebook', function () { | |
52 | that.set_last_saved(); |
|
52 | that.set_last_saved(); | |
53 | that.update_notebook_name(); |
|
53 | that.update_notebook_name(); | |
54 | that.update_document_title(); |
|
54 | that.update_document_title(); | |
55 | }); |
|
55 | }); | |
56 | $([IPython.events]).on('notebook_save_failed.Notebook', function () { |
|
56 | $([IPython.events]).on('notebook_save_failed.Notebook', function () { | |
57 | that.set_save_status('Last Save Failed!'); |
|
57 | that.set_save_status('Last Save Failed!'); | |
58 | }); |
|
58 | }); | |
59 | $([IPython.events]).on('checkpoints_listed.Notebook', function (event, data) { |
|
59 | $([IPython.events]).on('checkpoints_listed.Notebook', function (event, data) { | |
60 | that.set_last_checkpoint(data[0]); |
|
60 | that.set_last_checkpoint(data[0]); | |
61 | }); |
|
61 | }); | |
62 |
|
62 | |||
63 | $([IPython.events]).on('checkpoint_created.Notebook', function (event, data) { |
|
63 | $([IPython.events]).on('checkpoint_created.Notebook', function (event, data) { | |
64 | that.set_last_checkpoint(data); |
|
64 | that.set_last_checkpoint(data); | |
65 | }); |
|
65 | }); | |
66 | }; |
|
66 | }; | |
67 |
|
67 | |||
68 |
|
68 | |||
69 | SaveWidget.prototype.rename_notebook = function () { |
|
69 | SaveWidget.prototype.rename_notebook = function () { | |
70 | var that = this; |
|
70 | var that = this; | |
71 | var dialog = $('<div/>'); |
|
71 | var dialog = $('<div/>'); | |
72 | dialog.append( |
|
72 | dialog.append( | |
73 | $('<p/>').html('Enter a new notebook name:') |
|
73 | $('<p/>').html('Enter a new notebook name:') | |
74 | .css({'margin-bottom': '10px'}) |
|
74 | .css({'margin-bottom': '10px'}) | |
75 | ); |
|
75 | ); | |
76 | dialog.append( |
|
76 | dialog.append( | |
77 | $('<input/>').attr('type','text').attr('size','25') |
|
77 | $('<input/>').attr('type','text').attr('size','25') | |
78 | .addClass('ui-widget ui-widget-content') |
|
78 | .addClass('ui-widget ui-widget-content') | |
79 | .attr('value',IPython.notebook.get_notebook_name()) |
|
79 | .attr('value',IPython.notebook.get_notebook_name()) | |
80 | ); |
|
80 | ); | |
81 | // $(document).append(dialog); |
|
81 | // $(document).append(dialog); | |
82 | dialog.dialog({ |
|
82 | dialog.dialog({ | |
83 | resizable: false, |
|
83 | resizable: false, | |
84 | modal: true, |
|
84 | modal: true, | |
85 | title: "Rename Notebook", |
|
85 | title: "Rename Notebook", | |
86 | closeText: "", |
|
86 | closeText: "", | |
87 | close: function(event, ui) {$(this).dialog('destroy').remove();}, |
|
87 | close: function(event, ui) {$(this).dialog('destroy').remove();}, | |
88 | buttons : { |
|
88 | buttons : { | |
89 | "OK": function () { |
|
89 | "OK": function () { | |
90 | var new_name = $(this).find('input').attr('value'); |
|
90 | var new_name = $(this).find('input').attr('value'); | |
91 | if (!IPython.notebook.test_notebook_name(new_name)) { |
|
91 | if (!IPython.notebook.test_notebook_name(new_name)) { | |
92 | $(this).find('h3').html( |
|
92 | $(this).find('h3').html( | |
93 | "Invalid notebook name. Notebook names must "+ |
|
93 | "Invalid notebook name. Notebook names must "+ | |
94 | "have 1 or more characters and can contain any characters " + |
|
94 | "have 1 or more characters and can contain any characters " + | |
95 | "except :/\\. Please enter a new notebook name:" |
|
95 | "except :/\\. Please enter a new notebook name:" | |
96 | ); |
|
96 | ); | |
97 | } else { |
|
97 | } else { | |
98 | IPython.notebook.set_notebook_name(new_name); |
|
98 | IPython.notebook.set_notebook_name(new_name); | |
99 | IPython.notebook.save_notebook(); |
|
99 | IPython.notebook.save_notebook(); | |
100 | $(this).dialog('close'); |
|
100 | $(this).dialog('close'); | |
101 | } |
|
101 | } | |
102 | }, |
|
102 | }, | |
103 | "Cancel": function () { |
|
103 | "Cancel": function () { | |
104 | $(this).dialog('close'); |
|
104 | $(this).dialog('close'); | |
105 | } |
|
105 | } | |
106 | }, |
|
106 | }, | |
107 | open : function (event, ui) { |
|
107 | open : function (event, ui) { | |
108 | var that = $(this); |
|
108 | var that = $(this); | |
109 | // Upon ENTER, click the OK button. |
|
109 | // Upon ENTER, click the OK button. | |
110 | that.find('input[type="text"]').keydown(function (event, ui) { |
|
110 | that.find('input[type="text"]').keydown(function (event, ui) { | |
111 | if (event.which === utils.keycodes.ENTER) { |
|
111 | if (event.which === utils.keycodes.ENTER) { | |
112 | that.parent().find('button').first().click(); |
|
112 | that.parent().find('button').first().click(); | |
113 | } |
|
113 | } | |
114 | }); |
|
114 | }); | |
115 | } |
|
115 | } | |
116 | }); |
|
116 | }); | |
117 | } |
|
117 | } | |
118 |
|
118 | |||
119 |
|
119 | |||
120 | SaveWidget.prototype.update_notebook_name = function () { |
|
120 | SaveWidget.prototype.update_notebook_name = function () { | |
121 | var nbname = IPython.notebook.get_notebook_name(); |
|
121 | var nbname = IPython.notebook.get_notebook_name(); | |
122 | this.element.find('span#notebook_name').html(nbname); |
|
122 | this.element.find('span#notebook_name').html(nbname); | |
123 | }; |
|
123 | }; | |
124 |
|
124 | |||
125 |
|
125 | |||
126 | SaveWidget.prototype.update_document_title = function () { |
|
126 | SaveWidget.prototype.update_document_title = function () { | |
127 | var nbname = IPython.notebook.get_notebook_name(); |
|
127 | var nbname = IPython.notebook.get_notebook_name(); | |
128 | document.title = nbname; |
|
128 | document.title = nbname; | |
129 | }; |
|
129 | }; | |
130 |
|
130 | |||
131 |
|
131 | |||
132 | SaveWidget.prototype.set_save_status = function (msg) { |
|
132 | SaveWidget.prototype.set_save_status = function (msg) { | |
133 | this.element.find('span#autosave_status').html(msg); |
|
133 | this.element.find('span#autosave_status').html(msg); | |
134 | } |
|
134 | } | |
135 |
|
135 | |||
136 | SaveWidget.prototype.set_checkpoint_status = function (msg) { |
|
136 | SaveWidget.prototype.set_checkpoint_status = function (msg) { | |
137 | this.element.find('span#checkpoint_status').html(msg); |
|
137 | this.element.find('span#checkpoint_status').html(msg); | |
138 | } |
|
138 | } | |
139 |
|
139 | |||
140 | SaveWidget.prototype.set_last_checkpoint = function (checkpoint) { |
|
140 | SaveWidget.prototype.set_last_checkpoint = function (checkpoint) { | |
141 | if (!checkpoint) { |
|
141 | if (!checkpoint) { | |
142 | this.set_checkpoint_status(""); |
|
142 | this.set_checkpoint_status(""); | |
|
143 | return; | |||
143 | } |
|
144 | } | |
144 | var d = new Date(checkpoint.last_modified); |
|
145 | var d = new Date(checkpoint.last_modified); | |
145 | this.set_checkpoint_status( |
|
146 | this.set_checkpoint_status( | |
146 | "Last Checkpoint: " + d.format('mmm dd HH:MM') |
|
147 | "Last Checkpoint: " + d.format('mmm dd HH:MM') | |
147 | ); |
|
148 | ); | |
148 | } |
|
149 | } | |
149 |
|
150 | |||
150 | SaveWidget.prototype.set_last_saved = function () { |
|
151 | SaveWidget.prototype.set_last_saved = function () { | |
151 | var d = new Date(); |
|
152 | var d = new Date(); | |
152 | this.set_save_status('(autosaved: '+d.format('mmm dd HH:MM') + ')'); |
|
153 | this.set_save_status('(autosaved: '+d.format('mmm dd HH:MM') + ')'); | |
153 | }; |
|
154 | }; | |
154 |
|
155 | |||
155 |
|
156 | |||
156 | IPython.SaveWidget = SaveWidget; |
|
157 | IPython.SaveWidget = SaveWidget; | |
157 |
|
158 | |||
158 | return IPython; |
|
159 | return IPython; | |
159 |
|
160 | |||
160 | }(IPython)); |
|
161 | }(IPython)); | |
161 |
|
162 |
@@ -1,558 +1,546 b'' | |||||
1 | //---------------------------------------------------------------------------- |
|
1 | //---------------------------------------------------------------------------- | |
2 | // Copyright (C) 2008-2012 The IPython Development Team |
|
2 | // Copyright (C) 2008-2012 The IPython Development Team | |
3 | // |
|
3 | // | |
4 | // Distributed under the terms of the BSD License. The full license is in |
|
4 | // Distributed under the terms of the BSD License. The full license is in | |
5 | // the file COPYING, distributed as part of this software. |
|
5 | // the file COPYING, distributed as part of this software. | |
6 | //---------------------------------------------------------------------------- |
|
6 | //---------------------------------------------------------------------------- | |
7 |
|
7 | |||
8 | //============================================================================ |
|
8 | //============================================================================ | |
9 | // TextCell |
|
9 | // TextCell | |
10 | //============================================================================ |
|
10 | //============================================================================ | |
11 |
|
11 | |||
12 |
|
12 | |||
13 |
|
13 | |||
14 | /** |
|
14 | /** | |
15 | A module that allow to create different type of Text Cell |
|
15 | A module that allow to create different type of Text Cell | |
16 | @module IPython |
|
16 | @module IPython | |
17 | @namespace IPython |
|
17 | @namespace IPython | |
18 | */ |
|
18 | */ | |
19 | var IPython = (function (IPython) { |
|
19 | var IPython = (function (IPython) { | |
20 |
|
20 | |||
21 | // TextCell base class |
|
21 | // TextCell base class | |
22 | var key = IPython.utils.keycodes; |
|
22 | var key = IPython.utils.keycodes; | |
23 |
|
23 | |||
24 | /** |
|
24 | /** | |
25 | * Construct a new TextCell, codemirror mode is by default 'htmlmixed', and cell type is 'text' |
|
25 | * Construct a new TextCell, codemirror mode is by default 'htmlmixed', and cell type is 'text' | |
26 | * cell start as not redered. |
|
26 | * cell start as not redered. | |
27 | * |
|
27 | * | |
28 | * @class TextCell |
|
28 | * @class TextCell | |
29 | * @constructor TextCell |
|
29 | * @constructor TextCell | |
30 | * @extend Ipython.Cell |
|
30 | * @extend Ipython.Cell | |
31 | * @param {object|undefined} [options] |
|
31 | * @param {object|undefined} [options] | |
32 | * @param [options.cm_config] {object} config to pass to CodeMirror, will extend/overwrite default config |
|
32 | * @param [options.cm_config] {object} config to pass to CodeMirror, will extend/overwrite default config | |
33 | * @param [options.placeholder] {string} default string to use when souce in empty for rendering (only use in some TextCell subclass) |
|
33 | * @param [options.placeholder] {string} default string to use when souce in empty for rendering (only use in some TextCell subclass) | |
34 | */ |
|
34 | */ | |
35 | var TextCell = function (options) { |
|
35 | var TextCell = function (options) { | |
36 | // in all TextCell/Cell subclasses |
|
36 | // in all TextCell/Cell subclasses | |
37 | // do not assign most of members here, just pass it down |
|
37 | // do not assign most of members here, just pass it down | |
38 | // in the options dict potentially overwriting what you wish. |
|
38 | // in the options dict potentially overwriting what you wish. | |
39 | // they will be assigned in the base class. |
|
39 | // they will be assigned in the base class. | |
40 |
|
40 | |||
41 | // we cannot put this as a class key as it has handle to "this". |
|
41 | // we cannot put this as a class key as it has handle to "this". | |
42 | var cm_overwrite_options = { |
|
42 | var cm_overwrite_options = { | |
43 | onKeyEvent: $.proxy(this.handle_codemirror_keyevent,this) |
|
43 | onKeyEvent: $.proxy(this.handle_codemirror_keyevent,this) | |
44 | }; |
|
44 | }; | |
45 |
|
45 | |||
46 | options = this.mergeopt(TextCell,options,{cm_config:cm_overwrite_options}); |
|
46 | options = this.mergeopt(TextCell,options,{cm_config:cm_overwrite_options}); | |
47 |
|
47 | |||
48 | IPython.Cell.apply(this, [options]); |
|
48 | IPython.Cell.apply(this, [options]); | |
49 |
|
49 | |||
50 |
|
50 | |||
51 | this.rendered = false; |
|
51 | this.rendered = false; | |
52 | this.cell_type = this.cell_type || 'text'; |
|
52 | this.cell_type = this.cell_type || 'text'; | |
53 | }; |
|
53 | }; | |
54 |
|
54 | |||
55 | TextCell.prototype = new IPython.Cell(); |
|
55 | TextCell.prototype = new IPython.Cell(); | |
56 |
|
56 | |||
57 | TextCell.options_default = { |
|
57 | TextCell.options_default = { | |
58 | cm_config : { |
|
58 | cm_config : { | |
59 | extraKeys: {"Tab": "indentMore","Shift-Tab" : "indentLess"}, |
|
59 | extraKeys: {"Tab": "indentMore","Shift-Tab" : "indentLess"}, | |
60 | mode: 'htmlmixed', |
|
60 | mode: 'htmlmixed', | |
61 | lineWrapping : true, |
|
61 | lineWrapping : true, | |
62 | } |
|
62 | } | |
63 | }; |
|
63 | }; | |
64 |
|
64 | |||
65 |
|
65 | |||
66 |
|
66 | |||
67 | /** |
|
67 | /** | |
68 | * Create the DOM element of the TextCell |
|
68 | * Create the DOM element of the TextCell | |
69 | * @method create_element |
|
69 | * @method create_element | |
70 | * @private |
|
70 | * @private | |
71 | */ |
|
71 | */ | |
72 | TextCell.prototype.create_element = function () { |
|
72 | TextCell.prototype.create_element = function () { | |
73 | IPython.Cell.prototype.create_element.apply(this, arguments); |
|
73 | IPython.Cell.prototype.create_element.apply(this, arguments); | |
74 | var cell = $("<div>").addClass('cell text_cell border-box-sizing'); |
|
74 | var cell = $("<div>").addClass('cell text_cell border-box-sizing'); | |
75 | cell.attr('tabindex','2'); |
|
75 | cell.attr('tabindex','2'); | |
76 |
|
76 | |||
77 | this.celltoolbar = new IPython.CellToolbar(this); |
|
77 | this.celltoolbar = new IPython.CellToolbar(this); | |
78 | cell.append(this.celltoolbar.element); |
|
78 | cell.append(this.celltoolbar.element); | |
79 |
|
79 | |||
80 | var input_area = $('<div/>').addClass('text_cell_input border-box-sizing'); |
|
80 | var input_area = $('<div/>').addClass('text_cell_input border-box-sizing'); | |
81 | this.code_mirror = CodeMirror(input_area.get(0), this.cm_config); |
|
81 | this.code_mirror = CodeMirror(input_area.get(0), this.cm_config); | |
82 |
|
82 | |||
83 | // The tabindex=-1 makes this div focusable. |
|
83 | // The tabindex=-1 makes this div focusable. | |
84 | var render_area = $('<div/>').addClass('text_cell_render border-box-sizing'). |
|
84 | var render_area = $('<div/>').addClass('text_cell_render border-box-sizing'). | |
85 | addClass('rendered_html').attr('tabindex','-1'); |
|
85 | addClass('rendered_html').attr('tabindex','-1'); | |
86 | cell.append(input_area).append(render_area); |
|
86 | cell.append(input_area).append(render_area); | |
87 | this.element = cell; |
|
87 | this.element = cell; | |
88 | }; |
|
88 | }; | |
89 |
|
89 | |||
90 |
|
90 | |||
91 | /** |
|
91 | /** | |
92 | * Bind the DOM evet to cell actions |
|
92 | * Bind the DOM evet to cell actions | |
93 | * Need to be called after TextCell.create_element |
|
93 | * Need to be called after TextCell.create_element | |
94 | * @private |
|
94 | * @private | |
95 | * @method bind_event |
|
95 | * @method bind_event | |
96 | */ |
|
96 | */ | |
97 | TextCell.prototype.bind_events = function () { |
|
97 | TextCell.prototype.bind_events = function () { | |
98 | IPython.Cell.prototype.bind_events.apply(this); |
|
98 | IPython.Cell.prototype.bind_events.apply(this); | |
99 | var that = this; |
|
99 | var that = this; | |
100 | this.element.keydown(function (event) { |
|
100 | this.element.keydown(function (event) { | |
101 | if (event.which === 13 && !event.shiftKey) { |
|
101 | if (event.which === 13 && !event.shiftKey) { | |
102 | if (that.rendered) { |
|
102 | if (that.rendered) { | |
103 | that.edit(); |
|
103 | that.edit(); | |
104 | return false; |
|
104 | return false; | |
105 | }; |
|
105 | }; | |
106 | }; |
|
106 | }; | |
107 | }); |
|
107 | }); | |
108 | this.element.dblclick(function () { |
|
108 | this.element.dblclick(function () { | |
109 | that.edit(); |
|
109 | that.edit(); | |
110 | }); |
|
110 | }); | |
111 | }; |
|
111 | }; | |
112 |
|
112 | |||
113 | /** |
|
113 | /** | |
114 | * This method gets called in CodeMirror's onKeyDown/onKeyPress |
|
114 | * This method gets called in CodeMirror's onKeyDown/onKeyPress | |
115 | * handlers and is used to provide custom key handling. |
|
115 | * handlers and is used to provide custom key handling. | |
116 | * |
|
116 | * | |
117 | * Subclass should override this method to have custom handeling |
|
117 | * Subclass should override this method to have custom handeling | |
118 | * |
|
118 | * | |
119 | * @method handle_codemirror_keyevent |
|
119 | * @method handle_codemirror_keyevent | |
120 | * @param {CodeMirror} editor - The codemirror instance bound to the cell |
|
120 | * @param {CodeMirror} editor - The codemirror instance bound to the cell | |
121 | * @param {event} event - |
|
121 | * @param {event} event - | |
122 | * @return {Boolean} `true` if CodeMirror should ignore the event, `false` Otherwise |
|
122 | * @return {Boolean} `true` if CodeMirror should ignore the event, `false` Otherwise | |
123 | */ |
|
123 | */ | |
124 | TextCell.prototype.handle_codemirror_keyevent = function (editor, event) { |
|
124 | TextCell.prototype.handle_codemirror_keyevent = function (editor, event) { | |
125 |
|
125 | |||
126 | if (event.keyCode === 13 && (event.shiftKey || event.ctrlKey)) { |
|
126 | if (event.keyCode === 13 && (event.shiftKey || event.ctrlKey)) { | |
127 | // Always ignore shift-enter in CodeMirror as we handle it. |
|
127 | // Always ignore shift-enter in CodeMirror as we handle it. | |
128 | return true; |
|
128 | return true; | |
129 | } |
|
129 | } | |
130 | return false; |
|
130 | return false; | |
131 | }; |
|
131 | }; | |
132 |
|
132 | |||
133 | /** |
|
133 | /** | |
134 | * Select the current cell and trigger 'focus' |
|
134 | * Select the current cell and trigger 'focus' | |
135 | * @method select |
|
135 | * @method select | |
136 | */ |
|
136 | */ | |
137 | TextCell.prototype.select = function () { |
|
137 | TextCell.prototype.select = function () { | |
138 | IPython.Cell.prototype.select.apply(this); |
|
138 | IPython.Cell.prototype.select.apply(this); | |
139 | var output = this.element.find("div.text_cell_render"); |
|
139 | var output = this.element.find("div.text_cell_render"); | |
140 | output.trigger('focus'); |
|
140 | output.trigger('focus'); | |
141 | }; |
|
141 | }; | |
142 |
|
142 | |||
143 | /** |
|
143 | /** | |
144 | * unselect the current cell and `render` it |
|
144 | * unselect the current cell and `render` it | |
145 | * @method unselect |
|
145 | * @method unselect | |
146 | */ |
|
146 | */ | |
147 | TextCell.prototype.unselect = function() { |
|
147 | TextCell.prototype.unselect = function() { | |
148 | // render on selection of another cell |
|
148 | // render on selection of another cell | |
149 | this.render(); |
|
149 | this.render(); | |
150 | IPython.Cell.prototype.unselect.apply(this); |
|
150 | IPython.Cell.prototype.unselect.apply(this); | |
151 | }; |
|
151 | }; | |
152 |
|
152 | |||
153 | /** |
|
153 | /** | |
154 | * |
|
154 | * | |
155 | * put the current cell in edition mode |
|
155 | * put the current cell in edition mode | |
156 | * @method edit |
|
156 | * @method edit | |
157 | */ |
|
157 | */ | |
158 | TextCell.prototype.edit = function () { |
|
158 | TextCell.prototype.edit = function () { | |
159 | if ( this.read_only ) return; |
|
159 | if ( this.read_only ) return; | |
160 | if (this.rendered === true) { |
|
160 | if (this.rendered === true) { | |
161 | var text_cell = this.element; |
|
161 | var text_cell = this.element; | |
162 | var output = text_cell.find("div.text_cell_render"); |
|
162 | var output = text_cell.find("div.text_cell_render"); | |
163 | output.hide(); |
|
163 | output.hide(); | |
164 | text_cell.find('div.text_cell_input').show(); |
|
164 | text_cell.find('div.text_cell_input').show(); | |
165 | this.code_mirror.refresh(); |
|
165 | this.code_mirror.refresh(); | |
166 | this.code_mirror.focus(); |
|
166 | this.code_mirror.focus(); | |
167 | // We used to need an additional refresh() after the focus, but |
|
167 | // We used to need an additional refresh() after the focus, but | |
168 | // it appears that this has been fixed in CM. This bug would show |
|
168 | // it appears that this has been fixed in CM. This bug would show | |
169 | // up on FF when a newly loaded markdown cell was edited. |
|
169 | // up on FF when a newly loaded markdown cell was edited. | |
170 | this.rendered = false; |
|
170 | this.rendered = false; | |
171 | if (this.get_text() === this.placeholder) { |
|
171 | if (this.get_text() === this.placeholder) { | |
172 | this.set_text(''); |
|
172 | this.set_text(''); | |
173 | this.refresh(); |
|
173 | this.refresh(); | |
174 | } |
|
174 | } | |
175 | } |
|
175 | } | |
176 | }; |
|
176 | }; | |
177 |
|
177 | |||
178 |
|
178 | |||
179 | /** |
|
179 | /** | |
180 | * Empty, Subclasses must define render. |
|
180 | * Empty, Subclasses must define render. | |
181 | * @method render |
|
181 | * @method render | |
182 | */ |
|
182 | */ | |
183 | TextCell.prototype.render = function () {}; |
|
183 | TextCell.prototype.render = function () {}; | |
184 |
|
184 | |||
185 |
|
185 | |||
186 | /** |
|
186 | /** | |
187 | * setter: {{#crossLink "TextCell/set_text"}}{{/crossLink}} |
|
187 | * setter: {{#crossLink "TextCell/set_text"}}{{/crossLink}} | |
188 | * @method get_text |
|
188 | * @method get_text | |
189 | * @retrun {string} CodeMirror current text value |
|
189 | * @retrun {string} CodeMirror current text value | |
190 | */ |
|
190 | */ | |
191 | TextCell.prototype.get_text = function() { |
|
191 | TextCell.prototype.get_text = function() { | |
192 | return this.code_mirror.getValue(); |
|
192 | return this.code_mirror.getValue(); | |
193 | }; |
|
193 | }; | |
194 |
|
194 | |||
195 | /** |
|
195 | /** | |
196 | * @param {string} text - Codemiror text value |
|
196 | * @param {string} text - Codemiror text value | |
197 | * @see TextCell#get_text |
|
197 | * @see TextCell#get_text | |
198 | * @method set_text |
|
198 | * @method set_text | |
199 | * */ |
|
199 | * */ | |
200 | TextCell.prototype.set_text = function(text) { |
|
200 | TextCell.prototype.set_text = function(text) { | |
201 | this.code_mirror.setValue(text); |
|
201 | this.code_mirror.setValue(text); | |
202 | this.code_mirror.refresh(); |
|
202 | this.code_mirror.refresh(); | |
203 | }; |
|
203 | }; | |
204 |
|
204 | |||
205 | /** |
|
205 | /** | |
206 | * setter :{{#crossLink "TextCell/set_rendered"}}{{/crossLink}} |
|
206 | * setter :{{#crossLink "TextCell/set_rendered"}}{{/crossLink}} | |
207 | * @method get_rendered |
|
207 | * @method get_rendered | |
208 | * @return {html} html of rendered element |
|
208 | * @return {html} html of rendered element | |
209 | * */ |
|
209 | * */ | |
210 | TextCell.prototype.get_rendered = function() { |
|
210 | TextCell.prototype.get_rendered = function() { | |
211 | return this.element.find('div.text_cell_render').html(); |
|
211 | return this.element.find('div.text_cell_render').html(); | |
212 | }; |
|
212 | }; | |
213 |
|
213 | |||
214 | /** |
|
214 | /** | |
215 | * @method set_rendered |
|
215 | * @method set_rendered | |
216 | */ |
|
216 | */ | |
217 | TextCell.prototype.set_rendered = function(text) { |
|
217 | TextCell.prototype.set_rendered = function(text) { | |
218 | this.element.find('div.text_cell_render').html(text); |
|
218 | this.element.find('div.text_cell_render').html(text); | |
219 | }; |
|
219 | }; | |
220 |
|
220 | |||
221 | /** |
|
221 | /** | |
222 | * not deprecated, but implementation wrong |
|
222 | * not deprecated, but implementation wrong | |
223 | * @method at_top |
|
223 | * @method at_top | |
224 | * @deprecated |
|
224 | * @deprecated | |
225 | * @return {Boolean} true is cell rendered, false otherwise |
|
225 | * @return {Boolean} true is cell rendered, false otherwise | |
226 | * I doubt this is what it is supposed to do |
|
226 | * I doubt this is what it is supposed to do | |
227 | * this implementation is completly false |
|
227 | * this implementation is completly false | |
228 | */ |
|
228 | */ | |
229 | TextCell.prototype.at_top = function () { |
|
229 | TextCell.prototype.at_top = function () { | |
230 | if (this.rendered) { |
|
230 | if (this.rendered) { | |
231 | return true; |
|
231 | return true; | |
232 | } else { |
|
232 | } else { | |
233 | return false; |
|
233 | return false; | |
234 | } |
|
234 | } | |
235 | }; |
|
235 | }; | |
236 |
|
236 | |||
237 |
|
237 | |||
238 | /** |
|
238 | /** | |
239 | * not deprecated, but implementation wrong |
|
239 | * not deprecated, but implementation wrong | |
240 | * @method at_bottom |
|
240 | * @method at_bottom | |
241 | * @deprecated |
|
241 | * @deprecated | |
242 | * @return {Boolean} true is cell rendered, false otherwise |
|
242 | * @return {Boolean} true is cell rendered, false otherwise | |
243 | * I doubt this is what it is supposed to do |
|
243 | * I doubt this is what it is supposed to do | |
244 | * this implementation is completly false |
|
244 | * this implementation is completly false | |
245 | * */ |
|
245 | * */ | |
246 | TextCell.prototype.at_bottom = function () { |
|
246 | TextCell.prototype.at_bottom = function () { | |
247 | if (this.rendered) { |
|
247 | if (this.rendered) { | |
248 | return true; |
|
248 | return true; | |
249 | } else { |
|
249 | } else { | |
250 | return false; |
|
250 | return false; | |
251 | } |
|
251 | } | |
252 | }; |
|
252 | }; | |
253 |
|
253 | |||
254 | /** |
|
254 | /** | |
255 | * Create Text cell from JSON |
|
255 | * Create Text cell from JSON | |
256 | * @param {json} data - JSON serialized text-cell |
|
256 | * @param {json} data - JSON serialized text-cell | |
257 | * @method fromJSON |
|
257 | * @method fromJSON | |
258 | */ |
|
258 | */ | |
259 | TextCell.prototype.fromJSON = function (data) { |
|
259 | TextCell.prototype.fromJSON = function (data) { | |
260 | IPython.Cell.prototype.fromJSON.apply(this, arguments); |
|
260 | IPython.Cell.prototype.fromJSON.apply(this, arguments); | |
261 | if (data.cell_type === this.cell_type) { |
|
261 | if (data.cell_type === this.cell_type) { | |
262 | if (data.source !== undefined) { |
|
262 | if (data.source !== undefined) { | |
263 | this.set_text(data.source); |
|
263 | this.set_text(data.source); | |
264 | // make this value the starting point, so that we can only undo |
|
264 | // make this value the starting point, so that we can only undo | |
265 | // to this state, instead of a blank cell |
|
265 | // to this state, instead of a blank cell | |
266 | this.code_mirror.clearHistory(); |
|
266 | this.code_mirror.clearHistory(); | |
267 | this.set_rendered(data.rendered || ''); |
|
267 | this.set_rendered(data.rendered || ''); | |
268 | this.rendered = false; |
|
268 | this.rendered = false; | |
269 | this.render(); |
|
269 | this.render(); | |
270 | } |
|
270 | } | |
271 | } |
|
271 | } | |
272 | }; |
|
272 | }; | |
273 |
|
273 | |||
274 | /** Generate JSON from cell |
|
274 | /** Generate JSON from cell | |
275 | * @return {object} cell data serialised to json |
|
275 | * @return {object} cell data serialised to json | |
276 | */ |
|
276 | */ | |
277 | TextCell.prototype.toJSON = function () { |
|
277 | TextCell.prototype.toJSON = function () { | |
278 | var data = IPython.Cell.prototype.toJSON.apply(this); |
|
278 | var data = IPython.Cell.prototype.toJSON.apply(this); | |
279 | data.cell_type = this.cell_type; |
|
279 | data.cell_type = this.cell_type; | |
280 | data.source = this.get_text(); |
|
280 | data.source = this.get_text(); | |
281 | return data; |
|
281 | return data; | |
282 | }; |
|
282 | }; | |
283 |
|
283 | |||
284 |
|
284 | |||
285 | /** |
|
285 | /** | |
286 | * @class MarkdownCell |
|
286 | * @class MarkdownCell | |
287 | * @constructor MarkdownCell |
|
287 | * @constructor MarkdownCell | |
288 | * @extends Ipython.HtmlCell |
|
288 | * @extends Ipython.HtmlCell | |
289 | */ |
|
289 | */ | |
290 | var MarkdownCell = function (options) { |
|
290 | var MarkdownCell = function (options) { | |
291 | var options = options || {}; |
|
291 | var options = options || {}; | |
292 |
|
292 | |||
293 | options = this.mergeopt(MarkdownCell,options); |
|
293 | options = this.mergeopt(MarkdownCell,options); | |
294 | TextCell.apply(this, [options]); |
|
294 | TextCell.apply(this, [options]); | |
295 |
|
295 | |||
296 | this.cell_type = 'markdown'; |
|
296 | this.cell_type = 'markdown'; | |
297 | }; |
|
297 | }; | |
298 |
|
298 | |||
299 | MarkdownCell.options_default = { |
|
299 | MarkdownCell.options_default = { | |
300 | cm_config: { |
|
300 | cm_config: { | |
301 |
mode: 'm |
|
301 | mode: 'gfm' | |
302 | }, |
|
302 | }, | |
303 | placeholder: "Type *Markdown* and LaTeX: $\\alpha^2$" |
|
303 | placeholder: "Type *Markdown* and LaTeX: $\\alpha^2$" | |
304 | } |
|
304 | } | |
305 |
|
305 | |||
306 |
|
306 | |||
307 |
|
307 | |||
308 |
|
308 | |||
309 | MarkdownCell.prototype = new TextCell(); |
|
309 | MarkdownCell.prototype = new TextCell(); | |
310 |
|
310 | |||
311 | /** |
|
311 | /** | |
312 | * @method render |
|
312 | * @method render | |
313 | */ |
|
313 | */ | |
314 | MarkdownCell.prototype.render = function () { |
|
314 | MarkdownCell.prototype.render = function () { | |
315 | if (this.rendered === false) { |
|
315 | if (this.rendered === false) { | |
316 | var text = this.get_text(); |
|
316 | var text = this.get_text(); | |
317 | if (text === "") { text = this.placeholder; } |
|
317 | if (text === "") { text = this.placeholder; } | |
318 | text = IPython.mathjaxutils.remove_math(text) |
|
318 | text = IPython.mathjaxutils.remove_math(text); | |
319 |
var html = |
|
319 | var html = marked.parser(marked.lexer(text)); | |
320 | html = IPython.mathjaxutils.replace_math(html) |
|
320 | html = IPython.mathjaxutils.replace_math(html); | |
321 | try { |
|
321 | try { | |
322 | this.set_rendered(html); |
|
322 | this.set_rendered(html); | |
323 | } catch (e) { |
|
323 | } catch (e) { | |
324 | console.log("Error running Javascript in Markdown:"); |
|
324 | console.log("Error running Javascript in Markdown:"); | |
325 | console.log(e); |
|
325 | console.log(e); | |
326 | this.set_rendered($("<div/>").addClass("js-error").html( |
|
326 | this.set_rendered($("<div/>").addClass("js-error").html( | |
327 | "Error rendering Markdown!<br/>" + e.toString()) |
|
327 | "Error rendering Markdown!<br/>" + e.toString()) | |
328 | ); |
|
328 | ); | |
329 | } |
|
329 | } | |
330 | this.element.find('div.text_cell_input').hide(); |
|
330 | this.element.find('div.text_cell_input').hide(); | |
331 | this.element.find("div.text_cell_render").show(); |
|
331 | this.element.find("div.text_cell_render").show(); | |
332 | var code_snippets = this.element.find("pre > code"); |
|
|||
333 | code_snippets.replaceWith(function () { |
|
|||
334 | var code = $(this).html(); |
|
|||
335 | /* Substitute br for newlines and for spaces |
|
|||
336 | before highlighting, since prettify doesn't |
|
|||
337 | preserve those on all browsers */ |
|
|||
338 | code = code.replace(/(\r\n|\n|\r)/gm, "<br/>"); |
|
|||
339 | code = code.replace(/ /gm, ' '); |
|
|||
340 | code = prettyPrintOne(code); |
|
|||
341 |
|
||||
342 | return '<code class="prettyprint">' + code + '</code>'; |
|
|||
343 | }); |
|
|||
344 | this.typeset() |
|
332 | this.typeset() | |
345 | this.rendered = true; |
|
333 | this.rendered = true; | |
346 | } |
|
334 | } | |
347 | }; |
|
335 | }; | |
348 |
|
336 | |||
349 |
|
337 | |||
350 | // RawCell |
|
338 | // RawCell | |
351 |
|
339 | |||
352 | /** |
|
340 | /** | |
353 | * @class RawCell |
|
341 | * @class RawCell | |
354 | * @constructor RawCell |
|
342 | * @constructor RawCell | |
355 | * @extends Ipython.TextCell |
|
343 | * @extends Ipython.TextCell | |
356 | */ |
|
344 | */ | |
357 | var RawCell = function (options) { |
|
345 | var RawCell = function (options) { | |
358 |
|
346 | |||
359 | options = this.mergeopt(RawCell,options) |
|
347 | options = this.mergeopt(RawCell,options) | |
360 | TextCell.apply(this, [options]); |
|
348 | TextCell.apply(this, [options]); | |
361 |
|
349 | |||
362 | this.cell_type = 'raw'; |
|
350 | this.cell_type = 'raw'; | |
363 |
|
351 | |||
364 | var that = this |
|
352 | var that = this | |
365 | this.element.focusout( |
|
353 | this.element.focusout( | |
366 | function() { that.auto_highlight(); } |
|
354 | function() { that.auto_highlight(); } | |
367 | ); |
|
355 | ); | |
368 | }; |
|
356 | }; | |
369 |
|
357 | |||
370 | RawCell.options_default = { |
|
358 | RawCell.options_default = { | |
371 | placeholder : "Type plain text and LaTeX: $\\alpha^2$" |
|
359 | placeholder : "Type plain text and LaTeX: $\\alpha^2$" | |
372 | }; |
|
360 | }; | |
373 |
|
361 | |||
374 |
|
362 | |||
375 |
|
363 | |||
376 | RawCell.prototype = new TextCell(); |
|
364 | RawCell.prototype = new TextCell(); | |
377 |
|
365 | |||
378 | /** |
|
366 | /** | |
379 | * Trigger autodetection of highlight scheme for current cell |
|
367 | * Trigger autodetection of highlight scheme for current cell | |
380 | * @method auto_highlight |
|
368 | * @method auto_highlight | |
381 | */ |
|
369 | */ | |
382 | RawCell.prototype.auto_highlight = function () { |
|
370 | RawCell.prototype.auto_highlight = function () { | |
383 | this._auto_highlight(IPython.config.raw_cell_highlight); |
|
371 | this._auto_highlight(IPython.config.raw_cell_highlight); | |
384 | }; |
|
372 | }; | |
385 |
|
373 | |||
386 | /** @method render **/ |
|
374 | /** @method render **/ | |
387 | RawCell.prototype.render = function () { |
|
375 | RawCell.prototype.render = function () { | |
388 | this.rendered = true; |
|
376 | this.rendered = true; | |
389 | this.edit(); |
|
377 | this.edit(); | |
390 | }; |
|
378 | }; | |
391 |
|
379 | |||
392 |
|
380 | |||
393 | /** @method handle_codemirror_keyevent **/ |
|
381 | /** @method handle_codemirror_keyevent **/ | |
394 | RawCell.prototype.handle_codemirror_keyevent = function (editor, event) { |
|
382 | RawCell.prototype.handle_codemirror_keyevent = function (editor, event) { | |
395 |
|
383 | |||
396 | var that = this; |
|
384 | var that = this; | |
397 | if (event.which === key.UPARROW && event.type === 'keydown') { |
|
385 | if (event.which === key.UPARROW && event.type === 'keydown') { | |
398 | // If we are not at the top, let CM handle the up arrow and |
|
386 | // If we are not at the top, let CM handle the up arrow and | |
399 | // prevent the global keydown handler from handling it. |
|
387 | // prevent the global keydown handler from handling it. | |
400 | if (!that.at_top()) { |
|
388 | if (!that.at_top()) { | |
401 | event.stop(); |
|
389 | event.stop(); | |
402 | return false; |
|
390 | return false; | |
403 | } else { |
|
391 | } else { | |
404 | return true; |
|
392 | return true; | |
405 | }; |
|
393 | }; | |
406 | } else if (event.which === key.DOWNARROW && event.type === 'keydown') { |
|
394 | } else if (event.which === key.DOWNARROW && event.type === 'keydown') { | |
407 | // If we are not at the bottom, let CM handle the down arrow and |
|
395 | // If we are not at the bottom, let CM handle the down arrow and | |
408 | // prevent the global keydown handler from handling it. |
|
396 | // prevent the global keydown handler from handling it. | |
409 | if (!that.at_bottom()) { |
|
397 | if (!that.at_bottom()) { | |
410 | event.stop(); |
|
398 | event.stop(); | |
411 | return false; |
|
399 | return false; | |
412 | } else { |
|
400 | } else { | |
413 | return true; |
|
401 | return true; | |
414 | }; |
|
402 | }; | |
415 | }; |
|
403 | }; | |
416 | return false; |
|
404 | return false; | |
417 | }; |
|
405 | }; | |
418 |
|
406 | |||
419 | /** @method select **/ |
|
407 | /** @method select **/ | |
420 | RawCell.prototype.select = function () { |
|
408 | RawCell.prototype.select = function () { | |
421 | IPython.Cell.prototype.select.apply(this); |
|
409 | IPython.Cell.prototype.select.apply(this); | |
422 | this.code_mirror.refresh(); |
|
410 | this.code_mirror.refresh(); | |
423 | this.code_mirror.focus(); |
|
411 | this.code_mirror.focus(); | |
424 | }; |
|
412 | }; | |
425 |
|
413 | |||
426 | /** @method at_top **/ |
|
414 | /** @method at_top **/ | |
427 | RawCell.prototype.at_top = function () { |
|
415 | RawCell.prototype.at_top = function () { | |
428 | var cursor = this.code_mirror.getCursor(); |
|
416 | var cursor = this.code_mirror.getCursor(); | |
429 | if (cursor.line === 0 && cursor.ch === 0) { |
|
417 | if (cursor.line === 0 && cursor.ch === 0) { | |
430 | return true; |
|
418 | return true; | |
431 | } else { |
|
419 | } else { | |
432 | return false; |
|
420 | return false; | |
433 | } |
|
421 | } | |
434 | }; |
|
422 | }; | |
435 |
|
423 | |||
436 |
|
424 | |||
437 | /** @method at_bottom **/ |
|
425 | /** @method at_bottom **/ | |
438 | RawCell.prototype.at_bottom = function () { |
|
426 | RawCell.prototype.at_bottom = function () { | |
439 | var cursor = this.code_mirror.getCursor(); |
|
427 | var cursor = this.code_mirror.getCursor(); | |
440 | if (cursor.line === (this.code_mirror.lineCount()-1) && cursor.ch === this.code_mirror.getLine(cursor.line).length) { |
|
428 | if (cursor.line === (this.code_mirror.lineCount()-1) && cursor.ch === this.code_mirror.getLine(cursor.line).length) { | |
441 | return true; |
|
429 | return true; | |
442 | } else { |
|
430 | } else { | |
443 | return false; |
|
431 | return false; | |
444 | } |
|
432 | } | |
445 | }; |
|
433 | }; | |
446 |
|
434 | |||
447 |
|
435 | |||
448 | /** |
|
436 | /** | |
449 | * @class HeadingCell |
|
437 | * @class HeadingCell | |
450 | * @extends Ipython.TextCell |
|
438 | * @extends Ipython.TextCell | |
451 | */ |
|
439 | */ | |
452 |
|
440 | |||
453 | /** |
|
441 | /** | |
454 | * @constructor HeadingCell |
|
442 | * @constructor HeadingCell | |
455 | * @extends Ipython.TextCell |
|
443 | * @extends Ipython.TextCell | |
456 | */ |
|
444 | */ | |
457 | var HeadingCell = function (options) { |
|
445 | var HeadingCell = function (options) { | |
458 |
|
446 | |||
459 | options = this.mergeopt(HeadingCell,options) |
|
447 | options = this.mergeopt(HeadingCell,options) | |
460 | TextCell.apply(this, [options]); |
|
448 | TextCell.apply(this, [options]); | |
461 |
|
449 | |||
462 | /** |
|
450 | /** | |
463 | * heading level of the cell, use getter and setter to access |
|
451 | * heading level of the cell, use getter and setter to access | |
464 | * @property level |
|
452 | * @property level | |
465 | */ |
|
453 | */ | |
466 | this.level = 1; |
|
454 | this.level = 1; | |
467 | this.cell_type = 'heading'; |
|
455 | this.cell_type = 'heading'; | |
468 | }; |
|
456 | }; | |
469 |
|
457 | |||
470 | HeadingCell.options_default = { |
|
458 | HeadingCell.options_default = { | |
471 | placeholder: "Type Heading Here" |
|
459 | placeholder: "Type Heading Here" | |
472 | }; |
|
460 | }; | |
473 |
|
461 | |||
474 | HeadingCell.prototype = new TextCell(); |
|
462 | HeadingCell.prototype = new TextCell(); | |
475 |
|
463 | |||
476 | /** @method fromJSON */ |
|
464 | /** @method fromJSON */ | |
477 | HeadingCell.prototype.fromJSON = function (data) { |
|
465 | HeadingCell.prototype.fromJSON = function (data) { | |
478 | if (data.level != undefined){ |
|
466 | if (data.level != undefined){ | |
479 | this.level = data.level; |
|
467 | this.level = data.level; | |
480 | } |
|
468 | } | |
481 | TextCell.prototype.fromJSON.apply(this, arguments); |
|
469 | TextCell.prototype.fromJSON.apply(this, arguments); | |
482 | }; |
|
470 | }; | |
483 |
|
471 | |||
484 |
|
472 | |||
485 | /** @method toJSON */ |
|
473 | /** @method toJSON */ | |
486 | HeadingCell.prototype.toJSON = function () { |
|
474 | HeadingCell.prototype.toJSON = function () { | |
487 | var data = TextCell.prototype.toJSON.apply(this); |
|
475 | var data = TextCell.prototype.toJSON.apply(this); | |
488 | data.level = this.get_level(); |
|
476 | data.level = this.get_level(); | |
489 | return data; |
|
477 | return data; | |
490 | }; |
|
478 | }; | |
491 |
|
479 | |||
492 |
|
480 | |||
493 | /** |
|
481 | /** | |
494 | * Change heading level of cell, and re-render |
|
482 | * Change heading level of cell, and re-render | |
495 | * @method set_level |
|
483 | * @method set_level | |
496 | */ |
|
484 | */ | |
497 | HeadingCell.prototype.set_level = function (level) { |
|
485 | HeadingCell.prototype.set_level = function (level) { | |
498 | this.level = level; |
|
486 | this.level = level; | |
499 | if (this.rendered) { |
|
487 | if (this.rendered) { | |
500 | this.rendered = false; |
|
488 | this.rendered = false; | |
501 | this.render(); |
|
489 | this.render(); | |
502 | }; |
|
490 | }; | |
503 | }; |
|
491 | }; | |
504 |
|
492 | |||
505 | /** The depth of header cell, based on html (h1 to h6) |
|
493 | /** The depth of header cell, based on html (h1 to h6) | |
506 | * @method get_level |
|
494 | * @method get_level | |
507 | * @return {integer} level - for 1 to 6 |
|
495 | * @return {integer} level - for 1 to 6 | |
508 | */ |
|
496 | */ | |
509 | HeadingCell.prototype.get_level = function () { |
|
497 | HeadingCell.prototype.get_level = function () { | |
510 | return this.level; |
|
498 | return this.level; | |
511 | }; |
|
499 | }; | |
512 |
|
500 | |||
513 |
|
501 | |||
514 | HeadingCell.prototype.set_rendered = function (text) { |
|
502 | HeadingCell.prototype.set_rendered = function (text) { | |
515 | var r = this.element.find("div.text_cell_render"); |
|
503 | var r = this.element.find("div.text_cell_render"); | |
516 | r.empty(); |
|
504 | r.empty(); | |
517 | var link = text.replace(/ /g, '_'); |
|
505 | var link = text.replace(/ /g, '_'); | |
518 | r.append( |
|
506 | r.append( | |
519 | $('<h'+this.level+'/>') |
|
507 | $('<h'+this.level+'/>') | |
520 | .append( |
|
508 | .append( | |
521 | $('<a/>') |
|
509 | $('<a/>') | |
522 | .addClass('heading-anchor') |
|
510 | .addClass('heading-anchor') | |
523 | .attr('href', '#' + link) |
|
511 | .attr('href', '#' + link) | |
524 | .attr('id', link) |
|
512 | .attr('id', link) | |
525 | .html(text) |
|
513 | .html(text) | |
526 | ) |
|
514 | ) | |
527 | ); |
|
515 | ); | |
528 | }; |
|
516 | }; | |
529 |
|
517 | |||
530 |
|
518 | |||
531 | HeadingCell.prototype.get_rendered = function () { |
|
519 | HeadingCell.prototype.get_rendered = function () { | |
532 | var r = this.element.find("div.text_cell_render"); |
|
520 | var r = this.element.find("div.text_cell_render"); | |
533 | return r.children().first().html(); |
|
521 | return r.children().first().html(); | |
534 | }; |
|
522 | }; | |
535 |
|
523 | |||
536 |
|
524 | |||
537 | HeadingCell.prototype.render = function () { |
|
525 | HeadingCell.prototype.render = function () { | |
538 | if (this.rendered === false) { |
|
526 | if (this.rendered === false) { | |
539 | var text = this.get_text(); |
|
527 | var text = this.get_text(); | |
540 | if (text === "") { text = this.placeholder; } |
|
528 | if (text === "") { text = this.placeholder; } | |
541 | this.set_rendered(text); |
|
529 | this.set_rendered(text); | |
542 | this.typeset(); |
|
530 | this.typeset(); | |
543 | this.element.find('div.text_cell_input').hide(); |
|
531 | this.element.find('div.text_cell_input').hide(); | |
544 | this.element.find("div.text_cell_render").show(); |
|
532 | this.element.find("div.text_cell_render").show(); | |
545 | this.rendered = true; |
|
533 | this.rendered = true; | |
546 | }; |
|
534 | }; | |
547 | }; |
|
535 | }; | |
548 |
|
536 | |||
549 | IPython.TextCell = TextCell; |
|
537 | IPython.TextCell = TextCell; | |
550 | IPython.MarkdownCell = MarkdownCell; |
|
538 | IPython.MarkdownCell = MarkdownCell; | |
551 | IPython.RawCell = RawCell; |
|
539 | IPython.RawCell = RawCell; | |
552 | IPython.HeadingCell = HeadingCell; |
|
540 | IPython.HeadingCell = HeadingCell; | |
553 |
|
541 | |||
554 |
|
542 | |||
555 | return IPython; |
|
543 | return IPython; | |
556 |
|
544 | |||
557 | }(IPython)); |
|
545 | }(IPython)); | |
558 |
|
546 |
@@ -1,513 +1,513 b'' | |||||
1 | /** |
|
1 | /** | |
2 | * Primary styles |
|
2 | * Primary styles | |
3 | * |
|
3 | * | |
4 | * Author: IPython Development Team |
|
4 | * Author: IPython Development Team | |
5 | */ |
|
5 | */ | |
6 |
|
6 | |||
7 | @import "variables.less"; |
|
7 | @import "variables.less"; | |
8 |
|
8 | @import "highlight.less"; | ||
9 |
|
9 | |||
10 | body { |
|
10 | body { | |
11 | background-color:@notebook_background; |
|
11 | background-color:@notebook_background; | |
12 | } |
|
12 | } | |
13 |
|
13 | |||
14 | body.notebook_app { |
|
14 | body.notebook_app { | |
15 | overflow: hidden; |
|
15 | overflow: hidden; | |
16 | } |
|
16 | } | |
17 |
|
17 | |||
18 | blockquote { |
|
18 | blockquote { | |
19 | border-left: 4px solid #DDD; |
|
19 | border-left: 4px solid #DDD; | |
20 | padding: 0 15px; |
|
20 | padding: 0 15px; | |
21 | color: #777; |
|
21 | color: #777; | |
22 | } |
|
22 | } | |
23 |
|
23 | |||
24 | span#save_widget { |
|
24 | span#save_widget { | |
25 | padding: 5px; |
|
25 | padding: 5px; | |
26 | margin: 0px 0px 0px 300px; |
|
26 | margin: 0px 0px 0px 300px; | |
27 | display:inline-block; |
|
27 | display:inline-block; | |
28 | } |
|
28 | } | |
29 |
|
29 | |||
30 | span#checkpoint_status span#autosave_status { |
|
30 | span#checkpoint_status span#autosave_status { | |
31 | font-size: small; |
|
31 | font-size: small; | |
32 | } |
|
32 | } | |
33 |
|
33 | |||
34 | /*span#save_widget > span#autosave_status { |
|
34 | /*span#save_widget > span#autosave_status { | |
35 | font-size: x-small; |
|
35 | font-size: x-small; | |
36 | } |
|
36 | } | |
37 | */ |
|
37 | */ | |
38 | span#notebook_name { |
|
38 | span#notebook_name { | |
39 | height: 1em; |
|
39 | height: 1em; | |
40 | line-height: 1em; |
|
40 | line-height: 1em; | |
41 | padding: 3px; |
|
41 | padding: 3px; | |
42 | border: none; |
|
42 | border: none; | |
43 | font-size: 146.5%; |
|
43 | font-size: 146.5%; | |
44 | } |
|
44 | } | |
45 |
|
45 | |||
46 |
|
46 | |||
47 | .ui-menubar-item .ui-button .ui-button-text { |
|
47 | .ui-menubar-item .ui-button .ui-button-text { | |
48 | padding: 0.4em 1.0em; |
|
48 | padding: 0.4em 1.0em; | |
49 | font-size: 100%; |
|
49 | font-size: 100%; | |
50 | } |
|
50 | } | |
51 |
|
51 | |||
52 | .ui-menu { |
|
52 | .ui-menu { | |
53 | .box-shadow(0px 6px 10px -1px #adadad); |
|
53 | .box-shadow(0px 6px 10px -1px #adadad); | |
54 | } |
|
54 | } | |
55 |
|
55 | |||
56 | .ui-menu .ui-menu-item a { |
|
56 | .ui-menu .ui-menu-item a { | |
57 | border: 1px solid transparent; |
|
57 | border: 1px solid transparent; | |
58 | padding: 2px 1.6em; |
|
58 | padding: 2px 1.6em; | |
59 | } |
|
59 | } | |
60 |
|
60 | |||
61 | .ui-menu .ui-menu-item a.ui-state-focus { |
|
61 | .ui-menu .ui-menu-item a.ui-state-focus { | |
62 | margin: 0; |
|
62 | margin: 0; | |
63 | } |
|
63 | } | |
64 |
|
64 | |||
65 | .ui-menu hr { |
|
65 | .ui-menu hr { | |
66 | margin: 0.3em 0; |
|
66 | margin: 0.3em 0; | |
67 | } |
|
67 | } | |
68 |
|
68 | |||
69 | #menubar_container { |
|
69 | #menubar_container { | |
70 | position: relative; |
|
70 | position: relative; | |
71 | } |
|
71 | } | |
72 |
|
72 | |||
73 | #notification_area { |
|
73 | #notification_area { | |
74 | position: absolute; |
|
74 | position: absolute; | |
75 | right: 0px; |
|
75 | right: 0px; | |
76 | top: 0px; |
|
76 | top: 0px; | |
77 | height: 25px; |
|
77 | height: 25px; | |
78 | padding: 3px 0px; |
|
78 | padding: 3px 0px; | |
79 | padding-right: 3px; |
|
79 | padding-right: 3px; | |
80 | z-index: 10; |
|
80 | z-index: 10; | |
81 | } |
|
81 | } | |
82 |
|
82 | |||
83 | .notification_widget{ |
|
83 | .notification_widget{ | |
84 | float : right; |
|
84 | float : right; | |
85 | right: 0px; |
|
85 | right: 0px; | |
86 | top: 1px; |
|
86 | top: 1px; | |
87 | height: 25px; |
|
87 | height: 25px; | |
88 | padding: 3px 6px; |
|
88 | padding: 3px 6px; | |
89 | z-index: 10; |
|
89 | z-index: 10; | |
90 | } |
|
90 | } | |
91 |
|
91 | |||
92 | .toolbar { |
|
92 | .toolbar { | |
93 | padding: 3px 15px; |
|
93 | padding: 3px 15px; | |
94 | border-bottom: @borderwidth @border_color solid; |
|
94 | border-bottom: @borderwidth @border_color solid; | |
95 |
|
95 | |||
96 | button { |
|
96 | button { | |
97 | margin-top:2px; |
|
97 | margin-top:2px; | |
98 | margin-bottom:2px; |
|
98 | margin-bottom:2px; | |
99 | } |
|
99 | } | |
100 |
|
100 | |||
101 |
|
101 | |||
102 | select, label { |
|
102 | select, label { | |
103 | height : 19px; |
|
103 | height : 19px; | |
104 | vertical-align:middle; |
|
104 | vertical-align:middle; | |
105 | margin-right:2px; |
|
105 | margin-right:2px; | |
106 | margin-bottom:0; |
|
106 | margin-bottom:0; | |
107 | display: inline; |
|
107 | display: inline; | |
108 | font-size: 92%; |
|
108 | font-size: 92%; | |
109 | margin-left:0.3em; |
|
109 | margin-left:0.3em; | |
110 | margin-right:0.3em; |
|
110 | margin-right:0.3em; | |
111 | padding: 0px; |
|
111 | padding: 0px; | |
112 | } |
|
112 | } | |
113 | } |
|
113 | } | |
114 |
|
114 | |||
115 | .toolbar select{ |
|
115 | .toolbar select{ | |
116 | width:auto; |
|
116 | width:auto; | |
117 | } |
|
117 | } | |
118 |
|
118 | |||
119 |
|
119 | |||
120 | #ipython-main-app { |
|
120 | #ipython-main-app { | |
121 | width: 100%; |
|
121 | width: 100%; | |
122 | position: relative; |
|
122 | position: relative; | |
123 | font-size: 110%; |
|
123 | font-size: 110%; | |
124 | } |
|
124 | } | |
125 |
|
125 | |||
126 | span#quick_help_area { |
|
126 | span#quick_help_area { | |
127 | position: static; |
|
127 | position: static; | |
128 | padding: 5px 0px; |
|
128 | padding: 5px 0px; | |
129 | margin: 0px 0px 0px 0px; |
|
129 | margin: 0px 0px 0px 0px; | |
130 | } |
|
130 | } | |
131 |
|
131 | |||
132 | .help_string { |
|
132 | .help_string { | |
133 | float: right; |
|
133 | float: right; | |
134 | width: 170px; |
|
134 | width: 170px; | |
135 | padding: 0px 5px; |
|
135 | padding: 0px 5px; | |
136 | text-align: left; |
|
136 | text-align: left; | |
137 | font-size: 85%; |
|
137 | font-size: 85%; | |
138 | } |
|
138 | } | |
139 |
|
139 | |||
140 | .help_string_label { |
|
140 | .help_string_label { | |
141 | float: right; |
|
141 | float: right; | |
142 | font-size: 85%; |
|
142 | font-size: 85%; | |
143 | } |
|
143 | } | |
144 |
|
144 | |||
145 | div#notebook_panel { |
|
145 | div#notebook_panel { | |
146 | margin: 0px 0px 0px 0px; |
|
146 | margin: 0px 0px 0px 0px; | |
147 | padding: 0px; |
|
147 | padding: 0px; | |
148 | } |
|
148 | } | |
149 |
|
149 | |||
150 | div#notebook { |
|
150 | div#notebook { | |
151 | overflow-y: scroll; |
|
151 | overflow-y: scroll; | |
152 | overflow-x: auto; |
|
152 | overflow-x: auto; | |
153 | width: 100%; |
|
153 | width: 100%; | |
154 | /* This spaces the cell away from the edge of the notebook area */ |
|
154 | /* This spaces the cell away from the edge of the notebook area */ | |
155 | padding: 5px 5px 15px 5px; |
|
155 | padding: 5px 5px 15px 5px; | |
156 | margin: 0px; |
|
156 | margin: 0px; | |
157 | } |
|
157 | } | |
158 |
|
158 | |||
159 | div#pager_splitter { |
|
159 | div#pager_splitter { | |
160 | height: 8px; |
|
160 | height: 8px; | |
161 | } |
|
161 | } | |
162 |
|
162 | |||
163 | #pager_container { |
|
163 | #pager_container { | |
164 | position : relative; |
|
164 | position : relative; | |
165 | } |
|
165 | } | |
166 |
|
166 | |||
167 | div#pager { |
|
167 | div#pager { | |
168 | padding: 15px; |
|
168 | padding: 15px; | |
169 | overflow: auto; |
|
169 | overflow: auto; | |
170 | display: none; |
|
170 | display: none; | |
171 | } |
|
171 | } | |
172 |
|
172 | |||
173 | div.ui-widget-content { |
|
173 | div.ui-widget-content { | |
174 | border: 1px solid @border_color; |
|
174 | border: 1px solid @border_color; | |
175 | outline: none; |
|
175 | outline: none; | |
176 | } |
|
176 | } | |
177 |
|
177 | |||
178 | .cell { |
|
178 | .cell { | |
179 | border: 1px solid transparent; |
|
179 | border: 1px solid transparent; | |
180 | .vbox(); |
|
180 | .vbox(); | |
181 |
|
181 | |||
182 | &.selected { |
|
182 | &.selected { | |
183 | .corner-all; |
|
183 | .corner-all; | |
184 | border : thin @border_color solid; |
|
184 | border : thin @border_color solid; | |
185 | } |
|
185 | } | |
186 | } |
|
186 | } | |
187 |
|
187 | |||
188 | div.cell { |
|
188 | div.cell { | |
189 | width: 100%; |
|
189 | width: 100%; | |
190 | padding: 5px 5px 5px 0px; |
|
190 | padding: 5px 5px 5px 0px; | |
191 | /* This acts as a spacer between cells, that is outside the border */ |
|
191 | /* This acts as a spacer between cells, that is outside the border */ | |
192 | margin: 2px 0px 2px 0px; |
|
192 | margin: 2px 0px 2px 0px; | |
193 | outline: none; |
|
193 | outline: none; | |
194 | } |
|
194 | } | |
195 |
|
195 | |||
196 | div.code_cell { |
|
196 | div.code_cell { | |
197 | } |
|
197 | } | |
198 |
|
198 | |||
199 | /* any special styling for code cells that are currently running goes here */ |
|
199 | /* any special styling for code cells that are currently running goes here */ | |
200 | div.code_cell.running { |
|
200 | div.code_cell.running { | |
201 | } |
|
201 | } | |
202 |
|
202 | |||
203 | div.prompt { |
|
203 | div.prompt { | |
204 | /* This needs to be wide enough for 3 digit prompt numbers: In[100]: */ |
|
204 | /* This needs to be wide enough for 3 digit prompt numbers: In[100]: */ | |
205 | width: 11ex; |
|
205 | width: 11ex; | |
206 | /* This 0.4em is tuned to match the padding on the CodeMirror editor. */ |
|
206 | /* This 0.4em is tuned to match the padding on the CodeMirror editor. */ | |
207 | padding: 0.4em; |
|
207 | padding: 0.4em; | |
208 | margin: 0px; |
|
208 | margin: 0px; | |
209 | font-family: monospace; |
|
209 | font-family: monospace; | |
210 | text-align: right; |
|
210 | text-align: right; | |
211 | /* This has to match that of the the CodeMirror class line-height below */ |
|
211 | /* This has to match that of the the CodeMirror class line-height below */ | |
212 | line-height: 1.231; |
|
212 | line-height: 1.231; | |
213 | } |
|
213 | } | |
214 |
|
214 | |||
215 | div.input { |
|
215 | div.input { | |
216 | page-break-inside: avoid; |
|
216 | page-break-inside: avoid; | |
217 | .hbox(); |
|
217 | .hbox(); | |
218 | } |
|
218 | } | |
219 |
|
219 | |||
220 | /* input_area and input_prompt must match in top border and margin for alignment */ |
|
220 | /* input_area and input_prompt must match in top border and margin for alignment */ | |
221 | div.input_area { |
|
221 | div.input_area { | |
222 | /*color: @fontBaseColor;*/ |
|
222 | /*color: @fontBaseColor;*/ | |
223 | border: 1px solid @light_border_color; |
|
223 | border: 1px solid @light_border_color; | |
224 | .corner-all; |
|
224 | .corner-all; | |
225 | background: @cell_background; |
|
225 | background: @cell_background; | |
226 | } |
|
226 | } | |
227 |
|
227 | |||
228 | div.input_prompt { |
|
228 | div.input_prompt { | |
229 | color: navy; |
|
229 | color: navy; | |
230 | border-top: 1px solid transparent; |
|
230 | border-top: 1px solid transparent; | |
231 | } |
|
231 | } | |
232 |
|
232 | |||
233 | div.output_wrapper { |
|
233 | div.output_wrapper { | |
234 | /* This is a spacer between the input and output of each cell */ |
|
234 | /* This is a spacer between the input and output of each cell */ | |
235 | margin-top: 5px; |
|
235 | margin-top: 5px; | |
236 | margin-left: 5px; |
|
236 | margin-left: 5px; | |
237 | /* FF needs explicit width to stretch */ |
|
237 | /* FF needs explicit width to stretch */ | |
238 | width: 100%; |
|
238 | width: 100%; | |
239 | /* this position must be relative to enable descendents to be absolute within it */ |
|
239 | /* this position must be relative to enable descendents to be absolute within it */ | |
240 | position: relative; |
|
240 | position: relative; | |
241 | } |
|
241 | } | |
242 |
|
242 | |||
243 | /* class for the output area when it should be height-limited */ |
|
243 | /* class for the output area when it should be height-limited */ | |
244 | div.output_scroll { |
|
244 | div.output_scroll { | |
245 | /* ideally, this would be max-height, but FF barfs all over that */ |
|
245 | /* ideally, this would be max-height, but FF barfs all over that */ | |
246 | height: 24em; |
|
246 | height: 24em; | |
247 | /* FF needs this *and the wrapper* to specify full width, or it will shrinkwrap */ |
|
247 | /* FF needs this *and the wrapper* to specify full width, or it will shrinkwrap */ | |
248 | width: 100%; |
|
248 | width: 100%; | |
249 |
|
249 | |||
250 | overflow: auto; |
|
250 | overflow: auto; | |
251 | .corner-all; |
|
251 | .corner-all; | |
252 | .box-shadow(inset 0 2px 8px rgba(0, 0, 0, .8)); |
|
252 | .box-shadow(inset 0 2px 8px rgba(0, 0, 0, .8)); | |
253 | } |
|
253 | } | |
254 |
|
254 | |||
255 | /* output div while it is collapsed */ |
|
255 | /* output div while it is collapsed */ | |
256 | div.output_collapsed { |
|
256 | div.output_collapsed { | |
257 | margin-right: 5px; |
|
257 | margin-right: 5px; | |
258 | } |
|
258 | } | |
259 |
|
259 | |||
260 | div.out_prompt_overlay { |
|
260 | div.out_prompt_overlay { | |
261 | height: 100%; |
|
261 | height: 100%; | |
262 | padding: 0px; |
|
262 | padding: 0px; | |
263 | position: absolute; |
|
263 | position: absolute; | |
264 | .corner-all; |
|
264 | .corner-all; | |
265 | } |
|
265 | } | |
266 |
|
266 | |||
267 | div.out_prompt_overlay:hover { |
|
267 | div.out_prompt_overlay:hover { | |
268 | /* use inner shadow to get border that is computed the same on WebKit/FF */ |
|
268 | /* use inner shadow to get border that is computed the same on WebKit/FF */ | |
269 | .box-shadow(inset 0 0 1px #000); |
|
269 | .box-shadow(inset 0 0 1px #000); | |
270 | background: rgba(240, 240, 240, 0.5); |
|
270 | background: rgba(240, 240, 240, 0.5); | |
271 | } |
|
271 | } | |
272 |
|
272 | |||
273 | div.output_prompt { |
|
273 | div.output_prompt { | |
274 | color: darkred; |
|
274 | color: darkred; | |
275 | /* 5px right shift to account for margin in parent container */ |
|
275 | /* 5px right shift to account for margin in parent container */ | |
276 | margin: 0 5px 0 -5px; |
|
276 | margin: 0 5px 0 -5px; | |
277 | } |
|
277 | } | |
278 |
|
278 | |||
279 | /* This class is the outer container of all output sections. */ |
|
279 | /* This class is the outer container of all output sections. */ | |
280 | div.output_area { |
|
280 | div.output_area { | |
281 | padding: 0px; |
|
281 | padding: 0px; | |
282 | page-break-inside: avoid; |
|
282 | page-break-inside: avoid; | |
283 | .hbox(); |
|
283 | .hbox(); | |
284 | } |
|
284 | } | |
285 |
|
285 | |||
286 |
|
286 | |||
287 | /* This is needed to protect the pre formating from global settings such |
|
287 | /* This is needed to protect the pre formating from global settings such | |
288 | as that of bootstrap */ |
|
288 | as that of bootstrap */ | |
289 | div.output_area pre { |
|
289 | div.output_area pre { | |
290 | font-family: monospace; |
|
290 | font-family: monospace; | |
291 | margin: 0; |
|
291 | margin: 0; | |
292 | padding: 0; |
|
292 | padding: 0; | |
293 | border: 0; |
|
293 | border: 0; | |
294 | font-size: 100%; |
|
294 | font-size: 100%; | |
295 | vertical-align: baseline; |
|
295 | vertical-align: baseline; | |
296 | color: black; |
|
296 | color: black; | |
297 | } |
|
297 | } | |
298 |
|
298 | |||
299 | /* This class is for the output subarea inside the output_area and after |
|
299 | /* This class is for the output subarea inside the output_area and after | |
300 | the prompt div. */ |
|
300 | the prompt div. */ | |
301 | div.output_subarea { |
|
301 | div.output_subarea { | |
302 | padding: 0.44em 0.4em 0.4em 1px; |
|
302 | padding: 0.44em 0.4em 0.4em 1px; | |
303 | .box-flex1(); |
|
303 | .box-flex1(); | |
304 | } |
|
304 | } | |
305 |
|
305 | |||
306 | /* The rest of the output_* classes are for special styling of the different |
|
306 | /* The rest of the output_* classes are for special styling of the different | |
307 | output types */ |
|
307 | output types */ | |
308 |
|
308 | |||
309 | /* all text output has this class: */ |
|
309 | /* all text output has this class: */ | |
310 | div.output_text { |
|
310 | div.output_text { | |
311 | text-align: left; |
|
311 | text-align: left; | |
312 | color: @fontBaseColor; |
|
312 | color: @fontBaseColor; | |
313 | font-family: monospace; |
|
313 | font-family: monospace; | |
314 | /* This has to match that of the the CodeMirror class line-height below */ |
|
314 | /* This has to match that of the the CodeMirror class line-height below */ | |
315 | line-height: 1.231; |
|
315 | line-height: 1.231; | |
316 | } |
|
316 | } | |
317 |
|
317 | |||
318 | /* stdout/stderr are 'text' as well as 'stream', but pyout/pyerr are *not* streams */ |
|
318 | /* stdout/stderr are 'text' as well as 'stream', but pyout/pyerr are *not* streams */ | |
319 | div.output_stream { |
|
319 | div.output_stream { | |
320 | padding-top: 0.0em; |
|
320 | padding-top: 0.0em; | |
321 | padding-bottom: 0.0em; |
|
321 | padding-bottom: 0.0em; | |
322 | } |
|
322 | } | |
323 | div.output_stdout { |
|
323 | div.output_stdout { | |
324 | } |
|
324 | } | |
325 | div.output_stderr { |
|
325 | div.output_stderr { | |
326 | background: #fdd; /* very light red background for stderr */ |
|
326 | background: #fdd; /* very light red background for stderr */ | |
327 | } |
|
327 | } | |
328 |
|
328 | |||
329 | div.output_latex { |
|
329 | div.output_latex { | |
330 | text-align: left; |
|
330 | text-align: left; | |
331 | } |
|
331 | } | |
332 |
|
332 | |||
333 | div.output_html { |
|
333 | div.output_html { | |
334 | } |
|
334 | } | |
335 |
|
335 | |||
336 | div.output_png { |
|
336 | div.output_png { | |
337 | } |
|
337 | } | |
338 |
|
338 | |||
339 | div.output_jpeg { |
|
339 | div.output_jpeg { | |
340 | } |
|
340 | } | |
341 |
|
341 | |||
342 | div.text_cell { |
|
342 | div.text_cell { | |
343 | padding: 5px 5px 5px 5px; |
|
343 | padding: 5px 5px 5px 5px; | |
344 | } |
|
344 | } | |
345 |
|
345 | |||
346 | div.text_cell_input { |
|
346 | div.text_cell_input { | |
347 | color: @fontBaseColor; |
|
347 | color: @fontBaseColor; | |
348 | border: 1px solid @light_border_color; |
|
348 | border: 1px solid @light_border_color; | |
349 | .corner-all; |
|
349 | .corner-all; | |
350 | background: @cell_background; |
|
350 | background: @cell_background; | |
351 | } |
|
351 | } | |
352 |
|
352 | |||
353 | div.text_cell_render { |
|
353 | div.text_cell_render { | |
354 | /*font-family: "Helvetica Neue", Arial, Helvetica, Geneva, sans-serif;*/ |
|
354 | /*font-family: "Helvetica Neue", Arial, Helvetica, Geneva, sans-serif;*/ | |
355 | outline: none; |
|
355 | outline: none; | |
356 | resize: none; |
|
356 | resize: none; | |
357 | width: inherit; |
|
357 | width: inherit; | |
358 | border-style: none; |
|
358 | border-style: none; | |
359 | padding: 5px; |
|
359 | padding: 5px; | |
360 | color: @fontBaseColor; |
|
360 | color: @fontBaseColor; | |
361 | } |
|
361 | } | |
362 |
|
362 | |||
363 | /* The following gets added to the <head> if it is detected that the user has a |
|
363 | /* The following gets added to the <head> if it is detected that the user has a | |
364 | * monospace font with inconsistent normal/bold/italic height. See |
|
364 | * monospace font with inconsistent normal/bold/italic height. See | |
365 | * notebookmain.js. Such fonts will have keywords vertically offset with |
|
365 | * notebookmain.js. Such fonts will have keywords vertically offset with | |
366 | * respect to the rest of the text. The user should select a better font. |
|
366 | * respect to the rest of the text. The user should select a better font. | |
367 | * See: https://github.com/ipython/ipython/issues/1503 |
|
367 | * See: https://github.com/ipython/ipython/issues/1503 | |
368 | * |
|
368 | * | |
369 | * .CodeMirror span { |
|
369 | * .CodeMirror span { | |
370 | * vertical-align: bottom; |
|
370 | * vertical-align: bottom; | |
371 | * } |
|
371 | * } | |
372 | */ |
|
372 | */ | |
373 |
|
373 | |||
374 | .CodeMirror { |
|
374 | .CodeMirror { | |
375 | line-height: 1.231; /* Changed from 1em to our global default */ |
|
375 | line-height: 1.231; /* Changed from 1em to our global default */ | |
376 | height: auto; /* Changed to auto to autogrow */ |
|
376 | height: auto; /* Changed to auto to autogrow */ | |
377 | background: none; /* Changed from white to allow our bg to show through */ |
|
377 | background: none; /* Changed from white to allow our bg to show through */ | |
378 | } |
|
378 | } | |
379 |
|
379 | |||
380 | .CodeMirror-scroll { |
|
380 | .CodeMirror-scroll { | |
381 | /* The CodeMirror docs are a bit fuzzy on if overflow-y should be hidden or visible.*/ |
|
381 | /* The CodeMirror docs are a bit fuzzy on if overflow-y should be hidden or visible.*/ | |
382 | /* We have found that if it is visible, vertical scrollbars appear with font size changes.*/ |
|
382 | /* We have found that if it is visible, vertical scrollbars appear with font size changes.*/ | |
383 | overflow-y: hidden; |
|
383 | overflow-y: hidden; | |
384 | overflow-x: auto; /* Changed from auto to remove scrollbar */ |
|
384 | overflow-x: auto; /* Changed from auto to remove scrollbar */ | |
385 | } |
|
385 | } | |
386 |
|
386 | |||
387 | .CodeMirror-lines { |
|
387 | .CodeMirror-lines { | |
388 | /* In CM2, this used to be 0.4em, but in CM3 it went to 4px. We need the em value because */ |
|
388 | /* In CM2, this used to be 0.4em, but in CM3 it went to 4px. We need the em value because */ | |
389 | /* we have set a different line-height and want this to scale with that. */ |
|
389 | /* we have set a different line-height and want this to scale with that. */ | |
390 | padding: 0.4em; |
|
390 | padding: 0.4em; | |
391 | } |
|
391 | } | |
392 |
|
392 | |||
393 | .CodeMirror pre { |
|
393 | .CodeMirror pre { | |
394 | /* In CM3 this went to 4px from 0 in CM2. We need the 0 value because of how we size */ |
|
394 | /* In CM3 this went to 4px from 0 in CM2. We need the 0 value because of how we size */ | |
395 | /* .CodeMirror-lines */ |
|
395 | /* .CodeMirror-lines */ | |
396 | padding: 0; |
|
396 | padding: 0; | |
397 | } |
|
397 | } | |
398 |
|
398 | |||
399 | /* CSS font colors for translated ANSI colors. */ |
|
399 | /* CSS font colors for translated ANSI colors. */ | |
400 |
|
400 | |||
401 |
|
401 | |||
402 | .ansiblack {color: @fontBaseColor;} |
|
402 | .ansiblack {color: @fontBaseColor;} | |
403 | .ansired {color: darkred;} |
|
403 | .ansired {color: darkred;} | |
404 | .ansigreen {color: darkgreen;} |
|
404 | .ansigreen {color: darkgreen;} | |
405 | .ansiyellow {color: brown;} |
|
405 | .ansiyellow {color: brown;} | |
406 | .ansiblue {color: darkblue;} |
|
406 | .ansiblue {color: darkblue;} | |
407 | .ansipurple {color: darkviolet;} |
|
407 | .ansipurple {color: darkviolet;} | |
408 | .ansicyan {color: steelblue;} |
|
408 | .ansicyan {color: steelblue;} | |
409 | .ansigrey {color: grey;} |
|
409 | .ansigrey {color: grey;} | |
410 | .ansibold {font-weight: bold;} |
|
410 | .ansibold {font-weight: bold;} | |
411 |
|
411 | |||
412 | .completions { |
|
412 | .completions { | |
413 | position: absolute; |
|
413 | position: absolute; | |
414 | z-index: 10; |
|
414 | z-index: 10; | |
415 | overflow: hidden; |
|
415 | overflow: hidden; | |
416 | border: 1px solid @border_color; |
|
416 | border: 1px solid @border_color; | |
417 | .corner-all; |
|
417 | .corner-all; | |
418 | .box-shadow(0px 6px 10px -1px #adadad); |
|
418 | .box-shadow(0px 6px 10px -1px #adadad); | |
419 | } |
|
419 | } | |
420 |
|
420 | |||
421 | .completions select { |
|
421 | .completions select { | |
422 | background: white; |
|
422 | background: white; | |
423 | outline: none; |
|
423 | outline: none; | |
424 | border: none; |
|
424 | border: none; | |
425 | padding: 0px; |
|
425 | padding: 0px; | |
426 | margin: 0px; |
|
426 | margin: 0px; | |
427 | overflow: auto; |
|
427 | overflow: auto; | |
428 | font-family: monospace; |
|
428 | font-family: monospace; | |
429 | font-size: 110%; |
|
429 | font-size: 110%; | |
430 | color: @fontBaseColor; |
|
430 | color: @fontBaseColor; | |
431 | } |
|
431 | } | |
432 |
|
432 | |||
433 | .completions select option.context { |
|
433 | .completions select option.context { | |
434 | color: @blueDark; |
|
434 | color: @blueDark; | |
435 | } |
|
435 | } | |
436 |
|
436 | |||
437 | pre.dialog { |
|
437 | pre.dialog { | |
438 | background-color: @cell_background; |
|
438 | background-color: @cell_background; | |
439 | border: 1px solid #ddd; |
|
439 | border: 1px solid #ddd; | |
440 | .corner-all; |
|
440 | .corner-all; | |
441 | padding: 0.4em; |
|
441 | padding: 0.4em; | |
442 | padding-left: 2em; |
|
442 | padding-left: 2em; | |
443 | } |
|
443 | } | |
444 |
|
444 | |||
445 | p.dialog { |
|
445 | p.dialog { | |
446 | padding : 0.2em; |
|
446 | padding : 0.2em; | |
447 | } |
|
447 | } | |
448 |
|
448 | |||
449 | .shortcut_key { |
|
449 | .shortcut_key { | |
450 | display: inline-block; |
|
450 | display: inline-block; | |
451 | width: 15ex; |
|
451 | width: 15ex; | |
452 | text-align: right; |
|
452 | text-align: right; | |
453 | font-family: monospace; |
|
453 | font-family: monospace; | |
454 | } |
|
454 | } | |
455 |
|
455 | |||
456 | .shortcut_descr { |
|
456 | .shortcut_descr { | |
457 | } |
|
457 | } | |
458 |
|
458 | |||
459 | /* Word-wrap output correctly. This is the CSS3 spelling, though Firefox seems |
|
459 | /* Word-wrap output correctly. This is the CSS3 spelling, though Firefox seems | |
460 | to not honor it correctly. Webkit browsers (Chrome, rekonq, Safari) do. |
|
460 | to not honor it correctly. Webkit browsers (Chrome, rekonq, Safari) do. | |
461 | */ |
|
461 | */ | |
462 | pre, code, kbd, samp { white-space: pre-wrap; } |
|
462 | pre, code, kbd, samp { white-space: pre-wrap; } | |
463 |
|
463 | |||
464 | #fonttest { |
|
464 | #fonttest { | |
465 | font-family: monospace; |
|
465 | font-family: monospace; | |
466 | } |
|
466 | } | |
467 |
|
467 | |||
468 | .js-error { |
|
468 | .js-error { | |
469 | color: darkred; |
|
469 | color: darkred; | |
470 | } |
|
470 | } | |
471 |
|
471 | |||
472 | a { |
|
472 | a { | |
473 | text-decoration: underline; |
|
473 | text-decoration: underline; | |
474 | } |
|
474 | } | |
475 |
|
475 | |||
476 | p { |
|
476 | p { | |
477 |
|
477 | |||
478 | margin-bottom:0; |
|
478 | margin-bottom:0; | |
479 |
|
479 | |||
480 | } |
|
480 | } | |
481 |
|
481 | |||
482 | a.heading-anchor:link, a.heading-anchor:visited { |
|
482 | a.heading-anchor:link, a.heading-anchor:visited { | |
483 | text-decoration: none; |
|
483 | text-decoration: none; | |
484 | color: inherit; |
|
484 | color: inherit; | |
485 | } |
|
485 | } | |
486 |
|
486 | |||
487 | /* raw_input styles */ |
|
487 | /* raw_input styles */ | |
488 |
|
488 | |||
489 | div.raw_input { |
|
489 | div.raw_input { | |
490 | padding-top: 0px; |
|
490 | padding-top: 0px; | |
491 | padding-bottom: 0px; |
|
491 | padding-bottom: 0px; | |
492 | height: 1em; |
|
492 | height: 1em; | |
493 | line-height: 1em; |
|
493 | line-height: 1em; | |
494 | font-family: monospace; |
|
494 | font-family: monospace; | |
495 | } |
|
495 | } | |
496 | span.input_prompt { |
|
496 | span.input_prompt { | |
497 | font-family: inherit; |
|
497 | font-family: inherit; | |
498 | } |
|
498 | } | |
499 | input.raw_input { |
|
499 | input.raw_input { | |
500 | font-family: inherit; |
|
500 | font-family: inherit; | |
501 | font-size: inherit; |
|
501 | font-size: inherit; | |
502 | color: inherit; |
|
502 | color: inherit; | |
503 | width: auto; |
|
503 | width: auto; | |
504 | margin: -2px 0px 0px 1px; |
|
504 | margin: -2px 0px 0px 1px; | |
505 | padding-left: 1px; |
|
505 | padding-left: 1px; | |
506 | padding-top: 2px; |
|
506 | padding-top: 2px; | |
507 | height: 1em; |
|
507 | height: 1em; | |
508 | } |
|
508 | } | |
509 |
|
509 | |||
510 | p.p-space { |
|
510 | p.p-space { | |
511 | margin-bottom: 10px; |
|
511 | margin-bottom: 10px; | |
512 | } |
|
512 | } | |
513 |
|
513 |
@@ -1,243 +1,242 b'' | |||||
1 | {% extends "page.html" %} |
|
1 | {% extends "page.html" %} | |
2 |
|
2 | |||
3 | {% block stylesheet %} |
|
3 | {% block stylesheet %} | |
4 |
|
4 | |||
5 | {% if mathjax_url %} |
|
5 | {% if mathjax_url %} | |
6 | <script type="text/javascript" src="{{mathjax_url}}?config=TeX-AMS_HTML-full&delayStartupUntil=configured" charset="utf-8"></script> |
|
6 | <script type="text/javascript" src="{{mathjax_url}}?config=TeX-AMS_HTML-full&delayStartupUntil=configured" charset="utf-8"></script> | |
7 | {% endif %} |
|
7 | {% endif %} | |
8 | <script type="text/javascript"> |
|
8 | <script type="text/javascript"> | |
9 | // MathJax disabled, set as null to distingish from *missing* MathJax, |
|
9 | // MathJax disabled, set as null to distingish from *missing* MathJax, | |
10 | // where it will be undefined, and should prompt a dialog later. |
|
10 | // where it will be undefined, and should prompt a dialog later. | |
11 | window.mathjax_url = "{{mathjax_url}}"; |
|
11 | window.mathjax_url = "{{mathjax_url}}"; | |
12 | </script> |
|
12 | </script> | |
13 |
|
13 | |||
14 | <link rel="stylesheet" href="{{ static_url("components/codemirror/lib/codemirror.css") }}"> |
|
14 | <link rel="stylesheet" href="{{ static_url("components/codemirror/lib/codemirror.css") }}"> | |
15 | <link rel="stylesheet" href="{{ static_url("css/codemirror-ipython.css") }}"> |
|
|||
16 |
|
||||
17 | <link rel="stylesheet" href="{{ static_url("prettify/prettify.css") }}"/> |
|
|||
18 |
|
15 | |||
19 | <link rel="stylesheet" href="{{ static_url("css/celltoolbar.css") }}" type="text/css" /> |
|
16 | <link rel="stylesheet" href="{{ static_url("css/celltoolbar.css") }}" type="text/css" /> | |
20 |
|
17 | |||
21 | {{super()}} |
|
18 | {{super()}} | |
22 |
|
19 | |||
23 | {% endblock %} |
|
20 | {% endblock %} | |
24 |
|
21 | |||
25 | {% block params %} |
|
22 | {% block params %} | |
26 |
|
23 | |||
27 | data-project={{project}} |
|
24 | data-project={{project}} | |
28 | data-base-project-url={{base_project_url}} |
|
25 | data-base-project-url={{base_project_url}} | |
29 | data-base-kernel-url={{base_kernel_url}} |
|
26 | data-base-kernel-url={{base_kernel_url}} | |
30 | data-read-only={{read_only and not logged_in}} |
|
27 | data-read-only={{read_only and not logged_in}} | |
31 | data-notebook-id={{notebook_id}} |
|
28 | data-notebook-id={{notebook_id}} | |
32 | class="notebook_app" |
|
29 | class="notebook_app" | |
33 |
|
30 | |||
34 | {% endblock %} |
|
31 | {% endblock %} | |
35 |
|
32 | |||
36 |
|
33 | |||
37 | {% block header %} |
|
34 | {% block header %} | |
38 |
|
35 | |||
39 | <span id="save_widget"> |
|
36 | <span id="save_widget"> | |
40 | <span id="notebook_name"></span> |
|
37 | <span id="notebook_name"></span> | |
41 | <span id="checkpoint_status"></span> |
|
38 | <span id="checkpoint_status"></span> | |
42 | <span id="autosave_status"></span> |
|
39 | <span id="autosave_status"></span> | |
43 | </span> |
|
40 | </span> | |
44 |
|
41 | |||
45 | {% endblock %} |
|
42 | {% endblock %} | |
46 |
|
43 | |||
47 |
|
44 | |||
48 | {% block site %} |
|
45 | {% block site %} | |
49 |
|
46 | |||
50 | <div id="menubar_container"> |
|
47 | <div id="menubar_container"> | |
51 | <div id="menubar"> |
|
48 | <div id="menubar"> | |
52 | <ul id="menus"> |
|
49 | <ul id="menus"> | |
53 | <li><a href="#">File</a> |
|
50 | <li><a href="#">File</a> | |
54 | <ul> |
|
51 | <ul> | |
55 | <li id="new_notebook"><a href="#">New</a></li> |
|
52 | <li id="new_notebook"><a href="#">New</a></li> | |
56 | <li id="open_notebook"><a href="#">Open...</a></li> |
|
53 | <li id="open_notebook"><a href="#">Open...</a></li> | |
57 | <hr/> |
|
54 | <hr/> | |
58 | <li id="copy_notebook"><a href="#">Make a Copy...</a></li> |
|
55 | <li id="copy_notebook"><a href="#">Make a Copy...</a></li> | |
59 | <li id="rename_notebook"><a href="#">Rename...</a></li> |
|
56 | <li id="rename_notebook"><a href="#">Rename...</a></li> | |
60 | <li id="save_checkpoint"><a href="#">Save and Checkpoint</a></li> |
|
57 | <li id="save_checkpoint"><a href="#">Save and Checkpoint</a></li> | |
61 | <hr/> |
|
58 | <hr/> | |
62 | <li id="restore_checkpoint"><a href="#">Revert to Checkpoint</a> |
|
59 | <li id="restore_checkpoint"><a href="#">Revert to Checkpoint</a> | |
63 | <ul> |
|
60 | <ul> | |
64 | <li><a href="#"></a></li> |
|
61 | <li><a href="#"></a></li> | |
65 | <li><a href="#"></a></li> |
|
62 | <li><a href="#"></a></li> | |
66 | <li><a href="#"></a></li> |
|
63 | <li><a href="#"></a></li> | |
67 | <li><a href="#"></a></li> |
|
64 | <li><a href="#"></a></li> | |
68 | <li><a href="#"></a></li> |
|
65 | <li><a href="#"></a></li> | |
69 | </ul> |
|
66 | </ul> | |
70 | </li> |
|
67 | </li> | |
71 | <hr/> |
|
68 | <hr/> | |
72 | <li><a href="#">Download as</a> |
|
69 | <li><a href="#">Download as</a> | |
73 | <ul> |
|
70 | <ul> | |
74 | <li id="download_ipynb"><a href="#">IPython (.ipynb)</a></li> |
|
71 | <li id="download_ipynb"><a href="#">IPython (.ipynb)</a></li> | |
75 | <li id="download_py"><a href="#">Python (.py)</a></li> |
|
72 | <li id="download_py"><a href="#">Python (.py)</a></li> | |
76 | </ul> |
|
73 | </ul> | |
77 | </li> |
|
74 | </li> | |
78 | <!--<hr/> |
|
75 | <!--<hr/> | |
79 | <li id="print_notebook"><a href="/{{notebook_id}}/print" target="_blank">Print View</a></li>--> |
|
76 | <li id="print_notebook"><a href="/{{notebook_id}}/print" target="_blank">Print View</a></li>--> | |
80 | <hr/> |
|
77 | <hr/> | |
81 | <li id="kill_and_exit"><a href="#" >Close and halt</a></li> |
|
78 | <li id="kill_and_exit"><a href="#" >Close and halt</a></li> | |
82 | </ul> |
|
79 | </ul> | |
83 | </li> |
|
80 | </li> | |
84 | <li><a href="#">Edit</a> |
|
81 | <li><a href="#">Edit</a> | |
85 | <ul> |
|
82 | <ul> | |
86 | <li id="cut_cell"><a href="#">Cut Cell</a></li> |
|
83 | <li id="cut_cell"><a href="#">Cut Cell</a></li> | |
87 | <li id="copy_cell"><a href="#">Copy Cell</a></li> |
|
84 | <li id="copy_cell"><a href="#">Copy Cell</a></li> | |
88 | <li id="paste_cell_above" class="ui-state-disabled"><a href="#">Paste Cell Above</a></li> |
|
85 | <li id="paste_cell_above" class="ui-state-disabled"><a href="#">Paste Cell Above</a></li> | |
89 | <li id="paste_cell_below" class="ui-state-disabled"><a href="#">Paste Cell Below</a></li> |
|
86 | <li id="paste_cell_below" class="ui-state-disabled"><a href="#">Paste Cell Below</a></li> | |
90 | <li id="paste_cell_replace" class="ui-state-disabled"><a href="#">Paste Cell & Replace</a></li> |
|
87 | <li id="paste_cell_replace" class="ui-state-disabled"><a href="#">Paste Cell & Replace</a></li> | |
91 | <li id="delete_cell"><a href="#">Delete Cell</a></li> |
|
88 | <li id="delete_cell"><a href="#">Delete Cell</a></li> | |
92 | <li id="undelete_cell" class="ui-state-disabled"><a href="#">Undo Delete Cell</a></li> |
|
89 | <li id="undelete_cell" class="ui-state-disabled"><a href="#">Undo Delete Cell</a></li> | |
93 | <hr/> |
|
90 | <hr/> | |
94 | <li id="split_cell"><a href="#">Split Cell</a></li> |
|
91 | <li id="split_cell"><a href="#">Split Cell</a></li> | |
95 | <li id="merge_cell_above"><a href="#">Merge Cell Above</a></li> |
|
92 | <li id="merge_cell_above"><a href="#">Merge Cell Above</a></li> | |
96 | <li id="merge_cell_below"><a href="#">Merge Cell Below</a></li> |
|
93 | <li id="merge_cell_below"><a href="#">Merge Cell Below</a></li> | |
97 | <hr/> |
|
94 | <hr/> | |
98 | <li id="move_cell_up"><a href="#">Move Cell Up</a></li> |
|
95 | <li id="move_cell_up"><a href="#">Move Cell Up</a></li> | |
99 | <li id="move_cell_down"><a href="#">Move Cell Down</a></li> |
|
96 | <li id="move_cell_down"><a href="#">Move Cell Down</a></li> | |
100 | <hr/> |
|
97 | <hr/> | |
101 | <li id="select_previous"><a href="#">Select Previous Cell</a></li> |
|
98 | <li id="select_previous"><a href="#">Select Previous Cell</a></li> | |
102 | <li id="select_next"><a href="#">Select Next Cell</a></li> |
|
99 | <li id="select_next"><a href="#">Select Next Cell</a></li> | |
103 | </ul> |
|
100 | </ul> | |
104 | </li> |
|
101 | </li> | |
105 | <li><a href="#">View</a> |
|
102 | <li><a href="#">View</a> | |
106 | <ul> |
|
103 | <ul> | |
107 | <li id="toggle_header"><a href="#">Toggle Header</a></li> |
|
104 | <li id="toggle_header"><a href="#">Toggle Header</a></li> | |
108 | <li id="toggle_toolbar"><a href="#">Toggle Toolbar</a></li> |
|
105 | <li id="toggle_toolbar"><a href="#">Toggle Toolbar</a></li> | |
109 | </ul> |
|
106 | </ul> | |
110 | </li> |
|
107 | </li> | |
111 | <li><a href="#">Insert</a> |
|
108 | <li><a href="#">Insert</a> | |
112 | <ul> |
|
109 | <ul> | |
113 | <li id="insert_cell_above"><a href="#">Insert Cell Above</a></li> |
|
110 | <li id="insert_cell_above"><a href="#">Insert Cell Above</a></li> | |
114 | <li id="insert_cell_below"><a href="#">Insert Cell Below</a></li> |
|
111 | <li id="insert_cell_below"><a href="#">Insert Cell Below</a></li> | |
115 | </ul> |
|
112 | </ul> | |
116 | </li> |
|
113 | </li> | |
117 | <li><a href="#">Cell</a> |
|
114 | <li><a href="#">Cell</a> | |
118 | <ul> |
|
115 | <ul> | |
119 | <li id="run_cell"><a href="#">Run</a></li> |
|
116 | <li id="run_cell"><a href="#">Run</a></li> | |
120 | <li id="run_cell_in_place"><a href="#">Run in Place</a></li> |
|
117 | <li id="run_cell_in_place"><a href="#">Run in Place</a></li> | |
121 | <li id="run_all_cells"><a href="#">Run All</a></li> |
|
118 | <li id="run_all_cells"><a href="#">Run All</a></li> | |
122 | <li id="run_all_cells_above"><a href="#">Run All Above</a></li> |
|
119 | <li id="run_all_cells_above"><a href="#">Run All Above</a></li> | |
123 | <li id="run_all_cells_below"><a href="#">Run All Below</a></li> |
|
120 | <li id="run_all_cells_below"><a href="#">Run All Below</a></li> | |
124 | <hr/> |
|
121 | <hr/> | |
125 | <li id="to_code"><a href="#">Code</a></li> |
|
122 | <li id="to_code"><a href="#">Code</a></li> | |
126 | <li id="to_markdown"><a href="#">Markdown </a></li> |
|
123 | <li id="to_markdown"><a href="#">Markdown </a></li> | |
127 | <li id="to_raw"><a href="#">Raw Text</a></li> |
|
124 | <li id="to_raw"><a href="#">Raw Text</a></li> | |
128 | <li id="to_heading1"><a href="#">Heading 1</a></li> |
|
125 | <li id="to_heading1"><a href="#">Heading 1</a></li> | |
129 | <li id="to_heading2"><a href="#">Heading 2</a></li> |
|
126 | <li id="to_heading2"><a href="#">Heading 2</a></li> | |
130 | <li id="to_heading3"><a href="#">Heading 3</a></li> |
|
127 | <li id="to_heading3"><a href="#">Heading 3</a></li> | |
131 | <li id="to_heading4"><a href="#">Heading 4</a></li> |
|
128 | <li id="to_heading4"><a href="#">Heading 4</a></li> | |
132 | <li id="to_heading5"><a href="#">Heading 5</a></li> |
|
129 | <li id="to_heading5"><a href="#">Heading 5</a></li> | |
133 | <li id="to_heading6"><a href="#">Heading 6</a></li> |
|
130 | <li id="to_heading6"><a href="#">Heading 6</a></li> | |
134 | <hr/> |
|
131 | <hr/> | |
135 | <li id="toggle_output"><a href="#">Toggle Current Output</a></li> |
|
132 | <li id="toggle_output"><a href="#">Toggle Current Output</a></li> | |
136 | <li id="all_outputs"><a href="#">All Output</a> |
|
133 | <li id="all_outputs"><a href="#">All Output</a> | |
137 | <ul> |
|
134 | <ul> | |
138 | <li id="expand_all_output"><a href="#">Expand</a></li> |
|
135 | <li id="expand_all_output"><a href="#">Expand</a></li> | |
139 | <li id="scroll_all_output"><a href="#">Scroll Long</a></li> |
|
136 | <li id="scroll_all_output"><a href="#">Scroll Long</a></li> | |
140 | <li id="collapse_all_output"><a href="#">Collapse</a></li> |
|
137 | <li id="collapse_all_output"><a href="#">Collapse</a></li> | |
141 | <li id="clear_all_output"><a href="#">Clear</a></li> |
|
138 | <li id="clear_all_output"><a href="#">Clear</a></li> | |
142 | </ul> |
|
139 | </ul> | |
143 | </li> |
|
140 | </li> | |
144 | </ul> |
|
141 | </ul> | |
145 | </li> |
|
142 | </li> | |
146 | <li><a href="#">Kernel</a> |
|
143 | <li><a href="#">Kernel</a> | |
147 | <ul> |
|
144 | <ul> | |
148 | <li id="int_kernel"><a href="#">Interrupt</a></li> |
|
145 | <li id="int_kernel"><a href="#">Interrupt</a></li> | |
149 | <li id="restart_kernel"><a href="#">Restart</a></li> |
|
146 | <li id="restart_kernel"><a href="#">Restart</a></li> | |
150 | </ul> |
|
147 | </ul> | |
151 | </li> |
|
148 | </li> | |
152 | <li><a href="#">Help</a> |
|
149 | <li><a href="#">Help</a> | |
153 | <ul> |
|
150 | <ul> | |
154 | <li><a href="http://ipython.org/documentation.html" target="_blank">IPython Help</a></li> |
|
151 | <li><a href="http://ipython.org/documentation.html" target="_blank">IPython Help</a></li> | |
155 | <li><a href="http://ipython.org/ipython-doc/stable/interactive/htmlnotebook.html" target="_blank">Notebook Help</a></li> |
|
152 | <li><a href="http://ipython.org/ipython-doc/stable/interactive/htmlnotebook.html" target="_blank">Notebook Help</a></li> | |
156 | <li id="keyboard_shortcuts"><a href="#">Keyboard Shortcuts</a></li> |
|
153 | <li id="keyboard_shortcuts"><a href="#">Keyboard Shortcuts</a></li> | |
157 | <hr/> |
|
154 | <hr/> | |
158 | <li><a href="http://docs.python.org" target="_blank">Python</a></li> |
|
155 | <li><a href="http://docs.python.org" target="_blank">Python</a></li> | |
159 | <li><a href="http://docs.scipy.org/doc/numpy/reference/" target="_blank">NumPy</a></li> |
|
156 | <li><a href="http://docs.scipy.org/doc/numpy/reference/" target="_blank">NumPy</a></li> | |
160 | <li><a href="http://docs.scipy.org/doc/scipy/reference/" target="_blank">SciPy</a></li> |
|
157 | <li><a href="http://docs.scipy.org/doc/scipy/reference/" target="_blank">SciPy</a></li> | |
161 | <li><a href="http://docs.sympy.org/dev/index.html" target="_blank">SymPy</a></li> |
|
158 | <li><a href="http://docs.sympy.org/dev/index.html" target="_blank">SymPy</a></li> | |
162 | <li><a href="http://matplotlib.sourceforge.net/" target="_blank">Matplotlib</a></li> |
|
159 | <li><a href="http://matplotlib.sourceforge.net/" target="_blank">Matplotlib</a></li> | |
163 | </ul> |
|
160 | </ul> | |
164 | </li> |
|
161 | </li> | |
165 | </ul> |
|
162 | </ul> | |
166 |
|
163 | |||
167 | </div> |
|
164 | </div> | |
168 | <div id="notification_area"> |
|
165 | <div id="notification_area"> | |
169 | </div> |
|
166 | </div> | |
170 | </div> |
|
167 | </div> | |
171 |
|
168 | |||
172 |
|
169 | |||
173 | <div id="maintoolbar"></div> |
|
170 | <div id="maintoolbar"></div> | |
174 |
|
171 | |||
175 | <div id="ipython-main-app"> |
|
172 | <div id="ipython-main-app"> | |
176 |
|
173 | |||
177 | <div id="notebook_panel"> |
|
174 | <div id="notebook_panel"> | |
178 | <div id="notebook"></div> |
|
175 | <div id="notebook"></div> | |
179 | <div id="pager_splitter"></div> |
|
176 | <div id="pager_splitter"></div> | |
180 | <div id="pager_container"> |
|
177 | <div id="pager_container"> | |
181 | <div id='pager_button_area'> |
|
178 | <div id='pager_button_area'> | |
182 | </div> |
|
179 | </div> | |
183 | <div id="pager"></div> |
|
180 | <div id="pager"></div> | |
184 | </div> |
|
181 | </div> | |
185 | </div> |
|
182 | </div> | |
186 |
|
183 | |||
187 | </div> |
|
184 | </div> | |
188 | <div id='tooltip' class='ipython_tooltip' style='display:none'></div> |
|
185 | <div id='tooltip' class='ipython_tooltip' style='display:none'></div> | |
189 |
|
186 | |||
190 |
|
187 | |||
191 | {% endblock %} |
|
188 | {% endblock %} | |
192 |
|
189 | |||
193 |
|
190 | |||
194 | {% block script %} |
|
191 | {% block script %} | |
195 |
|
192 | |||
196 | {{super()}} |
|
193 | {{super()}} | |
197 |
|
194 | |||
198 | <script src="{{ static_url("components/codemirror/lib/codemirror.js") }}" charset="utf-8"></script> |
|
195 | <script src="{{ static_url("components/codemirror/lib/codemirror.js") }}" charset="utf-8"></script> | |
199 | <script src="{{ static_url("components/codemirror/addon/mode/loadmode.js") }}" charset="utf-8"></script> |
|
196 | <script src="{{ static_url("components/codemirror/addon/mode/loadmode.js") }}" charset="utf-8"></script> | |
200 | <script src="{{ static_url("components/codemirror/addon/mode/multiplex.js") }}" charset="utf-8"></script> |
|
197 | <script src="{{ static_url("components/codemirror/addon/mode/multiplex.js") }}" charset="utf-8"></script> | |
|
198 | <script src="{{ static_url("components/codemirror/addon/mode/overlay.js") }}" charset="utf-8"></script> | |||
201 | <script src="{{ static_url("js/codemirror-ipython.js") }}" charset="utf-8"></script> |
|
199 | <script src="{{ static_url("js/codemirror-ipython.js") }}" charset="utf-8"></script> | |
202 | <script src="{{ static_url("components/codemirror/mode/htmlmixed/htmlmixed.js") }}" charset="utf-8"></script> |
|
200 | <script src="{{ static_url("components/codemirror/mode/htmlmixed/htmlmixed.js") }}" charset="utf-8"></script> | |
203 | <script src="{{ static_url("components/codemirror/mode/xml/xml.js") }}" charset="utf-8"></script> |
|
201 | <script src="{{ static_url("components/codemirror/mode/xml/xml.js") }}" charset="utf-8"></script> | |
204 | <script src="{{ static_url("components/codemirror/mode/javascript/javascript.js") }}" charset="utf-8"></script> |
|
202 | <script src="{{ static_url("components/codemirror/mode/javascript/javascript.js") }}" charset="utf-8"></script> | |
205 | <script src="{{ static_url("components/codemirror/mode/css/css.js") }}" charset="utf-8"></script> |
|
203 | <script src="{{ static_url("components/codemirror/mode/css/css.js") }}" charset="utf-8"></script> | |
206 | <script src="{{ static_url("components/codemirror/mode/rst/rst.js") }}" charset="utf-8"></script> |
|
204 | <script src="{{ static_url("components/codemirror/mode/rst/rst.js") }}" charset="utf-8"></script> | |
207 | <script src="{{ static_url("components/codemirror/mode/markdown/markdown.js") }}" charset="utf-8"></script> |
|
205 | <script src="{{ static_url("components/codemirror/mode/markdown/markdown.js") }}" charset="utf-8"></script> | |
|
206 | <script src="{{ static_url("components/codemirror/mode/gfm/gfm.js") }}" charset="utf-8"></script> | |||
208 |
|
207 | |||
209 |
<script src="{{ static_url("p |
|
208 | <script src="{{ static_url("components/marked/lib/marked.js") }}" charset="utf-8"></script> | |
|
209 | <script src="{{ static_url("components/highlight.js/build/highlight.pack.js") }}" charset="utf-8"></script> | |||
210 |
|
210 | |||
211 | <script src="{{ static_url("prettify/prettify.js") }}" charset="utf-8"></script> |
|
|||
212 | <script src="{{ static_url("dateformat/date.format.js") }}" charset="utf-8"></script> |
|
211 | <script src="{{ static_url("dateformat/date.format.js") }}" charset="utf-8"></script> | |
213 |
|
212 | |||
214 | <script src="{{ static_url("js/events.js") }}" type="text/javascript" charset="utf-8"></script> |
|
213 | <script src="{{ static_url("js/events.js") }}" type="text/javascript" charset="utf-8"></script> | |
215 | <script src="{{ static_url("js/utils.js") }}" type="text/javascript" charset="utf-8"></script> |
|
214 | <script src="{{ static_url("js/utils.js") }}" type="text/javascript" charset="utf-8"></script> | |
216 | <script src="{{ static_url("js/layoutmanager.js") }}" type="text/javascript" charset="utf-8"></script> |
|
215 | <script src="{{ static_url("js/layoutmanager.js") }}" type="text/javascript" charset="utf-8"></script> | |
217 | <script src="{{ static_url("js/mathjaxutils.js") }}" type="text/javascript" charset="utf-8"></script> |
|
216 | <script src="{{ static_url("js/mathjaxutils.js") }}" type="text/javascript" charset="utf-8"></script> | |
218 | <script src="{{ static_url("js/outputarea.js") }}" type="text/javascript" charset="utf-8"></script> |
|
217 | <script src="{{ static_url("js/outputarea.js") }}" type="text/javascript" charset="utf-8"></script> | |
219 | <script src="{{ static_url("js/cell.js") }}" type="text/javascript" charset="utf-8"></script> |
|
218 | <script src="{{ static_url("js/cell.js") }}" type="text/javascript" charset="utf-8"></script> | |
220 | <script src="{{ static_url("js/celltoolbar.js") }}" type="text/javascript" charset="utf-8"></script> |
|
219 | <script src="{{ static_url("js/celltoolbar.js") }}" type="text/javascript" charset="utf-8"></script> | |
221 | <script src="{{ static_url("js/codecell.js") }}" type="text/javascript" charset="utf-8"></script> |
|
220 | <script src="{{ static_url("js/codecell.js") }}" type="text/javascript" charset="utf-8"></script> | |
222 | <script src="{{ static_url("js/completer.js") }}" type="text/javascript" charset="utf-8"></script> |
|
221 | <script src="{{ static_url("js/completer.js") }}" type="text/javascript" charset="utf-8"></script> | |
223 | <script src="{{ static_url("js/textcell.js") }}" type="text/javascript" charset="utf-8"></script> |
|
222 | <script src="{{ static_url("js/textcell.js") }}" type="text/javascript" charset="utf-8"></script> | |
224 | <script src="{{ static_url("js/kernel.js") }}" type="text/javascript" charset="utf-8"></script> |
|
223 | <script src="{{ static_url("js/kernel.js") }}" type="text/javascript" charset="utf-8"></script> | |
225 | <script src="{{ static_url("js/savewidget.js") }}" type="text/javascript" charset="utf-8"></script> |
|
224 | <script src="{{ static_url("js/savewidget.js") }}" type="text/javascript" charset="utf-8"></script> | |
226 | <script src="{{ static_url("js/quickhelp.js") }}" type="text/javascript" charset="utf-8"></script> |
|
225 | <script src="{{ static_url("js/quickhelp.js") }}" type="text/javascript" charset="utf-8"></script> | |
227 | <script src="{{ static_url("js/pager.js") }}" type="text/javascript" charset="utf-8"></script> |
|
226 | <script src="{{ static_url("js/pager.js") }}" type="text/javascript" charset="utf-8"></script> | |
228 | <script src="{{ static_url("js/menubar.js") }}" type="text/javascript" charset="utf-8"></script> |
|
227 | <script src="{{ static_url("js/menubar.js") }}" type="text/javascript" charset="utf-8"></script> | |
229 | <script src="{{ static_url("js/toolbar.js") }}" type="text/javascript" charset="utf-8"></script> |
|
228 | <script src="{{ static_url("js/toolbar.js") }}" type="text/javascript" charset="utf-8"></script> | |
230 | <script src="{{ static_url("js/maintoolbar.js") }}" type="text/javascript" charset="utf-8"></script> |
|
229 | <script src="{{ static_url("js/maintoolbar.js") }}" type="text/javascript" charset="utf-8"></script> | |
231 | <script src="{{ static_url("js/notebook.js") }}" type="text/javascript" charset="utf-8"></script> |
|
230 | <script src="{{ static_url("js/notebook.js") }}" type="text/javascript" charset="utf-8"></script> | |
232 | <script src="{{ static_url("js/notificationwidget.js") }}" type="text/javascript" charset="utf-8"></script> |
|
231 | <script src="{{ static_url("js/notificationwidget.js") }}" type="text/javascript" charset="utf-8"></script> | |
233 | <script src="{{ static_url("js/notificationarea.js") }}" type="text/javascript" charset="utf-8"></script> |
|
232 | <script src="{{ static_url("js/notificationarea.js") }}" type="text/javascript" charset="utf-8"></script> | |
234 | <script src="{{ static_url("js/tooltip.js") }}" type="text/javascript" charset="utf-8"></script> |
|
233 | <script src="{{ static_url("js/tooltip.js") }}" type="text/javascript" charset="utf-8"></script> | |
235 | <script src="{{ static_url("js/config.js") }}" type="text/javascript" charset="utf-8"></script> |
|
234 | <script src="{{ static_url("js/config.js") }}" type="text/javascript" charset="utf-8"></script> | |
236 | <script src="{{ static_url("js/notebookmain.js") }}" type="text/javascript" charset="utf-8"></script> |
|
235 | <script src="{{ static_url("js/notebookmain.js") }}" type="text/javascript" charset="utf-8"></script> | |
237 |
|
236 | |||
238 | <script src="{{ static_url("js/contexthint.js") }}" charset="utf-8"></script> |
|
237 | <script src="{{ static_url("js/contexthint.js") }}" charset="utf-8"></script> | |
239 |
|
238 | |||
240 | <script src="{{ static_url("js/celltoolbarpresets/default.js") }}" type="text/javascript" charset="utf-8"></script> |
|
239 | <script src="{{ static_url("js/celltoolbarpresets/default.js") }}" type="text/javascript" charset="utf-8"></script> | |
241 | <script src="{{ static_url("js/celltoolbarpresets/slideshow.js") }}" type="text/javascript" charset="utf-8"></script> |
|
240 | <script src="{{ static_url("js/celltoolbarpresets/slideshow.js") }}" type="text/javascript" charset="utf-8"></script> | |
242 |
|
241 | |||
243 | {% endblock %} |
|
242 | {% endblock %} |
@@ -1,172 +1,190 b'' | |||||
1 | #!/usr/bin/env python |
|
1 | #!/usr/bin/env python | |
2 | """ |
|
2 | """ | |
3 | A multi-heart Heartbeat system using PUB and ROUTER sockets. pings are sent out on the PUB, |
|
3 | A multi-heart Heartbeat system using PUB and ROUTER sockets. pings are sent out on the PUB, | |
4 | and hearts are tracked based on their DEALER identities. |
|
4 | and hearts are tracked based on their DEALER identities. | |
5 |
|
5 | |||
6 | Authors: |
|
6 | Authors: | |
7 |
|
7 | |||
8 | * Min RK |
|
8 | * Min RK | |
9 | """ |
|
9 | """ | |
10 | #----------------------------------------------------------------------------- |
|
10 | #----------------------------------------------------------------------------- | |
11 | # Copyright (C) 2010-2011 The IPython Development Team |
|
11 | # Copyright (C) 2010-2011 The IPython Development Team | |
12 | # |
|
12 | # | |
13 | # Distributed under the terms of the BSD License. The full license is in |
|
13 | # Distributed under the terms of the BSD License. The full license is in | |
14 | # the file COPYING, distributed as part of this software. |
|
14 | # the file COPYING, distributed as part of this software. | |
15 | #----------------------------------------------------------------------------- |
|
15 | #----------------------------------------------------------------------------- | |
16 |
|
16 | |||
17 | from __future__ import print_function |
|
17 | from __future__ import print_function | |
18 | import time |
|
18 | import time | |
19 | import uuid |
|
19 | import uuid | |
20 |
|
20 | |||
21 | import zmq |
|
21 | import zmq | |
22 | from zmq.devices import ThreadDevice, ThreadMonitoredQueue |
|
22 | from zmq.devices import ThreadDevice, ThreadMonitoredQueue | |
23 | from zmq.eventloop import ioloop, zmqstream |
|
23 | from zmq.eventloop import ioloop, zmqstream | |
24 |
|
24 | |||
25 | from IPython.config.configurable import LoggingConfigurable |
|
25 | from IPython.config.configurable import LoggingConfigurable | |
26 | from IPython.utils.py3compat import str_to_bytes |
|
26 | from IPython.utils.py3compat import str_to_bytes | |
27 | from IPython.utils.traitlets import Set, Instance, CFloat, Integer |
|
27 | from IPython.utils.traitlets import Set, Instance, CFloat, Integer, Dict | |
28 |
|
28 | |||
29 | from IPython.parallel.util import log_errors |
|
29 | from IPython.parallel.util import log_errors | |
30 |
|
30 | |||
31 | class Heart(object): |
|
31 | class Heart(object): | |
32 | """A basic heart object for responding to a HeartMonitor. |
|
32 | """A basic heart object for responding to a HeartMonitor. | |
33 | This is a simple wrapper with defaults for the most common |
|
33 | This is a simple wrapper with defaults for the most common | |
34 | Device model for responding to heartbeats. |
|
34 | Device model for responding to heartbeats. | |
35 |
|
35 | |||
36 | It simply builds a threadsafe zmq.FORWARDER Device, defaulting to using |
|
36 | It simply builds a threadsafe zmq.FORWARDER Device, defaulting to using | |
37 | SUB/DEALER for in/out. |
|
37 | SUB/DEALER for in/out. | |
38 |
|
38 | |||
39 | You can specify the DEALER's IDENTITY via the optional heart_id argument.""" |
|
39 | You can specify the DEALER's IDENTITY via the optional heart_id argument.""" | |
40 | device=None |
|
40 | device=None | |
41 | id=None |
|
41 | id=None | |
42 | def __init__(self, in_addr, out_addr, mon_addr=None, in_type=zmq.SUB, out_type=zmq.DEALER, mon_type=zmq.PUB, heart_id=None): |
|
42 | def __init__(self, in_addr, out_addr, mon_addr=None, in_type=zmq.SUB, out_type=zmq.DEALER, mon_type=zmq.PUB, heart_id=None): | |
43 | if mon_addr is None: |
|
43 | if mon_addr is None: | |
44 | self.device = ThreadDevice(zmq.FORWARDER, in_type, out_type) |
|
44 | self.device = ThreadDevice(zmq.FORWARDER, in_type, out_type) | |
45 | else: |
|
45 | else: | |
46 | self.device = ThreadMonitoredQueue(in_type, out_type, mon_type, in_prefix=b"", out_prefix=b"") |
|
46 | self.device = ThreadMonitoredQueue(in_type, out_type, mon_type, in_prefix=b"", out_prefix=b"") | |
47 | # do not allow the device to share global Context.instance, |
|
47 | # do not allow the device to share global Context.instance, | |
48 | # which is the default behavior in pyzmq > 2.1.10 |
|
48 | # which is the default behavior in pyzmq > 2.1.10 | |
49 | self.device.context_factory = zmq.Context |
|
49 | self.device.context_factory = zmq.Context | |
50 |
|
50 | |||
51 | self.device.daemon=True |
|
51 | self.device.daemon=True | |
52 | self.device.connect_in(in_addr) |
|
52 | self.device.connect_in(in_addr) | |
53 | self.device.connect_out(out_addr) |
|
53 | self.device.connect_out(out_addr) | |
54 | if mon_addr is not None: |
|
54 | if mon_addr is not None: | |
55 | self.device.connect_mon(mon_addr) |
|
55 | self.device.connect_mon(mon_addr) | |
56 | if in_type == zmq.SUB: |
|
56 | if in_type == zmq.SUB: | |
57 | self.device.setsockopt_in(zmq.SUBSCRIBE, b"") |
|
57 | self.device.setsockopt_in(zmq.SUBSCRIBE, b"") | |
58 | if heart_id is None: |
|
58 | if heart_id is None: | |
59 | heart_id = uuid.uuid4().bytes |
|
59 | heart_id = uuid.uuid4().bytes | |
60 | self.device.setsockopt_out(zmq.IDENTITY, heart_id) |
|
60 | self.device.setsockopt_out(zmq.IDENTITY, heart_id) | |
61 | self.id = heart_id |
|
61 | self.id = heart_id | |
62 |
|
62 | |||
63 | def start(self): |
|
63 | def start(self): | |
64 | return self.device.start() |
|
64 | return self.device.start() | |
65 |
|
65 | |||
66 |
|
66 | |||
67 | class HeartMonitor(LoggingConfigurable): |
|
67 | class HeartMonitor(LoggingConfigurable): | |
68 | """A basic HeartMonitor class |
|
68 | """A basic HeartMonitor class | |
69 | pingstream: a PUB stream |
|
69 | pingstream: a PUB stream | |
70 | pongstream: an ROUTER stream |
|
70 | pongstream: an ROUTER stream | |
71 | period: the period of the heartbeat in milliseconds""" |
|
71 | period: the period of the heartbeat in milliseconds""" | |
72 |
|
72 | |||
73 | period = Integer(3000, config=True, |
|
73 | period = Integer(3000, config=True, | |
74 | help='The frequency at which the Hub pings the engines for heartbeats ' |
|
74 | help='The frequency at which the Hub pings the engines for heartbeats ' | |
75 | '(in ms)', |
|
75 | '(in ms)', | |
76 | ) |
|
76 | ) | |
|
77 | max_heartmonitor_misses = Integer(10, config=True, | |||
|
78 | help='Allowed consecutive missed pings from controller Hub to engine before unregistering.', | |||
|
79 | ) | |||
77 |
|
80 | |||
78 | pingstream=Instance('zmq.eventloop.zmqstream.ZMQStream') |
|
81 | pingstream=Instance('zmq.eventloop.zmqstream.ZMQStream') | |
79 | pongstream=Instance('zmq.eventloop.zmqstream.ZMQStream') |
|
82 | pongstream=Instance('zmq.eventloop.zmqstream.ZMQStream') | |
80 | loop = Instance('zmq.eventloop.ioloop.IOLoop') |
|
83 | loop = Instance('zmq.eventloop.ioloop.IOLoop') | |
81 | def _loop_default(self): |
|
84 | def _loop_default(self): | |
82 | return ioloop.IOLoop.instance() |
|
85 | return ioloop.IOLoop.instance() | |
83 |
|
86 | |||
84 | # not settable: |
|
87 | # not settable: | |
85 | hearts=Set() |
|
88 | hearts=Set() | |
86 | responses=Set() |
|
89 | responses=Set() | |
87 |
on_probation= |
|
90 | on_probation=Dict() | |
88 | last_ping=CFloat(0) |
|
91 | last_ping=CFloat(0) | |
89 | _new_handlers = Set() |
|
92 | _new_handlers = Set() | |
90 | _failure_handlers = Set() |
|
93 | _failure_handlers = Set() | |
91 | lifetime = CFloat(0) |
|
94 | lifetime = CFloat(0) | |
92 | tic = CFloat(0) |
|
95 | tic = CFloat(0) | |
93 |
|
96 | |||
94 | def __init__(self, **kwargs): |
|
97 | def __init__(self, **kwargs): | |
95 | super(HeartMonitor, self).__init__(**kwargs) |
|
98 | super(HeartMonitor, self).__init__(**kwargs) | |
96 |
|
99 | |||
97 | self.pongstream.on_recv(self.handle_pong) |
|
100 | self.pongstream.on_recv(self.handle_pong) | |
98 |
|
101 | |||
99 | def start(self): |
|
102 | def start(self): | |
100 | self.tic = time.time() |
|
103 | self.tic = time.time() | |
101 | self.caller = ioloop.PeriodicCallback(self.beat, self.period, self.loop) |
|
104 | self.caller = ioloop.PeriodicCallback(self.beat, self.period, self.loop) | |
102 | self.caller.start() |
|
105 | self.caller.start() | |
103 |
|
106 | |||
104 | def add_new_heart_handler(self, handler): |
|
107 | def add_new_heart_handler(self, handler): | |
105 | """add a new handler for new hearts""" |
|
108 | """add a new handler for new hearts""" | |
106 | self.log.debug("heartbeat::new_heart_handler: %s", handler) |
|
109 | self.log.debug("heartbeat::new_heart_handler: %s", handler) | |
107 | self._new_handlers.add(handler) |
|
110 | self._new_handlers.add(handler) | |
108 |
|
111 | |||
109 | def add_heart_failure_handler(self, handler): |
|
112 | def add_heart_failure_handler(self, handler): | |
110 | """add a new handler for heart failure""" |
|
113 | """add a new handler for heart failure""" | |
111 | self.log.debug("heartbeat::new heart failure handler: %s", handler) |
|
114 | self.log.debug("heartbeat::new heart failure handler: %s", handler) | |
112 | self._failure_handlers.add(handler) |
|
115 | self._failure_handlers.add(handler) | |
113 |
|
116 | |||
114 | def beat(self): |
|
117 | def beat(self): | |
115 | self.pongstream.flush() |
|
118 | self.pongstream.flush() | |
116 | self.last_ping = self.lifetime |
|
119 | self.last_ping = self.lifetime | |
117 |
|
120 | |||
118 | toc = time.time() |
|
121 | toc = time.time() | |
119 | self.lifetime += toc-self.tic |
|
122 | self.lifetime += toc-self.tic | |
120 | self.tic = toc |
|
123 | self.tic = toc | |
121 | self.log.debug("heartbeat::sending %s", self.lifetime) |
|
124 | self.log.debug("heartbeat::sending %s", self.lifetime) | |
122 | goodhearts = self.hearts.intersection(self.responses) |
|
125 | goodhearts = self.hearts.intersection(self.responses) | |
123 | missed_beats = self.hearts.difference(goodhearts) |
|
126 | missed_beats = self.hearts.difference(goodhearts) | |
124 | heartfailures = self.on_probation.intersection(missed_beats) |
|
|||
125 | newhearts = self.responses.difference(goodhearts) |
|
127 | newhearts = self.responses.difference(goodhearts) | |
126 | map(self.handle_new_heart, newhearts) |
|
128 | map(self.handle_new_heart, newhearts) | |
|
129 | heartfailures, on_probation = self._check_missed(missed_beats, self.on_probation, | |||
|
130 | self.hearts) | |||
127 | map(self.handle_heart_failure, heartfailures) |
|
131 | map(self.handle_heart_failure, heartfailures) | |
128 |
self.on_probation = |
|
132 | self.on_probation = on_probation | |
129 | self.responses = set() |
|
133 | self.responses = set() | |
130 | #print self.on_probation, self.hearts |
|
134 | #print self.on_probation, self.hearts | |
131 | # self.log.debug("heartbeat::beat %.3f, %i beating hearts", self.lifetime, len(self.hearts)) |
|
135 | # self.log.debug("heartbeat::beat %.3f, %i beating hearts", self.lifetime, len(self.hearts)) | |
132 | self.pingstream.send(str_to_bytes(str(self.lifetime))) |
|
136 | self.pingstream.send(str_to_bytes(str(self.lifetime))) | |
133 | # flush stream to force immediate socket send |
|
137 | # flush stream to force immediate socket send | |
134 | self.pingstream.flush() |
|
138 | self.pingstream.flush() | |
135 |
|
139 | |||
|
140 | def _check_missed(self, missed_beats, on_probation, hearts): | |||
|
141 | """Update heartbeats on probation, identifying any that have too many misses. | |||
|
142 | """ | |||
|
143 | failures = [] | |||
|
144 | new_probation = {} | |||
|
145 | for cur_heart in (b for b in missed_beats if b in hearts): | |||
|
146 | miss_count = on_probation.get(cur_heart, 0) + 1 | |||
|
147 | self.log.info("heartbeat::missed %s : %s" % (cur_heart, miss_count)) | |||
|
148 | if miss_count > self.max_heartmonitor_misses: | |||
|
149 | failures.append(cur_heart) | |||
|
150 | else: | |||
|
151 | new_probation[cur_heart] = miss_count | |||
|
152 | return failures, new_probation | |||
|
153 | ||||
136 | def handle_new_heart(self, heart): |
|
154 | def handle_new_heart(self, heart): | |
137 | if self._new_handlers: |
|
155 | if self._new_handlers: | |
138 | for handler in self._new_handlers: |
|
156 | for handler in self._new_handlers: | |
139 | handler(heart) |
|
157 | handler(heart) | |
140 | else: |
|
158 | else: | |
141 | self.log.info("heartbeat::yay, got new heart %s!", heart) |
|
159 | self.log.info("heartbeat::yay, got new heart %s!", heart) | |
142 | self.hearts.add(heart) |
|
160 | self.hearts.add(heart) | |
143 |
|
161 | |||
144 | def handle_heart_failure(self, heart): |
|
162 | def handle_heart_failure(self, heart): | |
145 | if self._failure_handlers: |
|
163 | if self._failure_handlers: | |
146 | for handler in self._failure_handlers: |
|
164 | for handler in self._failure_handlers: | |
147 | try: |
|
165 | try: | |
148 | handler(heart) |
|
166 | handler(heart) | |
149 | except Exception as e: |
|
167 | except Exception as e: | |
150 | self.log.error("heartbeat::Bad Handler! %s", handler, exc_info=True) |
|
168 | self.log.error("heartbeat::Bad Handler! %s", handler, exc_info=True) | |
151 | pass |
|
169 | pass | |
152 | else: |
|
170 | else: | |
153 | self.log.info("heartbeat::Heart %s failed :(", heart) |
|
171 | self.log.info("heartbeat::Heart %s failed :(", heart) | |
154 | self.hearts.remove(heart) |
|
172 | self.hearts.remove(heart) | |
155 |
|
173 | |||
156 |
|
174 | |||
157 | @log_errors |
|
175 | @log_errors | |
158 | def handle_pong(self, msg): |
|
176 | def handle_pong(self, msg): | |
159 | "a heart just beat" |
|
177 | "a heart just beat" | |
160 | current = str_to_bytes(str(self.lifetime)) |
|
178 | current = str_to_bytes(str(self.lifetime)) | |
161 | last = str_to_bytes(str(self.last_ping)) |
|
179 | last = str_to_bytes(str(self.last_ping)) | |
162 | if msg[1] == current: |
|
180 | if msg[1] == current: | |
163 | delta = time.time()-self.tic |
|
181 | delta = time.time()-self.tic | |
164 | # self.log.debug("heartbeat::heart %r took %.2f ms to respond"%(msg[0], 1000*delta)) |
|
182 | # self.log.debug("heartbeat::heart %r took %.2f ms to respond"%(msg[0], 1000*delta)) | |
165 | self.responses.add(msg[0]) |
|
183 | self.responses.add(msg[0]) | |
166 | elif msg[1] == last: |
|
184 | elif msg[1] == last: | |
167 | delta = time.time()-self.tic + (self.lifetime-self.last_ping) |
|
185 | delta = time.time()-self.tic + (self.lifetime-self.last_ping) | |
168 | self.log.warn("heartbeat::heart %r missed a beat, and took %.2f ms to respond", msg[0], 1000*delta) |
|
186 | self.log.warn("heartbeat::heart %r missed a beat, and took %.2f ms to respond", msg[0], 1000*delta) | |
169 | self.responses.add(msg[0]) |
|
187 | self.responses.add(msg[0]) | |
170 | else: |
|
188 | else: | |
171 | self.log.warn("heartbeat::got bad heartbeat (possibly old?): %s (current=%.3f)", msg[1], self.lifetime) |
|
189 | self.log.warn("heartbeat::got bad heartbeat (possibly old?): %s (current=%.3f)", msg[1], self.lifetime) | |
172 |
|
190 |
@@ -1,18 +1,16 b'' | |||||
1 | #!/usr/bin/env python |
|
1 | #!/usr/bin/env python | |
2 | # encoding: utf-8 |
|
2 | # encoding: utf-8 | |
3 |
|
3 | |||
4 | #----------------------------------------------------------------------------- |
|
4 | #----------------------------------------------------------------------------- | |
5 | # Copyright (C) 2008-2009 The IPython Development Team |
|
5 | # Copyright (C) 2008-2009 The IPython Development Team | |
6 | # |
|
6 | # | |
7 | # Distributed under the terms of the BSD License. The full license is in |
|
7 | # Distributed under the terms of the BSD License. The full license is in | |
8 | # the file COPYING, distributed as part of this software. |
|
8 | # the file COPYING, distributed as part of this software. | |
9 | #----------------------------------------------------------------------------- |
|
9 | #----------------------------------------------------------------------------- | |
10 |
|
10 | |||
11 | #----------------------------------------------------------------------------- |
|
11 | #----------------------------------------------------------------------------- | |
12 | # Imports |
|
12 | # Imports | |
13 | #----------------------------------------------------------------------------- |
|
13 | #----------------------------------------------------------------------------- | |
14 |
|
||||
15 |
|
||||
16 | from IPython.parallel.apps.ipclusterapp import launch_new_instance |
|
14 | from IPython.parallel.apps.ipclusterapp import launch_new_instance | |
17 |
|
15 | |||
18 | launch_new_instance() |
|
16 | launch_new_instance() |
@@ -1,18 +1,16 b'' | |||||
1 | #!/usr/bin/env python |
|
1 | #!/usr/bin/env python | |
2 | # encoding: utf-8 |
|
2 | # encoding: utf-8 | |
3 |
|
3 | |||
4 | #----------------------------------------------------------------------------- |
|
4 | #----------------------------------------------------------------------------- | |
5 | # Copyright (C) 2008-2009 The IPython Development Team |
|
5 | # Copyright (C) 2008-2009 The IPython Development Team | |
6 | # |
|
6 | # | |
7 | # Distributed under the terms of the BSD License. The full license is in |
|
7 | # Distributed under the terms of the BSD License. The full license is in | |
8 | # the file COPYING, distributed as part of this software. |
|
8 | # the file COPYING, distributed as part of this software. | |
9 | #----------------------------------------------------------------------------- |
|
9 | #----------------------------------------------------------------------------- | |
10 |
|
10 | |||
11 | #----------------------------------------------------------------------------- |
|
11 | #----------------------------------------------------------------------------- | |
12 | # Imports |
|
12 | # Imports | |
13 | #----------------------------------------------------------------------------- |
|
13 | #----------------------------------------------------------------------------- | |
14 |
|
||||
15 |
|
||||
16 | from IPython.parallel.apps.ipcontrollerapp import launch_new_instance |
|
14 | from IPython.parallel.apps.ipcontrollerapp import launch_new_instance | |
17 |
|
15 | |||
18 | launch_new_instance() |
|
16 | launch_new_instance() |
@@ -1,20 +1,16 b'' | |||||
1 | #!/usr/bin/env python |
|
1 | #!/usr/bin/env python | |
2 | # encoding: utf-8 |
|
2 | # encoding: utf-8 | |
3 |
|
3 | |||
4 | #----------------------------------------------------------------------------- |
|
4 | #----------------------------------------------------------------------------- | |
5 | # Copyright (C) 2008-2009 The IPython Development Team |
|
5 | # Copyright (C) 2008-2009 The IPython Development Team | |
6 | # |
|
6 | # | |
7 | # Distributed under the terms of the BSD License. The full license is in |
|
7 | # Distributed under the terms of the BSD License. The full license is in | |
8 | # the file COPYING, distributed as part of this software. |
|
8 | # the file COPYING, distributed as part of this software. | |
9 | #----------------------------------------------------------------------------- |
|
9 | #----------------------------------------------------------------------------- | |
10 |
|
10 | |||
11 | #----------------------------------------------------------------------------- |
|
11 | #----------------------------------------------------------------------------- | |
12 | # Imports |
|
12 | # Imports | |
13 | #----------------------------------------------------------------------------- |
|
13 | #----------------------------------------------------------------------------- | |
14 |
|
||||
15 |
|
||||
16 | from IPython.parallel.apps.ipengineapp import launch_new_instance |
|
14 | from IPython.parallel.apps.ipengineapp import launch_new_instance | |
17 |
|
15 | |||
18 | launch_new_instance() |
|
16 | launch_new_instance() | |
19 |
|
||||
20 |
|
@@ -1,20 +1,16 b'' | |||||
1 | #!/usr/bin/env python |
|
1 | #!/usr/bin/env python | |
2 | # encoding: utf-8 |
|
2 | # encoding: utf-8 | |
3 |
|
3 | |||
4 | #----------------------------------------------------------------------------- |
|
4 | #----------------------------------------------------------------------------- | |
5 | # Copyright (C) 2008-2009 The IPython Development Team |
|
5 | # Copyright (C) 2008-2009 The IPython Development Team | |
6 | # |
|
6 | # | |
7 | # Distributed under the terms of the BSD License. The full license is in |
|
7 | # Distributed under the terms of the BSD License. The full license is in | |
8 | # the file COPYING, distributed as part of this software. |
|
8 | # the file COPYING, distributed as part of this software. | |
9 | #----------------------------------------------------------------------------- |
|
9 | #----------------------------------------------------------------------------- | |
10 |
|
10 | |||
11 | #----------------------------------------------------------------------------- |
|
11 | #----------------------------------------------------------------------------- | |
12 | # Imports |
|
12 | # Imports | |
13 | #----------------------------------------------------------------------------- |
|
13 | #----------------------------------------------------------------------------- | |
14 |
|
||||
15 |
|
||||
16 | from IPython.parallel.apps.iploggerapp import launch_new_instance |
|
14 | from IPython.parallel.apps.iploggerapp import launch_new_instance | |
17 |
|
15 | |||
18 | launch_new_instance() |
|
16 | launch_new_instance() | |
19 |
|
||||
20 |
|
1 | NO CONTENT: file was removed |
|
NO CONTENT: file was removed |
1 | NO CONTENT: file was removed |
|
NO CONTENT: file was removed |
1 | NO CONTENT: file was removed |
|
NO CONTENT: file was removed | ||
This diff has been collapsed as it changes many lines, (1319 lines changed) Show them Hide them |
1 | NO CONTENT: file was removed |
|
NO CONTENT: file was removed |
1 | NO CONTENT: file was removed |
|
NO CONTENT: file was removed |
1 | NO CONTENT: file was removed |
|
NO CONTENT: file was removed |
General Comments 0
You need to be logged in to leave comments.
Login now