##// END OF EJS Templates
Merge pull request #6305 from minrk/switch-kernel-close-ws...
Brian E. Granger -
r17695:f98e5939 merge
parent child Browse files
Show More
@@ -0,0 +1,43 b''
1
2 //
3 // Tests for the Session object
4 //
5
6 casper.notebook_test(function () {
7 this.evaluate(function () {
8 var kernel = IPython.notebook.session.kernel;
9 IPython._channels = [
10 kernel.shell_channel,
11 kernel.iopub_channel,
12 kernel.stdin_channel
13 ];
14 IPython.notebook.session.delete();
15 });
16
17 this.waitFor(function () {
18 return this.evaluate(function(){
19 for (var i=0; i < IPython._channels.length; i++) {
20 var ws = IPython._channels[i];
21 if (ws.readyState !== ws.CLOSED) {
22 return false;
23 }
24 }
25 return true;
26 });
27 });
28
29 this.then(function () {
30 var states = this.evaluate(function() {
31 var states = [];
32 for (var i = 0; i < IPython._channels.length; i++) {
33 states.push(IPython._channels[i].readyState);
34 }
35 return states;
36 });
37
38 for (var i = 0; i < states.length; i++) {
39 this.test.assertEquals(states[i], WebSocket.CLOSED,
40 "Session.delete closes websockets[" + i + "]");
41 }
42 });
43 });
@@ -1,225 +1,234 b''
1 """Tornado handlers for kernels."""
1 """Tornado handlers for kernels."""
2
2
3 # Copyright (c) IPython Development Team.
3 # Copyright (c) IPython Development Team.
4 # Distributed under the terms of the Modified BSD License.
4 # Distributed under the terms of the Modified BSD License.
5
5
6 import json
6 import json
7 import logging
7 import logging
8 from tornado import web
8 from tornado import web
9
9
10 from IPython.utils.jsonutil import date_default
10 from IPython.utils.jsonutil import date_default
11 from IPython.utils.py3compat import string_types
11 from IPython.utils.py3compat import string_types
12 from IPython.html.utils import url_path_join, url_escape
12 from IPython.html.utils import url_path_join, url_escape
13
13
14 from ...base.handlers import IPythonHandler, json_errors
14 from ...base.handlers import IPythonHandler, json_errors
15 from ...base.zmqhandlers import AuthenticatedZMQStreamHandler
15 from ...base.zmqhandlers import AuthenticatedZMQStreamHandler
16
16
17 from IPython.core.release import kernel_protocol_version
17 from IPython.core.release import kernel_protocol_version
18
18
19 class MainKernelHandler(IPythonHandler):
19 class MainKernelHandler(IPythonHandler):
20
20
21 @web.authenticated
21 @web.authenticated
22 @json_errors
22 @json_errors
23 def get(self):
23 def get(self):
24 km = self.kernel_manager
24 km = self.kernel_manager
25 self.finish(json.dumps(km.list_kernels()))
25 self.finish(json.dumps(km.list_kernels()))
26
26
27 @web.authenticated
27 @web.authenticated
28 @json_errors
28 @json_errors
29 def post(self):
29 def post(self):
30 model = self.get_json_body()
30 model = self.get_json_body()
31 if model is None:
31 if model is None:
32 raise web.HTTPError(400, "No JSON data provided")
32 raise web.HTTPError(400, "No JSON data provided")
33 try:
33 try:
34 name = model['name']
34 name = model['name']
35 except KeyError:
35 except KeyError:
36 raise web.HTTPError(400, "Missing field in JSON data: name")
36 raise web.HTTPError(400, "Missing field in JSON data: name")
37
37
38 km = self.kernel_manager
38 km = self.kernel_manager
39 kernel_id = km.start_kernel(kernel_name=name)
39 kernel_id = km.start_kernel(kernel_name=name)
40 model = km.kernel_model(kernel_id)
40 model = km.kernel_model(kernel_id)
41 location = url_path_join(self.base_url, 'api', 'kernels', kernel_id)
41 location = url_path_join(self.base_url, 'api', 'kernels', kernel_id)
42 self.set_header('Location', url_escape(location))
42 self.set_header('Location', url_escape(location))
43 self.set_status(201)
43 self.set_status(201)
44 self.finish(json.dumps(model))
44 self.finish(json.dumps(model))
45
45
46
46
47 class KernelHandler(IPythonHandler):
47 class KernelHandler(IPythonHandler):
48
48
49 SUPPORTED_METHODS = ('DELETE', 'GET')
49 SUPPORTED_METHODS = ('DELETE', 'GET')
50
50
51 @web.authenticated
51 @web.authenticated
52 @json_errors
52 @json_errors
53 def get(self, kernel_id):
53 def get(self, kernel_id):
54 km = self.kernel_manager
54 km = self.kernel_manager
55 km._check_kernel_id(kernel_id)
55 km._check_kernel_id(kernel_id)
56 model = km.kernel_model(kernel_id)
56 model = km.kernel_model(kernel_id)
57 self.finish(json.dumps(model))
57 self.finish(json.dumps(model))
58
58
59 @web.authenticated
59 @web.authenticated
60 @json_errors
60 @json_errors
61 def delete(self, kernel_id):
61 def delete(self, kernel_id):
62 km = self.kernel_manager
62 km = self.kernel_manager
63 km.shutdown_kernel(kernel_id)
63 km.shutdown_kernel(kernel_id)
64 self.set_status(204)
64 self.set_status(204)
65 self.finish()
65 self.finish()
66
66
67
67
68 class KernelActionHandler(IPythonHandler):
68 class KernelActionHandler(IPythonHandler):
69
69
70 @web.authenticated
70 @web.authenticated
71 @json_errors
71 @json_errors
72 def post(self, kernel_id, action):
72 def post(self, kernel_id, action):
73 km = self.kernel_manager
73 km = self.kernel_manager
74 if action == 'interrupt':
74 if action == 'interrupt':
75 km.interrupt_kernel(kernel_id)
75 km.interrupt_kernel(kernel_id)
76 self.set_status(204)
76 self.set_status(204)
77 if action == 'restart':
77 if action == 'restart':
78 km.restart_kernel(kernel_id)
78 km.restart_kernel(kernel_id)
79 model = km.kernel_model(kernel_id)
79 model = km.kernel_model(kernel_id)
80 self.set_header('Location', '{0}api/kernels/{1}'.format(self.base_url, kernel_id))
80 self.set_header('Location', '{0}api/kernels/{1}'.format(self.base_url, kernel_id))
81 self.write(json.dumps(model))
81 self.write(json.dumps(model))
82 self.finish()
82 self.finish()
83
83
84
84
85 class ZMQChannelHandler(AuthenticatedZMQStreamHandler):
85 class ZMQChannelHandler(AuthenticatedZMQStreamHandler):
86
86
87 def __repr__(self):
88 return "%s(%s)" % (self.__class__.__name__, getattr(self, 'kernel_id', 'uninitialized'))
89
87 def create_stream(self):
90 def create_stream(self):
88 km = self.kernel_manager
91 km = self.kernel_manager
89 meth = getattr(km, 'connect_%s' % self.channel)
92 meth = getattr(km, 'connect_%s' % self.channel)
90 self.zmq_stream = meth(self.kernel_id, identity=self.session.bsession)
93 self.zmq_stream = meth(self.kernel_id, identity=self.session.bsession)
91 # Create a kernel_info channel to query the kernel protocol version.
94 # Create a kernel_info channel to query the kernel protocol version.
92 # This channel will be closed after the kernel_info reply is received.
95 # This channel will be closed after the kernel_info reply is received.
93 self.kernel_info_channel = None
96 self.kernel_info_channel = None
94 self.kernel_info_channel = km.connect_shell(self.kernel_id)
97 self.kernel_info_channel = km.connect_shell(self.kernel_id)
95 self.kernel_info_channel.on_recv(self._handle_kernel_info_reply)
98 self.kernel_info_channel.on_recv(self._handle_kernel_info_reply)
96 self._request_kernel_info()
99 self._request_kernel_info()
97
100
98 def _request_kernel_info(self):
101 def _request_kernel_info(self):
99 """send a request for kernel_info"""
102 """send a request for kernel_info"""
100 self.log.debug("requesting kernel info")
103 self.log.debug("requesting kernel info")
101 self.session.send(self.kernel_info_channel, "kernel_info_request")
104 self.session.send(self.kernel_info_channel, "kernel_info_request")
102
105
103 def _handle_kernel_info_reply(self, msg):
106 def _handle_kernel_info_reply(self, msg):
104 """process the kernel_info_reply
107 """process the kernel_info_reply
105
108
106 enabling msg spec adaptation, if necessary
109 enabling msg spec adaptation, if necessary
107 """
110 """
108 idents,msg = self.session.feed_identities(msg)
111 idents,msg = self.session.feed_identities(msg)
109 try:
112 try:
110 msg = self.session.unserialize(msg)
113 msg = self.session.unserialize(msg)
111 except:
114 except:
112 self.log.error("Bad kernel_info reply", exc_info=True)
115 self.log.error("Bad kernel_info reply", exc_info=True)
113 self._request_kernel_info()
116 self._request_kernel_info()
114 return
117 return
115 else:
118 else:
116 if msg['msg_type'] != 'kernel_info_reply' or 'protocol_version' not in msg['content']:
119 if msg['msg_type'] != 'kernel_info_reply' or 'protocol_version' not in msg['content']:
117 self.log.error("Kernel info request failed, assuming current %s", msg['content'])
120 self.log.error("Kernel info request failed, assuming current %s", msg['content'])
118 else:
121 else:
119 protocol_version = msg['content']['protocol_version']
122 protocol_version = msg['content']['protocol_version']
120 if protocol_version != kernel_protocol_version:
123 if protocol_version != kernel_protocol_version:
121 self.session.adapt_version = int(protocol_version.split('.')[0])
124 self.session.adapt_version = int(protocol_version.split('.')[0])
122 self.log.info("adapting kernel to %s" % protocol_version)
125 self.log.info("adapting kernel to %s" % protocol_version)
123 self.kernel_info_channel.close()
126 self.kernel_info_channel.close()
124 self.kernel_info_channel = None
127 self.kernel_info_channel = None
125
128
126
129
127 def initialize(self, *args, **kwargs):
130 def initialize(self, *args, **kwargs):
128 self.zmq_stream = None
131 self.zmq_stream = None
129
132
130 def on_first_message(self, msg):
133 def on_first_message(self, msg):
131 try:
134 try:
132 super(ZMQChannelHandler, self).on_first_message(msg)
135 super(ZMQChannelHandler, self).on_first_message(msg)
133 except web.HTTPError:
136 except web.HTTPError:
134 self.close()
137 self.close()
135 return
138 return
136 try:
139 try:
137 self.create_stream()
140 self.create_stream()
138 except web.HTTPError:
141 except web.HTTPError:
139 # WebSockets don't response to traditional error codes so we
142 # WebSockets don't response to traditional error codes so we
140 # close the connection.
143 # close the connection.
141 if not self.stream.closed():
144 if not self.stream.closed():
142 self.stream.close()
145 self.stream.close()
143 self.close()
146 self.close()
144 else:
147 else:
145 self.zmq_stream.on_recv(self._on_zmq_reply)
148 self.zmq_stream.on_recv(self._on_zmq_reply)
146
149
147 def on_message(self, msg):
150 def on_message(self, msg):
151 if self.zmq_stream is None:
152 return
153 elif self.zmq_stream.closed():
154 self.log.info("%s closed, closing websocket.", self)
155 self.close()
156 return
148 msg = json.loads(msg)
157 msg = json.loads(msg)
149 self.session.send(self.zmq_stream, msg)
158 self.session.send(self.zmq_stream, msg)
150
159
151 def on_close(self):
160 def on_close(self):
152 # This method can be called twice, once by self.kernel_died and once
161 # This method can be called twice, once by self.kernel_died and once
153 # from the WebSocket close event. If the WebSocket connection is
162 # from the WebSocket close event. If the WebSocket connection is
154 # closed before the ZMQ streams are setup, they could be None.
163 # closed before the ZMQ streams are setup, they could be None.
155 if self.zmq_stream is not None and not self.zmq_stream.closed():
164 if self.zmq_stream is not None and not self.zmq_stream.closed():
156 self.zmq_stream.on_recv(None)
165 self.zmq_stream.on_recv(None)
157 # close the socket directly, don't wait for the stream
166 # close the socket directly, don't wait for the stream
158 socket = self.zmq_stream.socket
167 socket = self.zmq_stream.socket
159 self.zmq_stream.close()
168 self.zmq_stream.close()
160 socket.close()
169 socket.close()
161
170
162
171
163 class IOPubHandler(ZMQChannelHandler):
172 class IOPubHandler(ZMQChannelHandler):
164 channel = 'iopub'
173 channel = 'iopub'
165
174
166 def create_stream(self):
175 def create_stream(self):
167 super(IOPubHandler, self).create_stream()
176 super(IOPubHandler, self).create_stream()
168 km = self.kernel_manager
177 km = self.kernel_manager
169 km.add_restart_callback(self.kernel_id, self.on_kernel_restarted)
178 km.add_restart_callback(self.kernel_id, self.on_kernel_restarted)
170 km.add_restart_callback(self.kernel_id, self.on_restart_failed, 'dead')
179 km.add_restart_callback(self.kernel_id, self.on_restart_failed, 'dead')
171
180
172 def on_close(self):
181 def on_close(self):
173 km = self.kernel_manager
182 km = self.kernel_manager
174 if self.kernel_id in km:
183 if self.kernel_id in km:
175 km.remove_restart_callback(
184 km.remove_restart_callback(
176 self.kernel_id, self.on_kernel_restarted,
185 self.kernel_id, self.on_kernel_restarted,
177 )
186 )
178 km.remove_restart_callback(
187 km.remove_restart_callback(
179 self.kernel_id, self.on_restart_failed, 'dead',
188 self.kernel_id, self.on_restart_failed, 'dead',
180 )
189 )
181 super(IOPubHandler, self).on_close()
190 super(IOPubHandler, self).on_close()
182
191
183 def _send_status_message(self, status):
192 def _send_status_message(self, status):
184 msg = self.session.msg("status",
193 msg = self.session.msg("status",
185 {'execution_state': status}
194 {'execution_state': status}
186 )
195 )
187 self.write_message(json.dumps(msg, default=date_default))
196 self.write_message(json.dumps(msg, default=date_default))
188
197
189 def on_kernel_restarted(self):
198 def on_kernel_restarted(self):
190 logging.warn("kernel %s restarted", self.kernel_id)
199 logging.warn("kernel %s restarted", self.kernel_id)
191 self._send_status_message('restarting')
200 self._send_status_message('restarting')
192
201
193 def on_restart_failed(self):
202 def on_restart_failed(self):
194 logging.error("kernel %s restarted failed!", self.kernel_id)
203 logging.error("kernel %s restarted failed!", self.kernel_id)
195 self._send_status_message('dead')
204 self._send_status_message('dead')
196
205
197 def on_message(self, msg):
206 def on_message(self, msg):
198 """IOPub messages make no sense"""
207 """IOPub messages make no sense"""
199 pass
208 pass
200
209
201
210
202 class ShellHandler(ZMQChannelHandler):
211 class ShellHandler(ZMQChannelHandler):
203 channel = 'shell'
212 channel = 'shell'
204
213
205
214
206 class StdinHandler(ZMQChannelHandler):
215 class StdinHandler(ZMQChannelHandler):
207 channel = 'stdin'
216 channel = 'stdin'
208
217
209
218
210 #-----------------------------------------------------------------------------
219 #-----------------------------------------------------------------------------
211 # URL to handler mappings
220 # URL to handler mappings
212 #-----------------------------------------------------------------------------
221 #-----------------------------------------------------------------------------
213
222
214
223
215 _kernel_id_regex = r"(?P<kernel_id>\w+-\w+-\w+-\w+-\w+)"
224 _kernel_id_regex = r"(?P<kernel_id>\w+-\w+-\w+-\w+-\w+)"
216 _kernel_action_regex = r"(?P<action>restart|interrupt)"
225 _kernel_action_regex = r"(?P<action>restart|interrupt)"
217
226
218 default_handlers = [
227 default_handlers = [
219 (r"/api/kernels", MainKernelHandler),
228 (r"/api/kernels", MainKernelHandler),
220 (r"/api/kernels/%s" % _kernel_id_regex, KernelHandler),
229 (r"/api/kernels/%s" % _kernel_id_regex, KernelHandler),
221 (r"/api/kernels/%s/%s" % (_kernel_id_regex, _kernel_action_regex), KernelActionHandler),
230 (r"/api/kernels/%s/%s" % (_kernel_id_regex, _kernel_action_regex), KernelActionHandler),
222 (r"/api/kernels/%s/iopub" % _kernel_id_regex, IOPubHandler),
231 (r"/api/kernels/%s/iopub" % _kernel_id_regex, IOPubHandler),
223 (r"/api/kernels/%s/shell" % _kernel_id_regex, ShellHandler),
232 (r"/api/kernels/%s/shell" % _kernel_id_regex, ShellHandler),
224 (r"/api/kernels/%s/stdin" % _kernel_id_regex, StdinHandler)
233 (r"/api/kernels/%s/stdin" % _kernel_id_regex, StdinHandler)
225 ]
234 ]
@@ -1,81 +1,91 b''
1 // Copyright (c) IPython Development Team.
1 // Copyright (c) IPython Development Team.
2 // Distributed under the terms of the Modified BSD License.
2 // Distributed under the terms of the Modified BSD License.
3
3
4 define([
4 define([
5 'base/js/namespace',
5 'base/js/namespace',
6 'jquery',
6 'jquery',
7 'base/js/utils',
7 'base/js/utils',
8 ], function(IPython, $, utils) {
8 ], function(IPython, $, utils) {
9 "use strict";
9 "use strict";
10
10
11 var KernelSelector = function(selector, notebook) {
11 var KernelSelector = function(selector, notebook) {
12 this.selector = selector;
12 this.selector = selector;
13 this.notebook = notebook;
13 this.notebook = notebook;
14 this.events = notebook.events;
14 this.events = notebook.events;
15 this.current_selection = notebook.default_kernel_name;
15 this.current_selection = notebook.default_kernel_name;
16 this.kernelspecs = {};
16 this.kernelspecs = {};
17 if (this.selector !== undefined) {
17 if (this.selector !== undefined) {
18 this.element = $(selector);
18 this.element = $(selector);
19 this.request_kernelspecs();
19 this.request_kernelspecs();
20 }
20 }
21 this.bind_events();
21 this.bind_events();
22 // Make the object globally available for user convenience & inspection
22 // Make the object globally available for user convenience & inspection
23 IPython.kernelselector = this;
23 IPython.kernelselector = this;
24 };
24 };
25
25
26 KernelSelector.prototype.request_kernelspecs = function() {
26 KernelSelector.prototype.request_kernelspecs = function() {
27 var url = utils.url_join_encode(this.notebook.base_url, 'api/kernelspecs');
27 var url = utils.url_join_encode(this.notebook.base_url, 'api/kernelspecs');
28 $.ajax(url, {success: $.proxy(this._got_kernelspecs, this)});
28 $.ajax(url, {success: $.proxy(this._got_kernelspecs, this)});
29 };
29 };
30
30
31 KernelSelector.prototype._got_kernelspecs = function(data, status, xhr) {
31 KernelSelector.prototype._got_kernelspecs = function(data, status, xhr) {
32 this.kernelspecs = {};
32 this.kernelspecs = {};
33 var menu = this.element.find("#kernel_selector");
33 var menu = this.element.find("#kernel_selector");
34 var change_kernel_submenu = $("#menu-change-kernel-submenu");
34 var change_kernel_submenu = $("#menu-change-kernel-submenu");
35 for (var i = 0; i < data.length; i++) {
35 for (var i = 0; i < data.length; i++) {
36 var ks = data[i];
36 var ks = data[i];
37 this.kernelspecs[ks.name] = ks;
37 this.kernelspecs[ks.name] = ks;
38 var ksentry = $("<li>").attr("id", "kernel-" +ks.name).append($('<a>')
38 var ksentry = $("<li>").attr("id", "kernel-" +ks.name).append($('<a>')
39 .attr('href', '#')
39 .attr('href', '#')
40 .click($.proxy(this.change_kernel, this, ks.name))
40 .click($.proxy(this.change_kernel, this, ks.name))
41 .text(ks.display_name));
41 .text(ks.display_name));
42 menu.append(ksentry);
42 menu.append(ksentry);
43
43
44 var ks_submenu_entry = $("<li>").attr("id", "kernel-submenu-"+ks.name).append($('<a>')
44 var ks_submenu_entry = $("<li>").attr("id", "kernel-submenu-"+ks.name).append($('<a>')
45 .attr('href', '#')
45 .attr('href', '#')
46 .click($.proxy(this.change_kernel, this, ks.name))
46 .click($.proxy(this.change_kernel, this, ks.name))
47 .text(ks.display_name));
47 .text(ks.display_name));
48 change_kernel_submenu.append(ks_submenu_entry);
48 change_kernel_submenu.append(ks_submenu_entry);
49 }
49 }
50 };
50 };
51
51
52 KernelSelector.prototype.change_kernel = function(kernel_name) {
52 KernelSelector.prototype.change_kernel = function(kernel_name) {
53 if (kernel_name === this.current_selection) {
53 if (kernel_name === this.current_selection) {
54 return;
54 return;
55 }
55 }
56 var ks = this.kernelspecs[kernel_name];
56 var ks = this.kernelspecs[kernel_name];
57 try {
58 this.notebook.start_session(kernel_name);
59 } catch (e) {
60 if (e.name === 'SessionAlreadyStarting') {
61 console.log("Cannot change kernel while waiting for pending session start.");
62 } else {
63 // unhandled error
64 throw e;
65 }
66 // only trigger spec_changed if change was successful
67 return;
68 }
57 this.events.trigger('spec_changed.Kernel', ks);
69 this.events.trigger('spec_changed.Kernel', ks);
58 this.notebook.session.delete();
59 this.notebook.start_session(kernel_name);
60 };
70 };
61
71
62 KernelSelector.prototype.bind_events = function() {
72 KernelSelector.prototype.bind_events = function() {
63 var that = this;
73 var that = this;
64 this.events.on('spec_changed.Kernel', function(event, data) {
74 this.events.on('spec_changed.Kernel', function(event, data) {
65 that.current_selection = data.name;
75 that.current_selection = data.name;
66 that.element.find("#current_kernel_spec").find('.kernel_name').text(data.display_name);
76 that.element.find("#current_kernel_spec").find('.kernel_name').text(data.display_name);
67 });
77 });
68
78
69 this.events.on('started.Session', function(events, session) {
79 this.events.on('started.Session', function(events, session) {
70 if (session.kernel_name !== that.current_selection) {
80 if (session.kernel_name !== that.current_selection) {
71 // If we created a 'python' session, we only know if it's Python
81 // If we created a 'python' session, we only know if it's Python
72 // 3 or 2 on the server's reply, so we fire the event again to
82 // 3 or 2 on the server's reply, so we fire the event again to
73 // set things up.
83 // set things up.
74 var ks = that.kernelspecs[session.kernel_name];
84 var ks = that.kernelspecs[session.kernel_name];
75 that.events.trigger('spec_changed.Kernel', ks);
85 that.events.trigger('spec_changed.Kernel', ks);
76 }
86 }
77 });
87 });
78 };
88 };
79
89
80 return {'KernelSelector': KernelSelector};
90 return {'KernelSelector': KernelSelector};
81 });
91 });
@@ -1,351 +1,352 b''
1 // Copyright (c) IPython Development Team.
1 // Copyright (c) IPython Development Team.
2 // Distributed under the terms of the Modified BSD License.
2 // Distributed under the terms of the Modified BSD License.
3
3
4 define([
4 define([
5 'base/js/namespace',
5 'base/js/namespace',
6 'jquery',
6 'jquery',
7 'base/js/utils',
7 'base/js/utils',
8 'notebook/js/tour',
8 'notebook/js/tour',
9 'bootstrap',
9 'bootstrap',
10 ], function(IPython, $, utils, tour) {
10 ], function(IPython, $, utils, tour) {
11 "use strict";
11 "use strict";
12
12
13 var MenuBar = function (selector, options) {
13 var MenuBar = function (selector, options) {
14 // Constructor
14 // Constructor
15 //
15 //
16 // A MenuBar Class to generate the menubar of IPython notebook
16 // A MenuBar Class to generate the menubar of IPython notebook
17 //
17 //
18 // Parameters:
18 // Parameters:
19 // selector: string
19 // selector: string
20 // options: dictionary
20 // options: dictionary
21 // Dictionary of keyword arguments.
21 // Dictionary of keyword arguments.
22 // notebook: Notebook instance
22 // notebook: Notebook instance
23 // layout_manager: LayoutManager instance
23 // layout_manager: LayoutManager instance
24 // events: $(Events) instance
24 // events: $(Events) instance
25 // save_widget: SaveWidget instance
25 // save_widget: SaveWidget instance
26 // quick_help: QuickHelp instance
26 // quick_help: QuickHelp instance
27 // base_url : string
27 // base_url : string
28 // notebook_path : string
28 // notebook_path : string
29 // notebook_name : string
29 // notebook_name : string
30 options = options || {};
30 options = options || {};
31 this.base_url = options.base_url || utils.get_body_data("baseUrl");
31 this.base_url = options.base_url || utils.get_body_data("baseUrl");
32 this.selector = selector;
32 this.selector = selector;
33 this.notebook = options.notebook;
33 this.notebook = options.notebook;
34 this.layout_manager = options.layout_manager;
34 this.layout_manager = options.layout_manager;
35 this.events = options.events;
35 this.events = options.events;
36 this.save_widget = options.save_widget;
36 this.save_widget = options.save_widget;
37 this.quick_help = options.quick_help;
37 this.quick_help = options.quick_help;
38
38
39 try {
39 try {
40 this.tour = new tour.Tour(this.notebook, this.events);
40 this.tour = new tour.Tour(this.notebook, this.events);
41 } catch (e) {
41 } catch (e) {
42 this.tour = undefined;
42 this.tour = undefined;
43 console.log("Failed to instantiate Notebook Tour", e);
43 console.log("Failed to instantiate Notebook Tour", e);
44 }
44 }
45
45
46 if (this.selector !== undefined) {
46 if (this.selector !== undefined) {
47 this.element = $(selector);
47 this.element = $(selector);
48 this.style();
48 this.style();
49 this.bind_events();
49 this.bind_events();
50 }
50 }
51 };
51 };
52
52
53 // TODO: This has definitively nothing to do with style ...
53 // TODO: This has definitively nothing to do with style ...
54 MenuBar.prototype.style = function () {
54 MenuBar.prototype.style = function () {
55 var that = this;
55 var that = this;
56 this.element.find("li").click(function (event, ui) {
56 this.element.find("li").click(function (event, ui) {
57 // The selected cell loses focus when the menu is entered, so we
57 // The selected cell loses focus when the menu is entered, so we
58 // re-select it upon selection.
58 // re-select it upon selection.
59 var i = that.notebook.get_selected_index();
59 var i = that.notebook.get_selected_index();
60 that.notebook.select(i);
60 that.notebook.select(i);
61 }
61 }
62 );
62 );
63 };
63 };
64
64
65 MenuBar.prototype._nbconvert = function (format, download) {
65 MenuBar.prototype._nbconvert = function (format, download) {
66 download = download || false;
66 download = download || false;
67 var notebook_path = this.notebook.notebook_path;
67 var notebook_path = this.notebook.notebook_path;
68 var notebook_name = this.notebook.notebook_name;
68 var notebook_name = this.notebook.notebook_name;
69 if (this.notebook.dirty) {
69 if (this.notebook.dirty) {
70 this.notebook.save_notebook({async : false});
70 this.notebook.save_notebook({async : false});
71 }
71 }
72 var url = utils.url_join_encode(
72 var url = utils.url_join_encode(
73 this.base_url,
73 this.base_url,
74 'nbconvert',
74 'nbconvert',
75 format,
75 format,
76 notebook_path,
76 notebook_path,
77 notebook_name
77 notebook_name
78 ) + "?download=" + download.toString();
78 ) + "?download=" + download.toString();
79
79
80 window.open(url);
80 window.open(url);
81 };
81 };
82
82
83 MenuBar.prototype.bind_events = function () {
83 MenuBar.prototype.bind_events = function () {
84 // File
84 // File
85 var that = this;
85 var that = this;
86 this.element.find('#new_notebook').click(function () {
86 this.element.find('#new_notebook').click(function () {
87 that.notebook.new_notebook();
87 that.notebook.new_notebook();
88 });
88 });
89 this.element.find('#open_notebook').click(function () {
89 this.element.find('#open_notebook').click(function () {
90 window.open(utils.url_join_encode(
90 window.open(utils.url_join_encode(
91 that.notebook.base_url,
91 that.notebook.base_url,
92 'tree',
92 'tree',
93 that.notebook.notebook_path
93 that.notebook.notebook_path
94 ));
94 ));
95 });
95 });
96 this.element.find('#copy_notebook').click(function () {
96 this.element.find('#copy_notebook').click(function () {
97 that.notebook.copy_notebook();
97 that.notebook.copy_notebook();
98 return false;
98 return false;
99 });
99 });
100 this.element.find('#download_ipynb').click(function () {
100 this.element.find('#download_ipynb').click(function () {
101 var base_url = that.notebook.base_url;
101 var base_url = that.notebook.base_url;
102 var notebook_path = that.notebook.notebook_path;
102 var notebook_path = that.notebook.notebook_path;
103 var notebook_name = that.notebook.notebook_name;
103 var notebook_name = that.notebook.notebook_name;
104 if (that.notebook.dirty) {
104 if (that.notebook.dirty) {
105 that.notebook.save_notebook({async : false});
105 that.notebook.save_notebook({async : false});
106 }
106 }
107
107
108 var url = utils.url_join_encode(
108 var url = utils.url_join_encode(
109 base_url,
109 base_url,
110 'files',
110 'files',
111 notebook_path,
111 notebook_path,
112 notebook_name
112 notebook_name
113 );
113 );
114 window.location.assign(url);
114 window.location.assign(url);
115 });
115 });
116
116
117 this.element.find('#print_preview').click(function () {
117 this.element.find('#print_preview').click(function () {
118 that._nbconvert('html', false);
118 that._nbconvert('html', false);
119 });
119 });
120
120
121 this.element.find('#download_py').click(function () {
121 this.element.find('#download_py').click(function () {
122 that._nbconvert('python', true);
122 that._nbconvert('python', true);
123 });
123 });
124
124
125 this.element.find('#download_html').click(function () {
125 this.element.find('#download_html').click(function () {
126 that._nbconvert('html', true);
126 that._nbconvert('html', true);
127 });
127 });
128
128
129 this.element.find('#download_rst').click(function () {
129 this.element.find('#download_rst').click(function () {
130 that._nbconvert('rst', true);
130 that._nbconvert('rst', true);
131 });
131 });
132
132
133 this.element.find('#download_pdf').click(function () {
133 this.element.find('#download_pdf').click(function () {
134 that._nbconvert('pdf', true);
134 that._nbconvert('pdf', true);
135 });
135 });
136
136
137 this.element.find('#rename_notebook').click(function () {
137 this.element.find('#rename_notebook').click(function () {
138 that.save_widget.rename_notebook({notebook: that.notebook});
138 that.save_widget.rename_notebook({notebook: that.notebook});
139 });
139 });
140 this.element.find('#save_checkpoint').click(function () {
140 this.element.find('#save_checkpoint').click(function () {
141 that.notebook.save_checkpoint();
141 that.notebook.save_checkpoint();
142 });
142 });
143 this.element.find('#restore_checkpoint').click(function () {
143 this.element.find('#restore_checkpoint').click(function () {
144 });
144 });
145 this.element.find('#trust_notebook').click(function () {
145 this.element.find('#trust_notebook').click(function () {
146 that.notebook.trust_notebook();
146 that.notebook.trust_notebook();
147 });
147 });
148 this.events.on('trust_changed.Notebook', function (event, trusted) {
148 this.events.on('trust_changed.Notebook', function (event, trusted) {
149 if (trusted) {
149 if (trusted) {
150 that.element.find('#trust_notebook')
150 that.element.find('#trust_notebook')
151 .addClass("disabled")
151 .addClass("disabled")
152 .find("a").text("Trusted Notebook");
152 .find("a").text("Trusted Notebook");
153 } else {
153 } else {
154 that.element.find('#trust_notebook')
154 that.element.find('#trust_notebook')
155 .removeClass("disabled")
155 .removeClass("disabled")
156 .find("a").text("Trust Notebook");
156 .find("a").text("Trust Notebook");
157 }
157 }
158 });
158 });
159 this.element.find('#kill_and_exit').click(function () {
159 this.element.find('#kill_and_exit').click(function () {
160 that.notebook.session.delete();
160 var close_window = function () {
161 setTimeout(function(){
162 // allow closing of new tabs in Chromium, impossible in FF
161 // allow closing of new tabs in Chromium, impossible in FF
163 window.open('', '_self', '');
162 window.open('', '_self', '');
164 window.close();
163 window.close();
165 }, 500);
164 };
165 // finish with close on success or failure
166 that.notebook.session.delete(close_window, close_window);
166 });
167 });
167 // Edit
168 // Edit
168 this.element.find('#cut_cell').click(function () {
169 this.element.find('#cut_cell').click(function () {
169 that.notebook.cut_cell();
170 that.notebook.cut_cell();
170 });
171 });
171 this.element.find('#copy_cell').click(function () {
172 this.element.find('#copy_cell').click(function () {
172 that.notebook.copy_cell();
173 that.notebook.copy_cell();
173 });
174 });
174 this.element.find('#delete_cell').click(function () {
175 this.element.find('#delete_cell').click(function () {
175 that.notebook.delete_cell();
176 that.notebook.delete_cell();
176 });
177 });
177 this.element.find('#undelete_cell').click(function () {
178 this.element.find('#undelete_cell').click(function () {
178 that.notebook.undelete_cell();
179 that.notebook.undelete_cell();
179 });
180 });
180 this.element.find('#split_cell').click(function () {
181 this.element.find('#split_cell').click(function () {
181 that.notebook.split_cell();
182 that.notebook.split_cell();
182 });
183 });
183 this.element.find('#merge_cell_above').click(function () {
184 this.element.find('#merge_cell_above').click(function () {
184 that.notebook.merge_cell_above();
185 that.notebook.merge_cell_above();
185 });
186 });
186 this.element.find('#merge_cell_below').click(function () {
187 this.element.find('#merge_cell_below').click(function () {
187 that.notebook.merge_cell_below();
188 that.notebook.merge_cell_below();
188 });
189 });
189 this.element.find('#move_cell_up').click(function () {
190 this.element.find('#move_cell_up').click(function () {
190 that.notebook.move_cell_up();
191 that.notebook.move_cell_up();
191 });
192 });
192 this.element.find('#move_cell_down').click(function () {
193 this.element.find('#move_cell_down').click(function () {
193 that.notebook.move_cell_down();
194 that.notebook.move_cell_down();
194 });
195 });
195 this.element.find('#edit_nb_metadata').click(function () {
196 this.element.find('#edit_nb_metadata').click(function () {
196 that.notebook.edit_metadata({
197 that.notebook.edit_metadata({
197 notebook: that.notebook,
198 notebook: that.notebook,
198 keyboard_manager: that.notebook.keyboard_manager});
199 keyboard_manager: that.notebook.keyboard_manager});
199 });
200 });
200
201
201 // View
202 // View
202 this.element.find('#toggle_header').click(function () {
203 this.element.find('#toggle_header').click(function () {
203 $('div#header').toggle();
204 $('div#header').toggle();
204 that.layout_manager.do_resize();
205 that.layout_manager.do_resize();
205 });
206 });
206 this.element.find('#toggle_toolbar').click(function () {
207 this.element.find('#toggle_toolbar').click(function () {
207 $('div#maintoolbar').toggle();
208 $('div#maintoolbar').toggle();
208 that.layout_manager.do_resize();
209 that.layout_manager.do_resize();
209 });
210 });
210 // Insert
211 // Insert
211 this.element.find('#insert_cell_above').click(function () {
212 this.element.find('#insert_cell_above').click(function () {
212 that.notebook.insert_cell_above('code');
213 that.notebook.insert_cell_above('code');
213 that.notebook.select_prev();
214 that.notebook.select_prev();
214 });
215 });
215 this.element.find('#insert_cell_below').click(function () {
216 this.element.find('#insert_cell_below').click(function () {
216 that.notebook.insert_cell_below('code');
217 that.notebook.insert_cell_below('code');
217 that.notebook.select_next();
218 that.notebook.select_next();
218 });
219 });
219 // Cell
220 // Cell
220 this.element.find('#run_cell').click(function () {
221 this.element.find('#run_cell').click(function () {
221 that.notebook.execute_cell();
222 that.notebook.execute_cell();
222 });
223 });
223 this.element.find('#run_cell_select_below').click(function () {
224 this.element.find('#run_cell_select_below').click(function () {
224 that.notebook.execute_cell_and_select_below();
225 that.notebook.execute_cell_and_select_below();
225 });
226 });
226 this.element.find('#run_cell_insert_below').click(function () {
227 this.element.find('#run_cell_insert_below').click(function () {
227 that.notebook.execute_cell_and_insert_below();
228 that.notebook.execute_cell_and_insert_below();
228 });
229 });
229 this.element.find('#run_all_cells').click(function () {
230 this.element.find('#run_all_cells').click(function () {
230 that.notebook.execute_all_cells();
231 that.notebook.execute_all_cells();
231 });
232 });
232 this.element.find('#run_all_cells_above').click(function () {
233 this.element.find('#run_all_cells_above').click(function () {
233 that.notebook.execute_cells_above();
234 that.notebook.execute_cells_above();
234 });
235 });
235 this.element.find('#run_all_cells_below').click(function () {
236 this.element.find('#run_all_cells_below').click(function () {
236 that.notebook.execute_cells_below();
237 that.notebook.execute_cells_below();
237 });
238 });
238 this.element.find('#to_code').click(function () {
239 this.element.find('#to_code').click(function () {
239 that.notebook.to_code();
240 that.notebook.to_code();
240 });
241 });
241 this.element.find('#to_markdown').click(function () {
242 this.element.find('#to_markdown').click(function () {
242 that.notebook.to_markdown();
243 that.notebook.to_markdown();
243 });
244 });
244 this.element.find('#to_raw').click(function () {
245 this.element.find('#to_raw').click(function () {
245 that.notebook.to_raw();
246 that.notebook.to_raw();
246 });
247 });
247 this.element.find('#to_heading1').click(function () {
248 this.element.find('#to_heading1').click(function () {
248 that.notebook.to_heading(undefined, 1);
249 that.notebook.to_heading(undefined, 1);
249 });
250 });
250 this.element.find('#to_heading2').click(function () {
251 this.element.find('#to_heading2').click(function () {
251 that.notebook.to_heading(undefined, 2);
252 that.notebook.to_heading(undefined, 2);
252 });
253 });
253 this.element.find('#to_heading3').click(function () {
254 this.element.find('#to_heading3').click(function () {
254 that.notebook.to_heading(undefined, 3);
255 that.notebook.to_heading(undefined, 3);
255 });
256 });
256 this.element.find('#to_heading4').click(function () {
257 this.element.find('#to_heading4').click(function () {
257 that.notebook.to_heading(undefined, 4);
258 that.notebook.to_heading(undefined, 4);
258 });
259 });
259 this.element.find('#to_heading5').click(function () {
260 this.element.find('#to_heading5').click(function () {
260 that.notebook.to_heading(undefined, 5);
261 that.notebook.to_heading(undefined, 5);
261 });
262 });
262 this.element.find('#to_heading6').click(function () {
263 this.element.find('#to_heading6').click(function () {
263 that.notebook.to_heading(undefined, 6);
264 that.notebook.to_heading(undefined, 6);
264 });
265 });
265
266
266 this.element.find('#toggle_current_output').click(function () {
267 this.element.find('#toggle_current_output').click(function () {
267 that.notebook.toggle_output();
268 that.notebook.toggle_output();
268 });
269 });
269 this.element.find('#toggle_current_output_scroll').click(function () {
270 this.element.find('#toggle_current_output_scroll').click(function () {
270 that.notebook.toggle_output_scroll();
271 that.notebook.toggle_output_scroll();
271 });
272 });
272 this.element.find('#clear_current_output').click(function () {
273 this.element.find('#clear_current_output').click(function () {
273 that.notebook.clear_output();
274 that.notebook.clear_output();
274 });
275 });
275
276
276 this.element.find('#toggle_all_output').click(function () {
277 this.element.find('#toggle_all_output').click(function () {
277 that.notebook.toggle_all_output();
278 that.notebook.toggle_all_output();
278 });
279 });
279 this.element.find('#toggle_all_output_scroll').click(function () {
280 this.element.find('#toggle_all_output_scroll').click(function () {
280 that.notebook.toggle_all_output_scroll();
281 that.notebook.toggle_all_output_scroll();
281 });
282 });
282 this.element.find('#clear_all_output').click(function () {
283 this.element.find('#clear_all_output').click(function () {
283 that.notebook.clear_all_output();
284 that.notebook.clear_all_output();
284 });
285 });
285
286
286 // Kernel
287 // Kernel
287 this.element.find('#int_kernel').click(function () {
288 this.element.find('#int_kernel').click(function () {
288 that.notebook.session.interrupt_kernel();
289 that.notebook.session.interrupt_kernel();
289 });
290 });
290 this.element.find('#restart_kernel').click(function () {
291 this.element.find('#restart_kernel').click(function () {
291 that.notebook.restart_kernel();
292 that.notebook.restart_kernel();
292 });
293 });
293 // Help
294 // Help
294 if (this.tour) {
295 if (this.tour) {
295 this.element.find('#notebook_tour').click(function () {
296 this.element.find('#notebook_tour').click(function () {
296 that.tour.start();
297 that.tour.start();
297 });
298 });
298 } else {
299 } else {
299 this.element.find('#notebook_tour').addClass("disabled");
300 this.element.find('#notebook_tour').addClass("disabled");
300 }
301 }
301 this.element.find('#keyboard_shortcuts').click(function () {
302 this.element.find('#keyboard_shortcuts').click(function () {
302 that.quick_help.show_keyboard_shortcuts();
303 that.quick_help.show_keyboard_shortcuts();
303 });
304 });
304
305
305 this.update_restore_checkpoint(null);
306 this.update_restore_checkpoint(null);
306
307
307 this.events.on('checkpoints_listed.Notebook', function (event, data) {
308 this.events.on('checkpoints_listed.Notebook', function (event, data) {
308 that.update_restore_checkpoint(that.notebook.checkpoints);
309 that.update_restore_checkpoint(that.notebook.checkpoints);
309 });
310 });
310
311
311 this.events.on('checkpoint_created.Notebook', function (event, data) {
312 this.events.on('checkpoint_created.Notebook', function (event, data) {
312 that.update_restore_checkpoint(that.notebook.checkpoints);
313 that.update_restore_checkpoint(that.notebook.checkpoints);
313 });
314 });
314 };
315 };
315
316
316 MenuBar.prototype.update_restore_checkpoint = function(checkpoints) {
317 MenuBar.prototype.update_restore_checkpoint = function(checkpoints) {
317 var ul = this.element.find("#restore_checkpoint").find("ul");
318 var ul = this.element.find("#restore_checkpoint").find("ul");
318 ul.empty();
319 ul.empty();
319 if (!checkpoints || checkpoints.length === 0) {
320 if (!checkpoints || checkpoints.length === 0) {
320 ul.append(
321 ul.append(
321 $("<li/>")
322 $("<li/>")
322 .addClass("disabled")
323 .addClass("disabled")
323 .append(
324 .append(
324 $("<a/>")
325 $("<a/>")
325 .text("No checkpoints")
326 .text("No checkpoints")
326 )
327 )
327 );
328 );
328 return;
329 return;
329 }
330 }
330
331
331 var that = this;
332 var that = this;
332 checkpoints.map(function (checkpoint) {
333 checkpoints.map(function (checkpoint) {
333 var d = new Date(checkpoint.last_modified);
334 var d = new Date(checkpoint.last_modified);
334 ul.append(
335 ul.append(
335 $("<li/>").append(
336 $("<li/>").append(
336 $("<a/>")
337 $("<a/>")
337 .attr("href", "#")
338 .attr("href", "#")
338 .text(d.format("mmm dd HH:MM:ss"))
339 .text(d.format("mmm dd HH:MM:ss"))
339 .click(function () {
340 .click(function () {
340 that.notebook.restore_checkpoint_dialog(checkpoint);
341 that.notebook.restore_checkpoint_dialog(checkpoint);
341 })
342 })
342 )
343 )
343 );
344 );
344 });
345 });
345 };
346 };
346
347
347 // Backwards compatability.
348 // Backwards compatability.
348 IPython.MenuBar = MenuBar;
349 IPython.MenuBar = MenuBar;
349
350
350 return {'MenuBar': MenuBar};
351 return {'MenuBar': MenuBar};
351 });
352 });
@@ -1,2582 +1,2620 b''
1 // Copyright (c) IPython Development Team.
1 // Copyright (c) IPython Development Team.
2 // Distributed under the terms of the Modified BSD License.
2 // Distributed under the terms of the Modified BSD License.
3
3
4 define([
4 define([
5 'base/js/namespace',
5 'base/js/namespace',
6 'jquery',
6 'jquery',
7 'base/js/utils',
7 'base/js/utils',
8 'base/js/dialog',
8 'base/js/dialog',
9 'notebook/js/textcell',
9 'notebook/js/textcell',
10 'notebook/js/codecell',
10 'notebook/js/codecell',
11 'services/sessions/js/session',
11 'services/sessions/js/session',
12 'notebook/js/celltoolbar',
12 'notebook/js/celltoolbar',
13 'components/marked/lib/marked',
13 'components/marked/lib/marked',
14 'highlight',
14 'highlight',
15 'notebook/js/mathjaxutils',
15 'notebook/js/mathjaxutils',
16 'base/js/keyboard',
16 'base/js/keyboard',
17 'notebook/js/tooltip',
17 'notebook/js/tooltip',
18 'notebook/js/celltoolbarpresets/default',
18 'notebook/js/celltoolbarpresets/default',
19 'notebook/js/celltoolbarpresets/rawcell',
19 'notebook/js/celltoolbarpresets/rawcell',
20 'notebook/js/celltoolbarpresets/slideshow',
20 'notebook/js/celltoolbarpresets/slideshow',
21 ], function (
21 ], function (
22 IPython,
22 IPython,
23 $,
23 $,
24 utils,
24 utils,
25 dialog,
25 dialog,
26 textcell,
26 textcell,
27 codecell,
27 codecell,
28 session,
28 session,
29 celltoolbar,
29 celltoolbar,
30 marked,
30 marked,
31 hljs,
31 hljs,
32 mathjaxutils,
32 mathjaxutils,
33 keyboard,
33 keyboard,
34 tooltip,
34 tooltip,
35 default_celltoolbar,
35 default_celltoolbar,
36 rawcell_celltoolbar,
36 rawcell_celltoolbar,
37 slideshow_celltoolbar
37 slideshow_celltoolbar
38 ) {
38 ) {
39
39
40 var Notebook = function (selector, options) {
40 var Notebook = function (selector, options) {
41 // Constructor
41 // Constructor
42 //
42 //
43 // A notebook contains and manages cells.
43 // A notebook contains and manages cells.
44 //
44 //
45 // Parameters:
45 // Parameters:
46 // selector: string
46 // selector: string
47 // options: dictionary
47 // options: dictionary
48 // Dictionary of keyword arguments.
48 // Dictionary of keyword arguments.
49 // events: $(Events) instance
49 // events: $(Events) instance
50 // keyboard_manager: KeyboardManager instance
50 // keyboard_manager: KeyboardManager instance
51 // save_widget: SaveWidget instance
51 // save_widget: SaveWidget instance
52 // config: dictionary
52 // config: dictionary
53 // base_url : string
53 // base_url : string
54 // notebook_path : string
54 // notebook_path : string
55 // notebook_name : string
55 // notebook_name : string
56 this.config = options.config || {};
56 this.config = options.config || {};
57 this.base_url = options.base_url;
57 this.base_url = options.base_url;
58 this.notebook_path = options.notebook_path;
58 this.notebook_path = options.notebook_path;
59 this.notebook_name = options.notebook_name;
59 this.notebook_name = options.notebook_name;
60 this.events = options.events;
60 this.events = options.events;
61 this.keyboard_manager = options.keyboard_manager;
61 this.keyboard_manager = options.keyboard_manager;
62 this.save_widget = options.save_widget;
62 this.save_widget = options.save_widget;
63 this.tooltip = new tooltip.Tooltip(this.events);
63 this.tooltip = new tooltip.Tooltip(this.events);
64 this.ws_url = options.ws_url;
64 this.ws_url = options.ws_url;
65 this._session_starting = false;
65 // default_kernel_name is a temporary measure while we implement proper
66 // default_kernel_name is a temporary measure while we implement proper
66 // kernel selection and delayed start. Do not rely on it.
67 // kernel selection and delayed start. Do not rely on it.
67 this.default_kernel_name = 'python';
68 this.default_kernel_name = 'python';
68 // TODO: This code smells (and the other `= this` line a couple lines down)
69 // TODO: This code smells (and the other `= this` line a couple lines down)
69 // We need a better way to deal with circular instance references.
70 // We need a better way to deal with circular instance references.
70 this.keyboard_manager.notebook = this;
71 this.keyboard_manager.notebook = this;
71 this.save_widget.notebook = this;
72 this.save_widget.notebook = this;
72
73
73 mathjaxutils.init();
74 mathjaxutils.init();
74
75
75 if (marked) {
76 if (marked) {
76 marked.setOptions({
77 marked.setOptions({
77 gfm : true,
78 gfm : true,
78 tables: true,
79 tables: true,
79 langPrefix: "language-",
80 langPrefix: "language-",
80 highlight: function(code, lang) {
81 highlight: function(code, lang) {
81 if (!lang) {
82 if (!lang) {
82 // no language, no highlight
83 // no language, no highlight
83 return code;
84 return code;
84 }
85 }
85 var highlighted;
86 var highlighted;
86 try {
87 try {
87 highlighted = hljs.highlight(lang, code, false);
88 highlighted = hljs.highlight(lang, code, false);
88 } catch(err) {
89 } catch(err) {
89 highlighted = hljs.highlightAuto(code);
90 highlighted = hljs.highlightAuto(code);
90 }
91 }
91 return highlighted.value;
92 return highlighted.value;
92 }
93 }
93 });
94 });
94 }
95 }
95
96
96 this.element = $(selector);
97 this.element = $(selector);
97 this.element.scroll();
98 this.element.scroll();
98 this.element.data("notebook", this);
99 this.element.data("notebook", this);
99 this.next_prompt_number = 1;
100 this.next_prompt_number = 1;
100 this.session = null;
101 this.session = null;
101 this.kernel = null;
102 this.kernel = null;
102 this.clipboard = null;
103 this.clipboard = null;
103 this.undelete_backup = null;
104 this.undelete_backup = null;
104 this.undelete_index = null;
105 this.undelete_index = null;
105 this.undelete_below = false;
106 this.undelete_below = false;
106 this.paste_enabled = false;
107 this.paste_enabled = false;
107 // It is important to start out in command mode to match the intial mode
108 // It is important to start out in command mode to match the intial mode
108 // of the KeyboardManager.
109 // of the KeyboardManager.
109 this.mode = 'command';
110 this.mode = 'command';
110 this.set_dirty(false);
111 this.set_dirty(false);
111 this.metadata = {};
112 this.metadata = {};
112 this._checkpoint_after_save = false;
113 this._checkpoint_after_save = false;
113 this.last_checkpoint = null;
114 this.last_checkpoint = null;
114 this.checkpoints = [];
115 this.checkpoints = [];
115 this.autosave_interval = 0;
116 this.autosave_interval = 0;
116 this.autosave_timer = null;
117 this.autosave_timer = null;
117 // autosave *at most* every two minutes
118 // autosave *at most* every two minutes
118 this.minimum_autosave_interval = 120000;
119 this.minimum_autosave_interval = 120000;
119 // single worksheet for now
120 // single worksheet for now
120 this.worksheet_metadata = {};
121 this.worksheet_metadata = {};
121 this.notebook_name_blacklist_re = /[\/\\:]/;
122 this.notebook_name_blacklist_re = /[\/\\:]/;
122 this.nbformat = 3; // Increment this when changing the nbformat
123 this.nbformat = 3; // Increment this when changing the nbformat
123 this.nbformat_minor = 0; // Increment this when changing the nbformat
124 this.nbformat_minor = 0; // Increment this when changing the nbformat
124 this.codemirror_mode = 'ipython';
125 this.codemirror_mode = 'ipython';
125 this.create_elements();
126 this.create_elements();
126 this.bind_events();
127 this.bind_events();
127 this.save_notebook = function() { // don't allow save until notebook_loaded
128 this.save_notebook = function() { // don't allow save until notebook_loaded
128 this.save_notebook_error(null, null, "Load failed, save is disabled");
129 this.save_notebook_error(null, null, "Load failed, save is disabled");
129 };
130 };
130
131
131 // Trigger cell toolbar registration.
132 // Trigger cell toolbar registration.
132 default_celltoolbar.register(this);
133 default_celltoolbar.register(this);
133 rawcell_celltoolbar.register(this);
134 rawcell_celltoolbar.register(this);
134 slideshow_celltoolbar.register(this);
135 slideshow_celltoolbar.register(this);
135 };
136 };
136
137
137
138
138 /**
139 /**
139 * Create an HTML and CSS representation of the notebook.
140 * Create an HTML and CSS representation of the notebook.
140 *
141 *
141 * @method create_elements
142 * @method create_elements
142 */
143 */
143 Notebook.prototype.create_elements = function () {
144 Notebook.prototype.create_elements = function () {
144 var that = this;
145 var that = this;
145 this.element.attr('tabindex','-1');
146 this.element.attr('tabindex','-1');
146 this.container = $("<div/>").addClass("container").attr("id", "notebook-container");
147 this.container = $("<div/>").addClass("container").attr("id", "notebook-container");
147 // We add this end_space div to the end of the notebook div to:
148 // We add this end_space div to the end of the notebook div to:
148 // i) provide a margin between the last cell and the end of the notebook
149 // i) provide a margin between the last cell and the end of the notebook
149 // ii) to prevent the div from scrolling up when the last cell is being
150 // ii) to prevent the div from scrolling up when the last cell is being
150 // edited, but is too low on the page, which browsers will do automatically.
151 // edited, but is too low on the page, which browsers will do automatically.
151 var end_space = $('<div/>').addClass('end_space');
152 var end_space = $('<div/>').addClass('end_space');
152 end_space.dblclick(function (e) {
153 end_space.dblclick(function (e) {
153 var ncells = that.ncells();
154 var ncells = that.ncells();
154 that.insert_cell_below('code',ncells-1);
155 that.insert_cell_below('code',ncells-1);
155 });
156 });
156 this.element.append(this.container);
157 this.element.append(this.container);
157 this.container.append(end_space);
158 this.container.append(end_space);
158 };
159 };
159
160
160 /**
161 /**
161 * Bind JavaScript events: key presses and custom IPython events.
162 * Bind JavaScript events: key presses and custom IPython events.
162 *
163 *
163 * @method bind_events
164 * @method bind_events
164 */
165 */
165 Notebook.prototype.bind_events = function () {
166 Notebook.prototype.bind_events = function () {
166 var that = this;
167 var that = this;
167
168
168 this.events.on('set_next_input.Notebook', function (event, data) {
169 this.events.on('set_next_input.Notebook', function (event, data) {
169 var index = that.find_cell_index(data.cell);
170 var index = that.find_cell_index(data.cell);
170 var new_cell = that.insert_cell_below('code',index);
171 var new_cell = that.insert_cell_below('code',index);
171 new_cell.set_text(data.text);
172 new_cell.set_text(data.text);
172 that.dirty = true;
173 that.dirty = true;
173 });
174 });
174
175
175 this.events.on('set_dirty.Notebook', function (event, data) {
176 this.events.on('set_dirty.Notebook', function (event, data) {
176 that.dirty = data.value;
177 that.dirty = data.value;
177 });
178 });
178
179
179 this.events.on('trust_changed.Notebook', function (event, data) {
180 this.events.on('trust_changed.Notebook', function (event, data) {
180 that.trusted = data.value;
181 that.trusted = data.value;
181 });
182 });
182
183
183 this.events.on('select.Cell', function (event, data) {
184 this.events.on('select.Cell', function (event, data) {
184 var index = that.find_cell_index(data.cell);
185 var index = that.find_cell_index(data.cell);
185 that.select(index);
186 that.select(index);
186 });
187 });
187
188
188 this.events.on('edit_mode.Cell', function (event, data) {
189 this.events.on('edit_mode.Cell', function (event, data) {
189 that.handle_edit_mode(data.cell);
190 that.handle_edit_mode(data.cell);
190 });
191 });
191
192
192 this.events.on('command_mode.Cell', function (event, data) {
193 this.events.on('command_mode.Cell', function (event, data) {
193 that.handle_command_mode(data.cell);
194 that.handle_command_mode(data.cell);
194 });
195 });
195
196
196 this.events.on('status_autorestarting.Kernel', function () {
197 this.events.on('status_autorestarting.Kernel', function () {
197 dialog.modal({
198 dialog.modal({
198 notebook: that,
199 notebook: that,
199 keyboard_manager: that.keyboard_manager,
200 keyboard_manager: that.keyboard_manager,
200 title: "Kernel Restarting",
201 title: "Kernel Restarting",
201 body: "The kernel appears to have died. It will restart automatically.",
202 body: "The kernel appears to have died. It will restart automatically.",
202 buttons: {
203 buttons: {
203 OK : {
204 OK : {
204 class : "btn-primary"
205 class : "btn-primary"
205 }
206 }
206 }
207 }
207 });
208 });
208 });
209 });
209
210
210 this.events.on('spec_changed.Kernel', function(event, data) {
211 this.events.on('spec_changed.Kernel', function(event, data) {
211 that.set_kernelspec_metadata(data);
212 that.set_kernelspec_metadata(data);
212 if (data.codemirror_mode) {
213 if (data.codemirror_mode) {
213 that.set_codemirror_mode(data.codemirror_mode);
214 that.set_codemirror_mode(data.codemirror_mode);
214 }
215 }
215 });
216 });
216
217
217 var collapse_time = function (time) {
218 var collapse_time = function (time) {
218 var app_height = $('#ipython-main-app').height(); // content height
219 var app_height = $('#ipython-main-app').height(); // content height
219 var splitter_height = $('div#pager_splitter').outerHeight(true);
220 var splitter_height = $('div#pager_splitter').outerHeight(true);
220 var new_height = app_height - splitter_height;
221 var new_height = app_height - splitter_height;
221 that.element.animate({height : new_height + 'px'}, time);
222 that.element.animate({height : new_height + 'px'}, time);
222 };
223 };
223
224
224 this.element.bind('collapse_pager', function (event, extrap) {
225 this.element.bind('collapse_pager', function (event, extrap) {
225 var time = (extrap !== undefined) ? ((extrap.duration !== undefined ) ? extrap.duration : 'fast') : 'fast';
226 var time = (extrap !== undefined) ? ((extrap.duration !== undefined ) ? extrap.duration : 'fast') : 'fast';
226 collapse_time(time);
227 collapse_time(time);
227 });
228 });
228
229
229 var expand_time = function (time) {
230 var expand_time = function (time) {
230 var app_height = $('#ipython-main-app').height(); // content height
231 var app_height = $('#ipython-main-app').height(); // content height
231 var splitter_height = $('div#pager_splitter').outerHeight(true);
232 var splitter_height = $('div#pager_splitter').outerHeight(true);
232 var pager_height = $('div#pager').outerHeight(true);
233 var pager_height = $('div#pager').outerHeight(true);
233 var new_height = app_height - pager_height - splitter_height;
234 var new_height = app_height - pager_height - splitter_height;
234 that.element.animate({height : new_height + 'px'}, time);
235 that.element.animate({height : new_height + 'px'}, time);
235 };
236 };
236
237
237 this.element.bind('expand_pager', function (event, extrap) {
238 this.element.bind('expand_pager', function (event, extrap) {
238 var time = (extrap !== undefined) ? ((extrap.duration !== undefined ) ? extrap.duration : 'fast') : 'fast';
239 var time = (extrap !== undefined) ? ((extrap.duration !== undefined ) ? extrap.duration : 'fast') : 'fast';
239 expand_time(time);
240 expand_time(time);
240 });
241 });
241
242
242 // Firefox 22 broke $(window).on("beforeunload")
243 // Firefox 22 broke $(window).on("beforeunload")
243 // I'm not sure why or how.
244 // I'm not sure why or how.
244 window.onbeforeunload = function (e) {
245 window.onbeforeunload = function (e) {
245 // TODO: Make killing the kernel configurable.
246 // TODO: Make killing the kernel configurable.
246 var kill_kernel = false;
247 var kill_kernel = false;
247 if (kill_kernel) {
248 if (kill_kernel) {
248 that.session.kill_kernel();
249 that.session.kill_kernel();
249 }
250 }
250 // if we are autosaving, trigger an autosave on nav-away.
251 // if we are autosaving, trigger an autosave on nav-away.
251 // still warn, because if we don't the autosave may fail.
252 // still warn, because if we don't the autosave may fail.
252 if (that.dirty) {
253 if (that.dirty) {
253 if ( that.autosave_interval ) {
254 if ( that.autosave_interval ) {
254 // schedule autosave in a timeout
255 // schedule autosave in a timeout
255 // this gives you a chance to forcefully discard changes
256 // this gives you a chance to forcefully discard changes
256 // by reloading the page if you *really* want to.
257 // by reloading the page if you *really* want to.
257 // the timer doesn't start until you *dismiss* the dialog.
258 // the timer doesn't start until you *dismiss* the dialog.
258 setTimeout(function () {
259 setTimeout(function () {
259 if (that.dirty) {
260 if (that.dirty) {
260 that.save_notebook();
261 that.save_notebook();
261 }
262 }
262 }, 1000);
263 }, 1000);
263 return "Autosave in progress, latest changes may be lost.";
264 return "Autosave in progress, latest changes may be lost.";
264 } else {
265 } else {
265 return "Unsaved changes will be lost.";
266 return "Unsaved changes will be lost.";
266 }
267 }
267 }
268 }
268 // Null is the *only* return value that will make the browser not
269 // Null is the *only* return value that will make the browser not
269 // pop up the "don't leave" dialog.
270 // pop up the "don't leave" dialog.
270 return null;
271 return null;
271 };
272 };
272 };
273 };
273
274
274 /**
275 /**
275 * Set the dirty flag, and trigger the set_dirty.Notebook event
276 * Set the dirty flag, and trigger the set_dirty.Notebook event
276 *
277 *
277 * @method set_dirty
278 * @method set_dirty
278 */
279 */
279 Notebook.prototype.set_dirty = function (value) {
280 Notebook.prototype.set_dirty = function (value) {
280 if (value === undefined) {
281 if (value === undefined) {
281 value = true;
282 value = true;
282 }
283 }
283 if (this.dirty == value) {
284 if (this.dirty == value) {
284 return;
285 return;
285 }
286 }
286 this.events.trigger('set_dirty.Notebook', {value: value});
287 this.events.trigger('set_dirty.Notebook', {value: value});
287 };
288 };
288
289
289 /**
290 /**
290 * Scroll the top of the page to a given cell.
291 * Scroll the top of the page to a given cell.
291 *
292 *
292 * @method scroll_to_cell
293 * @method scroll_to_cell
293 * @param {Number} cell_number An index of the cell to view
294 * @param {Number} cell_number An index of the cell to view
294 * @param {Number} time Animation time in milliseconds
295 * @param {Number} time Animation time in milliseconds
295 * @return {Number} Pixel offset from the top of the container
296 * @return {Number} Pixel offset from the top of the container
296 */
297 */
297 Notebook.prototype.scroll_to_cell = function (cell_number, time) {
298 Notebook.prototype.scroll_to_cell = function (cell_number, time) {
298 var cells = this.get_cells();
299 var cells = this.get_cells();
299 time = time || 0;
300 time = time || 0;
300 cell_number = Math.min(cells.length-1,cell_number);
301 cell_number = Math.min(cells.length-1,cell_number);
301 cell_number = Math.max(0 ,cell_number);
302 cell_number = Math.max(0 ,cell_number);
302 var scroll_value = cells[cell_number].element.position().top-cells[0].element.position().top ;
303 var scroll_value = cells[cell_number].element.position().top-cells[0].element.position().top ;
303 this.element.animate({scrollTop:scroll_value}, time);
304 this.element.animate({scrollTop:scroll_value}, time);
304 return scroll_value;
305 return scroll_value;
305 };
306 };
306
307
307 /**
308 /**
308 * Scroll to the bottom of the page.
309 * Scroll to the bottom of the page.
309 *
310 *
310 * @method scroll_to_bottom
311 * @method scroll_to_bottom
311 */
312 */
312 Notebook.prototype.scroll_to_bottom = function () {
313 Notebook.prototype.scroll_to_bottom = function () {
313 this.element.animate({scrollTop:this.element.get(0).scrollHeight}, 0);
314 this.element.animate({scrollTop:this.element.get(0).scrollHeight}, 0);
314 };
315 };
315
316
316 /**
317 /**
317 * Scroll to the top of the page.
318 * Scroll to the top of the page.
318 *
319 *
319 * @method scroll_to_top
320 * @method scroll_to_top
320 */
321 */
321 Notebook.prototype.scroll_to_top = function () {
322 Notebook.prototype.scroll_to_top = function () {
322 this.element.animate({scrollTop:0}, 0);
323 this.element.animate({scrollTop:0}, 0);
323 };
324 };
324
325
325 // Edit Notebook metadata
326 // Edit Notebook metadata
326
327
327 Notebook.prototype.edit_metadata = function () {
328 Notebook.prototype.edit_metadata = function () {
328 var that = this;
329 var that = this;
329 dialog.edit_metadata({
330 dialog.edit_metadata({
330 md: this.metadata,
331 md: this.metadata,
331 callback: function (md) {
332 callback: function (md) {
332 that.metadata = md;
333 that.metadata = md;
333 },
334 },
334 name: 'Notebook',
335 name: 'Notebook',
335 notebook: this,
336 notebook: this,
336 keyboard_manager: this.keyboard_manager});
337 keyboard_manager: this.keyboard_manager});
337 };
338 };
338
339
339 Notebook.prototype.set_kernelspec_metadata = function(ks) {
340 Notebook.prototype.set_kernelspec_metadata = function(ks) {
340 var tostore = {};
341 var tostore = {};
341 $.map(ks, function(value, field) {
342 $.map(ks, function(value, field) {
342 if (field !== 'argv' && field !== 'env') {
343 if (field !== 'argv' && field !== 'env') {
343 tostore[field] = value;
344 tostore[field] = value;
344 }
345 }
345 });
346 });
346 this.metadata.kernelspec = tostore;
347 this.metadata.kernelspec = tostore;
347 }
348 }
348
349
349 // Cell indexing, retrieval, etc.
350 // Cell indexing, retrieval, etc.
350
351
351 /**
352 /**
352 * Get all cell elements in the notebook.
353 * Get all cell elements in the notebook.
353 *
354 *
354 * @method get_cell_elements
355 * @method get_cell_elements
355 * @return {jQuery} A selector of all cell elements
356 * @return {jQuery} A selector of all cell elements
356 */
357 */
357 Notebook.prototype.get_cell_elements = function () {
358 Notebook.prototype.get_cell_elements = function () {
358 return this.container.children("div.cell");
359 return this.container.children("div.cell");
359 };
360 };
360
361
361 /**
362 /**
362 * Get a particular cell element.
363 * Get a particular cell element.
363 *
364 *
364 * @method get_cell_element
365 * @method get_cell_element
365 * @param {Number} index An index of a cell to select
366 * @param {Number} index An index of a cell to select
366 * @return {jQuery} A selector of the given cell.
367 * @return {jQuery} A selector of the given cell.
367 */
368 */
368 Notebook.prototype.get_cell_element = function (index) {
369 Notebook.prototype.get_cell_element = function (index) {
369 var result = null;
370 var result = null;
370 var e = this.get_cell_elements().eq(index);
371 var e = this.get_cell_elements().eq(index);
371 if (e.length !== 0) {
372 if (e.length !== 0) {
372 result = e;
373 result = e;
373 }
374 }
374 return result;
375 return result;
375 };
376 };
376
377
377 /**
378 /**
378 * Try to get a particular cell by msg_id.
379 * Try to get a particular cell by msg_id.
379 *
380 *
380 * @method get_msg_cell
381 * @method get_msg_cell
381 * @param {String} msg_id A message UUID
382 * @param {String} msg_id A message UUID
382 * @return {Cell} Cell or null if no cell was found.
383 * @return {Cell} Cell or null if no cell was found.
383 */
384 */
384 Notebook.prototype.get_msg_cell = function (msg_id) {
385 Notebook.prototype.get_msg_cell = function (msg_id) {
385 return codecell.CodeCell.msg_cells[msg_id] || null;
386 return codecell.CodeCell.msg_cells[msg_id] || null;
386 };
387 };
387
388
388 /**
389 /**
389 * Count the cells in this notebook.
390 * Count the cells in this notebook.
390 *
391 *
391 * @method ncells
392 * @method ncells
392 * @return {Number} The number of cells in this notebook
393 * @return {Number} The number of cells in this notebook
393 */
394 */
394 Notebook.prototype.ncells = function () {
395 Notebook.prototype.ncells = function () {
395 return this.get_cell_elements().length;
396 return this.get_cell_elements().length;
396 };
397 };
397
398
398 /**
399 /**
399 * Get all Cell objects in this notebook.
400 * Get all Cell objects in this notebook.
400 *
401 *
401 * @method get_cells
402 * @method get_cells
402 * @return {Array} This notebook's Cell objects
403 * @return {Array} This notebook's Cell objects
403 */
404 */
404 // TODO: we are often calling cells as cells()[i], which we should optimize
405 // TODO: we are often calling cells as cells()[i], which we should optimize
405 // to cells(i) or a new method.
406 // to cells(i) or a new method.
406 Notebook.prototype.get_cells = function () {
407 Notebook.prototype.get_cells = function () {
407 return this.get_cell_elements().toArray().map(function (e) {
408 return this.get_cell_elements().toArray().map(function (e) {
408 return $(e).data("cell");
409 return $(e).data("cell");
409 });
410 });
410 };
411 };
411
412
412 /**
413 /**
413 * Get a Cell object from this notebook.
414 * Get a Cell object from this notebook.
414 *
415 *
415 * @method get_cell
416 * @method get_cell
416 * @param {Number} index An index of a cell to retrieve
417 * @param {Number} index An index of a cell to retrieve
417 * @return {Cell} A particular cell
418 * @return {Cell} A particular cell
418 */
419 */
419 Notebook.prototype.get_cell = function (index) {
420 Notebook.prototype.get_cell = function (index) {
420 var result = null;
421 var result = null;
421 var ce = this.get_cell_element(index);
422 var ce = this.get_cell_element(index);
422 if (ce !== null) {
423 if (ce !== null) {
423 result = ce.data('cell');
424 result = ce.data('cell');
424 }
425 }
425 return result;
426 return result;
426 };
427 };
427
428
428 /**
429 /**
429 * Get the cell below a given cell.
430 * Get the cell below a given cell.
430 *
431 *
431 * @method get_next_cell
432 * @method get_next_cell
432 * @param {Cell} cell The provided cell
433 * @param {Cell} cell The provided cell
433 * @return {Cell} The next cell
434 * @return {Cell} The next cell
434 */
435 */
435 Notebook.prototype.get_next_cell = function (cell) {
436 Notebook.prototype.get_next_cell = function (cell) {
436 var result = null;
437 var result = null;
437 var index = this.find_cell_index(cell);
438 var index = this.find_cell_index(cell);
438 if (this.is_valid_cell_index(index+1)) {
439 if (this.is_valid_cell_index(index+1)) {
439 result = this.get_cell(index+1);
440 result = this.get_cell(index+1);
440 }
441 }
441 return result;
442 return result;
442 };
443 };
443
444
444 /**
445 /**
445 * Get the cell above a given cell.
446 * Get the cell above a given cell.
446 *
447 *
447 * @method get_prev_cell
448 * @method get_prev_cell
448 * @param {Cell} cell The provided cell
449 * @param {Cell} cell The provided cell
449 * @return {Cell} The previous cell
450 * @return {Cell} The previous cell
450 */
451 */
451 Notebook.prototype.get_prev_cell = function (cell) {
452 Notebook.prototype.get_prev_cell = function (cell) {
452 // TODO: off-by-one
453 // TODO: off-by-one
453 // nb.get_prev_cell(nb.get_cell(1)) is null
454 // nb.get_prev_cell(nb.get_cell(1)) is null
454 var result = null;
455 var result = null;
455 var index = this.find_cell_index(cell);
456 var index = this.find_cell_index(cell);
456 if (index !== null && index > 1) {
457 if (index !== null && index > 1) {
457 result = this.get_cell(index-1);
458 result = this.get_cell(index-1);
458 }
459 }
459 return result;
460 return result;
460 };
461 };
461
462
462 /**
463 /**
463 * Get the numeric index of a given cell.
464 * Get the numeric index of a given cell.
464 *
465 *
465 * @method find_cell_index
466 * @method find_cell_index
466 * @param {Cell} cell The provided cell
467 * @param {Cell} cell The provided cell
467 * @return {Number} The cell's numeric index
468 * @return {Number} The cell's numeric index
468 */
469 */
469 Notebook.prototype.find_cell_index = function (cell) {
470 Notebook.prototype.find_cell_index = function (cell) {
470 var result = null;
471 var result = null;
471 this.get_cell_elements().filter(function (index) {
472 this.get_cell_elements().filter(function (index) {
472 if ($(this).data("cell") === cell) {
473 if ($(this).data("cell") === cell) {
473 result = index;
474 result = index;
474 }
475 }
475 });
476 });
476 return result;
477 return result;
477 };
478 };
478
479
479 /**
480 /**
480 * Get a given index , or the selected index if none is provided.
481 * Get a given index , or the selected index if none is provided.
481 *
482 *
482 * @method index_or_selected
483 * @method index_or_selected
483 * @param {Number} index A cell's index
484 * @param {Number} index A cell's index
484 * @return {Number} The given index, or selected index if none is provided.
485 * @return {Number} The given index, or selected index if none is provided.
485 */
486 */
486 Notebook.prototype.index_or_selected = function (index) {
487 Notebook.prototype.index_or_selected = function (index) {
487 var i;
488 var i;
488 if (index === undefined || index === null) {
489 if (index === undefined || index === null) {
489 i = this.get_selected_index();
490 i = this.get_selected_index();
490 if (i === null) {
491 if (i === null) {
491 i = 0;
492 i = 0;
492 }
493 }
493 } else {
494 } else {
494 i = index;
495 i = index;
495 }
496 }
496 return i;
497 return i;
497 };
498 };
498
499
499 /**
500 /**
500 * Get the currently selected cell.
501 * Get the currently selected cell.
501 * @method get_selected_cell
502 * @method get_selected_cell
502 * @return {Cell} The selected cell
503 * @return {Cell} The selected cell
503 */
504 */
504 Notebook.prototype.get_selected_cell = function () {
505 Notebook.prototype.get_selected_cell = function () {
505 var index = this.get_selected_index();
506 var index = this.get_selected_index();
506 return this.get_cell(index);
507 return this.get_cell(index);
507 };
508 };
508
509
509 /**
510 /**
510 * Check whether a cell index is valid.
511 * Check whether a cell index is valid.
511 *
512 *
512 * @method is_valid_cell_index
513 * @method is_valid_cell_index
513 * @param {Number} index A cell index
514 * @param {Number} index A cell index
514 * @return True if the index is valid, false otherwise
515 * @return True if the index is valid, false otherwise
515 */
516 */
516 Notebook.prototype.is_valid_cell_index = function (index) {
517 Notebook.prototype.is_valid_cell_index = function (index) {
517 if (index !== null && index >= 0 && index < this.ncells()) {
518 if (index !== null && index >= 0 && index < this.ncells()) {
518 return true;
519 return true;
519 } else {
520 } else {
520 return false;
521 return false;
521 }
522 }
522 };
523 };
523
524
524 /**
525 /**
525 * Get the index of the currently selected cell.
526 * Get the index of the currently selected cell.
526
527
527 * @method get_selected_index
528 * @method get_selected_index
528 * @return {Number} The selected cell's numeric index
529 * @return {Number} The selected cell's numeric index
529 */
530 */
530 Notebook.prototype.get_selected_index = function () {
531 Notebook.prototype.get_selected_index = function () {
531 var result = null;
532 var result = null;
532 this.get_cell_elements().filter(function (index) {
533 this.get_cell_elements().filter(function (index) {
533 if ($(this).data("cell").selected === true) {
534 if ($(this).data("cell").selected === true) {
534 result = index;
535 result = index;
535 }
536 }
536 });
537 });
537 return result;
538 return result;
538 };
539 };
539
540
540
541
541 // Cell selection.
542 // Cell selection.
542
543
543 /**
544 /**
544 * Programmatically select a cell.
545 * Programmatically select a cell.
545 *
546 *
546 * @method select
547 * @method select
547 * @param {Number} index A cell's index
548 * @param {Number} index A cell's index
548 * @return {Notebook} This notebook
549 * @return {Notebook} This notebook
549 */
550 */
550 Notebook.prototype.select = function (index) {
551 Notebook.prototype.select = function (index) {
551 if (this.is_valid_cell_index(index)) {
552 if (this.is_valid_cell_index(index)) {
552 var sindex = this.get_selected_index();
553 var sindex = this.get_selected_index();
553 if (sindex !== null && index !== sindex) {
554 if (sindex !== null && index !== sindex) {
554 // If we are about to select a different cell, make sure we are
555 // If we are about to select a different cell, make sure we are
555 // first in command mode.
556 // first in command mode.
556 if (this.mode !== 'command') {
557 if (this.mode !== 'command') {
557 this.command_mode();
558 this.command_mode();
558 }
559 }
559 this.get_cell(sindex).unselect();
560 this.get_cell(sindex).unselect();
560 }
561 }
561 var cell = this.get_cell(index);
562 var cell = this.get_cell(index);
562 cell.select();
563 cell.select();
563 if (cell.cell_type === 'heading') {
564 if (cell.cell_type === 'heading') {
564 this.events.trigger('selected_cell_type_changed.Notebook',
565 this.events.trigger('selected_cell_type_changed.Notebook',
565 {'cell_type':cell.cell_type,level:cell.level}
566 {'cell_type':cell.cell_type,level:cell.level}
566 );
567 );
567 } else {
568 } else {
568 this.events.trigger('selected_cell_type_changed.Notebook',
569 this.events.trigger('selected_cell_type_changed.Notebook',
569 {'cell_type':cell.cell_type}
570 {'cell_type':cell.cell_type}
570 );
571 );
571 }
572 }
572 }
573 }
573 return this;
574 return this;
574 };
575 };
575
576
576 /**
577 /**
577 * Programmatically select the next cell.
578 * Programmatically select the next cell.
578 *
579 *
579 * @method select_next
580 * @method select_next
580 * @return {Notebook} This notebook
581 * @return {Notebook} This notebook
581 */
582 */
582 Notebook.prototype.select_next = function () {
583 Notebook.prototype.select_next = function () {
583 var index = this.get_selected_index();
584 var index = this.get_selected_index();
584 this.select(index+1);
585 this.select(index+1);
585 return this;
586 return this;
586 };
587 };
587
588
588 /**
589 /**
589 * Programmatically select the previous cell.
590 * Programmatically select the previous cell.
590 *
591 *
591 * @method select_prev
592 * @method select_prev
592 * @return {Notebook} This notebook
593 * @return {Notebook} This notebook
593 */
594 */
594 Notebook.prototype.select_prev = function () {
595 Notebook.prototype.select_prev = function () {
595 var index = this.get_selected_index();
596 var index = this.get_selected_index();
596 this.select(index-1);
597 this.select(index-1);
597 return this;
598 return this;
598 };
599 };
599
600
600
601
601 // Edit/Command mode
602 // Edit/Command mode
602
603
603 /**
604 /**
604 * Gets the index of the cell that is in edit mode.
605 * Gets the index of the cell that is in edit mode.
605 *
606 *
606 * @method get_edit_index
607 * @method get_edit_index
607 *
608 *
608 * @return index {int}
609 * @return index {int}
609 **/
610 **/
610 Notebook.prototype.get_edit_index = function () {
611 Notebook.prototype.get_edit_index = function () {
611 var result = null;
612 var result = null;
612 this.get_cell_elements().filter(function (index) {
613 this.get_cell_elements().filter(function (index) {
613 if ($(this).data("cell").mode === 'edit') {
614 if ($(this).data("cell").mode === 'edit') {
614 result = index;
615 result = index;
615 }
616 }
616 });
617 });
617 return result;
618 return result;
618 };
619 };
619
620
620 /**
621 /**
621 * Handle when a a cell blurs and the notebook should enter command mode.
622 * Handle when a a cell blurs and the notebook should enter command mode.
622 *
623 *
623 * @method handle_command_mode
624 * @method handle_command_mode
624 * @param [cell] {Cell} Cell to enter command mode on.
625 * @param [cell] {Cell} Cell to enter command mode on.
625 **/
626 **/
626 Notebook.prototype.handle_command_mode = function (cell) {
627 Notebook.prototype.handle_command_mode = function (cell) {
627 if (this.mode !== 'command') {
628 if (this.mode !== 'command') {
628 cell.command_mode();
629 cell.command_mode();
629 this.mode = 'command';
630 this.mode = 'command';
630 this.events.trigger('command_mode.Notebook');
631 this.events.trigger('command_mode.Notebook');
631 this.keyboard_manager.command_mode();
632 this.keyboard_manager.command_mode();
632 }
633 }
633 };
634 };
634
635
635 /**
636 /**
636 * Make the notebook enter command mode.
637 * Make the notebook enter command mode.
637 *
638 *
638 * @method command_mode
639 * @method command_mode
639 **/
640 **/
640 Notebook.prototype.command_mode = function () {
641 Notebook.prototype.command_mode = function () {
641 var cell = this.get_cell(this.get_edit_index());
642 var cell = this.get_cell(this.get_edit_index());
642 if (cell && this.mode !== 'command') {
643 if (cell && this.mode !== 'command') {
643 // We don't call cell.command_mode, but rather call cell.focus_cell()
644 // We don't call cell.command_mode, but rather call cell.focus_cell()
644 // which will blur and CM editor and trigger the call to
645 // which will blur and CM editor and trigger the call to
645 // handle_command_mode.
646 // handle_command_mode.
646 cell.focus_cell();
647 cell.focus_cell();
647 }
648 }
648 };
649 };
649
650
650 /**
651 /**
651 * Handle when a cell fires it's edit_mode event.
652 * Handle when a cell fires it's edit_mode event.
652 *
653 *
653 * @method handle_edit_mode
654 * @method handle_edit_mode
654 * @param [cell] {Cell} Cell to enter edit mode on.
655 * @param [cell] {Cell} Cell to enter edit mode on.
655 **/
656 **/
656 Notebook.prototype.handle_edit_mode = function (cell) {
657 Notebook.prototype.handle_edit_mode = function (cell) {
657 if (cell && this.mode !== 'edit') {
658 if (cell && this.mode !== 'edit') {
658 cell.edit_mode();
659 cell.edit_mode();
659 this.mode = 'edit';
660 this.mode = 'edit';
660 this.events.trigger('edit_mode.Notebook');
661 this.events.trigger('edit_mode.Notebook');
661 this.keyboard_manager.edit_mode();
662 this.keyboard_manager.edit_mode();
662 }
663 }
663 };
664 };
664
665
665 /**
666 /**
666 * Make a cell enter edit mode.
667 * Make a cell enter edit mode.
667 *
668 *
668 * @method edit_mode
669 * @method edit_mode
669 **/
670 **/
670 Notebook.prototype.edit_mode = function () {
671 Notebook.prototype.edit_mode = function () {
671 var cell = this.get_selected_cell();
672 var cell = this.get_selected_cell();
672 if (cell && this.mode !== 'edit') {
673 if (cell && this.mode !== 'edit') {
673 cell.unrender();
674 cell.unrender();
674 cell.focus_editor();
675 cell.focus_editor();
675 }
676 }
676 };
677 };
677
678
678 /**
679 /**
679 * Focus the currently selected cell.
680 * Focus the currently selected cell.
680 *
681 *
681 * @method focus_cell
682 * @method focus_cell
682 **/
683 **/
683 Notebook.prototype.focus_cell = function () {
684 Notebook.prototype.focus_cell = function () {
684 var cell = this.get_selected_cell();
685 var cell = this.get_selected_cell();
685 if (cell === null) {return;} // No cell is selected
686 if (cell === null) {return;} // No cell is selected
686 cell.focus_cell();
687 cell.focus_cell();
687 };
688 };
688
689
689 // Cell movement
690 // Cell movement
690
691
691 /**
692 /**
692 * Move given (or selected) cell up and select it.
693 * Move given (or selected) cell up and select it.
693 *
694 *
694 * @method move_cell_up
695 * @method move_cell_up
695 * @param [index] {integer} cell index
696 * @param [index] {integer} cell index
696 * @return {Notebook} This notebook
697 * @return {Notebook} This notebook
697 **/
698 **/
698 Notebook.prototype.move_cell_up = function (index) {
699 Notebook.prototype.move_cell_up = function (index) {
699 var i = this.index_or_selected(index);
700 var i = this.index_or_selected(index);
700 if (this.is_valid_cell_index(i) && i > 0) {
701 if (this.is_valid_cell_index(i) && i > 0) {
701 var pivot = this.get_cell_element(i-1);
702 var pivot = this.get_cell_element(i-1);
702 var tomove = this.get_cell_element(i);
703 var tomove = this.get_cell_element(i);
703 if (pivot !== null && tomove !== null) {
704 if (pivot !== null && tomove !== null) {
704 tomove.detach();
705 tomove.detach();
705 pivot.before(tomove);
706 pivot.before(tomove);
706 this.select(i-1);
707 this.select(i-1);
707 var cell = this.get_selected_cell();
708 var cell = this.get_selected_cell();
708 cell.focus_cell();
709 cell.focus_cell();
709 }
710 }
710 this.set_dirty(true);
711 this.set_dirty(true);
711 }
712 }
712 return this;
713 return this;
713 };
714 };
714
715
715
716
716 /**
717 /**
717 * Move given (or selected) cell down and select it
718 * Move given (or selected) cell down and select it
718 *
719 *
719 * @method move_cell_down
720 * @method move_cell_down
720 * @param [index] {integer} cell index
721 * @param [index] {integer} cell index
721 * @return {Notebook} This notebook
722 * @return {Notebook} This notebook
722 **/
723 **/
723 Notebook.prototype.move_cell_down = function (index) {
724 Notebook.prototype.move_cell_down = function (index) {
724 var i = this.index_or_selected(index);
725 var i = this.index_or_selected(index);
725 if (this.is_valid_cell_index(i) && this.is_valid_cell_index(i+1)) {
726 if (this.is_valid_cell_index(i) && this.is_valid_cell_index(i+1)) {
726 var pivot = this.get_cell_element(i+1);
727 var pivot = this.get_cell_element(i+1);
727 var tomove = this.get_cell_element(i);
728 var tomove = this.get_cell_element(i);
728 if (pivot !== null && tomove !== null) {
729 if (pivot !== null && tomove !== null) {
729 tomove.detach();
730 tomove.detach();
730 pivot.after(tomove);
731 pivot.after(tomove);
731 this.select(i+1);
732 this.select(i+1);
732 var cell = this.get_selected_cell();
733 var cell = this.get_selected_cell();
733 cell.focus_cell();
734 cell.focus_cell();
734 }
735 }
735 }
736 }
736 this.set_dirty();
737 this.set_dirty();
737 return this;
738 return this;
738 };
739 };
739
740
740
741
741 // Insertion, deletion.
742 // Insertion, deletion.
742
743
743 /**
744 /**
744 * Delete a cell from the notebook.
745 * Delete a cell from the notebook.
745 *
746 *
746 * @method delete_cell
747 * @method delete_cell
747 * @param [index] A cell's numeric index
748 * @param [index] A cell's numeric index
748 * @return {Notebook} This notebook
749 * @return {Notebook} This notebook
749 */
750 */
750 Notebook.prototype.delete_cell = function (index) {
751 Notebook.prototype.delete_cell = function (index) {
751 var i = this.index_or_selected(index);
752 var i = this.index_or_selected(index);
752 var cell = this.get_selected_cell();
753 var cell = this.get_selected_cell();
753 this.undelete_backup = cell.toJSON();
754 this.undelete_backup = cell.toJSON();
754 $('#undelete_cell').removeClass('disabled');
755 $('#undelete_cell').removeClass('disabled');
755 if (this.is_valid_cell_index(i)) {
756 if (this.is_valid_cell_index(i)) {
756 var old_ncells = this.ncells();
757 var old_ncells = this.ncells();
757 var ce = this.get_cell_element(i);
758 var ce = this.get_cell_element(i);
758 ce.remove();
759 ce.remove();
759 if (i === 0) {
760 if (i === 0) {
760 // Always make sure we have at least one cell.
761 // Always make sure we have at least one cell.
761 if (old_ncells === 1) {
762 if (old_ncells === 1) {
762 this.insert_cell_below('code');
763 this.insert_cell_below('code');
763 }
764 }
764 this.select(0);
765 this.select(0);
765 this.undelete_index = 0;
766 this.undelete_index = 0;
766 this.undelete_below = false;
767 this.undelete_below = false;
767 } else if (i === old_ncells-1 && i !== 0) {
768 } else if (i === old_ncells-1 && i !== 0) {
768 this.select(i-1);
769 this.select(i-1);
769 this.undelete_index = i - 1;
770 this.undelete_index = i - 1;
770 this.undelete_below = true;
771 this.undelete_below = true;
771 } else {
772 } else {
772 this.select(i);
773 this.select(i);
773 this.undelete_index = i;
774 this.undelete_index = i;
774 this.undelete_below = false;
775 this.undelete_below = false;
775 }
776 }
776 this.events.trigger('delete.Cell', {'cell': cell, 'index': i});
777 this.events.trigger('delete.Cell', {'cell': cell, 'index': i});
777 this.set_dirty(true);
778 this.set_dirty(true);
778 }
779 }
779 return this;
780 return this;
780 };
781 };
781
782
782 /**
783 /**
783 * Restore the most recently deleted cell.
784 * Restore the most recently deleted cell.
784 *
785 *
785 * @method undelete
786 * @method undelete
786 */
787 */
787 Notebook.prototype.undelete_cell = function() {
788 Notebook.prototype.undelete_cell = function() {
788 if (this.undelete_backup !== null && this.undelete_index !== null) {
789 if (this.undelete_backup !== null && this.undelete_index !== null) {
789 var current_index = this.get_selected_index();
790 var current_index = this.get_selected_index();
790 if (this.undelete_index < current_index) {
791 if (this.undelete_index < current_index) {
791 current_index = current_index + 1;
792 current_index = current_index + 1;
792 }
793 }
793 if (this.undelete_index >= this.ncells()) {
794 if (this.undelete_index >= this.ncells()) {
794 this.select(this.ncells() - 1);
795 this.select(this.ncells() - 1);
795 }
796 }
796 else {
797 else {
797 this.select(this.undelete_index);
798 this.select(this.undelete_index);
798 }
799 }
799 var cell_data = this.undelete_backup;
800 var cell_data = this.undelete_backup;
800 var new_cell = null;
801 var new_cell = null;
801 if (this.undelete_below) {
802 if (this.undelete_below) {
802 new_cell = this.insert_cell_below(cell_data.cell_type);
803 new_cell = this.insert_cell_below(cell_data.cell_type);
803 } else {
804 } else {
804 new_cell = this.insert_cell_above(cell_data.cell_type);
805 new_cell = this.insert_cell_above(cell_data.cell_type);
805 }
806 }
806 new_cell.fromJSON(cell_data);
807 new_cell.fromJSON(cell_data);
807 if (this.undelete_below) {
808 if (this.undelete_below) {
808 this.select(current_index+1);
809 this.select(current_index+1);
809 } else {
810 } else {
810 this.select(current_index);
811 this.select(current_index);
811 }
812 }
812 this.undelete_backup = null;
813 this.undelete_backup = null;
813 this.undelete_index = null;
814 this.undelete_index = null;
814 }
815 }
815 $('#undelete_cell').addClass('disabled');
816 $('#undelete_cell').addClass('disabled');
816 };
817 };
817
818
818 /**
819 /**
819 * Insert a cell so that after insertion the cell is at given index.
820 * Insert a cell so that after insertion the cell is at given index.
820 *
821 *
821 * If cell type is not provided, it will default to the type of the
822 * If cell type is not provided, it will default to the type of the
822 * currently active cell.
823 * currently active cell.
823 *
824 *
824 * Similar to insert_above, but index parameter is mandatory
825 * Similar to insert_above, but index parameter is mandatory
825 *
826 *
826 * Index will be brought back into the accessible range [0,n]
827 * Index will be brought back into the accessible range [0,n]
827 *
828 *
828 * @method insert_cell_at_index
829 * @method insert_cell_at_index
829 * @param [type] {string} in ['code','markdown','heading'], defaults to 'code'
830 * @param [type] {string} in ['code','markdown','heading'], defaults to 'code'
830 * @param [index] {int} a valid index where to insert cell
831 * @param [index] {int} a valid index where to insert cell
831 *
832 *
832 * @return cell {cell|null} created cell or null
833 * @return cell {cell|null} created cell or null
833 **/
834 **/
834 Notebook.prototype.insert_cell_at_index = function(type, index){
835 Notebook.prototype.insert_cell_at_index = function(type, index){
835
836
836 var ncells = this.ncells();
837 var ncells = this.ncells();
837 index = Math.min(index,ncells);
838 index = Math.min(index,ncells);
838 index = Math.max(index,0);
839 index = Math.max(index,0);
839 var cell = null;
840 var cell = null;
840 type = type || this.get_selected_cell().cell_type;
841 type = type || this.get_selected_cell().cell_type;
841
842
842 if (ncells === 0 || this.is_valid_cell_index(index) || index === ncells) {
843 if (ncells === 0 || this.is_valid_cell_index(index) || index === ncells) {
843 var cell_options = {
844 var cell_options = {
844 events: this.events,
845 events: this.events,
845 config: this.config,
846 config: this.config,
846 keyboard_manager: this.keyboard_manager,
847 keyboard_manager: this.keyboard_manager,
847 notebook: this,
848 notebook: this,
848 tooltip: this.tooltip,
849 tooltip: this.tooltip,
849 };
850 };
850 if (type === 'code') {
851 if (type === 'code') {
851 cell = new codecell.CodeCell(this.kernel, cell_options);
852 cell = new codecell.CodeCell(this.kernel, cell_options);
852 cell.set_input_prompt();
853 cell.set_input_prompt();
853 } else if (type === 'markdown') {
854 } else if (type === 'markdown') {
854 cell = new textcell.MarkdownCell(cell_options);
855 cell = new textcell.MarkdownCell(cell_options);
855 } else if (type === 'raw') {
856 } else if (type === 'raw') {
856 cell = new textcell.RawCell(cell_options);
857 cell = new textcell.RawCell(cell_options);
857 } else if (type === 'heading') {
858 } else if (type === 'heading') {
858 cell = new textcell.HeadingCell(cell_options);
859 cell = new textcell.HeadingCell(cell_options);
859 }
860 }
860
861
861 if(this._insert_element_at_index(cell.element,index)) {
862 if(this._insert_element_at_index(cell.element,index)) {
862 cell.render();
863 cell.render();
863 this.events.trigger('create.Cell', {'cell': cell, 'index': index});
864 this.events.trigger('create.Cell', {'cell': cell, 'index': index});
864 cell.refresh();
865 cell.refresh();
865 // We used to select the cell after we refresh it, but there
866 // We used to select the cell after we refresh it, but there
866 // are now cases were this method is called where select is
867 // are now cases were this method is called where select is
867 // not appropriate. The selection logic should be handled by the
868 // not appropriate. The selection logic should be handled by the
868 // caller of the the top level insert_cell methods.
869 // caller of the the top level insert_cell methods.
869 this.set_dirty(true);
870 this.set_dirty(true);
870 }
871 }
871 }
872 }
872 return cell;
873 return cell;
873
874
874 };
875 };
875
876
876 /**
877 /**
877 * Insert an element at given cell index.
878 * Insert an element at given cell index.
878 *
879 *
879 * @method _insert_element_at_index
880 * @method _insert_element_at_index
880 * @param element {dom element} a cell element
881 * @param element {dom element} a cell element
881 * @param [index] {int} a valid index where to inser cell
882 * @param [index] {int} a valid index where to inser cell
882 * @private
883 * @private
883 *
884 *
884 * return true if everything whent fine.
885 * return true if everything whent fine.
885 **/
886 **/
886 Notebook.prototype._insert_element_at_index = function(element, index){
887 Notebook.prototype._insert_element_at_index = function(element, index){
887 if (element === undefined){
888 if (element === undefined){
888 return false;
889 return false;
889 }
890 }
890
891
891 var ncells = this.ncells();
892 var ncells = this.ncells();
892
893
893 if (ncells === 0) {
894 if (ncells === 0) {
894 // special case append if empty
895 // special case append if empty
895 this.element.find('div.end_space').before(element);
896 this.element.find('div.end_space').before(element);
896 } else if ( ncells === index ) {
897 } else if ( ncells === index ) {
897 // special case append it the end, but not empty
898 // special case append it the end, but not empty
898 this.get_cell_element(index-1).after(element);
899 this.get_cell_element(index-1).after(element);
899 } else if (this.is_valid_cell_index(index)) {
900 } else if (this.is_valid_cell_index(index)) {
900 // otherwise always somewhere to append to
901 // otherwise always somewhere to append to
901 this.get_cell_element(index).before(element);
902 this.get_cell_element(index).before(element);
902 } else {
903 } else {
903 return false;
904 return false;
904 }
905 }
905
906
906 if (this.undelete_index !== null && index <= this.undelete_index) {
907 if (this.undelete_index !== null && index <= this.undelete_index) {
907 this.undelete_index = this.undelete_index + 1;
908 this.undelete_index = this.undelete_index + 1;
908 this.set_dirty(true);
909 this.set_dirty(true);
909 }
910 }
910 return true;
911 return true;
911 };
912 };
912
913
913 /**
914 /**
914 * Insert a cell of given type above given index, or at top
915 * Insert a cell of given type above given index, or at top
915 * of notebook if index smaller than 0.
916 * of notebook if index smaller than 0.
916 *
917 *
917 * default index value is the one of currently selected cell
918 * default index value is the one of currently selected cell
918 *
919 *
919 * @method insert_cell_above
920 * @method insert_cell_above
920 * @param [type] {string} cell type
921 * @param [type] {string} cell type
921 * @param [index] {integer}
922 * @param [index] {integer}
922 *
923 *
923 * @return handle to created cell or null
924 * @return handle to created cell or null
924 **/
925 **/
925 Notebook.prototype.insert_cell_above = function (type, index) {
926 Notebook.prototype.insert_cell_above = function (type, index) {
926 index = this.index_or_selected(index);
927 index = this.index_or_selected(index);
927 return this.insert_cell_at_index(type, index);
928 return this.insert_cell_at_index(type, index);
928 };
929 };
929
930
930 /**
931 /**
931 * Insert a cell of given type below given index, or at bottom
932 * Insert a cell of given type below given index, or at bottom
932 * of notebook if index greater than number of cells
933 * of notebook if index greater than number of cells
933 *
934 *
934 * default index value is the one of currently selected cell
935 * default index value is the one of currently selected cell
935 *
936 *
936 * @method insert_cell_below
937 * @method insert_cell_below
937 * @param [type] {string} cell type
938 * @param [type] {string} cell type
938 * @param [index] {integer}
939 * @param [index] {integer}
939 *
940 *
940 * @return handle to created cell or null
941 * @return handle to created cell or null
941 *
942 *
942 **/
943 **/
943 Notebook.prototype.insert_cell_below = function (type, index) {
944 Notebook.prototype.insert_cell_below = function (type, index) {
944 index = this.index_or_selected(index);
945 index = this.index_or_selected(index);
945 return this.insert_cell_at_index(type, index+1);
946 return this.insert_cell_at_index(type, index+1);
946 };
947 };
947
948
948
949
949 /**
950 /**
950 * Insert cell at end of notebook
951 * Insert cell at end of notebook
951 *
952 *
952 * @method insert_cell_at_bottom
953 * @method insert_cell_at_bottom
953 * @param {String} type cell type
954 * @param {String} type cell type
954 *
955 *
955 * @return the added cell; or null
956 * @return the added cell; or null
956 **/
957 **/
957 Notebook.prototype.insert_cell_at_bottom = function (type){
958 Notebook.prototype.insert_cell_at_bottom = function (type){
958 var len = this.ncells();
959 var len = this.ncells();
959 return this.insert_cell_below(type,len-1);
960 return this.insert_cell_below(type,len-1);
960 };
961 };
961
962
962 /**
963 /**
963 * Turn a cell into a code cell.
964 * Turn a cell into a code cell.
964 *
965 *
965 * @method to_code
966 * @method to_code
966 * @param {Number} [index] A cell's index
967 * @param {Number} [index] A cell's index
967 */
968 */
968 Notebook.prototype.to_code = function (index) {
969 Notebook.prototype.to_code = function (index) {
969 var i = this.index_or_selected(index);
970 var i = this.index_or_selected(index);
970 if (this.is_valid_cell_index(i)) {
971 if (this.is_valid_cell_index(i)) {
971 var source_element = this.get_cell_element(i);
972 var source_element = this.get_cell_element(i);
972 var source_cell = source_element.data("cell");
973 var source_cell = source_element.data("cell");
973 if (!(source_cell instanceof codecell.CodeCell)) {
974 if (!(source_cell instanceof codecell.CodeCell)) {
974 var target_cell = this.insert_cell_below('code',i);
975 var target_cell = this.insert_cell_below('code',i);
975 var text = source_cell.get_text();
976 var text = source_cell.get_text();
976 if (text === source_cell.placeholder) {
977 if (text === source_cell.placeholder) {
977 text = '';
978 text = '';
978 }
979 }
979 target_cell.set_text(text);
980 target_cell.set_text(text);
980 // make this value the starting point, so that we can only undo
981 // make this value the starting point, so that we can only undo
981 // to this state, instead of a blank cell
982 // to this state, instead of a blank cell
982 target_cell.code_mirror.clearHistory();
983 target_cell.code_mirror.clearHistory();
983 source_element.remove();
984 source_element.remove();
984 this.select(i);
985 this.select(i);
985 var cursor = source_cell.code_mirror.getCursor();
986 var cursor = source_cell.code_mirror.getCursor();
986 target_cell.code_mirror.setCursor(cursor);
987 target_cell.code_mirror.setCursor(cursor);
987 this.set_dirty(true);
988 this.set_dirty(true);
988 }
989 }
989 }
990 }
990 };
991 };
991
992
992 /**
993 /**
993 * Turn a cell into a Markdown cell.
994 * Turn a cell into a Markdown cell.
994 *
995 *
995 * @method to_markdown
996 * @method to_markdown
996 * @param {Number} [index] A cell's index
997 * @param {Number} [index] A cell's index
997 */
998 */
998 Notebook.prototype.to_markdown = function (index) {
999 Notebook.prototype.to_markdown = function (index) {
999 var i = this.index_or_selected(index);
1000 var i = this.index_or_selected(index);
1000 if (this.is_valid_cell_index(i)) {
1001 if (this.is_valid_cell_index(i)) {
1001 var source_element = this.get_cell_element(i);
1002 var source_element = this.get_cell_element(i);
1002 var source_cell = source_element.data("cell");
1003 var source_cell = source_element.data("cell");
1003 if (!(source_cell instanceof textcell.MarkdownCell)) {
1004 if (!(source_cell instanceof textcell.MarkdownCell)) {
1004 var target_cell = this.insert_cell_below('markdown',i);
1005 var target_cell = this.insert_cell_below('markdown',i);
1005 var text = source_cell.get_text();
1006 var text = source_cell.get_text();
1006 if (text === source_cell.placeholder) {
1007 if (text === source_cell.placeholder) {
1007 text = '';
1008 text = '';
1008 }
1009 }
1009 // We must show the editor before setting its contents
1010 // We must show the editor before setting its contents
1010 target_cell.unrender();
1011 target_cell.unrender();
1011 target_cell.set_text(text);
1012 target_cell.set_text(text);
1012 // make this value the starting point, so that we can only undo
1013 // make this value the starting point, so that we can only undo
1013 // to this state, instead of a blank cell
1014 // to this state, instead of a blank cell
1014 target_cell.code_mirror.clearHistory();
1015 target_cell.code_mirror.clearHistory();
1015 source_element.remove();
1016 source_element.remove();
1016 this.select(i);
1017 this.select(i);
1017 if ((source_cell instanceof textcell.TextCell) && source_cell.rendered) {
1018 if ((source_cell instanceof textcell.TextCell) && source_cell.rendered) {
1018 target_cell.render();
1019 target_cell.render();
1019 }
1020 }
1020 var cursor = source_cell.code_mirror.getCursor();
1021 var cursor = source_cell.code_mirror.getCursor();
1021 target_cell.code_mirror.setCursor(cursor);
1022 target_cell.code_mirror.setCursor(cursor);
1022 this.set_dirty(true);
1023 this.set_dirty(true);
1023 }
1024 }
1024 }
1025 }
1025 };
1026 };
1026
1027
1027 /**
1028 /**
1028 * Turn a cell into a raw text cell.
1029 * Turn a cell into a raw text cell.
1029 *
1030 *
1030 * @method to_raw
1031 * @method to_raw
1031 * @param {Number} [index] A cell's index
1032 * @param {Number} [index] A cell's index
1032 */
1033 */
1033 Notebook.prototype.to_raw = function (index) {
1034 Notebook.prototype.to_raw = function (index) {
1034 var i = this.index_or_selected(index);
1035 var i = this.index_or_selected(index);
1035 if (this.is_valid_cell_index(i)) {
1036 if (this.is_valid_cell_index(i)) {
1036 var source_element = this.get_cell_element(i);
1037 var source_element = this.get_cell_element(i);
1037 var source_cell = source_element.data("cell");
1038 var source_cell = source_element.data("cell");
1038 var target_cell = null;
1039 var target_cell = null;
1039 if (!(source_cell instanceof textcell.RawCell)) {
1040 if (!(source_cell instanceof textcell.RawCell)) {
1040 target_cell = this.insert_cell_below('raw',i);
1041 target_cell = this.insert_cell_below('raw',i);
1041 var text = source_cell.get_text();
1042 var text = source_cell.get_text();
1042 if (text === source_cell.placeholder) {
1043 if (text === source_cell.placeholder) {
1043 text = '';
1044 text = '';
1044 }
1045 }
1045 // We must show the editor before setting its contents
1046 // We must show the editor before setting its contents
1046 target_cell.unrender();
1047 target_cell.unrender();
1047 target_cell.set_text(text);
1048 target_cell.set_text(text);
1048 // make this value the starting point, so that we can only undo
1049 // make this value the starting point, so that we can only undo
1049 // to this state, instead of a blank cell
1050 // to this state, instead of a blank cell
1050 target_cell.code_mirror.clearHistory();
1051 target_cell.code_mirror.clearHistory();
1051 source_element.remove();
1052 source_element.remove();
1052 this.select(i);
1053 this.select(i);
1053 var cursor = source_cell.code_mirror.getCursor();
1054 var cursor = source_cell.code_mirror.getCursor();
1054 target_cell.code_mirror.setCursor(cursor);
1055 target_cell.code_mirror.setCursor(cursor);
1055 this.set_dirty(true);
1056 this.set_dirty(true);
1056 }
1057 }
1057 }
1058 }
1058 };
1059 };
1059
1060
1060 /**
1061 /**
1061 * Turn a cell into a heading cell.
1062 * Turn a cell into a heading cell.
1062 *
1063 *
1063 * @method to_heading
1064 * @method to_heading
1064 * @param {Number} [index] A cell's index
1065 * @param {Number} [index] A cell's index
1065 * @param {Number} [level] A heading level (e.g., 1 becomes &lt;h1&gt;)
1066 * @param {Number} [level] A heading level (e.g., 1 becomes &lt;h1&gt;)
1066 */
1067 */
1067 Notebook.prototype.to_heading = function (index, level) {
1068 Notebook.prototype.to_heading = function (index, level) {
1068 level = level || 1;
1069 level = level || 1;
1069 var i = this.index_or_selected(index);
1070 var i = this.index_or_selected(index);
1070 if (this.is_valid_cell_index(i)) {
1071 if (this.is_valid_cell_index(i)) {
1071 var source_element = this.get_cell_element(i);
1072 var source_element = this.get_cell_element(i);
1072 var source_cell = source_element.data("cell");
1073 var source_cell = source_element.data("cell");
1073 var target_cell = null;
1074 var target_cell = null;
1074 if (source_cell instanceof textcell.HeadingCell) {
1075 if (source_cell instanceof textcell.HeadingCell) {
1075 source_cell.set_level(level);
1076 source_cell.set_level(level);
1076 } else {
1077 } else {
1077 target_cell = this.insert_cell_below('heading',i);
1078 target_cell = this.insert_cell_below('heading',i);
1078 var text = source_cell.get_text();
1079 var text = source_cell.get_text();
1079 if (text === source_cell.placeholder) {
1080 if (text === source_cell.placeholder) {
1080 text = '';
1081 text = '';
1081 }
1082 }
1082 // We must show the editor before setting its contents
1083 // We must show the editor before setting its contents
1083 target_cell.set_level(level);
1084 target_cell.set_level(level);
1084 target_cell.unrender();
1085 target_cell.unrender();
1085 target_cell.set_text(text);
1086 target_cell.set_text(text);
1086 // make this value the starting point, so that we can only undo
1087 // make this value the starting point, so that we can only undo
1087 // to this state, instead of a blank cell
1088 // to this state, instead of a blank cell
1088 target_cell.code_mirror.clearHistory();
1089 target_cell.code_mirror.clearHistory();
1089 source_element.remove();
1090 source_element.remove();
1090 this.select(i);
1091 this.select(i);
1091 var cursor = source_cell.code_mirror.getCursor();
1092 var cursor = source_cell.code_mirror.getCursor();
1092 target_cell.code_mirror.setCursor(cursor);
1093 target_cell.code_mirror.setCursor(cursor);
1093 if ((source_cell instanceof textcell.TextCell) && source_cell.rendered) {
1094 if ((source_cell instanceof textcell.TextCell) && source_cell.rendered) {
1094 target_cell.render();
1095 target_cell.render();
1095 }
1096 }
1096 }
1097 }
1097 this.set_dirty(true);
1098 this.set_dirty(true);
1098 this.events.trigger('selected_cell_type_changed.Notebook',
1099 this.events.trigger('selected_cell_type_changed.Notebook',
1099 {'cell_type':'heading',level:level}
1100 {'cell_type':'heading',level:level}
1100 );
1101 );
1101 }
1102 }
1102 };
1103 };
1103
1104
1104
1105
1105 // Cut/Copy/Paste
1106 // Cut/Copy/Paste
1106
1107
1107 /**
1108 /**
1108 * Enable UI elements for pasting cells.
1109 * Enable UI elements for pasting cells.
1109 *
1110 *
1110 * @method enable_paste
1111 * @method enable_paste
1111 */
1112 */
1112 Notebook.prototype.enable_paste = function () {
1113 Notebook.prototype.enable_paste = function () {
1113 var that = this;
1114 var that = this;
1114 if (!this.paste_enabled) {
1115 if (!this.paste_enabled) {
1115 $('#paste_cell_replace').removeClass('disabled')
1116 $('#paste_cell_replace').removeClass('disabled')
1116 .on('click', function () {that.paste_cell_replace();});
1117 .on('click', function () {that.paste_cell_replace();});
1117 $('#paste_cell_above').removeClass('disabled')
1118 $('#paste_cell_above').removeClass('disabled')
1118 .on('click', function () {that.paste_cell_above();});
1119 .on('click', function () {that.paste_cell_above();});
1119 $('#paste_cell_below').removeClass('disabled')
1120 $('#paste_cell_below').removeClass('disabled')
1120 .on('click', function () {that.paste_cell_below();});
1121 .on('click', function () {that.paste_cell_below();});
1121 this.paste_enabled = true;
1122 this.paste_enabled = true;
1122 }
1123 }
1123 };
1124 };
1124
1125
1125 /**
1126 /**
1126 * Disable UI elements for pasting cells.
1127 * Disable UI elements for pasting cells.
1127 *
1128 *
1128 * @method disable_paste
1129 * @method disable_paste
1129 */
1130 */
1130 Notebook.prototype.disable_paste = function () {
1131 Notebook.prototype.disable_paste = function () {
1131 if (this.paste_enabled) {
1132 if (this.paste_enabled) {
1132 $('#paste_cell_replace').addClass('disabled').off('click');
1133 $('#paste_cell_replace').addClass('disabled').off('click');
1133 $('#paste_cell_above').addClass('disabled').off('click');
1134 $('#paste_cell_above').addClass('disabled').off('click');
1134 $('#paste_cell_below').addClass('disabled').off('click');
1135 $('#paste_cell_below').addClass('disabled').off('click');
1135 this.paste_enabled = false;
1136 this.paste_enabled = false;
1136 }
1137 }
1137 };
1138 };
1138
1139
1139 /**
1140 /**
1140 * Cut a cell.
1141 * Cut a cell.
1141 *
1142 *
1142 * @method cut_cell
1143 * @method cut_cell
1143 */
1144 */
1144 Notebook.prototype.cut_cell = function () {
1145 Notebook.prototype.cut_cell = function () {
1145 this.copy_cell();
1146 this.copy_cell();
1146 this.delete_cell();
1147 this.delete_cell();
1147 };
1148 };
1148
1149
1149 /**
1150 /**
1150 * Copy a cell.
1151 * Copy a cell.
1151 *
1152 *
1152 * @method copy_cell
1153 * @method copy_cell
1153 */
1154 */
1154 Notebook.prototype.copy_cell = function () {
1155 Notebook.prototype.copy_cell = function () {
1155 var cell = this.get_selected_cell();
1156 var cell = this.get_selected_cell();
1156 this.clipboard = cell.toJSON();
1157 this.clipboard = cell.toJSON();
1157 this.enable_paste();
1158 this.enable_paste();
1158 };
1159 };
1159
1160
1160 /**
1161 /**
1161 * Replace the selected cell with a cell in the clipboard.
1162 * Replace the selected cell with a cell in the clipboard.
1162 *
1163 *
1163 * @method paste_cell_replace
1164 * @method paste_cell_replace
1164 */
1165 */
1165 Notebook.prototype.paste_cell_replace = function () {
1166 Notebook.prototype.paste_cell_replace = function () {
1166 if (this.clipboard !== null && this.paste_enabled) {
1167 if (this.clipboard !== null && this.paste_enabled) {
1167 var cell_data = this.clipboard;
1168 var cell_data = this.clipboard;
1168 var new_cell = this.insert_cell_above(cell_data.cell_type);
1169 var new_cell = this.insert_cell_above(cell_data.cell_type);
1169 new_cell.fromJSON(cell_data);
1170 new_cell.fromJSON(cell_data);
1170 var old_cell = this.get_next_cell(new_cell);
1171 var old_cell = this.get_next_cell(new_cell);
1171 this.delete_cell(this.find_cell_index(old_cell));
1172 this.delete_cell(this.find_cell_index(old_cell));
1172 this.select(this.find_cell_index(new_cell));
1173 this.select(this.find_cell_index(new_cell));
1173 }
1174 }
1174 };
1175 };
1175
1176
1176 /**
1177 /**
1177 * Paste a cell from the clipboard above the selected cell.
1178 * Paste a cell from the clipboard above the selected cell.
1178 *
1179 *
1179 * @method paste_cell_above
1180 * @method paste_cell_above
1180 */
1181 */
1181 Notebook.prototype.paste_cell_above = function () {
1182 Notebook.prototype.paste_cell_above = function () {
1182 if (this.clipboard !== null && this.paste_enabled) {
1183 if (this.clipboard !== null && this.paste_enabled) {
1183 var cell_data = this.clipboard;
1184 var cell_data = this.clipboard;
1184 var new_cell = this.insert_cell_above(cell_data.cell_type);
1185 var new_cell = this.insert_cell_above(cell_data.cell_type);
1185 new_cell.fromJSON(cell_data);
1186 new_cell.fromJSON(cell_data);
1186 new_cell.focus_cell();
1187 new_cell.focus_cell();
1187 }
1188 }
1188 };
1189 };
1189
1190
1190 /**
1191 /**
1191 * Paste a cell from the clipboard below the selected cell.
1192 * Paste a cell from the clipboard below the selected cell.
1192 *
1193 *
1193 * @method paste_cell_below
1194 * @method paste_cell_below
1194 */
1195 */
1195 Notebook.prototype.paste_cell_below = function () {
1196 Notebook.prototype.paste_cell_below = function () {
1196 if (this.clipboard !== null && this.paste_enabled) {
1197 if (this.clipboard !== null && this.paste_enabled) {
1197 var cell_data = this.clipboard;
1198 var cell_data = this.clipboard;
1198 var new_cell = this.insert_cell_below(cell_data.cell_type);
1199 var new_cell = this.insert_cell_below(cell_data.cell_type);
1199 new_cell.fromJSON(cell_data);
1200 new_cell.fromJSON(cell_data);
1200 new_cell.focus_cell();
1201 new_cell.focus_cell();
1201 }
1202 }
1202 };
1203 };
1203
1204
1204 // Split/merge
1205 // Split/merge
1205
1206
1206 /**
1207 /**
1207 * Split the selected cell into two, at the cursor.
1208 * Split the selected cell into two, at the cursor.
1208 *
1209 *
1209 * @method split_cell
1210 * @method split_cell
1210 */
1211 */
1211 Notebook.prototype.split_cell = function () {
1212 Notebook.prototype.split_cell = function () {
1212 var mdc = textcell.MarkdownCell;
1213 var mdc = textcell.MarkdownCell;
1213 var rc = textcell.RawCell;
1214 var rc = textcell.RawCell;
1214 var cell = this.get_selected_cell();
1215 var cell = this.get_selected_cell();
1215 if (cell.is_splittable()) {
1216 if (cell.is_splittable()) {
1216 var texta = cell.get_pre_cursor();
1217 var texta = cell.get_pre_cursor();
1217 var textb = cell.get_post_cursor();
1218 var textb = cell.get_post_cursor();
1218 cell.set_text(textb);
1219 cell.set_text(textb);
1219 var new_cell = this.insert_cell_above(cell.cell_type);
1220 var new_cell = this.insert_cell_above(cell.cell_type);
1220 // Unrender the new cell so we can call set_text.
1221 // Unrender the new cell so we can call set_text.
1221 new_cell.unrender();
1222 new_cell.unrender();
1222 new_cell.set_text(texta);
1223 new_cell.set_text(texta);
1223 }
1224 }
1224 };
1225 };
1225
1226
1226 /**
1227 /**
1227 * Combine the selected cell into the cell above it.
1228 * Combine the selected cell into the cell above it.
1228 *
1229 *
1229 * @method merge_cell_above
1230 * @method merge_cell_above
1230 */
1231 */
1231 Notebook.prototype.merge_cell_above = function () {
1232 Notebook.prototype.merge_cell_above = function () {
1232 var mdc = textcell.MarkdownCell;
1233 var mdc = textcell.MarkdownCell;
1233 var rc = textcell.RawCell;
1234 var rc = textcell.RawCell;
1234 var index = this.get_selected_index();
1235 var index = this.get_selected_index();
1235 var cell = this.get_cell(index);
1236 var cell = this.get_cell(index);
1236 var render = cell.rendered;
1237 var render = cell.rendered;
1237 if (!cell.is_mergeable()) {
1238 if (!cell.is_mergeable()) {
1238 return;
1239 return;
1239 }
1240 }
1240 if (index > 0) {
1241 if (index > 0) {
1241 var upper_cell = this.get_cell(index-1);
1242 var upper_cell = this.get_cell(index-1);
1242 if (!upper_cell.is_mergeable()) {
1243 if (!upper_cell.is_mergeable()) {
1243 return;
1244 return;
1244 }
1245 }
1245 var upper_text = upper_cell.get_text();
1246 var upper_text = upper_cell.get_text();
1246 var text = cell.get_text();
1247 var text = cell.get_text();
1247 if (cell instanceof codecell.CodeCell) {
1248 if (cell instanceof codecell.CodeCell) {
1248 cell.set_text(upper_text+'\n'+text);
1249 cell.set_text(upper_text+'\n'+text);
1249 } else {
1250 } else {
1250 cell.unrender(); // Must unrender before we set_text.
1251 cell.unrender(); // Must unrender before we set_text.
1251 cell.set_text(upper_text+'\n\n'+text);
1252 cell.set_text(upper_text+'\n\n'+text);
1252 if (render) {
1253 if (render) {
1253 // The rendered state of the final cell should match
1254 // The rendered state of the final cell should match
1254 // that of the original selected cell;
1255 // that of the original selected cell;
1255 cell.render();
1256 cell.render();
1256 }
1257 }
1257 }
1258 }
1258 this.delete_cell(index-1);
1259 this.delete_cell(index-1);
1259 this.select(this.find_cell_index(cell));
1260 this.select(this.find_cell_index(cell));
1260 }
1261 }
1261 };
1262 };
1262
1263
1263 /**
1264 /**
1264 * Combine the selected cell into the cell below it.
1265 * Combine the selected cell into the cell below it.
1265 *
1266 *
1266 * @method merge_cell_below
1267 * @method merge_cell_below
1267 */
1268 */
1268 Notebook.prototype.merge_cell_below = function () {
1269 Notebook.prototype.merge_cell_below = function () {
1269 var mdc = textcell.MarkdownCell;
1270 var mdc = textcell.MarkdownCell;
1270 var rc = textcell.RawCell;
1271 var rc = textcell.RawCell;
1271 var index = this.get_selected_index();
1272 var index = this.get_selected_index();
1272 var cell = this.get_cell(index);
1273 var cell = this.get_cell(index);
1273 var render = cell.rendered;
1274 var render = cell.rendered;
1274 if (!cell.is_mergeable()) {
1275 if (!cell.is_mergeable()) {
1275 return;
1276 return;
1276 }
1277 }
1277 if (index < this.ncells()-1) {
1278 if (index < this.ncells()-1) {
1278 var lower_cell = this.get_cell(index+1);
1279 var lower_cell = this.get_cell(index+1);
1279 if (!lower_cell.is_mergeable()) {
1280 if (!lower_cell.is_mergeable()) {
1280 return;
1281 return;
1281 }
1282 }
1282 var lower_text = lower_cell.get_text();
1283 var lower_text = lower_cell.get_text();
1283 var text = cell.get_text();
1284 var text = cell.get_text();
1284 if (cell instanceof codecell.CodeCell) {
1285 if (cell instanceof codecell.CodeCell) {
1285 cell.set_text(text+'\n'+lower_text);
1286 cell.set_text(text+'\n'+lower_text);
1286 } else {
1287 } else {
1287 cell.unrender(); // Must unrender before we set_text.
1288 cell.unrender(); // Must unrender before we set_text.
1288 cell.set_text(text+'\n\n'+lower_text);
1289 cell.set_text(text+'\n\n'+lower_text);
1289 if (render) {
1290 if (render) {
1290 // The rendered state of the final cell should match
1291 // The rendered state of the final cell should match
1291 // that of the original selected cell;
1292 // that of the original selected cell;
1292 cell.render();
1293 cell.render();
1293 }
1294 }
1294 }
1295 }
1295 this.delete_cell(index+1);
1296 this.delete_cell(index+1);
1296 this.select(this.find_cell_index(cell));
1297 this.select(this.find_cell_index(cell));
1297 }
1298 }
1298 };
1299 };
1299
1300
1300
1301
1301 // Cell collapsing and output clearing
1302 // Cell collapsing and output clearing
1302
1303
1303 /**
1304 /**
1304 * Hide a cell's output.
1305 * Hide a cell's output.
1305 *
1306 *
1306 * @method collapse_output
1307 * @method collapse_output
1307 * @param {Number} index A cell's numeric index
1308 * @param {Number} index A cell's numeric index
1308 */
1309 */
1309 Notebook.prototype.collapse_output = function (index) {
1310 Notebook.prototype.collapse_output = function (index) {
1310 var i = this.index_or_selected(index);
1311 var i = this.index_or_selected(index);
1311 var cell = this.get_cell(i);
1312 var cell = this.get_cell(i);
1312 if (cell !== null && (cell instanceof codecell.CodeCell)) {
1313 if (cell !== null && (cell instanceof codecell.CodeCell)) {
1313 cell.collapse_output();
1314 cell.collapse_output();
1314 this.set_dirty(true);
1315 this.set_dirty(true);
1315 }
1316 }
1316 };
1317 };
1317
1318
1318 /**
1319 /**
1319 * Hide each code cell's output area.
1320 * Hide each code cell's output area.
1320 *
1321 *
1321 * @method collapse_all_output
1322 * @method collapse_all_output
1322 */
1323 */
1323 Notebook.prototype.collapse_all_output = function () {
1324 Notebook.prototype.collapse_all_output = function () {
1324 $.map(this.get_cells(), function (cell, i) {
1325 $.map(this.get_cells(), function (cell, i) {
1325 if (cell instanceof codecell.CodeCell) {
1326 if (cell instanceof codecell.CodeCell) {
1326 cell.collapse_output();
1327 cell.collapse_output();
1327 }
1328 }
1328 });
1329 });
1329 // this should not be set if the `collapse` key is removed from nbformat
1330 // this should not be set if the `collapse` key is removed from nbformat
1330 this.set_dirty(true);
1331 this.set_dirty(true);
1331 };
1332 };
1332
1333
1333 /**
1334 /**
1334 * Show a cell's output.
1335 * Show a cell's output.
1335 *
1336 *
1336 * @method expand_output
1337 * @method expand_output
1337 * @param {Number} index A cell's numeric index
1338 * @param {Number} index A cell's numeric index
1338 */
1339 */
1339 Notebook.prototype.expand_output = function (index) {
1340 Notebook.prototype.expand_output = function (index) {
1340 var i = this.index_or_selected(index);
1341 var i = this.index_or_selected(index);
1341 var cell = this.get_cell(i);
1342 var cell = this.get_cell(i);
1342 if (cell !== null && (cell instanceof codecell.CodeCell)) {
1343 if (cell !== null && (cell instanceof codecell.CodeCell)) {
1343 cell.expand_output();
1344 cell.expand_output();
1344 this.set_dirty(true);
1345 this.set_dirty(true);
1345 }
1346 }
1346 };
1347 };
1347
1348
1348 /**
1349 /**
1349 * Expand each code cell's output area, and remove scrollbars.
1350 * Expand each code cell's output area, and remove scrollbars.
1350 *
1351 *
1351 * @method expand_all_output
1352 * @method expand_all_output
1352 */
1353 */
1353 Notebook.prototype.expand_all_output = function () {
1354 Notebook.prototype.expand_all_output = function () {
1354 $.map(this.get_cells(), function (cell, i) {
1355 $.map(this.get_cells(), function (cell, i) {
1355 if (cell instanceof codecell.CodeCell) {
1356 if (cell instanceof codecell.CodeCell) {
1356 cell.expand_output();
1357 cell.expand_output();
1357 }
1358 }
1358 });
1359 });
1359 // this should not be set if the `collapse` key is removed from nbformat
1360 // this should not be set if the `collapse` key is removed from nbformat
1360 this.set_dirty(true);
1361 this.set_dirty(true);
1361 };
1362 };
1362
1363
1363 /**
1364 /**
1364 * Clear the selected CodeCell's output area.
1365 * Clear the selected CodeCell's output area.
1365 *
1366 *
1366 * @method clear_output
1367 * @method clear_output
1367 * @param {Number} index A cell's numeric index
1368 * @param {Number} index A cell's numeric index
1368 */
1369 */
1369 Notebook.prototype.clear_output = function (index) {
1370 Notebook.prototype.clear_output = function (index) {
1370 var i = this.index_or_selected(index);
1371 var i = this.index_or_selected(index);
1371 var cell = this.get_cell(i);
1372 var cell = this.get_cell(i);
1372 if (cell !== null && (cell instanceof codecell.CodeCell)) {
1373 if (cell !== null && (cell instanceof codecell.CodeCell)) {
1373 cell.clear_output();
1374 cell.clear_output();
1374 this.set_dirty(true);
1375 this.set_dirty(true);
1375 }
1376 }
1376 };
1377 };
1377
1378
1378 /**
1379 /**
1379 * Clear each code cell's output area.
1380 * Clear each code cell's output area.
1380 *
1381 *
1381 * @method clear_all_output
1382 * @method clear_all_output
1382 */
1383 */
1383 Notebook.prototype.clear_all_output = function () {
1384 Notebook.prototype.clear_all_output = function () {
1384 $.map(this.get_cells(), function (cell, i) {
1385 $.map(this.get_cells(), function (cell, i) {
1385 if (cell instanceof codecell.CodeCell) {
1386 if (cell instanceof codecell.CodeCell) {
1386 cell.clear_output();
1387 cell.clear_output();
1387 }
1388 }
1388 });
1389 });
1389 this.set_dirty(true);
1390 this.set_dirty(true);
1390 };
1391 };
1391
1392
1392 /**
1393 /**
1393 * Scroll the selected CodeCell's output area.
1394 * Scroll the selected CodeCell's output area.
1394 *
1395 *
1395 * @method scroll_output
1396 * @method scroll_output
1396 * @param {Number} index A cell's numeric index
1397 * @param {Number} index A cell's numeric index
1397 */
1398 */
1398 Notebook.prototype.scroll_output = function (index) {
1399 Notebook.prototype.scroll_output = function (index) {
1399 var i = this.index_or_selected(index);
1400 var i = this.index_or_selected(index);
1400 var cell = this.get_cell(i);
1401 var cell = this.get_cell(i);
1401 if (cell !== null && (cell instanceof codecell.CodeCell)) {
1402 if (cell !== null && (cell instanceof codecell.CodeCell)) {
1402 cell.scroll_output();
1403 cell.scroll_output();
1403 this.set_dirty(true);
1404 this.set_dirty(true);
1404 }
1405 }
1405 };
1406 };
1406
1407
1407 /**
1408 /**
1408 * Expand each code cell's output area, and add a scrollbar for long output.
1409 * Expand each code cell's output area, and add a scrollbar for long output.
1409 *
1410 *
1410 * @method scroll_all_output
1411 * @method scroll_all_output
1411 */
1412 */
1412 Notebook.prototype.scroll_all_output = function () {
1413 Notebook.prototype.scroll_all_output = function () {
1413 $.map(this.get_cells(), function (cell, i) {
1414 $.map(this.get_cells(), function (cell, i) {
1414 if (cell instanceof codecell.CodeCell) {
1415 if (cell instanceof codecell.CodeCell) {
1415 cell.scroll_output();
1416 cell.scroll_output();
1416 }
1417 }
1417 });
1418 });
1418 // this should not be set if the `collapse` key is removed from nbformat
1419 // this should not be set if the `collapse` key is removed from nbformat
1419 this.set_dirty(true);
1420 this.set_dirty(true);
1420 };
1421 };
1421
1422
1422 /** Toggle whether a cell's output is collapsed or expanded.
1423 /** Toggle whether a cell's output is collapsed or expanded.
1423 *
1424 *
1424 * @method toggle_output
1425 * @method toggle_output
1425 * @param {Number} index A cell's numeric index
1426 * @param {Number} index A cell's numeric index
1426 */
1427 */
1427 Notebook.prototype.toggle_output = function (index) {
1428 Notebook.prototype.toggle_output = function (index) {
1428 var i = this.index_or_selected(index);
1429 var i = this.index_or_selected(index);
1429 var cell = this.get_cell(i);
1430 var cell = this.get_cell(i);
1430 if (cell !== null && (cell instanceof codecell.CodeCell)) {
1431 if (cell !== null && (cell instanceof codecell.CodeCell)) {
1431 cell.toggle_output();
1432 cell.toggle_output();
1432 this.set_dirty(true);
1433 this.set_dirty(true);
1433 }
1434 }
1434 };
1435 };
1435
1436
1436 /**
1437 /**
1437 * Hide/show the output of all cells.
1438 * Hide/show the output of all cells.
1438 *
1439 *
1439 * @method toggle_all_output
1440 * @method toggle_all_output
1440 */
1441 */
1441 Notebook.prototype.toggle_all_output = function () {
1442 Notebook.prototype.toggle_all_output = function () {
1442 $.map(this.get_cells(), function (cell, i) {
1443 $.map(this.get_cells(), function (cell, i) {
1443 if (cell instanceof codecell.CodeCell) {
1444 if (cell instanceof codecell.CodeCell) {
1444 cell.toggle_output();
1445 cell.toggle_output();
1445 }
1446 }
1446 });
1447 });
1447 // this should not be set if the `collapse` key is removed from nbformat
1448 // this should not be set if the `collapse` key is removed from nbformat
1448 this.set_dirty(true);
1449 this.set_dirty(true);
1449 };
1450 };
1450
1451
1451 /**
1452 /**
1452 * Toggle a scrollbar for long cell outputs.
1453 * Toggle a scrollbar for long cell outputs.
1453 *
1454 *
1454 * @method toggle_output_scroll
1455 * @method toggle_output_scroll
1455 * @param {Number} index A cell's numeric index
1456 * @param {Number} index A cell's numeric index
1456 */
1457 */
1457 Notebook.prototype.toggle_output_scroll = function (index) {
1458 Notebook.prototype.toggle_output_scroll = function (index) {
1458 var i = this.index_or_selected(index);
1459 var i = this.index_or_selected(index);
1459 var cell = this.get_cell(i);
1460 var cell = this.get_cell(i);
1460 if (cell !== null && (cell instanceof codecell.CodeCell)) {
1461 if (cell !== null && (cell instanceof codecell.CodeCell)) {
1461 cell.toggle_output_scroll();
1462 cell.toggle_output_scroll();
1462 this.set_dirty(true);
1463 this.set_dirty(true);
1463 }
1464 }
1464 };
1465 };
1465
1466
1466 /**
1467 /**
1467 * Toggle the scrolling of long output on all cells.
1468 * Toggle the scrolling of long output on all cells.
1468 *
1469 *
1469 * @method toggle_all_output_scrolling
1470 * @method toggle_all_output_scrolling
1470 */
1471 */
1471 Notebook.prototype.toggle_all_output_scroll = function () {
1472 Notebook.prototype.toggle_all_output_scroll = function () {
1472 $.map(this.get_cells(), function (cell, i) {
1473 $.map(this.get_cells(), function (cell, i) {
1473 if (cell instanceof codecell.CodeCell) {
1474 if (cell instanceof codecell.CodeCell) {
1474 cell.toggle_output_scroll();
1475 cell.toggle_output_scroll();
1475 }
1476 }
1476 });
1477 });
1477 // this should not be set if the `collapse` key is removed from nbformat
1478 // this should not be set if the `collapse` key is removed from nbformat
1478 this.set_dirty(true);
1479 this.set_dirty(true);
1479 };
1480 };
1480
1481
1481 // Other cell functions: line numbers, ...
1482 // Other cell functions: line numbers, ...
1482
1483
1483 /**
1484 /**
1484 * Toggle line numbers in the selected cell's input area.
1485 * Toggle line numbers in the selected cell's input area.
1485 *
1486 *
1486 * @method cell_toggle_line_numbers
1487 * @method cell_toggle_line_numbers
1487 */
1488 */
1488 Notebook.prototype.cell_toggle_line_numbers = function() {
1489 Notebook.prototype.cell_toggle_line_numbers = function() {
1489 this.get_selected_cell().toggle_line_numbers();
1490 this.get_selected_cell().toggle_line_numbers();
1490 };
1491 };
1491
1492
1492 /**
1493 /**
1493 * Set the codemirror mode for all code cells, including the default for
1494 * Set the codemirror mode for all code cells, including the default for
1494 * new code cells.
1495 * new code cells.
1495 *
1496 *
1496 * @method set_codemirror_mode
1497 * @method set_codemirror_mode
1497 */
1498 */
1498 Notebook.prototype.set_codemirror_mode = function(newmode){
1499 Notebook.prototype.set_codemirror_mode = function(newmode){
1499 if (newmode === this.codemirror_mode) {
1500 if (newmode === this.codemirror_mode) {
1500 return;
1501 return;
1501 }
1502 }
1502 this.codemirror_mode = newmode;
1503 this.codemirror_mode = newmode;
1503 codecell.CodeCell.options_default.cm_config.mode = newmode;
1504 codecell.CodeCell.options_default.cm_config.mode = newmode;
1504 modename = newmode.name || newmode
1505 modename = newmode.name || newmode
1505
1506
1506 that = this;
1507 that = this;
1507 CodeMirror.requireMode(modename, function(){
1508 CodeMirror.requireMode(modename, function(){
1508 $.map(that.get_cells(), function(cell, i) {
1509 $.map(that.get_cells(), function(cell, i) {
1509 if (cell.cell_type === 'code'){
1510 if (cell.cell_type === 'code'){
1510 cell.code_mirror.setOption('mode', newmode);
1511 cell.code_mirror.setOption('mode', newmode);
1511 // This is currently redundant, because cm_config ends up as
1512 // This is currently redundant, because cm_config ends up as
1512 // codemirror's own .options object, but I don't want to
1513 // codemirror's own .options object, but I don't want to
1513 // rely on that.
1514 // rely on that.
1514 cell.cm_config.mode = newmode;
1515 cell.cm_config.mode = newmode;
1515 }
1516 }
1516 });
1517 });
1517 })
1518 })
1518 };
1519 };
1519
1520
1520 // Session related things
1521 // Session related things
1521
1522
1522 /**
1523 /**
1523 * Start a new session and set it on each code cell.
1524 * Start a new session and set it on each code cell.
1524 *
1525 *
1525 * @method start_session
1526 * @method start_session
1526 */
1527 */
1527 Notebook.prototype.start_session = function (kernel_name) {
1528 Notebook.prototype.start_session = function (kernel_name) {
1529 var that = this;
1528 if (kernel_name === undefined) {
1530 if (kernel_name === undefined) {
1529 kernel_name = this.default_kernel_name;
1531 kernel_name = this.default_kernel_name;
1530 }
1532 }
1533 if (this._session_starting) {
1534 throw new session.SessionAlreadyStarting();
1535 }
1536 this._session_starting = true;
1537
1538 if (this.session !== null) {
1539 var s = this.session;
1540 this.session = null;
1541 // need to start the new session in a callback after delete,
1542 // because javascript does not guarantee the ordering of AJAX requests (?!)
1543 s.delete(function () {
1544 // on successful delete, start new session
1545 that._session_starting = false;
1546 that.start_session(kernel_name);
1547 }, function (jqXHR, status, error) {
1548 // log the failed delete, but still create a new session
1549 // 404 just means it was already deleted by someone else,
1550 // but other errors are possible.
1551 utils.log_ajax_error(jqXHR, status, error);
1552 that._session_starting = false;
1553 that.start_session(kernel_name);
1554 }
1555 );
1556 return;
1557 }
1558
1559
1560
1531 this.session = new session.Session({
1561 this.session = new session.Session({
1532 base_url: this.base_url,
1562 base_url: this.base_url,
1533 ws_url: this.ws_url,
1563 ws_url: this.ws_url,
1534 notebook_path: this.notebook_path,
1564 notebook_path: this.notebook_path,
1535 notebook_name: this.notebook_name,
1565 notebook_name: this.notebook_name,
1536 // For now, create all sessions with the 'python' kernel, which is the
1566 // For now, create all sessions with the 'python' kernel, which is the
1537 // default. Later, the user will be able to select kernels. This is
1567 // default. Later, the user will be able to select kernels. This is
1538 // overridden if KernelManager.kernel_cmd is specified for the server.
1568 // overridden if KernelManager.kernel_cmd is specified for the server.
1539 kernel_name: kernel_name,
1569 kernel_name: kernel_name,
1540 notebook: this});
1570 notebook: this});
1541
1571
1542 this.session.start($.proxy(this._session_started, this));
1572 this.session.start(
1573 $.proxy(this._session_started, this),
1574 $.proxy(this._session_start_failed, this)
1575 );
1543 };
1576 };
1544
1577
1545
1578
1546 /**
1579 /**
1547 * Once a session is started, link the code cells to the kernel and pass the
1580 * Once a session is started, link the code cells to the kernel and pass the
1548 * comm manager to the widget manager
1581 * comm manager to the widget manager
1549 *
1582 *
1550 */
1583 */
1551 Notebook.prototype._session_started = function(){
1584 Notebook.prototype._session_started = function (){
1585 this._session_starting = false;
1552 this.kernel = this.session.kernel;
1586 this.kernel = this.session.kernel;
1553 var ncells = this.ncells();
1587 var ncells = this.ncells();
1554 for (var i=0; i<ncells; i++) {
1588 for (var i=0; i<ncells; i++) {
1555 var cell = this.get_cell(i);
1589 var cell = this.get_cell(i);
1556 if (cell instanceof codecell.CodeCell) {
1590 if (cell instanceof codecell.CodeCell) {
1557 cell.set_kernel(this.session.kernel);
1591 cell.set_kernel(this.session.kernel);
1558 }
1592 }
1559 }
1593 }
1560 };
1594 };
1561
1595 Notebook.prototype._session_start_failed = function (jqxhr, status, error){
1596 this._session_starting = false;
1597 utils.log_ajax_error(jqxhr, status, error);
1598 };
1599
1562 /**
1600 /**
1563 * Prompt the user to restart the IPython kernel.
1601 * Prompt the user to restart the IPython kernel.
1564 *
1602 *
1565 * @method restart_kernel
1603 * @method restart_kernel
1566 */
1604 */
1567 Notebook.prototype.restart_kernel = function () {
1605 Notebook.prototype.restart_kernel = function () {
1568 var that = this;
1606 var that = this;
1569 dialog.modal({
1607 dialog.modal({
1570 notebook: this,
1608 notebook: this,
1571 keyboard_manager: this.keyboard_manager,
1609 keyboard_manager: this.keyboard_manager,
1572 title : "Restart kernel or continue running?",
1610 title : "Restart kernel or continue running?",
1573 body : $("<p/>").text(
1611 body : $("<p/>").text(
1574 'Do you want to restart the current kernel? You will lose all variables defined in it.'
1612 'Do you want to restart the current kernel? You will lose all variables defined in it.'
1575 ),
1613 ),
1576 buttons : {
1614 buttons : {
1577 "Continue running" : {},
1615 "Continue running" : {},
1578 "Restart" : {
1616 "Restart" : {
1579 "class" : "btn-danger",
1617 "class" : "btn-danger",
1580 "click" : function() {
1618 "click" : function() {
1581 that.session.restart_kernel();
1619 that.session.restart_kernel();
1582 }
1620 }
1583 }
1621 }
1584 }
1622 }
1585 });
1623 });
1586 };
1624 };
1587
1625
1588 /**
1626 /**
1589 * Execute or render cell outputs and go into command mode.
1627 * Execute or render cell outputs and go into command mode.
1590 *
1628 *
1591 * @method execute_cell
1629 * @method execute_cell
1592 */
1630 */
1593 Notebook.prototype.execute_cell = function () {
1631 Notebook.prototype.execute_cell = function () {
1594 // mode = shift, ctrl, alt
1632 // mode = shift, ctrl, alt
1595 var cell = this.get_selected_cell();
1633 var cell = this.get_selected_cell();
1596 var cell_index = this.find_cell_index(cell);
1634 var cell_index = this.find_cell_index(cell);
1597
1635
1598 cell.execute();
1636 cell.execute();
1599 this.command_mode();
1637 this.command_mode();
1600 this.set_dirty(true);
1638 this.set_dirty(true);
1601 };
1639 };
1602
1640
1603 /**
1641 /**
1604 * Execute or render cell outputs and insert a new cell below.
1642 * Execute or render cell outputs and insert a new cell below.
1605 *
1643 *
1606 * @method execute_cell_and_insert_below
1644 * @method execute_cell_and_insert_below
1607 */
1645 */
1608 Notebook.prototype.execute_cell_and_insert_below = function () {
1646 Notebook.prototype.execute_cell_and_insert_below = function () {
1609 var cell = this.get_selected_cell();
1647 var cell = this.get_selected_cell();
1610 var cell_index = this.find_cell_index(cell);
1648 var cell_index = this.find_cell_index(cell);
1611
1649
1612 cell.execute();
1650 cell.execute();
1613
1651
1614 // If we are at the end always insert a new cell and return
1652 // If we are at the end always insert a new cell and return
1615 if (cell_index === (this.ncells()-1)) {
1653 if (cell_index === (this.ncells()-1)) {
1616 this.command_mode();
1654 this.command_mode();
1617 this.insert_cell_below();
1655 this.insert_cell_below();
1618 this.select(cell_index+1);
1656 this.select(cell_index+1);
1619 this.edit_mode();
1657 this.edit_mode();
1620 this.scroll_to_bottom();
1658 this.scroll_to_bottom();
1621 this.set_dirty(true);
1659 this.set_dirty(true);
1622 return;
1660 return;
1623 }
1661 }
1624
1662
1625 this.command_mode();
1663 this.command_mode();
1626 this.insert_cell_below();
1664 this.insert_cell_below();
1627 this.select(cell_index+1);
1665 this.select(cell_index+1);
1628 this.edit_mode();
1666 this.edit_mode();
1629 this.set_dirty(true);
1667 this.set_dirty(true);
1630 };
1668 };
1631
1669
1632 /**
1670 /**
1633 * Execute or render cell outputs and select the next cell.
1671 * Execute or render cell outputs and select the next cell.
1634 *
1672 *
1635 * @method execute_cell_and_select_below
1673 * @method execute_cell_and_select_below
1636 */
1674 */
1637 Notebook.prototype.execute_cell_and_select_below = function () {
1675 Notebook.prototype.execute_cell_and_select_below = function () {
1638
1676
1639 var cell = this.get_selected_cell();
1677 var cell = this.get_selected_cell();
1640 var cell_index = this.find_cell_index(cell);
1678 var cell_index = this.find_cell_index(cell);
1641
1679
1642 cell.execute();
1680 cell.execute();
1643
1681
1644 // If we are at the end always insert a new cell and return
1682 // If we are at the end always insert a new cell and return
1645 if (cell_index === (this.ncells()-1)) {
1683 if (cell_index === (this.ncells()-1)) {
1646 this.command_mode();
1684 this.command_mode();
1647 this.insert_cell_below();
1685 this.insert_cell_below();
1648 this.select(cell_index+1);
1686 this.select(cell_index+1);
1649 this.edit_mode();
1687 this.edit_mode();
1650 this.scroll_to_bottom();
1688 this.scroll_to_bottom();
1651 this.set_dirty(true);
1689 this.set_dirty(true);
1652 return;
1690 return;
1653 }
1691 }
1654
1692
1655 this.command_mode();
1693 this.command_mode();
1656 this.select(cell_index+1);
1694 this.select(cell_index+1);
1657 this.focus_cell();
1695 this.focus_cell();
1658 this.set_dirty(true);
1696 this.set_dirty(true);
1659 };
1697 };
1660
1698
1661 /**
1699 /**
1662 * Execute all cells below the selected cell.
1700 * Execute all cells below the selected cell.
1663 *
1701 *
1664 * @method execute_cells_below
1702 * @method execute_cells_below
1665 */
1703 */
1666 Notebook.prototype.execute_cells_below = function () {
1704 Notebook.prototype.execute_cells_below = function () {
1667 this.execute_cell_range(this.get_selected_index(), this.ncells());
1705 this.execute_cell_range(this.get_selected_index(), this.ncells());
1668 this.scroll_to_bottom();
1706 this.scroll_to_bottom();
1669 };
1707 };
1670
1708
1671 /**
1709 /**
1672 * Execute all cells above the selected cell.
1710 * Execute all cells above the selected cell.
1673 *
1711 *
1674 * @method execute_cells_above
1712 * @method execute_cells_above
1675 */
1713 */
1676 Notebook.prototype.execute_cells_above = function () {
1714 Notebook.prototype.execute_cells_above = function () {
1677 this.execute_cell_range(0, this.get_selected_index());
1715 this.execute_cell_range(0, this.get_selected_index());
1678 };
1716 };
1679
1717
1680 /**
1718 /**
1681 * Execute all cells.
1719 * Execute all cells.
1682 *
1720 *
1683 * @method execute_all_cells
1721 * @method execute_all_cells
1684 */
1722 */
1685 Notebook.prototype.execute_all_cells = function () {
1723 Notebook.prototype.execute_all_cells = function () {
1686 this.execute_cell_range(0, this.ncells());
1724 this.execute_cell_range(0, this.ncells());
1687 this.scroll_to_bottom();
1725 this.scroll_to_bottom();
1688 };
1726 };
1689
1727
1690 /**
1728 /**
1691 * Execute a contiguous range of cells.
1729 * Execute a contiguous range of cells.
1692 *
1730 *
1693 * @method execute_cell_range
1731 * @method execute_cell_range
1694 * @param {Number} start Index of the first cell to execute (inclusive)
1732 * @param {Number} start Index of the first cell to execute (inclusive)
1695 * @param {Number} end Index of the last cell to execute (exclusive)
1733 * @param {Number} end Index of the last cell to execute (exclusive)
1696 */
1734 */
1697 Notebook.prototype.execute_cell_range = function (start, end) {
1735 Notebook.prototype.execute_cell_range = function (start, end) {
1698 this.command_mode();
1736 this.command_mode();
1699 for (var i=start; i<end; i++) {
1737 for (var i=start; i<end; i++) {
1700 this.select(i);
1738 this.select(i);
1701 this.execute_cell();
1739 this.execute_cell();
1702 }
1740 }
1703 };
1741 };
1704
1742
1705 // Persistance and loading
1743 // Persistance and loading
1706
1744
1707 /**
1745 /**
1708 * Getter method for this notebook's name.
1746 * Getter method for this notebook's name.
1709 *
1747 *
1710 * @method get_notebook_name
1748 * @method get_notebook_name
1711 * @return {String} This notebook's name (excluding file extension)
1749 * @return {String} This notebook's name (excluding file extension)
1712 */
1750 */
1713 Notebook.prototype.get_notebook_name = function () {
1751 Notebook.prototype.get_notebook_name = function () {
1714 var nbname = this.notebook_name.substring(0,this.notebook_name.length-6);
1752 var nbname = this.notebook_name.substring(0,this.notebook_name.length-6);
1715 return nbname;
1753 return nbname;
1716 };
1754 };
1717
1755
1718 /**
1756 /**
1719 * Setter method for this notebook's name.
1757 * Setter method for this notebook's name.
1720 *
1758 *
1721 * @method set_notebook_name
1759 * @method set_notebook_name
1722 * @param {String} name A new name for this notebook
1760 * @param {String} name A new name for this notebook
1723 */
1761 */
1724 Notebook.prototype.set_notebook_name = function (name) {
1762 Notebook.prototype.set_notebook_name = function (name) {
1725 this.notebook_name = name;
1763 this.notebook_name = name;
1726 };
1764 };
1727
1765
1728 /**
1766 /**
1729 * Check that a notebook's name is valid.
1767 * Check that a notebook's name is valid.
1730 *
1768 *
1731 * @method test_notebook_name
1769 * @method test_notebook_name
1732 * @param {String} nbname A name for this notebook
1770 * @param {String} nbname A name for this notebook
1733 * @return {Boolean} True if the name is valid, false if invalid
1771 * @return {Boolean} True if the name is valid, false if invalid
1734 */
1772 */
1735 Notebook.prototype.test_notebook_name = function (nbname) {
1773 Notebook.prototype.test_notebook_name = function (nbname) {
1736 nbname = nbname || '';
1774 nbname = nbname || '';
1737 if (nbname.length>0 && !this.notebook_name_blacklist_re.test(nbname)) {
1775 if (nbname.length>0 && !this.notebook_name_blacklist_re.test(nbname)) {
1738 return true;
1776 return true;
1739 } else {
1777 } else {
1740 return false;
1778 return false;
1741 }
1779 }
1742 };
1780 };
1743
1781
1744 /**
1782 /**
1745 * Load a notebook from JSON (.ipynb).
1783 * Load a notebook from JSON (.ipynb).
1746 *
1784 *
1747 * This currently handles one worksheet: others are deleted.
1785 * This currently handles one worksheet: others are deleted.
1748 *
1786 *
1749 * @method fromJSON
1787 * @method fromJSON
1750 * @param {Object} data JSON representation of a notebook
1788 * @param {Object} data JSON representation of a notebook
1751 */
1789 */
1752 Notebook.prototype.fromJSON = function (data) {
1790 Notebook.prototype.fromJSON = function (data) {
1753 var content = data.content;
1791 var content = data.content;
1754 var ncells = this.ncells();
1792 var ncells = this.ncells();
1755 var i;
1793 var i;
1756 for (i=0; i<ncells; i++) {
1794 for (i=0; i<ncells; i++) {
1757 // Always delete cell 0 as they get renumbered as they are deleted.
1795 // Always delete cell 0 as they get renumbered as they are deleted.
1758 this.delete_cell(0);
1796 this.delete_cell(0);
1759 }
1797 }
1760 // Save the metadata and name.
1798 // Save the metadata and name.
1761 this.metadata = content.metadata;
1799 this.metadata = content.metadata;
1762 this.notebook_name = data.name;
1800 this.notebook_name = data.name;
1763 var trusted = true;
1801 var trusted = true;
1764
1802
1765 // Trigger an event changing the kernel spec - this will set the default
1803 // Trigger an event changing the kernel spec - this will set the default
1766 // codemirror mode
1804 // codemirror mode
1767 if (this.metadata.kernelspec !== undefined) {
1805 if (this.metadata.kernelspec !== undefined) {
1768 this.events.trigger('spec_changed.Kernel', this.metadata.kernelspec);
1806 this.events.trigger('spec_changed.Kernel', this.metadata.kernelspec);
1769 }
1807 }
1770
1808
1771 // Only handle 1 worksheet for now.
1809 // Only handle 1 worksheet for now.
1772 var worksheet = content.worksheets[0];
1810 var worksheet = content.worksheets[0];
1773 if (worksheet !== undefined) {
1811 if (worksheet !== undefined) {
1774 if (worksheet.metadata) {
1812 if (worksheet.metadata) {
1775 this.worksheet_metadata = worksheet.metadata;
1813 this.worksheet_metadata = worksheet.metadata;
1776 }
1814 }
1777 var new_cells = worksheet.cells;
1815 var new_cells = worksheet.cells;
1778 ncells = new_cells.length;
1816 ncells = new_cells.length;
1779 var cell_data = null;
1817 var cell_data = null;
1780 var new_cell = null;
1818 var new_cell = null;
1781 for (i=0; i<ncells; i++) {
1819 for (i=0; i<ncells; i++) {
1782 cell_data = new_cells[i];
1820 cell_data = new_cells[i];
1783 // VERSIONHACK: plaintext -> raw
1821 // VERSIONHACK: plaintext -> raw
1784 // handle never-released plaintext name for raw cells
1822 // handle never-released plaintext name for raw cells
1785 if (cell_data.cell_type === 'plaintext'){
1823 if (cell_data.cell_type === 'plaintext'){
1786 cell_data.cell_type = 'raw';
1824 cell_data.cell_type = 'raw';
1787 }
1825 }
1788
1826
1789 new_cell = this.insert_cell_at_index(cell_data.cell_type, i);
1827 new_cell = this.insert_cell_at_index(cell_data.cell_type, i);
1790 new_cell.fromJSON(cell_data);
1828 new_cell.fromJSON(cell_data);
1791 if (new_cell.cell_type == 'code' && !new_cell.output_area.trusted) {
1829 if (new_cell.cell_type == 'code' && !new_cell.output_area.trusted) {
1792 trusted = false;
1830 trusted = false;
1793 }
1831 }
1794 }
1832 }
1795 }
1833 }
1796 if (trusted != this.trusted) {
1834 if (trusted != this.trusted) {
1797 this.trusted = trusted;
1835 this.trusted = trusted;
1798 this.events.trigger("trust_changed.Notebook", trusted);
1836 this.events.trigger("trust_changed.Notebook", trusted);
1799 }
1837 }
1800 if (content.worksheets.length > 1) {
1838 if (content.worksheets.length > 1) {
1801 dialog.modal({
1839 dialog.modal({
1802 notebook: this,
1840 notebook: this,
1803 keyboard_manager: this.keyboard_manager,
1841 keyboard_manager: this.keyboard_manager,
1804 title : "Multiple worksheets",
1842 title : "Multiple worksheets",
1805 body : "This notebook has " + data.worksheets.length + " worksheets, " +
1843 body : "This notebook has " + data.worksheets.length + " worksheets, " +
1806 "but this version of IPython can only handle the first. " +
1844 "but this version of IPython can only handle the first. " +
1807 "If you save this notebook, worksheets after the first will be lost.",
1845 "If you save this notebook, worksheets after the first will be lost.",
1808 buttons : {
1846 buttons : {
1809 OK : {
1847 OK : {
1810 class : "btn-danger"
1848 class : "btn-danger"
1811 }
1849 }
1812 }
1850 }
1813 });
1851 });
1814 }
1852 }
1815 };
1853 };
1816
1854
1817 /**
1855 /**
1818 * Dump this notebook into a JSON-friendly object.
1856 * Dump this notebook into a JSON-friendly object.
1819 *
1857 *
1820 * @method toJSON
1858 * @method toJSON
1821 * @return {Object} A JSON-friendly representation of this notebook.
1859 * @return {Object} A JSON-friendly representation of this notebook.
1822 */
1860 */
1823 Notebook.prototype.toJSON = function () {
1861 Notebook.prototype.toJSON = function () {
1824 var cells = this.get_cells();
1862 var cells = this.get_cells();
1825 var ncells = cells.length;
1863 var ncells = cells.length;
1826 var cell_array = new Array(ncells);
1864 var cell_array = new Array(ncells);
1827 var trusted = true;
1865 var trusted = true;
1828 for (var i=0; i<ncells; i++) {
1866 for (var i=0; i<ncells; i++) {
1829 var cell = cells[i];
1867 var cell = cells[i];
1830 if (cell.cell_type == 'code' && !cell.output_area.trusted) {
1868 if (cell.cell_type == 'code' && !cell.output_area.trusted) {
1831 trusted = false;
1869 trusted = false;
1832 }
1870 }
1833 cell_array[i] = cell.toJSON();
1871 cell_array[i] = cell.toJSON();
1834 }
1872 }
1835 var data = {
1873 var data = {
1836 // Only handle 1 worksheet for now.
1874 // Only handle 1 worksheet for now.
1837 worksheets : [{
1875 worksheets : [{
1838 cells: cell_array,
1876 cells: cell_array,
1839 metadata: this.worksheet_metadata
1877 metadata: this.worksheet_metadata
1840 }],
1878 }],
1841 metadata : this.metadata
1879 metadata : this.metadata
1842 };
1880 };
1843 if (trusted != this.trusted) {
1881 if (trusted != this.trusted) {
1844 this.trusted = trusted;
1882 this.trusted = trusted;
1845 this.events.trigger("trust_changed.Notebook", trusted);
1883 this.events.trigger("trust_changed.Notebook", trusted);
1846 }
1884 }
1847 return data;
1885 return data;
1848 };
1886 };
1849
1887
1850 /**
1888 /**
1851 * Start an autosave timer, for periodically saving the notebook.
1889 * Start an autosave timer, for periodically saving the notebook.
1852 *
1890 *
1853 * @method set_autosave_interval
1891 * @method set_autosave_interval
1854 * @param {Integer} interval the autosave interval in milliseconds
1892 * @param {Integer} interval the autosave interval in milliseconds
1855 */
1893 */
1856 Notebook.prototype.set_autosave_interval = function (interval) {
1894 Notebook.prototype.set_autosave_interval = function (interval) {
1857 var that = this;
1895 var that = this;
1858 // clear previous interval, so we don't get simultaneous timers
1896 // clear previous interval, so we don't get simultaneous timers
1859 if (this.autosave_timer) {
1897 if (this.autosave_timer) {
1860 clearInterval(this.autosave_timer);
1898 clearInterval(this.autosave_timer);
1861 }
1899 }
1862
1900
1863 this.autosave_interval = this.minimum_autosave_interval = interval;
1901 this.autosave_interval = this.minimum_autosave_interval = interval;
1864 if (interval) {
1902 if (interval) {
1865 this.autosave_timer = setInterval(function() {
1903 this.autosave_timer = setInterval(function() {
1866 if (that.dirty) {
1904 if (that.dirty) {
1867 that.save_notebook();
1905 that.save_notebook();
1868 }
1906 }
1869 }, interval);
1907 }, interval);
1870 this.events.trigger("autosave_enabled.Notebook", interval);
1908 this.events.trigger("autosave_enabled.Notebook", interval);
1871 } else {
1909 } else {
1872 this.autosave_timer = null;
1910 this.autosave_timer = null;
1873 this.events.trigger("autosave_disabled.Notebook");
1911 this.events.trigger("autosave_disabled.Notebook");
1874 }
1912 }
1875 };
1913 };
1876
1914
1877 /**
1915 /**
1878 * Save this notebook on the server. This becomes a notebook instance's
1916 * Save this notebook on the server. This becomes a notebook instance's
1879 * .save_notebook method *after* the entire notebook has been loaded.
1917 * .save_notebook method *after* the entire notebook has been loaded.
1880 *
1918 *
1881 * @method save_notebook
1919 * @method save_notebook
1882 */
1920 */
1883 Notebook.prototype.save_notebook = function (extra_settings) {
1921 Notebook.prototype.save_notebook = function (extra_settings) {
1884 // Create a JSON model to be sent to the server.
1922 // Create a JSON model to be sent to the server.
1885 var model = {};
1923 var model = {};
1886 model.name = this.notebook_name;
1924 model.name = this.notebook_name;
1887 model.path = this.notebook_path;
1925 model.path = this.notebook_path;
1888 model.type = 'notebook';
1926 model.type = 'notebook';
1889 model.format = 'json';
1927 model.format = 'json';
1890 model.content = this.toJSON();
1928 model.content = this.toJSON();
1891 model.content.nbformat = this.nbformat;
1929 model.content.nbformat = this.nbformat;
1892 model.content.nbformat_minor = this.nbformat_minor;
1930 model.content.nbformat_minor = this.nbformat_minor;
1893 // time the ajax call for autosave tuning purposes.
1931 // time the ajax call for autosave tuning purposes.
1894 var start = new Date().getTime();
1932 var start = new Date().getTime();
1895 // We do the call with settings so we can set cache to false.
1933 // We do the call with settings so we can set cache to false.
1896 var settings = {
1934 var settings = {
1897 processData : false,
1935 processData : false,
1898 cache : false,
1936 cache : false,
1899 type : "PUT",
1937 type : "PUT",
1900 data : JSON.stringify(model),
1938 data : JSON.stringify(model),
1901 headers : {'Content-Type': 'application/json'},
1939 headers : {'Content-Type': 'application/json'},
1902 success : $.proxy(this.save_notebook_success, this, start),
1940 success : $.proxy(this.save_notebook_success, this, start),
1903 error : $.proxy(this.save_notebook_error, this)
1941 error : $.proxy(this.save_notebook_error, this)
1904 };
1942 };
1905 if (extra_settings) {
1943 if (extra_settings) {
1906 for (var key in extra_settings) {
1944 for (var key in extra_settings) {
1907 settings[key] = extra_settings[key];
1945 settings[key] = extra_settings[key];
1908 }
1946 }
1909 }
1947 }
1910 this.events.trigger('notebook_saving.Notebook');
1948 this.events.trigger('notebook_saving.Notebook');
1911 var url = utils.url_join_encode(
1949 var url = utils.url_join_encode(
1912 this.base_url,
1950 this.base_url,
1913 'api/contents',
1951 'api/contents',
1914 this.notebook_path,
1952 this.notebook_path,
1915 this.notebook_name
1953 this.notebook_name
1916 );
1954 );
1917 $.ajax(url, settings);
1955 $.ajax(url, settings);
1918 };
1956 };
1919
1957
1920 /**
1958 /**
1921 * Success callback for saving a notebook.
1959 * Success callback for saving a notebook.
1922 *
1960 *
1923 * @method save_notebook_success
1961 * @method save_notebook_success
1924 * @param {Integer} start the time when the save request started
1962 * @param {Integer} start the time when the save request started
1925 * @param {Object} data JSON representation of a notebook
1963 * @param {Object} data JSON representation of a notebook
1926 * @param {String} status Description of response status
1964 * @param {String} status Description of response status
1927 * @param {jqXHR} xhr jQuery Ajax object
1965 * @param {jqXHR} xhr jQuery Ajax object
1928 */
1966 */
1929 Notebook.prototype.save_notebook_success = function (start, data, status, xhr) {
1967 Notebook.prototype.save_notebook_success = function (start, data, status, xhr) {
1930 this.set_dirty(false);
1968 this.set_dirty(false);
1931 this.events.trigger('notebook_saved.Notebook');
1969 this.events.trigger('notebook_saved.Notebook');
1932 this._update_autosave_interval(start);
1970 this._update_autosave_interval(start);
1933 if (this._checkpoint_after_save) {
1971 if (this._checkpoint_after_save) {
1934 this.create_checkpoint();
1972 this.create_checkpoint();
1935 this._checkpoint_after_save = false;
1973 this._checkpoint_after_save = false;
1936 }
1974 }
1937 };
1975 };
1938
1976
1939 /**
1977 /**
1940 * update the autosave interval based on how long the last save took
1978 * update the autosave interval based on how long the last save took
1941 *
1979 *
1942 * @method _update_autosave_interval
1980 * @method _update_autosave_interval
1943 * @param {Integer} timestamp when the save request started
1981 * @param {Integer} timestamp when the save request started
1944 */
1982 */
1945 Notebook.prototype._update_autosave_interval = function (start) {
1983 Notebook.prototype._update_autosave_interval = function (start) {
1946 var duration = (new Date().getTime() - start);
1984 var duration = (new Date().getTime() - start);
1947 if (this.autosave_interval) {
1985 if (this.autosave_interval) {
1948 // new save interval: higher of 10x save duration or parameter (default 30 seconds)
1986 // new save interval: higher of 10x save duration or parameter (default 30 seconds)
1949 var interval = Math.max(10 * duration, this.minimum_autosave_interval);
1987 var interval = Math.max(10 * duration, this.minimum_autosave_interval);
1950 // round to 10 seconds, otherwise we will be setting a new interval too often
1988 // round to 10 seconds, otherwise we will be setting a new interval too often
1951 interval = 10000 * Math.round(interval / 10000);
1989 interval = 10000 * Math.round(interval / 10000);
1952 // set new interval, if it's changed
1990 // set new interval, if it's changed
1953 if (interval != this.autosave_interval) {
1991 if (interval != this.autosave_interval) {
1954 this.set_autosave_interval(interval);
1992 this.set_autosave_interval(interval);
1955 }
1993 }
1956 }
1994 }
1957 };
1995 };
1958
1996
1959 /**
1997 /**
1960 * Failure callback for saving a notebook.
1998 * Failure callback for saving a notebook.
1961 *
1999 *
1962 * @method save_notebook_error
2000 * @method save_notebook_error
1963 * @param {jqXHR} xhr jQuery Ajax object
2001 * @param {jqXHR} xhr jQuery Ajax object
1964 * @param {String} status Description of response status
2002 * @param {String} status Description of response status
1965 * @param {String} error HTTP error message
2003 * @param {String} error HTTP error message
1966 */
2004 */
1967 Notebook.prototype.save_notebook_error = function (xhr, status, error) {
2005 Notebook.prototype.save_notebook_error = function (xhr, status, error) {
1968 this.events.trigger('notebook_save_failed.Notebook', [xhr, status, error]);
2006 this.events.trigger('notebook_save_failed.Notebook', [xhr, status, error]);
1969 };
2007 };
1970
2008
1971 /**
2009 /**
1972 * Explicitly trust the output of this notebook.
2010 * Explicitly trust the output of this notebook.
1973 *
2011 *
1974 * @method trust_notebook
2012 * @method trust_notebook
1975 */
2013 */
1976 Notebook.prototype.trust_notebook = function (extra_settings) {
2014 Notebook.prototype.trust_notebook = function (extra_settings) {
1977 var body = $("<div>").append($("<p>")
2015 var body = $("<div>").append($("<p>")
1978 .text("A trusted IPython notebook may execute hidden malicious code ")
2016 .text("A trusted IPython notebook may execute hidden malicious code ")
1979 .append($("<strong>")
2017 .append($("<strong>")
1980 .append(
2018 .append(
1981 $("<em>").text("when you open it")
2019 $("<em>").text("when you open it")
1982 )
2020 )
1983 ).append(".").append(
2021 ).append(".").append(
1984 " Selecting trust will immediately reload this notebook in a trusted state."
2022 " Selecting trust will immediately reload this notebook in a trusted state."
1985 ).append(
2023 ).append(
1986 " For more information, see the "
2024 " For more information, see the "
1987 ).append($("<a>").attr("href", "http://ipython.org/ipython-doc/2/notebook/security.html")
2025 ).append($("<a>").attr("href", "http://ipython.org/ipython-doc/2/notebook/security.html")
1988 .text("IPython security documentation")
2026 .text("IPython security documentation")
1989 ).append(".")
2027 ).append(".")
1990 );
2028 );
1991
2029
1992 var nb = this;
2030 var nb = this;
1993 dialog.modal({
2031 dialog.modal({
1994 notebook: this,
2032 notebook: this,
1995 keyboard_manager: this.keyboard_manager,
2033 keyboard_manager: this.keyboard_manager,
1996 title: "Trust this notebook?",
2034 title: "Trust this notebook?",
1997 body: body,
2035 body: body,
1998
2036
1999 buttons: {
2037 buttons: {
2000 Cancel : {},
2038 Cancel : {},
2001 Trust : {
2039 Trust : {
2002 class : "btn-danger",
2040 class : "btn-danger",
2003 click : function () {
2041 click : function () {
2004 var cells = nb.get_cells();
2042 var cells = nb.get_cells();
2005 for (var i = 0; i < cells.length; i++) {
2043 for (var i = 0; i < cells.length; i++) {
2006 var cell = cells[i];
2044 var cell = cells[i];
2007 if (cell.cell_type == 'code') {
2045 if (cell.cell_type == 'code') {
2008 cell.output_area.trusted = true;
2046 cell.output_area.trusted = true;
2009 }
2047 }
2010 }
2048 }
2011 this.events.on('notebook_saved.Notebook', function () {
2049 this.events.on('notebook_saved.Notebook', function () {
2012 window.location.reload();
2050 window.location.reload();
2013 });
2051 });
2014 nb.save_notebook();
2052 nb.save_notebook();
2015 }
2053 }
2016 }
2054 }
2017 }
2055 }
2018 });
2056 });
2019 };
2057 };
2020
2058
2021 Notebook.prototype.new_notebook = function(){
2059 Notebook.prototype.new_notebook = function(){
2022 var path = this.notebook_path;
2060 var path = this.notebook_path;
2023 var base_url = this.base_url;
2061 var base_url = this.base_url;
2024 var settings = {
2062 var settings = {
2025 processData : false,
2063 processData : false,
2026 cache : false,
2064 cache : false,
2027 type : "POST",
2065 type : "POST",
2028 dataType : "json",
2066 dataType : "json",
2029 async : false,
2067 async : false,
2030 success : function (data, status, xhr){
2068 success : function (data, status, xhr){
2031 var notebook_name = data.name;
2069 var notebook_name = data.name;
2032 window.open(
2070 window.open(
2033 utils.url_join_encode(
2071 utils.url_join_encode(
2034 base_url,
2072 base_url,
2035 'notebooks',
2073 'notebooks',
2036 path,
2074 path,
2037 notebook_name
2075 notebook_name
2038 ),
2076 ),
2039 '_blank'
2077 '_blank'
2040 );
2078 );
2041 },
2079 },
2042 error : utils.log_ajax_error,
2080 error : utils.log_ajax_error,
2043 };
2081 };
2044 var url = utils.url_join_encode(
2082 var url = utils.url_join_encode(
2045 base_url,
2083 base_url,
2046 'api/contents',
2084 'api/contents',
2047 path
2085 path
2048 );
2086 );
2049 $.ajax(url,settings);
2087 $.ajax(url,settings);
2050 };
2088 };
2051
2089
2052
2090
2053 Notebook.prototype.copy_notebook = function(){
2091 Notebook.prototype.copy_notebook = function(){
2054 var path = this.notebook_path;
2092 var path = this.notebook_path;
2055 var base_url = this.base_url;
2093 var base_url = this.base_url;
2056 var settings = {
2094 var settings = {
2057 processData : false,
2095 processData : false,
2058 cache : false,
2096 cache : false,
2059 type : "POST",
2097 type : "POST",
2060 dataType : "json",
2098 dataType : "json",
2061 data : JSON.stringify({copy_from : this.notebook_name}),
2099 data : JSON.stringify({copy_from : this.notebook_name}),
2062 async : false,
2100 async : false,
2063 success : function (data, status, xhr) {
2101 success : function (data, status, xhr) {
2064 window.open(utils.url_join_encode(
2102 window.open(utils.url_join_encode(
2065 base_url,
2103 base_url,
2066 'notebooks',
2104 'notebooks',
2067 data.path,
2105 data.path,
2068 data.name
2106 data.name
2069 ), '_blank');
2107 ), '_blank');
2070 },
2108 },
2071 error : utils.log_ajax_error,
2109 error : utils.log_ajax_error,
2072 };
2110 };
2073 var url = utils.url_join_encode(
2111 var url = utils.url_join_encode(
2074 base_url,
2112 base_url,
2075 'api/contents',
2113 'api/contents',
2076 path
2114 path
2077 );
2115 );
2078 $.ajax(url,settings);
2116 $.ajax(url,settings);
2079 };
2117 };
2080
2118
2081 Notebook.prototype.rename = function (nbname) {
2119 Notebook.prototype.rename = function (nbname) {
2082 var that = this;
2120 var that = this;
2083 if (!nbname.match(/\.ipynb$/)) {
2121 if (!nbname.match(/\.ipynb$/)) {
2084 nbname = nbname + ".ipynb";
2122 nbname = nbname + ".ipynb";
2085 }
2123 }
2086 var data = {name: nbname};
2124 var data = {name: nbname};
2087 var settings = {
2125 var settings = {
2088 processData : false,
2126 processData : false,
2089 cache : false,
2127 cache : false,
2090 type : "PATCH",
2128 type : "PATCH",
2091 data : JSON.stringify(data),
2129 data : JSON.stringify(data),
2092 dataType: "json",
2130 dataType: "json",
2093 headers : {'Content-Type': 'application/json'},
2131 headers : {'Content-Type': 'application/json'},
2094 success : $.proxy(that.rename_success, this),
2132 success : $.proxy(that.rename_success, this),
2095 error : $.proxy(that.rename_error, this)
2133 error : $.proxy(that.rename_error, this)
2096 };
2134 };
2097 this.events.trigger('rename_notebook.Notebook', data);
2135 this.events.trigger('rename_notebook.Notebook', data);
2098 var url = utils.url_join_encode(
2136 var url = utils.url_join_encode(
2099 this.base_url,
2137 this.base_url,
2100 'api/contents',
2138 'api/contents',
2101 this.notebook_path,
2139 this.notebook_path,
2102 this.notebook_name
2140 this.notebook_name
2103 );
2141 );
2104 $.ajax(url, settings);
2142 $.ajax(url, settings);
2105 };
2143 };
2106
2144
2107 Notebook.prototype.delete = function () {
2145 Notebook.prototype.delete = function () {
2108 var that = this;
2146 var that = this;
2109 var settings = {
2147 var settings = {
2110 processData : false,
2148 processData : false,
2111 cache : false,
2149 cache : false,
2112 type : "DELETE",
2150 type : "DELETE",
2113 dataType: "json",
2151 dataType: "json",
2114 error : utils.log_ajax_error,
2152 error : utils.log_ajax_error,
2115 };
2153 };
2116 var url = utils.url_join_encode(
2154 var url = utils.url_join_encode(
2117 this.base_url,
2155 this.base_url,
2118 'api/contents',
2156 'api/contents',
2119 this.notebook_path,
2157 this.notebook_path,
2120 this.notebook_name
2158 this.notebook_name
2121 );
2159 );
2122 $.ajax(url, settings);
2160 $.ajax(url, settings);
2123 };
2161 };
2124
2162
2125
2163
2126 Notebook.prototype.rename_success = function (json, status, xhr) {
2164 Notebook.prototype.rename_success = function (json, status, xhr) {
2127 var name = this.notebook_name = json.name;
2165 var name = this.notebook_name = json.name;
2128 var path = json.path;
2166 var path = json.path;
2129 this.session.rename_notebook(name, path);
2167 this.session.rename_notebook(name, path);
2130 this.events.trigger('notebook_renamed.Notebook', json);
2168 this.events.trigger('notebook_renamed.Notebook', json);
2131 };
2169 };
2132
2170
2133 Notebook.prototype.rename_error = function (xhr, status, error) {
2171 Notebook.prototype.rename_error = function (xhr, status, error) {
2134 var that = this;
2172 var that = this;
2135 var dialog_body = $('<div/>').append(
2173 var dialog_body = $('<div/>').append(
2136 $("<p/>").text('This notebook name already exists.')
2174 $("<p/>").text('This notebook name already exists.')
2137 );
2175 );
2138 this.events.trigger('notebook_rename_failed.Notebook', [xhr, status, error]);
2176 this.events.trigger('notebook_rename_failed.Notebook', [xhr, status, error]);
2139 dialog.modal({
2177 dialog.modal({
2140 notebook: this,
2178 notebook: this,
2141 keyboard_manager: this.keyboard_manager,
2179 keyboard_manager: this.keyboard_manager,
2142 title: "Notebook Rename Error!",
2180 title: "Notebook Rename Error!",
2143 body: dialog_body,
2181 body: dialog_body,
2144 buttons : {
2182 buttons : {
2145 "Cancel": {},
2183 "Cancel": {},
2146 "OK": {
2184 "OK": {
2147 class: "btn-primary",
2185 class: "btn-primary",
2148 click: function () {
2186 click: function () {
2149 this.save_widget.rename_notebook({notebook:that});
2187 this.save_widget.rename_notebook({notebook:that});
2150 }}
2188 }}
2151 },
2189 },
2152 open : function (event, ui) {
2190 open : function (event, ui) {
2153 var that = $(this);
2191 var that = $(this);
2154 // Upon ENTER, click the OK button.
2192 // Upon ENTER, click the OK button.
2155 that.find('input[type="text"]').keydown(function (event, ui) {
2193 that.find('input[type="text"]').keydown(function (event, ui) {
2156 if (event.which === this.keyboard.keycodes.enter) {
2194 if (event.which === this.keyboard.keycodes.enter) {
2157 that.find('.btn-primary').first().click();
2195 that.find('.btn-primary').first().click();
2158 }
2196 }
2159 });
2197 });
2160 that.find('input[type="text"]').focus();
2198 that.find('input[type="text"]').focus();
2161 }
2199 }
2162 });
2200 });
2163 };
2201 };
2164
2202
2165 /**
2203 /**
2166 * Request a notebook's data from the server.
2204 * Request a notebook's data from the server.
2167 *
2205 *
2168 * @method load_notebook
2206 * @method load_notebook
2169 * @param {String} notebook_name and path A notebook to load
2207 * @param {String} notebook_name and path A notebook to load
2170 */
2208 */
2171 Notebook.prototype.load_notebook = function (notebook_name, notebook_path) {
2209 Notebook.prototype.load_notebook = function (notebook_name, notebook_path) {
2172 var that = this;
2210 var that = this;
2173 this.notebook_name = notebook_name;
2211 this.notebook_name = notebook_name;
2174 this.notebook_path = notebook_path;
2212 this.notebook_path = notebook_path;
2175 // We do the call with settings so we can set cache to false.
2213 // We do the call with settings so we can set cache to false.
2176 var settings = {
2214 var settings = {
2177 processData : false,
2215 processData : false,
2178 cache : false,
2216 cache : false,
2179 type : "GET",
2217 type : "GET",
2180 dataType : "json",
2218 dataType : "json",
2181 success : $.proxy(this.load_notebook_success,this),
2219 success : $.proxy(this.load_notebook_success,this),
2182 error : $.proxy(this.load_notebook_error,this),
2220 error : $.proxy(this.load_notebook_error,this),
2183 };
2221 };
2184 this.events.trigger('notebook_loading.Notebook');
2222 this.events.trigger('notebook_loading.Notebook');
2185 var url = utils.url_join_encode(
2223 var url = utils.url_join_encode(
2186 this.base_url,
2224 this.base_url,
2187 'api/contents',
2225 'api/contents',
2188 this.notebook_path,
2226 this.notebook_path,
2189 this.notebook_name
2227 this.notebook_name
2190 );
2228 );
2191 $.ajax(url, settings);
2229 $.ajax(url, settings);
2192 };
2230 };
2193
2231
2194 /**
2232 /**
2195 * Success callback for loading a notebook from the server.
2233 * Success callback for loading a notebook from the server.
2196 *
2234 *
2197 * Load notebook data from the JSON response.
2235 * Load notebook data from the JSON response.
2198 *
2236 *
2199 * @method load_notebook_success
2237 * @method load_notebook_success
2200 * @param {Object} data JSON representation of a notebook
2238 * @param {Object} data JSON representation of a notebook
2201 * @param {String} status Description of response status
2239 * @param {String} status Description of response status
2202 * @param {jqXHR} xhr jQuery Ajax object
2240 * @param {jqXHR} xhr jQuery Ajax object
2203 */
2241 */
2204 Notebook.prototype.load_notebook_success = function (data, status, xhr) {
2242 Notebook.prototype.load_notebook_success = function (data, status, xhr) {
2205 this.fromJSON(data);
2243 this.fromJSON(data);
2206 if (this.ncells() === 0) {
2244 if (this.ncells() === 0) {
2207 this.insert_cell_below('code');
2245 this.insert_cell_below('code');
2208 this.edit_mode(0);
2246 this.edit_mode(0);
2209 } else {
2247 } else {
2210 this.select(0);
2248 this.select(0);
2211 this.handle_command_mode(this.get_cell(0));
2249 this.handle_command_mode(this.get_cell(0));
2212 }
2250 }
2213 this.set_dirty(false);
2251 this.set_dirty(false);
2214 this.scroll_to_top();
2252 this.scroll_to_top();
2215 if (data.orig_nbformat !== undefined && data.nbformat !== data.orig_nbformat) {
2253 if (data.orig_nbformat !== undefined && data.nbformat !== data.orig_nbformat) {
2216 var msg = "This notebook has been converted from an older " +
2254 var msg = "This notebook has been converted from an older " +
2217 "notebook format (v"+data.orig_nbformat+") to the current notebook " +
2255 "notebook format (v"+data.orig_nbformat+") to the current notebook " +
2218 "format (v"+data.nbformat+"). The next time you save this notebook, the " +
2256 "format (v"+data.nbformat+"). The next time you save this notebook, the " +
2219 "newer notebook format will be used and older versions of IPython " +
2257 "newer notebook format will be used and older versions of IPython " +
2220 "may not be able to read it. To keep the older version, close the " +
2258 "may not be able to read it. To keep the older version, close the " +
2221 "notebook without saving it.";
2259 "notebook without saving it.";
2222 dialog.modal({
2260 dialog.modal({
2223 notebook: this,
2261 notebook: this,
2224 keyboard_manager: this.keyboard_manager,
2262 keyboard_manager: this.keyboard_manager,
2225 title : "Notebook converted",
2263 title : "Notebook converted",
2226 body : msg,
2264 body : msg,
2227 buttons : {
2265 buttons : {
2228 OK : {
2266 OK : {
2229 class : "btn-primary"
2267 class : "btn-primary"
2230 }
2268 }
2231 }
2269 }
2232 });
2270 });
2233 } else if (data.orig_nbformat_minor !== undefined && data.nbformat_minor !== data.orig_nbformat_minor) {
2271 } else if (data.orig_nbformat_minor !== undefined && data.nbformat_minor !== data.orig_nbformat_minor) {
2234 var that = this;
2272 var that = this;
2235 var orig_vs = 'v' + data.nbformat + '.' + data.orig_nbformat_minor;
2273 var orig_vs = 'v' + data.nbformat + '.' + data.orig_nbformat_minor;
2236 var this_vs = 'v' + data.nbformat + '.' + this.nbformat_minor;
2274 var this_vs = 'v' + data.nbformat + '.' + this.nbformat_minor;
2237 var msg = "This notebook is version " + orig_vs + ", but we only fully support up to " +
2275 var msg = "This notebook is version " + orig_vs + ", but we only fully support up to " +
2238 this_vs + ". You can still work with this notebook, but some features " +
2276 this_vs + ". You can still work with this notebook, but some features " +
2239 "introduced in later notebook versions may not be available.";
2277 "introduced in later notebook versions may not be available.";
2240
2278
2241 dialog.modal({
2279 dialog.modal({
2242 notebook: this,
2280 notebook: this,
2243 keyboard_manager: this.keyboard_manager,
2281 keyboard_manager: this.keyboard_manager,
2244 title : "Newer Notebook",
2282 title : "Newer Notebook",
2245 body : msg,
2283 body : msg,
2246 buttons : {
2284 buttons : {
2247 OK : {
2285 OK : {
2248 class : "btn-danger"
2286 class : "btn-danger"
2249 }
2287 }
2250 }
2288 }
2251 });
2289 });
2252
2290
2253 }
2291 }
2254
2292
2255 // Create the session after the notebook is completely loaded to prevent
2293 // Create the session after the notebook is completely loaded to prevent
2256 // code execution upon loading, which is a security risk.
2294 // code execution upon loading, which is a security risk.
2257 if (this.session === null) {
2295 if (this.session === null) {
2258 var kernelspec = this.metadata.kernelspec || {};
2296 var kernelspec = this.metadata.kernelspec || {};
2259 var kernel_name = kernelspec.name || this.default_kernel_name;
2297 var kernel_name = kernelspec.name || this.default_kernel_name;
2260
2298
2261 this.start_session(kernel_name);
2299 this.start_session(kernel_name);
2262 }
2300 }
2263 // load our checkpoint list
2301 // load our checkpoint list
2264 this.list_checkpoints();
2302 this.list_checkpoints();
2265
2303
2266 // load toolbar state
2304 // load toolbar state
2267 if (this.metadata.celltoolbar) {
2305 if (this.metadata.celltoolbar) {
2268 celltoolbar.CellToolbar.global_show();
2306 celltoolbar.CellToolbar.global_show();
2269 celltoolbar.CellToolbar.activate_preset(this.metadata.celltoolbar);
2307 celltoolbar.CellToolbar.activate_preset(this.metadata.celltoolbar);
2270 } else {
2308 } else {
2271 celltoolbar.CellToolbar.global_hide();
2309 celltoolbar.CellToolbar.global_hide();
2272 }
2310 }
2273
2311
2274 // now that we're fully loaded, it is safe to restore save functionality
2312 // now that we're fully loaded, it is safe to restore save functionality
2275 delete(this.save_notebook);
2313 delete(this.save_notebook);
2276 this.events.trigger('notebook_loaded.Notebook');
2314 this.events.trigger('notebook_loaded.Notebook');
2277 };
2315 };
2278
2316
2279 /**
2317 /**
2280 * Failure callback for loading a notebook from the server.
2318 * Failure callback for loading a notebook from the server.
2281 *
2319 *
2282 * @method load_notebook_error
2320 * @method load_notebook_error
2283 * @param {jqXHR} xhr jQuery Ajax object
2321 * @param {jqXHR} xhr jQuery Ajax object
2284 * @param {String} status Description of response status
2322 * @param {String} status Description of response status
2285 * @param {String} error HTTP error message
2323 * @param {String} error HTTP error message
2286 */
2324 */
2287 Notebook.prototype.load_notebook_error = function (xhr, status, error) {
2325 Notebook.prototype.load_notebook_error = function (xhr, status, error) {
2288 this.events.trigger('notebook_load_failed.Notebook', [xhr, status, error]);
2326 this.events.trigger('notebook_load_failed.Notebook', [xhr, status, error]);
2289 utils.log_ajax_error(xhr, status, error);
2327 utils.log_ajax_error(xhr, status, error);
2290 var msg;
2328 var msg;
2291 if (xhr.status === 400) {
2329 if (xhr.status === 400) {
2292 msg = escape(utils.ajax_error_msg(xhr));
2330 msg = escape(utils.ajax_error_msg(xhr));
2293 } else if (xhr.status === 500) {
2331 } else if (xhr.status === 500) {
2294 msg = "An unknown error occurred while loading this notebook. " +
2332 msg = "An unknown error occurred while loading this notebook. " +
2295 "This version can load notebook formats " +
2333 "This version can load notebook formats " +
2296 "v" + this.nbformat + " or earlier. See the server log for details.";
2334 "v" + this.nbformat + " or earlier. See the server log for details.";
2297 }
2335 }
2298 dialog.modal({
2336 dialog.modal({
2299 notebook: this,
2337 notebook: this,
2300 keyboard_manager: this.keyboard_manager,
2338 keyboard_manager: this.keyboard_manager,
2301 title: "Error loading notebook",
2339 title: "Error loading notebook",
2302 body : msg,
2340 body : msg,
2303 buttons : {
2341 buttons : {
2304 "OK": {}
2342 "OK": {}
2305 }
2343 }
2306 });
2344 });
2307 };
2345 };
2308
2346
2309 /********************* checkpoint-related *********************/
2347 /********************* checkpoint-related *********************/
2310
2348
2311 /**
2349 /**
2312 * Save the notebook then immediately create a checkpoint.
2350 * Save the notebook then immediately create a checkpoint.
2313 *
2351 *
2314 * @method save_checkpoint
2352 * @method save_checkpoint
2315 */
2353 */
2316 Notebook.prototype.save_checkpoint = function () {
2354 Notebook.prototype.save_checkpoint = function () {
2317 this._checkpoint_after_save = true;
2355 this._checkpoint_after_save = true;
2318 this.save_notebook();
2356 this.save_notebook();
2319 };
2357 };
2320
2358
2321 /**
2359 /**
2322 * Add a checkpoint for this notebook.
2360 * Add a checkpoint for this notebook.
2323 * for use as a callback from checkpoint creation.
2361 * for use as a callback from checkpoint creation.
2324 *
2362 *
2325 * @method add_checkpoint
2363 * @method add_checkpoint
2326 */
2364 */
2327 Notebook.prototype.add_checkpoint = function (checkpoint) {
2365 Notebook.prototype.add_checkpoint = function (checkpoint) {
2328 var found = false;
2366 var found = false;
2329 for (var i = 0; i < this.checkpoints.length; i++) {
2367 for (var i = 0; i < this.checkpoints.length; i++) {
2330 var existing = this.checkpoints[i];
2368 var existing = this.checkpoints[i];
2331 if (existing.id == checkpoint.id) {
2369 if (existing.id == checkpoint.id) {
2332 found = true;
2370 found = true;
2333 this.checkpoints[i] = checkpoint;
2371 this.checkpoints[i] = checkpoint;
2334 break;
2372 break;
2335 }
2373 }
2336 }
2374 }
2337 if (!found) {
2375 if (!found) {
2338 this.checkpoints.push(checkpoint);
2376 this.checkpoints.push(checkpoint);
2339 }
2377 }
2340 this.last_checkpoint = this.checkpoints[this.checkpoints.length - 1];
2378 this.last_checkpoint = this.checkpoints[this.checkpoints.length - 1];
2341 };
2379 };
2342
2380
2343 /**
2381 /**
2344 * List checkpoints for this notebook.
2382 * List checkpoints for this notebook.
2345 *
2383 *
2346 * @method list_checkpoints
2384 * @method list_checkpoints
2347 */
2385 */
2348 Notebook.prototype.list_checkpoints = function () {
2386 Notebook.prototype.list_checkpoints = function () {
2349 var url = utils.url_join_encode(
2387 var url = utils.url_join_encode(
2350 this.base_url,
2388 this.base_url,
2351 'api/contents',
2389 'api/contents',
2352 this.notebook_path,
2390 this.notebook_path,
2353 this.notebook_name,
2391 this.notebook_name,
2354 'checkpoints'
2392 'checkpoints'
2355 );
2393 );
2356 $.get(url).done(
2394 $.get(url).done(
2357 $.proxy(this.list_checkpoints_success, this)
2395 $.proxy(this.list_checkpoints_success, this)
2358 ).fail(
2396 ).fail(
2359 $.proxy(this.list_checkpoints_error, this)
2397 $.proxy(this.list_checkpoints_error, this)
2360 );
2398 );
2361 };
2399 };
2362
2400
2363 /**
2401 /**
2364 * Success callback for listing checkpoints.
2402 * Success callback for listing checkpoints.
2365 *
2403 *
2366 * @method list_checkpoint_success
2404 * @method list_checkpoint_success
2367 * @param {Object} data JSON representation of a checkpoint
2405 * @param {Object} data JSON representation of a checkpoint
2368 * @param {String} status Description of response status
2406 * @param {String} status Description of response status
2369 * @param {jqXHR} xhr jQuery Ajax object
2407 * @param {jqXHR} xhr jQuery Ajax object
2370 */
2408 */
2371 Notebook.prototype.list_checkpoints_success = function (data, status, xhr) {
2409 Notebook.prototype.list_checkpoints_success = function (data, status, xhr) {
2372 data = $.parseJSON(data);
2410 data = $.parseJSON(data);
2373 this.checkpoints = data;
2411 this.checkpoints = data;
2374 if (data.length) {
2412 if (data.length) {
2375 this.last_checkpoint = data[data.length - 1];
2413 this.last_checkpoint = data[data.length - 1];
2376 } else {
2414 } else {
2377 this.last_checkpoint = null;
2415 this.last_checkpoint = null;
2378 }
2416 }
2379 this.events.trigger('checkpoints_listed.Notebook', [data]);
2417 this.events.trigger('checkpoints_listed.Notebook', [data]);
2380 };
2418 };
2381
2419
2382 /**
2420 /**
2383 * Failure callback for listing a checkpoint.
2421 * Failure callback for listing a checkpoint.
2384 *
2422 *
2385 * @method list_checkpoint_error
2423 * @method list_checkpoint_error
2386 * @param {jqXHR} xhr jQuery Ajax object
2424 * @param {jqXHR} xhr jQuery Ajax object
2387 * @param {String} status Description of response status
2425 * @param {String} status Description of response status
2388 * @param {String} error_msg HTTP error message
2426 * @param {String} error_msg HTTP error message
2389 */
2427 */
2390 Notebook.prototype.list_checkpoints_error = function (xhr, status, error_msg) {
2428 Notebook.prototype.list_checkpoints_error = function (xhr, status, error_msg) {
2391 this.events.trigger('list_checkpoints_failed.Notebook');
2429 this.events.trigger('list_checkpoints_failed.Notebook');
2392 };
2430 };
2393
2431
2394 /**
2432 /**
2395 * Create a checkpoint of this notebook on the server from the most recent save.
2433 * Create a checkpoint of this notebook on the server from the most recent save.
2396 *
2434 *
2397 * @method create_checkpoint
2435 * @method create_checkpoint
2398 */
2436 */
2399 Notebook.prototype.create_checkpoint = function () {
2437 Notebook.prototype.create_checkpoint = function () {
2400 var url = utils.url_join_encode(
2438 var url = utils.url_join_encode(
2401 this.base_url,
2439 this.base_url,
2402 'api/contents',
2440 'api/contents',
2403 this.notebook_path,
2441 this.notebook_path,
2404 this.notebook_name,
2442 this.notebook_name,
2405 'checkpoints'
2443 'checkpoints'
2406 );
2444 );
2407 $.post(url).done(
2445 $.post(url).done(
2408 $.proxy(this.create_checkpoint_success, this)
2446 $.proxy(this.create_checkpoint_success, this)
2409 ).fail(
2447 ).fail(
2410 $.proxy(this.create_checkpoint_error, this)
2448 $.proxy(this.create_checkpoint_error, this)
2411 );
2449 );
2412 };
2450 };
2413
2451
2414 /**
2452 /**
2415 * Success callback for creating a checkpoint.
2453 * Success callback for creating a checkpoint.
2416 *
2454 *
2417 * @method create_checkpoint_success
2455 * @method create_checkpoint_success
2418 * @param {Object} data JSON representation of a checkpoint
2456 * @param {Object} data JSON representation of a checkpoint
2419 * @param {String} status Description of response status
2457 * @param {String} status Description of response status
2420 * @param {jqXHR} xhr jQuery Ajax object
2458 * @param {jqXHR} xhr jQuery Ajax object
2421 */
2459 */
2422 Notebook.prototype.create_checkpoint_success = function (data, status, xhr) {
2460 Notebook.prototype.create_checkpoint_success = function (data, status, xhr) {
2423 data = $.parseJSON(data);
2461 data = $.parseJSON(data);
2424 this.add_checkpoint(data);
2462 this.add_checkpoint(data);
2425 this.events.trigger('checkpoint_created.Notebook', data);
2463 this.events.trigger('checkpoint_created.Notebook', data);
2426 };
2464 };
2427
2465
2428 /**
2466 /**
2429 * Failure callback for creating a checkpoint.
2467 * Failure callback for creating a checkpoint.
2430 *
2468 *
2431 * @method create_checkpoint_error
2469 * @method create_checkpoint_error
2432 * @param {jqXHR} xhr jQuery Ajax object
2470 * @param {jqXHR} xhr jQuery Ajax object
2433 * @param {String} status Description of response status
2471 * @param {String} status Description of response status
2434 * @param {String} error_msg HTTP error message
2472 * @param {String} error_msg HTTP error message
2435 */
2473 */
2436 Notebook.prototype.create_checkpoint_error = function (xhr, status, error_msg) {
2474 Notebook.prototype.create_checkpoint_error = function (xhr, status, error_msg) {
2437 this.events.trigger('checkpoint_failed.Notebook');
2475 this.events.trigger('checkpoint_failed.Notebook');
2438 };
2476 };
2439
2477
2440 Notebook.prototype.restore_checkpoint_dialog = function (checkpoint) {
2478 Notebook.prototype.restore_checkpoint_dialog = function (checkpoint) {
2441 var that = this;
2479 var that = this;
2442 checkpoint = checkpoint || this.last_checkpoint;
2480 checkpoint = checkpoint || this.last_checkpoint;
2443 if ( ! checkpoint ) {
2481 if ( ! checkpoint ) {
2444 console.log("restore dialog, but no checkpoint to restore to!");
2482 console.log("restore dialog, but no checkpoint to restore to!");
2445 return;
2483 return;
2446 }
2484 }
2447 var body = $('<div/>').append(
2485 var body = $('<div/>').append(
2448 $('<p/>').addClass("p-space").text(
2486 $('<p/>').addClass("p-space").text(
2449 "Are you sure you want to revert the notebook to " +
2487 "Are you sure you want to revert the notebook to " +
2450 "the latest checkpoint?"
2488 "the latest checkpoint?"
2451 ).append(
2489 ).append(
2452 $("<strong/>").text(
2490 $("<strong/>").text(
2453 " This cannot be undone."
2491 " This cannot be undone."
2454 )
2492 )
2455 )
2493 )
2456 ).append(
2494 ).append(
2457 $('<p/>').addClass("p-space").text("The checkpoint was last updated at:")
2495 $('<p/>').addClass("p-space").text("The checkpoint was last updated at:")
2458 ).append(
2496 ).append(
2459 $('<p/>').addClass("p-space").text(
2497 $('<p/>').addClass("p-space").text(
2460 Date(checkpoint.last_modified)
2498 Date(checkpoint.last_modified)
2461 ).css("text-align", "center")
2499 ).css("text-align", "center")
2462 );
2500 );
2463
2501
2464 dialog.modal({
2502 dialog.modal({
2465 notebook: this,
2503 notebook: this,
2466 keyboard_manager: this.keyboard_manager,
2504 keyboard_manager: this.keyboard_manager,
2467 title : "Revert notebook to checkpoint",
2505 title : "Revert notebook to checkpoint",
2468 body : body,
2506 body : body,
2469 buttons : {
2507 buttons : {
2470 Revert : {
2508 Revert : {
2471 class : "btn-danger",
2509 class : "btn-danger",
2472 click : function () {
2510 click : function () {
2473 that.restore_checkpoint(checkpoint.id);
2511 that.restore_checkpoint(checkpoint.id);
2474 }
2512 }
2475 },
2513 },
2476 Cancel : {}
2514 Cancel : {}
2477 }
2515 }
2478 });
2516 });
2479 };
2517 };
2480
2518
2481 /**
2519 /**
2482 * Restore the notebook to a checkpoint state.
2520 * Restore the notebook to a checkpoint state.
2483 *
2521 *
2484 * @method restore_checkpoint
2522 * @method restore_checkpoint
2485 * @param {String} checkpoint ID
2523 * @param {String} checkpoint ID
2486 */
2524 */
2487 Notebook.prototype.restore_checkpoint = function (checkpoint) {
2525 Notebook.prototype.restore_checkpoint = function (checkpoint) {
2488 this.events.trigger('notebook_restoring.Notebook', checkpoint);
2526 this.events.trigger('notebook_restoring.Notebook', checkpoint);
2489 var url = utils.url_join_encode(
2527 var url = utils.url_join_encode(
2490 this.base_url,
2528 this.base_url,
2491 'api/contents',
2529 'api/contents',
2492 this.notebook_path,
2530 this.notebook_path,
2493 this.notebook_name,
2531 this.notebook_name,
2494 'checkpoints',
2532 'checkpoints',
2495 checkpoint
2533 checkpoint
2496 );
2534 );
2497 $.post(url).done(
2535 $.post(url).done(
2498 $.proxy(this.restore_checkpoint_success, this)
2536 $.proxy(this.restore_checkpoint_success, this)
2499 ).fail(
2537 ).fail(
2500 $.proxy(this.restore_checkpoint_error, this)
2538 $.proxy(this.restore_checkpoint_error, this)
2501 );
2539 );
2502 };
2540 };
2503
2541
2504 /**
2542 /**
2505 * Success callback for restoring a notebook to a checkpoint.
2543 * Success callback for restoring a notebook to a checkpoint.
2506 *
2544 *
2507 * @method restore_checkpoint_success
2545 * @method restore_checkpoint_success
2508 * @param {Object} data (ignored, should be empty)
2546 * @param {Object} data (ignored, should be empty)
2509 * @param {String} status Description of response status
2547 * @param {String} status Description of response status
2510 * @param {jqXHR} xhr jQuery Ajax object
2548 * @param {jqXHR} xhr jQuery Ajax object
2511 */
2549 */
2512 Notebook.prototype.restore_checkpoint_success = function (data, status, xhr) {
2550 Notebook.prototype.restore_checkpoint_success = function (data, status, xhr) {
2513 this.events.trigger('checkpoint_restored.Notebook');
2551 this.events.trigger('checkpoint_restored.Notebook');
2514 this.load_notebook(this.notebook_name, this.notebook_path);
2552 this.load_notebook(this.notebook_name, this.notebook_path);
2515 };
2553 };
2516
2554
2517 /**
2555 /**
2518 * Failure callback for restoring a notebook to a checkpoint.
2556 * Failure callback for restoring a notebook to a checkpoint.
2519 *
2557 *
2520 * @method restore_checkpoint_error
2558 * @method restore_checkpoint_error
2521 * @param {jqXHR} xhr jQuery Ajax object
2559 * @param {jqXHR} xhr jQuery Ajax object
2522 * @param {String} status Description of response status
2560 * @param {String} status Description of response status
2523 * @param {String} error_msg HTTP error message
2561 * @param {String} error_msg HTTP error message
2524 */
2562 */
2525 Notebook.prototype.restore_checkpoint_error = function (xhr, status, error_msg) {
2563 Notebook.prototype.restore_checkpoint_error = function (xhr, status, error_msg) {
2526 this.events.trigger('checkpoint_restore_failed.Notebook');
2564 this.events.trigger('checkpoint_restore_failed.Notebook');
2527 };
2565 };
2528
2566
2529 /**
2567 /**
2530 * Delete a notebook checkpoint.
2568 * Delete a notebook checkpoint.
2531 *
2569 *
2532 * @method delete_checkpoint
2570 * @method delete_checkpoint
2533 * @param {String} checkpoint ID
2571 * @param {String} checkpoint ID
2534 */
2572 */
2535 Notebook.prototype.delete_checkpoint = function (checkpoint) {
2573 Notebook.prototype.delete_checkpoint = function (checkpoint) {
2536 this.events.trigger('notebook_restoring.Notebook', checkpoint);
2574 this.events.trigger('notebook_restoring.Notebook', checkpoint);
2537 var url = utils.url_join_encode(
2575 var url = utils.url_join_encode(
2538 this.base_url,
2576 this.base_url,
2539 'api/contents',
2577 'api/contents',
2540 this.notebook_path,
2578 this.notebook_path,
2541 this.notebook_name,
2579 this.notebook_name,
2542 'checkpoints',
2580 'checkpoints',
2543 checkpoint
2581 checkpoint
2544 );
2582 );
2545 $.ajax(url, {
2583 $.ajax(url, {
2546 type: 'DELETE',
2584 type: 'DELETE',
2547 success: $.proxy(this.delete_checkpoint_success, this),
2585 success: $.proxy(this.delete_checkpoint_success, this),
2548 error: $.proxy(this.delete_checkpoint_error, this)
2586 error: $.proxy(this.delete_checkpoint_error, this)
2549 });
2587 });
2550 };
2588 };
2551
2589
2552 /**
2590 /**
2553 * Success callback for deleting a notebook checkpoint
2591 * Success callback for deleting a notebook checkpoint
2554 *
2592 *
2555 * @method delete_checkpoint_success
2593 * @method delete_checkpoint_success
2556 * @param {Object} data (ignored, should be empty)
2594 * @param {Object} data (ignored, should be empty)
2557 * @param {String} status Description of response status
2595 * @param {String} status Description of response status
2558 * @param {jqXHR} xhr jQuery Ajax object
2596 * @param {jqXHR} xhr jQuery Ajax object
2559 */
2597 */
2560 Notebook.prototype.delete_checkpoint_success = function (data, status, xhr) {
2598 Notebook.prototype.delete_checkpoint_success = function (data, status, xhr) {
2561 this.events.trigger('checkpoint_deleted.Notebook', data);
2599 this.events.trigger('checkpoint_deleted.Notebook', data);
2562 this.load_notebook(this.notebook_name, this.notebook_path);
2600 this.load_notebook(this.notebook_name, this.notebook_path);
2563 };
2601 };
2564
2602
2565 /**
2603 /**
2566 * Failure callback for deleting a notebook checkpoint.
2604 * Failure callback for deleting a notebook checkpoint.
2567 *
2605 *
2568 * @method delete_checkpoint_error
2606 * @method delete_checkpoint_error
2569 * @param {jqXHR} xhr jQuery Ajax object
2607 * @param {jqXHR} xhr jQuery Ajax object
2570 * @param {String} status Description of response status
2608 * @param {String} status Description of response status
2571 * @param {String} error HTTP error message
2609 * @param {String} error HTTP error message
2572 */
2610 */
2573 Notebook.prototype.delete_checkpoint_error = function (xhr, status, error) {
2611 Notebook.prototype.delete_checkpoint_error = function (xhr, status, error) {
2574 this.events.trigger('checkpoint_delete_failed.Notebook', [xhr, status, error]);
2612 this.events.trigger('checkpoint_delete_failed.Notebook', [xhr, status, error]);
2575 };
2613 };
2576
2614
2577
2615
2578 // For backwards compatability.
2616 // For backwards compatability.
2579 IPython.Notebook = Notebook;
2617 IPython.Notebook = Notebook;
2580
2618
2581 return {'Notebook': Notebook};
2619 return {'Notebook': Notebook};
2582 });
2620 });
@@ -1,244 +1,257 b''
1 // Copyright (c) IPython Development Team.
1 // Copyright (c) IPython Development Team.
2 // Distributed under the terms of the Modified BSD License.
2 // Distributed under the terms of the Modified BSD License.
3
3
4 define([
4 define([
5 'base/js/namespace',
5 'base/js/namespace',
6 'jquery',
6 'jquery',
7 'base/js/utils',
7 'base/js/utils',
8 'base/js/dialog',
8 'base/js/dialog',
9 'notebook/js/notificationwidget',
9 'notebook/js/notificationwidget',
10 ], function(IPython, $, utils, dialog, notificationwidget) {
10 ], function(IPython, $, utils, dialog, notificationwidget) {
11 "use strict";
11 "use strict";
12
12
13 var NotificationArea = function (selector, options) {
13 var NotificationArea = function (selector, options) {
14 // Constructor
14 // Constructor
15 //
15 //
16 // Parameters:
16 // Parameters:
17 // selector: string
17 // selector: string
18 // options: dictionary
18 // options: dictionary
19 // Dictionary of keyword arguments.
19 // Dictionary of keyword arguments.
20 // notebook: Notebook instance
20 // notebook: Notebook instance
21 // events: $(Events) instance
21 // events: $(Events) instance
22 // save_widget: SaveWidget instance
22 // save_widget: SaveWidget instance
23 this.selector = selector;
23 this.selector = selector;
24 this.events = options.events;
24 this.events = options.events;
25 this.save_widget = options.save_widget;
25 this.save_widget = options.save_widget;
26 this.notebook = options.notebook;
26 this.notebook = options.notebook;
27 this.keyboard_manager = options.keyboard_manager;
27 this.keyboard_manager = options.keyboard_manager;
28 if (this.selector !== undefined) {
28 if (this.selector !== undefined) {
29 this.element = $(selector);
29 this.element = $(selector);
30 }
30 }
31 this.widget_dict = {};
31 this.widget_dict = {};
32 };
32 };
33
33
34 NotificationArea.prototype.temp_message = function (msg, timeout, css_class) {
34 NotificationArea.prototype.temp_message = function (msg, timeout, css_class) {
35 if( css_class == 'danger') {css_class = 'ui-state-error';}
35 if( css_class == 'danger') {css_class = 'ui-state-error';}
36 if( css_class == 'warning') {css_class = 'ui-state-highlight';}
36 if( css_class == 'warning') {css_class = 'ui-state-highlight';}
37 var tdiv = $('<div>')
37 var tdiv = $('<div>')
38 .addClass('notification_widget')
38 .addClass('notification_widget')
39 .addClass(css_class)
39 .addClass(css_class)
40 .hide()
40 .hide()
41 .text(msg);
41 .text(msg);
42
42
43 $(this.selector).append(tdiv);
43 $(this.selector).append(tdiv);
44 var tmout = Math.max(1500,(timeout||1500));
44 var tmout = Math.max(1500,(timeout||1500));
45 tdiv.fadeIn(100);
45 tdiv.fadeIn(100);
46
46
47 setTimeout(function () {
47 setTimeout(function () {
48 tdiv.fadeOut(100, function () {tdiv.remove();});
48 tdiv.fadeOut(100, function () {tdiv.remove();});
49 }, tmout);
49 }, tmout);
50 };
50 };
51
51
52 NotificationArea.prototype.widget = function(name) {
52 NotificationArea.prototype.widget = function(name) {
53 if(this.widget_dict[name] === undefined) {
53 if(this.widget_dict[name] === undefined) {
54 return this.new_notification_widget(name);
54 return this.new_notification_widget(name);
55 }
55 }
56 return this.get_widget(name);
56 return this.get_widget(name);
57 };
57 };
58
58
59 NotificationArea.prototype.get_widget = function(name) {
59 NotificationArea.prototype.get_widget = function(name) {
60 if(this.widget_dict[name] === undefined) {
60 if(this.widget_dict[name] === undefined) {
61 throw('no widgets with this name');
61 throw('no widgets with this name');
62 }
62 }
63 return this.widget_dict[name];
63 return this.widget_dict[name];
64 };
64 };
65
65
66 NotificationArea.prototype.new_notification_widget = function(name) {
66 NotificationArea.prototype.new_notification_widget = function(name) {
67 if(this.widget_dict[name] !== undefined) {
67 if(this.widget_dict[name] !== undefined) {
68 throw('widget with that name already exists ! ');
68 throw('widget with that name already exists ! ');
69 }
69 }
70 var div = $('<div/>').attr('id','notification_'+name);
70 var div = $('<div/>').attr('id','notification_'+name);
71 $(this.selector).append(div);
71 $(this.selector).append(div);
72 this.widget_dict[name] = new notificationwidget.NotificationWidget('#notification_'+name);
72 this.widget_dict[name] = new notificationwidget.NotificationWidget('#notification_'+name);
73 return this.widget_dict[name];
73 return this.widget_dict[name];
74 };
74 };
75
75
76 NotificationArea.prototype.init_notification_widgets = function() {
76 NotificationArea.prototype.init_notification_widgets = function() {
77 var that = this;
77 var that = this;
78 var knw = this.new_notification_widget('kernel');
78 var knw = this.new_notification_widget('kernel');
79 var $kernel_ind_icon = $("#kernel_indicator_icon");
79 var $kernel_ind_icon = $("#kernel_indicator_icon");
80 var $modal_ind_icon = $("#modal_indicator_icon");
80 var $modal_ind_icon = $("#modal_indicator_icon");
81
81
82 // Command/Edit mode
82 // Command/Edit mode
83 this.events.on('edit_mode.Notebook',function () {
83 this.events.on('edit_mode.Notebook',function () {
84 that.save_widget.update_document_title();
84 that.save_widget.update_document_title();
85 $modal_ind_icon.attr('class','edit_mode_icon').attr('title','Edit Mode');
85 $modal_ind_icon.attr('class','edit_mode_icon').attr('title','Edit Mode');
86 });
86 });
87
87
88 this.events.on('command_mode.Notebook',function () {
88 this.events.on('command_mode.Notebook',function () {
89 that.save_widget.update_document_title();
89 that.save_widget.update_document_title();
90 $modal_ind_icon.attr('class','command_mode_icon').attr('title','Command Mode');
90 $modal_ind_icon.attr('class','command_mode_icon').attr('title','Command Mode');
91 });
91 });
92
92
93 // Implicitly start off in Command mode, switching to Edit mode will trigger event
93 // Implicitly start off in Command mode, switching to Edit mode will trigger event
94 $modal_ind_icon.attr('class','command_mode_icon').attr('title','Command Mode');
94 $modal_ind_icon.attr('class','command_mode_icon').attr('title','Command Mode');
95
95
96 // Kernel events
96 // Kernel events
97 this.events.on('status_idle.Kernel',function () {
97 this.events.on('status_idle.Kernel',function () {
98 that.save_widget.update_document_title();
98 that.save_widget.update_document_title();
99 $kernel_ind_icon.attr('class','kernel_idle_icon').attr('title','Kernel Idle');
99 $kernel_ind_icon.attr('class','kernel_idle_icon').attr('title','Kernel Idle');
100 });
100 });
101
101
102 this.events.on('status_busy.Kernel',function () {
102 this.events.on('status_busy.Kernel',function () {
103 window.document.title='(Busy) '+window.document.title;
103 window.document.title='(Busy) '+window.document.title;
104 $kernel_ind_icon.attr('class','kernel_busy_icon').attr('title','Kernel Busy');
104 $kernel_ind_icon.attr('class','kernel_busy_icon').attr('title','Kernel Busy');
105 });
105 });
106
106
107 this.events.on('status_restarting.Kernel',function () {
107 this.events.on('status_restarting.Kernel',function () {
108 that.save_widget.update_document_title();
108 that.save_widget.update_document_title();
109 knw.set_message("Restarting kernel", 2000);
109 knw.set_message("Restarting kernel", 2000);
110 });
110 });
111
111
112 this.events.on('status_dead.Kernel',function () {
113 that.save_widget.update_document_title();
114 knw.danger("Dead kernel");
115 $kernel_ind_icon.attr('class','kernel_dead_icon').attr('title','Kernel Dead');
116 });
117
112 this.events.on('status_interrupting.Kernel',function () {
118 this.events.on('status_interrupting.Kernel',function () {
113 knw.set_message("Interrupting kernel", 2000);
119 knw.set_message("Interrupting kernel", 2000);
114 });
120 });
115
121
116 // Start the kernel indicator in the busy state, and send a kernel_info request.
122 // Start the kernel indicator in the busy state, and send a kernel_info request.
117 // When the kernel_info reply arrives, the kernel is idle.
123 // When the kernel_info reply arrives, the kernel is idle.
118 $kernel_ind_icon.attr('class','kernel_busy_icon').attr('title','Kernel Busy');
124 $kernel_ind_icon.attr('class','kernel_busy_icon').attr('title','Kernel Busy');
119
125
120 this.events.on('status_started.Kernel', function (evt, data) {
126 this.events.on('status_started.Kernel', function (evt, data) {
127 knw.info("Websockets Connected", 500);
128 that.events.trigger('status_busy.Kernel');
121 data.kernel.kernel_info(function () {
129 data.kernel.kernel_info(function () {
122 that.events.trigger('status_idle.Kernel');
130 that.events.trigger('status_idle.Kernel');
123 });
131 });
124 });
132 });
125
133
126 this.events.on('status_dead.Kernel',function () {
134 this.events.on('status_dead.Kernel',function () {
127 var msg = 'The kernel has died, and the automatic restart has failed.' +
135 var msg = 'The kernel has died, and the automatic restart has failed.' +
128 ' It is possible the kernel cannot be restarted.' +
136 ' It is possible the kernel cannot be restarted.' +
129 ' If you are not able to restart the kernel, you will still be able to save' +
137 ' If you are not able to restart the kernel, you will still be able to save' +
130 ' the notebook, but running code will no longer work until the notebook' +
138 ' the notebook, but running code will no longer work until the notebook' +
131 ' is reopened.';
139 ' is reopened.';
132
140
133 dialog.modal({
141 dialog.modal({
134 title: "Dead kernel",
142 title: "Dead kernel",
135 body : msg,
143 body : msg,
136 keyboard_manager: that.keyboard_manager,
144 keyboard_manager: that.keyboard_manager,
137 notebook: that.notebook,
145 notebook: that.notebook,
138 buttons : {
146 buttons : {
139 "Manual Restart": {
147 "Manual Restart": {
140 class: "btn-danger",
148 class: "btn-danger",
141 click: function () {
149 click: function () {
142 that.events.trigger('status_restarting.Kernel');
150 that.events.trigger('status_restarting.Kernel');
143 that.notebook.start_kernel();
151 that.notebook.start_kernel();
144 }
152 }
145 },
153 },
146 "Don't restart": {}
154 "Don't restart": {}
147 }
155 }
148 });
156 });
149 });
157 });
150
158
151 this.events.on('websocket_closed.Kernel', function (event, data) {
159 this.events.on('websocket_closed.Kernel', function (event, data) {
152 var kernel = data.kernel;
160 var kernel = data.kernel;
153 var ws_url = data.ws_url;
161 var ws_url = data.ws_url;
154 var early = data.early;
162 var early = data.early;
155 var msg;
163 var msg;
164
165 $kernel_ind_icon
166 .attr('class', 'kernel_disconnected_icon')
167 .attr('title', 'No Connection to Kernel');
168
156 if (!early) {
169 if (!early) {
157 knw.set_message('Reconnecting WebSockets', 1000);
170 knw.warning('Reconnecting');
158 setTimeout(function () {
171 setTimeout(function () {
159 kernel.start_channels();
172 kernel.start_channels();
160 }, 5000);
173 }, 5000);
161 return;
174 return;
162 }
175 }
163 console.log('WebSocket connection failed: ', ws_url);
176 console.log('WebSocket connection failed: ', ws_url);
164 msg = "A WebSocket connection could not be established." +
177 msg = "A WebSocket connection could not be established." +
165 " You will NOT be able to run code. Check your" +
178 " You will NOT be able to run code. Check your" +
166 " network connection or notebook server configuration.";
179 " network connection or notebook server configuration.";
167 dialog.modal({
180 dialog.modal({
168 title: "WebSocket connection failed",
181 title: "WebSocket connection failed",
169 body: msg,
182 body: msg,
170 keyboard_manager: that.keyboard_manager,
183 keyboard_manager: that.keyboard_manager,
171 notebook: that.notebook,
184 notebook: that.notebook,
172 buttons : {
185 buttons : {
173 "OK": {},
186 "OK": {},
174 "Reconnect": {
187 "Reconnect": {
175 click: function () {
188 click: function () {
176 knw.set_message('Reconnecting WebSockets', 1000);
189 knw.warning('Reconnecting');
177 setTimeout(function () {
190 setTimeout(function () {
178 kernel.start_channels();
191 kernel.start_channels();
179 }, 5000);
192 }, 5000);
180 }
193 }
181 }
194 }
182 }
195 }
183 });
196 });
184 });
197 });
185
198
186
199
187 var nnw = this.new_notification_widget('notebook');
200 var nnw = this.new_notification_widget('notebook');
188
201
189 // Notebook events
202 // Notebook events
190 this.events.on('notebook_loading.Notebook', function () {
203 this.events.on('notebook_loading.Notebook', function () {
191 nnw.set_message("Loading notebook",500);
204 nnw.set_message("Loading notebook",500);
192 });
205 });
193 this.events.on('notebook_loaded.Notebook', function () {
206 this.events.on('notebook_loaded.Notebook', function () {
194 nnw.set_message("Notebook loaded",500);
207 nnw.set_message("Notebook loaded",500);
195 });
208 });
196 this.events.on('notebook_saving.Notebook', function () {
209 this.events.on('notebook_saving.Notebook', function () {
197 nnw.set_message("Saving notebook",500);
210 nnw.set_message("Saving notebook",500);
198 });
211 });
199 this.events.on('notebook_saved.Notebook', function () {
212 this.events.on('notebook_saved.Notebook', function () {
200 nnw.set_message("Notebook saved",2000);
213 nnw.set_message("Notebook saved",2000);
201 });
214 });
202 this.events.on('notebook_save_failed.Notebook', function (evt, xhr, status, data) {
215 this.events.on('notebook_save_failed.Notebook', function (evt, xhr, status, data) {
203 nnw.warning(data || "Notebook save failed");
216 nnw.warning(data || "Notebook save failed");
204 });
217 });
205
218
206 // Checkpoint events
219 // Checkpoint events
207 this.events.on('checkpoint_created.Notebook', function (evt, data) {
220 this.events.on('checkpoint_created.Notebook', function (evt, data) {
208 var msg = "Checkpoint created";
221 var msg = "Checkpoint created";
209 if (data.last_modified) {
222 if (data.last_modified) {
210 var d = new Date(data.last_modified);
223 var d = new Date(data.last_modified);
211 msg = msg + ": " + d.format("HH:MM:ss");
224 msg = msg + ": " + d.format("HH:MM:ss");
212 }
225 }
213 nnw.set_message(msg, 2000);
226 nnw.set_message(msg, 2000);
214 });
227 });
215 this.events.on('checkpoint_failed.Notebook', function () {
228 this.events.on('checkpoint_failed.Notebook', function () {
216 nnw.warning("Checkpoint failed");
229 nnw.warning("Checkpoint failed");
217 });
230 });
218 this.events.on('checkpoint_deleted.Notebook', function () {
231 this.events.on('checkpoint_deleted.Notebook', function () {
219 nnw.set_message("Checkpoint deleted", 500);
232 nnw.set_message("Checkpoint deleted", 500);
220 });
233 });
221 this.events.on('checkpoint_delete_failed.Notebook', function () {
234 this.events.on('checkpoint_delete_failed.Notebook', function () {
222 nnw.warning("Checkpoint delete failed");
235 nnw.warning("Checkpoint delete failed");
223 });
236 });
224 this.events.on('checkpoint_restoring.Notebook', function () {
237 this.events.on('checkpoint_restoring.Notebook', function () {
225 nnw.set_message("Restoring to checkpoint...", 500);
238 nnw.set_message("Restoring to checkpoint...", 500);
226 });
239 });
227 this.events.on('checkpoint_restore_failed.Notebook', function () {
240 this.events.on('checkpoint_restore_failed.Notebook', function () {
228 nnw.warning("Checkpoint restore failed");
241 nnw.warning("Checkpoint restore failed");
229 });
242 });
230
243
231 // Autosave events
244 // Autosave events
232 this.events.on('autosave_disabled.Notebook', function () {
245 this.events.on('autosave_disabled.Notebook', function () {
233 nnw.set_message("Autosave disabled", 2000);
246 nnw.set_message("Autosave disabled", 2000);
234 });
247 });
235 this.events.on('autosave_enabled.Notebook', function (evt, interval) {
248 this.events.on('autosave_enabled.Notebook', function (evt, interval) {
236 nnw.set_message("Saving every " + interval / 1000 + "s", 1000);
249 nnw.set_message("Saving every " + interval / 1000 + "s", 1000);
237 });
250 });
238
251
239 };
252 };
240
253
241 IPython.NotificationArea = NotificationArea;
254 IPython.NotificationArea = NotificationArea;
242
255
243 return {'NotificationArea': NotificationArea};
256 return {'NotificationArea': NotificationArea};
244 });
257 });
@@ -1,46 +1,54 b''
1 #notification_area {
1 #notification_area {
2 .pull-right();
2 .pull-right();
3
3
4 z-index: 10;
4 z-index: 10;
5 }
5 }
6
6
7 .indicator_area {
7 .indicator_area {
8 color: @navbar-default-link-color;
8 color: @navbar-default-link-color;
9 padding: 4px 3px;
9 padding: 4px 3px;
10 margin: 0px;
10 margin: 0px;
11 width: 11px;
11 width: 11px;
12 z-index: 10;
12 z-index: 10;
13 text-align: center;
13 text-align: center;
14 }
14 }
15
15
16 #kernel_indicator {
16 #kernel_indicator {
17 .pull-right();
17 .pull-right();
18 .indicator_area();
18 .indicator_area();
19
19
20 margin-right: 12px;
20 margin-right: 12px;
21 }
21 }
22
22
23 #modal_indicator {
23 #modal_indicator {
24 .pull-right();
24 .pull-right();
25 .indicator_area();
25 .indicator_area();
26
26
27 margin-right: 5px;
27 margin-right: 5px;
28 }
28 }
29
29
30 .edit_mode_icon:before {
30 .edit_mode_icon:before {
31 .icon(@fa-var-pencil)
31 .icon(@fa-var-pencil)
32 }
32 }
33
33
34 .command_mode_icon:before {
34 .command_mode_icon:before {
35 .icon(' ');
35 .icon(' ');
36 }
36 }
37
37
38 .kernel_idle_icon:before {
38 .kernel_idle_icon:before {
39 .icon(@fa-var-circle-o);
39 .icon(@fa-var-circle-o);
40 }
40 }
41
41
42 .kernel_busy_icon:before {
42 .kernel_busy_icon:before {
43 .icon(@fa-var-circle);
43 .icon(@fa-var-circle);
44 }
44 }
45
45
46 .kernel_dead_icon:before {
47 .icon(@fa-var-bomb);
48 }
49
50 .kernel_disconnected_icon:before {
51 .icon(@fa-var-chain-broken);
52 }
53
46
54
@@ -1,616 +1,626 b''
1 // Copyright (c) IPython Development Team.
1 // Copyright (c) IPython Development Team.
2 // Distributed under the terms of the Modified BSD License.
2 // Distributed under the terms of the Modified BSD License.
3
3
4 define([
4 define([
5 'base/js/namespace',
5 'base/js/namespace',
6 'jquery',
6 'jquery',
7 'base/js/utils',
7 'base/js/utils',
8 'services/kernels/js/comm',
8 'services/kernels/js/comm',
9 'widgets/js/init',
9 'widgets/js/init',
10 ], function(IPython, $, utils, comm, widgetmanager) {
10 ], function(IPython, $, utils, comm, widgetmanager) {
11 "use strict";
11 "use strict";
12
12
13 // Initialization and connection.
13 // Initialization and connection.
14 /**
14 /**
15 * A Kernel Class to communicate with the Python kernel
15 * A Kernel Class to communicate with the Python kernel
16 * @Class Kernel
16 * @Class Kernel
17 */
17 */
18 var Kernel = function (kernel_service_url, ws_url, notebook, name) {
18 var Kernel = function (kernel_service_url, ws_url, notebook, name) {
19 this.events = notebook.events;
19 this.events = notebook.events;
20 this.kernel_id = null;
20 this.kernel_id = null;
21 this.shell_channel = null;
21 this.shell_channel = null;
22 this.iopub_channel = null;
22 this.iopub_channel = null;
23 this.stdin_channel = null;
23 this.stdin_channel = null;
24 this.kernel_service_url = kernel_service_url;
24 this.kernel_service_url = kernel_service_url;
25 this.name = name;
25 this.name = name;
26 this.ws_url = ws_url || IPython.utils.get_body_data("wsUrl");
26 this.ws_url = ws_url || IPython.utils.get_body_data("wsUrl");
27 if (!this.ws_url) {
27 if (!this.ws_url) {
28 // trailing 's' in https will become wss for secure web sockets
28 // trailing 's' in https will become wss for secure web sockets
29 this.ws_url = location.protocol.replace('http', 'ws') + "//" + location.host;
29 this.ws_url = location.protocol.replace('http', 'ws') + "//" + location.host;
30 }
30 }
31 this.running = false;
31 this.running = false;
32 this.username = "username";
32 this.username = "username";
33 this.session_id = utils.uuid();
33 this.session_id = utils.uuid();
34 this._msg_callbacks = {};
34 this._msg_callbacks = {};
35 this.post = $.post;
35 this.post = $.post;
36
36
37 if (typeof(WebSocket) !== 'undefined') {
37 if (typeof(WebSocket) !== 'undefined') {
38 this.WebSocket = WebSocket;
38 this.WebSocket = WebSocket;
39 } else if (typeof(MozWebSocket) !== 'undefined') {
39 } else if (typeof(MozWebSocket) !== 'undefined') {
40 this.WebSocket = MozWebSocket;
40 this.WebSocket = MozWebSocket;
41 } else {
41 } else {
42 alert('Your browser does not have WebSocket support, please try Chrome, Safari or Firefox β‰₯ 6. Firefox 4 and 5 are also supported by you have to enable WebSockets in about:config.');
42 alert('Your browser does not have WebSocket support, please try Chrome, Safari or Firefox β‰₯ 6. Firefox 4 and 5 are also supported by you have to enable WebSockets in about:config.');
43 }
43 }
44
44
45 this.bind_events();
45 this.bind_events();
46 this.init_iopub_handlers();
46 this.init_iopub_handlers();
47 this.comm_manager = new comm.CommManager(this);
47 this.comm_manager = new comm.CommManager(this);
48 this.widget_manager = new widgetmanager.WidgetManager(this.comm_manager, notebook);
48 this.widget_manager = new widgetmanager.WidgetManager(this.comm_manager, notebook);
49
49
50 this.last_msg_id = null;
50 this.last_msg_id = null;
51 this.last_msg_callbacks = {};
51 this.last_msg_callbacks = {};
52 };
52 };
53
53
54
54
55 Kernel.prototype._get_msg = function (msg_type, content, metadata) {
55 Kernel.prototype._get_msg = function (msg_type, content, metadata) {
56 var msg = {
56 var msg = {
57 header : {
57 header : {
58 msg_id : utils.uuid(),
58 msg_id : utils.uuid(),
59 username : this.username,
59 username : this.username,
60 session : this.session_id,
60 session : this.session_id,
61 msg_type : msg_type,
61 msg_type : msg_type,
62 version : "5.0"
62 version : "5.0"
63 },
63 },
64 metadata : metadata || {},
64 metadata : metadata || {},
65 content : content,
65 content : content,
66 parent_header : {}
66 parent_header : {}
67 };
67 };
68 return msg;
68 return msg;
69 };
69 };
70
70
71 Kernel.prototype.bind_events = function () {
71 Kernel.prototype.bind_events = function () {
72 var that = this;
72 var that = this;
73 this.events.on('send_input_reply.Kernel', function(evt, data) {
73 this.events.on('send_input_reply.Kernel', function(evt, data) {
74 that.send_input_reply(data);
74 that.send_input_reply(data);
75 });
75 });
76 };
76 };
77
77
78 // Initialize the iopub handlers
78 // Initialize the iopub handlers
79
79
80 Kernel.prototype.init_iopub_handlers = function () {
80 Kernel.prototype.init_iopub_handlers = function () {
81 var output_msg_types = ['stream', 'display_data', 'execute_result', 'error'];
81 var output_msg_types = ['stream', 'display_data', 'execute_result', 'error'];
82 this._iopub_handlers = {};
82 this._iopub_handlers = {};
83 this.register_iopub_handler('status', $.proxy(this._handle_status_message, this));
83 this.register_iopub_handler('status', $.proxy(this._handle_status_message, this));
84 this.register_iopub_handler('clear_output', $.proxy(this._handle_clear_output, this));
84 this.register_iopub_handler('clear_output', $.proxy(this._handle_clear_output, this));
85
85
86 for (var i=0; i < output_msg_types.length; i++) {
86 for (var i=0; i < output_msg_types.length; i++) {
87 this.register_iopub_handler(output_msg_types[i], $.proxy(this._handle_output_message, this));
87 this.register_iopub_handler(output_msg_types[i], $.proxy(this._handle_output_message, this));
88 }
88 }
89 };
89 };
90
90
91 /**
91 /**
92 * Start the Python kernel
92 * Start the Python kernel
93 * @method start
93 * @method start
94 */
94 */
95 Kernel.prototype.start = function (params) {
95 Kernel.prototype.start = function (params) {
96 params = params || {};
96 params = params || {};
97 if (!this.running) {
97 if (!this.running) {
98 var qs = $.param(params);
98 var qs = $.param(params);
99 this.post(utils.url_join_encode(this.kernel_service_url) + '?' + qs,
99 this.post(utils.url_join_encode(this.kernel_service_url) + '?' + qs,
100 $.proxy(this._kernel_started, this),
100 $.proxy(this._kernel_started, this),
101 'json'
101 'json'
102 );
102 );
103 }
103 }
104 };
104 };
105
105
106 /**
106 /**
107 * Restart the python kernel.
107 * Restart the python kernel.
108 *
108 *
109 * Emit a 'status_restarting.Kernel' event with
109 * Emit a 'status_restarting.Kernel' event with
110 * the current object as parameter
110 * the current object as parameter
111 *
111 *
112 * @method restart
112 * @method restart
113 */
113 */
114 Kernel.prototype.restart = function () {
114 Kernel.prototype.restart = function () {
115 this.events.trigger('status_restarting.Kernel', {kernel: this});
115 this.events.trigger('status_restarting.Kernel', {kernel: this});
116 if (this.running) {
116 if (this.running) {
117 this.stop_channels();
117 this.stop_channels();
118 this.post(utils.url_join_encode(this.kernel_url, "restart"),
118 this.post(utils.url_join_encode(this.kernel_url, "restart"),
119 $.proxy(this._kernel_started, this),
119 $.proxy(this._kernel_started, this),
120 'json'
120 'json'
121 );
121 );
122 }
122 }
123 };
123 };
124
124
125
125
126 Kernel.prototype._kernel_started = function (json) {
126 Kernel.prototype._kernel_started = function (json) {
127 console.log("Kernel started: ", json.id);
127 console.log("Kernel started: ", json.id);
128 this.running = true;
128 this.running = true;
129 this.kernel_id = json.id;
129 this.kernel_id = json.id;
130 this.kernel_url = utils.url_path_join(this.kernel_service_url, this.kernel_id);
130 this.kernel_url = utils.url_path_join(this.kernel_service_url, this.kernel_id);
131 this.start_channels();
131 this.start_channels();
132 };
132 };
133
133
134
134
135 Kernel.prototype._websocket_closed = function(ws_url, early) {
135 Kernel.prototype._websocket_closed = function(ws_url, early) {
136 this.stop_channels();
136 this.stop_channels();
137 this.events.trigger('websocket_closed.Kernel',
137 this.events.trigger('websocket_closed.Kernel',
138 {ws_url: ws_url, kernel: this, early: early}
138 {ws_url: ws_url, kernel: this, early: early}
139 );
139 );
140 };
140 };
141
141
142 /**
142 /**
143 * Start the `shell`and `iopub` channels.
143 * Start the `shell`and `iopub` channels.
144 * Will stop and restart them if they already exist.
144 * Will stop and restart them if they already exist.
145 *
145 *
146 * @method start_channels
146 * @method start_channels
147 */
147 */
148 Kernel.prototype.start_channels = function () {
148 Kernel.prototype.start_channels = function () {
149 var that = this;
149 var that = this;
150 this.stop_channels();
150 this.stop_channels();
151 var ws_host_url = this.ws_url + this.kernel_url;
151 var ws_host_url = this.ws_url + this.kernel_url;
152 console.log("Starting WebSockets:", ws_host_url);
152 console.log("Starting WebSockets:", ws_host_url);
153 this.shell_channel = new this.WebSocket(
153 this.shell_channel = new this.WebSocket(
154 this.ws_url + utils.url_join_encode(this.kernel_url, "shell")
154 this.ws_url + utils.url_join_encode(this.kernel_url, "shell")
155 );
155 );
156 this.stdin_channel = new this.WebSocket(
156 this.stdin_channel = new this.WebSocket(
157 this.ws_url + utils.url_join_encode(this.kernel_url, "stdin")
157 this.ws_url + utils.url_join_encode(this.kernel_url, "stdin")
158 );
158 );
159 this.iopub_channel = new this.WebSocket(
159 this.iopub_channel = new this.WebSocket(
160 this.ws_url + utils.url_join_encode(this.kernel_url, "iopub")
160 this.ws_url + utils.url_join_encode(this.kernel_url, "iopub")
161 );
161 );
162
162
163 var already_called_onclose = false; // only alert once
163 var already_called_onclose = false; // only alert once
164 var ws_closed_early = function(evt){
164 var ws_closed_early = function(evt){
165 if (already_called_onclose){
165 if (already_called_onclose){
166 return;
166 return;
167 }
167 }
168 already_called_onclose = true;
168 already_called_onclose = true;
169 if ( ! evt.wasClean ){
169 if ( ! evt.wasClean ){
170 that._websocket_closed(ws_host_url, true);
170 that._websocket_closed(ws_host_url, true);
171 }
171 }
172 };
172 };
173 var ws_closed_late = function(evt){
173 var ws_closed_late = function(evt){
174 if (already_called_onclose){
174 if (already_called_onclose){
175 return;
175 return;
176 }
176 }
177 already_called_onclose = true;
177 already_called_onclose = true;
178 if ( ! evt.wasClean ){
178 if ( ! evt.wasClean ){
179 that._websocket_closed(ws_host_url, false);
179 that._websocket_closed(ws_host_url, false);
180 }
180 }
181 };
181 };
182 var ws_error = function(evt){
183 if (already_called_onclose){
184 return;
185 }
186 already_called_onclose = true;
187 that._websocket_closed(ws_host_url, false);
188 };
182 var channels = [this.shell_channel, this.iopub_channel, this.stdin_channel];
189 var channels = [this.shell_channel, this.iopub_channel, this.stdin_channel];
183 for (var i=0; i < channels.length; i++) {
190 for (var i=0; i < channels.length; i++) {
184 channels[i].onopen = $.proxy(this._ws_opened, this);
191 channels[i].onopen = $.proxy(this._ws_opened, this);
185 channels[i].onclose = ws_closed_early;
192 channels[i].onclose = ws_closed_early;
193 channels[i].onerror = ws_error;
186 }
194 }
187 // switch from early-close to late-close message after 1s
195 // switch from early-close to late-close message after 1s
188 setTimeout(function() {
196 setTimeout(function() {
189 for (var i=0; i < channels.length; i++) {
197 for (var i=0; i < channels.length; i++) {
190 if (channels[i] !== null) {
198 if (channels[i] !== null) {
191 channels[i].onclose = ws_closed_late;
199 channels[i].onclose = ws_closed_late;
192 }
200 }
193 }
201 }
194 }, 1000);
202 }, 1000);
195 this.shell_channel.onmessage = $.proxy(this._handle_shell_reply, this);
203 this.shell_channel.onmessage = $.proxy(this._handle_shell_reply, this);
196 this.iopub_channel.onmessage = $.proxy(this._handle_iopub_message, this);
204 this.iopub_channel.onmessage = $.proxy(this._handle_iopub_message, this);
197 this.stdin_channel.onmessage = $.proxy(this._handle_input_request, this);
205 this.stdin_channel.onmessage = $.proxy(this._handle_input_request, this);
198 };
206 };
199
207
200 /**
208 /**
201 * Handle a websocket entering the open state
209 * Handle a websocket entering the open state
202 * sends session and cookie authentication info as first message.
210 * sends session and cookie authentication info as first message.
203 * Once all sockets are open, signal the Kernel.status_started event.
211 * Once all sockets are open, signal the Kernel.status_started event.
204 * @method _ws_opened
212 * @method _ws_opened
205 */
213 */
206 Kernel.prototype._ws_opened = function (evt) {
214 Kernel.prototype._ws_opened = function (evt) {
207 // send the session id so the Session object Python-side
215 // send the session id so the Session object Python-side
208 // has the same identity
216 // has the same identity
209 evt.target.send(this.session_id + ':' + document.cookie);
217 evt.target.send(this.session_id + ':' + document.cookie);
210
218
211 var channels = [this.shell_channel, this.iopub_channel, this.stdin_channel];
219 var channels = [this.shell_channel, this.iopub_channel, this.stdin_channel];
212 for (var i=0; i < channels.length; i++) {
220 for (var i=0; i < channels.length; i++) {
213 // if any channel is not ready, don't trigger event.
221 // if any channel is not ready, don't trigger event.
214 if ( !channels[i].readyState ) return;
222 if ( channels[i].readyState == WebSocket.OPEN ) return;
215 }
223 }
216 // all events ready, trigger started event.
224 // all events ready, trigger started event.
217 this.events.trigger('status_started.Kernel', {kernel: this});
225 this.events.trigger('status_started.Kernel', {kernel: this});
218 };
226 };
219
227
220 /**
228 /**
221 * Stop the websocket channels.
229 * Stop the websocket channels.
222 * @method stop_channels
230 * @method stop_channels
223 */
231 */
224 Kernel.prototype.stop_channels = function () {
232 Kernel.prototype.stop_channels = function () {
225 var channels = [this.shell_channel, this.iopub_channel, this.stdin_channel];
233 var channels = [this.shell_channel, this.iopub_channel, this.stdin_channel];
226 for (var i=0; i < channels.length; i++) {
234 for (var i=0; i < channels.length; i++) {
227 if ( channels[i] !== null ) {
235 if ( channels[i] !== null ) {
228 channels[i].onclose = null;
236 channels[i].onclose = null;
229 channels[i].close();
237 channels[i].close();
230 }
238 }
231 }
239 }
232 this.shell_channel = this.iopub_channel = this.stdin_channel = null;
240 this.shell_channel = this.iopub_channel = this.stdin_channel = null;
233 };
241 };
234
242
235 // Main public methods.
243 // Main public methods.
236
244
237 // send a message on the Kernel's shell channel
245 // send a message on the Kernel's shell channel
238 Kernel.prototype.send_shell_message = function (msg_type, content, callbacks, metadata) {
246 Kernel.prototype.send_shell_message = function (msg_type, content, callbacks, metadata) {
239 var msg = this._get_msg(msg_type, content, metadata);
247 var msg = this._get_msg(msg_type, content, metadata);
240 this.shell_channel.send(JSON.stringify(msg));
248 this.shell_channel.send(JSON.stringify(msg));
241 this.set_callbacks_for_msg(msg.header.msg_id, callbacks);
249 this.set_callbacks_for_msg(msg.header.msg_id, callbacks);
242 return msg.header.msg_id;
250 return msg.header.msg_id;
243 };
251 };
244
252
245 /**
253 /**
246 * Get kernel info
254 * Get kernel info
247 *
255 *
248 * @param callback {function}
256 * @param callback {function}
249 * @method kernel_info
257 * @method kernel_info
250 *
258 *
251 * When calling this method, pass a callback function that expects one argument.
259 * When calling this method, pass a callback function that expects one argument.
252 * The callback will be passed the complete `kernel_info_reply` message documented
260 * The callback will be passed the complete `kernel_info_reply` message documented
253 * [here](http://ipython.org/ipython-doc/dev/development/messaging.html#kernel-info)
261 * [here](http://ipython.org/ipython-doc/dev/development/messaging.html#kernel-info)
254 */
262 */
255 Kernel.prototype.kernel_info = function (callback) {
263 Kernel.prototype.kernel_info = function (callback) {
256 var callbacks;
264 var callbacks;
257 if (callback) {
265 if (callback) {
258 callbacks = { shell : { reply : callback } };
266 callbacks = { shell : { reply : callback } };
259 }
267 }
260 return this.send_shell_message("kernel_info_request", {}, callbacks);
268 return this.send_shell_message("kernel_info_request", {}, callbacks);
261 };
269 };
262
270
263 /**
271 /**
264 * Get info on an object
272 * Get info on an object
265 *
273 *
266 * @param code {string}
274 * @param code {string}
267 * @param cursor_pos {integer}
275 * @param cursor_pos {integer}
268 * @param callback {function}
276 * @param callback {function}
269 * @method inspect
277 * @method inspect
270 *
278 *
271 * When calling this method, pass a callback function that expects one argument.
279 * When calling this method, pass a callback function that expects one argument.
272 * The callback will be passed the complete `inspect_reply` message documented
280 * The callback will be passed the complete `inspect_reply` message documented
273 * [here](http://ipython.org/ipython-doc/dev/development/messaging.html#object-information)
281 * [here](http://ipython.org/ipython-doc/dev/development/messaging.html#object-information)
274 */
282 */
275 Kernel.prototype.inspect = function (code, cursor_pos, callback) {
283 Kernel.prototype.inspect = function (code, cursor_pos, callback) {
276 var callbacks;
284 var callbacks;
277 if (callback) {
285 if (callback) {
278 callbacks = { shell : { reply : callback } };
286 callbacks = { shell : { reply : callback } };
279 }
287 }
280
288
281 var content = {
289 var content = {
282 code : code,
290 code : code,
283 cursor_pos : cursor_pos,
291 cursor_pos : cursor_pos,
284 detail_level : 0,
292 detail_level : 0,
285 };
293 };
286 return this.send_shell_message("inspect_request", content, callbacks);
294 return this.send_shell_message("inspect_request", content, callbacks);
287 };
295 };
288
296
289 /**
297 /**
290 * Execute given code into kernel, and pass result to callback.
298 * Execute given code into kernel, and pass result to callback.
291 *
299 *
292 * @async
300 * @async
293 * @method execute
301 * @method execute
294 * @param {string} code
302 * @param {string} code
295 * @param [callbacks] {Object} With the following keys (all optional)
303 * @param [callbacks] {Object} With the following keys (all optional)
296 * @param callbacks.shell.reply {function}
304 * @param callbacks.shell.reply {function}
297 * @param callbacks.shell.payload.[payload_name] {function}
305 * @param callbacks.shell.payload.[payload_name] {function}
298 * @param callbacks.iopub.output {function}
306 * @param callbacks.iopub.output {function}
299 * @param callbacks.iopub.clear_output {function}
307 * @param callbacks.iopub.clear_output {function}
300 * @param callbacks.input {function}
308 * @param callbacks.input {function}
301 * @param {object} [options]
309 * @param {object} [options]
302 * @param [options.silent=false] {Boolean}
310 * @param [options.silent=false] {Boolean}
303 * @param [options.user_expressions=empty_dict] {Dict}
311 * @param [options.user_expressions=empty_dict] {Dict}
304 * @param [options.allow_stdin=false] {Boolean} true|false
312 * @param [options.allow_stdin=false] {Boolean} true|false
305 *
313 *
306 * @example
314 * @example
307 *
315 *
308 * The options object should contain the options for the execute call. Its default
316 * The options object should contain the options for the execute call. Its default
309 * values are:
317 * values are:
310 *
318 *
311 * options = {
319 * options = {
312 * silent : true,
320 * silent : true,
313 * user_expressions : {},
321 * user_expressions : {},
314 * allow_stdin : false
322 * allow_stdin : false
315 * }
323 * }
316 *
324 *
317 * When calling this method pass a callbacks structure of the form:
325 * When calling this method pass a callbacks structure of the form:
318 *
326 *
319 * callbacks = {
327 * callbacks = {
320 * shell : {
328 * shell : {
321 * reply : execute_reply_callback,
329 * reply : execute_reply_callback,
322 * payload : {
330 * payload : {
323 * set_next_input : set_next_input_callback,
331 * set_next_input : set_next_input_callback,
324 * }
332 * }
325 * },
333 * },
326 * iopub : {
334 * iopub : {
327 * output : output_callback,
335 * output : output_callback,
328 * clear_output : clear_output_callback,
336 * clear_output : clear_output_callback,
329 * },
337 * },
330 * input : raw_input_callback
338 * input : raw_input_callback
331 * }
339 * }
332 *
340 *
333 * Each callback will be passed the entire message as a single arugment.
341 * Each callback will be passed the entire message as a single arugment.
334 * Payload handlers will be passed the corresponding payload and the execute_reply message.
342 * Payload handlers will be passed the corresponding payload and the execute_reply message.
335 */
343 */
336 Kernel.prototype.execute = function (code, callbacks, options) {
344 Kernel.prototype.execute = function (code, callbacks, options) {
337
345
338 var content = {
346 var content = {
339 code : code,
347 code : code,
340 silent : true,
348 silent : true,
341 store_history : false,
349 store_history : false,
342 user_expressions : {},
350 user_expressions : {},
343 allow_stdin : false
351 allow_stdin : false
344 };
352 };
345 callbacks = callbacks || {};
353 callbacks = callbacks || {};
346 if (callbacks.input !== undefined) {
354 if (callbacks.input !== undefined) {
347 content.allow_stdin = true;
355 content.allow_stdin = true;
348 }
356 }
349 $.extend(true, content, options);
357 $.extend(true, content, options);
350 this.events.trigger('execution_request.Kernel', {kernel: this, content:content});
358 this.events.trigger('execution_request.Kernel', {kernel: this, content:content});
351 return this.send_shell_message("execute_request", content, callbacks);
359 return this.send_shell_message("execute_request", content, callbacks);
352 };
360 };
353
361
354 /**
362 /**
355 * When calling this method, pass a function to be called with the `complete_reply` message
363 * When calling this method, pass a function to be called with the `complete_reply` message
356 * as its only argument when it arrives.
364 * as its only argument when it arrives.
357 *
365 *
358 * `complete_reply` is documented
366 * `complete_reply` is documented
359 * [here](http://ipython.org/ipython-doc/dev/development/messaging.html#complete)
367 * [here](http://ipython.org/ipython-doc/dev/development/messaging.html#complete)
360 *
368 *
361 * @method complete
369 * @method complete
362 * @param code {string}
370 * @param code {string}
363 * @param cursor_pos {integer}
371 * @param cursor_pos {integer}
364 * @param callback {function}
372 * @param callback {function}
365 *
373 *
366 */
374 */
367 Kernel.prototype.complete = function (code, cursor_pos, callback) {
375 Kernel.prototype.complete = function (code, cursor_pos, callback) {
368 var callbacks;
376 var callbacks;
369 if (callback) {
377 if (callback) {
370 callbacks = { shell : { reply : callback } };
378 callbacks = { shell : { reply : callback } };
371 }
379 }
372 var content = {
380 var content = {
373 code : code,
381 code : code,
374 cursor_pos : cursor_pos,
382 cursor_pos : cursor_pos,
375 };
383 };
376 return this.send_shell_message("complete_request", content, callbacks);
384 return this.send_shell_message("complete_request", content, callbacks);
377 };
385 };
378
386
379
387
380 Kernel.prototype.interrupt = function () {
388 Kernel.prototype.interrupt = function () {
381 if (this.running) {
389 if (this.running) {
382 this.events.trigger('status_interrupting.Kernel', {kernel: this});
390 this.events.trigger('status_interrupting.Kernel', {kernel: this});
383 this.post(utils.url_join_encode(this.kernel_url, "interrupt"));
391 this.post(utils.url_join_encode(this.kernel_url, "interrupt"));
384 }
392 }
385 };
393 };
386
394
387
395
388 Kernel.prototype.kill = function () {
396 Kernel.prototype.kill = function (success, error) {
389 if (this.running) {
397 if (this.running) {
390 this.running = false;
398 this.running = false;
391 var settings = {
399 var settings = {
392 cache : false,
400 cache : false,
393 type : "DELETE",
401 type : "DELETE",
394 error : utils.log_ajax_error,
402 success : success,
403 error : error || utils.log_ajax_error,
395 };
404 };
396 $.ajax(utils.url_join_encode(this.kernel_url), settings);
405 $.ajax(utils.url_join_encode(this.kernel_url), settings);
406 this.stop_channels();
397 }
407 }
398 };
408 };
399
409
400 Kernel.prototype.send_input_reply = function (input) {
410 Kernel.prototype.send_input_reply = function (input) {
401 var content = {
411 var content = {
402 value : input,
412 value : input,
403 };
413 };
404 this.events.trigger('input_reply.Kernel', {kernel: this, content:content});
414 this.events.trigger('input_reply.Kernel', {kernel: this, content:content});
405 var msg = this._get_msg("input_reply", content);
415 var msg = this._get_msg("input_reply", content);
406 this.stdin_channel.send(JSON.stringify(msg));
416 this.stdin_channel.send(JSON.stringify(msg));
407 return msg.header.msg_id;
417 return msg.header.msg_id;
408 };
418 };
409
419
410
420
411 // Reply handlers
421 // Reply handlers
412
422
413 Kernel.prototype.register_iopub_handler = function (msg_type, callback) {
423 Kernel.prototype.register_iopub_handler = function (msg_type, callback) {
414 this._iopub_handlers[msg_type] = callback;
424 this._iopub_handlers[msg_type] = callback;
415 };
425 };
416
426
417 Kernel.prototype.get_iopub_handler = function (msg_type) {
427 Kernel.prototype.get_iopub_handler = function (msg_type) {
418 // get iopub handler for a specific message type
428 // get iopub handler for a specific message type
419 return this._iopub_handlers[msg_type];
429 return this._iopub_handlers[msg_type];
420 };
430 };
421
431
422
432
423 Kernel.prototype.get_callbacks_for_msg = function (msg_id) {
433 Kernel.prototype.get_callbacks_for_msg = function (msg_id) {
424 // get callbacks for a specific message
434 // get callbacks for a specific message
425 if (msg_id == this.last_msg_id) {
435 if (msg_id == this.last_msg_id) {
426 return this.last_msg_callbacks;
436 return this.last_msg_callbacks;
427 } else {
437 } else {
428 return this._msg_callbacks[msg_id];
438 return this._msg_callbacks[msg_id];
429 }
439 }
430 };
440 };
431
441
432
442
433 Kernel.prototype.clear_callbacks_for_msg = function (msg_id) {
443 Kernel.prototype.clear_callbacks_for_msg = function (msg_id) {
434 if (this._msg_callbacks[msg_id] !== undefined ) {
444 if (this._msg_callbacks[msg_id] !== undefined ) {
435 delete this._msg_callbacks[msg_id];
445 delete this._msg_callbacks[msg_id];
436 }
446 }
437 };
447 };
438
448
439 Kernel.prototype._finish_shell = function (msg_id) {
449 Kernel.prototype._finish_shell = function (msg_id) {
440 var callbacks = this._msg_callbacks[msg_id];
450 var callbacks = this._msg_callbacks[msg_id];
441 if (callbacks !== undefined) {
451 if (callbacks !== undefined) {
442 callbacks.shell_done = true;
452 callbacks.shell_done = true;
443 if (callbacks.iopub_done) {
453 if (callbacks.iopub_done) {
444 this.clear_callbacks_for_msg(msg_id);
454 this.clear_callbacks_for_msg(msg_id);
445 }
455 }
446 }
456 }
447 };
457 };
448
458
449 Kernel.prototype._finish_iopub = function (msg_id) {
459 Kernel.prototype._finish_iopub = function (msg_id) {
450 var callbacks = this._msg_callbacks[msg_id];
460 var callbacks = this._msg_callbacks[msg_id];
451 if (callbacks !== undefined) {
461 if (callbacks !== undefined) {
452 callbacks.iopub_done = true;
462 callbacks.iopub_done = true;
453 if (callbacks.shell_done) {
463 if (callbacks.shell_done) {
454 this.clear_callbacks_for_msg(msg_id);
464 this.clear_callbacks_for_msg(msg_id);
455 }
465 }
456 }
466 }
457 };
467 };
458
468
459 /* Set callbacks for a particular message.
469 /* Set callbacks for a particular message.
460 * Callbacks should be a struct of the following form:
470 * Callbacks should be a struct of the following form:
461 * shell : {
471 * shell : {
462 *
472 *
463 * }
473 * }
464
474
465 */
475 */
466 Kernel.prototype.set_callbacks_for_msg = function (msg_id, callbacks) {
476 Kernel.prototype.set_callbacks_for_msg = function (msg_id, callbacks) {
467 this.last_msg_id = msg_id;
477 this.last_msg_id = msg_id;
468 if (callbacks) {
478 if (callbacks) {
469 // shallow-copy mapping, because we will modify it at the top level
479 // shallow-copy mapping, because we will modify it at the top level
470 var cbcopy = this._msg_callbacks[msg_id] = this.last_msg_callbacks = {};
480 var cbcopy = this._msg_callbacks[msg_id] = this.last_msg_callbacks = {};
471 cbcopy.shell = callbacks.shell;
481 cbcopy.shell = callbacks.shell;
472 cbcopy.iopub = callbacks.iopub;
482 cbcopy.iopub = callbacks.iopub;
473 cbcopy.input = callbacks.input;
483 cbcopy.input = callbacks.input;
474 cbcopy.shell_done = (!callbacks.shell);
484 cbcopy.shell_done = (!callbacks.shell);
475 cbcopy.iopub_done = (!callbacks.iopub);
485 cbcopy.iopub_done = (!callbacks.iopub);
476 } else {
486 } else {
477 this.last_msg_callbacks = {};
487 this.last_msg_callbacks = {};
478 }
488 }
479 };
489 };
480
490
481
491
482 Kernel.prototype._handle_shell_reply = function (e) {
492 Kernel.prototype._handle_shell_reply = function (e) {
483 var reply = $.parseJSON(e.data);
493 var reply = $.parseJSON(e.data);
484 this.events.trigger('shell_reply.Kernel', {kernel: this, reply:reply});
494 this.events.trigger('shell_reply.Kernel', {kernel: this, reply:reply});
485 var content = reply.content;
495 var content = reply.content;
486 var metadata = reply.metadata;
496 var metadata = reply.metadata;
487 var parent_id = reply.parent_header.msg_id;
497 var parent_id = reply.parent_header.msg_id;
488 var callbacks = this.get_callbacks_for_msg(parent_id);
498 var callbacks = this.get_callbacks_for_msg(parent_id);
489 if (!callbacks || !callbacks.shell) {
499 if (!callbacks || !callbacks.shell) {
490 return;
500 return;
491 }
501 }
492 var shell_callbacks = callbacks.shell;
502 var shell_callbacks = callbacks.shell;
493
503
494 // signal that shell callbacks are done
504 // signal that shell callbacks are done
495 this._finish_shell(parent_id);
505 this._finish_shell(parent_id);
496
506
497 if (shell_callbacks.reply !== undefined) {
507 if (shell_callbacks.reply !== undefined) {
498 shell_callbacks.reply(reply);
508 shell_callbacks.reply(reply);
499 }
509 }
500 if (content.payload && shell_callbacks.payload) {
510 if (content.payload && shell_callbacks.payload) {
501 this._handle_payloads(content.payload, shell_callbacks.payload, reply);
511 this._handle_payloads(content.payload, shell_callbacks.payload, reply);
502 }
512 }
503 };
513 };
504
514
505
515
506 Kernel.prototype._handle_payloads = function (payloads, payload_callbacks, msg) {
516 Kernel.prototype._handle_payloads = function (payloads, payload_callbacks, msg) {
507 var l = payloads.length;
517 var l = payloads.length;
508 // Payloads are handled by triggering events because we don't want the Kernel
518 // Payloads are handled by triggering events because we don't want the Kernel
509 // to depend on the Notebook or Pager classes.
519 // to depend on the Notebook or Pager classes.
510 for (var i=0; i<l; i++) {
520 for (var i=0; i<l; i++) {
511 var payload = payloads[i];
521 var payload = payloads[i];
512 var callback = payload_callbacks[payload.source];
522 var callback = payload_callbacks[payload.source];
513 if (callback) {
523 if (callback) {
514 callback(payload, msg);
524 callback(payload, msg);
515 }
525 }
516 }
526 }
517 };
527 };
518
528
519 Kernel.prototype._handle_status_message = function (msg) {
529 Kernel.prototype._handle_status_message = function (msg) {
520 var execution_state = msg.content.execution_state;
530 var execution_state = msg.content.execution_state;
521 var parent_id = msg.parent_header.msg_id;
531 var parent_id = msg.parent_header.msg_id;
522
532
523 // dispatch status msg callbacks, if any
533 // dispatch status msg callbacks, if any
524 var callbacks = this.get_callbacks_for_msg(parent_id);
534 var callbacks = this.get_callbacks_for_msg(parent_id);
525 if (callbacks && callbacks.iopub && callbacks.iopub.status) {
535 if (callbacks && callbacks.iopub && callbacks.iopub.status) {
526 try {
536 try {
527 callbacks.iopub.status(msg);
537 callbacks.iopub.status(msg);
528 } catch (e) {
538 } catch (e) {
529 console.log("Exception in status msg handler", e, e.stack);
539 console.log("Exception in status msg handler", e, e.stack);
530 }
540 }
531 }
541 }
532
542
533 if (execution_state === 'busy') {
543 if (execution_state === 'busy') {
534 this.events.trigger('status_busy.Kernel', {kernel: this});
544 this.events.trigger('status_busy.Kernel', {kernel: this});
535 } else if (execution_state === 'idle') {
545 } else if (execution_state === 'idle') {
536 // signal that iopub callbacks are (probably) done
546 // signal that iopub callbacks are (probably) done
537 // async output may still arrive,
547 // async output may still arrive,
538 // but only for the most recent request
548 // but only for the most recent request
539 this._finish_iopub(parent_id);
549 this._finish_iopub(parent_id);
540
550
541 // trigger status_idle event
551 // trigger status_idle event
542 this.events.trigger('status_idle.Kernel', {kernel: this});
552 this.events.trigger('status_idle.Kernel', {kernel: this});
543 } else if (execution_state === 'restarting') {
553 } else if (execution_state === 'restarting') {
544 // autorestarting is distinct from restarting,
554 // autorestarting is distinct from restarting,
545 // in that it means the kernel died and the server is restarting it.
555 // in that it means the kernel died and the server is restarting it.
546 // status_restarting sets the notification widget,
556 // status_restarting sets the notification widget,
547 // autorestart shows the more prominent dialog.
557 // autorestart shows the more prominent dialog.
548 this.events.trigger('status_autorestarting.Kernel', {kernel: this});
558 this.events.trigger('status_autorestarting.Kernel', {kernel: this});
549 this.events.trigger('status_restarting.Kernel', {kernel: this});
559 this.events.trigger('status_restarting.Kernel', {kernel: this});
550 } else if (execution_state === 'dead') {
560 } else if (execution_state === 'dead') {
551 this.stop_channels();
561 this.stop_channels();
552 this.events.trigger('status_dead.Kernel', {kernel: this});
562 this.events.trigger('status_dead.Kernel', {kernel: this});
553 }
563 }
554 };
564 };
555
565
556
566
557 // handle clear_output message
567 // handle clear_output message
558 Kernel.prototype._handle_clear_output = function (msg) {
568 Kernel.prototype._handle_clear_output = function (msg) {
559 var callbacks = this.get_callbacks_for_msg(msg.parent_header.msg_id);
569 var callbacks = this.get_callbacks_for_msg(msg.parent_header.msg_id);
560 if (!callbacks || !callbacks.iopub) {
570 if (!callbacks || !callbacks.iopub) {
561 return;
571 return;
562 }
572 }
563 var callback = callbacks.iopub.clear_output;
573 var callback = callbacks.iopub.clear_output;
564 if (callback) {
574 if (callback) {
565 callback(msg);
575 callback(msg);
566 }
576 }
567 };
577 };
568
578
569
579
570 // handle an output message (execute_result, display_data, etc.)
580 // handle an output message (execute_result, display_data, etc.)
571 Kernel.prototype._handle_output_message = function (msg) {
581 Kernel.prototype._handle_output_message = function (msg) {
572 var callbacks = this.get_callbacks_for_msg(msg.parent_header.msg_id);
582 var callbacks = this.get_callbacks_for_msg(msg.parent_header.msg_id);
573 if (!callbacks || !callbacks.iopub) {
583 if (!callbacks || !callbacks.iopub) {
574 return;
584 return;
575 }
585 }
576 var callback = callbacks.iopub.output;
586 var callback = callbacks.iopub.output;
577 if (callback) {
587 if (callback) {
578 callback(msg);
588 callback(msg);
579 }
589 }
580 };
590 };
581
591
582 // dispatch IOPub messages to respective handlers.
592 // dispatch IOPub messages to respective handlers.
583 // each message type should have a handler.
593 // each message type should have a handler.
584 Kernel.prototype._handle_iopub_message = function (e) {
594 Kernel.prototype._handle_iopub_message = function (e) {
585 var msg = $.parseJSON(e.data);
595 var msg = $.parseJSON(e.data);
586
596
587 var handler = this.get_iopub_handler(msg.header.msg_type);
597 var handler = this.get_iopub_handler(msg.header.msg_type);
588 if (handler !== undefined) {
598 if (handler !== undefined) {
589 handler(msg);
599 handler(msg);
590 }
600 }
591 };
601 };
592
602
593
603
594 Kernel.prototype._handle_input_request = function (e) {
604 Kernel.prototype._handle_input_request = function (e) {
595 var request = $.parseJSON(e.data);
605 var request = $.parseJSON(e.data);
596 var header = request.header;
606 var header = request.header;
597 var content = request.content;
607 var content = request.content;
598 var metadata = request.metadata;
608 var metadata = request.metadata;
599 var msg_type = header.msg_type;
609 var msg_type = header.msg_type;
600 if (msg_type !== 'input_request') {
610 if (msg_type !== 'input_request') {
601 console.log("Invalid input request!", request);
611 console.log("Invalid input request!", request);
602 return;
612 return;
603 }
613 }
604 var callbacks = this.get_callbacks_for_msg(request.parent_header.msg_id);
614 var callbacks = this.get_callbacks_for_msg(request.parent_header.msg_id);
605 if (callbacks) {
615 if (callbacks) {
606 if (callbacks.input) {
616 if (callbacks.input) {
607 callbacks.input(request);
617 callbacks.input(request);
608 }
618 }
609 }
619 }
610 };
620 };
611
621
612 // Backwards compatability.
622 // Backwards compatability.
613 IPython.Kernel = Kernel;
623 IPython.Kernel = Kernel;
614
624
615 return {'Kernel': Kernel};
625 return {'Kernel': Kernel};
616 });
626 });
@@ -1,125 +1,150 b''
1 // Copyright (c) IPython Development Team.
1 // Copyright (c) IPython Development Team.
2 // Distributed under the terms of the Modified BSD License.
2 // Distributed under the terms of the Modified BSD License.
3
3
4 define([
4 define([
5 'base/js/namespace',
5 'base/js/namespace',
6 'jquery',
6 'jquery',
7 'base/js/utils',
7 'base/js/utils',
8 'services/kernels/js/kernel',
8 'services/kernels/js/kernel',
9 ], function(IPython, $, utils, kernel) {
9 ], function(IPython, $, utils, kernel) {
10 "use strict";
10 "use strict";
11
11
12 var Session = function(options){
12 var Session = function(options){
13 this.kernel = null;
13 this.kernel = null;
14 this.id = null;
14 this.id = null;
15 this.notebook = options.notebook;
15 this.notebook = options.notebook;
16 this.events = options.notebook.events;
16 this.events = options.notebook.events;
17 this.name = options.notebook_name;
17 this.name = options.notebook_name;
18 this.path = options.notebook_path;
18 this.path = options.notebook_path;
19 this.kernel_name = options.kernel_name;
19 this.kernel_name = options.kernel_name;
20 this.base_url = options.base_url;
20 this.base_url = options.base_url;
21 this.ws_url = options.ws_url;
21 this.ws_url = options.ws_url;
22 };
22 };
23
23
24 Session.prototype.start = function(callback) {
24 Session.prototype.start = function (success, error) {
25 var that = this;
25 var that = this;
26 var model = {
26 var model = {
27 notebook : {
27 notebook : {
28 name : this.name,
28 name : this.name,
29 path : this.path
29 path : this.path
30 },
30 },
31 kernel : {
31 kernel : {
32 name : this.kernel_name
32 name : this.kernel_name
33 }
33 }
34 };
34 };
35 var settings = {
35 var settings = {
36 processData : false,
36 processData : false,
37 cache : false,
37 cache : false,
38 type : "POST",
38 type : "POST",
39 data: JSON.stringify(model),
39 data: JSON.stringify(model),
40 dataType : "json",
40 dataType : "json",
41 success : function (data, status, xhr) {
41 success : function (data, status, xhr) {
42 that._handle_start_success(data);
42 that._handle_start_success(data);
43 if (callback) {
43 if (success) {
44 callback(data, status, xhr);
44 success(data, status, xhr);
45 }
45 }
46 },
46 },
47 error : utils.log_ajax_error,
47 error : function (xhr, status, err) {
48 that._handle_start_failure(xhr, status, err);
49 if (error !== undefined) {
50 error(xhr, status, err);
51 }
52 utils.log_ajax_error(xhr, status, err);
53 }
48 };
54 };
49 var url = utils.url_join_encode(this.base_url, 'api/sessions');
55 var url = utils.url_join_encode(this.base_url, 'api/sessions');
50 $.ajax(url, settings);
56 $.ajax(url, settings);
51 };
57 };
52
58
53 Session.prototype.rename_notebook = function (name, path) {
59 Session.prototype.rename_notebook = function (name, path) {
54 this.name = name;
60 this.name = name;
55 this.path = path;
61 this.path = path;
56 var model = {
62 var model = {
57 notebook : {
63 notebook : {
58 name : this.name,
64 name : this.name,
59 path : this.path
65 path : this.path
60 }
66 }
61 };
67 };
62 var settings = {
68 var settings = {
63 processData : false,
69 processData : false,
64 cache : false,
70 cache : false,
65 type : "PATCH",
71 type : "PATCH",
66 data: JSON.stringify(model),
72 data: JSON.stringify(model),
67 dataType : "json",
73 dataType : "json",
68 error : utils.log_ajax_error,
74 error : utils.log_ajax_error,
69 };
75 };
70 var url = utils.url_join_encode(this.base_url, 'api/sessions', this.id);
76 var url = utils.url_join_encode(this.base_url, 'api/sessions', this.id);
71 $.ajax(url, settings);
77 $.ajax(url, settings);
72 };
78 };
73
79
74 Session.prototype.delete = function() {
80 Session.prototype.delete = function (success, error) {
75 var settings = {
81 var settings = {
76 processData : false,
82 processData : false,
77 cache : false,
83 cache : false,
78 type : "DELETE",
84 type : "DELETE",
79 dataType : "json",
85 dataType : "json",
80 error : utils.log_ajax_error,
86 success : success,
87 error : error || utils.log_ajax_error,
81 };
88 };
82 this.kernel.running = false;
89 if (this.kernel) {
90 this.kernel.running = false;
91 this.kernel.stop_channels();
92 }
83 var url = utils.url_join_encode(this.base_url, 'api/sessions', this.id);
93 var url = utils.url_join_encode(this.base_url, 'api/sessions', this.id);
84 $.ajax(url, settings);
94 $.ajax(url, settings);
85 };
95 };
86
96
87 // Kernel related things
97 // Kernel related things
88 /**
98 /**
89 * Create the Kernel object associated with this Session.
99 * Create the Kernel object associated with this Session.
90 *
100 *
91 * @method _handle_start_success
101 * @method _handle_start_success
92 */
102 */
93 Session.prototype._handle_start_success = function (data, status, xhr) {
103 Session.prototype._handle_start_success = function (data, status, xhr) {
94 this.id = data.id;
104 this.id = data.id;
95 // If we asked for 'python', the response will have 'python3' or 'python2'.
105 // If we asked for 'python', the response will have 'python3' or 'python2'.
96 this.kernel_name = data.kernel.name;
106 this.kernel_name = data.kernel.name;
97 this.events.trigger('started.Session', this);
107 this.events.trigger('started.Session', this);
98 var kernel_service_url = utils.url_path_join(this.base_url, "api/kernels");
108 var kernel_service_url = utils.url_path_join(this.base_url, "api/kernels");
99 this.kernel = new kernel.Kernel(kernel_service_url, this.ws_url, this.notebook, this.kernel_name);
109 this.kernel = new kernel.Kernel(kernel_service_url, this.ws_url, this.notebook, this.kernel_name);
100 this.kernel._kernel_started(data.kernel);
110 this.kernel._kernel_started(data.kernel);
101 };
111 };
112
113 Session.prototype._handle_start_failure = function (xhr, status, error) {
114 this.events.trigger('start_failed.Session', [this, xhr, status, error]);
115 this.events.trigger('status_dead.Kernel');
116 };
102
117
103 /**
118 /**
104 * Prompt the user to restart the IPython kernel.
119 * Prompt the user to restart the IPython kernel.
105 *
120 *
106 * @method restart_kernel
121 * @method restart_kernel
107 */
122 */
108 Session.prototype.restart_kernel = function () {
123 Session.prototype.restart_kernel = function () {
109 this.kernel.restart();
124 this.kernel.restart();
110 };
125 };
111
126
112 Session.prototype.interrupt_kernel = function() {
127 Session.prototype.interrupt_kernel = function() {
113 this.kernel.interrupt();
128 this.kernel.interrupt();
114 };
129 };
115
130
116
131
117 Session.prototype.kill_kernel = function() {
132 Session.prototype.kill_kernel = function() {
118 this.kernel.kill();
133 this.kernel.kill();
119 };
134 };
120
135
136 var SessionAlreadyStarting = function (message) {
137 this.name = "SessionAlreadyStarting";
138 this.message = (message || "");
139 };
140
141 SessionAlreadyStarting.prototype = Error.prototype;
142
121 // For backwards compatability.
143 // For backwards compatability.
122 IPython.Session = Session;
144 IPython.Session = Session;
123
145
124 return {'Session': Session};
146 return {
147 Session: Session,
148 SessionAlreadyStarting: SessionAlreadyStarting,
149 };
125 });
150 });
@@ -1,10554 +1,10586 b''
1 /*!
1 /*!
2 *
2 *
3 * Twitter Bootstrap
3 * Twitter Bootstrap
4 *
4 *
5 */
5 */
6 /*! normalize.css v3.0.0 | MIT License | git.io/normalize */
6 /*! normalize.css v3.0.0 | MIT License | git.io/normalize */
7 html {
7 html {
8 font-family: sans-serif;
8 font-family: sans-serif;
9 -ms-text-size-adjust: 100%;
9 -ms-text-size-adjust: 100%;
10 -webkit-text-size-adjust: 100%;
10 -webkit-text-size-adjust: 100%;
11 }
11 }
12 body {
12 body {
13 margin: 0;
13 margin: 0;
14 }
14 }
15 article,
15 article,
16 aside,
16 aside,
17 details,
17 details,
18 figcaption,
18 figcaption,
19 figure,
19 figure,
20 footer,
20 footer,
21 header,
21 header,
22 hgroup,
22 hgroup,
23 main,
23 main,
24 nav,
24 nav,
25 section,
25 section,
26 summary {
26 summary {
27 display: block;
27 display: block;
28 }
28 }
29 audio,
29 audio,
30 canvas,
30 canvas,
31 progress,
31 progress,
32 video {
32 video {
33 display: inline-block;
33 display: inline-block;
34 vertical-align: baseline;
34 vertical-align: baseline;
35 }
35 }
36 audio:not([controls]) {
36 audio:not([controls]) {
37 display: none;
37 display: none;
38 height: 0;
38 height: 0;
39 }
39 }
40 [hidden],
40 [hidden],
41 template {
41 template {
42 display: none;
42 display: none;
43 }
43 }
44 a {
44 a {
45 background: transparent;
45 background: transparent;
46 }
46 }
47 a:active,
47 a:active,
48 a:hover {
48 a:hover {
49 outline: 0;
49 outline: 0;
50 }
50 }
51 abbr[title] {
51 abbr[title] {
52 border-bottom: 1px dotted;
52 border-bottom: 1px dotted;
53 }
53 }
54 b,
54 b,
55 strong {
55 strong {
56 font-weight: bold;
56 font-weight: bold;
57 }
57 }
58 dfn {
58 dfn {
59 font-style: italic;
59 font-style: italic;
60 }
60 }
61 h1 {
61 h1 {
62 font-size: 2em;
62 font-size: 2em;
63 margin: 0.67em 0;
63 margin: 0.67em 0;
64 }
64 }
65 mark {
65 mark {
66 background: #ff0;
66 background: #ff0;
67 color: #000;
67 color: #000;
68 }
68 }
69 small {
69 small {
70 font-size: 80%;
70 font-size: 80%;
71 }
71 }
72 sub,
72 sub,
73 sup {
73 sup {
74 font-size: 75%;
74 font-size: 75%;
75 line-height: 0;
75 line-height: 0;
76 position: relative;
76 position: relative;
77 vertical-align: baseline;
77 vertical-align: baseline;
78 }
78 }
79 sup {
79 sup {
80 top: -0.5em;
80 top: -0.5em;
81 }
81 }
82 sub {
82 sub {
83 bottom: -0.25em;
83 bottom: -0.25em;
84 }
84 }
85 img {
85 img {
86 border: 0;
86 border: 0;
87 }
87 }
88 svg:not(:root) {
88 svg:not(:root) {
89 overflow: hidden;
89 overflow: hidden;
90 }
90 }
91 figure {
91 figure {
92 margin: 1em 40px;
92 margin: 1em 40px;
93 }
93 }
94 hr {
94 hr {
95 -moz-box-sizing: content-box;
95 -moz-box-sizing: content-box;
96 box-sizing: content-box;
96 box-sizing: content-box;
97 height: 0;
97 height: 0;
98 }
98 }
99 pre {
99 pre {
100 overflow: auto;
100 overflow: auto;
101 }
101 }
102 code,
102 code,
103 kbd,
103 kbd,
104 pre,
104 pre,
105 samp {
105 samp {
106 font-family: monospace, monospace;
106 font-family: monospace, monospace;
107 font-size: 1em;
107 font-size: 1em;
108 }
108 }
109 button,
109 button,
110 input,
110 input,
111 optgroup,
111 optgroup,
112 select,
112 select,
113 textarea {
113 textarea {
114 color: inherit;
114 color: inherit;
115 font: inherit;
115 font: inherit;
116 margin: 0;
116 margin: 0;
117 }
117 }
118 button {
118 button {
119 overflow: visible;
119 overflow: visible;
120 }
120 }
121 button,
121 button,
122 select {
122 select {
123 text-transform: none;
123 text-transform: none;
124 }
124 }
125 button,
125 button,
126 html input[type="button"],
126 html input[type="button"],
127 input[type="reset"],
127 input[type="reset"],
128 input[type="submit"] {
128 input[type="submit"] {
129 -webkit-appearance: button;
129 -webkit-appearance: button;
130 cursor: pointer;
130 cursor: pointer;
131 }
131 }
132 button[disabled],
132 button[disabled],
133 html input[disabled] {
133 html input[disabled] {
134 cursor: default;
134 cursor: default;
135 }
135 }
136 button::-moz-focus-inner,
136 button::-moz-focus-inner,
137 input::-moz-focus-inner {
137 input::-moz-focus-inner {
138 border: 0;
138 border: 0;
139 padding: 0;
139 padding: 0;
140 }
140 }
141 input {
141 input {
142 line-height: normal;
142 line-height: normal;
143 }
143 }
144 input[type="checkbox"],
144 input[type="checkbox"],
145 input[type="radio"] {
145 input[type="radio"] {
146 box-sizing: border-box;
146 box-sizing: border-box;
147 padding: 0;
147 padding: 0;
148 }
148 }
149 input[type="number"]::-webkit-inner-spin-button,
149 input[type="number"]::-webkit-inner-spin-button,
150 input[type="number"]::-webkit-outer-spin-button {
150 input[type="number"]::-webkit-outer-spin-button {
151 height: auto;
151 height: auto;
152 }
152 }
153 input[type="search"] {
153 input[type="search"] {
154 -webkit-appearance: textfield;
154 -webkit-appearance: textfield;
155 -moz-box-sizing: content-box;
155 -moz-box-sizing: content-box;
156 -webkit-box-sizing: content-box;
156 -webkit-box-sizing: content-box;
157 box-sizing: content-box;
157 box-sizing: content-box;
158 }
158 }
159 input[type="search"]::-webkit-search-cancel-button,
159 input[type="search"]::-webkit-search-cancel-button,
160 input[type="search"]::-webkit-search-decoration {
160 input[type="search"]::-webkit-search-decoration {
161 -webkit-appearance: none;
161 -webkit-appearance: none;
162 }
162 }
163 fieldset {
163 fieldset {
164 border: 1px solid #c0c0c0;
164 border: 1px solid #c0c0c0;
165 margin: 0 2px;
165 margin: 0 2px;
166 padding: 0.35em 0.625em 0.75em;
166 padding: 0.35em 0.625em 0.75em;
167 }
167 }
168 legend {
168 legend {
169 border: 0;
169 border: 0;
170 padding: 0;
170 padding: 0;
171 }
171 }
172 textarea {
172 textarea {
173 overflow: auto;
173 overflow: auto;
174 }
174 }
175 optgroup {
175 optgroup {
176 font-weight: bold;
176 font-weight: bold;
177 }
177 }
178 table {
178 table {
179 border-collapse: collapse;
179 border-collapse: collapse;
180 border-spacing: 0;
180 border-spacing: 0;
181 }
181 }
182 td,
182 td,
183 th {
183 th {
184 padding: 0;
184 padding: 0;
185 }
185 }
186 @media print {
186 @media print {
187 * {
187 * {
188 text-shadow: none !important;
188 text-shadow: none !important;
189 color: #000 !important;
189 color: #000 !important;
190 background: transparent !important;
190 background: transparent !important;
191 box-shadow: none !important;
191 box-shadow: none !important;
192 }
192 }
193 a,
193 a,
194 a:visited {
194 a:visited {
195 text-decoration: underline;
195 text-decoration: underline;
196 }
196 }
197 a[href]:after {
197 a[href]:after {
198 content: " (" attr(href) ")";
198 content: " (" attr(href) ")";
199 }
199 }
200 abbr[title]:after {
200 abbr[title]:after {
201 content: " (" attr(title) ")";
201 content: " (" attr(title) ")";
202 }
202 }
203 a[href^="javascript:"]:after,
203 a[href^="javascript:"]:after,
204 a[href^="#"]:after {
204 a[href^="#"]:after {
205 content: "";
205 content: "";
206 }
206 }
207 pre,
207 pre,
208 blockquote {
208 blockquote {
209 border: 1px solid #999;
209 border: 1px solid #999;
210 page-break-inside: avoid;
210 page-break-inside: avoid;
211 }
211 }
212 thead {
212 thead {
213 display: table-header-group;
213 display: table-header-group;
214 }
214 }
215 tr,
215 tr,
216 img {
216 img {
217 page-break-inside: avoid;
217 page-break-inside: avoid;
218 }
218 }
219 img {
219 img {
220 max-width: 100% !important;
220 max-width: 100% !important;
221 }
221 }
222 p,
222 p,
223 h2,
223 h2,
224 h3 {
224 h3 {
225 orphans: 3;
225 orphans: 3;
226 widows: 3;
226 widows: 3;
227 }
227 }
228 h2,
228 h2,
229 h3 {
229 h3 {
230 page-break-after: avoid;
230 page-break-after: avoid;
231 }
231 }
232 select {
232 select {
233 background: #fff !important;
233 background: #fff !important;
234 }
234 }
235 .navbar {
235 .navbar {
236 display: none;
236 display: none;
237 }
237 }
238 .table td,
238 .table td,
239 .table th {
239 .table th {
240 background-color: #fff !important;
240 background-color: #fff !important;
241 }
241 }
242 .btn > .caret,
242 .btn > .caret,
243 .dropup > .btn > .caret {
243 .dropup > .btn > .caret {
244 border-top-color: #000 !important;
244 border-top-color: #000 !important;
245 }
245 }
246 .label {
246 .label {
247 border: 1px solid #000;
247 border: 1px solid #000;
248 }
248 }
249 .table {
249 .table {
250 border-collapse: collapse !important;
250 border-collapse: collapse !important;
251 }
251 }
252 .table-bordered th,
252 .table-bordered th,
253 .table-bordered td {
253 .table-bordered td {
254 border: 1px solid #ddd !important;
254 border: 1px solid #ddd !important;
255 }
255 }
256 }
256 }
257 * {
257 * {
258 -webkit-box-sizing: border-box;
258 -webkit-box-sizing: border-box;
259 -moz-box-sizing: border-box;
259 -moz-box-sizing: border-box;
260 box-sizing: border-box;
260 box-sizing: border-box;
261 }
261 }
262 *:before,
262 *:before,
263 *:after {
263 *:after {
264 -webkit-box-sizing: border-box;
264 -webkit-box-sizing: border-box;
265 -moz-box-sizing: border-box;
265 -moz-box-sizing: border-box;
266 box-sizing: border-box;
266 box-sizing: border-box;
267 }
267 }
268 html {
268 html {
269 font-size: 62.5%;
269 font-size: 62.5%;
270 -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
270 -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
271 }
271 }
272 body {
272 body {
273 font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
273 font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
274 font-size: 13px;
274 font-size: 13px;
275 line-height: 1.42857143;
275 line-height: 1.42857143;
276 color: #000000;
276 color: #000000;
277 background-color: #ffffff;
277 background-color: #ffffff;
278 }
278 }
279 input,
279 input,
280 button,
280 button,
281 select,
281 select,
282 textarea {
282 textarea {
283 font-family: inherit;
283 font-family: inherit;
284 font-size: inherit;
284 font-size: inherit;
285 line-height: inherit;
285 line-height: inherit;
286 }
286 }
287 a {
287 a {
288 color: #428bca;
288 color: #428bca;
289 text-decoration: none;
289 text-decoration: none;
290 }
290 }
291 a:hover,
291 a:hover,
292 a:focus {
292 a:focus {
293 color: #2a6496;
293 color: #2a6496;
294 text-decoration: underline;
294 text-decoration: underline;
295 }
295 }
296 a:focus {
296 a:focus {
297 outline: thin dotted;
297 outline: thin dotted;
298 outline: 5px auto -webkit-focus-ring-color;
298 outline: 5px auto -webkit-focus-ring-color;
299 outline-offset: -2px;
299 outline-offset: -2px;
300 }
300 }
301 figure {
301 figure {
302 margin: 0;
302 margin: 0;
303 }
303 }
304 img {
304 img {
305 vertical-align: middle;
305 vertical-align: middle;
306 }
306 }
307 .img-responsive,
307 .img-responsive,
308 .thumbnail > img,
308 .thumbnail > img,
309 .thumbnail a > img,
309 .thumbnail a > img,
310 .carousel-inner > .item > img,
310 .carousel-inner > .item > img,
311 .carousel-inner > .item > a > img {
311 .carousel-inner > .item > a > img {
312 display: block;
312 display: block;
313 max-width: 100%;
313 max-width: 100%;
314 height: auto;
314 height: auto;
315 }
315 }
316 .img-rounded {
316 .img-rounded {
317 border-radius: 6px;
317 border-radius: 6px;
318 }
318 }
319 .img-thumbnail {
319 .img-thumbnail {
320 padding: 4px;
320 padding: 4px;
321 line-height: 1.42857143;
321 line-height: 1.42857143;
322 background-color: #ffffff;
322 background-color: #ffffff;
323 border: 1px solid #dddddd;
323 border: 1px solid #dddddd;
324 border-radius: 4px;
324 border-radius: 4px;
325 -webkit-transition: all 0.2s ease-in-out;
325 -webkit-transition: all 0.2s ease-in-out;
326 transition: all 0.2s ease-in-out;
326 transition: all 0.2s ease-in-out;
327 display: inline-block;
327 display: inline-block;
328 max-width: 100%;
328 max-width: 100%;
329 height: auto;
329 height: auto;
330 }
330 }
331 .img-circle {
331 .img-circle {
332 border-radius: 50%;
332 border-radius: 50%;
333 }
333 }
334 hr {
334 hr {
335 margin-top: 18px;
335 margin-top: 18px;
336 margin-bottom: 18px;
336 margin-bottom: 18px;
337 border: 0;
337 border: 0;
338 border-top: 1px solid #eeeeee;
338 border-top: 1px solid #eeeeee;
339 }
339 }
340 .sr-only {
340 .sr-only {
341 position: absolute;
341 position: absolute;
342 width: 1px;
342 width: 1px;
343 height: 1px;
343 height: 1px;
344 margin: -1px;
344 margin: -1px;
345 padding: 0;
345 padding: 0;
346 overflow: hidden;
346 overflow: hidden;
347 clip: rect(0, 0, 0, 0);
347 clip: rect(0, 0, 0, 0);
348 border: 0;
348 border: 0;
349 }
349 }
350 h1,
350 h1,
351 h2,
351 h2,
352 h3,
352 h3,
353 h4,
353 h4,
354 h5,
354 h5,
355 h6,
355 h6,
356 .h1,
356 .h1,
357 .h2,
357 .h2,
358 .h3,
358 .h3,
359 .h4,
359 .h4,
360 .h5,
360 .h5,
361 .h6 {
361 .h6 {
362 font-family: inherit;
362 font-family: inherit;
363 font-weight: 500;
363 font-weight: 500;
364 line-height: 1.1;
364 line-height: 1.1;
365 color: inherit;
365 color: inherit;
366 }
366 }
367 h1 small,
367 h1 small,
368 h2 small,
368 h2 small,
369 h3 small,
369 h3 small,
370 h4 small,
370 h4 small,
371 h5 small,
371 h5 small,
372 h6 small,
372 h6 small,
373 .h1 small,
373 .h1 small,
374 .h2 small,
374 .h2 small,
375 .h3 small,
375 .h3 small,
376 .h4 small,
376 .h4 small,
377 .h5 small,
377 .h5 small,
378 .h6 small,
378 .h6 small,
379 h1 .small,
379 h1 .small,
380 h2 .small,
380 h2 .small,
381 h3 .small,
381 h3 .small,
382 h4 .small,
382 h4 .small,
383 h5 .small,
383 h5 .small,
384 h6 .small,
384 h6 .small,
385 .h1 .small,
385 .h1 .small,
386 .h2 .small,
386 .h2 .small,
387 .h3 .small,
387 .h3 .small,
388 .h4 .small,
388 .h4 .small,
389 .h5 .small,
389 .h5 .small,
390 .h6 .small {
390 .h6 .small {
391 font-weight: normal;
391 font-weight: normal;
392 line-height: 1;
392 line-height: 1;
393 color: #999999;
393 color: #999999;
394 }
394 }
395 h1,
395 h1,
396 .h1,
396 .h1,
397 h2,
397 h2,
398 .h2,
398 .h2,
399 h3,
399 h3,
400 .h3 {
400 .h3 {
401 margin-top: 18px;
401 margin-top: 18px;
402 margin-bottom: 9px;
402 margin-bottom: 9px;
403 }
403 }
404 h1 small,
404 h1 small,
405 .h1 small,
405 .h1 small,
406 h2 small,
406 h2 small,
407 .h2 small,
407 .h2 small,
408 h3 small,
408 h3 small,
409 .h3 small,
409 .h3 small,
410 h1 .small,
410 h1 .small,
411 .h1 .small,
411 .h1 .small,
412 h2 .small,
412 h2 .small,
413 .h2 .small,
413 .h2 .small,
414 h3 .small,
414 h3 .small,
415 .h3 .small {
415 .h3 .small {
416 font-size: 65%;
416 font-size: 65%;
417 }
417 }
418 h4,
418 h4,
419 .h4,
419 .h4,
420 h5,
420 h5,
421 .h5,
421 .h5,
422 h6,
422 h6,
423 .h6 {
423 .h6 {
424 margin-top: 9px;
424 margin-top: 9px;
425 margin-bottom: 9px;
425 margin-bottom: 9px;
426 }
426 }
427 h4 small,
427 h4 small,
428 .h4 small,
428 .h4 small,
429 h5 small,
429 h5 small,
430 .h5 small,
430 .h5 small,
431 h6 small,
431 h6 small,
432 .h6 small,
432 .h6 small,
433 h4 .small,
433 h4 .small,
434 .h4 .small,
434 .h4 .small,
435 h5 .small,
435 h5 .small,
436 .h5 .small,
436 .h5 .small,
437 h6 .small,
437 h6 .small,
438 .h6 .small {
438 .h6 .small {
439 font-size: 75%;
439 font-size: 75%;
440 }
440 }
441 h1,
441 h1,
442 .h1 {
442 .h1 {
443 font-size: 33px;
443 font-size: 33px;
444 }
444 }
445 h2,
445 h2,
446 .h2 {
446 .h2 {
447 font-size: 27px;
447 font-size: 27px;
448 }
448 }
449 h3,
449 h3,
450 .h3 {
450 .h3 {
451 font-size: 23px;
451 font-size: 23px;
452 }
452 }
453 h4,
453 h4,
454 .h4 {
454 .h4 {
455 font-size: 17px;
455 font-size: 17px;
456 }
456 }
457 h5,
457 h5,
458 .h5 {
458 .h5 {
459 font-size: 13px;
459 font-size: 13px;
460 }
460 }
461 h6,
461 h6,
462 .h6 {
462 .h6 {
463 font-size: 12px;
463 font-size: 12px;
464 }
464 }
465 p {
465 p {
466 margin: 0 0 9px;
466 margin: 0 0 9px;
467 }
467 }
468 .lead {
468 .lead {
469 margin-bottom: 18px;
469 margin-bottom: 18px;
470 font-size: 14px;
470 font-size: 14px;
471 font-weight: 200;
471 font-weight: 200;
472 line-height: 1.4;
472 line-height: 1.4;
473 }
473 }
474 @media (min-width: 768px) {
474 @media (min-width: 768px) {
475 .lead {
475 .lead {
476 font-size: 19.5px;
476 font-size: 19.5px;
477 }
477 }
478 }
478 }
479 small,
479 small,
480 .small {
480 .small {
481 font-size: 85%;
481 font-size: 85%;
482 }
482 }
483 cite {
483 cite {
484 font-style: normal;
484 font-style: normal;
485 }
485 }
486 .text-left {
486 .text-left {
487 text-align: left;
487 text-align: left;
488 }
488 }
489 .text-right {
489 .text-right {
490 text-align: right;
490 text-align: right;
491 }
491 }
492 .text-center {
492 .text-center {
493 text-align: center;
493 text-align: center;
494 }
494 }
495 .text-justify {
495 .text-justify {
496 text-align: justify;
496 text-align: justify;
497 }
497 }
498 .text-muted {
498 .text-muted {
499 color: #999999;
499 color: #999999;
500 }
500 }
501 .text-primary {
501 .text-primary {
502 color: #428bca;
502 color: #428bca;
503 }
503 }
504 a.text-primary:hover {
504 a.text-primary:hover {
505 color: #3071a9;
505 color: #3071a9;
506 }
506 }
507 .text-success {
507 .text-success {
508 color: #3c763d;
508 color: #3c763d;
509 }
509 }
510 a.text-success:hover {
510 a.text-success:hover {
511 color: #2b542c;
511 color: #2b542c;
512 }
512 }
513 .text-info {
513 .text-info {
514 color: #31708f;
514 color: #31708f;
515 }
515 }
516 a.text-info:hover {
516 a.text-info:hover {
517 color: #245269;
517 color: #245269;
518 }
518 }
519 .text-warning {
519 .text-warning {
520 color: #8a6d3b;
520 color: #8a6d3b;
521 }
521 }
522 a.text-warning:hover {
522 a.text-warning:hover {
523 color: #66512c;
523 color: #66512c;
524 }
524 }
525 .text-danger {
525 .text-danger {
526 color: #a94442;
526 color: #a94442;
527 }
527 }
528 a.text-danger:hover {
528 a.text-danger:hover {
529 color: #843534;
529 color: #843534;
530 }
530 }
531 .bg-primary {
531 .bg-primary {
532 color: #fff;
532 color: #fff;
533 background-color: #428bca;
533 background-color: #428bca;
534 }
534 }
535 a.bg-primary:hover {
535 a.bg-primary:hover {
536 background-color: #3071a9;
536 background-color: #3071a9;
537 }
537 }
538 .bg-success {
538 .bg-success {
539 background-color: #dff0d8;
539 background-color: #dff0d8;
540 }
540 }
541 a.bg-success:hover {
541 a.bg-success:hover {
542 background-color: #c1e2b3;
542 background-color: #c1e2b3;
543 }
543 }
544 .bg-info {
544 .bg-info {
545 background-color: #d9edf7;
545 background-color: #d9edf7;
546 }
546 }
547 a.bg-info:hover {
547 a.bg-info:hover {
548 background-color: #afd9ee;
548 background-color: #afd9ee;
549 }
549 }
550 .bg-warning {
550 .bg-warning {
551 background-color: #fcf8e3;
551 background-color: #fcf8e3;
552 }
552 }
553 a.bg-warning:hover {
553 a.bg-warning:hover {
554 background-color: #f7ecb5;
554 background-color: #f7ecb5;
555 }
555 }
556 .bg-danger {
556 .bg-danger {
557 background-color: #f2dede;
557 background-color: #f2dede;
558 }
558 }
559 a.bg-danger:hover {
559 a.bg-danger:hover {
560 background-color: #e4b9b9;
560 background-color: #e4b9b9;
561 }
561 }
562 .page-header {
562 .page-header {
563 padding-bottom: 8px;
563 padding-bottom: 8px;
564 margin: 36px 0 18px;
564 margin: 36px 0 18px;
565 border-bottom: 1px solid #eeeeee;
565 border-bottom: 1px solid #eeeeee;
566 }
566 }
567 ul,
567 ul,
568 ol {
568 ol {
569 margin-top: 0;
569 margin-top: 0;
570 margin-bottom: 9px;
570 margin-bottom: 9px;
571 }
571 }
572 ul ul,
572 ul ul,
573 ol ul,
573 ol ul,
574 ul ol,
574 ul ol,
575 ol ol {
575 ol ol {
576 margin-bottom: 0;
576 margin-bottom: 0;
577 }
577 }
578 .list-unstyled {
578 .list-unstyled {
579 padding-left: 0;
579 padding-left: 0;
580 list-style: none;
580 list-style: none;
581 }
581 }
582 .list-inline {
582 .list-inline {
583 padding-left: 0;
583 padding-left: 0;
584 list-style: none;
584 list-style: none;
585 margin-left: -5px;
585 margin-left: -5px;
586 }
586 }
587 .list-inline > li {
587 .list-inline > li {
588 display: inline-block;
588 display: inline-block;
589 padding-left: 5px;
589 padding-left: 5px;
590 padding-right: 5px;
590 padding-right: 5px;
591 }
591 }
592 dl {
592 dl {
593 margin-top: 0;
593 margin-top: 0;
594 margin-bottom: 18px;
594 margin-bottom: 18px;
595 }
595 }
596 dt,
596 dt,
597 dd {
597 dd {
598 line-height: 1.42857143;
598 line-height: 1.42857143;
599 }
599 }
600 dt {
600 dt {
601 font-weight: bold;
601 font-weight: bold;
602 }
602 }
603 dd {
603 dd {
604 margin-left: 0;
604 margin-left: 0;
605 }
605 }
606 @media (min-width: 768px) {
606 @media (min-width: 768px) {
607 .dl-horizontal dt {
607 .dl-horizontal dt {
608 float: left;
608 float: left;
609 width: 160px;
609 width: 160px;
610 clear: left;
610 clear: left;
611 text-align: right;
611 text-align: right;
612 overflow: hidden;
612 overflow: hidden;
613 text-overflow: ellipsis;
613 text-overflow: ellipsis;
614 white-space: nowrap;
614 white-space: nowrap;
615 }
615 }
616 .dl-horizontal dd {
616 .dl-horizontal dd {
617 margin-left: 180px;
617 margin-left: 180px;
618 }
618 }
619 }
619 }
620 abbr[title],
620 abbr[title],
621 abbr[data-original-title] {
621 abbr[data-original-title] {
622 cursor: help;
622 cursor: help;
623 border-bottom: 1px dotted #999999;
623 border-bottom: 1px dotted #999999;
624 }
624 }
625 .initialism {
625 .initialism {
626 font-size: 90%;
626 font-size: 90%;
627 text-transform: uppercase;
627 text-transform: uppercase;
628 }
628 }
629 blockquote {
629 blockquote {
630 padding: 9px 18px;
630 padding: 9px 18px;
631 margin: 0 0 18px;
631 margin: 0 0 18px;
632 font-size: inherit;
632 font-size: inherit;
633 border-left: 5px solid #eeeeee;
633 border-left: 5px solid #eeeeee;
634 }
634 }
635 blockquote p:last-child,
635 blockquote p:last-child,
636 blockquote ul:last-child,
636 blockquote ul:last-child,
637 blockquote ol:last-child {
637 blockquote ol:last-child {
638 margin-bottom: 0;
638 margin-bottom: 0;
639 }
639 }
640 blockquote footer,
640 blockquote footer,
641 blockquote small,
641 blockquote small,
642 blockquote .small {
642 blockquote .small {
643 display: block;
643 display: block;
644 font-size: 80%;
644 font-size: 80%;
645 line-height: 1.42857143;
645 line-height: 1.42857143;
646 color: #999999;
646 color: #999999;
647 }
647 }
648 blockquote footer:before,
648 blockquote footer:before,
649 blockquote small:before,
649 blockquote small:before,
650 blockquote .small:before {
650 blockquote .small:before {
651 content: '\2014 \00A0';
651 content: '\2014 \00A0';
652 }
652 }
653 .blockquote-reverse,
653 .blockquote-reverse,
654 blockquote.pull-right {
654 blockquote.pull-right {
655 padding-right: 15px;
655 padding-right: 15px;
656 padding-left: 0;
656 padding-left: 0;
657 border-right: 5px solid #eeeeee;
657 border-right: 5px solid #eeeeee;
658 border-left: 0;
658 border-left: 0;
659 text-align: right;
659 text-align: right;
660 }
660 }
661 .blockquote-reverse footer:before,
661 .blockquote-reverse footer:before,
662 blockquote.pull-right footer:before,
662 blockquote.pull-right footer:before,
663 .blockquote-reverse small:before,
663 .blockquote-reverse small:before,
664 blockquote.pull-right small:before,
664 blockquote.pull-right small:before,
665 .blockquote-reverse .small:before,
665 .blockquote-reverse .small:before,
666 blockquote.pull-right .small:before {
666 blockquote.pull-right .small:before {
667 content: '';
667 content: '';
668 }
668 }
669 .blockquote-reverse footer:after,
669 .blockquote-reverse footer:after,
670 blockquote.pull-right footer:after,
670 blockquote.pull-right footer:after,
671 .blockquote-reverse small:after,
671 .blockquote-reverse small:after,
672 blockquote.pull-right small:after,
672 blockquote.pull-right small:after,
673 .blockquote-reverse .small:after,
673 .blockquote-reverse .small:after,
674 blockquote.pull-right .small:after {
674 blockquote.pull-right .small:after {
675 content: '\00A0 \2014';
675 content: '\00A0 \2014';
676 }
676 }
677 blockquote:before,
677 blockquote:before,
678 blockquote:after {
678 blockquote:after {
679 content: "";
679 content: "";
680 }
680 }
681 address {
681 address {
682 margin-bottom: 18px;
682 margin-bottom: 18px;
683 font-style: normal;
683 font-style: normal;
684 line-height: 1.42857143;
684 line-height: 1.42857143;
685 }
685 }
686 code,
686 code,
687 kbd,
687 kbd,
688 pre,
688 pre,
689 samp {
689 samp {
690 font-family: monospace;
690 font-family: monospace;
691 }
691 }
692 code {
692 code {
693 padding: 2px 4px;
693 padding: 2px 4px;
694 font-size: 90%;
694 font-size: 90%;
695 color: #c7254e;
695 color: #c7254e;
696 background-color: #f9f2f4;
696 background-color: #f9f2f4;
697 white-space: nowrap;
697 white-space: nowrap;
698 border-radius: 4px;
698 border-radius: 4px;
699 }
699 }
700 kbd {
700 kbd {
701 padding: 2px 4px;
701 padding: 2px 4px;
702 font-size: 90%;
702 font-size: 90%;
703 color: #ffffff;
703 color: #ffffff;
704 background-color: #333333;
704 background-color: #333333;
705 border-radius: 3px;
705 border-radius: 3px;
706 box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);
706 box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);
707 }
707 }
708 pre {
708 pre {
709 display: block;
709 display: block;
710 padding: 8.5px;
710 padding: 8.5px;
711 margin: 0 0 9px;
711 margin: 0 0 9px;
712 font-size: 12px;
712 font-size: 12px;
713 line-height: 1.42857143;
713 line-height: 1.42857143;
714 word-break: break-all;
714 word-break: break-all;
715 word-wrap: break-word;
715 word-wrap: break-word;
716 color: #333333;
716 color: #333333;
717 background-color: #f5f5f5;
717 background-color: #f5f5f5;
718 border: 1px solid #cccccc;
718 border: 1px solid #cccccc;
719 border-radius: 4px;
719 border-radius: 4px;
720 }
720 }
721 pre code {
721 pre code {
722 padding: 0;
722 padding: 0;
723 font-size: inherit;
723 font-size: inherit;
724 color: inherit;
724 color: inherit;
725 white-space: pre-wrap;
725 white-space: pre-wrap;
726 background-color: transparent;
726 background-color: transparent;
727 border-radius: 0;
727 border-radius: 0;
728 }
728 }
729 .pre-scrollable {
729 .pre-scrollable {
730 max-height: 340px;
730 max-height: 340px;
731 overflow-y: scroll;
731 overflow-y: scroll;
732 }
732 }
733 .container {
733 .container {
734 margin-right: auto;
734 margin-right: auto;
735 margin-left: auto;
735 margin-left: auto;
736 padding-left: 15px;
736 padding-left: 15px;
737 padding-right: 15px;
737 padding-right: 15px;
738 }
738 }
739 @media (min-width: 768px) {
739 @media (min-width: 768px) {
740 .container {
740 .container {
741 width: 750px;
741 width: 750px;
742 }
742 }
743 }
743 }
744 @media (min-width: 992px) {
744 @media (min-width: 992px) {
745 .container {
745 .container {
746 width: 970px;
746 width: 970px;
747 }
747 }
748 }
748 }
749 @media (min-width: 1200px) {
749 @media (min-width: 1200px) {
750 .container {
750 .container {
751 width: 1170px;
751 width: 1170px;
752 }
752 }
753 }
753 }
754 .container-fluid {
754 .container-fluid {
755 margin-right: auto;
755 margin-right: auto;
756 margin-left: auto;
756 margin-left: auto;
757 padding-left: 15px;
757 padding-left: 15px;
758 padding-right: 15px;
758 padding-right: 15px;
759 }
759 }
760 .row {
760 .row {
761 margin-left: -15px;
761 margin-left: -15px;
762 margin-right: -15px;
762 margin-right: -15px;
763 }
763 }
764 .col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
764 .col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
765 position: relative;
765 position: relative;
766 min-height: 1px;
766 min-height: 1px;
767 padding-left: 15px;
767 padding-left: 15px;
768 padding-right: 15px;
768 padding-right: 15px;
769 }
769 }
770 .col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
770 .col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
771 float: left;
771 float: left;
772 }
772 }
773 .col-xs-12 {
773 .col-xs-12 {
774 width: 100%;
774 width: 100%;
775 }
775 }
776 .col-xs-11 {
776 .col-xs-11 {
777 width: 91.66666667%;
777 width: 91.66666667%;
778 }
778 }
779 .col-xs-10 {
779 .col-xs-10 {
780 width: 83.33333333%;
780 width: 83.33333333%;
781 }
781 }
782 .col-xs-9 {
782 .col-xs-9 {
783 width: 75%;
783 width: 75%;
784 }
784 }
785 .col-xs-8 {
785 .col-xs-8 {
786 width: 66.66666667%;
786 width: 66.66666667%;
787 }
787 }
788 .col-xs-7 {
788 .col-xs-7 {
789 width: 58.33333333%;
789 width: 58.33333333%;
790 }
790 }
791 .col-xs-6 {
791 .col-xs-6 {
792 width: 50%;
792 width: 50%;
793 }
793 }
794 .col-xs-5 {
794 .col-xs-5 {
795 width: 41.66666667%;
795 width: 41.66666667%;
796 }
796 }
797 .col-xs-4 {
797 .col-xs-4 {
798 width: 33.33333333%;
798 width: 33.33333333%;
799 }
799 }
800 .col-xs-3 {
800 .col-xs-3 {
801 width: 25%;
801 width: 25%;
802 }
802 }
803 .col-xs-2 {
803 .col-xs-2 {
804 width: 16.66666667%;
804 width: 16.66666667%;
805 }
805 }
806 .col-xs-1 {
806 .col-xs-1 {
807 width: 8.33333333%;
807 width: 8.33333333%;
808 }
808 }
809 .col-xs-pull-12 {
809 .col-xs-pull-12 {
810 right: 100%;
810 right: 100%;
811 }
811 }
812 .col-xs-pull-11 {
812 .col-xs-pull-11 {
813 right: 91.66666667%;
813 right: 91.66666667%;
814 }
814 }
815 .col-xs-pull-10 {
815 .col-xs-pull-10 {
816 right: 83.33333333%;
816 right: 83.33333333%;
817 }
817 }
818 .col-xs-pull-9 {
818 .col-xs-pull-9 {
819 right: 75%;
819 right: 75%;
820 }
820 }
821 .col-xs-pull-8 {
821 .col-xs-pull-8 {
822 right: 66.66666667%;
822 right: 66.66666667%;
823 }
823 }
824 .col-xs-pull-7 {
824 .col-xs-pull-7 {
825 right: 58.33333333%;
825 right: 58.33333333%;
826 }
826 }
827 .col-xs-pull-6 {
827 .col-xs-pull-6 {
828 right: 50%;
828 right: 50%;
829 }
829 }
830 .col-xs-pull-5 {
830 .col-xs-pull-5 {
831 right: 41.66666667%;
831 right: 41.66666667%;
832 }
832 }
833 .col-xs-pull-4 {
833 .col-xs-pull-4 {
834 right: 33.33333333%;
834 right: 33.33333333%;
835 }
835 }
836 .col-xs-pull-3 {
836 .col-xs-pull-3 {
837 right: 25%;
837 right: 25%;
838 }
838 }
839 .col-xs-pull-2 {
839 .col-xs-pull-2 {
840 right: 16.66666667%;
840 right: 16.66666667%;
841 }
841 }
842 .col-xs-pull-1 {
842 .col-xs-pull-1 {
843 right: 8.33333333%;
843 right: 8.33333333%;
844 }
844 }
845 .col-xs-pull-0 {
845 .col-xs-pull-0 {
846 right: 0%;
846 right: 0%;
847 }
847 }
848 .col-xs-push-12 {
848 .col-xs-push-12 {
849 left: 100%;
849 left: 100%;
850 }
850 }
851 .col-xs-push-11 {
851 .col-xs-push-11 {
852 left: 91.66666667%;
852 left: 91.66666667%;
853 }
853 }
854 .col-xs-push-10 {
854 .col-xs-push-10 {
855 left: 83.33333333%;
855 left: 83.33333333%;
856 }
856 }
857 .col-xs-push-9 {
857 .col-xs-push-9 {
858 left: 75%;
858 left: 75%;
859 }
859 }
860 .col-xs-push-8 {
860 .col-xs-push-8 {
861 left: 66.66666667%;
861 left: 66.66666667%;
862 }
862 }
863 .col-xs-push-7 {
863 .col-xs-push-7 {
864 left: 58.33333333%;
864 left: 58.33333333%;
865 }
865 }
866 .col-xs-push-6 {
866 .col-xs-push-6 {
867 left: 50%;
867 left: 50%;
868 }
868 }
869 .col-xs-push-5 {
869 .col-xs-push-5 {
870 left: 41.66666667%;
870 left: 41.66666667%;
871 }
871 }
872 .col-xs-push-4 {
872 .col-xs-push-4 {
873 left: 33.33333333%;
873 left: 33.33333333%;
874 }
874 }
875 .col-xs-push-3 {
875 .col-xs-push-3 {
876 left: 25%;
876 left: 25%;
877 }
877 }
878 .col-xs-push-2 {
878 .col-xs-push-2 {
879 left: 16.66666667%;
879 left: 16.66666667%;
880 }
880 }
881 .col-xs-push-1 {
881 .col-xs-push-1 {
882 left: 8.33333333%;
882 left: 8.33333333%;
883 }
883 }
884 .col-xs-push-0 {
884 .col-xs-push-0 {
885 left: 0%;
885 left: 0%;
886 }
886 }
887 .col-xs-offset-12 {
887 .col-xs-offset-12 {
888 margin-left: 100%;
888 margin-left: 100%;
889 }
889 }
890 .col-xs-offset-11 {
890 .col-xs-offset-11 {
891 margin-left: 91.66666667%;
891 margin-left: 91.66666667%;
892 }
892 }
893 .col-xs-offset-10 {
893 .col-xs-offset-10 {
894 margin-left: 83.33333333%;
894 margin-left: 83.33333333%;
895 }
895 }
896 .col-xs-offset-9 {
896 .col-xs-offset-9 {
897 margin-left: 75%;
897 margin-left: 75%;
898 }
898 }
899 .col-xs-offset-8 {
899 .col-xs-offset-8 {
900 margin-left: 66.66666667%;
900 margin-left: 66.66666667%;
901 }
901 }
902 .col-xs-offset-7 {
902 .col-xs-offset-7 {
903 margin-left: 58.33333333%;
903 margin-left: 58.33333333%;
904 }
904 }
905 .col-xs-offset-6 {
905 .col-xs-offset-6 {
906 margin-left: 50%;
906 margin-left: 50%;
907 }
907 }
908 .col-xs-offset-5 {
908 .col-xs-offset-5 {
909 margin-left: 41.66666667%;
909 margin-left: 41.66666667%;
910 }
910 }
911 .col-xs-offset-4 {
911 .col-xs-offset-4 {
912 margin-left: 33.33333333%;
912 margin-left: 33.33333333%;
913 }
913 }
914 .col-xs-offset-3 {
914 .col-xs-offset-3 {
915 margin-left: 25%;
915 margin-left: 25%;
916 }
916 }
917 .col-xs-offset-2 {
917 .col-xs-offset-2 {
918 margin-left: 16.66666667%;
918 margin-left: 16.66666667%;
919 }
919 }
920 .col-xs-offset-1 {
920 .col-xs-offset-1 {
921 margin-left: 8.33333333%;
921 margin-left: 8.33333333%;
922 }
922 }
923 .col-xs-offset-0 {
923 .col-xs-offset-0 {
924 margin-left: 0%;
924 margin-left: 0%;
925 }
925 }
926 @media (min-width: 768px) {
926 @media (min-width: 768px) {
927 .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
927 .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
928 float: left;
928 float: left;
929 }
929 }
930 .col-sm-12 {
930 .col-sm-12 {
931 width: 100%;
931 width: 100%;
932 }
932 }
933 .col-sm-11 {
933 .col-sm-11 {
934 width: 91.66666667%;
934 width: 91.66666667%;
935 }
935 }
936 .col-sm-10 {
936 .col-sm-10 {
937 width: 83.33333333%;
937 width: 83.33333333%;
938 }
938 }
939 .col-sm-9 {
939 .col-sm-9 {
940 width: 75%;
940 width: 75%;
941 }
941 }
942 .col-sm-8 {
942 .col-sm-8 {
943 width: 66.66666667%;
943 width: 66.66666667%;
944 }
944 }
945 .col-sm-7 {
945 .col-sm-7 {
946 width: 58.33333333%;
946 width: 58.33333333%;
947 }
947 }
948 .col-sm-6 {
948 .col-sm-6 {
949 width: 50%;
949 width: 50%;
950 }
950 }
951 .col-sm-5 {
951 .col-sm-5 {
952 width: 41.66666667%;
952 width: 41.66666667%;
953 }
953 }
954 .col-sm-4 {
954 .col-sm-4 {
955 width: 33.33333333%;
955 width: 33.33333333%;
956 }
956 }
957 .col-sm-3 {
957 .col-sm-3 {
958 width: 25%;
958 width: 25%;
959 }
959 }
960 .col-sm-2 {
960 .col-sm-2 {
961 width: 16.66666667%;
961 width: 16.66666667%;
962 }
962 }
963 .col-sm-1 {
963 .col-sm-1 {
964 width: 8.33333333%;
964 width: 8.33333333%;
965 }
965 }
966 .col-sm-pull-12 {
966 .col-sm-pull-12 {
967 right: 100%;
967 right: 100%;
968 }
968 }
969 .col-sm-pull-11 {
969 .col-sm-pull-11 {
970 right: 91.66666667%;
970 right: 91.66666667%;
971 }
971 }
972 .col-sm-pull-10 {
972 .col-sm-pull-10 {
973 right: 83.33333333%;
973 right: 83.33333333%;
974 }
974 }
975 .col-sm-pull-9 {
975 .col-sm-pull-9 {
976 right: 75%;
976 right: 75%;
977 }
977 }
978 .col-sm-pull-8 {
978 .col-sm-pull-8 {
979 right: 66.66666667%;
979 right: 66.66666667%;
980 }
980 }
981 .col-sm-pull-7 {
981 .col-sm-pull-7 {
982 right: 58.33333333%;
982 right: 58.33333333%;
983 }
983 }
984 .col-sm-pull-6 {
984 .col-sm-pull-6 {
985 right: 50%;
985 right: 50%;
986 }
986 }
987 .col-sm-pull-5 {
987 .col-sm-pull-5 {
988 right: 41.66666667%;
988 right: 41.66666667%;
989 }
989 }
990 .col-sm-pull-4 {
990 .col-sm-pull-4 {
991 right: 33.33333333%;
991 right: 33.33333333%;
992 }
992 }
993 .col-sm-pull-3 {
993 .col-sm-pull-3 {
994 right: 25%;
994 right: 25%;
995 }
995 }
996 .col-sm-pull-2 {
996 .col-sm-pull-2 {
997 right: 16.66666667%;
997 right: 16.66666667%;
998 }
998 }
999 .col-sm-pull-1 {
999 .col-sm-pull-1 {
1000 right: 8.33333333%;
1000 right: 8.33333333%;
1001 }
1001 }
1002 .col-sm-pull-0 {
1002 .col-sm-pull-0 {
1003 right: 0%;
1003 right: 0%;
1004 }
1004 }
1005 .col-sm-push-12 {
1005 .col-sm-push-12 {
1006 left: 100%;
1006 left: 100%;
1007 }
1007 }
1008 .col-sm-push-11 {
1008 .col-sm-push-11 {
1009 left: 91.66666667%;
1009 left: 91.66666667%;
1010 }
1010 }
1011 .col-sm-push-10 {
1011 .col-sm-push-10 {
1012 left: 83.33333333%;
1012 left: 83.33333333%;
1013 }
1013 }
1014 .col-sm-push-9 {
1014 .col-sm-push-9 {
1015 left: 75%;
1015 left: 75%;
1016 }
1016 }
1017 .col-sm-push-8 {
1017 .col-sm-push-8 {
1018 left: 66.66666667%;
1018 left: 66.66666667%;
1019 }
1019 }
1020 .col-sm-push-7 {
1020 .col-sm-push-7 {
1021 left: 58.33333333%;
1021 left: 58.33333333%;
1022 }
1022 }
1023 .col-sm-push-6 {
1023 .col-sm-push-6 {
1024 left: 50%;
1024 left: 50%;
1025 }
1025 }
1026 .col-sm-push-5 {
1026 .col-sm-push-5 {
1027 left: 41.66666667%;
1027 left: 41.66666667%;
1028 }
1028 }
1029 .col-sm-push-4 {
1029 .col-sm-push-4 {
1030 left: 33.33333333%;
1030 left: 33.33333333%;
1031 }
1031 }
1032 .col-sm-push-3 {
1032 .col-sm-push-3 {
1033 left: 25%;
1033 left: 25%;
1034 }
1034 }
1035 .col-sm-push-2 {
1035 .col-sm-push-2 {
1036 left: 16.66666667%;
1036 left: 16.66666667%;
1037 }
1037 }
1038 .col-sm-push-1 {
1038 .col-sm-push-1 {
1039 left: 8.33333333%;
1039 left: 8.33333333%;
1040 }
1040 }
1041 .col-sm-push-0 {
1041 .col-sm-push-0 {
1042 left: 0%;
1042 left: 0%;
1043 }
1043 }
1044 .col-sm-offset-12 {
1044 .col-sm-offset-12 {
1045 margin-left: 100%;
1045 margin-left: 100%;
1046 }
1046 }
1047 .col-sm-offset-11 {
1047 .col-sm-offset-11 {
1048 margin-left: 91.66666667%;
1048 margin-left: 91.66666667%;
1049 }
1049 }
1050 .col-sm-offset-10 {
1050 .col-sm-offset-10 {
1051 margin-left: 83.33333333%;
1051 margin-left: 83.33333333%;
1052 }
1052 }
1053 .col-sm-offset-9 {
1053 .col-sm-offset-9 {
1054 margin-left: 75%;
1054 margin-left: 75%;
1055 }
1055 }
1056 .col-sm-offset-8 {
1056 .col-sm-offset-8 {
1057 margin-left: 66.66666667%;
1057 margin-left: 66.66666667%;
1058 }
1058 }
1059 .col-sm-offset-7 {
1059 .col-sm-offset-7 {
1060 margin-left: 58.33333333%;
1060 margin-left: 58.33333333%;
1061 }
1061 }
1062 .col-sm-offset-6 {
1062 .col-sm-offset-6 {
1063 margin-left: 50%;
1063 margin-left: 50%;
1064 }
1064 }
1065 .col-sm-offset-5 {
1065 .col-sm-offset-5 {
1066 margin-left: 41.66666667%;
1066 margin-left: 41.66666667%;
1067 }
1067 }
1068 .col-sm-offset-4 {
1068 .col-sm-offset-4 {
1069 margin-left: 33.33333333%;
1069 margin-left: 33.33333333%;
1070 }
1070 }
1071 .col-sm-offset-3 {
1071 .col-sm-offset-3 {
1072 margin-left: 25%;
1072 margin-left: 25%;
1073 }
1073 }
1074 .col-sm-offset-2 {
1074 .col-sm-offset-2 {
1075 margin-left: 16.66666667%;
1075 margin-left: 16.66666667%;
1076 }
1076 }
1077 .col-sm-offset-1 {
1077 .col-sm-offset-1 {
1078 margin-left: 8.33333333%;
1078 margin-left: 8.33333333%;
1079 }
1079 }
1080 .col-sm-offset-0 {
1080 .col-sm-offset-0 {
1081 margin-left: 0%;
1081 margin-left: 0%;
1082 }
1082 }
1083 }
1083 }
1084 @media (min-width: 992px) {
1084 @media (min-width: 992px) {
1085 .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
1085 .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
1086 float: left;
1086 float: left;
1087 }
1087 }
1088 .col-md-12 {
1088 .col-md-12 {
1089 width: 100%;
1089 width: 100%;
1090 }
1090 }
1091 .col-md-11 {
1091 .col-md-11 {
1092 width: 91.66666667%;
1092 width: 91.66666667%;
1093 }
1093 }
1094 .col-md-10 {
1094 .col-md-10 {
1095 width: 83.33333333%;
1095 width: 83.33333333%;
1096 }
1096 }
1097 .col-md-9 {
1097 .col-md-9 {
1098 width: 75%;
1098 width: 75%;
1099 }
1099 }
1100 .col-md-8 {
1100 .col-md-8 {
1101 width: 66.66666667%;
1101 width: 66.66666667%;
1102 }
1102 }
1103 .col-md-7 {
1103 .col-md-7 {
1104 width: 58.33333333%;
1104 width: 58.33333333%;
1105 }
1105 }
1106 .col-md-6 {
1106 .col-md-6 {
1107 width: 50%;
1107 width: 50%;
1108 }
1108 }
1109 .col-md-5 {
1109 .col-md-5 {
1110 width: 41.66666667%;
1110 width: 41.66666667%;
1111 }
1111 }
1112 .col-md-4 {
1112 .col-md-4 {
1113 width: 33.33333333%;
1113 width: 33.33333333%;
1114 }
1114 }
1115 .col-md-3 {
1115 .col-md-3 {
1116 width: 25%;
1116 width: 25%;
1117 }
1117 }
1118 .col-md-2 {
1118 .col-md-2 {
1119 width: 16.66666667%;
1119 width: 16.66666667%;
1120 }
1120 }
1121 .col-md-1 {
1121 .col-md-1 {
1122 width: 8.33333333%;
1122 width: 8.33333333%;
1123 }
1123 }
1124 .col-md-pull-12 {
1124 .col-md-pull-12 {
1125 right: 100%;
1125 right: 100%;
1126 }
1126 }
1127 .col-md-pull-11 {
1127 .col-md-pull-11 {
1128 right: 91.66666667%;
1128 right: 91.66666667%;
1129 }
1129 }
1130 .col-md-pull-10 {
1130 .col-md-pull-10 {
1131 right: 83.33333333%;
1131 right: 83.33333333%;
1132 }
1132 }
1133 .col-md-pull-9 {
1133 .col-md-pull-9 {
1134 right: 75%;
1134 right: 75%;
1135 }
1135 }
1136 .col-md-pull-8 {
1136 .col-md-pull-8 {
1137 right: 66.66666667%;
1137 right: 66.66666667%;
1138 }
1138 }
1139 .col-md-pull-7 {
1139 .col-md-pull-7 {
1140 right: 58.33333333%;
1140 right: 58.33333333%;
1141 }
1141 }
1142 .col-md-pull-6 {
1142 .col-md-pull-6 {
1143 right: 50%;
1143 right: 50%;
1144 }
1144 }
1145 .col-md-pull-5 {
1145 .col-md-pull-5 {
1146 right: 41.66666667%;
1146 right: 41.66666667%;
1147 }
1147 }
1148 .col-md-pull-4 {
1148 .col-md-pull-4 {
1149 right: 33.33333333%;
1149 right: 33.33333333%;
1150 }
1150 }
1151 .col-md-pull-3 {
1151 .col-md-pull-3 {
1152 right: 25%;
1152 right: 25%;
1153 }
1153 }
1154 .col-md-pull-2 {
1154 .col-md-pull-2 {
1155 right: 16.66666667%;
1155 right: 16.66666667%;
1156 }
1156 }
1157 .col-md-pull-1 {
1157 .col-md-pull-1 {
1158 right: 8.33333333%;
1158 right: 8.33333333%;
1159 }
1159 }
1160 .col-md-pull-0 {
1160 .col-md-pull-0 {
1161 right: 0%;
1161 right: 0%;
1162 }
1162 }
1163 .col-md-push-12 {
1163 .col-md-push-12 {
1164 left: 100%;
1164 left: 100%;
1165 }
1165 }
1166 .col-md-push-11 {
1166 .col-md-push-11 {
1167 left: 91.66666667%;
1167 left: 91.66666667%;
1168 }
1168 }
1169 .col-md-push-10 {
1169 .col-md-push-10 {
1170 left: 83.33333333%;
1170 left: 83.33333333%;
1171 }
1171 }
1172 .col-md-push-9 {
1172 .col-md-push-9 {
1173 left: 75%;
1173 left: 75%;
1174 }
1174 }
1175 .col-md-push-8 {
1175 .col-md-push-8 {
1176 left: 66.66666667%;
1176 left: 66.66666667%;
1177 }
1177 }
1178 .col-md-push-7 {
1178 .col-md-push-7 {
1179 left: 58.33333333%;
1179 left: 58.33333333%;
1180 }
1180 }
1181 .col-md-push-6 {
1181 .col-md-push-6 {
1182 left: 50%;
1182 left: 50%;
1183 }
1183 }
1184 .col-md-push-5 {
1184 .col-md-push-5 {
1185 left: 41.66666667%;
1185 left: 41.66666667%;
1186 }
1186 }
1187 .col-md-push-4 {
1187 .col-md-push-4 {
1188 left: 33.33333333%;
1188 left: 33.33333333%;
1189 }
1189 }
1190 .col-md-push-3 {
1190 .col-md-push-3 {
1191 left: 25%;
1191 left: 25%;
1192 }
1192 }
1193 .col-md-push-2 {
1193 .col-md-push-2 {
1194 left: 16.66666667%;
1194 left: 16.66666667%;
1195 }
1195 }
1196 .col-md-push-1 {
1196 .col-md-push-1 {
1197 left: 8.33333333%;
1197 left: 8.33333333%;
1198 }
1198 }
1199 .col-md-push-0 {
1199 .col-md-push-0 {
1200 left: 0%;
1200 left: 0%;
1201 }
1201 }
1202 .col-md-offset-12 {
1202 .col-md-offset-12 {
1203 margin-left: 100%;
1203 margin-left: 100%;
1204 }
1204 }
1205 .col-md-offset-11 {
1205 .col-md-offset-11 {
1206 margin-left: 91.66666667%;
1206 margin-left: 91.66666667%;
1207 }
1207 }
1208 .col-md-offset-10 {
1208 .col-md-offset-10 {
1209 margin-left: 83.33333333%;
1209 margin-left: 83.33333333%;
1210 }
1210 }
1211 .col-md-offset-9 {
1211 .col-md-offset-9 {
1212 margin-left: 75%;
1212 margin-left: 75%;
1213 }
1213 }
1214 .col-md-offset-8 {
1214 .col-md-offset-8 {
1215 margin-left: 66.66666667%;
1215 margin-left: 66.66666667%;
1216 }
1216 }
1217 .col-md-offset-7 {
1217 .col-md-offset-7 {
1218 margin-left: 58.33333333%;
1218 margin-left: 58.33333333%;
1219 }
1219 }
1220 .col-md-offset-6 {
1220 .col-md-offset-6 {
1221 margin-left: 50%;
1221 margin-left: 50%;
1222 }
1222 }
1223 .col-md-offset-5 {
1223 .col-md-offset-5 {
1224 margin-left: 41.66666667%;
1224 margin-left: 41.66666667%;
1225 }
1225 }
1226 .col-md-offset-4 {
1226 .col-md-offset-4 {
1227 margin-left: 33.33333333%;
1227 margin-left: 33.33333333%;
1228 }
1228 }
1229 .col-md-offset-3 {
1229 .col-md-offset-3 {
1230 margin-left: 25%;
1230 margin-left: 25%;
1231 }
1231 }
1232 .col-md-offset-2 {
1232 .col-md-offset-2 {
1233 margin-left: 16.66666667%;
1233 margin-left: 16.66666667%;
1234 }
1234 }
1235 .col-md-offset-1 {
1235 .col-md-offset-1 {
1236 margin-left: 8.33333333%;
1236 margin-left: 8.33333333%;
1237 }
1237 }
1238 .col-md-offset-0 {
1238 .col-md-offset-0 {
1239 margin-left: 0%;
1239 margin-left: 0%;
1240 }
1240 }
1241 }
1241 }
1242 @media (min-width: 1200px) {
1242 @media (min-width: 1200px) {
1243 .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
1243 .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
1244 float: left;
1244 float: left;
1245 }
1245 }
1246 .col-lg-12 {
1246 .col-lg-12 {
1247 width: 100%;
1247 width: 100%;
1248 }
1248 }
1249 .col-lg-11 {
1249 .col-lg-11 {
1250 width: 91.66666667%;
1250 width: 91.66666667%;
1251 }
1251 }
1252 .col-lg-10 {
1252 .col-lg-10 {
1253 width: 83.33333333%;
1253 width: 83.33333333%;
1254 }
1254 }
1255 .col-lg-9 {
1255 .col-lg-9 {
1256 width: 75%;
1256 width: 75%;
1257 }
1257 }
1258 .col-lg-8 {
1258 .col-lg-8 {
1259 width: 66.66666667%;
1259 width: 66.66666667%;
1260 }
1260 }
1261 .col-lg-7 {
1261 .col-lg-7 {
1262 width: 58.33333333%;
1262 width: 58.33333333%;
1263 }
1263 }
1264 .col-lg-6 {
1264 .col-lg-6 {
1265 width: 50%;
1265 width: 50%;
1266 }
1266 }
1267 .col-lg-5 {
1267 .col-lg-5 {
1268 width: 41.66666667%;
1268 width: 41.66666667%;
1269 }
1269 }
1270 .col-lg-4 {
1270 .col-lg-4 {
1271 width: 33.33333333%;
1271 width: 33.33333333%;
1272 }
1272 }
1273 .col-lg-3 {
1273 .col-lg-3 {
1274 width: 25%;
1274 width: 25%;
1275 }
1275 }
1276 .col-lg-2 {
1276 .col-lg-2 {
1277 width: 16.66666667%;
1277 width: 16.66666667%;
1278 }
1278 }
1279 .col-lg-1 {
1279 .col-lg-1 {
1280 width: 8.33333333%;
1280 width: 8.33333333%;
1281 }
1281 }
1282 .col-lg-pull-12 {
1282 .col-lg-pull-12 {
1283 right: 100%;
1283 right: 100%;
1284 }
1284 }
1285 .col-lg-pull-11 {
1285 .col-lg-pull-11 {
1286 right: 91.66666667%;
1286 right: 91.66666667%;
1287 }
1287 }
1288 .col-lg-pull-10 {
1288 .col-lg-pull-10 {
1289 right: 83.33333333%;
1289 right: 83.33333333%;
1290 }
1290 }
1291 .col-lg-pull-9 {
1291 .col-lg-pull-9 {
1292 right: 75%;
1292 right: 75%;
1293 }
1293 }
1294 .col-lg-pull-8 {
1294 .col-lg-pull-8 {
1295 right: 66.66666667%;
1295 right: 66.66666667%;
1296 }
1296 }
1297 .col-lg-pull-7 {
1297 .col-lg-pull-7 {
1298 right: 58.33333333%;
1298 right: 58.33333333%;
1299 }
1299 }
1300 .col-lg-pull-6 {
1300 .col-lg-pull-6 {
1301 right: 50%;
1301 right: 50%;
1302 }
1302 }
1303 .col-lg-pull-5 {
1303 .col-lg-pull-5 {
1304 right: 41.66666667%;
1304 right: 41.66666667%;
1305 }
1305 }
1306 .col-lg-pull-4 {
1306 .col-lg-pull-4 {
1307 right: 33.33333333%;
1307 right: 33.33333333%;
1308 }
1308 }
1309 .col-lg-pull-3 {
1309 .col-lg-pull-3 {
1310 right: 25%;
1310 right: 25%;
1311 }
1311 }
1312 .col-lg-pull-2 {
1312 .col-lg-pull-2 {
1313 right: 16.66666667%;
1313 right: 16.66666667%;
1314 }
1314 }
1315 .col-lg-pull-1 {
1315 .col-lg-pull-1 {
1316 right: 8.33333333%;
1316 right: 8.33333333%;
1317 }
1317 }
1318 .col-lg-pull-0 {
1318 .col-lg-pull-0 {
1319 right: 0%;
1319 right: 0%;
1320 }
1320 }
1321 .col-lg-push-12 {
1321 .col-lg-push-12 {
1322 left: 100%;
1322 left: 100%;
1323 }
1323 }
1324 .col-lg-push-11 {
1324 .col-lg-push-11 {
1325 left: 91.66666667%;
1325 left: 91.66666667%;
1326 }
1326 }
1327 .col-lg-push-10 {
1327 .col-lg-push-10 {
1328 left: 83.33333333%;
1328 left: 83.33333333%;
1329 }
1329 }
1330 .col-lg-push-9 {
1330 .col-lg-push-9 {
1331 left: 75%;
1331 left: 75%;
1332 }
1332 }
1333 .col-lg-push-8 {
1333 .col-lg-push-8 {
1334 left: 66.66666667%;
1334 left: 66.66666667%;
1335 }
1335 }
1336 .col-lg-push-7 {
1336 .col-lg-push-7 {
1337 left: 58.33333333%;
1337 left: 58.33333333%;
1338 }
1338 }
1339 .col-lg-push-6 {
1339 .col-lg-push-6 {
1340 left: 50%;
1340 left: 50%;
1341 }
1341 }
1342 .col-lg-push-5 {
1342 .col-lg-push-5 {
1343 left: 41.66666667%;
1343 left: 41.66666667%;
1344 }
1344 }
1345 .col-lg-push-4 {
1345 .col-lg-push-4 {
1346 left: 33.33333333%;
1346 left: 33.33333333%;
1347 }
1347 }
1348 .col-lg-push-3 {
1348 .col-lg-push-3 {
1349 left: 25%;
1349 left: 25%;
1350 }
1350 }
1351 .col-lg-push-2 {
1351 .col-lg-push-2 {
1352 left: 16.66666667%;
1352 left: 16.66666667%;
1353 }
1353 }
1354 .col-lg-push-1 {
1354 .col-lg-push-1 {
1355 left: 8.33333333%;
1355 left: 8.33333333%;
1356 }
1356 }
1357 .col-lg-push-0 {
1357 .col-lg-push-0 {
1358 left: 0%;
1358 left: 0%;
1359 }
1359 }
1360 .col-lg-offset-12 {
1360 .col-lg-offset-12 {
1361 margin-left: 100%;
1361 margin-left: 100%;
1362 }
1362 }
1363 .col-lg-offset-11 {
1363 .col-lg-offset-11 {
1364 margin-left: 91.66666667%;
1364 margin-left: 91.66666667%;
1365 }
1365 }
1366 .col-lg-offset-10 {
1366 .col-lg-offset-10 {
1367 margin-left: 83.33333333%;
1367 margin-left: 83.33333333%;
1368 }
1368 }
1369 .col-lg-offset-9 {
1369 .col-lg-offset-9 {
1370 margin-left: 75%;
1370 margin-left: 75%;
1371 }
1371 }
1372 .col-lg-offset-8 {
1372 .col-lg-offset-8 {
1373 margin-left: 66.66666667%;
1373 margin-left: 66.66666667%;
1374 }
1374 }
1375 .col-lg-offset-7 {
1375 .col-lg-offset-7 {
1376 margin-left: 58.33333333%;
1376 margin-left: 58.33333333%;
1377 }
1377 }
1378 .col-lg-offset-6 {
1378 .col-lg-offset-6 {
1379 margin-left: 50%;
1379 margin-left: 50%;
1380 }
1380 }
1381 .col-lg-offset-5 {
1381 .col-lg-offset-5 {
1382 margin-left: 41.66666667%;
1382 margin-left: 41.66666667%;
1383 }
1383 }
1384 .col-lg-offset-4 {
1384 .col-lg-offset-4 {
1385 margin-left: 33.33333333%;
1385 margin-left: 33.33333333%;
1386 }
1386 }
1387 .col-lg-offset-3 {
1387 .col-lg-offset-3 {
1388 margin-left: 25%;
1388 margin-left: 25%;
1389 }
1389 }
1390 .col-lg-offset-2 {
1390 .col-lg-offset-2 {
1391 margin-left: 16.66666667%;
1391 margin-left: 16.66666667%;
1392 }
1392 }
1393 .col-lg-offset-1 {
1393 .col-lg-offset-1 {
1394 margin-left: 8.33333333%;
1394 margin-left: 8.33333333%;
1395 }
1395 }
1396 .col-lg-offset-0 {
1396 .col-lg-offset-0 {
1397 margin-left: 0%;
1397 margin-left: 0%;
1398 }
1398 }
1399 }
1399 }
1400 table {
1400 table {
1401 max-width: 100%;
1401 max-width: 100%;
1402 background-color: transparent;
1402 background-color: transparent;
1403 }
1403 }
1404 th {
1404 th {
1405 text-align: left;
1405 text-align: left;
1406 }
1406 }
1407 .table {
1407 .table {
1408 width: 100%;
1408 width: 100%;
1409 margin-bottom: 18px;
1409 margin-bottom: 18px;
1410 }
1410 }
1411 .table > thead > tr > th,
1411 .table > thead > tr > th,
1412 .table > tbody > tr > th,
1412 .table > tbody > tr > th,
1413 .table > tfoot > tr > th,
1413 .table > tfoot > tr > th,
1414 .table > thead > tr > td,
1414 .table > thead > tr > td,
1415 .table > tbody > tr > td,
1415 .table > tbody > tr > td,
1416 .table > tfoot > tr > td {
1416 .table > tfoot > tr > td {
1417 padding: 8px;
1417 padding: 8px;
1418 line-height: 1.42857143;
1418 line-height: 1.42857143;
1419 vertical-align: top;
1419 vertical-align: top;
1420 border-top: 1px solid #dddddd;
1420 border-top: 1px solid #dddddd;
1421 }
1421 }
1422 .table > thead > tr > th {
1422 .table > thead > tr > th {
1423 vertical-align: bottom;
1423 vertical-align: bottom;
1424 border-bottom: 2px solid #dddddd;
1424 border-bottom: 2px solid #dddddd;
1425 }
1425 }
1426 .table > caption + thead > tr:first-child > th,
1426 .table > caption + thead > tr:first-child > th,
1427 .table > colgroup + thead > tr:first-child > th,
1427 .table > colgroup + thead > tr:first-child > th,
1428 .table > thead:first-child > tr:first-child > th,
1428 .table > thead:first-child > tr:first-child > th,
1429 .table > caption + thead > tr:first-child > td,
1429 .table > caption + thead > tr:first-child > td,
1430 .table > colgroup + thead > tr:first-child > td,
1430 .table > colgroup + thead > tr:first-child > td,
1431 .table > thead:first-child > tr:first-child > td {
1431 .table > thead:first-child > tr:first-child > td {
1432 border-top: 0;
1432 border-top: 0;
1433 }
1433 }
1434 .table > tbody + tbody {
1434 .table > tbody + tbody {
1435 border-top: 2px solid #dddddd;
1435 border-top: 2px solid #dddddd;
1436 }
1436 }
1437 .table .table {
1437 .table .table {
1438 background-color: #ffffff;
1438 background-color: #ffffff;
1439 }
1439 }
1440 .table-condensed > thead > tr > th,
1440 .table-condensed > thead > tr > th,
1441 .table-condensed > tbody > tr > th,
1441 .table-condensed > tbody > tr > th,
1442 .table-condensed > tfoot > tr > th,
1442 .table-condensed > tfoot > tr > th,
1443 .table-condensed > thead > tr > td,
1443 .table-condensed > thead > tr > td,
1444 .table-condensed > tbody > tr > td,
1444 .table-condensed > tbody > tr > td,
1445 .table-condensed > tfoot > tr > td {
1445 .table-condensed > tfoot > tr > td {
1446 padding: 5px;
1446 padding: 5px;
1447 }
1447 }
1448 .table-bordered {
1448 .table-bordered {
1449 border: 1px solid #dddddd;
1449 border: 1px solid #dddddd;
1450 }
1450 }
1451 .table-bordered > thead > tr > th,
1451 .table-bordered > thead > tr > th,
1452 .table-bordered > tbody > tr > th,
1452 .table-bordered > tbody > tr > th,
1453 .table-bordered > tfoot > tr > th,
1453 .table-bordered > tfoot > tr > th,
1454 .table-bordered > thead > tr > td,
1454 .table-bordered > thead > tr > td,
1455 .table-bordered > tbody > tr > td,
1455 .table-bordered > tbody > tr > td,
1456 .table-bordered > tfoot > tr > td {
1456 .table-bordered > tfoot > tr > td {
1457 border: 1px solid #dddddd;
1457 border: 1px solid #dddddd;
1458 }
1458 }
1459 .table-bordered > thead > tr > th,
1459 .table-bordered > thead > tr > th,
1460 .table-bordered > thead > tr > td {
1460 .table-bordered > thead > tr > td {
1461 border-bottom-width: 2px;
1461 border-bottom-width: 2px;
1462 }
1462 }
1463 .table-striped > tbody > tr:nth-child(odd) > td,
1463 .table-striped > tbody > tr:nth-child(odd) > td,
1464 .table-striped > tbody > tr:nth-child(odd) > th {
1464 .table-striped > tbody > tr:nth-child(odd) > th {
1465 background-color: #f9f9f9;
1465 background-color: #f9f9f9;
1466 }
1466 }
1467 .table-hover > tbody > tr:hover > td,
1467 .table-hover > tbody > tr:hover > td,
1468 .table-hover > tbody > tr:hover > th {
1468 .table-hover > tbody > tr:hover > th {
1469 background-color: #f5f5f5;
1469 background-color: #f5f5f5;
1470 }
1470 }
1471 table col[class*="col-"] {
1471 table col[class*="col-"] {
1472 position: static;
1472 position: static;
1473 float: none;
1473 float: none;
1474 display: table-column;
1474 display: table-column;
1475 }
1475 }
1476 table td[class*="col-"],
1476 table td[class*="col-"],
1477 table th[class*="col-"] {
1477 table th[class*="col-"] {
1478 position: static;
1478 position: static;
1479 float: none;
1479 float: none;
1480 display: table-cell;
1480 display: table-cell;
1481 }
1481 }
1482 .table > thead > tr > td.active,
1482 .table > thead > tr > td.active,
1483 .table > tbody > tr > td.active,
1483 .table > tbody > tr > td.active,
1484 .table > tfoot > tr > td.active,
1484 .table > tfoot > tr > td.active,
1485 .table > thead > tr > th.active,
1485 .table > thead > tr > th.active,
1486 .table > tbody > tr > th.active,
1486 .table > tbody > tr > th.active,
1487 .table > tfoot > tr > th.active,
1487 .table > tfoot > tr > th.active,
1488 .table > thead > tr.active > td,
1488 .table > thead > tr.active > td,
1489 .table > tbody > tr.active > td,
1489 .table > tbody > tr.active > td,
1490 .table > tfoot > tr.active > td,
1490 .table > tfoot > tr.active > td,
1491 .table > thead > tr.active > th,
1491 .table > thead > tr.active > th,
1492 .table > tbody > tr.active > th,
1492 .table > tbody > tr.active > th,
1493 .table > tfoot > tr.active > th {
1493 .table > tfoot > tr.active > th {
1494 background-color: #f5f5f5;
1494 background-color: #f5f5f5;
1495 }
1495 }
1496 .table-hover > tbody > tr > td.active:hover,
1496 .table-hover > tbody > tr > td.active:hover,
1497 .table-hover > tbody > tr > th.active:hover,
1497 .table-hover > tbody > tr > th.active:hover,
1498 .table-hover > tbody > tr.active:hover > td,
1498 .table-hover > tbody > tr.active:hover > td,
1499 .table-hover > tbody > tr.active:hover > th {
1499 .table-hover > tbody > tr.active:hover > th {
1500 background-color: #e8e8e8;
1500 background-color: #e8e8e8;
1501 }
1501 }
1502 .table > thead > tr > td.success,
1502 .table > thead > tr > td.success,
1503 .table > tbody > tr > td.success,
1503 .table > tbody > tr > td.success,
1504 .table > tfoot > tr > td.success,
1504 .table > tfoot > tr > td.success,
1505 .table > thead > tr > th.success,
1505 .table > thead > tr > th.success,
1506 .table > tbody > tr > th.success,
1506 .table > tbody > tr > th.success,
1507 .table > tfoot > tr > th.success,
1507 .table > tfoot > tr > th.success,
1508 .table > thead > tr.success > td,
1508 .table > thead > tr.success > td,
1509 .table > tbody > tr.success > td,
1509 .table > tbody > tr.success > td,
1510 .table > tfoot > tr.success > td,
1510 .table > tfoot > tr.success > td,
1511 .table > thead > tr.success > th,
1511 .table > thead > tr.success > th,
1512 .table > tbody > tr.success > th,
1512 .table > tbody > tr.success > th,
1513 .table > tfoot > tr.success > th {
1513 .table > tfoot > tr.success > th {
1514 background-color: #dff0d8;
1514 background-color: #dff0d8;
1515 }
1515 }
1516 .table-hover > tbody > tr > td.success:hover,
1516 .table-hover > tbody > tr > td.success:hover,
1517 .table-hover > tbody > tr > th.success:hover,
1517 .table-hover > tbody > tr > th.success:hover,
1518 .table-hover > tbody > tr.success:hover > td,
1518 .table-hover > tbody > tr.success:hover > td,
1519 .table-hover > tbody > tr.success:hover > th {
1519 .table-hover > tbody > tr.success:hover > th {
1520 background-color: #d0e9c6;
1520 background-color: #d0e9c6;
1521 }
1521 }
1522 .table > thead > tr > td.info,
1522 .table > thead > tr > td.info,
1523 .table > tbody > tr > td.info,
1523 .table > tbody > tr > td.info,
1524 .table > tfoot > tr > td.info,
1524 .table > tfoot > tr > td.info,
1525 .table > thead > tr > th.info,
1525 .table > thead > tr > th.info,
1526 .table > tbody > tr > th.info,
1526 .table > tbody > tr > th.info,
1527 .table > tfoot > tr > th.info,
1527 .table > tfoot > tr > th.info,
1528 .table > thead > tr.info > td,
1528 .table > thead > tr.info > td,
1529 .table > tbody > tr.info > td,
1529 .table > tbody > tr.info > td,
1530 .table > tfoot > tr.info > td,
1530 .table > tfoot > tr.info > td,
1531 .table > thead > tr.info > th,
1531 .table > thead > tr.info > th,
1532 .table > tbody > tr.info > th,
1532 .table > tbody > tr.info > th,
1533 .table > tfoot > tr.info > th {
1533 .table > tfoot > tr.info > th {
1534 background-color: #d9edf7;
1534 background-color: #d9edf7;
1535 }
1535 }
1536 .table-hover > tbody > tr > td.info:hover,
1536 .table-hover > tbody > tr > td.info:hover,
1537 .table-hover > tbody > tr > th.info:hover,
1537 .table-hover > tbody > tr > th.info:hover,
1538 .table-hover > tbody > tr.info:hover > td,
1538 .table-hover > tbody > tr.info:hover > td,
1539 .table-hover > tbody > tr.info:hover > th {
1539 .table-hover > tbody > tr.info:hover > th {
1540 background-color: #c4e3f3;
1540 background-color: #c4e3f3;
1541 }
1541 }
1542 .table > thead > tr > td.warning,
1542 .table > thead > tr > td.warning,
1543 .table > tbody > tr > td.warning,
1543 .table > tbody > tr > td.warning,
1544 .table > tfoot > tr > td.warning,
1544 .table > tfoot > tr > td.warning,
1545 .table > thead > tr > th.warning,
1545 .table > thead > tr > th.warning,
1546 .table > tbody > tr > th.warning,
1546 .table > tbody > tr > th.warning,
1547 .table > tfoot > tr > th.warning,
1547 .table > tfoot > tr > th.warning,
1548 .table > thead > tr.warning > td,
1548 .table > thead > tr.warning > td,
1549 .table > tbody > tr.warning > td,
1549 .table > tbody > tr.warning > td,
1550 .table > tfoot > tr.warning > td,
1550 .table > tfoot > tr.warning > td,
1551 .table > thead > tr.warning > th,
1551 .table > thead > tr.warning > th,
1552 .table > tbody > tr.warning > th,
1552 .table > tbody > tr.warning > th,
1553 .table > tfoot > tr.warning > th {
1553 .table > tfoot > tr.warning > th {
1554 background-color: #fcf8e3;
1554 background-color: #fcf8e3;
1555 }
1555 }
1556 .table-hover > tbody > tr > td.warning:hover,
1556 .table-hover > tbody > tr > td.warning:hover,
1557 .table-hover > tbody > tr > th.warning:hover,
1557 .table-hover > tbody > tr > th.warning:hover,
1558 .table-hover > tbody > tr.warning:hover > td,
1558 .table-hover > tbody > tr.warning:hover > td,
1559 .table-hover > tbody > tr.warning:hover > th {
1559 .table-hover > tbody > tr.warning:hover > th {
1560 background-color: #faf2cc;
1560 background-color: #faf2cc;
1561 }
1561 }
1562 .table > thead > tr > td.danger,
1562 .table > thead > tr > td.danger,
1563 .table > tbody > tr > td.danger,
1563 .table > tbody > tr > td.danger,
1564 .table > tfoot > tr > td.danger,
1564 .table > tfoot > tr > td.danger,
1565 .table > thead > tr > th.danger,
1565 .table > thead > tr > th.danger,
1566 .table > tbody > tr > th.danger,
1566 .table > tbody > tr > th.danger,
1567 .table > tfoot > tr > th.danger,
1567 .table > tfoot > tr > th.danger,
1568 .table > thead > tr.danger > td,
1568 .table > thead > tr.danger > td,
1569 .table > tbody > tr.danger > td,
1569 .table > tbody > tr.danger > td,
1570 .table > tfoot > tr.danger > td,
1570 .table > tfoot > tr.danger > td,
1571 .table > thead > tr.danger > th,
1571 .table > thead > tr.danger > th,
1572 .table > tbody > tr.danger > th,
1572 .table > tbody > tr.danger > th,
1573 .table > tfoot > tr.danger > th {
1573 .table > tfoot > tr.danger > th {
1574 background-color: #f2dede;
1574 background-color: #f2dede;
1575 }
1575 }
1576 .table-hover > tbody > tr > td.danger:hover,
1576 .table-hover > tbody > tr > td.danger:hover,
1577 .table-hover > tbody > tr > th.danger:hover,
1577 .table-hover > tbody > tr > th.danger:hover,
1578 .table-hover > tbody > tr.danger:hover > td,
1578 .table-hover > tbody > tr.danger:hover > td,
1579 .table-hover > tbody > tr.danger:hover > th {
1579 .table-hover > tbody > tr.danger:hover > th {
1580 background-color: #ebcccc;
1580 background-color: #ebcccc;
1581 }
1581 }
1582 @media (max-width: 767px) {
1582 @media (max-width: 767px) {
1583 .table-responsive {
1583 .table-responsive {
1584 width: 100%;
1584 width: 100%;
1585 margin-bottom: 13.5px;
1585 margin-bottom: 13.5px;
1586 overflow-y: hidden;
1586 overflow-y: hidden;
1587 overflow-x: scroll;
1587 overflow-x: scroll;
1588 -ms-overflow-style: -ms-autohiding-scrollbar;
1588 -ms-overflow-style: -ms-autohiding-scrollbar;
1589 border: 1px solid #dddddd;
1589 border: 1px solid #dddddd;
1590 -webkit-overflow-scrolling: touch;
1590 -webkit-overflow-scrolling: touch;
1591 }
1591 }
1592 .table-responsive > .table {
1592 .table-responsive > .table {
1593 margin-bottom: 0;
1593 margin-bottom: 0;
1594 }
1594 }
1595 .table-responsive > .table > thead > tr > th,
1595 .table-responsive > .table > thead > tr > th,
1596 .table-responsive > .table > tbody > tr > th,
1596 .table-responsive > .table > tbody > tr > th,
1597 .table-responsive > .table > tfoot > tr > th,
1597 .table-responsive > .table > tfoot > tr > th,
1598 .table-responsive > .table > thead > tr > td,
1598 .table-responsive > .table > thead > tr > td,
1599 .table-responsive > .table > tbody > tr > td,
1599 .table-responsive > .table > tbody > tr > td,
1600 .table-responsive > .table > tfoot > tr > td {
1600 .table-responsive > .table > tfoot > tr > td {
1601 white-space: nowrap;
1601 white-space: nowrap;
1602 }
1602 }
1603 .table-responsive > .table-bordered {
1603 .table-responsive > .table-bordered {
1604 border: 0;
1604 border: 0;
1605 }
1605 }
1606 .table-responsive > .table-bordered > thead > tr > th:first-child,
1606 .table-responsive > .table-bordered > thead > tr > th:first-child,
1607 .table-responsive > .table-bordered > tbody > tr > th:first-child,
1607 .table-responsive > .table-bordered > tbody > tr > th:first-child,
1608 .table-responsive > .table-bordered > tfoot > tr > th:first-child,
1608 .table-responsive > .table-bordered > tfoot > tr > th:first-child,
1609 .table-responsive > .table-bordered > thead > tr > td:first-child,
1609 .table-responsive > .table-bordered > thead > tr > td:first-child,
1610 .table-responsive > .table-bordered > tbody > tr > td:first-child,
1610 .table-responsive > .table-bordered > tbody > tr > td:first-child,
1611 .table-responsive > .table-bordered > tfoot > tr > td:first-child {
1611 .table-responsive > .table-bordered > tfoot > tr > td:first-child {
1612 border-left: 0;
1612 border-left: 0;
1613 }
1613 }
1614 .table-responsive > .table-bordered > thead > tr > th:last-child,
1614 .table-responsive > .table-bordered > thead > tr > th:last-child,
1615 .table-responsive > .table-bordered > tbody > tr > th:last-child,
1615 .table-responsive > .table-bordered > tbody > tr > th:last-child,
1616 .table-responsive > .table-bordered > tfoot > tr > th:last-child,
1616 .table-responsive > .table-bordered > tfoot > tr > th:last-child,
1617 .table-responsive > .table-bordered > thead > tr > td:last-child,
1617 .table-responsive > .table-bordered > thead > tr > td:last-child,
1618 .table-responsive > .table-bordered > tbody > tr > td:last-child,
1618 .table-responsive > .table-bordered > tbody > tr > td:last-child,
1619 .table-responsive > .table-bordered > tfoot > tr > td:last-child {
1619 .table-responsive > .table-bordered > tfoot > tr > td:last-child {
1620 border-right: 0;
1620 border-right: 0;
1621 }
1621 }
1622 .table-responsive > .table-bordered > tbody > tr:last-child > th,
1622 .table-responsive > .table-bordered > tbody > tr:last-child > th,
1623 .table-responsive > .table-bordered > tfoot > tr:last-child > th,
1623 .table-responsive > .table-bordered > tfoot > tr:last-child > th,
1624 .table-responsive > .table-bordered > tbody > tr:last-child > td,
1624 .table-responsive > .table-bordered > tbody > tr:last-child > td,
1625 .table-responsive > .table-bordered > tfoot > tr:last-child > td {
1625 .table-responsive > .table-bordered > tfoot > tr:last-child > td {
1626 border-bottom: 0;
1626 border-bottom: 0;
1627 }
1627 }
1628 }
1628 }
1629 fieldset {
1629 fieldset {
1630 padding: 0;
1630 padding: 0;
1631 margin: 0;
1631 margin: 0;
1632 border: 0;
1632 border: 0;
1633 min-width: 0;
1633 min-width: 0;
1634 }
1634 }
1635 legend {
1635 legend {
1636 display: block;
1636 display: block;
1637 width: 100%;
1637 width: 100%;
1638 padding: 0;
1638 padding: 0;
1639 margin-bottom: 18px;
1639 margin-bottom: 18px;
1640 font-size: 19.5px;
1640 font-size: 19.5px;
1641 line-height: inherit;
1641 line-height: inherit;
1642 color: #333333;
1642 color: #333333;
1643 border: 0;
1643 border: 0;
1644 border-bottom: 1px solid #e5e5e5;
1644 border-bottom: 1px solid #e5e5e5;
1645 }
1645 }
1646 label {
1646 label {
1647 display: inline-block;
1647 display: inline-block;
1648 margin-bottom: 5px;
1648 margin-bottom: 5px;
1649 font-weight: bold;
1649 font-weight: bold;
1650 }
1650 }
1651 input[type="search"] {
1651 input[type="search"] {
1652 -webkit-box-sizing: border-box;
1652 -webkit-box-sizing: border-box;
1653 -moz-box-sizing: border-box;
1653 -moz-box-sizing: border-box;
1654 box-sizing: border-box;
1654 box-sizing: border-box;
1655 }
1655 }
1656 input[type="radio"],
1656 input[type="radio"],
1657 input[type="checkbox"] {
1657 input[type="checkbox"] {
1658 margin: 4px 0 0;
1658 margin: 4px 0 0;
1659 margin-top: 1px \9;
1659 margin-top: 1px \9;
1660 /* IE8-9 */
1660 /* IE8-9 */
1661 line-height: normal;
1661 line-height: normal;
1662 }
1662 }
1663 input[type="file"] {
1663 input[type="file"] {
1664 display: block;
1664 display: block;
1665 }
1665 }
1666 input[type="range"] {
1666 input[type="range"] {
1667 display: block;
1667 display: block;
1668 width: 100%;
1668 width: 100%;
1669 }
1669 }
1670 select[multiple],
1670 select[multiple],
1671 select[size] {
1671 select[size] {
1672 height: auto;
1672 height: auto;
1673 }
1673 }
1674 input[type="file"]:focus,
1674 input[type="file"]:focus,
1675 input[type="radio"]:focus,
1675 input[type="radio"]:focus,
1676 input[type="checkbox"]:focus {
1676 input[type="checkbox"]:focus {
1677 outline: thin dotted;
1677 outline: thin dotted;
1678 outline: 5px auto -webkit-focus-ring-color;
1678 outline: 5px auto -webkit-focus-ring-color;
1679 outline-offset: -2px;
1679 outline-offset: -2px;
1680 }
1680 }
1681 output {
1681 output {
1682 display: block;
1682 display: block;
1683 padding-top: 7px;
1683 padding-top: 7px;
1684 font-size: 13px;
1684 font-size: 13px;
1685 line-height: 1.42857143;
1685 line-height: 1.42857143;
1686 color: #555555;
1686 color: #555555;
1687 }
1687 }
1688 .form-control {
1688 .form-control {
1689 display: block;
1689 display: block;
1690 width: 100%;
1690 width: 100%;
1691 height: 32px;
1691 height: 32px;
1692 padding: 6px 12px;
1692 padding: 6px 12px;
1693 font-size: 13px;
1693 font-size: 13px;
1694 line-height: 1.42857143;
1694 line-height: 1.42857143;
1695 color: #555555;
1695 color: #555555;
1696 background-color: #ffffff;
1696 background-color: #ffffff;
1697 background-image: none;
1697 background-image: none;
1698 border: 1px solid #cccccc;
1698 border: 1px solid #cccccc;
1699 border-radius: 4px;
1699 border-radius: 4px;
1700 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
1700 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
1701 box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
1701 box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
1702 -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
1702 -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
1703 transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
1703 transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
1704 }
1704 }
1705 .form-control:focus {
1705 .form-control:focus {
1706 border-color: #66afe9;
1706 border-color: #66afe9;
1707 outline: 0;
1707 outline: 0;
1708 -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
1708 -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
1709 box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
1709 box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
1710 }
1710 }
1711 .form-control::-moz-placeholder {
1711 .form-control::-moz-placeholder {
1712 color: #999999;
1712 color: #999999;
1713 opacity: 1;
1713 opacity: 1;
1714 }
1714 }
1715 .form-control:-ms-input-placeholder {
1715 .form-control:-ms-input-placeholder {
1716 color: #999999;
1716 color: #999999;
1717 }
1717 }
1718 .form-control::-webkit-input-placeholder {
1718 .form-control::-webkit-input-placeholder {
1719 color: #999999;
1719 color: #999999;
1720 }
1720 }
1721 .form-control[disabled],
1721 .form-control[disabled],
1722 .form-control[readonly],
1722 .form-control[readonly],
1723 fieldset[disabled] .form-control {
1723 fieldset[disabled] .form-control {
1724 cursor: not-allowed;
1724 cursor: not-allowed;
1725 background-color: #eeeeee;
1725 background-color: #eeeeee;
1726 opacity: 1;
1726 opacity: 1;
1727 }
1727 }
1728 textarea.form-control {
1728 textarea.form-control {
1729 height: auto;
1729 height: auto;
1730 }
1730 }
1731 input[type="search"] {
1731 input[type="search"] {
1732 -webkit-appearance: none;
1732 -webkit-appearance: none;
1733 }
1733 }
1734 input[type="date"] {
1734 input[type="date"] {
1735 line-height: 32px;
1735 line-height: 32px;
1736 }
1736 }
1737 .form-group {
1737 .form-group {
1738 margin-bottom: 15px;
1738 margin-bottom: 15px;
1739 }
1739 }
1740 .radio,
1740 .radio,
1741 .checkbox {
1741 .checkbox {
1742 display: block;
1742 display: block;
1743 min-height: 18px;
1743 min-height: 18px;
1744 margin-top: 10px;
1744 margin-top: 10px;
1745 margin-bottom: 10px;
1745 margin-bottom: 10px;
1746 padding-left: 20px;
1746 padding-left: 20px;
1747 }
1747 }
1748 .radio label,
1748 .radio label,
1749 .checkbox label {
1749 .checkbox label {
1750 display: inline;
1750 display: inline;
1751 font-weight: normal;
1751 font-weight: normal;
1752 cursor: pointer;
1752 cursor: pointer;
1753 }
1753 }
1754 .radio input[type="radio"],
1754 .radio input[type="radio"],
1755 .radio-inline input[type="radio"],
1755 .radio-inline input[type="radio"],
1756 .checkbox input[type="checkbox"],
1756 .checkbox input[type="checkbox"],
1757 .checkbox-inline input[type="checkbox"] {
1757 .checkbox-inline input[type="checkbox"] {
1758 float: left;
1758 float: left;
1759 margin-left: -20px;
1759 margin-left: -20px;
1760 }
1760 }
1761 .radio + .radio,
1761 .radio + .radio,
1762 .checkbox + .checkbox {
1762 .checkbox + .checkbox {
1763 margin-top: -5px;
1763 margin-top: -5px;
1764 }
1764 }
1765 .radio-inline,
1765 .radio-inline,
1766 .checkbox-inline {
1766 .checkbox-inline {
1767 display: inline-block;
1767 display: inline-block;
1768 padding-left: 20px;
1768 padding-left: 20px;
1769 margin-bottom: 0;
1769 margin-bottom: 0;
1770 vertical-align: middle;
1770 vertical-align: middle;
1771 font-weight: normal;
1771 font-weight: normal;
1772 cursor: pointer;
1772 cursor: pointer;
1773 }
1773 }
1774 .radio-inline + .radio-inline,
1774 .radio-inline + .radio-inline,
1775 .checkbox-inline + .checkbox-inline {
1775 .checkbox-inline + .checkbox-inline {
1776 margin-top: 0;
1776 margin-top: 0;
1777 margin-left: 10px;
1777 margin-left: 10px;
1778 }
1778 }
1779 input[type="radio"][disabled],
1779 input[type="radio"][disabled],
1780 input[type="checkbox"][disabled],
1780 input[type="checkbox"][disabled],
1781 .radio[disabled],
1781 .radio[disabled],
1782 .radio-inline[disabled],
1782 .radio-inline[disabled],
1783 .checkbox[disabled],
1783 .checkbox[disabled],
1784 .checkbox-inline[disabled],
1784 .checkbox-inline[disabled],
1785 fieldset[disabled] input[type="radio"],
1785 fieldset[disabled] input[type="radio"],
1786 fieldset[disabled] input[type="checkbox"],
1786 fieldset[disabled] input[type="checkbox"],
1787 fieldset[disabled] .radio,
1787 fieldset[disabled] .radio,
1788 fieldset[disabled] .radio-inline,
1788 fieldset[disabled] .radio-inline,
1789 fieldset[disabled] .checkbox,
1789 fieldset[disabled] .checkbox,
1790 fieldset[disabled] .checkbox-inline {
1790 fieldset[disabled] .checkbox-inline {
1791 cursor: not-allowed;
1791 cursor: not-allowed;
1792 }
1792 }
1793 .input-sm {
1793 .input-sm {
1794 height: 30px;
1794 height: 30px;
1795 padding: 5px 10px;
1795 padding: 5px 10px;
1796 font-size: 12px;
1796 font-size: 12px;
1797 line-height: 1.5;
1797 line-height: 1.5;
1798 border-radius: 3px;
1798 border-radius: 3px;
1799 }
1799 }
1800 select.input-sm {
1800 select.input-sm {
1801 height: 30px;
1801 height: 30px;
1802 line-height: 30px;
1802 line-height: 30px;
1803 }
1803 }
1804 textarea.input-sm,
1804 textarea.input-sm,
1805 select[multiple].input-sm {
1805 select[multiple].input-sm {
1806 height: auto;
1806 height: auto;
1807 }
1807 }
1808 .input-lg {
1808 .input-lg {
1809 height: 45px;
1809 height: 45px;
1810 padding: 10px 16px;
1810 padding: 10px 16px;
1811 font-size: 17px;
1811 font-size: 17px;
1812 line-height: 1.33;
1812 line-height: 1.33;
1813 border-radius: 6px;
1813 border-radius: 6px;
1814 }
1814 }
1815 select.input-lg {
1815 select.input-lg {
1816 height: 45px;
1816 height: 45px;
1817 line-height: 45px;
1817 line-height: 45px;
1818 }
1818 }
1819 textarea.input-lg,
1819 textarea.input-lg,
1820 select[multiple].input-lg {
1820 select[multiple].input-lg {
1821 height: auto;
1821 height: auto;
1822 }
1822 }
1823 .has-feedback {
1823 .has-feedback {
1824 position: relative;
1824 position: relative;
1825 }
1825 }
1826 .has-feedback .form-control {
1826 .has-feedback .form-control {
1827 padding-right: 40px;
1827 padding-right: 40px;
1828 }
1828 }
1829 .has-feedback .form-control-feedback {
1829 .has-feedback .form-control-feedback {
1830 position: absolute;
1830 position: absolute;
1831 top: 23px;
1831 top: 23px;
1832 right: 0;
1832 right: 0;
1833 display: block;
1833 display: block;
1834 width: 32px;
1834 width: 32px;
1835 height: 32px;
1835 height: 32px;
1836 line-height: 32px;
1836 line-height: 32px;
1837 text-align: center;
1837 text-align: center;
1838 }
1838 }
1839 .has-success .help-block,
1839 .has-success .help-block,
1840 .has-success .control-label,
1840 .has-success .control-label,
1841 .has-success .radio,
1841 .has-success .radio,
1842 .has-success .checkbox,
1842 .has-success .checkbox,
1843 .has-success .radio-inline,
1843 .has-success .radio-inline,
1844 .has-success .checkbox-inline {
1844 .has-success .checkbox-inline {
1845 color: #3c763d;
1845 color: #3c763d;
1846 }
1846 }
1847 .has-success .form-control {
1847 .has-success .form-control {
1848 border-color: #3c763d;
1848 border-color: #3c763d;
1849 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
1849 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
1850 box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
1850 box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
1851 }
1851 }
1852 .has-success .form-control:focus {
1852 .has-success .form-control:focus {
1853 border-color: #2b542c;
1853 border-color: #2b542c;
1854 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
1854 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
1855 box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
1855 box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
1856 }
1856 }
1857 .has-success .input-group-addon {
1857 .has-success .input-group-addon {
1858 color: #3c763d;
1858 color: #3c763d;
1859 border-color: #3c763d;
1859 border-color: #3c763d;
1860 background-color: #dff0d8;
1860 background-color: #dff0d8;
1861 }
1861 }
1862 .has-success .form-control-feedback {
1862 .has-success .form-control-feedback {
1863 color: #3c763d;
1863 color: #3c763d;
1864 }
1864 }
1865 .has-warning .help-block,
1865 .has-warning .help-block,
1866 .has-warning .control-label,
1866 .has-warning .control-label,
1867 .has-warning .radio,
1867 .has-warning .radio,
1868 .has-warning .checkbox,
1868 .has-warning .checkbox,
1869 .has-warning .radio-inline,
1869 .has-warning .radio-inline,
1870 .has-warning .checkbox-inline {
1870 .has-warning .checkbox-inline {
1871 color: #8a6d3b;
1871 color: #8a6d3b;
1872 }
1872 }
1873 .has-warning .form-control {
1873 .has-warning .form-control {
1874 border-color: #8a6d3b;
1874 border-color: #8a6d3b;
1875 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
1875 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
1876 box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
1876 box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
1877 }
1877 }
1878 .has-warning .form-control:focus {
1878 .has-warning .form-control:focus {
1879 border-color: #66512c;
1879 border-color: #66512c;
1880 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
1880 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
1881 box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
1881 box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
1882 }
1882 }
1883 .has-warning .input-group-addon {
1883 .has-warning .input-group-addon {
1884 color: #8a6d3b;
1884 color: #8a6d3b;
1885 border-color: #8a6d3b;
1885 border-color: #8a6d3b;
1886 background-color: #fcf8e3;
1886 background-color: #fcf8e3;
1887 }
1887 }
1888 .has-warning .form-control-feedback {
1888 .has-warning .form-control-feedback {
1889 color: #8a6d3b;
1889 color: #8a6d3b;
1890 }
1890 }
1891 .has-error .help-block,
1891 .has-error .help-block,
1892 .has-error .control-label,
1892 .has-error .control-label,
1893 .has-error .radio,
1893 .has-error .radio,
1894 .has-error .checkbox,
1894 .has-error .checkbox,
1895 .has-error .radio-inline,
1895 .has-error .radio-inline,
1896 .has-error .checkbox-inline {
1896 .has-error .checkbox-inline {
1897 color: #a94442;
1897 color: #a94442;
1898 }
1898 }
1899 .has-error .form-control {
1899 .has-error .form-control {
1900 border-color: #a94442;
1900 border-color: #a94442;
1901 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
1901 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
1902 box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
1902 box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
1903 }
1903 }
1904 .has-error .form-control:focus {
1904 .has-error .form-control:focus {
1905 border-color: #843534;
1905 border-color: #843534;
1906 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
1906 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
1907 box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
1907 box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
1908 }
1908 }
1909 .has-error .input-group-addon {
1909 .has-error .input-group-addon {
1910 color: #a94442;
1910 color: #a94442;
1911 border-color: #a94442;
1911 border-color: #a94442;
1912 background-color: #f2dede;
1912 background-color: #f2dede;
1913 }
1913 }
1914 .has-error .form-control-feedback {
1914 .has-error .form-control-feedback {
1915 color: #a94442;
1915 color: #a94442;
1916 }
1916 }
1917 .form-control-static {
1917 .form-control-static {
1918 margin-bottom: 0;
1918 margin-bottom: 0;
1919 }
1919 }
1920 .help-block {
1920 .help-block {
1921 display: block;
1921 display: block;
1922 margin-top: 5px;
1922 margin-top: 5px;
1923 margin-bottom: 10px;
1923 margin-bottom: 10px;
1924 color: #404040;
1924 color: #404040;
1925 }
1925 }
1926 @media (min-width: 768px) {
1926 @media (min-width: 768px) {
1927 .form-inline .form-group {
1927 .form-inline .form-group {
1928 display: inline-block;
1928 display: inline-block;
1929 margin-bottom: 0;
1929 margin-bottom: 0;
1930 vertical-align: middle;
1930 vertical-align: middle;
1931 }
1931 }
1932 .form-inline .form-control {
1932 .form-inline .form-control {
1933 display: inline-block;
1933 display: inline-block;
1934 width: auto;
1934 width: auto;
1935 vertical-align: middle;
1935 vertical-align: middle;
1936 }
1936 }
1937 .form-inline .input-group > .form-control {
1937 .form-inline .input-group > .form-control {
1938 width: 100%;
1938 width: 100%;
1939 }
1939 }
1940 .form-inline .control-label {
1940 .form-inline .control-label {
1941 margin-bottom: 0;
1941 margin-bottom: 0;
1942 vertical-align: middle;
1942 vertical-align: middle;
1943 }
1943 }
1944 .form-inline .radio,
1944 .form-inline .radio,
1945 .form-inline .checkbox {
1945 .form-inline .checkbox {
1946 display: inline-block;
1946 display: inline-block;
1947 margin-top: 0;
1947 margin-top: 0;
1948 margin-bottom: 0;
1948 margin-bottom: 0;
1949 padding-left: 0;
1949 padding-left: 0;
1950 vertical-align: middle;
1950 vertical-align: middle;
1951 }
1951 }
1952 .form-inline .radio input[type="radio"],
1952 .form-inline .radio input[type="radio"],
1953 .form-inline .checkbox input[type="checkbox"] {
1953 .form-inline .checkbox input[type="checkbox"] {
1954 float: none;
1954 float: none;
1955 margin-left: 0;
1955 margin-left: 0;
1956 }
1956 }
1957 .form-inline .has-feedback .form-control-feedback {
1957 .form-inline .has-feedback .form-control-feedback {
1958 top: 0;
1958 top: 0;
1959 }
1959 }
1960 }
1960 }
1961 .form-horizontal .control-label,
1961 .form-horizontal .control-label,
1962 .form-horizontal .radio,
1962 .form-horizontal .radio,
1963 .form-horizontal .checkbox,
1963 .form-horizontal .checkbox,
1964 .form-horizontal .radio-inline,
1964 .form-horizontal .radio-inline,
1965 .form-horizontal .checkbox-inline {
1965 .form-horizontal .checkbox-inline {
1966 margin-top: 0;
1966 margin-top: 0;
1967 margin-bottom: 0;
1967 margin-bottom: 0;
1968 padding-top: 7px;
1968 padding-top: 7px;
1969 }
1969 }
1970 .form-horizontal .radio,
1970 .form-horizontal .radio,
1971 .form-horizontal .checkbox {
1971 .form-horizontal .checkbox {
1972 min-height: 25px;
1972 min-height: 25px;
1973 }
1973 }
1974 .form-horizontal .form-group {
1974 .form-horizontal .form-group {
1975 margin-left: -15px;
1975 margin-left: -15px;
1976 margin-right: -15px;
1976 margin-right: -15px;
1977 }
1977 }
1978 .form-horizontal .form-control-static {
1978 .form-horizontal .form-control-static {
1979 padding-top: 7px;
1979 padding-top: 7px;
1980 }
1980 }
1981 @media (min-width: 768px) {
1981 @media (min-width: 768px) {
1982 .form-horizontal .control-label {
1982 .form-horizontal .control-label {
1983 text-align: right;
1983 text-align: right;
1984 }
1984 }
1985 }
1985 }
1986 .form-horizontal .has-feedback .form-control-feedback {
1986 .form-horizontal .has-feedback .form-control-feedback {
1987 top: 0;
1987 top: 0;
1988 right: 15px;
1988 right: 15px;
1989 }
1989 }
1990 .btn {
1990 .btn {
1991 display: inline-block;
1991 display: inline-block;
1992 margin-bottom: 0;
1992 margin-bottom: 0;
1993 font-weight: normal;
1993 font-weight: normal;
1994 text-align: center;
1994 text-align: center;
1995 vertical-align: middle;
1995 vertical-align: middle;
1996 cursor: pointer;
1996 cursor: pointer;
1997 background-image: none;
1997 background-image: none;
1998 border: 1px solid transparent;
1998 border: 1px solid transparent;
1999 white-space: nowrap;
1999 white-space: nowrap;
2000 padding: 6px 12px;
2000 padding: 6px 12px;
2001 font-size: 13px;
2001 font-size: 13px;
2002 line-height: 1.42857143;
2002 line-height: 1.42857143;
2003 border-radius: 4px;
2003 border-radius: 4px;
2004 -webkit-user-select: none;
2004 -webkit-user-select: none;
2005 -moz-user-select: none;
2005 -moz-user-select: none;
2006 -ms-user-select: none;
2006 -ms-user-select: none;
2007 user-select: none;
2007 user-select: none;
2008 }
2008 }
2009 .btn:focus,
2009 .btn:focus,
2010 .btn:active:focus,
2010 .btn:active:focus,
2011 .btn.active:focus {
2011 .btn.active:focus {
2012 outline: thin dotted;
2012 outline: thin dotted;
2013 outline: 5px auto -webkit-focus-ring-color;
2013 outline: 5px auto -webkit-focus-ring-color;
2014 outline-offset: -2px;
2014 outline-offset: -2px;
2015 }
2015 }
2016 .btn:hover,
2016 .btn:hover,
2017 .btn:focus {
2017 .btn:focus {
2018 color: #333333;
2018 color: #333333;
2019 text-decoration: none;
2019 text-decoration: none;
2020 }
2020 }
2021 .btn:active,
2021 .btn:active,
2022 .btn.active {
2022 .btn.active {
2023 outline: 0;
2023 outline: 0;
2024 background-image: none;
2024 background-image: none;
2025 -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
2025 -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
2026 box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
2026 box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
2027 }
2027 }
2028 .btn.disabled,
2028 .btn.disabled,
2029 .btn[disabled],
2029 .btn[disabled],
2030 fieldset[disabled] .btn {
2030 fieldset[disabled] .btn {
2031 cursor: not-allowed;
2031 cursor: not-allowed;
2032 pointer-events: none;
2032 pointer-events: none;
2033 opacity: 0.65;
2033 opacity: 0.65;
2034 filter: alpha(opacity=65);
2034 filter: alpha(opacity=65);
2035 -webkit-box-shadow: none;
2035 -webkit-box-shadow: none;
2036 box-shadow: none;
2036 box-shadow: none;
2037 }
2037 }
2038 .btn-default {
2038 .btn-default {
2039 color: #333333;
2039 color: #333333;
2040 background-color: #ffffff;
2040 background-color: #ffffff;
2041 border-color: #cccccc;
2041 border-color: #cccccc;
2042 }
2042 }
2043 .btn-default:hover,
2043 .btn-default:hover,
2044 .btn-default:focus,
2044 .btn-default:focus,
2045 .btn-default:active,
2045 .btn-default:active,
2046 .btn-default.active,
2046 .btn-default.active,
2047 .open .dropdown-toggle.btn-default {
2047 .open .dropdown-toggle.btn-default {
2048 color: #333333;
2048 color: #333333;
2049 background-color: #ebebeb;
2049 background-color: #ebebeb;
2050 border-color: #adadad;
2050 border-color: #adadad;
2051 }
2051 }
2052 .btn-default:active,
2052 .btn-default:active,
2053 .btn-default.active,
2053 .btn-default.active,
2054 .open .dropdown-toggle.btn-default {
2054 .open .dropdown-toggle.btn-default {
2055 background-image: none;
2055 background-image: none;
2056 }
2056 }
2057 .btn-default.disabled,
2057 .btn-default.disabled,
2058 .btn-default[disabled],
2058 .btn-default[disabled],
2059 fieldset[disabled] .btn-default,
2059 fieldset[disabled] .btn-default,
2060 .btn-default.disabled:hover,
2060 .btn-default.disabled:hover,
2061 .btn-default[disabled]:hover,
2061 .btn-default[disabled]:hover,
2062 fieldset[disabled] .btn-default:hover,
2062 fieldset[disabled] .btn-default:hover,
2063 .btn-default.disabled:focus,
2063 .btn-default.disabled:focus,
2064 .btn-default[disabled]:focus,
2064 .btn-default[disabled]:focus,
2065 fieldset[disabled] .btn-default:focus,
2065 fieldset[disabled] .btn-default:focus,
2066 .btn-default.disabled:active,
2066 .btn-default.disabled:active,
2067 .btn-default[disabled]:active,
2067 .btn-default[disabled]:active,
2068 fieldset[disabled] .btn-default:active,
2068 fieldset[disabled] .btn-default:active,
2069 .btn-default.disabled.active,
2069 .btn-default.disabled.active,
2070 .btn-default[disabled].active,
2070 .btn-default[disabled].active,
2071 fieldset[disabled] .btn-default.active {
2071 fieldset[disabled] .btn-default.active {
2072 background-color: #ffffff;
2072 background-color: #ffffff;
2073 border-color: #cccccc;
2073 border-color: #cccccc;
2074 }
2074 }
2075 .btn-default .badge {
2075 .btn-default .badge {
2076 color: #ffffff;
2076 color: #ffffff;
2077 background-color: #333333;
2077 background-color: #333333;
2078 }
2078 }
2079 .btn-primary {
2079 .btn-primary {
2080 color: #ffffff;
2080 color: #ffffff;
2081 background-color: #428bca;
2081 background-color: #428bca;
2082 border-color: #357ebd;
2082 border-color: #357ebd;
2083 }
2083 }
2084 .btn-primary:hover,
2084 .btn-primary:hover,
2085 .btn-primary:focus,
2085 .btn-primary:focus,
2086 .btn-primary:active,
2086 .btn-primary:active,
2087 .btn-primary.active,
2087 .btn-primary.active,
2088 .open .dropdown-toggle.btn-primary {
2088 .open .dropdown-toggle.btn-primary {
2089 color: #ffffff;
2089 color: #ffffff;
2090 background-color: #3276b1;
2090 background-color: #3276b1;
2091 border-color: #285e8e;
2091 border-color: #285e8e;
2092 }
2092 }
2093 .btn-primary:active,
2093 .btn-primary:active,
2094 .btn-primary.active,
2094 .btn-primary.active,
2095 .open .dropdown-toggle.btn-primary {
2095 .open .dropdown-toggle.btn-primary {
2096 background-image: none;
2096 background-image: none;
2097 }
2097 }
2098 .btn-primary.disabled,
2098 .btn-primary.disabled,
2099 .btn-primary[disabled],
2099 .btn-primary[disabled],
2100 fieldset[disabled] .btn-primary,
2100 fieldset[disabled] .btn-primary,
2101 .btn-primary.disabled:hover,
2101 .btn-primary.disabled:hover,
2102 .btn-primary[disabled]:hover,
2102 .btn-primary[disabled]:hover,
2103 fieldset[disabled] .btn-primary:hover,
2103 fieldset[disabled] .btn-primary:hover,
2104 .btn-primary.disabled:focus,
2104 .btn-primary.disabled:focus,
2105 .btn-primary[disabled]:focus,
2105 .btn-primary[disabled]:focus,
2106 fieldset[disabled] .btn-primary:focus,
2106 fieldset[disabled] .btn-primary:focus,
2107 .btn-primary.disabled:active,
2107 .btn-primary.disabled:active,
2108 .btn-primary[disabled]:active,
2108 .btn-primary[disabled]:active,
2109 fieldset[disabled] .btn-primary:active,
2109 fieldset[disabled] .btn-primary:active,
2110 .btn-primary.disabled.active,
2110 .btn-primary.disabled.active,
2111 .btn-primary[disabled].active,
2111 .btn-primary[disabled].active,
2112 fieldset[disabled] .btn-primary.active {
2112 fieldset[disabled] .btn-primary.active {
2113 background-color: #428bca;
2113 background-color: #428bca;
2114 border-color: #357ebd;
2114 border-color: #357ebd;
2115 }
2115 }
2116 .btn-primary .badge {
2116 .btn-primary .badge {
2117 color: #428bca;
2117 color: #428bca;
2118 background-color: #ffffff;
2118 background-color: #ffffff;
2119 }
2119 }
2120 .btn-success {
2120 .btn-success {
2121 color: #ffffff;
2121 color: #ffffff;
2122 background-color: #5cb85c;
2122 background-color: #5cb85c;
2123 border-color: #4cae4c;
2123 border-color: #4cae4c;
2124 }
2124 }
2125 .btn-success:hover,
2125 .btn-success:hover,
2126 .btn-success:focus,
2126 .btn-success:focus,
2127 .btn-success:active,
2127 .btn-success:active,
2128 .btn-success.active,
2128 .btn-success.active,
2129 .open .dropdown-toggle.btn-success {
2129 .open .dropdown-toggle.btn-success {
2130 color: #ffffff;
2130 color: #ffffff;
2131 background-color: #47a447;
2131 background-color: #47a447;
2132 border-color: #398439;
2132 border-color: #398439;
2133 }
2133 }
2134 .btn-success:active,
2134 .btn-success:active,
2135 .btn-success.active,
2135 .btn-success.active,
2136 .open .dropdown-toggle.btn-success {
2136 .open .dropdown-toggle.btn-success {
2137 background-image: none;
2137 background-image: none;
2138 }
2138 }
2139 .btn-success.disabled,
2139 .btn-success.disabled,
2140 .btn-success[disabled],
2140 .btn-success[disabled],
2141 fieldset[disabled] .btn-success,
2141 fieldset[disabled] .btn-success,
2142 .btn-success.disabled:hover,
2142 .btn-success.disabled:hover,
2143 .btn-success[disabled]:hover,
2143 .btn-success[disabled]:hover,
2144 fieldset[disabled] .btn-success:hover,
2144 fieldset[disabled] .btn-success:hover,
2145 .btn-success.disabled:focus,
2145 .btn-success.disabled:focus,
2146 .btn-success[disabled]:focus,
2146 .btn-success[disabled]:focus,
2147 fieldset[disabled] .btn-success:focus,
2147 fieldset[disabled] .btn-success:focus,
2148 .btn-success.disabled:active,
2148 .btn-success.disabled:active,
2149 .btn-success[disabled]:active,
2149 .btn-success[disabled]:active,
2150 fieldset[disabled] .btn-success:active,
2150 fieldset[disabled] .btn-success:active,
2151 .btn-success.disabled.active,
2151 .btn-success.disabled.active,
2152 .btn-success[disabled].active,
2152 .btn-success[disabled].active,
2153 fieldset[disabled] .btn-success.active {
2153 fieldset[disabled] .btn-success.active {
2154 background-color: #5cb85c;
2154 background-color: #5cb85c;
2155 border-color: #4cae4c;
2155 border-color: #4cae4c;
2156 }
2156 }
2157 .btn-success .badge {
2157 .btn-success .badge {
2158 color: #5cb85c;
2158 color: #5cb85c;
2159 background-color: #ffffff;
2159 background-color: #ffffff;
2160 }
2160 }
2161 .btn-info {
2161 .btn-info {
2162 color: #ffffff;
2162 color: #ffffff;
2163 background-color: #5bc0de;
2163 background-color: #5bc0de;
2164 border-color: #46b8da;
2164 border-color: #46b8da;
2165 }
2165 }
2166 .btn-info:hover,
2166 .btn-info:hover,
2167 .btn-info:focus,
2167 .btn-info:focus,
2168 .btn-info:active,
2168 .btn-info:active,
2169 .btn-info.active,
2169 .btn-info.active,
2170 .open .dropdown-toggle.btn-info {
2170 .open .dropdown-toggle.btn-info {
2171 color: #ffffff;
2171 color: #ffffff;
2172 background-color: #39b3d7;
2172 background-color: #39b3d7;
2173 border-color: #269abc;
2173 border-color: #269abc;
2174 }
2174 }
2175 .btn-info:active,
2175 .btn-info:active,
2176 .btn-info.active,
2176 .btn-info.active,
2177 .open .dropdown-toggle.btn-info {
2177 .open .dropdown-toggle.btn-info {
2178 background-image: none;
2178 background-image: none;
2179 }
2179 }
2180 .btn-info.disabled,
2180 .btn-info.disabled,
2181 .btn-info[disabled],
2181 .btn-info[disabled],
2182 fieldset[disabled] .btn-info,
2182 fieldset[disabled] .btn-info,
2183 .btn-info.disabled:hover,
2183 .btn-info.disabled:hover,
2184 .btn-info[disabled]:hover,
2184 .btn-info[disabled]:hover,
2185 fieldset[disabled] .btn-info:hover,
2185 fieldset[disabled] .btn-info:hover,
2186 .btn-info.disabled:focus,
2186 .btn-info.disabled:focus,
2187 .btn-info[disabled]:focus,
2187 .btn-info[disabled]:focus,
2188 fieldset[disabled] .btn-info:focus,
2188 fieldset[disabled] .btn-info:focus,
2189 .btn-info.disabled:active,
2189 .btn-info.disabled:active,
2190 .btn-info[disabled]:active,
2190 .btn-info[disabled]:active,
2191 fieldset[disabled] .btn-info:active,
2191 fieldset[disabled] .btn-info:active,
2192 .btn-info.disabled.active,
2192 .btn-info.disabled.active,
2193 .btn-info[disabled].active,
2193 .btn-info[disabled].active,
2194 fieldset[disabled] .btn-info.active {
2194 fieldset[disabled] .btn-info.active {
2195 background-color: #5bc0de;
2195 background-color: #5bc0de;
2196 border-color: #46b8da;
2196 border-color: #46b8da;
2197 }
2197 }
2198 .btn-info .badge {
2198 .btn-info .badge {
2199 color: #5bc0de;
2199 color: #5bc0de;
2200 background-color: #ffffff;
2200 background-color: #ffffff;
2201 }
2201 }
2202 .btn-warning {
2202 .btn-warning {
2203 color: #ffffff;
2203 color: #ffffff;
2204 background-color: #f0ad4e;
2204 background-color: #f0ad4e;
2205 border-color: #eea236;
2205 border-color: #eea236;
2206 }
2206 }
2207 .btn-warning:hover,
2207 .btn-warning:hover,
2208 .btn-warning:focus,
2208 .btn-warning:focus,
2209 .btn-warning:active,
2209 .btn-warning:active,
2210 .btn-warning.active,
2210 .btn-warning.active,
2211 .open .dropdown-toggle.btn-warning {
2211 .open .dropdown-toggle.btn-warning {
2212 color: #ffffff;
2212 color: #ffffff;
2213 background-color: #ed9c28;
2213 background-color: #ed9c28;
2214 border-color: #d58512;
2214 border-color: #d58512;
2215 }
2215 }
2216 .btn-warning:active,
2216 .btn-warning:active,
2217 .btn-warning.active,
2217 .btn-warning.active,
2218 .open .dropdown-toggle.btn-warning {
2218 .open .dropdown-toggle.btn-warning {
2219 background-image: none;
2219 background-image: none;
2220 }
2220 }
2221 .btn-warning.disabled,
2221 .btn-warning.disabled,
2222 .btn-warning[disabled],
2222 .btn-warning[disabled],
2223 fieldset[disabled] .btn-warning,
2223 fieldset[disabled] .btn-warning,
2224 .btn-warning.disabled:hover,
2224 .btn-warning.disabled:hover,
2225 .btn-warning[disabled]:hover,
2225 .btn-warning[disabled]:hover,
2226 fieldset[disabled] .btn-warning:hover,
2226 fieldset[disabled] .btn-warning:hover,
2227 .btn-warning.disabled:focus,
2227 .btn-warning.disabled:focus,
2228 .btn-warning[disabled]:focus,
2228 .btn-warning[disabled]:focus,
2229 fieldset[disabled] .btn-warning:focus,
2229 fieldset[disabled] .btn-warning:focus,
2230 .btn-warning.disabled:active,
2230 .btn-warning.disabled:active,
2231 .btn-warning[disabled]:active,
2231 .btn-warning[disabled]:active,
2232 fieldset[disabled] .btn-warning:active,
2232 fieldset[disabled] .btn-warning:active,
2233 .btn-warning.disabled.active,
2233 .btn-warning.disabled.active,
2234 .btn-warning[disabled].active,
2234 .btn-warning[disabled].active,
2235 fieldset[disabled] .btn-warning.active {
2235 fieldset[disabled] .btn-warning.active {
2236 background-color: #f0ad4e;
2236 background-color: #f0ad4e;
2237 border-color: #eea236;
2237 border-color: #eea236;
2238 }
2238 }
2239 .btn-warning .badge {
2239 .btn-warning .badge {
2240 color: #f0ad4e;
2240 color: #f0ad4e;
2241 background-color: #ffffff;
2241 background-color: #ffffff;
2242 }
2242 }
2243 .btn-danger {
2243 .btn-danger {
2244 color: #ffffff;
2244 color: #ffffff;
2245 background-color: #d9534f;
2245 background-color: #d9534f;
2246 border-color: #d43f3a;
2246 border-color: #d43f3a;
2247 }
2247 }
2248 .btn-danger:hover,
2248 .btn-danger:hover,
2249 .btn-danger:focus,
2249 .btn-danger:focus,
2250 .btn-danger:active,
2250 .btn-danger:active,
2251 .btn-danger.active,
2251 .btn-danger.active,
2252 .open .dropdown-toggle.btn-danger {
2252 .open .dropdown-toggle.btn-danger {
2253 color: #ffffff;
2253 color: #ffffff;
2254 background-color: #d2322d;
2254 background-color: #d2322d;
2255 border-color: #ac2925;
2255 border-color: #ac2925;
2256 }
2256 }
2257 .btn-danger:active,
2257 .btn-danger:active,
2258 .btn-danger.active,
2258 .btn-danger.active,
2259 .open .dropdown-toggle.btn-danger {
2259 .open .dropdown-toggle.btn-danger {
2260 background-image: none;
2260 background-image: none;
2261 }
2261 }
2262 .btn-danger.disabled,
2262 .btn-danger.disabled,
2263 .btn-danger[disabled],
2263 .btn-danger[disabled],
2264 fieldset[disabled] .btn-danger,
2264 fieldset[disabled] .btn-danger,
2265 .btn-danger.disabled:hover,
2265 .btn-danger.disabled:hover,
2266 .btn-danger[disabled]:hover,
2266 .btn-danger[disabled]:hover,
2267 fieldset[disabled] .btn-danger:hover,
2267 fieldset[disabled] .btn-danger:hover,
2268 .btn-danger.disabled:focus,
2268 .btn-danger.disabled:focus,
2269 .btn-danger[disabled]:focus,
2269 .btn-danger[disabled]:focus,
2270 fieldset[disabled] .btn-danger:focus,
2270 fieldset[disabled] .btn-danger:focus,
2271 .btn-danger.disabled:active,
2271 .btn-danger.disabled:active,
2272 .btn-danger[disabled]:active,
2272 .btn-danger[disabled]:active,
2273 fieldset[disabled] .btn-danger:active,
2273 fieldset[disabled] .btn-danger:active,
2274 .btn-danger.disabled.active,
2274 .btn-danger.disabled.active,
2275 .btn-danger[disabled].active,
2275 .btn-danger[disabled].active,
2276 fieldset[disabled] .btn-danger.active {
2276 fieldset[disabled] .btn-danger.active {
2277 background-color: #d9534f;
2277 background-color: #d9534f;
2278 border-color: #d43f3a;
2278 border-color: #d43f3a;
2279 }
2279 }
2280 .btn-danger .badge {
2280 .btn-danger .badge {
2281 color: #d9534f;
2281 color: #d9534f;
2282 background-color: #ffffff;
2282 background-color: #ffffff;
2283 }
2283 }
2284 .btn-link {
2284 .btn-link {
2285 color: #428bca;
2285 color: #428bca;
2286 font-weight: normal;
2286 font-weight: normal;
2287 cursor: pointer;
2287 cursor: pointer;
2288 border-radius: 0;
2288 border-radius: 0;
2289 }
2289 }
2290 .btn-link,
2290 .btn-link,
2291 .btn-link:active,
2291 .btn-link:active,
2292 .btn-link[disabled],
2292 .btn-link[disabled],
2293 fieldset[disabled] .btn-link {
2293 fieldset[disabled] .btn-link {
2294 background-color: transparent;
2294 background-color: transparent;
2295 -webkit-box-shadow: none;
2295 -webkit-box-shadow: none;
2296 box-shadow: none;
2296 box-shadow: none;
2297 }
2297 }
2298 .btn-link,
2298 .btn-link,
2299 .btn-link:hover,
2299 .btn-link:hover,
2300 .btn-link:focus,
2300 .btn-link:focus,
2301 .btn-link:active {
2301 .btn-link:active {
2302 border-color: transparent;
2302 border-color: transparent;
2303 }
2303 }
2304 .btn-link:hover,
2304 .btn-link:hover,
2305 .btn-link:focus {
2305 .btn-link:focus {
2306 color: #2a6496;
2306 color: #2a6496;
2307 text-decoration: underline;
2307 text-decoration: underline;
2308 background-color: transparent;
2308 background-color: transparent;
2309 }
2309 }
2310 .btn-link[disabled]:hover,
2310 .btn-link[disabled]:hover,
2311 fieldset[disabled] .btn-link:hover,
2311 fieldset[disabled] .btn-link:hover,
2312 .btn-link[disabled]:focus,
2312 .btn-link[disabled]:focus,
2313 fieldset[disabled] .btn-link:focus {
2313 fieldset[disabled] .btn-link:focus {
2314 color: #999999;
2314 color: #999999;
2315 text-decoration: none;
2315 text-decoration: none;
2316 }
2316 }
2317 .btn-lg,
2317 .btn-lg,
2318 .btn-group-lg > .btn {
2318 .btn-group-lg > .btn {
2319 padding: 10px 16px;
2319 padding: 10px 16px;
2320 font-size: 17px;
2320 font-size: 17px;
2321 line-height: 1.33;
2321 line-height: 1.33;
2322 border-radius: 6px;
2322 border-radius: 6px;
2323 }
2323 }
2324 .btn-sm,
2324 .btn-sm,
2325 .btn-group-sm > .btn {
2325 .btn-group-sm > .btn {
2326 padding: 5px 10px;
2326 padding: 5px 10px;
2327 font-size: 12px;
2327 font-size: 12px;
2328 line-height: 1.5;
2328 line-height: 1.5;
2329 border-radius: 3px;
2329 border-radius: 3px;
2330 }
2330 }
2331 .btn-xs,
2331 .btn-xs,
2332 .btn-group-xs > .btn {
2332 .btn-group-xs > .btn {
2333 padding: 1px 5px;
2333 padding: 1px 5px;
2334 font-size: 12px;
2334 font-size: 12px;
2335 line-height: 1.5;
2335 line-height: 1.5;
2336 border-radius: 3px;
2336 border-radius: 3px;
2337 }
2337 }
2338 .btn-block {
2338 .btn-block {
2339 display: block;
2339 display: block;
2340 width: 100%;
2340 width: 100%;
2341 padding-left: 0;
2341 padding-left: 0;
2342 padding-right: 0;
2342 padding-right: 0;
2343 }
2343 }
2344 .btn-block + .btn-block {
2344 .btn-block + .btn-block {
2345 margin-top: 5px;
2345 margin-top: 5px;
2346 }
2346 }
2347 input[type="submit"].btn-block,
2347 input[type="submit"].btn-block,
2348 input[type="reset"].btn-block,
2348 input[type="reset"].btn-block,
2349 input[type="button"].btn-block {
2349 input[type="button"].btn-block {
2350 width: 100%;
2350 width: 100%;
2351 }
2351 }
2352 .fade {
2352 .fade {
2353 opacity: 0;
2353 opacity: 0;
2354 -webkit-transition: opacity 0.15s linear;
2354 -webkit-transition: opacity 0.15s linear;
2355 transition: opacity 0.15s linear;
2355 transition: opacity 0.15s linear;
2356 }
2356 }
2357 .fade.in {
2357 .fade.in {
2358 opacity: 1;
2358 opacity: 1;
2359 }
2359 }
2360 .collapse {
2360 .collapse {
2361 display: none;
2361 display: none;
2362 }
2362 }
2363 .collapse.in {
2363 .collapse.in {
2364 display: block;
2364 display: block;
2365 }
2365 }
2366 .collapsing {
2366 .collapsing {
2367 position: relative;
2367 position: relative;
2368 height: 0;
2368 height: 0;
2369 overflow: hidden;
2369 overflow: hidden;
2370 -webkit-transition: height 0.35s ease;
2370 -webkit-transition: height 0.35s ease;
2371 transition: height 0.35s ease;
2371 transition: height 0.35s ease;
2372 }
2372 }
2373 @font-face {
2373 @font-face {
2374 font-family: 'Glyphicons Halflings';
2374 font-family: 'Glyphicons Halflings';
2375 src: url('../fonts/glyphicons-halflings-regular.eot');
2375 src: url('../fonts/glyphicons-halflings-regular.eot');
2376 src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
2376 src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
2377 }
2377 }
2378 .glyphicon {
2378 .glyphicon {
2379 position: relative;
2379 position: relative;
2380 top: 1px;
2380 top: 1px;
2381 display: inline-block;
2381 display: inline-block;
2382 font-family: 'Glyphicons Halflings';
2382 font-family: 'Glyphicons Halflings';
2383 font-style: normal;
2383 font-style: normal;
2384 font-weight: normal;
2384 font-weight: normal;
2385 line-height: 1;
2385 line-height: 1;
2386 -webkit-font-smoothing: antialiased;
2386 -webkit-font-smoothing: antialiased;
2387 -moz-osx-font-smoothing: grayscale;
2387 -moz-osx-font-smoothing: grayscale;
2388 }
2388 }
2389 .glyphicon-asterisk:before {
2389 .glyphicon-asterisk:before {
2390 content: "\2a";
2390 content: "\2a";
2391 }
2391 }
2392 .glyphicon-plus:before {
2392 .glyphicon-plus:before {
2393 content: "\2b";
2393 content: "\2b";
2394 }
2394 }
2395 .glyphicon-euro:before {
2395 .glyphicon-euro:before {
2396 content: "\20ac";
2396 content: "\20ac";
2397 }
2397 }
2398 .glyphicon-minus:before {
2398 .glyphicon-minus:before {
2399 content: "\2212";
2399 content: "\2212";
2400 }
2400 }
2401 .glyphicon-cloud:before {
2401 .glyphicon-cloud:before {
2402 content: "\2601";
2402 content: "\2601";
2403 }
2403 }
2404 .glyphicon-envelope:before {
2404 .glyphicon-envelope:before {
2405 content: "\2709";
2405 content: "\2709";
2406 }
2406 }
2407 .glyphicon-pencil:before {
2407 .glyphicon-pencil:before {
2408 content: "\270f";
2408 content: "\270f";
2409 }
2409 }
2410 .glyphicon-glass:before {
2410 .glyphicon-glass:before {
2411 content: "\e001";
2411 content: "\e001";
2412 }
2412 }
2413 .glyphicon-music:before {
2413 .glyphicon-music:before {
2414 content: "\e002";
2414 content: "\e002";
2415 }
2415 }
2416 .glyphicon-search:before {
2416 .glyphicon-search:before {
2417 content: "\e003";
2417 content: "\e003";
2418 }
2418 }
2419 .glyphicon-heart:before {
2419 .glyphicon-heart:before {
2420 content: "\e005";
2420 content: "\e005";
2421 }
2421 }
2422 .glyphicon-star:before {
2422 .glyphicon-star:before {
2423 content: "\e006";
2423 content: "\e006";
2424 }
2424 }
2425 .glyphicon-star-empty:before {
2425 .glyphicon-star-empty:before {
2426 content: "\e007";
2426 content: "\e007";
2427 }
2427 }
2428 .glyphicon-user:before {
2428 .glyphicon-user:before {
2429 content: "\e008";
2429 content: "\e008";
2430 }
2430 }
2431 .glyphicon-film:before {
2431 .glyphicon-film:before {
2432 content: "\e009";
2432 content: "\e009";
2433 }
2433 }
2434 .glyphicon-th-large:before {
2434 .glyphicon-th-large:before {
2435 content: "\e010";
2435 content: "\e010";
2436 }
2436 }
2437 .glyphicon-th:before {
2437 .glyphicon-th:before {
2438 content: "\e011";
2438 content: "\e011";
2439 }
2439 }
2440 .glyphicon-th-list:before {
2440 .glyphicon-th-list:before {
2441 content: "\e012";
2441 content: "\e012";
2442 }
2442 }
2443 .glyphicon-ok:before {
2443 .glyphicon-ok:before {
2444 content: "\e013";
2444 content: "\e013";
2445 }
2445 }
2446 .glyphicon-remove:before {
2446 .glyphicon-remove:before {
2447 content: "\e014";
2447 content: "\e014";
2448 }
2448 }
2449 .glyphicon-zoom-in:before {
2449 .glyphicon-zoom-in:before {
2450 content: "\e015";
2450 content: "\e015";
2451 }
2451 }
2452 .glyphicon-zoom-out:before {
2452 .glyphicon-zoom-out:before {
2453 content: "\e016";
2453 content: "\e016";
2454 }
2454 }
2455 .glyphicon-off:before {
2455 .glyphicon-off:before {
2456 content: "\e017";
2456 content: "\e017";
2457 }
2457 }
2458 .glyphicon-signal:before {
2458 .glyphicon-signal:before {
2459 content: "\e018";
2459 content: "\e018";
2460 }
2460 }
2461 .glyphicon-cog:before {
2461 .glyphicon-cog:before {
2462 content: "\e019";
2462 content: "\e019";
2463 }
2463 }
2464 .glyphicon-trash:before {
2464 .glyphicon-trash:before {
2465 content: "\e020";
2465 content: "\e020";
2466 }
2466 }
2467 .glyphicon-home:before {
2467 .glyphicon-home:before {
2468 content: "\e021";
2468 content: "\e021";
2469 }
2469 }
2470 .glyphicon-file:before {
2470 .glyphicon-file:before {
2471 content: "\e022";
2471 content: "\e022";
2472 }
2472 }
2473 .glyphicon-time:before {
2473 .glyphicon-time:before {
2474 content: "\e023";
2474 content: "\e023";
2475 }
2475 }
2476 .glyphicon-road:before {
2476 .glyphicon-road:before {
2477 content: "\e024";
2477 content: "\e024";
2478 }
2478 }
2479 .glyphicon-download-alt:before {
2479 .glyphicon-download-alt:before {
2480 content: "\e025";
2480 content: "\e025";
2481 }
2481 }
2482 .glyphicon-download:before {
2482 .glyphicon-download:before {
2483 content: "\e026";
2483 content: "\e026";
2484 }
2484 }
2485 .glyphicon-upload:before {
2485 .glyphicon-upload:before {
2486 content: "\e027";
2486 content: "\e027";
2487 }
2487 }
2488 .glyphicon-inbox:before {
2488 .glyphicon-inbox:before {
2489 content: "\e028";
2489 content: "\e028";
2490 }
2490 }
2491 .glyphicon-play-circle:before {
2491 .glyphicon-play-circle:before {
2492 content: "\e029";
2492 content: "\e029";
2493 }
2493 }
2494 .glyphicon-repeat:before {
2494 .glyphicon-repeat:before {
2495 content: "\e030";
2495 content: "\e030";
2496 }
2496 }
2497 .glyphicon-refresh:before {
2497 .glyphicon-refresh:before {
2498 content: "\e031";
2498 content: "\e031";
2499 }
2499 }
2500 .glyphicon-list-alt:before {
2500 .glyphicon-list-alt:before {
2501 content: "\e032";
2501 content: "\e032";
2502 }
2502 }
2503 .glyphicon-lock:before {
2503 .glyphicon-lock:before {
2504 content: "\e033";
2504 content: "\e033";
2505 }
2505 }
2506 .glyphicon-flag:before {
2506 .glyphicon-flag:before {
2507 content: "\e034";
2507 content: "\e034";
2508 }
2508 }
2509 .glyphicon-headphones:before {
2509 .glyphicon-headphones:before {
2510 content: "\e035";
2510 content: "\e035";
2511 }
2511 }
2512 .glyphicon-volume-off:before {
2512 .glyphicon-volume-off:before {
2513 content: "\e036";
2513 content: "\e036";
2514 }
2514 }
2515 .glyphicon-volume-down:before {
2515 .glyphicon-volume-down:before {
2516 content: "\e037";
2516 content: "\e037";
2517 }
2517 }
2518 .glyphicon-volume-up:before {
2518 .glyphicon-volume-up:before {
2519 content: "\e038";
2519 content: "\e038";
2520 }
2520 }
2521 .glyphicon-qrcode:before {
2521 .glyphicon-qrcode:before {
2522 content: "\e039";
2522 content: "\e039";
2523 }
2523 }
2524 .glyphicon-barcode:before {
2524 .glyphicon-barcode:before {
2525 content: "\e040";
2525 content: "\e040";
2526 }
2526 }
2527 .glyphicon-tag:before {
2527 .glyphicon-tag:before {
2528 content: "\e041";
2528 content: "\e041";
2529 }
2529 }
2530 .glyphicon-tags:before {
2530 .glyphicon-tags:before {
2531 content: "\e042";
2531 content: "\e042";
2532 }
2532 }
2533 .glyphicon-book:before {
2533 .glyphicon-book:before {
2534 content: "\e043";
2534 content: "\e043";
2535 }
2535 }
2536 .glyphicon-bookmark:before {
2536 .glyphicon-bookmark:before {
2537 content: "\e044";
2537 content: "\e044";
2538 }
2538 }
2539 .glyphicon-print:before {
2539 .glyphicon-print:before {
2540 content: "\e045";
2540 content: "\e045";
2541 }
2541 }
2542 .glyphicon-camera:before {
2542 .glyphicon-camera:before {
2543 content: "\e046";
2543 content: "\e046";
2544 }
2544 }
2545 .glyphicon-font:before {
2545 .glyphicon-font:before {
2546 content: "\e047";
2546 content: "\e047";
2547 }
2547 }
2548 .glyphicon-bold:before {
2548 .glyphicon-bold:before {
2549 content: "\e048";
2549 content: "\e048";
2550 }
2550 }
2551 .glyphicon-italic:before {
2551 .glyphicon-italic:before {
2552 content: "\e049";
2552 content: "\e049";
2553 }
2553 }
2554 .glyphicon-text-height:before {
2554 .glyphicon-text-height:before {
2555 content: "\e050";
2555 content: "\e050";
2556 }
2556 }
2557 .glyphicon-text-width:before {
2557 .glyphicon-text-width:before {
2558 content: "\e051";
2558 content: "\e051";
2559 }
2559 }
2560 .glyphicon-align-left:before {
2560 .glyphicon-align-left:before {
2561 content: "\e052";
2561 content: "\e052";
2562 }
2562 }
2563 .glyphicon-align-center:before {
2563 .glyphicon-align-center:before {
2564 content: "\e053";
2564 content: "\e053";
2565 }
2565 }
2566 .glyphicon-align-right:before {
2566 .glyphicon-align-right:before {
2567 content: "\e054";
2567 content: "\e054";
2568 }
2568 }
2569 .glyphicon-align-justify:before {
2569 .glyphicon-align-justify:before {
2570 content: "\e055";
2570 content: "\e055";
2571 }
2571 }
2572 .glyphicon-list:before {
2572 .glyphicon-list:before {
2573 content: "\e056";
2573 content: "\e056";
2574 }
2574 }
2575 .glyphicon-indent-left:before {
2575 .glyphicon-indent-left:before {
2576 content: "\e057";
2576 content: "\e057";
2577 }
2577 }
2578 .glyphicon-indent-right:before {
2578 .glyphicon-indent-right:before {
2579 content: "\e058";
2579 content: "\e058";
2580 }
2580 }
2581 .glyphicon-facetime-video:before {
2581 .glyphicon-facetime-video:before {
2582 content: "\e059";
2582 content: "\e059";
2583 }
2583 }
2584 .glyphicon-picture:before {
2584 .glyphicon-picture:before {
2585 content: "\e060";
2585 content: "\e060";
2586 }
2586 }
2587 .glyphicon-map-marker:before {
2587 .glyphicon-map-marker:before {
2588 content: "\e062";
2588 content: "\e062";
2589 }
2589 }
2590 .glyphicon-adjust:before {
2590 .glyphicon-adjust:before {
2591 content: "\e063";
2591 content: "\e063";
2592 }
2592 }
2593 .glyphicon-tint:before {
2593 .glyphicon-tint:before {
2594 content: "\e064";
2594 content: "\e064";
2595 }
2595 }
2596 .glyphicon-edit:before {
2596 .glyphicon-edit:before {
2597 content: "\e065";
2597 content: "\e065";
2598 }
2598 }
2599 .glyphicon-share:before {
2599 .glyphicon-share:before {
2600 content: "\e066";
2600 content: "\e066";
2601 }
2601 }
2602 .glyphicon-check:before {
2602 .glyphicon-check:before {
2603 content: "\e067";
2603 content: "\e067";
2604 }
2604 }
2605 .glyphicon-move:before {
2605 .glyphicon-move:before {
2606 content: "\e068";
2606 content: "\e068";
2607 }
2607 }
2608 .glyphicon-step-backward:before {
2608 .glyphicon-step-backward:before {
2609 content: "\e069";
2609 content: "\e069";
2610 }
2610 }
2611 .glyphicon-fast-backward:before {
2611 .glyphicon-fast-backward:before {
2612 content: "\e070";
2612 content: "\e070";
2613 }
2613 }
2614 .glyphicon-backward:before {
2614 .glyphicon-backward:before {
2615 content: "\e071";
2615 content: "\e071";
2616 }
2616 }
2617 .glyphicon-play:before {
2617 .glyphicon-play:before {
2618 content: "\e072";
2618 content: "\e072";
2619 }
2619 }
2620 .glyphicon-pause:before {
2620 .glyphicon-pause:before {
2621 content: "\e073";
2621 content: "\e073";
2622 }
2622 }
2623 .glyphicon-stop:before {
2623 .glyphicon-stop:before {
2624 content: "\e074";
2624 content: "\e074";
2625 }
2625 }
2626 .glyphicon-forward:before {
2626 .glyphicon-forward:before {
2627 content: "\e075";
2627 content: "\e075";
2628 }
2628 }
2629 .glyphicon-fast-forward:before {
2629 .glyphicon-fast-forward:before {
2630 content: "\e076";
2630 content: "\e076";
2631 }
2631 }
2632 .glyphicon-step-forward:before {
2632 .glyphicon-step-forward:before {
2633 content: "\e077";
2633 content: "\e077";
2634 }
2634 }
2635 .glyphicon-eject:before {
2635 .glyphicon-eject:before {
2636 content: "\e078";
2636 content: "\e078";
2637 }
2637 }
2638 .glyphicon-chevron-left:before {
2638 .glyphicon-chevron-left:before {
2639 content: "\e079";
2639 content: "\e079";
2640 }
2640 }
2641 .glyphicon-chevron-right:before {
2641 .glyphicon-chevron-right:before {
2642 content: "\e080";
2642 content: "\e080";
2643 }
2643 }
2644 .glyphicon-plus-sign:before {
2644 .glyphicon-plus-sign:before {
2645 content: "\e081";
2645 content: "\e081";
2646 }
2646 }
2647 .glyphicon-minus-sign:before {
2647 .glyphicon-minus-sign:before {
2648 content: "\e082";
2648 content: "\e082";
2649 }
2649 }
2650 .glyphicon-remove-sign:before {
2650 .glyphicon-remove-sign:before {
2651 content: "\e083";
2651 content: "\e083";
2652 }
2652 }
2653 .glyphicon-ok-sign:before {
2653 .glyphicon-ok-sign:before {
2654 content: "\e084";
2654 content: "\e084";
2655 }
2655 }
2656 .glyphicon-question-sign:before {
2656 .glyphicon-question-sign:before {
2657 content: "\e085";
2657 content: "\e085";
2658 }
2658 }
2659 .glyphicon-info-sign:before {
2659 .glyphicon-info-sign:before {
2660 content: "\e086";
2660 content: "\e086";
2661 }
2661 }
2662 .glyphicon-screenshot:before {
2662 .glyphicon-screenshot:before {
2663 content: "\e087";
2663 content: "\e087";
2664 }
2664 }
2665 .glyphicon-remove-circle:before {
2665 .glyphicon-remove-circle:before {
2666 content: "\e088";
2666 content: "\e088";
2667 }
2667 }
2668 .glyphicon-ok-circle:before {
2668 .glyphicon-ok-circle:before {
2669 content: "\e089";
2669 content: "\e089";
2670 }
2670 }
2671 .glyphicon-ban-circle:before {
2671 .glyphicon-ban-circle:before {
2672 content: "\e090";
2672 content: "\e090";
2673 }
2673 }
2674 .glyphicon-arrow-left:before {
2674 .glyphicon-arrow-left:before {
2675 content: "\e091";
2675 content: "\e091";
2676 }
2676 }
2677 .glyphicon-arrow-right:before {
2677 .glyphicon-arrow-right:before {
2678 content: "\e092";
2678 content: "\e092";
2679 }
2679 }
2680 .glyphicon-arrow-up:before {
2680 .glyphicon-arrow-up:before {
2681 content: "\e093";
2681 content: "\e093";
2682 }
2682 }
2683 .glyphicon-arrow-down:before {
2683 .glyphicon-arrow-down:before {
2684 content: "\e094";
2684 content: "\e094";
2685 }
2685 }
2686 .glyphicon-share-alt:before {
2686 .glyphicon-share-alt:before {
2687 content: "\e095";
2687 content: "\e095";
2688 }
2688 }
2689 .glyphicon-resize-full:before {
2689 .glyphicon-resize-full:before {
2690 content: "\e096";
2690 content: "\e096";
2691 }
2691 }
2692 .glyphicon-resize-small:before {
2692 .glyphicon-resize-small:before {
2693 content: "\e097";
2693 content: "\e097";
2694 }
2694 }
2695 .glyphicon-exclamation-sign:before {
2695 .glyphicon-exclamation-sign:before {
2696 content: "\e101";
2696 content: "\e101";
2697 }
2697 }
2698 .glyphicon-gift:before {
2698 .glyphicon-gift:before {
2699 content: "\e102";
2699 content: "\e102";
2700 }
2700 }
2701 .glyphicon-leaf:before {
2701 .glyphicon-leaf:before {
2702 content: "\e103";
2702 content: "\e103";
2703 }
2703 }
2704 .glyphicon-fire:before {
2704 .glyphicon-fire:before {
2705 content: "\e104";
2705 content: "\e104";
2706 }
2706 }
2707 .glyphicon-eye-open:before {
2707 .glyphicon-eye-open:before {
2708 content: "\e105";
2708 content: "\e105";
2709 }
2709 }
2710 .glyphicon-eye-close:before {
2710 .glyphicon-eye-close:before {
2711 content: "\e106";
2711 content: "\e106";
2712 }
2712 }
2713 .glyphicon-warning-sign:before {
2713 .glyphicon-warning-sign:before {
2714 content: "\e107";
2714 content: "\e107";
2715 }
2715 }
2716 .glyphicon-plane:before {
2716 .glyphicon-plane:before {
2717 content: "\e108";
2717 content: "\e108";
2718 }
2718 }
2719 .glyphicon-calendar:before {
2719 .glyphicon-calendar:before {
2720 content: "\e109";
2720 content: "\e109";
2721 }
2721 }
2722 .glyphicon-random:before {
2722 .glyphicon-random:before {
2723 content: "\e110";
2723 content: "\e110";
2724 }
2724 }
2725 .glyphicon-comment:before {
2725 .glyphicon-comment:before {
2726 content: "\e111";
2726 content: "\e111";
2727 }
2727 }
2728 .glyphicon-magnet:before {
2728 .glyphicon-magnet:before {
2729 content: "\e112";
2729 content: "\e112";
2730 }
2730 }
2731 .glyphicon-chevron-up:before {
2731 .glyphicon-chevron-up:before {
2732 content: "\e113";
2732 content: "\e113";
2733 }
2733 }
2734 .glyphicon-chevron-down:before {
2734 .glyphicon-chevron-down:before {
2735 content: "\e114";
2735 content: "\e114";
2736 }
2736 }
2737 .glyphicon-retweet:before {
2737 .glyphicon-retweet:before {
2738 content: "\e115";
2738 content: "\e115";
2739 }
2739 }
2740 .glyphicon-shopping-cart:before {
2740 .glyphicon-shopping-cart:before {
2741 content: "\e116";
2741 content: "\e116";
2742 }
2742 }
2743 .glyphicon-folder-close:before {
2743 .glyphicon-folder-close:before {
2744 content: "\e117";
2744 content: "\e117";
2745 }
2745 }
2746 .glyphicon-folder-open:before {
2746 .glyphicon-folder-open:before {
2747 content: "\e118";
2747 content: "\e118";
2748 }
2748 }
2749 .glyphicon-resize-vertical:before {
2749 .glyphicon-resize-vertical:before {
2750 content: "\e119";
2750 content: "\e119";
2751 }
2751 }
2752 .glyphicon-resize-horizontal:before {
2752 .glyphicon-resize-horizontal:before {
2753 content: "\e120";
2753 content: "\e120";
2754 }
2754 }
2755 .glyphicon-hdd:before {
2755 .glyphicon-hdd:before {
2756 content: "\e121";
2756 content: "\e121";
2757 }
2757 }
2758 .glyphicon-bullhorn:before {
2758 .glyphicon-bullhorn:before {
2759 content: "\e122";
2759 content: "\e122";
2760 }
2760 }
2761 .glyphicon-bell:before {
2761 .glyphicon-bell:before {
2762 content: "\e123";
2762 content: "\e123";
2763 }
2763 }
2764 .glyphicon-certificate:before {
2764 .glyphicon-certificate:before {
2765 content: "\e124";
2765 content: "\e124";
2766 }
2766 }
2767 .glyphicon-thumbs-up:before {
2767 .glyphicon-thumbs-up:before {
2768 content: "\e125";
2768 content: "\e125";
2769 }
2769 }
2770 .glyphicon-thumbs-down:before {
2770 .glyphicon-thumbs-down:before {
2771 content: "\e126";
2771 content: "\e126";
2772 }
2772 }
2773 .glyphicon-hand-right:before {
2773 .glyphicon-hand-right:before {
2774 content: "\e127";
2774 content: "\e127";
2775 }
2775 }
2776 .glyphicon-hand-left:before {
2776 .glyphicon-hand-left:before {
2777 content: "\e128";
2777 content: "\e128";
2778 }
2778 }
2779 .glyphicon-hand-up:before {
2779 .glyphicon-hand-up:before {
2780 content: "\e129";
2780 content: "\e129";
2781 }
2781 }
2782 .glyphicon-hand-down:before {
2782 .glyphicon-hand-down:before {
2783 content: "\e130";
2783 content: "\e130";
2784 }
2784 }
2785 .glyphicon-circle-arrow-right:before {
2785 .glyphicon-circle-arrow-right:before {
2786 content: "\e131";
2786 content: "\e131";
2787 }
2787 }
2788 .glyphicon-circle-arrow-left:before {
2788 .glyphicon-circle-arrow-left:before {
2789 content: "\e132";
2789 content: "\e132";
2790 }
2790 }
2791 .glyphicon-circle-arrow-up:before {
2791 .glyphicon-circle-arrow-up:before {
2792 content: "\e133";
2792 content: "\e133";
2793 }
2793 }
2794 .glyphicon-circle-arrow-down:before {
2794 .glyphicon-circle-arrow-down:before {
2795 content: "\e134";
2795 content: "\e134";
2796 }
2796 }
2797 .glyphicon-globe:before {
2797 .glyphicon-globe:before {
2798 content: "\e135";
2798 content: "\e135";
2799 }
2799 }
2800 .glyphicon-wrench:before {
2800 .glyphicon-wrench:before {
2801 content: "\e136";
2801 content: "\e136";
2802 }
2802 }
2803 .glyphicon-tasks:before {
2803 .glyphicon-tasks:before {
2804 content: "\e137";
2804 content: "\e137";
2805 }
2805 }
2806 .glyphicon-filter:before {
2806 .glyphicon-filter:before {
2807 content: "\e138";
2807 content: "\e138";
2808 }
2808 }
2809 .glyphicon-briefcase:before {
2809 .glyphicon-briefcase:before {
2810 content: "\e139";
2810 content: "\e139";
2811 }
2811 }
2812 .glyphicon-fullscreen:before {
2812 .glyphicon-fullscreen:before {
2813 content: "\e140";
2813 content: "\e140";
2814 }
2814 }
2815 .glyphicon-dashboard:before {
2815 .glyphicon-dashboard:before {
2816 content: "\e141";
2816 content: "\e141";
2817 }
2817 }
2818 .glyphicon-paperclip:before {
2818 .glyphicon-paperclip:before {
2819 content: "\e142";
2819 content: "\e142";
2820 }
2820 }
2821 .glyphicon-heart-empty:before {
2821 .glyphicon-heart-empty:before {
2822 content: "\e143";
2822 content: "\e143";
2823 }
2823 }
2824 .glyphicon-link:before {
2824 .glyphicon-link:before {
2825 content: "\e144";
2825 content: "\e144";
2826 }
2826 }
2827 .glyphicon-phone:before {
2827 .glyphicon-phone:before {
2828 content: "\e145";
2828 content: "\e145";
2829 }
2829 }
2830 .glyphicon-pushpin:before {
2830 .glyphicon-pushpin:before {
2831 content: "\e146";
2831 content: "\e146";
2832 }
2832 }
2833 .glyphicon-usd:before {
2833 .glyphicon-usd:before {
2834 content: "\e148";
2834 content: "\e148";
2835 }
2835 }
2836 .glyphicon-gbp:before {
2836 .glyphicon-gbp:before {
2837 content: "\e149";
2837 content: "\e149";
2838 }
2838 }
2839 .glyphicon-sort:before {
2839 .glyphicon-sort:before {
2840 content: "\e150";
2840 content: "\e150";
2841 }
2841 }
2842 .glyphicon-sort-by-alphabet:before {
2842 .glyphicon-sort-by-alphabet:before {
2843 content: "\e151";
2843 content: "\e151";
2844 }
2844 }
2845 .glyphicon-sort-by-alphabet-alt:before {
2845 .glyphicon-sort-by-alphabet-alt:before {
2846 content: "\e152";
2846 content: "\e152";
2847 }
2847 }
2848 .glyphicon-sort-by-order:before {
2848 .glyphicon-sort-by-order:before {
2849 content: "\e153";
2849 content: "\e153";
2850 }
2850 }
2851 .glyphicon-sort-by-order-alt:before {
2851 .glyphicon-sort-by-order-alt:before {
2852 content: "\e154";
2852 content: "\e154";
2853 }
2853 }
2854 .glyphicon-sort-by-attributes:before {
2854 .glyphicon-sort-by-attributes:before {
2855 content: "\e155";
2855 content: "\e155";
2856 }
2856 }
2857 .glyphicon-sort-by-attributes-alt:before {
2857 .glyphicon-sort-by-attributes-alt:before {
2858 content: "\e156";
2858 content: "\e156";
2859 }
2859 }
2860 .glyphicon-unchecked:before {
2860 .glyphicon-unchecked:before {
2861 content: "\e157";
2861 content: "\e157";
2862 }
2862 }
2863 .glyphicon-expand:before {
2863 .glyphicon-expand:before {
2864 content: "\e158";
2864 content: "\e158";
2865 }
2865 }
2866 .glyphicon-collapse-down:before {
2866 .glyphicon-collapse-down:before {
2867 content: "\e159";
2867 content: "\e159";
2868 }
2868 }
2869 .glyphicon-collapse-up:before {
2869 .glyphicon-collapse-up:before {
2870 content: "\e160";
2870 content: "\e160";
2871 }
2871 }
2872 .glyphicon-log-in:before {
2872 .glyphicon-log-in:before {
2873 content: "\e161";
2873 content: "\e161";
2874 }
2874 }
2875 .glyphicon-flash:before {
2875 .glyphicon-flash:before {
2876 content: "\e162";
2876 content: "\e162";
2877 }
2877 }
2878 .glyphicon-log-out:before {
2878 .glyphicon-log-out:before {
2879 content: "\e163";
2879 content: "\e163";
2880 }
2880 }
2881 .glyphicon-new-window:before {
2881 .glyphicon-new-window:before {
2882 content: "\e164";
2882 content: "\e164";
2883 }
2883 }
2884 .glyphicon-record:before {
2884 .glyphicon-record:before {
2885 content: "\e165";
2885 content: "\e165";
2886 }
2886 }
2887 .glyphicon-save:before {
2887 .glyphicon-save:before {
2888 content: "\e166";
2888 content: "\e166";
2889 }
2889 }
2890 .glyphicon-open:before {
2890 .glyphicon-open:before {
2891 content: "\e167";
2891 content: "\e167";
2892 }
2892 }
2893 .glyphicon-saved:before {
2893 .glyphicon-saved:before {
2894 content: "\e168";
2894 content: "\e168";
2895 }
2895 }
2896 .glyphicon-import:before {
2896 .glyphicon-import:before {
2897 content: "\e169";
2897 content: "\e169";
2898 }
2898 }
2899 .glyphicon-export:before {
2899 .glyphicon-export:before {
2900 content: "\e170";
2900 content: "\e170";
2901 }
2901 }
2902 .glyphicon-send:before {
2902 .glyphicon-send:before {
2903 content: "\e171";
2903 content: "\e171";
2904 }
2904 }
2905 .glyphicon-floppy-disk:before {
2905 .glyphicon-floppy-disk:before {
2906 content: "\e172";
2906 content: "\e172";
2907 }
2907 }
2908 .glyphicon-floppy-saved:before {
2908 .glyphicon-floppy-saved:before {
2909 content: "\e173";
2909 content: "\e173";
2910 }
2910 }
2911 .glyphicon-floppy-remove:before {
2911 .glyphicon-floppy-remove:before {
2912 content: "\e174";
2912 content: "\e174";
2913 }
2913 }
2914 .glyphicon-floppy-save:before {
2914 .glyphicon-floppy-save:before {
2915 content: "\e175";
2915 content: "\e175";
2916 }
2916 }
2917 .glyphicon-floppy-open:before {
2917 .glyphicon-floppy-open:before {
2918 content: "\e176";
2918 content: "\e176";
2919 }
2919 }
2920 .glyphicon-credit-card:before {
2920 .glyphicon-credit-card:before {
2921 content: "\e177";
2921 content: "\e177";
2922 }
2922 }
2923 .glyphicon-transfer:before {
2923 .glyphicon-transfer:before {
2924 content: "\e178";
2924 content: "\e178";
2925 }
2925 }
2926 .glyphicon-cutlery:before {
2926 .glyphicon-cutlery:before {
2927 content: "\e179";
2927 content: "\e179";
2928 }
2928 }
2929 .glyphicon-header:before {
2929 .glyphicon-header:before {
2930 content: "\e180";
2930 content: "\e180";
2931 }
2931 }
2932 .glyphicon-compressed:before {
2932 .glyphicon-compressed:before {
2933 content: "\e181";
2933 content: "\e181";
2934 }
2934 }
2935 .glyphicon-earphone:before {
2935 .glyphicon-earphone:before {
2936 content: "\e182";
2936 content: "\e182";
2937 }
2937 }
2938 .glyphicon-phone-alt:before {
2938 .glyphicon-phone-alt:before {
2939 content: "\e183";
2939 content: "\e183";
2940 }
2940 }
2941 .glyphicon-tower:before {
2941 .glyphicon-tower:before {
2942 content: "\e184";
2942 content: "\e184";
2943 }
2943 }
2944 .glyphicon-stats:before {
2944 .glyphicon-stats:before {
2945 content: "\e185";
2945 content: "\e185";
2946 }
2946 }
2947 .glyphicon-sd-video:before {
2947 .glyphicon-sd-video:before {
2948 content: "\e186";
2948 content: "\e186";
2949 }
2949 }
2950 .glyphicon-hd-video:before {
2950 .glyphicon-hd-video:before {
2951 content: "\e187";
2951 content: "\e187";
2952 }
2952 }
2953 .glyphicon-subtitles:before {
2953 .glyphicon-subtitles:before {
2954 content: "\e188";
2954 content: "\e188";
2955 }
2955 }
2956 .glyphicon-sound-stereo:before {
2956 .glyphicon-sound-stereo:before {
2957 content: "\e189";
2957 content: "\e189";
2958 }
2958 }
2959 .glyphicon-sound-dolby:before {
2959 .glyphicon-sound-dolby:before {
2960 content: "\e190";
2960 content: "\e190";
2961 }
2961 }
2962 .glyphicon-sound-5-1:before {
2962 .glyphicon-sound-5-1:before {
2963 content: "\e191";
2963 content: "\e191";
2964 }
2964 }
2965 .glyphicon-sound-6-1:before {
2965 .glyphicon-sound-6-1:before {
2966 content: "\e192";
2966 content: "\e192";
2967 }
2967 }
2968 .glyphicon-sound-7-1:before {
2968 .glyphicon-sound-7-1:before {
2969 content: "\e193";
2969 content: "\e193";
2970 }
2970 }
2971 .glyphicon-copyright-mark:before {
2971 .glyphicon-copyright-mark:before {
2972 content: "\e194";
2972 content: "\e194";
2973 }
2973 }
2974 .glyphicon-registration-mark:before {
2974 .glyphicon-registration-mark:before {
2975 content: "\e195";
2975 content: "\e195";
2976 }
2976 }
2977 .glyphicon-cloud-download:before {
2977 .glyphicon-cloud-download:before {
2978 content: "\e197";
2978 content: "\e197";
2979 }
2979 }
2980 .glyphicon-cloud-upload:before {
2980 .glyphicon-cloud-upload:before {
2981 content: "\e198";
2981 content: "\e198";
2982 }
2982 }
2983 .glyphicon-tree-conifer:before {
2983 .glyphicon-tree-conifer:before {
2984 content: "\e199";
2984 content: "\e199";
2985 }
2985 }
2986 .glyphicon-tree-deciduous:before {
2986 .glyphicon-tree-deciduous:before {
2987 content: "\e200";
2987 content: "\e200";
2988 }
2988 }
2989 .caret {
2989 .caret {
2990 display: inline-block;
2990 display: inline-block;
2991 width: 0;
2991 width: 0;
2992 height: 0;
2992 height: 0;
2993 margin-left: 2px;
2993 margin-left: 2px;
2994 vertical-align: middle;
2994 vertical-align: middle;
2995 border-top: 4px solid;
2995 border-top: 4px solid;
2996 border-right: 4px solid transparent;
2996 border-right: 4px solid transparent;
2997 border-left: 4px solid transparent;
2997 border-left: 4px solid transparent;
2998 }
2998 }
2999 .dropdown {
2999 .dropdown {
3000 position: relative;
3000 position: relative;
3001 }
3001 }
3002 .dropdown-toggle:focus {
3002 .dropdown-toggle:focus {
3003 outline: 0;
3003 outline: 0;
3004 }
3004 }
3005 .dropdown-menu {
3005 .dropdown-menu {
3006 position: absolute;
3006 position: absolute;
3007 top: 100%;
3007 top: 100%;
3008 left: 0;
3008 left: 0;
3009 z-index: 1000;
3009 z-index: 1000;
3010 display: none;
3010 display: none;
3011 float: left;
3011 float: left;
3012 min-width: 160px;
3012 min-width: 160px;
3013 padding: 5px 0;
3013 padding: 5px 0;
3014 margin: 2px 0 0;
3014 margin: 2px 0 0;
3015 list-style: none;
3015 list-style: none;
3016 font-size: 13px;
3016 font-size: 13px;
3017 background-color: #ffffff;
3017 background-color: #ffffff;
3018 border: 1px solid #cccccc;
3018 border: 1px solid #cccccc;
3019 border: 1px solid rgba(0, 0, 0, 0.15);
3019 border: 1px solid rgba(0, 0, 0, 0.15);
3020 border-radius: 4px;
3020 border-radius: 4px;
3021 -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
3021 -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
3022 box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
3022 box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
3023 background-clip: padding-box;
3023 background-clip: padding-box;
3024 }
3024 }
3025 .dropdown-menu.pull-right {
3025 .dropdown-menu.pull-right {
3026 right: 0;
3026 right: 0;
3027 left: auto;
3027 left: auto;
3028 }
3028 }
3029 .dropdown-menu .divider {
3029 .dropdown-menu .divider {
3030 height: 1px;
3030 height: 1px;
3031 margin: 8px 0;
3031 margin: 8px 0;
3032 overflow: hidden;
3032 overflow: hidden;
3033 background-color: #e5e5e5;
3033 background-color: #e5e5e5;
3034 }
3034 }
3035 .dropdown-menu > li > a {
3035 .dropdown-menu > li > a {
3036 display: block;
3036 display: block;
3037 padding: 3px 20px;
3037 padding: 3px 20px;
3038 clear: both;
3038 clear: both;
3039 font-weight: normal;
3039 font-weight: normal;
3040 line-height: 1.42857143;
3040 line-height: 1.42857143;
3041 color: #333333;
3041 color: #333333;
3042 white-space: nowrap;
3042 white-space: nowrap;
3043 }
3043 }
3044 .dropdown-menu > li > a:hover,
3044 .dropdown-menu > li > a:hover,
3045 .dropdown-menu > li > a:focus {
3045 .dropdown-menu > li > a:focus {
3046 text-decoration: none;
3046 text-decoration: none;
3047 color: #262626;
3047 color: #262626;
3048 background-color: #f5f5f5;
3048 background-color: #f5f5f5;
3049 }
3049 }
3050 .dropdown-menu > .active > a,
3050 .dropdown-menu > .active > a,
3051 .dropdown-menu > .active > a:hover,
3051 .dropdown-menu > .active > a:hover,
3052 .dropdown-menu > .active > a:focus {
3052 .dropdown-menu > .active > a:focus {
3053 color: #ffffff;
3053 color: #ffffff;
3054 text-decoration: none;
3054 text-decoration: none;
3055 outline: 0;
3055 outline: 0;
3056 background-color: #428bca;
3056 background-color: #428bca;
3057 }
3057 }
3058 .dropdown-menu > .disabled > a,
3058 .dropdown-menu > .disabled > a,
3059 .dropdown-menu > .disabled > a:hover,
3059 .dropdown-menu > .disabled > a:hover,
3060 .dropdown-menu > .disabled > a:focus {
3060 .dropdown-menu > .disabled > a:focus {
3061 color: #999999;
3061 color: #999999;
3062 }
3062 }
3063 .dropdown-menu > .disabled > a:hover,
3063 .dropdown-menu > .disabled > a:hover,
3064 .dropdown-menu > .disabled > a:focus {
3064 .dropdown-menu > .disabled > a:focus {
3065 text-decoration: none;
3065 text-decoration: none;
3066 background-color: transparent;
3066 background-color: transparent;
3067 background-image: none;
3067 background-image: none;
3068 filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
3068 filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
3069 cursor: not-allowed;
3069 cursor: not-allowed;
3070 }
3070 }
3071 .open > .dropdown-menu {
3071 .open > .dropdown-menu {
3072 display: block;
3072 display: block;
3073 }
3073 }
3074 .open > a {
3074 .open > a {
3075 outline: 0;
3075 outline: 0;
3076 }
3076 }
3077 .dropdown-menu-right {
3077 .dropdown-menu-right {
3078 left: auto;
3078 left: auto;
3079 right: 0;
3079 right: 0;
3080 }
3080 }
3081 .dropdown-menu-left {
3081 .dropdown-menu-left {
3082 left: 0;
3082 left: 0;
3083 right: auto;
3083 right: auto;
3084 }
3084 }
3085 .dropdown-header {
3085 .dropdown-header {
3086 display: block;
3086 display: block;
3087 padding: 3px 20px;
3087 padding: 3px 20px;
3088 font-size: 12px;
3088 font-size: 12px;
3089 line-height: 1.42857143;
3089 line-height: 1.42857143;
3090 color: #999999;
3090 color: #999999;
3091 }
3091 }
3092 .dropdown-backdrop {
3092 .dropdown-backdrop {
3093 position: fixed;
3093 position: fixed;
3094 left: 0;
3094 left: 0;
3095 right: 0;
3095 right: 0;
3096 bottom: 0;
3096 bottom: 0;
3097 top: 0;
3097 top: 0;
3098 z-index: 990;
3098 z-index: 990;
3099 }
3099 }
3100 .pull-right > .dropdown-menu {
3100 .pull-right > .dropdown-menu {
3101 right: 0;
3101 right: 0;
3102 left: auto;
3102 left: auto;
3103 }
3103 }
3104 .dropup .caret,
3104 .dropup .caret,
3105 .navbar-fixed-bottom .dropdown .caret {
3105 .navbar-fixed-bottom .dropdown .caret {
3106 border-top: 0;
3106 border-top: 0;
3107 border-bottom: 4px solid;
3107 border-bottom: 4px solid;
3108 content: "";
3108 content: "";
3109 }
3109 }
3110 .dropup .dropdown-menu,
3110 .dropup .dropdown-menu,
3111 .navbar-fixed-bottom .dropdown .dropdown-menu {
3111 .navbar-fixed-bottom .dropdown .dropdown-menu {
3112 top: auto;
3112 top: auto;
3113 bottom: 100%;
3113 bottom: 100%;
3114 margin-bottom: 1px;
3114 margin-bottom: 1px;
3115 }
3115 }
3116 @media (min-width: 768px) {
3116 @media (min-width: 768px) {
3117 .navbar-right .dropdown-menu {
3117 .navbar-right .dropdown-menu {
3118 left: auto;
3118 left: auto;
3119 right: 0;
3119 right: 0;
3120 }
3120 }
3121 .navbar-right .dropdown-menu-left {
3121 .navbar-right .dropdown-menu-left {
3122 left: 0;
3122 left: 0;
3123 right: auto;
3123 right: auto;
3124 }
3124 }
3125 }
3125 }
3126 .btn-group,
3126 .btn-group,
3127 .btn-group-vertical {
3127 .btn-group-vertical {
3128 position: relative;
3128 position: relative;
3129 display: inline-block;
3129 display: inline-block;
3130 vertical-align: middle;
3130 vertical-align: middle;
3131 }
3131 }
3132 .btn-group > .btn,
3132 .btn-group > .btn,
3133 .btn-group-vertical > .btn {
3133 .btn-group-vertical > .btn {
3134 position: relative;
3134 position: relative;
3135 float: left;
3135 float: left;
3136 }
3136 }
3137 .btn-group > .btn:hover,
3137 .btn-group > .btn:hover,
3138 .btn-group-vertical > .btn:hover,
3138 .btn-group-vertical > .btn:hover,
3139 .btn-group > .btn:focus,
3139 .btn-group > .btn:focus,
3140 .btn-group-vertical > .btn:focus,
3140 .btn-group-vertical > .btn:focus,
3141 .btn-group > .btn:active,
3141 .btn-group > .btn:active,
3142 .btn-group-vertical > .btn:active,
3142 .btn-group-vertical > .btn:active,
3143 .btn-group > .btn.active,
3143 .btn-group > .btn.active,
3144 .btn-group-vertical > .btn.active {
3144 .btn-group-vertical > .btn.active {
3145 z-index: 2;
3145 z-index: 2;
3146 }
3146 }
3147 .btn-group > .btn:focus,
3147 .btn-group > .btn:focus,
3148 .btn-group-vertical > .btn:focus {
3148 .btn-group-vertical > .btn:focus {
3149 outline: none;
3149 outline: none;
3150 }
3150 }
3151 .btn-group .btn + .btn,
3151 .btn-group .btn + .btn,
3152 .btn-group .btn + .btn-group,
3152 .btn-group .btn + .btn-group,
3153 .btn-group .btn-group + .btn,
3153 .btn-group .btn-group + .btn,
3154 .btn-group .btn-group + .btn-group {
3154 .btn-group .btn-group + .btn-group {
3155 margin-left: -1px;
3155 margin-left: -1px;
3156 }
3156 }
3157 .btn-toolbar {
3157 .btn-toolbar {
3158 margin-left: -5px;
3158 margin-left: -5px;
3159 }
3159 }
3160 .btn-toolbar .btn-group,
3160 .btn-toolbar .btn-group,
3161 .btn-toolbar .input-group {
3161 .btn-toolbar .input-group {
3162 float: left;
3162 float: left;
3163 }
3163 }
3164 .btn-toolbar > .btn,
3164 .btn-toolbar > .btn,
3165 .btn-toolbar > .btn-group,
3165 .btn-toolbar > .btn-group,
3166 .btn-toolbar > .input-group {
3166 .btn-toolbar > .input-group {
3167 margin-left: 5px;
3167 margin-left: 5px;
3168 }
3168 }
3169 .btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
3169 .btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
3170 border-radius: 0;
3170 border-radius: 0;
3171 }
3171 }
3172 .btn-group > .btn:first-child {
3172 .btn-group > .btn:first-child {
3173 margin-left: 0;
3173 margin-left: 0;
3174 }
3174 }
3175 .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
3175 .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
3176 border-bottom-right-radius: 0;
3176 border-bottom-right-radius: 0;
3177 border-top-right-radius: 0;
3177 border-top-right-radius: 0;
3178 }
3178 }
3179 .btn-group > .btn:last-child:not(:first-child),
3179 .btn-group > .btn:last-child:not(:first-child),
3180 .btn-group > .dropdown-toggle:not(:first-child) {
3180 .btn-group > .dropdown-toggle:not(:first-child) {
3181 border-bottom-left-radius: 0;
3181 border-bottom-left-radius: 0;
3182 border-top-left-radius: 0;
3182 border-top-left-radius: 0;
3183 }
3183 }
3184 .btn-group > .btn-group {
3184 .btn-group > .btn-group {
3185 float: left;
3185 float: left;
3186 }
3186 }
3187 .btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
3187 .btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
3188 border-radius: 0;
3188 border-radius: 0;
3189 }
3189 }
3190 .btn-group > .btn-group:first-child > .btn:last-child,
3190 .btn-group > .btn-group:first-child > .btn:last-child,
3191 .btn-group > .btn-group:first-child > .dropdown-toggle {
3191 .btn-group > .btn-group:first-child > .dropdown-toggle {
3192 border-bottom-right-radius: 0;
3192 border-bottom-right-radius: 0;
3193 border-top-right-radius: 0;
3193 border-top-right-radius: 0;
3194 }
3194 }
3195 .btn-group > .btn-group:last-child > .btn:first-child {
3195 .btn-group > .btn-group:last-child > .btn:first-child {
3196 border-bottom-left-radius: 0;
3196 border-bottom-left-radius: 0;
3197 border-top-left-radius: 0;
3197 border-top-left-radius: 0;
3198 }
3198 }
3199 .btn-group .dropdown-toggle:active,
3199 .btn-group .dropdown-toggle:active,
3200 .btn-group.open .dropdown-toggle {
3200 .btn-group.open .dropdown-toggle {
3201 outline: 0;
3201 outline: 0;
3202 }
3202 }
3203 .btn-group > .btn + .dropdown-toggle {
3203 .btn-group > .btn + .dropdown-toggle {
3204 padding-left: 8px;
3204 padding-left: 8px;
3205 padding-right: 8px;
3205 padding-right: 8px;
3206 }
3206 }
3207 .btn-group > .btn-lg + .dropdown-toggle {
3207 .btn-group > .btn-lg + .dropdown-toggle {
3208 padding-left: 12px;
3208 padding-left: 12px;
3209 padding-right: 12px;
3209 padding-right: 12px;
3210 }
3210 }
3211 .btn-group.open .dropdown-toggle {
3211 .btn-group.open .dropdown-toggle {
3212 -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
3212 -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
3213 box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
3213 box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
3214 }
3214 }
3215 .btn-group.open .dropdown-toggle.btn-link {
3215 .btn-group.open .dropdown-toggle.btn-link {
3216 -webkit-box-shadow: none;
3216 -webkit-box-shadow: none;
3217 box-shadow: none;
3217 box-shadow: none;
3218 }
3218 }
3219 .btn .caret {
3219 .btn .caret {
3220 margin-left: 0;
3220 margin-left: 0;
3221 }
3221 }
3222 .btn-lg .caret {
3222 .btn-lg .caret {
3223 border-width: 5px 5px 0;
3223 border-width: 5px 5px 0;
3224 border-bottom-width: 0;
3224 border-bottom-width: 0;
3225 }
3225 }
3226 .dropup .btn-lg .caret {
3226 .dropup .btn-lg .caret {
3227 border-width: 0 5px 5px;
3227 border-width: 0 5px 5px;
3228 }
3228 }
3229 .btn-group-vertical > .btn,
3229 .btn-group-vertical > .btn,
3230 .btn-group-vertical > .btn-group,
3230 .btn-group-vertical > .btn-group,
3231 .btn-group-vertical > .btn-group > .btn {
3231 .btn-group-vertical > .btn-group > .btn {
3232 display: block;
3232 display: block;
3233 float: none;
3233 float: none;
3234 width: 100%;
3234 width: 100%;
3235 max-width: 100%;
3235 max-width: 100%;
3236 }
3236 }
3237 .btn-group-vertical > .btn-group > .btn {
3237 .btn-group-vertical > .btn-group > .btn {
3238 float: none;
3238 float: none;
3239 }
3239 }
3240 .btn-group-vertical > .btn + .btn,
3240 .btn-group-vertical > .btn + .btn,
3241 .btn-group-vertical > .btn + .btn-group,
3241 .btn-group-vertical > .btn + .btn-group,
3242 .btn-group-vertical > .btn-group + .btn,
3242 .btn-group-vertical > .btn-group + .btn,
3243 .btn-group-vertical > .btn-group + .btn-group {
3243 .btn-group-vertical > .btn-group + .btn-group {
3244 margin-top: -1px;
3244 margin-top: -1px;
3245 margin-left: 0;
3245 margin-left: 0;
3246 }
3246 }
3247 .btn-group-vertical > .btn:not(:first-child):not(:last-child) {
3247 .btn-group-vertical > .btn:not(:first-child):not(:last-child) {
3248 border-radius: 0;
3248 border-radius: 0;
3249 }
3249 }
3250 .btn-group-vertical > .btn:first-child:not(:last-child) {
3250 .btn-group-vertical > .btn:first-child:not(:last-child) {
3251 border-top-right-radius: 4px;
3251 border-top-right-radius: 4px;
3252 border-bottom-right-radius: 0;
3252 border-bottom-right-radius: 0;
3253 border-bottom-left-radius: 0;
3253 border-bottom-left-radius: 0;
3254 }
3254 }
3255 .btn-group-vertical > .btn:last-child:not(:first-child) {
3255 .btn-group-vertical > .btn:last-child:not(:first-child) {
3256 border-bottom-left-radius: 4px;
3256 border-bottom-left-radius: 4px;
3257 border-top-right-radius: 0;
3257 border-top-right-radius: 0;
3258 border-top-left-radius: 0;
3258 border-top-left-radius: 0;
3259 }
3259 }
3260 .btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
3260 .btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
3261 border-radius: 0;
3261 border-radius: 0;
3262 }
3262 }
3263 .btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
3263 .btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
3264 .btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
3264 .btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
3265 border-bottom-right-radius: 0;
3265 border-bottom-right-radius: 0;
3266 border-bottom-left-radius: 0;
3266 border-bottom-left-radius: 0;
3267 }
3267 }
3268 .btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
3268 .btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
3269 border-top-right-radius: 0;
3269 border-top-right-radius: 0;
3270 border-top-left-radius: 0;
3270 border-top-left-radius: 0;
3271 }
3271 }
3272 .btn-group-justified {
3272 .btn-group-justified {
3273 display: table;
3273 display: table;
3274 width: 100%;
3274 width: 100%;
3275 table-layout: fixed;
3275 table-layout: fixed;
3276 border-collapse: separate;
3276 border-collapse: separate;
3277 }
3277 }
3278 .btn-group-justified > .btn,
3278 .btn-group-justified > .btn,
3279 .btn-group-justified > .btn-group {
3279 .btn-group-justified > .btn-group {
3280 float: none;
3280 float: none;
3281 display: table-cell;
3281 display: table-cell;
3282 width: 1%;
3282 width: 1%;
3283 }
3283 }
3284 .btn-group-justified > .btn-group .btn {
3284 .btn-group-justified > .btn-group .btn {
3285 width: 100%;
3285 width: 100%;
3286 }
3286 }
3287 [data-toggle="buttons"] > .btn > input[type="radio"],
3287 [data-toggle="buttons"] > .btn > input[type="radio"],
3288 [data-toggle="buttons"] > .btn > input[type="checkbox"] {
3288 [data-toggle="buttons"] > .btn > input[type="checkbox"] {
3289 display: none;
3289 display: none;
3290 }
3290 }
3291 .input-group {
3291 .input-group {
3292 position: relative;
3292 position: relative;
3293 display: table;
3293 display: table;
3294 border-collapse: separate;
3294 border-collapse: separate;
3295 }
3295 }
3296 .input-group[class*="col-"] {
3296 .input-group[class*="col-"] {
3297 float: none;
3297 float: none;
3298 padding-left: 0;
3298 padding-left: 0;
3299 padding-right: 0;
3299 padding-right: 0;
3300 }
3300 }
3301 .input-group .form-control {
3301 .input-group .form-control {
3302 position: relative;
3302 position: relative;
3303 z-index: 2;
3303 z-index: 2;
3304 float: left;
3304 float: left;
3305 width: 100%;
3305 width: 100%;
3306 margin-bottom: 0;
3306 margin-bottom: 0;
3307 }
3307 }
3308 .input-group-lg > .form-control,
3308 .input-group-lg > .form-control,
3309 .input-group-lg > .input-group-addon,
3309 .input-group-lg > .input-group-addon,
3310 .input-group-lg > .input-group-btn > .btn {
3310 .input-group-lg > .input-group-btn > .btn {
3311 height: 45px;
3311 height: 45px;
3312 padding: 10px 16px;
3312 padding: 10px 16px;
3313 font-size: 17px;
3313 font-size: 17px;
3314 line-height: 1.33;
3314 line-height: 1.33;
3315 border-radius: 6px;
3315 border-radius: 6px;
3316 }
3316 }
3317 select.input-group-lg > .form-control,
3317 select.input-group-lg > .form-control,
3318 select.input-group-lg > .input-group-addon,
3318 select.input-group-lg > .input-group-addon,
3319 select.input-group-lg > .input-group-btn > .btn {
3319 select.input-group-lg > .input-group-btn > .btn {
3320 height: 45px;
3320 height: 45px;
3321 line-height: 45px;
3321 line-height: 45px;
3322 }
3322 }
3323 textarea.input-group-lg > .form-control,
3323 textarea.input-group-lg > .form-control,
3324 textarea.input-group-lg > .input-group-addon,
3324 textarea.input-group-lg > .input-group-addon,
3325 textarea.input-group-lg > .input-group-btn > .btn,
3325 textarea.input-group-lg > .input-group-btn > .btn,
3326 select[multiple].input-group-lg > .form-control,
3326 select[multiple].input-group-lg > .form-control,
3327 select[multiple].input-group-lg > .input-group-addon,
3327 select[multiple].input-group-lg > .input-group-addon,
3328 select[multiple].input-group-lg > .input-group-btn > .btn {
3328 select[multiple].input-group-lg > .input-group-btn > .btn {
3329 height: auto;
3329 height: auto;
3330 }
3330 }
3331 .input-group-sm > .form-control,
3331 .input-group-sm > .form-control,
3332 .input-group-sm > .input-group-addon,
3332 .input-group-sm > .input-group-addon,
3333 .input-group-sm > .input-group-btn > .btn {
3333 .input-group-sm > .input-group-btn > .btn {
3334 height: 30px;
3334 height: 30px;
3335 padding: 5px 10px;
3335 padding: 5px 10px;
3336 font-size: 12px;
3336 font-size: 12px;
3337 line-height: 1.5;
3337 line-height: 1.5;
3338 border-radius: 3px;
3338 border-radius: 3px;
3339 }
3339 }
3340 select.input-group-sm > .form-control,
3340 select.input-group-sm > .form-control,
3341 select.input-group-sm > .input-group-addon,
3341 select.input-group-sm > .input-group-addon,
3342 select.input-group-sm > .input-group-btn > .btn {
3342 select.input-group-sm > .input-group-btn > .btn {
3343 height: 30px;
3343 height: 30px;
3344 line-height: 30px;
3344 line-height: 30px;
3345 }
3345 }
3346 textarea.input-group-sm > .form-control,
3346 textarea.input-group-sm > .form-control,
3347 textarea.input-group-sm > .input-group-addon,
3347 textarea.input-group-sm > .input-group-addon,
3348 textarea.input-group-sm > .input-group-btn > .btn,
3348 textarea.input-group-sm > .input-group-btn > .btn,
3349 select[multiple].input-group-sm > .form-control,
3349 select[multiple].input-group-sm > .form-control,
3350 select[multiple].input-group-sm > .input-group-addon,
3350 select[multiple].input-group-sm > .input-group-addon,
3351 select[multiple].input-group-sm > .input-group-btn > .btn {
3351 select[multiple].input-group-sm > .input-group-btn > .btn {
3352 height: auto;
3352 height: auto;
3353 }
3353 }
3354 .input-group-addon,
3354 .input-group-addon,
3355 .input-group-btn,
3355 .input-group-btn,
3356 .input-group .form-control {
3356 .input-group .form-control {
3357 display: table-cell;
3357 display: table-cell;
3358 }
3358 }
3359 .input-group-addon:not(:first-child):not(:last-child),
3359 .input-group-addon:not(:first-child):not(:last-child),
3360 .input-group-btn:not(:first-child):not(:last-child),
3360 .input-group-btn:not(:first-child):not(:last-child),
3361 .input-group .form-control:not(:first-child):not(:last-child) {
3361 .input-group .form-control:not(:first-child):not(:last-child) {
3362 border-radius: 0;
3362 border-radius: 0;
3363 }
3363 }
3364 .input-group-addon,
3364 .input-group-addon,
3365 .input-group-btn {
3365 .input-group-btn {
3366 width: 1%;
3366 width: 1%;
3367 white-space: nowrap;
3367 white-space: nowrap;
3368 vertical-align: middle;
3368 vertical-align: middle;
3369 }
3369 }
3370 .input-group-addon {
3370 .input-group-addon {
3371 padding: 6px 12px;
3371 padding: 6px 12px;
3372 font-size: 13px;
3372 font-size: 13px;
3373 font-weight: normal;
3373 font-weight: normal;
3374 line-height: 1;
3374 line-height: 1;
3375 color: #555555;
3375 color: #555555;
3376 text-align: center;
3376 text-align: center;
3377 background-color: #eeeeee;
3377 background-color: #eeeeee;
3378 border: 1px solid #cccccc;
3378 border: 1px solid #cccccc;
3379 border-radius: 4px;
3379 border-radius: 4px;
3380 }
3380 }
3381 .input-group-addon.input-sm {
3381 .input-group-addon.input-sm {
3382 padding: 5px 10px;
3382 padding: 5px 10px;
3383 font-size: 12px;
3383 font-size: 12px;
3384 border-radius: 3px;
3384 border-radius: 3px;
3385 }
3385 }
3386 .input-group-addon.input-lg {
3386 .input-group-addon.input-lg {
3387 padding: 10px 16px;
3387 padding: 10px 16px;
3388 font-size: 17px;
3388 font-size: 17px;
3389 border-radius: 6px;
3389 border-radius: 6px;
3390 }
3390 }
3391 .input-group-addon input[type="radio"],
3391 .input-group-addon input[type="radio"],
3392 .input-group-addon input[type="checkbox"] {
3392 .input-group-addon input[type="checkbox"] {
3393 margin-top: 0;
3393 margin-top: 0;
3394 }
3394 }
3395 .input-group .form-control:first-child,
3395 .input-group .form-control:first-child,
3396 .input-group-addon:first-child,
3396 .input-group-addon:first-child,
3397 .input-group-btn:first-child > .btn,
3397 .input-group-btn:first-child > .btn,
3398 .input-group-btn:first-child > .btn-group > .btn,
3398 .input-group-btn:first-child > .btn-group > .btn,
3399 .input-group-btn:first-child > .dropdown-toggle,
3399 .input-group-btn:first-child > .dropdown-toggle,
3400 .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
3400 .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
3401 .input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
3401 .input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
3402 border-bottom-right-radius: 0;
3402 border-bottom-right-radius: 0;
3403 border-top-right-radius: 0;
3403 border-top-right-radius: 0;
3404 }
3404 }
3405 .input-group-addon:first-child {
3405 .input-group-addon:first-child {
3406 border-right: 0;
3406 border-right: 0;
3407 }
3407 }
3408 .input-group .form-control:last-child,
3408 .input-group .form-control:last-child,
3409 .input-group-addon:last-child,
3409 .input-group-addon:last-child,
3410 .input-group-btn:last-child > .btn,
3410 .input-group-btn:last-child > .btn,
3411 .input-group-btn:last-child > .btn-group > .btn,
3411 .input-group-btn:last-child > .btn-group > .btn,
3412 .input-group-btn:last-child > .dropdown-toggle,
3412 .input-group-btn:last-child > .dropdown-toggle,
3413 .input-group-btn:first-child > .btn:not(:first-child),
3413 .input-group-btn:first-child > .btn:not(:first-child),
3414 .input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
3414 .input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
3415 border-bottom-left-radius: 0;
3415 border-bottom-left-radius: 0;
3416 border-top-left-radius: 0;
3416 border-top-left-radius: 0;
3417 }
3417 }
3418 .input-group-addon:last-child {
3418 .input-group-addon:last-child {
3419 border-left: 0;
3419 border-left: 0;
3420 }
3420 }
3421 .input-group-btn {
3421 .input-group-btn {
3422 position: relative;
3422 position: relative;
3423 font-size: 0;
3423 font-size: 0;
3424 white-space: nowrap;
3424 white-space: nowrap;
3425 }
3425 }
3426 .input-group-btn > .btn {
3426 .input-group-btn > .btn {
3427 position: relative;
3427 position: relative;
3428 }
3428 }
3429 .input-group-btn > .btn + .btn {
3429 .input-group-btn > .btn + .btn {
3430 margin-left: -1px;
3430 margin-left: -1px;
3431 }
3431 }
3432 .input-group-btn > .btn:hover,
3432 .input-group-btn > .btn:hover,
3433 .input-group-btn > .btn:focus,
3433 .input-group-btn > .btn:focus,
3434 .input-group-btn > .btn:active {
3434 .input-group-btn > .btn:active {
3435 z-index: 2;
3435 z-index: 2;
3436 }
3436 }
3437 .input-group-btn:first-child > .btn,
3437 .input-group-btn:first-child > .btn,
3438 .input-group-btn:first-child > .btn-group {
3438 .input-group-btn:first-child > .btn-group {
3439 margin-right: -1px;
3439 margin-right: -1px;
3440 }
3440 }
3441 .input-group-btn:last-child > .btn,
3441 .input-group-btn:last-child > .btn,
3442 .input-group-btn:last-child > .btn-group {
3442 .input-group-btn:last-child > .btn-group {
3443 margin-left: -1px;
3443 margin-left: -1px;
3444 }
3444 }
3445 .nav {
3445 .nav {
3446 margin-bottom: 0;
3446 margin-bottom: 0;
3447 padding-left: 0;
3447 padding-left: 0;
3448 list-style: none;
3448 list-style: none;
3449 }
3449 }
3450 .nav > li {
3450 .nav > li {
3451 position: relative;
3451 position: relative;
3452 display: block;
3452 display: block;
3453 }
3453 }
3454 .nav > li > a {
3454 .nav > li > a {
3455 position: relative;
3455 position: relative;
3456 display: block;
3456 display: block;
3457 padding: 10px 15px;
3457 padding: 10px 15px;
3458 }
3458 }
3459 .nav > li > a:hover,
3459 .nav > li > a:hover,
3460 .nav > li > a:focus {
3460 .nav > li > a:focus {
3461 text-decoration: none;
3461 text-decoration: none;
3462 background-color: #eeeeee;
3462 background-color: #eeeeee;
3463 }
3463 }
3464 .nav > li.disabled > a {
3464 .nav > li.disabled > a {
3465 color: #999999;
3465 color: #999999;
3466 }
3466 }
3467 .nav > li.disabled > a:hover,
3467 .nav > li.disabled > a:hover,
3468 .nav > li.disabled > a:focus {
3468 .nav > li.disabled > a:focus {
3469 color: #999999;
3469 color: #999999;
3470 text-decoration: none;
3470 text-decoration: none;
3471 background-color: transparent;
3471 background-color: transparent;
3472 cursor: not-allowed;
3472 cursor: not-allowed;
3473 }
3473 }
3474 .nav .open > a,
3474 .nav .open > a,
3475 .nav .open > a:hover,
3475 .nav .open > a:hover,
3476 .nav .open > a:focus {
3476 .nav .open > a:focus {
3477 background-color: #eeeeee;
3477 background-color: #eeeeee;
3478 border-color: #428bca;
3478 border-color: #428bca;
3479 }
3479 }
3480 .nav .nav-divider {
3480 .nav .nav-divider {
3481 height: 1px;
3481 height: 1px;
3482 margin: 8px 0;
3482 margin: 8px 0;
3483 overflow: hidden;
3483 overflow: hidden;
3484 background-color: #e5e5e5;
3484 background-color: #e5e5e5;
3485 }
3485 }
3486 .nav > li > a > img {
3486 .nav > li > a > img {
3487 max-width: none;
3487 max-width: none;
3488 }
3488 }
3489 .nav-tabs {
3489 .nav-tabs {
3490 border-bottom: 1px solid #dddddd;
3490 border-bottom: 1px solid #dddddd;
3491 }
3491 }
3492 .nav-tabs > li {
3492 .nav-tabs > li {
3493 float: left;
3493 float: left;
3494 margin-bottom: -1px;
3494 margin-bottom: -1px;
3495 }
3495 }
3496 .nav-tabs > li > a {
3496 .nav-tabs > li > a {
3497 margin-right: 2px;
3497 margin-right: 2px;
3498 line-height: 1.42857143;
3498 line-height: 1.42857143;
3499 border: 1px solid transparent;
3499 border: 1px solid transparent;
3500 border-radius: 4px 4px 0 0;
3500 border-radius: 4px 4px 0 0;
3501 }
3501 }
3502 .nav-tabs > li > a:hover {
3502 .nav-tabs > li > a:hover {
3503 border-color: #eeeeee #eeeeee #dddddd;
3503 border-color: #eeeeee #eeeeee #dddddd;
3504 }
3504 }
3505 .nav-tabs > li.active > a,
3505 .nav-tabs > li.active > a,
3506 .nav-tabs > li.active > a:hover,
3506 .nav-tabs > li.active > a:hover,
3507 .nav-tabs > li.active > a:focus {
3507 .nav-tabs > li.active > a:focus {
3508 color: #555555;
3508 color: #555555;
3509 background-color: #ffffff;
3509 background-color: #ffffff;
3510 border: 1px solid #dddddd;
3510 border: 1px solid #dddddd;
3511 border-bottom-color: transparent;
3511 border-bottom-color: transparent;
3512 cursor: default;
3512 cursor: default;
3513 }
3513 }
3514 .nav-tabs.nav-justified {
3514 .nav-tabs.nav-justified {
3515 width: 100%;
3515 width: 100%;
3516 border-bottom: 0;
3516 border-bottom: 0;
3517 }
3517 }
3518 .nav-tabs.nav-justified > li {
3518 .nav-tabs.nav-justified > li {
3519 float: none;
3519 float: none;
3520 }
3520 }
3521 .nav-tabs.nav-justified > li > a {
3521 .nav-tabs.nav-justified > li > a {
3522 text-align: center;
3522 text-align: center;
3523 margin-bottom: 5px;
3523 margin-bottom: 5px;
3524 }
3524 }
3525 .nav-tabs.nav-justified > .dropdown .dropdown-menu {
3525 .nav-tabs.nav-justified > .dropdown .dropdown-menu {
3526 top: auto;
3526 top: auto;
3527 left: auto;
3527 left: auto;
3528 }
3528 }
3529 @media (min-width: 768px) {
3529 @media (min-width: 768px) {
3530 .nav-tabs.nav-justified > li {
3530 .nav-tabs.nav-justified > li {
3531 display: table-cell;
3531 display: table-cell;
3532 width: 1%;
3532 width: 1%;
3533 }
3533 }
3534 .nav-tabs.nav-justified > li > a {
3534 .nav-tabs.nav-justified > li > a {
3535 margin-bottom: 0;
3535 margin-bottom: 0;
3536 }
3536 }
3537 }
3537 }
3538 .nav-tabs.nav-justified > li > a {
3538 .nav-tabs.nav-justified > li > a {
3539 margin-right: 0;
3539 margin-right: 0;
3540 border-radius: 4px;
3540 border-radius: 4px;
3541 }
3541 }
3542 .nav-tabs.nav-justified > .active > a,
3542 .nav-tabs.nav-justified > .active > a,
3543 .nav-tabs.nav-justified > .active > a:hover,
3543 .nav-tabs.nav-justified > .active > a:hover,
3544 .nav-tabs.nav-justified > .active > a:focus {
3544 .nav-tabs.nav-justified > .active > a:focus {
3545 border: 1px solid #dddddd;
3545 border: 1px solid #dddddd;
3546 }
3546 }
3547 @media (min-width: 768px) {
3547 @media (min-width: 768px) {
3548 .nav-tabs.nav-justified > li > a {
3548 .nav-tabs.nav-justified > li > a {
3549 border-bottom: 1px solid #dddddd;
3549 border-bottom: 1px solid #dddddd;
3550 border-radius: 4px 4px 0 0;
3550 border-radius: 4px 4px 0 0;
3551 }
3551 }
3552 .nav-tabs.nav-justified > .active > a,
3552 .nav-tabs.nav-justified > .active > a,
3553 .nav-tabs.nav-justified > .active > a:hover,
3553 .nav-tabs.nav-justified > .active > a:hover,
3554 .nav-tabs.nav-justified > .active > a:focus {
3554 .nav-tabs.nav-justified > .active > a:focus {
3555 border-bottom-color: #ffffff;
3555 border-bottom-color: #ffffff;
3556 }
3556 }
3557 }
3557 }
3558 .nav-pills > li {
3558 .nav-pills > li {
3559 float: left;
3559 float: left;
3560 }
3560 }
3561 .nav-pills > li > a {
3561 .nav-pills > li > a {
3562 border-radius: 4px;
3562 border-radius: 4px;
3563 }
3563 }
3564 .nav-pills > li + li {
3564 .nav-pills > li + li {
3565 margin-left: 2px;
3565 margin-left: 2px;
3566 }
3566 }
3567 .nav-pills > li.active > a,
3567 .nav-pills > li.active > a,
3568 .nav-pills > li.active > a:hover,
3568 .nav-pills > li.active > a:hover,
3569 .nav-pills > li.active > a:focus {
3569 .nav-pills > li.active > a:focus {
3570 color: #ffffff;
3570 color: #ffffff;
3571 background-color: #428bca;
3571 background-color: #428bca;
3572 }
3572 }
3573 .nav-stacked > li {
3573 .nav-stacked > li {
3574 float: none;
3574 float: none;
3575 }
3575 }
3576 .nav-stacked > li + li {
3576 .nav-stacked > li + li {
3577 margin-top: 2px;
3577 margin-top: 2px;
3578 margin-left: 0;
3578 margin-left: 0;
3579 }
3579 }
3580 .nav-justified {
3580 .nav-justified {
3581 width: 100%;
3581 width: 100%;
3582 }
3582 }
3583 .nav-justified > li {
3583 .nav-justified > li {
3584 float: none;
3584 float: none;
3585 }
3585 }
3586 .nav-justified > li > a {
3586 .nav-justified > li > a {
3587 text-align: center;
3587 text-align: center;
3588 margin-bottom: 5px;
3588 margin-bottom: 5px;
3589 }
3589 }
3590 .nav-justified > .dropdown .dropdown-menu {
3590 .nav-justified > .dropdown .dropdown-menu {
3591 top: auto;
3591 top: auto;
3592 left: auto;
3592 left: auto;
3593 }
3593 }
3594 @media (min-width: 768px) {
3594 @media (min-width: 768px) {
3595 .nav-justified > li {
3595 .nav-justified > li {
3596 display: table-cell;
3596 display: table-cell;
3597 width: 1%;
3597 width: 1%;
3598 }
3598 }
3599 .nav-justified > li > a {
3599 .nav-justified > li > a {
3600 margin-bottom: 0;
3600 margin-bottom: 0;
3601 }
3601 }
3602 }
3602 }
3603 .nav-tabs-justified {
3603 .nav-tabs-justified {
3604 border-bottom: 0;
3604 border-bottom: 0;
3605 }
3605 }
3606 .nav-tabs-justified > li > a {
3606 .nav-tabs-justified > li > a {
3607 margin-right: 0;
3607 margin-right: 0;
3608 border-radius: 4px;
3608 border-radius: 4px;
3609 }
3609 }
3610 .nav-tabs-justified > .active > a,
3610 .nav-tabs-justified > .active > a,
3611 .nav-tabs-justified > .active > a:hover,
3611 .nav-tabs-justified > .active > a:hover,
3612 .nav-tabs-justified > .active > a:focus {
3612 .nav-tabs-justified > .active > a:focus {
3613 border: 1px solid #dddddd;
3613 border: 1px solid #dddddd;
3614 }
3614 }
3615 @media (min-width: 768px) {
3615 @media (min-width: 768px) {
3616 .nav-tabs-justified > li > a {
3616 .nav-tabs-justified > li > a {
3617 border-bottom: 1px solid #dddddd;
3617 border-bottom: 1px solid #dddddd;
3618 border-radius: 4px 4px 0 0;
3618 border-radius: 4px 4px 0 0;
3619 }
3619 }
3620 .nav-tabs-justified > .active > a,
3620 .nav-tabs-justified > .active > a,
3621 .nav-tabs-justified > .active > a:hover,
3621 .nav-tabs-justified > .active > a:hover,
3622 .nav-tabs-justified > .active > a:focus {
3622 .nav-tabs-justified > .active > a:focus {
3623 border-bottom-color: #ffffff;
3623 border-bottom-color: #ffffff;
3624 }
3624 }
3625 }
3625 }
3626 .tab-content > .tab-pane {
3626 .tab-content > .tab-pane {
3627 display: none;
3627 display: none;
3628 }
3628 }
3629 .tab-content > .active {
3629 .tab-content > .active {
3630 display: block;
3630 display: block;
3631 }
3631 }
3632 .nav-tabs .dropdown-menu {
3632 .nav-tabs .dropdown-menu {
3633 margin-top: -1px;
3633 margin-top: -1px;
3634 border-top-right-radius: 0;
3634 border-top-right-radius: 0;
3635 border-top-left-radius: 0;
3635 border-top-left-radius: 0;
3636 }
3636 }
3637 .navbar {
3637 .navbar {
3638 position: relative;
3638 position: relative;
3639 min-height: 36px;
3639 min-height: 36px;
3640 margin-bottom: 18px;
3640 margin-bottom: 18px;
3641 border: 1px solid transparent;
3641 border: 1px solid transparent;
3642 }
3642 }
3643 @media (min-width: 768px) {
3643 @media (min-width: 768px) {
3644 .navbar {
3644 .navbar {
3645 border-radius: 4px;
3645 border-radius: 4px;
3646 }
3646 }
3647 }
3647 }
3648 @media (min-width: 768px) {
3648 @media (min-width: 768px) {
3649 .navbar-header {
3649 .navbar-header {
3650 float: left;
3650 float: left;
3651 }
3651 }
3652 }
3652 }
3653 .navbar-collapse {
3653 .navbar-collapse {
3654 max-height: 340px;
3654 max-height: 340px;
3655 overflow-x: visible;
3655 overflow-x: visible;
3656 padding-right: 15px;
3656 padding-right: 15px;
3657 padding-left: 15px;
3657 padding-left: 15px;
3658 border-top: 1px solid transparent;
3658 border-top: 1px solid transparent;
3659 box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
3659 box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
3660 -webkit-overflow-scrolling: touch;
3660 -webkit-overflow-scrolling: touch;
3661 }
3661 }
3662 .navbar-collapse.in {
3662 .navbar-collapse.in {
3663 overflow-y: auto;
3663 overflow-y: auto;
3664 }
3664 }
3665 @media (min-width: 768px) {
3665 @media (min-width: 768px) {
3666 .navbar-collapse {
3666 .navbar-collapse {
3667 width: auto;
3667 width: auto;
3668 border-top: 0;
3668 border-top: 0;
3669 box-shadow: none;
3669 box-shadow: none;
3670 }
3670 }
3671 .navbar-collapse.collapse {
3671 .navbar-collapse.collapse {
3672 display: block !important;
3672 display: block !important;
3673 height: auto !important;
3673 height: auto !important;
3674 padding-bottom: 0;
3674 padding-bottom: 0;
3675 overflow: visible !important;
3675 overflow: visible !important;
3676 }
3676 }
3677 .navbar-collapse.in {
3677 .navbar-collapse.in {
3678 overflow-y: visible;
3678 overflow-y: visible;
3679 }
3679 }
3680 .navbar-fixed-top .navbar-collapse,
3680 .navbar-fixed-top .navbar-collapse,
3681 .navbar-static-top .navbar-collapse,
3681 .navbar-static-top .navbar-collapse,
3682 .navbar-fixed-bottom .navbar-collapse {
3682 .navbar-fixed-bottom .navbar-collapse {
3683 padding-left: 0;
3683 padding-left: 0;
3684 padding-right: 0;
3684 padding-right: 0;
3685 }
3685 }
3686 }
3686 }
3687 .container > .navbar-header,
3687 .container > .navbar-header,
3688 .container-fluid > .navbar-header,
3688 .container-fluid > .navbar-header,
3689 .container > .navbar-collapse,
3689 .container > .navbar-collapse,
3690 .container-fluid > .navbar-collapse {
3690 .container-fluid > .navbar-collapse {
3691 margin-right: -15px;
3691 margin-right: -15px;
3692 margin-left: -15px;
3692 margin-left: -15px;
3693 }
3693 }
3694 @media (min-width: 768px) {
3694 @media (min-width: 768px) {
3695 .container > .navbar-header,
3695 .container > .navbar-header,
3696 .container-fluid > .navbar-header,
3696 .container-fluid > .navbar-header,
3697 .container > .navbar-collapse,
3697 .container > .navbar-collapse,
3698 .container-fluid > .navbar-collapse {
3698 .container-fluid > .navbar-collapse {
3699 margin-right: 0;
3699 margin-right: 0;
3700 margin-left: 0;
3700 margin-left: 0;
3701 }
3701 }
3702 }
3702 }
3703 .navbar-static-top {
3703 .navbar-static-top {
3704 z-index: 1000;
3704 z-index: 1000;
3705 border-width: 0 0 1px;
3705 border-width: 0 0 1px;
3706 }
3706 }
3707 @media (min-width: 768px) {
3707 @media (min-width: 768px) {
3708 .navbar-static-top {
3708 .navbar-static-top {
3709 border-radius: 0;
3709 border-radius: 0;
3710 }
3710 }
3711 }
3711 }
3712 .navbar-fixed-top,
3712 .navbar-fixed-top,
3713 .navbar-fixed-bottom {
3713 .navbar-fixed-bottom {
3714 position: fixed;
3714 position: fixed;
3715 right: 0;
3715 right: 0;
3716 left: 0;
3716 left: 0;
3717 z-index: 1030;
3717 z-index: 1030;
3718 }
3718 }
3719 @media (min-width: 768px) {
3719 @media (min-width: 768px) {
3720 .navbar-fixed-top,
3720 .navbar-fixed-top,
3721 .navbar-fixed-bottom {
3721 .navbar-fixed-bottom {
3722 border-radius: 0;
3722 border-radius: 0;
3723 }
3723 }
3724 }
3724 }
3725 .navbar-fixed-top {
3725 .navbar-fixed-top {
3726 top: 0;
3726 top: 0;
3727 border-width: 0 0 1px;
3727 border-width: 0 0 1px;
3728 }
3728 }
3729 .navbar-fixed-bottom {
3729 .navbar-fixed-bottom {
3730 bottom: 0;
3730 bottom: 0;
3731 margin-bottom: 0;
3731 margin-bottom: 0;
3732 border-width: 1px 0 0;
3732 border-width: 1px 0 0;
3733 }
3733 }
3734 .navbar-brand {
3734 .navbar-brand {
3735 float: left;
3735 float: left;
3736 padding: 9px 15px;
3736 padding: 9px 15px;
3737 font-size: 17px;
3737 font-size: 17px;
3738 line-height: 18px;
3738 line-height: 18px;
3739 height: 36px;
3739 height: 36px;
3740 }
3740 }
3741 .navbar-brand:hover,
3741 .navbar-brand:hover,
3742 .navbar-brand:focus {
3742 .navbar-brand:focus {
3743 text-decoration: none;
3743 text-decoration: none;
3744 }
3744 }
3745 @media (min-width: 768px) {
3745 @media (min-width: 768px) {
3746 .navbar > .container .navbar-brand,
3746 .navbar > .container .navbar-brand,
3747 .navbar > .container-fluid .navbar-brand {
3747 .navbar > .container-fluid .navbar-brand {
3748 margin-left: -15px;
3748 margin-left: -15px;
3749 }
3749 }
3750 }
3750 }
3751 .navbar-toggle {
3751 .navbar-toggle {
3752 position: relative;
3752 position: relative;
3753 float: right;
3753 float: right;
3754 margin-right: 15px;
3754 margin-right: 15px;
3755 padding: 9px 10px;
3755 padding: 9px 10px;
3756 margin-top: 1px;
3756 margin-top: 1px;
3757 margin-bottom: 1px;
3757 margin-bottom: 1px;
3758 background-color: transparent;
3758 background-color: transparent;
3759 background-image: none;
3759 background-image: none;
3760 border: 1px solid transparent;
3760 border: 1px solid transparent;
3761 border-radius: 4px;
3761 border-radius: 4px;
3762 }
3762 }
3763 .navbar-toggle:focus {
3763 .navbar-toggle:focus {
3764 outline: none;
3764 outline: none;
3765 }
3765 }
3766 .navbar-toggle .icon-bar {
3766 .navbar-toggle .icon-bar {
3767 display: block;
3767 display: block;
3768 width: 22px;
3768 width: 22px;
3769 height: 2px;
3769 height: 2px;
3770 border-radius: 1px;
3770 border-radius: 1px;
3771 }
3771 }
3772 .navbar-toggle .icon-bar + .icon-bar {
3772 .navbar-toggle .icon-bar + .icon-bar {
3773 margin-top: 4px;
3773 margin-top: 4px;
3774 }
3774 }
3775 @media (min-width: 768px) {
3775 @media (min-width: 768px) {
3776 .navbar-toggle {
3776 .navbar-toggle {
3777 display: none;
3777 display: none;
3778 }
3778 }
3779 }
3779 }
3780 .navbar-nav {
3780 .navbar-nav {
3781 margin: 4.5px -15px;
3781 margin: 4.5px -15px;
3782 }
3782 }
3783 .navbar-nav > li > a {
3783 .navbar-nav > li > a {
3784 padding-top: 10px;
3784 padding-top: 10px;
3785 padding-bottom: 10px;
3785 padding-bottom: 10px;
3786 line-height: 18px;
3786 line-height: 18px;
3787 }
3787 }
3788 @media (max-width: 767px) {
3788 @media (max-width: 767px) {
3789 .navbar-nav .open .dropdown-menu {
3789 .navbar-nav .open .dropdown-menu {
3790 position: static;
3790 position: static;
3791 float: none;
3791 float: none;
3792 width: auto;
3792 width: auto;
3793 margin-top: 0;
3793 margin-top: 0;
3794 background-color: transparent;
3794 background-color: transparent;
3795 border: 0;
3795 border: 0;
3796 box-shadow: none;
3796 box-shadow: none;
3797 }
3797 }
3798 .navbar-nav .open .dropdown-menu > li > a,
3798 .navbar-nav .open .dropdown-menu > li > a,
3799 .navbar-nav .open .dropdown-menu .dropdown-header {
3799 .navbar-nav .open .dropdown-menu .dropdown-header {
3800 padding: 5px 15px 5px 25px;
3800 padding: 5px 15px 5px 25px;
3801 }
3801 }
3802 .navbar-nav .open .dropdown-menu > li > a {
3802 .navbar-nav .open .dropdown-menu > li > a {
3803 line-height: 18px;
3803 line-height: 18px;
3804 }
3804 }
3805 .navbar-nav .open .dropdown-menu > li > a:hover,
3805 .navbar-nav .open .dropdown-menu > li > a:hover,
3806 .navbar-nav .open .dropdown-menu > li > a:focus {
3806 .navbar-nav .open .dropdown-menu > li > a:focus {
3807 background-image: none;
3807 background-image: none;
3808 }
3808 }
3809 }
3809 }
3810 @media (min-width: 768px) {
3810 @media (min-width: 768px) {
3811 .navbar-nav {
3811 .navbar-nav {
3812 float: left;
3812 float: left;
3813 margin: 0;
3813 margin: 0;
3814 }
3814 }
3815 .navbar-nav > li {
3815 .navbar-nav > li {
3816 float: left;
3816 float: left;
3817 }
3817 }
3818 .navbar-nav > li > a {
3818 .navbar-nav > li > a {
3819 padding-top: 9px;
3819 padding-top: 9px;
3820 padding-bottom: 9px;
3820 padding-bottom: 9px;
3821 }
3821 }
3822 .navbar-nav.navbar-right:last-child {
3822 .navbar-nav.navbar-right:last-child {
3823 margin-right: -15px;
3823 margin-right: -15px;
3824 }
3824 }
3825 }
3825 }
3826 @media (min-width: 768px) {
3826 @media (min-width: 768px) {
3827 .navbar-left {
3827 .navbar-left {
3828 float: left !important;
3828 float: left !important;
3829 float: left;
3829 float: left;
3830 }
3830 }
3831 .navbar-right {
3831 .navbar-right {
3832 float: right !important;
3832 float: right !important;
3833 float: right;
3833 float: right;
3834 }
3834 }
3835 }
3835 }
3836 .navbar-form {
3836 .navbar-form {
3837 margin-left: -15px;
3837 margin-left: -15px;
3838 margin-right: -15px;
3838 margin-right: -15px;
3839 padding: 10px 15px;
3839 padding: 10px 15px;
3840 border-top: 1px solid transparent;
3840 border-top: 1px solid transparent;
3841 border-bottom: 1px solid transparent;
3841 border-bottom: 1px solid transparent;
3842 -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
3842 -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
3843 box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
3843 box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
3844 margin-top: 2px;
3844 margin-top: 2px;
3845 margin-bottom: 2px;
3845 margin-bottom: 2px;
3846 }
3846 }
3847 @media (min-width: 768px) {
3847 @media (min-width: 768px) {
3848 .navbar-form .form-group {
3848 .navbar-form .form-group {
3849 display: inline-block;
3849 display: inline-block;
3850 margin-bottom: 0;
3850 margin-bottom: 0;
3851 vertical-align: middle;
3851 vertical-align: middle;
3852 }
3852 }
3853 .navbar-form .form-control {
3853 .navbar-form .form-control {
3854 display: inline-block;
3854 display: inline-block;
3855 width: auto;
3855 width: auto;
3856 vertical-align: middle;
3856 vertical-align: middle;
3857 }
3857 }
3858 .navbar-form .input-group > .form-control {
3858 .navbar-form .input-group > .form-control {
3859 width: 100%;
3859 width: 100%;
3860 }
3860 }
3861 .navbar-form .control-label {
3861 .navbar-form .control-label {
3862 margin-bottom: 0;
3862 margin-bottom: 0;
3863 vertical-align: middle;
3863 vertical-align: middle;
3864 }
3864 }
3865 .navbar-form .radio,
3865 .navbar-form .radio,
3866 .navbar-form .checkbox {
3866 .navbar-form .checkbox {
3867 display: inline-block;
3867 display: inline-block;
3868 margin-top: 0;
3868 margin-top: 0;
3869 margin-bottom: 0;
3869 margin-bottom: 0;
3870 padding-left: 0;
3870 padding-left: 0;
3871 vertical-align: middle;
3871 vertical-align: middle;
3872 }
3872 }
3873 .navbar-form .radio input[type="radio"],
3873 .navbar-form .radio input[type="radio"],
3874 .navbar-form .checkbox input[type="checkbox"] {
3874 .navbar-form .checkbox input[type="checkbox"] {
3875 float: none;
3875 float: none;
3876 margin-left: 0;
3876 margin-left: 0;
3877 }
3877 }
3878 .navbar-form .has-feedback .form-control-feedback {
3878 .navbar-form .has-feedback .form-control-feedback {
3879 top: 0;
3879 top: 0;
3880 }
3880 }
3881 }
3881 }
3882 @media (max-width: 767px) {
3882 @media (max-width: 767px) {
3883 .navbar-form .form-group {
3883 .navbar-form .form-group {
3884 margin-bottom: 5px;
3884 margin-bottom: 5px;
3885 }
3885 }
3886 }
3886 }
3887 @media (min-width: 768px) {
3887 @media (min-width: 768px) {
3888 .navbar-form {
3888 .navbar-form {
3889 width: auto;
3889 width: auto;
3890 border: 0;
3890 border: 0;
3891 margin-left: 0;
3891 margin-left: 0;
3892 margin-right: 0;
3892 margin-right: 0;
3893 padding-top: 0;
3893 padding-top: 0;
3894 padding-bottom: 0;
3894 padding-bottom: 0;
3895 -webkit-box-shadow: none;
3895 -webkit-box-shadow: none;
3896 box-shadow: none;
3896 box-shadow: none;
3897 }
3897 }
3898 .navbar-form.navbar-right:last-child {
3898 .navbar-form.navbar-right:last-child {
3899 margin-right: -15px;
3899 margin-right: -15px;
3900 }
3900 }
3901 }
3901 }
3902 .navbar-nav > li > .dropdown-menu {
3902 .navbar-nav > li > .dropdown-menu {
3903 margin-top: 0;
3903 margin-top: 0;
3904 border-top-right-radius: 0;
3904 border-top-right-radius: 0;
3905 border-top-left-radius: 0;
3905 border-top-left-radius: 0;
3906 }
3906 }
3907 .navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
3907 .navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
3908 border-bottom-right-radius: 0;
3908 border-bottom-right-radius: 0;
3909 border-bottom-left-radius: 0;
3909 border-bottom-left-radius: 0;
3910 }
3910 }
3911 .navbar-btn {
3911 .navbar-btn {
3912 margin-top: 2px;
3912 margin-top: 2px;
3913 margin-bottom: 2px;
3913 margin-bottom: 2px;
3914 }
3914 }
3915 .navbar-btn.btn-sm {
3915 .navbar-btn.btn-sm {
3916 margin-top: 3px;
3916 margin-top: 3px;
3917 margin-bottom: 3px;
3917 margin-bottom: 3px;
3918 }
3918 }
3919 .navbar-btn.btn-xs {
3919 .navbar-btn.btn-xs {
3920 margin-top: 7px;
3920 margin-top: 7px;
3921 margin-bottom: 7px;
3921 margin-bottom: 7px;
3922 }
3922 }
3923 .navbar-text {
3923 .navbar-text {
3924 margin-top: 9px;
3924 margin-top: 9px;
3925 margin-bottom: 9px;
3925 margin-bottom: 9px;
3926 }
3926 }
3927 @media (min-width: 768px) {
3927 @media (min-width: 768px) {
3928 .navbar-text {
3928 .navbar-text {
3929 float: left;
3929 float: left;
3930 margin-left: 15px;
3930 margin-left: 15px;
3931 margin-right: 15px;
3931 margin-right: 15px;
3932 }
3932 }
3933 .navbar-text.navbar-right:last-child {
3933 .navbar-text.navbar-right:last-child {
3934 margin-right: 0;
3934 margin-right: 0;
3935 }
3935 }
3936 }
3936 }
3937 .navbar-default {
3937 .navbar-default {
3938 background-color: #f8f8f8;
3938 background-color: #f8f8f8;
3939 border-color: #e7e7e7;
3939 border-color: #e7e7e7;
3940 }
3940 }
3941 .navbar-default .navbar-brand {
3941 .navbar-default .navbar-brand {
3942 color: #777777;
3942 color: #777777;
3943 }
3943 }
3944 .navbar-default .navbar-brand:hover,
3944 .navbar-default .navbar-brand:hover,
3945 .navbar-default .navbar-brand:focus {
3945 .navbar-default .navbar-brand:focus {
3946 color: #5e5e5e;
3946 color: #5e5e5e;
3947 background-color: transparent;
3947 background-color: transparent;
3948 }
3948 }
3949 .navbar-default .navbar-text {
3949 .navbar-default .navbar-text {
3950 color: #777777;
3950 color: #777777;
3951 }
3951 }
3952 .navbar-default .navbar-nav > li > a {
3952 .navbar-default .navbar-nav > li > a {
3953 color: #777777;
3953 color: #777777;
3954 }
3954 }
3955 .navbar-default .navbar-nav > li > a:hover,
3955 .navbar-default .navbar-nav > li > a:hover,
3956 .navbar-default .navbar-nav > li > a:focus {
3956 .navbar-default .navbar-nav > li > a:focus {
3957 color: #333333;
3957 color: #333333;
3958 background-color: transparent;
3958 background-color: transparent;
3959 }
3959 }
3960 .navbar-default .navbar-nav > .active > a,
3960 .navbar-default .navbar-nav > .active > a,
3961 .navbar-default .navbar-nav > .active > a:hover,
3961 .navbar-default .navbar-nav > .active > a:hover,
3962 .navbar-default .navbar-nav > .active > a:focus {
3962 .navbar-default .navbar-nav > .active > a:focus {
3963 color: #555555;
3963 color: #555555;
3964 background-color: #e7e7e7;
3964 background-color: #e7e7e7;
3965 }
3965 }
3966 .navbar-default .navbar-nav > .disabled > a,
3966 .navbar-default .navbar-nav > .disabled > a,
3967 .navbar-default .navbar-nav > .disabled > a:hover,
3967 .navbar-default .navbar-nav > .disabled > a:hover,
3968 .navbar-default .navbar-nav > .disabled > a:focus {
3968 .navbar-default .navbar-nav > .disabled > a:focus {
3969 color: #cccccc;
3969 color: #cccccc;
3970 background-color: transparent;
3970 background-color: transparent;
3971 }
3971 }
3972 .navbar-default .navbar-toggle {
3972 .navbar-default .navbar-toggle {
3973 border-color: #dddddd;
3973 border-color: #dddddd;
3974 }
3974 }
3975 .navbar-default .navbar-toggle:hover,
3975 .navbar-default .navbar-toggle:hover,
3976 .navbar-default .navbar-toggle:focus {
3976 .navbar-default .navbar-toggle:focus {
3977 background-color: #dddddd;
3977 background-color: #dddddd;
3978 }
3978 }
3979 .navbar-default .navbar-toggle .icon-bar {
3979 .navbar-default .navbar-toggle .icon-bar {
3980 background-color: #888888;
3980 background-color: #888888;
3981 }
3981 }
3982 .navbar-default .navbar-collapse,
3982 .navbar-default .navbar-collapse,
3983 .navbar-default .navbar-form {
3983 .navbar-default .navbar-form {
3984 border-color: #e7e7e7;
3984 border-color: #e7e7e7;
3985 }
3985 }
3986 .navbar-default .navbar-nav > .open > a,
3986 .navbar-default .navbar-nav > .open > a,
3987 .navbar-default .navbar-nav > .open > a:hover,
3987 .navbar-default .navbar-nav > .open > a:hover,
3988 .navbar-default .navbar-nav > .open > a:focus {
3988 .navbar-default .navbar-nav > .open > a:focus {
3989 background-color: #e7e7e7;
3989 background-color: #e7e7e7;
3990 color: #555555;
3990 color: #555555;
3991 }
3991 }
3992 @media (max-width: 767px) {
3992 @media (max-width: 767px) {
3993 .navbar-default .navbar-nav .open .dropdown-menu > li > a {
3993 .navbar-default .navbar-nav .open .dropdown-menu > li > a {
3994 color: #777777;
3994 color: #777777;
3995 }
3995 }
3996 .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
3996 .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
3997 .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
3997 .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
3998 color: #333333;
3998 color: #333333;
3999 background-color: transparent;
3999 background-color: transparent;
4000 }
4000 }
4001 .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
4001 .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
4002 .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
4002 .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
4003 .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
4003 .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
4004 color: #555555;
4004 color: #555555;
4005 background-color: #e7e7e7;
4005 background-color: #e7e7e7;
4006 }
4006 }
4007 .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
4007 .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
4008 .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
4008 .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
4009 .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
4009 .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
4010 color: #cccccc;
4010 color: #cccccc;
4011 background-color: transparent;
4011 background-color: transparent;
4012 }
4012 }
4013 }
4013 }
4014 .navbar-default .navbar-link {
4014 .navbar-default .navbar-link {
4015 color: #777777;
4015 color: #777777;
4016 }
4016 }
4017 .navbar-default .navbar-link:hover {
4017 .navbar-default .navbar-link:hover {
4018 color: #333333;
4018 color: #333333;
4019 }
4019 }
4020 .navbar-inverse {
4020 .navbar-inverse {
4021 background-color: #222222;
4021 background-color: #222222;
4022 border-color: #080808;
4022 border-color: #080808;
4023 }
4023 }
4024 .navbar-inverse .navbar-brand {
4024 .navbar-inverse .navbar-brand {
4025 color: #999999;
4025 color: #999999;
4026 }
4026 }
4027 .navbar-inverse .navbar-brand:hover,
4027 .navbar-inverse .navbar-brand:hover,
4028 .navbar-inverse .navbar-brand:focus {
4028 .navbar-inverse .navbar-brand:focus {
4029 color: #ffffff;
4029 color: #ffffff;
4030 background-color: transparent;
4030 background-color: transparent;
4031 }
4031 }
4032 .navbar-inverse .navbar-text {
4032 .navbar-inverse .navbar-text {
4033 color: #999999;
4033 color: #999999;
4034 }
4034 }
4035 .navbar-inverse .navbar-nav > li > a {
4035 .navbar-inverse .navbar-nav > li > a {
4036 color: #999999;
4036 color: #999999;
4037 }
4037 }
4038 .navbar-inverse .navbar-nav > li > a:hover,
4038 .navbar-inverse .navbar-nav > li > a:hover,
4039 .navbar-inverse .navbar-nav > li > a:focus {
4039 .navbar-inverse .navbar-nav > li > a:focus {
4040 color: #ffffff;
4040 color: #ffffff;
4041 background-color: transparent;
4041 background-color: transparent;
4042 }
4042 }
4043 .navbar-inverse .navbar-nav > .active > a,
4043 .navbar-inverse .navbar-nav > .active > a,
4044 .navbar-inverse .navbar-nav > .active > a:hover,
4044 .navbar-inverse .navbar-nav > .active > a:hover,
4045 .navbar-inverse .navbar-nav > .active > a:focus {
4045 .navbar-inverse .navbar-nav > .active > a:focus {
4046 color: #ffffff;
4046 color: #ffffff;
4047 background-color: #080808;
4047 background-color: #080808;
4048 }
4048 }
4049 .navbar-inverse .navbar-nav > .disabled > a,
4049 .navbar-inverse .navbar-nav > .disabled > a,
4050 .navbar-inverse .navbar-nav > .disabled > a:hover,
4050 .navbar-inverse .navbar-nav > .disabled > a:hover,
4051 .navbar-inverse .navbar-nav > .disabled > a:focus {
4051 .navbar-inverse .navbar-nav > .disabled > a:focus {
4052 color: #444444;
4052 color: #444444;
4053 background-color: transparent;
4053 background-color: transparent;
4054 }
4054 }
4055 .navbar-inverse .navbar-toggle {
4055 .navbar-inverse .navbar-toggle {
4056 border-color: #333333;
4056 border-color: #333333;
4057 }
4057 }
4058 .navbar-inverse .navbar-toggle:hover,
4058 .navbar-inverse .navbar-toggle:hover,
4059 .navbar-inverse .navbar-toggle:focus {
4059 .navbar-inverse .navbar-toggle:focus {
4060 background-color: #333333;
4060 background-color: #333333;
4061 }
4061 }
4062 .navbar-inverse .navbar-toggle .icon-bar {
4062 .navbar-inverse .navbar-toggle .icon-bar {
4063 background-color: #ffffff;
4063 background-color: #ffffff;
4064 }
4064 }
4065 .navbar-inverse .navbar-collapse,
4065 .navbar-inverse .navbar-collapse,
4066 .navbar-inverse .navbar-form {
4066 .navbar-inverse .navbar-form {
4067 border-color: #101010;
4067 border-color: #101010;
4068 }
4068 }
4069 .navbar-inverse .navbar-nav > .open > a,
4069 .navbar-inverse .navbar-nav > .open > a,
4070 .navbar-inverse .navbar-nav > .open > a:hover,
4070 .navbar-inverse .navbar-nav > .open > a:hover,
4071 .navbar-inverse .navbar-nav > .open > a:focus {
4071 .navbar-inverse .navbar-nav > .open > a:focus {
4072 background-color: #080808;
4072 background-color: #080808;
4073 color: #ffffff;
4073 color: #ffffff;
4074 }
4074 }
4075 @media (max-width: 767px) {
4075 @media (max-width: 767px) {
4076 .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
4076 .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
4077 border-color: #080808;
4077 border-color: #080808;
4078 }
4078 }
4079 .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
4079 .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
4080 background-color: #080808;
4080 background-color: #080808;
4081 }
4081 }
4082 .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
4082 .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
4083 color: #999999;
4083 color: #999999;
4084 }
4084 }
4085 .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
4085 .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
4086 .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
4086 .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
4087 color: #ffffff;
4087 color: #ffffff;
4088 background-color: transparent;
4088 background-color: transparent;
4089 }
4089 }
4090 .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
4090 .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
4091 .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
4091 .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
4092 .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
4092 .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
4093 color: #ffffff;
4093 color: #ffffff;
4094 background-color: #080808;
4094 background-color: #080808;
4095 }
4095 }
4096 .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
4096 .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
4097 .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
4097 .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
4098 .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
4098 .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
4099 color: #444444;
4099 color: #444444;
4100 background-color: transparent;
4100 background-color: transparent;
4101 }
4101 }
4102 }
4102 }
4103 .navbar-inverse .navbar-link {
4103 .navbar-inverse .navbar-link {
4104 color: #999999;
4104 color: #999999;
4105 }
4105 }
4106 .navbar-inverse .navbar-link:hover {
4106 .navbar-inverse .navbar-link:hover {
4107 color: #ffffff;
4107 color: #ffffff;
4108 }
4108 }
4109 .breadcrumb {
4109 .breadcrumb {
4110 padding: 8px 15px;
4110 padding: 8px 15px;
4111 margin-bottom: 18px;
4111 margin-bottom: 18px;
4112 list-style: none;
4112 list-style: none;
4113 background-color: #f5f5f5;
4113 background-color: #f5f5f5;
4114 border-radius: 4px;
4114 border-radius: 4px;
4115 }
4115 }
4116 .breadcrumb > li {
4116 .breadcrumb > li {
4117 display: inline-block;
4117 display: inline-block;
4118 }
4118 }
4119 .breadcrumb > li + li:before {
4119 .breadcrumb > li + li:before {
4120 content: "/\00a0";
4120 content: "/\00a0";
4121 padding: 0 5px;
4121 padding: 0 5px;
4122 color: #5e5e5e;
4122 color: #5e5e5e;
4123 }
4123 }
4124 .breadcrumb > .active {
4124 .breadcrumb > .active {
4125 color: #999999;
4125 color: #999999;
4126 }
4126 }
4127 .pagination {
4127 .pagination {
4128 display: inline-block;
4128 display: inline-block;
4129 padding-left: 0;
4129 padding-left: 0;
4130 margin: 18px 0;
4130 margin: 18px 0;
4131 border-radius: 4px;
4131 border-radius: 4px;
4132 }
4132 }
4133 .pagination > li {
4133 .pagination > li {
4134 display: inline;
4134 display: inline;
4135 }
4135 }
4136 .pagination > li > a,
4136 .pagination > li > a,
4137 .pagination > li > span {
4137 .pagination > li > span {
4138 position: relative;
4138 position: relative;
4139 float: left;
4139 float: left;
4140 padding: 6px 12px;
4140 padding: 6px 12px;
4141 line-height: 1.42857143;
4141 line-height: 1.42857143;
4142 text-decoration: none;
4142 text-decoration: none;
4143 color: #428bca;
4143 color: #428bca;
4144 background-color: #ffffff;
4144 background-color: #ffffff;
4145 border: 1px solid #dddddd;
4145 border: 1px solid #dddddd;
4146 margin-left: -1px;
4146 margin-left: -1px;
4147 }
4147 }
4148 .pagination > li:first-child > a,
4148 .pagination > li:first-child > a,
4149 .pagination > li:first-child > span {
4149 .pagination > li:first-child > span {
4150 margin-left: 0;
4150 margin-left: 0;
4151 border-bottom-left-radius: 4px;
4151 border-bottom-left-radius: 4px;
4152 border-top-left-radius: 4px;
4152 border-top-left-radius: 4px;
4153 }
4153 }
4154 .pagination > li:last-child > a,
4154 .pagination > li:last-child > a,
4155 .pagination > li:last-child > span {
4155 .pagination > li:last-child > span {
4156 border-bottom-right-radius: 4px;
4156 border-bottom-right-radius: 4px;
4157 border-top-right-radius: 4px;
4157 border-top-right-radius: 4px;
4158 }
4158 }
4159 .pagination > li > a:hover,
4159 .pagination > li > a:hover,
4160 .pagination > li > span:hover,
4160 .pagination > li > span:hover,
4161 .pagination > li > a:focus,
4161 .pagination > li > a:focus,
4162 .pagination > li > span:focus {
4162 .pagination > li > span:focus {
4163 color: #2a6496;
4163 color: #2a6496;
4164 background-color: #eeeeee;
4164 background-color: #eeeeee;
4165 border-color: #dddddd;
4165 border-color: #dddddd;
4166 }
4166 }
4167 .pagination > .active > a,
4167 .pagination > .active > a,
4168 .pagination > .active > span,
4168 .pagination > .active > span,
4169 .pagination > .active > a:hover,
4169 .pagination > .active > a:hover,
4170 .pagination > .active > span:hover,
4170 .pagination > .active > span:hover,
4171 .pagination > .active > a:focus,
4171 .pagination > .active > a:focus,
4172 .pagination > .active > span:focus {
4172 .pagination > .active > span:focus {
4173 z-index: 2;
4173 z-index: 2;
4174 color: #ffffff;
4174 color: #ffffff;
4175 background-color: #428bca;
4175 background-color: #428bca;
4176 border-color: #428bca;
4176 border-color: #428bca;
4177 cursor: default;
4177 cursor: default;
4178 }
4178 }
4179 .pagination > .disabled > span,
4179 .pagination > .disabled > span,
4180 .pagination > .disabled > span:hover,
4180 .pagination > .disabled > span:hover,
4181 .pagination > .disabled > span:focus,
4181 .pagination > .disabled > span:focus,
4182 .pagination > .disabled > a,
4182 .pagination > .disabled > a,
4183 .pagination > .disabled > a:hover,
4183 .pagination > .disabled > a:hover,
4184 .pagination > .disabled > a:focus {
4184 .pagination > .disabled > a:focus {
4185 color: #999999;
4185 color: #999999;
4186 background-color: #ffffff;
4186 background-color: #ffffff;
4187 border-color: #dddddd;
4187 border-color: #dddddd;
4188 cursor: not-allowed;
4188 cursor: not-allowed;
4189 }
4189 }
4190 .pagination-lg > li > a,
4190 .pagination-lg > li > a,
4191 .pagination-lg > li > span {
4191 .pagination-lg > li > span {
4192 padding: 10px 16px;
4192 padding: 10px 16px;
4193 font-size: 17px;
4193 font-size: 17px;
4194 }
4194 }
4195 .pagination-lg > li:first-child > a,
4195 .pagination-lg > li:first-child > a,
4196 .pagination-lg > li:first-child > span {
4196 .pagination-lg > li:first-child > span {
4197 border-bottom-left-radius: 6px;
4197 border-bottom-left-radius: 6px;
4198 border-top-left-radius: 6px;
4198 border-top-left-radius: 6px;
4199 }
4199 }
4200 .pagination-lg > li:last-child > a,
4200 .pagination-lg > li:last-child > a,
4201 .pagination-lg > li:last-child > span {
4201 .pagination-lg > li:last-child > span {
4202 border-bottom-right-radius: 6px;
4202 border-bottom-right-radius: 6px;
4203 border-top-right-radius: 6px;
4203 border-top-right-radius: 6px;
4204 }
4204 }
4205 .pagination-sm > li > a,
4205 .pagination-sm > li > a,
4206 .pagination-sm > li > span {
4206 .pagination-sm > li > span {
4207 padding: 5px 10px;
4207 padding: 5px 10px;
4208 font-size: 12px;
4208 font-size: 12px;
4209 }
4209 }
4210 .pagination-sm > li:first-child > a,
4210 .pagination-sm > li:first-child > a,
4211 .pagination-sm > li:first-child > span {
4211 .pagination-sm > li:first-child > span {
4212 border-bottom-left-radius: 3px;
4212 border-bottom-left-radius: 3px;
4213 border-top-left-radius: 3px;
4213 border-top-left-radius: 3px;
4214 }
4214 }
4215 .pagination-sm > li:last-child > a,
4215 .pagination-sm > li:last-child > a,
4216 .pagination-sm > li:last-child > span {
4216 .pagination-sm > li:last-child > span {
4217 border-bottom-right-radius: 3px;
4217 border-bottom-right-radius: 3px;
4218 border-top-right-radius: 3px;
4218 border-top-right-radius: 3px;
4219 }
4219 }
4220 .pager {
4220 .pager {
4221 padding-left: 0;
4221 padding-left: 0;
4222 margin: 18px 0;
4222 margin: 18px 0;
4223 list-style: none;
4223 list-style: none;
4224 text-align: center;
4224 text-align: center;
4225 }
4225 }
4226 .pager li {
4226 .pager li {
4227 display: inline;
4227 display: inline;
4228 }
4228 }
4229 .pager li > a,
4229 .pager li > a,
4230 .pager li > span {
4230 .pager li > span {
4231 display: inline-block;
4231 display: inline-block;
4232 padding: 5px 14px;
4232 padding: 5px 14px;
4233 background-color: #ffffff;
4233 background-color: #ffffff;
4234 border: 1px solid #dddddd;
4234 border: 1px solid #dddddd;
4235 border-radius: 15px;
4235 border-radius: 15px;
4236 }
4236 }
4237 .pager li > a:hover,
4237 .pager li > a:hover,
4238 .pager li > a:focus {
4238 .pager li > a:focus {
4239 text-decoration: none;
4239 text-decoration: none;
4240 background-color: #eeeeee;
4240 background-color: #eeeeee;
4241 }
4241 }
4242 .pager .next > a,
4242 .pager .next > a,
4243 .pager .next > span {
4243 .pager .next > span {
4244 float: right;
4244 float: right;
4245 }
4245 }
4246 .pager .previous > a,
4246 .pager .previous > a,
4247 .pager .previous > span {
4247 .pager .previous > span {
4248 float: left;
4248 float: left;
4249 }
4249 }
4250 .pager .disabled > a,
4250 .pager .disabled > a,
4251 .pager .disabled > a:hover,
4251 .pager .disabled > a:hover,
4252 .pager .disabled > a:focus,
4252 .pager .disabled > a:focus,
4253 .pager .disabled > span {
4253 .pager .disabled > span {
4254 color: #999999;
4254 color: #999999;
4255 background-color: #ffffff;
4255 background-color: #ffffff;
4256 cursor: not-allowed;
4256 cursor: not-allowed;
4257 }
4257 }
4258 .label {
4258 .label {
4259 display: inline;
4259 display: inline;
4260 padding: .2em .6em .3em;
4260 padding: .2em .6em .3em;
4261 font-size: 75%;
4261 font-size: 75%;
4262 font-weight: bold;
4262 font-weight: bold;
4263 line-height: 1;
4263 line-height: 1;
4264 color: #ffffff;
4264 color: #ffffff;
4265 text-align: center;
4265 text-align: center;
4266 white-space: nowrap;
4266 white-space: nowrap;
4267 vertical-align: baseline;
4267 vertical-align: baseline;
4268 border-radius: .25em;
4268 border-radius: .25em;
4269 }
4269 }
4270 .label[href]:hover,
4270 .label[href]:hover,
4271 .label[href]:focus {
4271 .label[href]:focus {
4272 color: #ffffff;
4272 color: #ffffff;
4273 text-decoration: none;
4273 text-decoration: none;
4274 cursor: pointer;
4274 cursor: pointer;
4275 }
4275 }
4276 .label:empty {
4276 .label:empty {
4277 display: none;
4277 display: none;
4278 }
4278 }
4279 .btn .label {
4279 .btn .label {
4280 position: relative;
4280 position: relative;
4281 top: -1px;
4281 top: -1px;
4282 }
4282 }
4283 .label-default {
4283 .label-default {
4284 background-color: #999999;
4284 background-color: #999999;
4285 }
4285 }
4286 .label-default[href]:hover,
4286 .label-default[href]:hover,
4287 .label-default[href]:focus {
4287 .label-default[href]:focus {
4288 background-color: #808080;
4288 background-color: #808080;
4289 }
4289 }
4290 .label-primary {
4290 .label-primary {
4291 background-color: #428bca;
4291 background-color: #428bca;
4292 }
4292 }
4293 .label-primary[href]:hover,
4293 .label-primary[href]:hover,
4294 .label-primary[href]:focus {
4294 .label-primary[href]:focus {
4295 background-color: #3071a9;
4295 background-color: #3071a9;
4296 }
4296 }
4297 .label-success {
4297 .label-success {
4298 background-color: #5cb85c;
4298 background-color: #5cb85c;
4299 }
4299 }
4300 .label-success[href]:hover,
4300 .label-success[href]:hover,
4301 .label-success[href]:focus {
4301 .label-success[href]:focus {
4302 background-color: #449d44;
4302 background-color: #449d44;
4303 }
4303 }
4304 .label-info {
4304 .label-info {
4305 background-color: #5bc0de;
4305 background-color: #5bc0de;
4306 }
4306 }
4307 .label-info[href]:hover,
4307 .label-info[href]:hover,
4308 .label-info[href]:focus {
4308 .label-info[href]:focus {
4309 background-color: #31b0d5;
4309 background-color: #31b0d5;
4310 }
4310 }
4311 .label-warning {
4311 .label-warning {
4312 background-color: #f0ad4e;
4312 background-color: #f0ad4e;
4313 }
4313 }
4314 .label-warning[href]:hover,
4314 .label-warning[href]:hover,
4315 .label-warning[href]:focus {
4315 .label-warning[href]:focus {
4316 background-color: #ec971f;
4316 background-color: #ec971f;
4317 }
4317 }
4318 .label-danger {
4318 .label-danger {
4319 background-color: #d9534f;
4319 background-color: #d9534f;
4320 }
4320 }
4321 .label-danger[href]:hover,
4321 .label-danger[href]:hover,
4322 .label-danger[href]:focus {
4322 .label-danger[href]:focus {
4323 background-color: #c9302c;
4323 background-color: #c9302c;
4324 }
4324 }
4325 .badge {
4325 .badge {
4326 display: inline-block;
4326 display: inline-block;
4327 min-width: 10px;
4327 min-width: 10px;
4328 padding: 3px 7px;
4328 padding: 3px 7px;
4329 font-size: 12px;
4329 font-size: 12px;
4330 font-weight: bold;
4330 font-weight: bold;
4331 color: #ffffff;
4331 color: #ffffff;
4332 line-height: 1;
4332 line-height: 1;
4333 vertical-align: baseline;
4333 vertical-align: baseline;
4334 white-space: nowrap;
4334 white-space: nowrap;
4335 text-align: center;
4335 text-align: center;
4336 background-color: #999999;
4336 background-color: #999999;
4337 border-radius: 10px;
4337 border-radius: 10px;
4338 }
4338 }
4339 .badge:empty {
4339 .badge:empty {
4340 display: none;
4340 display: none;
4341 }
4341 }
4342 .btn .badge {
4342 .btn .badge {
4343 position: relative;
4343 position: relative;
4344 top: -1px;
4344 top: -1px;
4345 }
4345 }
4346 .btn-xs .badge {
4346 .btn-xs .badge {
4347 top: 0;
4347 top: 0;
4348 padding: 1px 5px;
4348 padding: 1px 5px;
4349 }
4349 }
4350 a.badge:hover,
4350 a.badge:hover,
4351 a.badge:focus {
4351 a.badge:focus {
4352 color: #ffffff;
4352 color: #ffffff;
4353 text-decoration: none;
4353 text-decoration: none;
4354 cursor: pointer;
4354 cursor: pointer;
4355 }
4355 }
4356 a.list-group-item.active > .badge,
4356 a.list-group-item.active > .badge,
4357 .nav-pills > .active > a > .badge {
4357 .nav-pills > .active > a > .badge {
4358 color: #428bca;
4358 color: #428bca;
4359 background-color: #ffffff;
4359 background-color: #ffffff;
4360 }
4360 }
4361 .nav-pills > li > a > .badge {
4361 .nav-pills > li > a > .badge {
4362 margin-left: 3px;
4362 margin-left: 3px;
4363 }
4363 }
4364 .jumbotron {
4364 .jumbotron {
4365 padding: 30px;
4365 padding: 30px;
4366 margin-bottom: 30px;
4366 margin-bottom: 30px;
4367 color: inherit;
4367 color: inherit;
4368 background-color: #eeeeee;
4368 background-color: #eeeeee;
4369 }
4369 }
4370 .jumbotron h1,
4370 .jumbotron h1,
4371 .jumbotron .h1 {
4371 .jumbotron .h1 {
4372 color: inherit;
4372 color: inherit;
4373 }
4373 }
4374 .jumbotron p {
4374 .jumbotron p {
4375 margin-bottom: 15px;
4375 margin-bottom: 15px;
4376 font-size: 20px;
4376 font-size: 20px;
4377 font-weight: 200;
4377 font-weight: 200;
4378 }
4378 }
4379 .container .jumbotron {
4379 .container .jumbotron {
4380 border-radius: 6px;
4380 border-radius: 6px;
4381 }
4381 }
4382 .jumbotron .container {
4382 .jumbotron .container {
4383 max-width: 100%;
4383 max-width: 100%;
4384 }
4384 }
4385 @media screen and (min-width: 768px) {
4385 @media screen and (min-width: 768px) {
4386 .jumbotron {
4386 .jumbotron {
4387 padding-top: 48px;
4387 padding-top: 48px;
4388 padding-bottom: 48px;
4388 padding-bottom: 48px;
4389 }
4389 }
4390 .container .jumbotron {
4390 .container .jumbotron {
4391 padding-left: 60px;
4391 padding-left: 60px;
4392 padding-right: 60px;
4392 padding-right: 60px;
4393 }
4393 }
4394 .jumbotron h1,
4394 .jumbotron h1,
4395 .jumbotron .h1 {
4395 .jumbotron .h1 {
4396 font-size: 58.5px;
4396 font-size: 58.5px;
4397 }
4397 }
4398 }
4398 }
4399 .thumbnail {
4399 .thumbnail {
4400 display: block;
4400 display: block;
4401 padding: 4px;
4401 padding: 4px;
4402 margin-bottom: 18px;
4402 margin-bottom: 18px;
4403 line-height: 1.42857143;
4403 line-height: 1.42857143;
4404 background-color: #ffffff;
4404 background-color: #ffffff;
4405 border: 1px solid #dddddd;
4405 border: 1px solid #dddddd;
4406 border-radius: 4px;
4406 border-radius: 4px;
4407 -webkit-transition: all 0.2s ease-in-out;
4407 -webkit-transition: all 0.2s ease-in-out;
4408 transition: all 0.2s ease-in-out;
4408 transition: all 0.2s ease-in-out;
4409 }
4409 }
4410 .thumbnail > img,
4410 .thumbnail > img,
4411 .thumbnail a > img {
4411 .thumbnail a > img {
4412 margin-left: auto;
4412 margin-left: auto;
4413 margin-right: auto;
4413 margin-right: auto;
4414 }
4414 }
4415 a.thumbnail:hover,
4415 a.thumbnail:hover,
4416 a.thumbnail:focus,
4416 a.thumbnail:focus,
4417 a.thumbnail.active {
4417 a.thumbnail.active {
4418 border-color: #428bca;
4418 border-color: #428bca;
4419 }
4419 }
4420 .thumbnail .caption {
4420 .thumbnail .caption {
4421 padding: 9px;
4421 padding: 9px;
4422 color: #000000;
4422 color: #000000;
4423 }
4423 }
4424 .alert {
4424 .alert {
4425 padding: 15px;
4425 padding: 15px;
4426 margin-bottom: 18px;
4426 margin-bottom: 18px;
4427 border: 1px solid transparent;
4427 border: 1px solid transparent;
4428 border-radius: 4px;
4428 border-radius: 4px;
4429 }
4429 }
4430 .alert h4 {
4430 .alert h4 {
4431 margin-top: 0;
4431 margin-top: 0;
4432 color: inherit;
4432 color: inherit;
4433 }
4433 }
4434 .alert .alert-link {
4434 .alert .alert-link {
4435 font-weight: bold;
4435 font-weight: bold;
4436 }
4436 }
4437 .alert > p,
4437 .alert > p,
4438 .alert > ul {
4438 .alert > ul {
4439 margin-bottom: 0;
4439 margin-bottom: 0;
4440 }
4440 }
4441 .alert > p + p {
4441 .alert > p + p {
4442 margin-top: 5px;
4442 margin-top: 5px;
4443 }
4443 }
4444 .alert-dismissable {
4444 .alert-dismissable {
4445 padding-right: 35px;
4445 padding-right: 35px;
4446 }
4446 }
4447 .alert-dismissable .close {
4447 .alert-dismissable .close {
4448 position: relative;
4448 position: relative;
4449 top: -2px;
4449 top: -2px;
4450 right: -21px;
4450 right: -21px;
4451 color: inherit;
4451 color: inherit;
4452 }
4452 }
4453 .alert-success {
4453 .alert-success {
4454 background-color: #dff0d8;
4454 background-color: #dff0d8;
4455 border-color: #d6e9c6;
4455 border-color: #d6e9c6;
4456 color: #3c763d;
4456 color: #3c763d;
4457 }
4457 }
4458 .alert-success hr {
4458 .alert-success hr {
4459 border-top-color: #c9e2b3;
4459 border-top-color: #c9e2b3;
4460 }
4460 }
4461 .alert-success .alert-link {
4461 .alert-success .alert-link {
4462 color: #2b542c;
4462 color: #2b542c;
4463 }
4463 }
4464 .alert-info {
4464 .alert-info {
4465 background-color: #d9edf7;
4465 background-color: #d9edf7;
4466 border-color: #bce8f1;
4466 border-color: #bce8f1;
4467 color: #31708f;
4467 color: #31708f;
4468 }
4468 }
4469 .alert-info hr {
4469 .alert-info hr {
4470 border-top-color: #a6e1ec;
4470 border-top-color: #a6e1ec;
4471 }
4471 }
4472 .alert-info .alert-link {
4472 .alert-info .alert-link {
4473 color: #245269;
4473 color: #245269;
4474 }
4474 }
4475 .alert-warning {
4475 .alert-warning {
4476 background-color: #fcf8e3;
4476 background-color: #fcf8e3;
4477 border-color: #faebcc;
4477 border-color: #faebcc;
4478 color: #8a6d3b;
4478 color: #8a6d3b;
4479 }
4479 }
4480 .alert-warning hr {
4480 .alert-warning hr {
4481 border-top-color: #f7e1b5;
4481 border-top-color: #f7e1b5;
4482 }
4482 }
4483 .alert-warning .alert-link {
4483 .alert-warning .alert-link {
4484 color: #66512c;
4484 color: #66512c;
4485 }
4485 }
4486 .alert-danger {
4486 .alert-danger {
4487 background-color: #f2dede;
4487 background-color: #f2dede;
4488 border-color: #ebccd1;
4488 border-color: #ebccd1;
4489 color: #a94442;
4489 color: #a94442;
4490 }
4490 }
4491 .alert-danger hr {
4491 .alert-danger hr {
4492 border-top-color: #e4b9c0;
4492 border-top-color: #e4b9c0;
4493 }
4493 }
4494 .alert-danger .alert-link {
4494 .alert-danger .alert-link {
4495 color: #843534;
4495 color: #843534;
4496 }
4496 }
4497 @-webkit-keyframes progress-bar-stripes {
4497 @-webkit-keyframes progress-bar-stripes {
4498 from {
4498 from {
4499 background-position: 40px 0;
4499 background-position: 40px 0;
4500 }
4500 }
4501 to {
4501 to {
4502 background-position: 0 0;
4502 background-position: 0 0;
4503 }
4503 }
4504 }
4504 }
4505 @keyframes progress-bar-stripes {
4505 @keyframes progress-bar-stripes {
4506 from {
4506 from {
4507 background-position: 40px 0;
4507 background-position: 40px 0;
4508 }
4508 }
4509 to {
4509 to {
4510 background-position: 0 0;
4510 background-position: 0 0;
4511 }
4511 }
4512 }
4512 }
4513 .progress {
4513 .progress {
4514 overflow: hidden;
4514 overflow: hidden;
4515 height: 18px;
4515 height: 18px;
4516 margin-bottom: 18px;
4516 margin-bottom: 18px;
4517 background-color: #f5f5f5;
4517 background-color: #f5f5f5;
4518 border-radius: 4px;
4518 border-radius: 4px;
4519 -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
4519 -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
4520 box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
4520 box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
4521 }
4521 }
4522 .progress-bar {
4522 .progress-bar {
4523 float: left;
4523 float: left;
4524 width: 0%;
4524 width: 0%;
4525 height: 100%;
4525 height: 100%;
4526 font-size: 12px;
4526 font-size: 12px;
4527 line-height: 18px;
4527 line-height: 18px;
4528 color: #ffffff;
4528 color: #ffffff;
4529 text-align: center;
4529 text-align: center;
4530 background-color: #428bca;
4530 background-color: #428bca;
4531 -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
4531 -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
4532 box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
4532 box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
4533 -webkit-transition: width 0.6s ease;
4533 -webkit-transition: width 0.6s ease;
4534 transition: width 0.6s ease;
4534 transition: width 0.6s ease;
4535 }
4535 }
4536 .progress-striped .progress-bar {
4536 .progress-striped .progress-bar {
4537 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);
4537 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);
4538 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);
4538 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);
4539 background-size: 40px 40px;
4539 background-size: 40px 40px;
4540 }
4540 }
4541 .progress.active .progress-bar {
4541 .progress.active .progress-bar {
4542 -webkit-animation: progress-bar-stripes 2s linear infinite;
4542 -webkit-animation: progress-bar-stripes 2s linear infinite;
4543 animation: progress-bar-stripes 2s linear infinite;
4543 animation: progress-bar-stripes 2s linear infinite;
4544 }
4544 }
4545 .progress-bar-success {
4545 .progress-bar-success {
4546 background-color: #5cb85c;
4546 background-color: #5cb85c;
4547 }
4547 }
4548 .progress-striped .progress-bar-success {
4548 .progress-striped .progress-bar-success {
4549 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);
4549 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);
4550 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);
4550 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);
4551 }
4551 }
4552 .progress-bar-info {
4552 .progress-bar-info {
4553 background-color: #5bc0de;
4553 background-color: #5bc0de;
4554 }
4554 }
4555 .progress-striped .progress-bar-info {
4555 .progress-striped .progress-bar-info {
4556 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);
4556 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);
4557 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);
4557 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);
4558 }
4558 }
4559 .progress-bar-warning {
4559 .progress-bar-warning {
4560 background-color: #f0ad4e;
4560 background-color: #f0ad4e;
4561 }
4561 }
4562 .progress-striped .progress-bar-warning {
4562 .progress-striped .progress-bar-warning {
4563 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);
4563 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);
4564 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);
4564 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);
4565 }
4565 }
4566 .progress-bar-danger {
4566 .progress-bar-danger {
4567 background-color: #d9534f;
4567 background-color: #d9534f;
4568 }
4568 }
4569 .progress-striped .progress-bar-danger {
4569 .progress-striped .progress-bar-danger {
4570 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);
4570 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);
4571 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);
4571 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);
4572 }
4572 }
4573 .media,
4573 .media,
4574 .media-body {
4574 .media-body {
4575 overflow: hidden;
4575 overflow: hidden;
4576 zoom: 1;
4576 zoom: 1;
4577 }
4577 }
4578 .media,
4578 .media,
4579 .media .media {
4579 .media .media {
4580 margin-top: 15px;
4580 margin-top: 15px;
4581 }
4581 }
4582 .media:first-child {
4582 .media:first-child {
4583 margin-top: 0;
4583 margin-top: 0;
4584 }
4584 }
4585 .media-object {
4585 .media-object {
4586 display: block;
4586 display: block;
4587 }
4587 }
4588 .media-heading {
4588 .media-heading {
4589 margin: 0 0 5px;
4589 margin: 0 0 5px;
4590 }
4590 }
4591 .media > .pull-left {
4591 .media > .pull-left {
4592 margin-right: 10px;
4592 margin-right: 10px;
4593 }
4593 }
4594 .media > .pull-right {
4594 .media > .pull-right {
4595 margin-left: 10px;
4595 margin-left: 10px;
4596 }
4596 }
4597 .media-list {
4597 .media-list {
4598 padding-left: 0;
4598 padding-left: 0;
4599 list-style: none;
4599 list-style: none;
4600 }
4600 }
4601 .list-group {
4601 .list-group {
4602 margin-bottom: 20px;
4602 margin-bottom: 20px;
4603 padding-left: 0;
4603 padding-left: 0;
4604 }
4604 }
4605 .list-group-item {
4605 .list-group-item {
4606 position: relative;
4606 position: relative;
4607 display: block;
4607 display: block;
4608 padding: 10px 15px;
4608 padding: 10px 15px;
4609 margin-bottom: -1px;
4609 margin-bottom: -1px;
4610 background-color: #ffffff;
4610 background-color: #ffffff;
4611 border: 1px solid #dddddd;
4611 border: 1px solid #dddddd;
4612 }
4612 }
4613 .list-group-item:first-child {
4613 .list-group-item:first-child {
4614 border-top-right-radius: 4px;
4614 border-top-right-radius: 4px;
4615 border-top-left-radius: 4px;
4615 border-top-left-radius: 4px;
4616 }
4616 }
4617 .list-group-item:last-child {
4617 .list-group-item:last-child {
4618 margin-bottom: 0;
4618 margin-bottom: 0;
4619 border-bottom-right-radius: 4px;
4619 border-bottom-right-radius: 4px;
4620 border-bottom-left-radius: 4px;
4620 border-bottom-left-radius: 4px;
4621 }
4621 }
4622 .list-group-item > .badge {
4622 .list-group-item > .badge {
4623 float: right;
4623 float: right;
4624 }
4624 }
4625 .list-group-item > .badge + .badge {
4625 .list-group-item > .badge + .badge {
4626 margin-right: 5px;
4626 margin-right: 5px;
4627 }
4627 }
4628 a.list-group-item {
4628 a.list-group-item {
4629 color: #555555;
4629 color: #555555;
4630 }
4630 }
4631 a.list-group-item .list-group-item-heading {
4631 a.list-group-item .list-group-item-heading {
4632 color: #333333;
4632 color: #333333;
4633 }
4633 }
4634 a.list-group-item:hover,
4634 a.list-group-item:hover,
4635 a.list-group-item:focus {
4635 a.list-group-item:focus {
4636 text-decoration: none;
4636 text-decoration: none;
4637 background-color: #f5f5f5;
4637 background-color: #f5f5f5;
4638 }
4638 }
4639 a.list-group-item.active,
4639 a.list-group-item.active,
4640 a.list-group-item.active:hover,
4640 a.list-group-item.active:hover,
4641 a.list-group-item.active:focus {
4641 a.list-group-item.active:focus {
4642 z-index: 2;
4642 z-index: 2;
4643 color: #ffffff;
4643 color: #ffffff;
4644 background-color: #428bca;
4644 background-color: #428bca;
4645 border-color: #428bca;
4645 border-color: #428bca;
4646 }
4646 }
4647 a.list-group-item.active .list-group-item-heading,
4647 a.list-group-item.active .list-group-item-heading,
4648 a.list-group-item.active:hover .list-group-item-heading,
4648 a.list-group-item.active:hover .list-group-item-heading,
4649 a.list-group-item.active:focus .list-group-item-heading {
4649 a.list-group-item.active:focus .list-group-item-heading {
4650 color: inherit;
4650 color: inherit;
4651 }
4651 }
4652 a.list-group-item.active .list-group-item-text,
4652 a.list-group-item.active .list-group-item-text,
4653 a.list-group-item.active:hover .list-group-item-text,
4653 a.list-group-item.active:hover .list-group-item-text,
4654 a.list-group-item.active:focus .list-group-item-text {
4654 a.list-group-item.active:focus .list-group-item-text {
4655 color: #e1edf7;
4655 color: #e1edf7;
4656 }
4656 }
4657 .list-group-item-success {
4657 .list-group-item-success {
4658 color: #3c763d;
4658 color: #3c763d;
4659 background-color: #dff0d8;
4659 background-color: #dff0d8;
4660 }
4660 }
4661 a.list-group-item-success {
4661 a.list-group-item-success {
4662 color: #3c763d;
4662 color: #3c763d;
4663 }
4663 }
4664 a.list-group-item-success .list-group-item-heading {
4664 a.list-group-item-success .list-group-item-heading {
4665 color: inherit;
4665 color: inherit;
4666 }
4666 }
4667 a.list-group-item-success:hover,
4667 a.list-group-item-success:hover,
4668 a.list-group-item-success:focus {
4668 a.list-group-item-success:focus {
4669 color: #3c763d;
4669 color: #3c763d;
4670 background-color: #d0e9c6;
4670 background-color: #d0e9c6;
4671 }
4671 }
4672 a.list-group-item-success.active,
4672 a.list-group-item-success.active,
4673 a.list-group-item-success.active:hover,
4673 a.list-group-item-success.active:hover,
4674 a.list-group-item-success.active:focus {
4674 a.list-group-item-success.active:focus {
4675 color: #fff;
4675 color: #fff;
4676 background-color: #3c763d;
4676 background-color: #3c763d;
4677 border-color: #3c763d;
4677 border-color: #3c763d;
4678 }
4678 }
4679 .list-group-item-info {
4679 .list-group-item-info {
4680 color: #31708f;
4680 color: #31708f;
4681 background-color: #d9edf7;
4681 background-color: #d9edf7;
4682 }
4682 }
4683 a.list-group-item-info {
4683 a.list-group-item-info {
4684 color: #31708f;
4684 color: #31708f;
4685 }
4685 }
4686 a.list-group-item-info .list-group-item-heading {
4686 a.list-group-item-info .list-group-item-heading {
4687 color: inherit;
4687 color: inherit;
4688 }
4688 }
4689 a.list-group-item-info:hover,
4689 a.list-group-item-info:hover,
4690 a.list-group-item-info:focus {
4690 a.list-group-item-info:focus {
4691 color: #31708f;
4691 color: #31708f;
4692 background-color: #c4e3f3;
4692 background-color: #c4e3f3;
4693 }
4693 }
4694 a.list-group-item-info.active,
4694 a.list-group-item-info.active,
4695 a.list-group-item-info.active:hover,
4695 a.list-group-item-info.active:hover,
4696 a.list-group-item-info.active:focus {
4696 a.list-group-item-info.active:focus {
4697 color: #fff;
4697 color: #fff;
4698 background-color: #31708f;
4698 background-color: #31708f;
4699 border-color: #31708f;
4699 border-color: #31708f;
4700 }
4700 }
4701 .list-group-item-warning {
4701 .list-group-item-warning {
4702 color: #8a6d3b;
4702 color: #8a6d3b;
4703 background-color: #fcf8e3;
4703 background-color: #fcf8e3;
4704 }
4704 }
4705 a.list-group-item-warning {
4705 a.list-group-item-warning {
4706 color: #8a6d3b;
4706 color: #8a6d3b;
4707 }
4707 }
4708 a.list-group-item-warning .list-group-item-heading {
4708 a.list-group-item-warning .list-group-item-heading {
4709 color: inherit;
4709 color: inherit;
4710 }
4710 }
4711 a.list-group-item-warning:hover,
4711 a.list-group-item-warning:hover,
4712 a.list-group-item-warning:focus {
4712 a.list-group-item-warning:focus {
4713 color: #8a6d3b;
4713 color: #8a6d3b;
4714 background-color: #faf2cc;
4714 background-color: #faf2cc;
4715 }
4715 }
4716 a.list-group-item-warning.active,
4716 a.list-group-item-warning.active,
4717 a.list-group-item-warning.active:hover,
4717 a.list-group-item-warning.active:hover,
4718 a.list-group-item-warning.active:focus {
4718 a.list-group-item-warning.active:focus {
4719 color: #fff;
4719 color: #fff;
4720 background-color: #8a6d3b;
4720 background-color: #8a6d3b;
4721 border-color: #8a6d3b;
4721 border-color: #8a6d3b;
4722 }
4722 }
4723 .list-group-item-danger {
4723 .list-group-item-danger {
4724 color: #a94442;
4724 color: #a94442;
4725 background-color: #f2dede;
4725 background-color: #f2dede;
4726 }
4726 }
4727 a.list-group-item-danger {
4727 a.list-group-item-danger {
4728 color: #a94442;
4728 color: #a94442;
4729 }
4729 }
4730 a.list-group-item-danger .list-group-item-heading {
4730 a.list-group-item-danger .list-group-item-heading {
4731 color: inherit;
4731 color: inherit;
4732 }
4732 }
4733 a.list-group-item-danger:hover,
4733 a.list-group-item-danger:hover,
4734 a.list-group-item-danger:focus {
4734 a.list-group-item-danger:focus {
4735 color: #a94442;
4735 color: #a94442;
4736 background-color: #ebcccc;
4736 background-color: #ebcccc;
4737 }
4737 }
4738 a.list-group-item-danger.active,
4738 a.list-group-item-danger.active,
4739 a.list-group-item-danger.active:hover,
4739 a.list-group-item-danger.active:hover,
4740 a.list-group-item-danger.active:focus {
4740 a.list-group-item-danger.active:focus {
4741 color: #fff;
4741 color: #fff;
4742 background-color: #a94442;
4742 background-color: #a94442;
4743 border-color: #a94442;
4743 border-color: #a94442;
4744 }
4744 }
4745 .list-group-item-heading {
4745 .list-group-item-heading {
4746 margin-top: 0;
4746 margin-top: 0;
4747 margin-bottom: 5px;
4747 margin-bottom: 5px;
4748 }
4748 }
4749 .list-group-item-text {
4749 .list-group-item-text {
4750 margin-bottom: 0;
4750 margin-bottom: 0;
4751 line-height: 1.3;
4751 line-height: 1.3;
4752 }
4752 }
4753 .panel {
4753 .panel {
4754 margin-bottom: 18px;
4754 margin-bottom: 18px;
4755 background-color: #ffffff;
4755 background-color: #ffffff;
4756 border: 1px solid transparent;
4756 border: 1px solid transparent;
4757 border-radius: 4px;
4757 border-radius: 4px;
4758 -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
4758 -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
4759 box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
4759 box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
4760 }
4760 }
4761 .panel-body {
4761 .panel-body {
4762 padding: 15px;
4762 padding: 15px;
4763 }
4763 }
4764 .panel-heading {
4764 .panel-heading {
4765 padding: 10px 15px;
4765 padding: 10px 15px;
4766 border-bottom: 1px solid transparent;
4766 border-bottom: 1px solid transparent;
4767 border-top-right-radius: 3px;
4767 border-top-right-radius: 3px;
4768 border-top-left-radius: 3px;
4768 border-top-left-radius: 3px;
4769 }
4769 }
4770 .panel-heading > .dropdown .dropdown-toggle {
4770 .panel-heading > .dropdown .dropdown-toggle {
4771 color: inherit;
4771 color: inherit;
4772 }
4772 }
4773 .panel-title {
4773 .panel-title {
4774 margin-top: 0;
4774 margin-top: 0;
4775 margin-bottom: 0;
4775 margin-bottom: 0;
4776 font-size: 15px;
4776 font-size: 15px;
4777 color: inherit;
4777 color: inherit;
4778 }
4778 }
4779 .panel-title > a {
4779 .panel-title > a {
4780 color: inherit;
4780 color: inherit;
4781 }
4781 }
4782 .panel-footer {
4782 .panel-footer {
4783 padding: 10px 15px;
4783 padding: 10px 15px;
4784 background-color: #f5f5f5;
4784 background-color: #f5f5f5;
4785 border-top: 1px solid #dddddd;
4785 border-top: 1px solid #dddddd;
4786 border-bottom-right-radius: 3px;
4786 border-bottom-right-radius: 3px;
4787 border-bottom-left-radius: 3px;
4787 border-bottom-left-radius: 3px;
4788 }
4788 }
4789 .panel > .list-group {
4789 .panel > .list-group {
4790 margin-bottom: 0;
4790 margin-bottom: 0;
4791 }
4791 }
4792 .panel > .list-group .list-group-item {
4792 .panel > .list-group .list-group-item {
4793 border-width: 1px 0;
4793 border-width: 1px 0;
4794 border-radius: 0;
4794 border-radius: 0;
4795 }
4795 }
4796 .panel > .list-group:first-child .list-group-item:first-child {
4796 .panel > .list-group:first-child .list-group-item:first-child {
4797 border-top: 0;
4797 border-top: 0;
4798 border-top-right-radius: 3px;
4798 border-top-right-radius: 3px;
4799 border-top-left-radius: 3px;
4799 border-top-left-radius: 3px;
4800 }
4800 }
4801 .panel > .list-group:last-child .list-group-item:last-child {
4801 .panel > .list-group:last-child .list-group-item:last-child {
4802 border-bottom: 0;
4802 border-bottom: 0;
4803 border-bottom-right-radius: 3px;
4803 border-bottom-right-radius: 3px;
4804 border-bottom-left-radius: 3px;
4804 border-bottom-left-radius: 3px;
4805 }
4805 }
4806 .panel-heading + .list-group .list-group-item:first-child {
4806 .panel-heading + .list-group .list-group-item:first-child {
4807 border-top-width: 0;
4807 border-top-width: 0;
4808 }
4808 }
4809 .panel > .table,
4809 .panel > .table,
4810 .panel > .table-responsive > .table {
4810 .panel > .table-responsive > .table {
4811 margin-bottom: 0;
4811 margin-bottom: 0;
4812 }
4812 }
4813 .panel > .table:first-child,
4813 .panel > .table:first-child,
4814 .panel > .table-responsive:first-child > .table:first-child {
4814 .panel > .table-responsive:first-child > .table:first-child {
4815 border-top-right-radius: 3px;
4815 border-top-right-radius: 3px;
4816 border-top-left-radius: 3px;
4816 border-top-left-radius: 3px;
4817 }
4817 }
4818 .panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
4818 .panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
4819 .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
4819 .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
4820 .panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
4820 .panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
4821 .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
4821 .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
4822 .panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
4822 .panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
4823 .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
4823 .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
4824 .panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
4824 .panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
4825 .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
4825 .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
4826 border-top-left-radius: 3px;
4826 border-top-left-radius: 3px;
4827 }
4827 }
4828 .panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
4828 .panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
4829 .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
4829 .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
4830 .panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
4830 .panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
4831 .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
4831 .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
4832 .panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
4832 .panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
4833 .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
4833 .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
4834 .panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
4834 .panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
4835 .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
4835 .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
4836 border-top-right-radius: 3px;
4836 border-top-right-radius: 3px;
4837 }
4837 }
4838 .panel > .table:last-child,
4838 .panel > .table:last-child,
4839 .panel > .table-responsive:last-child > .table:last-child {
4839 .panel > .table-responsive:last-child > .table:last-child {
4840 border-bottom-right-radius: 3px;
4840 border-bottom-right-radius: 3px;
4841 border-bottom-left-radius: 3px;
4841 border-bottom-left-radius: 3px;
4842 }
4842 }
4843 .panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
4843 .panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
4844 .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
4844 .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
4845 .panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
4845 .panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
4846 .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
4846 .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
4847 .panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
4847 .panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
4848 .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
4848 .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
4849 .panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
4849 .panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
4850 .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
4850 .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
4851 border-bottom-left-radius: 3px;
4851 border-bottom-left-radius: 3px;
4852 }
4852 }
4853 .panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
4853 .panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
4854 .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
4854 .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
4855 .panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
4855 .panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
4856 .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
4856 .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
4857 .panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
4857 .panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
4858 .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
4858 .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
4859 .panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
4859 .panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
4860 .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
4860 .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
4861 border-bottom-right-radius: 3px;
4861 border-bottom-right-radius: 3px;
4862 }
4862 }
4863 .panel > .panel-body + .table,
4863 .panel > .panel-body + .table,
4864 .panel > .panel-body + .table-responsive {
4864 .panel > .panel-body + .table-responsive {
4865 border-top: 1px solid #dddddd;
4865 border-top: 1px solid #dddddd;
4866 }
4866 }
4867 .panel > .table > tbody:first-child > tr:first-child th,
4867 .panel > .table > tbody:first-child > tr:first-child th,
4868 .panel > .table > tbody:first-child > tr:first-child td {
4868 .panel > .table > tbody:first-child > tr:first-child td {
4869 border-top: 0;
4869 border-top: 0;
4870 }
4870 }
4871 .panel > .table-bordered,
4871 .panel > .table-bordered,
4872 .panel > .table-responsive > .table-bordered {
4872 .panel > .table-responsive > .table-bordered {
4873 border: 0;
4873 border: 0;
4874 }
4874 }
4875 .panel > .table-bordered > thead > tr > th:first-child,
4875 .panel > .table-bordered > thead > tr > th:first-child,
4876 .panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
4876 .panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
4877 .panel > .table-bordered > tbody > tr > th:first-child,
4877 .panel > .table-bordered > tbody > tr > th:first-child,
4878 .panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
4878 .panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
4879 .panel > .table-bordered > tfoot > tr > th:first-child,
4879 .panel > .table-bordered > tfoot > tr > th:first-child,
4880 .panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
4880 .panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
4881 .panel > .table-bordered > thead > tr > td:first-child,
4881 .panel > .table-bordered > thead > tr > td:first-child,
4882 .panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
4882 .panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
4883 .panel > .table-bordered > tbody > tr > td:first-child,
4883 .panel > .table-bordered > tbody > tr > td:first-child,
4884 .panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
4884 .panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
4885 .panel > .table-bordered > tfoot > tr > td:first-child,
4885 .panel > .table-bordered > tfoot > tr > td:first-child,
4886 .panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
4886 .panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
4887 border-left: 0;
4887 border-left: 0;
4888 }
4888 }
4889 .panel > .table-bordered > thead > tr > th:last-child,
4889 .panel > .table-bordered > thead > tr > th:last-child,
4890 .panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
4890 .panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
4891 .panel > .table-bordered > tbody > tr > th:last-child,
4891 .panel > .table-bordered > tbody > tr > th:last-child,
4892 .panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
4892 .panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
4893 .panel > .table-bordered > tfoot > tr > th:last-child,
4893 .panel > .table-bordered > tfoot > tr > th:last-child,
4894 .panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
4894 .panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
4895 .panel > .table-bordered > thead > tr > td:last-child,
4895 .panel > .table-bordered > thead > tr > td:last-child,
4896 .panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
4896 .panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
4897 .panel > .table-bordered > tbody > tr > td:last-child,
4897 .panel > .table-bordered > tbody > tr > td:last-child,
4898 .panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
4898 .panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
4899 .panel > .table-bordered > tfoot > tr > td:last-child,
4899 .panel > .table-bordered > tfoot > tr > td:last-child,
4900 .panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
4900 .panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
4901 border-right: 0;
4901 border-right: 0;
4902 }
4902 }
4903 .panel > .table-bordered > thead > tr:first-child > td,
4903 .panel > .table-bordered > thead > tr:first-child > td,
4904 .panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
4904 .panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
4905 .panel > .table-bordered > tbody > tr:first-child > td,
4905 .panel > .table-bordered > tbody > tr:first-child > td,
4906 .panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
4906 .panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
4907 .panel > .table-bordered > thead > tr:first-child > th,
4907 .panel > .table-bordered > thead > tr:first-child > th,
4908 .panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
4908 .panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
4909 .panel > .table-bordered > tbody > tr:first-child > th,
4909 .panel > .table-bordered > tbody > tr:first-child > th,
4910 .panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
4910 .panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
4911 border-bottom: 0;
4911 border-bottom: 0;
4912 }
4912 }
4913 .panel > .table-bordered > tbody > tr:last-child > td,
4913 .panel > .table-bordered > tbody > tr:last-child > td,
4914 .panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
4914 .panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
4915 .panel > .table-bordered > tfoot > tr:last-child > td,
4915 .panel > .table-bordered > tfoot > tr:last-child > td,
4916 .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
4916 .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
4917 .panel > .table-bordered > tbody > tr:last-child > th,
4917 .panel > .table-bordered > tbody > tr:last-child > th,
4918 .panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
4918 .panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
4919 .panel > .table-bordered > tfoot > tr:last-child > th,
4919 .panel > .table-bordered > tfoot > tr:last-child > th,
4920 .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
4920 .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
4921 border-bottom: 0;
4921 border-bottom: 0;
4922 }
4922 }
4923 .panel > .table-responsive {
4923 .panel > .table-responsive {
4924 border: 0;
4924 border: 0;
4925 margin-bottom: 0;
4925 margin-bottom: 0;
4926 }
4926 }
4927 .panel-group {
4927 .panel-group {
4928 margin-bottom: 18px;
4928 margin-bottom: 18px;
4929 }
4929 }
4930 .panel-group .panel {
4930 .panel-group .panel {
4931 margin-bottom: 0;
4931 margin-bottom: 0;
4932 border-radius: 4px;
4932 border-radius: 4px;
4933 overflow: hidden;
4933 overflow: hidden;
4934 }
4934 }
4935 .panel-group .panel + .panel {
4935 .panel-group .panel + .panel {
4936 margin-top: 5px;
4936 margin-top: 5px;
4937 }
4937 }
4938 .panel-group .panel-heading {
4938 .panel-group .panel-heading {
4939 border-bottom: 0;
4939 border-bottom: 0;
4940 }
4940 }
4941 .panel-group .panel-heading + .panel-collapse .panel-body {
4941 .panel-group .panel-heading + .panel-collapse .panel-body {
4942 border-top: 1px solid #dddddd;
4942 border-top: 1px solid #dddddd;
4943 }
4943 }
4944 .panel-group .panel-footer {
4944 .panel-group .panel-footer {
4945 border-top: 0;
4945 border-top: 0;
4946 }
4946 }
4947 .panel-group .panel-footer + .panel-collapse .panel-body {
4947 .panel-group .panel-footer + .panel-collapse .panel-body {
4948 border-bottom: 1px solid #dddddd;
4948 border-bottom: 1px solid #dddddd;
4949 }
4949 }
4950 .panel-default {
4950 .panel-default {
4951 border-color: #dddddd;
4951 border-color: #dddddd;
4952 }
4952 }
4953 .panel-default > .panel-heading {
4953 .panel-default > .panel-heading {
4954 color: #333333;
4954 color: #333333;
4955 background-color: #f5f5f5;
4955 background-color: #f5f5f5;
4956 border-color: #dddddd;
4956 border-color: #dddddd;
4957 }
4957 }
4958 .panel-default > .panel-heading + .panel-collapse .panel-body {
4958 .panel-default > .panel-heading + .panel-collapse .panel-body {
4959 border-top-color: #dddddd;
4959 border-top-color: #dddddd;
4960 }
4960 }
4961 .panel-default > .panel-footer + .panel-collapse .panel-body {
4961 .panel-default > .panel-footer + .panel-collapse .panel-body {
4962 border-bottom-color: #dddddd;
4962 border-bottom-color: #dddddd;
4963 }
4963 }
4964 .panel-primary {
4964 .panel-primary {
4965 border-color: #428bca;
4965 border-color: #428bca;
4966 }
4966 }
4967 .panel-primary > .panel-heading {
4967 .panel-primary > .panel-heading {
4968 color: #ffffff;
4968 color: #ffffff;
4969 background-color: #428bca;
4969 background-color: #428bca;
4970 border-color: #428bca;
4970 border-color: #428bca;
4971 }
4971 }
4972 .panel-primary > .panel-heading + .panel-collapse .panel-body {
4972 .panel-primary > .panel-heading + .panel-collapse .panel-body {
4973 border-top-color: #428bca;
4973 border-top-color: #428bca;
4974 }
4974 }
4975 .panel-primary > .panel-footer + .panel-collapse .panel-body {
4975 .panel-primary > .panel-footer + .panel-collapse .panel-body {
4976 border-bottom-color: #428bca;
4976 border-bottom-color: #428bca;
4977 }
4977 }
4978 .panel-success {
4978 .panel-success {
4979 border-color: #d6e9c6;
4979 border-color: #d6e9c6;
4980 }
4980 }
4981 .panel-success > .panel-heading {
4981 .panel-success > .panel-heading {
4982 color: #3c763d;
4982 color: #3c763d;
4983 background-color: #dff0d8;
4983 background-color: #dff0d8;
4984 border-color: #d6e9c6;
4984 border-color: #d6e9c6;
4985 }
4985 }
4986 .panel-success > .panel-heading + .panel-collapse .panel-body {
4986 .panel-success > .panel-heading + .panel-collapse .panel-body {
4987 border-top-color: #d6e9c6;
4987 border-top-color: #d6e9c6;
4988 }
4988 }
4989 .panel-success > .panel-footer + .panel-collapse .panel-body {
4989 .panel-success > .panel-footer + .panel-collapse .panel-body {
4990 border-bottom-color: #d6e9c6;
4990 border-bottom-color: #d6e9c6;
4991 }
4991 }
4992 .panel-info {
4992 .panel-info {
4993 border-color: #bce8f1;
4993 border-color: #bce8f1;
4994 }
4994 }
4995 .panel-info > .panel-heading {
4995 .panel-info > .panel-heading {
4996 color: #31708f;
4996 color: #31708f;
4997 background-color: #d9edf7;
4997 background-color: #d9edf7;
4998 border-color: #bce8f1;
4998 border-color: #bce8f1;
4999 }
4999 }
5000 .panel-info > .panel-heading + .panel-collapse .panel-body {
5000 .panel-info > .panel-heading + .panel-collapse .panel-body {
5001 border-top-color: #bce8f1;
5001 border-top-color: #bce8f1;
5002 }
5002 }
5003 .panel-info > .panel-footer + .panel-collapse .panel-body {
5003 .panel-info > .panel-footer + .panel-collapse .panel-body {
5004 border-bottom-color: #bce8f1;
5004 border-bottom-color: #bce8f1;
5005 }
5005 }
5006 .panel-warning {
5006 .panel-warning {
5007 border-color: #faebcc;
5007 border-color: #faebcc;
5008 }
5008 }
5009 .panel-warning > .panel-heading {
5009 .panel-warning > .panel-heading {
5010 color: #8a6d3b;
5010 color: #8a6d3b;
5011 background-color: #fcf8e3;
5011 background-color: #fcf8e3;
5012 border-color: #faebcc;
5012 border-color: #faebcc;
5013 }
5013 }
5014 .panel-warning > .panel-heading + .panel-collapse .panel-body {
5014 .panel-warning > .panel-heading + .panel-collapse .panel-body {
5015 border-top-color: #faebcc;
5015 border-top-color: #faebcc;
5016 }
5016 }
5017 .panel-warning > .panel-footer + .panel-collapse .panel-body {
5017 .panel-warning > .panel-footer + .panel-collapse .panel-body {
5018 border-bottom-color: #faebcc;
5018 border-bottom-color: #faebcc;
5019 }
5019 }
5020 .panel-danger {
5020 .panel-danger {
5021 border-color: #ebccd1;
5021 border-color: #ebccd1;
5022 }
5022 }
5023 .panel-danger > .panel-heading {
5023 .panel-danger > .panel-heading {
5024 color: #a94442;
5024 color: #a94442;
5025 background-color: #f2dede;
5025 background-color: #f2dede;
5026 border-color: #ebccd1;
5026 border-color: #ebccd1;
5027 }
5027 }
5028 .panel-danger > .panel-heading + .panel-collapse .panel-body {
5028 .panel-danger > .panel-heading + .panel-collapse .panel-body {
5029 border-top-color: #ebccd1;
5029 border-top-color: #ebccd1;
5030 }
5030 }
5031 .panel-danger > .panel-footer + .panel-collapse .panel-body {
5031 .panel-danger > .panel-footer + .panel-collapse .panel-body {
5032 border-bottom-color: #ebccd1;
5032 border-bottom-color: #ebccd1;
5033 }
5033 }
5034 .well {
5034 .well {
5035 min-height: 20px;
5035 min-height: 20px;
5036 padding: 19px;
5036 padding: 19px;
5037 margin-bottom: 20px;
5037 margin-bottom: 20px;
5038 background-color: #f5f5f5;
5038 background-color: #f5f5f5;
5039 border: 1px solid #e3e3e3;
5039 border: 1px solid #e3e3e3;
5040 border-radius: 4px;
5040 border-radius: 4px;
5041 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
5041 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
5042 box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
5042 box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
5043 }
5043 }
5044 .well blockquote {
5044 .well blockquote {
5045 border-color: #ddd;
5045 border-color: #ddd;
5046 border-color: rgba(0, 0, 0, 0.15);
5046 border-color: rgba(0, 0, 0, 0.15);
5047 }
5047 }
5048 .well-lg {
5048 .well-lg {
5049 padding: 24px;
5049 padding: 24px;
5050 border-radius: 6px;
5050 border-radius: 6px;
5051 }
5051 }
5052 .well-sm {
5052 .well-sm {
5053 padding: 9px;
5053 padding: 9px;
5054 border-radius: 3px;
5054 border-radius: 3px;
5055 }
5055 }
5056 .close {
5056 .close {
5057 float: right;
5057 float: right;
5058 font-size: 19.5px;
5058 font-size: 19.5px;
5059 font-weight: bold;
5059 font-weight: bold;
5060 line-height: 1;
5060 line-height: 1;
5061 color: #000000;
5061 color: #000000;
5062 text-shadow: 0 1px 0 #ffffff;
5062 text-shadow: 0 1px 0 #ffffff;
5063 opacity: 0.2;
5063 opacity: 0.2;
5064 filter: alpha(opacity=20);
5064 filter: alpha(opacity=20);
5065 }
5065 }
5066 .close:hover,
5066 .close:hover,
5067 .close:focus {
5067 .close:focus {
5068 color: #000000;
5068 color: #000000;
5069 text-decoration: none;
5069 text-decoration: none;
5070 cursor: pointer;
5070 cursor: pointer;
5071 opacity: 0.5;
5071 opacity: 0.5;
5072 filter: alpha(opacity=50);
5072 filter: alpha(opacity=50);
5073 }
5073 }
5074 button.close {
5074 button.close {
5075 padding: 0;
5075 padding: 0;
5076 cursor: pointer;
5076 cursor: pointer;
5077 background: transparent;
5077 background: transparent;
5078 border: 0;
5078 border: 0;
5079 -webkit-appearance: none;
5079 -webkit-appearance: none;
5080 }
5080 }
5081 .modal-open {
5081 .modal-open {
5082 overflow: hidden;
5082 overflow: hidden;
5083 }
5083 }
5084 .modal {
5084 .modal {
5085 display: none;
5085 display: none;
5086 overflow: auto;
5086 overflow: auto;
5087 overflow-y: scroll;
5087 overflow-y: scroll;
5088 position: fixed;
5088 position: fixed;
5089 top: 0;
5089 top: 0;
5090 right: 0;
5090 right: 0;
5091 bottom: 0;
5091 bottom: 0;
5092 left: 0;
5092 left: 0;
5093 z-index: 1050;
5093 z-index: 1050;
5094 -webkit-overflow-scrolling: touch;
5094 -webkit-overflow-scrolling: touch;
5095 outline: 0;
5095 outline: 0;
5096 }
5096 }
5097 .modal.fade .modal-dialog {
5097 .modal.fade .modal-dialog {
5098 -webkit-transform: translate(0, -25%);
5098 -webkit-transform: translate(0, -25%);
5099 -ms-transform: translate(0, -25%);
5099 -ms-transform: translate(0, -25%);
5100 transform: translate(0, -25%);
5100 transform: translate(0, -25%);
5101 -webkit-transition: -webkit-transform 0.3s ease-out;
5101 -webkit-transition: -webkit-transform 0.3s ease-out;
5102 -moz-transition: -moz-transform 0.3s ease-out;
5102 -moz-transition: -moz-transform 0.3s ease-out;
5103 -o-transition: -o-transform 0.3s ease-out;
5103 -o-transition: -o-transform 0.3s ease-out;
5104 transition: transform 0.3s ease-out;
5104 transition: transform 0.3s ease-out;
5105 }
5105 }
5106 .modal.in .modal-dialog {
5106 .modal.in .modal-dialog {
5107 -webkit-transform: translate(0, 0);
5107 -webkit-transform: translate(0, 0);
5108 -ms-transform: translate(0, 0);
5108 -ms-transform: translate(0, 0);
5109 transform: translate(0, 0);
5109 transform: translate(0, 0);
5110 }
5110 }
5111 .modal-dialog {
5111 .modal-dialog {
5112 position: relative;
5112 position: relative;
5113 width: auto;
5113 width: auto;
5114 margin: 10px;
5114 margin: 10px;
5115 }
5115 }
5116 .modal-content {
5116 .modal-content {
5117 position: relative;
5117 position: relative;
5118 background-color: #ffffff;
5118 background-color: #ffffff;
5119 border: 1px solid #999999;
5119 border: 1px solid #999999;
5120 border: 1px solid rgba(0, 0, 0, 0.2);
5120 border: 1px solid rgba(0, 0, 0, 0.2);
5121 border-radius: 6px;
5121 border-radius: 6px;
5122 -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
5122 -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
5123 box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
5123 box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
5124 background-clip: padding-box;
5124 background-clip: padding-box;
5125 outline: none;
5125 outline: none;
5126 }
5126 }
5127 .modal-backdrop {
5127 .modal-backdrop {
5128 position: fixed;
5128 position: fixed;
5129 top: 0;
5129 top: 0;
5130 right: 0;
5130 right: 0;
5131 bottom: 0;
5131 bottom: 0;
5132 left: 0;
5132 left: 0;
5133 z-index: 1040;
5133 z-index: 1040;
5134 background-color: #000000;
5134 background-color: #000000;
5135 }
5135 }
5136 .modal-backdrop.fade {
5136 .modal-backdrop.fade {
5137 opacity: 0;
5137 opacity: 0;
5138 filter: alpha(opacity=0);
5138 filter: alpha(opacity=0);
5139 }
5139 }
5140 .modal-backdrop.in {
5140 .modal-backdrop.in {
5141 opacity: 0.5;
5141 opacity: 0.5;
5142 filter: alpha(opacity=50);
5142 filter: alpha(opacity=50);
5143 }
5143 }
5144 .modal-header {
5144 .modal-header {
5145 padding: 15px;
5145 padding: 15px;
5146 border-bottom: 1px solid #e5e5e5;
5146 border-bottom: 1px solid #e5e5e5;
5147 min-height: 16.42857143px;
5147 min-height: 16.42857143px;
5148 }
5148 }
5149 .modal-header .close {
5149 .modal-header .close {
5150 margin-top: -2px;
5150 margin-top: -2px;
5151 }
5151 }
5152 .modal-title {
5152 .modal-title {
5153 margin: 0;
5153 margin: 0;
5154 line-height: 1.42857143;
5154 line-height: 1.42857143;
5155 }
5155 }
5156 .modal-body {
5156 .modal-body {
5157 position: relative;
5157 position: relative;
5158 padding: 15px;
5158 padding: 15px;
5159 }
5159 }
5160 .modal-footer {
5160 .modal-footer {
5161 margin-top: 15px;
5161 margin-top: 15px;
5162 padding: 14px 15px 15px;
5162 padding: 14px 15px 15px;
5163 text-align: right;
5163 text-align: right;
5164 border-top: 1px solid #e5e5e5;
5164 border-top: 1px solid #e5e5e5;
5165 }
5165 }
5166 .modal-footer .btn + .btn {
5166 .modal-footer .btn + .btn {
5167 margin-left: 5px;
5167 margin-left: 5px;
5168 margin-bottom: 0;
5168 margin-bottom: 0;
5169 }
5169 }
5170 .modal-footer .btn-group .btn + .btn {
5170 .modal-footer .btn-group .btn + .btn {
5171 margin-left: -1px;
5171 margin-left: -1px;
5172 }
5172 }
5173 .modal-footer .btn-block + .btn-block {
5173 .modal-footer .btn-block + .btn-block {
5174 margin-left: 0;
5174 margin-left: 0;
5175 }
5175 }
5176 @media (min-width: 768px) {
5176 @media (min-width: 768px) {
5177 .modal-dialog {
5177 .modal-dialog {
5178 width: 600px;
5178 width: 600px;
5179 margin: 30px auto;
5179 margin: 30px auto;
5180 }
5180 }
5181 .modal-content {
5181 .modal-content {
5182 -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
5182 -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
5183 box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
5183 box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
5184 }
5184 }
5185 .modal-sm {
5185 .modal-sm {
5186 width: 300px;
5186 width: 300px;
5187 }
5187 }
5188 }
5188 }
5189 @media (min-width: 992px) {
5189 @media (min-width: 992px) {
5190 .modal-lg {
5190 .modal-lg {
5191 width: 900px;
5191 width: 900px;
5192 }
5192 }
5193 }
5193 }
5194 .tooltip {
5194 .tooltip {
5195 position: absolute;
5195 position: absolute;
5196 z-index: 1030;
5196 z-index: 1030;
5197 display: block;
5197 display: block;
5198 visibility: visible;
5198 visibility: visible;
5199 font-size: 12px;
5199 font-size: 12px;
5200 line-height: 1.4;
5200 line-height: 1.4;
5201 opacity: 0;
5201 opacity: 0;
5202 filter: alpha(opacity=0);
5202 filter: alpha(opacity=0);
5203 }
5203 }
5204 .tooltip.in {
5204 .tooltip.in {
5205 opacity: 0.9;
5205 opacity: 0.9;
5206 filter: alpha(opacity=90);
5206 filter: alpha(opacity=90);
5207 }
5207 }
5208 .tooltip.top {
5208 .tooltip.top {
5209 margin-top: -3px;
5209 margin-top: -3px;
5210 padding: 5px 0;
5210 padding: 5px 0;
5211 }
5211 }
5212 .tooltip.right {
5212 .tooltip.right {
5213 margin-left: 3px;
5213 margin-left: 3px;
5214 padding: 0 5px;
5214 padding: 0 5px;
5215 }
5215 }
5216 .tooltip.bottom {
5216 .tooltip.bottom {
5217 margin-top: 3px;
5217 margin-top: 3px;
5218 padding: 5px 0;
5218 padding: 5px 0;
5219 }
5219 }
5220 .tooltip.left {
5220 .tooltip.left {
5221 margin-left: -3px;
5221 margin-left: -3px;
5222 padding: 0 5px;
5222 padding: 0 5px;
5223 }
5223 }
5224 .tooltip-inner {
5224 .tooltip-inner {
5225 max-width: 200px;
5225 max-width: 200px;
5226 padding: 3px 8px;
5226 padding: 3px 8px;
5227 color: #ffffff;
5227 color: #ffffff;
5228 text-align: center;
5228 text-align: center;
5229 text-decoration: none;
5229 text-decoration: none;
5230 background-color: #000000;
5230 background-color: #000000;
5231 border-radius: 4px;
5231 border-radius: 4px;
5232 }
5232 }
5233 .tooltip-arrow {
5233 .tooltip-arrow {
5234 position: absolute;
5234 position: absolute;
5235 width: 0;
5235 width: 0;
5236 height: 0;
5236 height: 0;
5237 border-color: transparent;
5237 border-color: transparent;
5238 border-style: solid;
5238 border-style: solid;
5239 }
5239 }
5240 .tooltip.top .tooltip-arrow {
5240 .tooltip.top .tooltip-arrow {
5241 bottom: 0;
5241 bottom: 0;
5242 left: 50%;
5242 left: 50%;
5243 margin-left: -5px;
5243 margin-left: -5px;
5244 border-width: 5px 5px 0;
5244 border-width: 5px 5px 0;
5245 border-top-color: #000000;
5245 border-top-color: #000000;
5246 }
5246 }
5247 .tooltip.top-left .tooltip-arrow {
5247 .tooltip.top-left .tooltip-arrow {
5248 bottom: 0;
5248 bottom: 0;
5249 left: 5px;
5249 left: 5px;
5250 border-width: 5px 5px 0;
5250 border-width: 5px 5px 0;
5251 border-top-color: #000000;
5251 border-top-color: #000000;
5252 }
5252 }
5253 .tooltip.top-right .tooltip-arrow {
5253 .tooltip.top-right .tooltip-arrow {
5254 bottom: 0;
5254 bottom: 0;
5255 right: 5px;
5255 right: 5px;
5256 border-width: 5px 5px 0;
5256 border-width: 5px 5px 0;
5257 border-top-color: #000000;
5257 border-top-color: #000000;
5258 }
5258 }
5259 .tooltip.right .tooltip-arrow {
5259 .tooltip.right .tooltip-arrow {
5260 top: 50%;
5260 top: 50%;
5261 left: 0;
5261 left: 0;
5262 margin-top: -5px;
5262 margin-top: -5px;
5263 border-width: 5px 5px 5px 0;
5263 border-width: 5px 5px 5px 0;
5264 border-right-color: #000000;
5264 border-right-color: #000000;
5265 }
5265 }
5266 .tooltip.left .tooltip-arrow {
5266 .tooltip.left .tooltip-arrow {
5267 top: 50%;
5267 top: 50%;
5268 right: 0;
5268 right: 0;
5269 margin-top: -5px;
5269 margin-top: -5px;
5270 border-width: 5px 0 5px 5px;
5270 border-width: 5px 0 5px 5px;
5271 border-left-color: #000000;
5271 border-left-color: #000000;
5272 }
5272 }
5273 .tooltip.bottom .tooltip-arrow {
5273 .tooltip.bottom .tooltip-arrow {
5274 top: 0;
5274 top: 0;
5275 left: 50%;
5275 left: 50%;
5276 margin-left: -5px;
5276 margin-left: -5px;
5277 border-width: 0 5px 5px;
5277 border-width: 0 5px 5px;
5278 border-bottom-color: #000000;
5278 border-bottom-color: #000000;
5279 }
5279 }
5280 .tooltip.bottom-left .tooltip-arrow {
5280 .tooltip.bottom-left .tooltip-arrow {
5281 top: 0;
5281 top: 0;
5282 left: 5px;
5282 left: 5px;
5283 border-width: 0 5px 5px;
5283 border-width: 0 5px 5px;
5284 border-bottom-color: #000000;
5284 border-bottom-color: #000000;
5285 }
5285 }
5286 .tooltip.bottom-right .tooltip-arrow {
5286 .tooltip.bottom-right .tooltip-arrow {
5287 top: 0;
5287 top: 0;
5288 right: 5px;
5288 right: 5px;
5289 border-width: 0 5px 5px;
5289 border-width: 0 5px 5px;
5290 border-bottom-color: #000000;
5290 border-bottom-color: #000000;
5291 }
5291 }
5292 .popover {
5292 .popover {
5293 position: absolute;
5293 position: absolute;
5294 top: 0;
5294 top: 0;
5295 left: 0;
5295 left: 0;
5296 z-index: 1010;
5296 z-index: 1010;
5297 display: none;
5297 display: none;
5298 max-width: 276px;
5298 max-width: 276px;
5299 padding: 1px;
5299 padding: 1px;
5300 text-align: left;
5300 text-align: left;
5301 background-color: #ffffff;
5301 background-color: #ffffff;
5302 background-clip: padding-box;
5302 background-clip: padding-box;
5303 border: 1px solid #cccccc;
5303 border: 1px solid #cccccc;
5304 border: 1px solid rgba(0, 0, 0, 0.2);
5304 border: 1px solid rgba(0, 0, 0, 0.2);
5305 border-radius: 6px;
5305 border-radius: 6px;
5306 -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
5306 -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
5307 box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
5307 box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
5308 white-space: normal;
5308 white-space: normal;
5309 }
5309 }
5310 .popover.top {
5310 .popover.top {
5311 margin-top: -10px;
5311 margin-top: -10px;
5312 }
5312 }
5313 .popover.right {
5313 .popover.right {
5314 margin-left: 10px;
5314 margin-left: 10px;
5315 }
5315 }
5316 .popover.bottom {
5316 .popover.bottom {
5317 margin-top: 10px;
5317 margin-top: 10px;
5318 }
5318 }
5319 .popover.left {
5319 .popover.left {
5320 margin-left: -10px;
5320 margin-left: -10px;
5321 }
5321 }
5322 .popover-title {
5322 .popover-title {
5323 margin: 0;
5323 margin: 0;
5324 padding: 8px 14px;
5324 padding: 8px 14px;
5325 font-size: 13px;
5325 font-size: 13px;
5326 font-weight: normal;
5326 font-weight: normal;
5327 line-height: 18px;
5327 line-height: 18px;
5328 background-color: #f7f7f7;
5328 background-color: #f7f7f7;
5329 border-bottom: 1px solid #ebebeb;
5329 border-bottom: 1px solid #ebebeb;
5330 border-radius: 5px 5px 0 0;
5330 border-radius: 5px 5px 0 0;
5331 }
5331 }
5332 .popover-content {
5332 .popover-content {
5333 padding: 9px 14px;
5333 padding: 9px 14px;
5334 }
5334 }
5335 .popover > .arrow,
5335 .popover > .arrow,
5336 .popover > .arrow:after {
5336 .popover > .arrow:after {
5337 position: absolute;
5337 position: absolute;
5338 display: block;
5338 display: block;
5339 width: 0;
5339 width: 0;
5340 height: 0;
5340 height: 0;
5341 border-color: transparent;
5341 border-color: transparent;
5342 border-style: solid;
5342 border-style: solid;
5343 }
5343 }
5344 .popover > .arrow {
5344 .popover > .arrow {
5345 border-width: 11px;
5345 border-width: 11px;
5346 }
5346 }
5347 .popover > .arrow:after {
5347 .popover > .arrow:after {
5348 border-width: 10px;
5348 border-width: 10px;
5349 content: "";
5349 content: "";
5350 }
5350 }
5351 .popover.top > .arrow {
5351 .popover.top > .arrow {
5352 left: 50%;
5352 left: 50%;
5353 margin-left: -11px;
5353 margin-left: -11px;
5354 border-bottom-width: 0;
5354 border-bottom-width: 0;
5355 border-top-color: #999999;
5355 border-top-color: #999999;
5356 border-top-color: rgba(0, 0, 0, 0.25);
5356 border-top-color: rgba(0, 0, 0, 0.25);
5357 bottom: -11px;
5357 bottom: -11px;
5358 }
5358 }
5359 .popover.top > .arrow:after {
5359 .popover.top > .arrow:after {
5360 content: " ";
5360 content: " ";
5361 bottom: 1px;
5361 bottom: 1px;
5362 margin-left: -10px;
5362 margin-left: -10px;
5363 border-bottom-width: 0;
5363 border-bottom-width: 0;
5364 border-top-color: #ffffff;
5364 border-top-color: #ffffff;
5365 }
5365 }
5366 .popover.right > .arrow {
5366 .popover.right > .arrow {
5367 top: 50%;
5367 top: 50%;
5368 left: -11px;
5368 left: -11px;
5369 margin-top: -11px;
5369 margin-top: -11px;
5370 border-left-width: 0;
5370 border-left-width: 0;
5371 border-right-color: #999999;
5371 border-right-color: #999999;
5372 border-right-color: rgba(0, 0, 0, 0.25);
5372 border-right-color: rgba(0, 0, 0, 0.25);
5373 }
5373 }
5374 .popover.right > .arrow:after {
5374 .popover.right > .arrow:after {
5375 content: " ";
5375 content: " ";
5376 left: 1px;
5376 left: 1px;
5377 bottom: -10px;
5377 bottom: -10px;
5378 border-left-width: 0;
5378 border-left-width: 0;
5379 border-right-color: #ffffff;
5379 border-right-color: #ffffff;
5380 }
5380 }
5381 .popover.bottom > .arrow {
5381 .popover.bottom > .arrow {
5382 left: 50%;
5382 left: 50%;
5383 margin-left: -11px;
5383 margin-left: -11px;
5384 border-top-width: 0;
5384 border-top-width: 0;
5385 border-bottom-color: #999999;
5385 border-bottom-color: #999999;
5386 border-bottom-color: rgba(0, 0, 0, 0.25);
5386 border-bottom-color: rgba(0, 0, 0, 0.25);
5387 top: -11px;
5387 top: -11px;
5388 }
5388 }
5389 .popover.bottom > .arrow:after {
5389 .popover.bottom > .arrow:after {
5390 content: " ";
5390 content: " ";
5391 top: 1px;
5391 top: 1px;
5392 margin-left: -10px;
5392 margin-left: -10px;
5393 border-top-width: 0;
5393 border-top-width: 0;
5394 border-bottom-color: #ffffff;
5394 border-bottom-color: #ffffff;
5395 }
5395 }
5396 .popover.left > .arrow {
5396 .popover.left > .arrow {
5397 top: 50%;
5397 top: 50%;
5398 right: -11px;
5398 right: -11px;
5399 margin-top: -11px;
5399 margin-top: -11px;
5400 border-right-width: 0;
5400 border-right-width: 0;
5401 border-left-color: #999999;
5401 border-left-color: #999999;
5402 border-left-color: rgba(0, 0, 0, 0.25);
5402 border-left-color: rgba(0, 0, 0, 0.25);
5403 }
5403 }
5404 .popover.left > .arrow:after {
5404 .popover.left > .arrow:after {
5405 content: " ";
5405 content: " ";
5406 right: 1px;
5406 right: 1px;
5407 border-right-width: 0;
5407 border-right-width: 0;
5408 border-left-color: #ffffff;
5408 border-left-color: #ffffff;
5409 bottom: -10px;
5409 bottom: -10px;
5410 }
5410 }
5411 .carousel {
5411 .carousel {
5412 position: relative;
5412 position: relative;
5413 }
5413 }
5414 .carousel-inner {
5414 .carousel-inner {
5415 position: relative;
5415 position: relative;
5416 overflow: hidden;
5416 overflow: hidden;
5417 width: 100%;
5417 width: 100%;
5418 }
5418 }
5419 .carousel-inner > .item {
5419 .carousel-inner > .item {
5420 display: none;
5420 display: none;
5421 position: relative;
5421 position: relative;
5422 -webkit-transition: 0.6s ease-in-out left;
5422 -webkit-transition: 0.6s ease-in-out left;
5423 transition: 0.6s ease-in-out left;
5423 transition: 0.6s ease-in-out left;
5424 }
5424 }
5425 .carousel-inner > .item > img,
5425 .carousel-inner > .item > img,
5426 .carousel-inner > .item > a > img {
5426 .carousel-inner > .item > a > img {
5427 line-height: 1;
5427 line-height: 1;
5428 }
5428 }
5429 .carousel-inner > .active,
5429 .carousel-inner > .active,
5430 .carousel-inner > .next,
5430 .carousel-inner > .next,
5431 .carousel-inner > .prev {
5431 .carousel-inner > .prev {
5432 display: block;
5432 display: block;
5433 }
5433 }
5434 .carousel-inner > .active {
5434 .carousel-inner > .active {
5435 left: 0;
5435 left: 0;
5436 }
5436 }
5437 .carousel-inner > .next,
5437 .carousel-inner > .next,
5438 .carousel-inner > .prev {
5438 .carousel-inner > .prev {
5439 position: absolute;
5439 position: absolute;
5440 top: 0;
5440 top: 0;
5441 width: 100%;
5441 width: 100%;
5442 }
5442 }
5443 .carousel-inner > .next {
5443 .carousel-inner > .next {
5444 left: 100%;
5444 left: 100%;
5445 }
5445 }
5446 .carousel-inner > .prev {
5446 .carousel-inner > .prev {
5447 left: -100%;
5447 left: -100%;
5448 }
5448 }
5449 .carousel-inner > .next.left,
5449 .carousel-inner > .next.left,
5450 .carousel-inner > .prev.right {
5450 .carousel-inner > .prev.right {
5451 left: 0;
5451 left: 0;
5452 }
5452 }
5453 .carousel-inner > .active.left {
5453 .carousel-inner > .active.left {
5454 left: -100%;
5454 left: -100%;
5455 }
5455 }
5456 .carousel-inner > .active.right {
5456 .carousel-inner > .active.right {
5457 left: 100%;
5457 left: 100%;
5458 }
5458 }
5459 .carousel-control {
5459 .carousel-control {
5460 position: absolute;
5460 position: absolute;
5461 top: 0;
5461 top: 0;
5462 left: 0;
5462 left: 0;
5463 bottom: 0;
5463 bottom: 0;
5464 width: 15%;
5464 width: 15%;
5465 opacity: 0.5;
5465 opacity: 0.5;
5466 filter: alpha(opacity=50);
5466 filter: alpha(opacity=50);
5467 font-size: 20px;
5467 font-size: 20px;
5468 color: #ffffff;
5468 color: #ffffff;
5469 text-align: center;
5469 text-align: center;
5470 text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
5470 text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
5471 }
5471 }
5472 .carousel-control.left {
5472 .carousel-control.left {
5473 background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.5) 0%), color-stop(rgba(0, 0, 0, 0.0001) 100%));
5473 background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.5) 0%), color-stop(rgba(0, 0, 0, 0.0001) 100%));
5474 background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
5474 background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
5475 background-repeat: repeat-x;
5475 background-repeat: repeat-x;
5476 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
5476 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
5477 }
5477 }
5478 .carousel-control.right {
5478 .carousel-control.right {
5479 left: auto;
5479 left: auto;
5480 right: 0;
5480 right: 0;
5481 background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.0001) 0%), color-stop(rgba(0, 0, 0, 0.5) 100%));
5481 background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.0001) 0%), color-stop(rgba(0, 0, 0, 0.5) 100%));
5482 background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
5482 background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
5483 background-repeat: repeat-x;
5483 background-repeat: repeat-x;
5484 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
5484 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
5485 }
5485 }
5486 .carousel-control:hover,
5486 .carousel-control:hover,
5487 .carousel-control:focus {
5487 .carousel-control:focus {
5488 outline: none;
5488 outline: none;
5489 color: #ffffff;
5489 color: #ffffff;
5490 text-decoration: none;
5490 text-decoration: none;
5491 opacity: 0.9;
5491 opacity: 0.9;
5492 filter: alpha(opacity=90);
5492 filter: alpha(opacity=90);
5493 }
5493 }
5494 .carousel-control .icon-prev,
5494 .carousel-control .icon-prev,
5495 .carousel-control .icon-next,
5495 .carousel-control .icon-next,
5496 .carousel-control .glyphicon-chevron-left,
5496 .carousel-control .glyphicon-chevron-left,
5497 .carousel-control .glyphicon-chevron-right {
5497 .carousel-control .glyphicon-chevron-right {
5498 position: absolute;
5498 position: absolute;
5499 top: 50%;
5499 top: 50%;
5500 z-index: 5;
5500 z-index: 5;
5501 display: inline-block;
5501 display: inline-block;
5502 }
5502 }
5503 .carousel-control .icon-prev,
5503 .carousel-control .icon-prev,
5504 .carousel-control .glyphicon-chevron-left {
5504 .carousel-control .glyphicon-chevron-left {
5505 left: 50%;
5505 left: 50%;
5506 }
5506 }
5507 .carousel-control .icon-next,
5507 .carousel-control .icon-next,
5508 .carousel-control .glyphicon-chevron-right {
5508 .carousel-control .glyphicon-chevron-right {
5509 right: 50%;
5509 right: 50%;
5510 }
5510 }
5511 .carousel-control .icon-prev,
5511 .carousel-control .icon-prev,
5512 .carousel-control .icon-next {
5512 .carousel-control .icon-next {
5513 width: 20px;
5513 width: 20px;
5514 height: 20px;
5514 height: 20px;
5515 margin-top: -10px;
5515 margin-top: -10px;
5516 margin-left: -10px;
5516 margin-left: -10px;
5517 font-family: serif;
5517 font-family: serif;
5518 }
5518 }
5519 .carousel-control .icon-prev:before {
5519 .carousel-control .icon-prev:before {
5520 content: '\2039';
5520 content: '\2039';
5521 }
5521 }
5522 .carousel-control .icon-next:before {
5522 .carousel-control .icon-next:before {
5523 content: '\203a';
5523 content: '\203a';
5524 }
5524 }
5525 .carousel-indicators {
5525 .carousel-indicators {
5526 position: absolute;
5526 position: absolute;
5527 bottom: 10px;
5527 bottom: 10px;
5528 left: 50%;
5528 left: 50%;
5529 z-index: 15;
5529 z-index: 15;
5530 width: 60%;
5530 width: 60%;
5531 margin-left: -30%;
5531 margin-left: -30%;
5532 padding-left: 0;
5532 padding-left: 0;
5533 list-style: none;
5533 list-style: none;
5534 text-align: center;
5534 text-align: center;
5535 }
5535 }
5536 .carousel-indicators li {
5536 .carousel-indicators li {
5537 display: inline-block;
5537 display: inline-block;
5538 width: 10px;
5538 width: 10px;
5539 height: 10px;
5539 height: 10px;
5540 margin: 1px;
5540 margin: 1px;
5541 text-indent: -999px;
5541 text-indent: -999px;
5542 border: 1px solid #ffffff;
5542 border: 1px solid #ffffff;
5543 border-radius: 10px;
5543 border-radius: 10px;
5544 cursor: pointer;
5544 cursor: pointer;
5545 background-color: #000 \9;
5545 background-color: #000 \9;
5546 background-color: rgba(0, 0, 0, 0);
5546 background-color: rgba(0, 0, 0, 0);
5547 }
5547 }
5548 .carousel-indicators .active {
5548 .carousel-indicators .active {
5549 margin: 0;
5549 margin: 0;
5550 width: 12px;
5550 width: 12px;
5551 height: 12px;
5551 height: 12px;
5552 background-color: #ffffff;
5552 background-color: #ffffff;
5553 }
5553 }
5554 .carousel-caption {
5554 .carousel-caption {
5555 position: absolute;
5555 position: absolute;
5556 left: 15%;
5556 left: 15%;
5557 right: 15%;
5557 right: 15%;
5558 bottom: 20px;
5558 bottom: 20px;
5559 z-index: 10;
5559 z-index: 10;
5560 padding-top: 20px;
5560 padding-top: 20px;
5561 padding-bottom: 20px;
5561 padding-bottom: 20px;
5562 color: #ffffff;
5562 color: #ffffff;
5563 text-align: center;
5563 text-align: center;
5564 text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
5564 text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
5565 }
5565 }
5566 .carousel-caption .btn {
5566 .carousel-caption .btn {
5567 text-shadow: none;
5567 text-shadow: none;
5568 }
5568 }
5569 @media screen and (min-width: 768px) {
5569 @media screen and (min-width: 768px) {
5570 .carousel-control .glyphicon-chevron-left,
5570 .carousel-control .glyphicon-chevron-left,
5571 .carousel-control .glyphicon-chevron-right,
5571 .carousel-control .glyphicon-chevron-right,
5572 .carousel-control .icon-prev,
5572 .carousel-control .icon-prev,
5573 .carousel-control .icon-next {
5573 .carousel-control .icon-next {
5574 width: 30px;
5574 width: 30px;
5575 height: 30px;
5575 height: 30px;
5576 margin-top: -15px;
5576 margin-top: -15px;
5577 margin-left: -15px;
5577 margin-left: -15px;
5578 font-size: 30px;
5578 font-size: 30px;
5579 }
5579 }
5580 .carousel-caption {
5580 .carousel-caption {
5581 left: 20%;
5581 left: 20%;
5582 right: 20%;
5582 right: 20%;
5583 padding-bottom: 30px;
5583 padding-bottom: 30px;
5584 }
5584 }
5585 .carousel-indicators {
5585 .carousel-indicators {
5586 bottom: 20px;
5586 bottom: 20px;
5587 }
5587 }
5588 }
5588 }
5589 .clearfix:before,
5589 .clearfix:before,
5590 .clearfix:after,
5590 .clearfix:after,
5591 .container:before,
5591 .container:before,
5592 .container:after,
5592 .container:after,
5593 .container-fluid:before,
5593 .container-fluid:before,
5594 .container-fluid:after,
5594 .container-fluid:after,
5595 .row:before,
5595 .row:before,
5596 .row:after,
5596 .row:after,
5597 .form-horizontal .form-group:before,
5597 .form-horizontal .form-group:before,
5598 .form-horizontal .form-group:after,
5598 .form-horizontal .form-group:after,
5599 .btn-toolbar:before,
5599 .btn-toolbar:before,
5600 .btn-toolbar:after,
5600 .btn-toolbar:after,
5601 .btn-group-vertical > .btn-group:before,
5601 .btn-group-vertical > .btn-group:before,
5602 .btn-group-vertical > .btn-group:after,
5602 .btn-group-vertical > .btn-group:after,
5603 .nav:before,
5603 .nav:before,
5604 .nav:after,
5604 .nav:after,
5605 .navbar:before,
5605 .navbar:before,
5606 .navbar:after,
5606 .navbar:after,
5607 .navbar-header:before,
5607 .navbar-header:before,
5608 .navbar-header:after,
5608 .navbar-header:after,
5609 .navbar-collapse:before,
5609 .navbar-collapse:before,
5610 .navbar-collapse:after,
5610 .navbar-collapse:after,
5611 .pager:before,
5611 .pager:before,
5612 .pager:after,
5612 .pager:after,
5613 .panel-body:before,
5613 .panel-body:before,
5614 .panel-body:after,
5614 .panel-body:after,
5615 .modal-footer:before,
5615 .modal-footer:before,
5616 .modal-footer:after {
5616 .modal-footer:after {
5617 content: " ";
5617 content: " ";
5618 display: table;
5618 display: table;
5619 }
5619 }
5620 .clearfix:after,
5620 .clearfix:after,
5621 .container:after,
5621 .container:after,
5622 .container-fluid:after,
5622 .container-fluid:after,
5623 .row:after,
5623 .row:after,
5624 .form-horizontal .form-group:after,
5624 .form-horizontal .form-group:after,
5625 .btn-toolbar:after,
5625 .btn-toolbar:after,
5626 .btn-group-vertical > .btn-group:after,
5626 .btn-group-vertical > .btn-group:after,
5627 .nav:after,
5627 .nav:after,
5628 .navbar:after,
5628 .navbar:after,
5629 .navbar-header:after,
5629 .navbar-header:after,
5630 .navbar-collapse:after,
5630 .navbar-collapse:after,
5631 .pager:after,
5631 .pager:after,
5632 .panel-body:after,
5632 .panel-body:after,
5633 .modal-footer:after {
5633 .modal-footer:after {
5634 clear: both;
5634 clear: both;
5635 }
5635 }
5636 .center-block {
5636 .center-block {
5637 display: block;
5637 display: block;
5638 margin-left: auto;
5638 margin-left: auto;
5639 margin-right: auto;
5639 margin-right: auto;
5640 }
5640 }
5641 .pull-right {
5641 .pull-right {
5642 float: right !important;
5642 float: right !important;
5643 }
5643 }
5644 .pull-left {
5644 .pull-left {
5645 float: left !important;
5645 float: left !important;
5646 }
5646 }
5647 .hide {
5647 .hide {
5648 display: none !important;
5648 display: none !important;
5649 }
5649 }
5650 .show {
5650 .show {
5651 display: block !important;
5651 display: block !important;
5652 }
5652 }
5653 .invisible {
5653 .invisible {
5654 visibility: hidden;
5654 visibility: hidden;
5655 }
5655 }
5656 .text-hide {
5656 .text-hide {
5657 font: 0/0 a;
5657 font: 0/0 a;
5658 color: transparent;
5658 color: transparent;
5659 text-shadow: none;
5659 text-shadow: none;
5660 background-color: transparent;
5660 background-color: transparent;
5661 border: 0;
5661 border: 0;
5662 }
5662 }
5663 .hidden {
5663 .hidden {
5664 display: none !important;
5664 display: none !important;
5665 visibility: hidden !important;
5665 visibility: hidden !important;
5666 }
5666 }
5667 .affix {
5667 .affix {
5668 position: fixed;
5668 position: fixed;
5669 }
5669 }
5670 @-ms-viewport {
5670 @-ms-viewport {
5671 width: device-width;
5671 width: device-width;
5672 }
5672 }
5673 .visible-xs,
5673 .visible-xs,
5674 .visible-sm,
5674 .visible-sm,
5675 .visible-md,
5675 .visible-md,
5676 .visible-lg {
5676 .visible-lg {
5677 display: none !important;
5677 display: none !important;
5678 }
5678 }
5679 @media (max-width: 767px) {
5679 @media (max-width: 767px) {
5680 .visible-xs {
5680 .visible-xs {
5681 display: block !important;
5681 display: block !important;
5682 }
5682 }
5683 table.visible-xs {
5683 table.visible-xs {
5684 display: table;
5684 display: table;
5685 }
5685 }
5686 tr.visible-xs {
5686 tr.visible-xs {
5687 display: table-row !important;
5687 display: table-row !important;
5688 }
5688 }
5689 th.visible-xs,
5689 th.visible-xs,
5690 td.visible-xs {
5690 td.visible-xs {
5691 display: table-cell !important;
5691 display: table-cell !important;
5692 }
5692 }
5693 }
5693 }
5694 @media (min-width: 768px) and (max-width: 991px) {
5694 @media (min-width: 768px) and (max-width: 991px) {
5695 .visible-sm {
5695 .visible-sm {
5696 display: block !important;
5696 display: block !important;
5697 }
5697 }
5698 table.visible-sm {
5698 table.visible-sm {
5699 display: table;
5699 display: table;
5700 }
5700 }
5701 tr.visible-sm {
5701 tr.visible-sm {
5702 display: table-row !important;
5702 display: table-row !important;
5703 }
5703 }
5704 th.visible-sm,
5704 th.visible-sm,
5705 td.visible-sm {
5705 td.visible-sm {
5706 display: table-cell !important;
5706 display: table-cell !important;
5707 }
5707 }
5708 }
5708 }
5709 @media (min-width: 992px) and (max-width: 1199px) {
5709 @media (min-width: 992px) and (max-width: 1199px) {
5710 .visible-md {
5710 .visible-md {
5711 display: block !important;
5711 display: block !important;
5712 }
5712 }
5713 table.visible-md {
5713 table.visible-md {
5714 display: table;
5714 display: table;
5715 }
5715 }
5716 tr.visible-md {
5716 tr.visible-md {
5717 display: table-row !important;
5717 display: table-row !important;
5718 }
5718 }
5719 th.visible-md,
5719 th.visible-md,
5720 td.visible-md {
5720 td.visible-md {
5721 display: table-cell !important;
5721 display: table-cell !important;
5722 }
5722 }
5723 }
5723 }
5724 @media (min-width: 1200px) {
5724 @media (min-width: 1200px) {
5725 .visible-lg {
5725 .visible-lg {
5726 display: block !important;
5726 display: block !important;
5727 }
5727 }
5728 table.visible-lg {
5728 table.visible-lg {
5729 display: table;
5729 display: table;
5730 }
5730 }
5731 tr.visible-lg {
5731 tr.visible-lg {
5732 display: table-row !important;
5732 display: table-row !important;
5733 }
5733 }
5734 th.visible-lg,
5734 th.visible-lg,
5735 td.visible-lg {
5735 td.visible-lg {
5736 display: table-cell !important;
5736 display: table-cell !important;
5737 }
5737 }
5738 }
5738 }
5739 @media (max-width: 767px) {
5739 @media (max-width: 767px) {
5740 .hidden-xs {
5740 .hidden-xs {
5741 display: none !important;
5741 display: none !important;
5742 }
5742 }
5743 }
5743 }
5744 @media (min-width: 768px) and (max-width: 991px) {
5744 @media (min-width: 768px) and (max-width: 991px) {
5745 .hidden-sm {
5745 .hidden-sm {
5746 display: none !important;
5746 display: none !important;
5747 }
5747 }
5748 }
5748 }
5749 @media (min-width: 992px) and (max-width: 1199px) {
5749 @media (min-width: 992px) and (max-width: 1199px) {
5750 .hidden-md {
5750 .hidden-md {
5751 display: none !important;
5751 display: none !important;
5752 }
5752 }
5753 }
5753 }
5754 @media (min-width: 1200px) {
5754 @media (min-width: 1200px) {
5755 .hidden-lg {
5755 .hidden-lg {
5756 display: none !important;
5756 display: none !important;
5757 }
5757 }
5758 }
5758 }
5759 .visible-print {
5759 .visible-print {
5760 display: none !important;
5760 display: none !important;
5761 }
5761 }
5762 @media print {
5762 @media print {
5763 .visible-print {
5763 .visible-print {
5764 display: block !important;
5764 display: block !important;
5765 }
5765 }
5766 table.visible-print {
5766 table.visible-print {
5767 display: table;
5767 display: table;
5768 }
5768 }
5769 tr.visible-print {
5769 tr.visible-print {
5770 display: table-row !important;
5770 display: table-row !important;
5771 }
5771 }
5772 th.visible-print,
5772 th.visible-print,
5773 td.visible-print {
5773 td.visible-print {
5774 display: table-cell !important;
5774 display: table-cell !important;
5775 }
5775 }
5776 }
5776 }
5777 @media print {
5777 @media print {
5778 .hidden-print {
5778 .hidden-print {
5779 display: none !important;
5779 display: none !important;
5780 }
5780 }
5781 }
5781 }
5782 /*!
5782 /*!
5783 *
5783 *
5784 * Font Awesome
5784 * Font Awesome
5785 *
5785 *
5786 */
5786 */
5787 /*!
5787 /*!
5788 * Font Awesome 4.1.0 by @davegandy - http://fontawesome.io - @fontawesome
5788 * Font Awesome 4.1.0 by @davegandy - http://fontawesome.io - @fontawesome
5789 * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
5789 * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
5790 */
5790 */
5791 /* FONT PATH
5791 /* FONT PATH
5792 * -------------------------- */
5792 * -------------------------- */
5793 @font-face {
5793 @font-face {
5794 font-family: 'FontAwesome';
5794 font-family: 'FontAwesome';
5795 src: url('../components/font-awesome/fonts/fontawesome-webfont.eot?v=4.1.0');
5795 src: url('../components/font-awesome/fonts/fontawesome-webfont.eot?v=4.1.0');
5796 src: url('../components/font-awesome/fonts/fontawesome-webfont.eot?#iefix&v=4.1.0') format('embedded-opentype'), url('../components/font-awesome/fonts/fontawesome-webfont.woff?v=4.1.0') format('woff'), url('../components/font-awesome/fonts/fontawesome-webfont.ttf?v=4.1.0') format('truetype'), url('../components/font-awesome/fonts/fontawesome-webfont.svg?v=4.1.0#fontawesomeregular') format('svg');
5796 src: url('../components/font-awesome/fonts/fontawesome-webfont.eot?#iefix&v=4.1.0') format('embedded-opentype'), url('../components/font-awesome/fonts/fontawesome-webfont.woff?v=4.1.0') format('woff'), url('../components/font-awesome/fonts/fontawesome-webfont.ttf?v=4.1.0') format('truetype'), url('../components/font-awesome/fonts/fontawesome-webfont.svg?v=4.1.0#fontawesomeregular') format('svg');
5797 font-weight: normal;
5797 font-weight: normal;
5798 font-style: normal;
5798 font-style: normal;
5799 }
5799 }
5800 .fa {
5800 .fa {
5801 display: inline-block;
5801 display: inline-block;
5802 font-family: FontAwesome;
5802 font-family: FontAwesome;
5803 font-style: normal;
5803 font-style: normal;
5804 font-weight: normal;
5804 font-weight: normal;
5805 line-height: 1;
5805 line-height: 1;
5806 -webkit-font-smoothing: antialiased;
5806 -webkit-font-smoothing: antialiased;
5807 -moz-osx-font-smoothing: grayscale;
5807 -moz-osx-font-smoothing: grayscale;
5808 }
5808 }
5809 /* makes the font 33% larger relative to the icon container */
5809 /* makes the font 33% larger relative to the icon container */
5810 .fa-lg {
5810 .fa-lg {
5811 font-size: 1.33333333em;
5811 font-size: 1.33333333em;
5812 line-height: 0.75em;
5812 line-height: 0.75em;
5813 vertical-align: -15%;
5813 vertical-align: -15%;
5814 }
5814 }
5815 .fa-2x {
5815 .fa-2x {
5816 font-size: 2em;
5816 font-size: 2em;
5817 }
5817 }
5818 .fa-3x {
5818 .fa-3x {
5819 font-size: 3em;
5819 font-size: 3em;
5820 }
5820 }
5821 .fa-4x {
5821 .fa-4x {
5822 font-size: 4em;
5822 font-size: 4em;
5823 }
5823 }
5824 .fa-5x {
5824 .fa-5x {
5825 font-size: 5em;
5825 font-size: 5em;
5826 }
5826 }
5827 .fa-fw {
5827 .fa-fw {
5828 width: 1.28571429em;
5828 width: 1.28571429em;
5829 text-align: center;
5829 text-align: center;
5830 }
5830 }
5831 .fa-ul {
5831 .fa-ul {
5832 padding-left: 0;
5832 padding-left: 0;
5833 margin-left: 2.14285714em;
5833 margin-left: 2.14285714em;
5834 list-style-type: none;
5834 list-style-type: none;
5835 }
5835 }
5836 .fa-ul > li {
5836 .fa-ul > li {
5837 position: relative;
5837 position: relative;
5838 }
5838 }
5839 .fa-li {
5839 .fa-li {
5840 position: absolute;
5840 position: absolute;
5841 left: -2.14285714em;
5841 left: -2.14285714em;
5842 width: 2.14285714em;
5842 width: 2.14285714em;
5843 top: 0.14285714em;
5843 top: 0.14285714em;
5844 text-align: center;
5844 text-align: center;
5845 }
5845 }
5846 .fa-li.fa-lg {
5846 .fa-li.fa-lg {
5847 left: -1.85714286em;
5847 left: -1.85714286em;
5848 }
5848 }
5849 .fa-border {
5849 .fa-border {
5850 padding: .2em .25em .15em;
5850 padding: .2em .25em .15em;
5851 border: solid 0.08em #eeeeee;
5851 border: solid 0.08em #eeeeee;
5852 border-radius: .1em;
5852 border-radius: .1em;
5853 }
5853 }
5854 .pull-right {
5854 .pull-right {
5855 float: right;
5855 float: right;
5856 }
5856 }
5857 .pull-left {
5857 .pull-left {
5858 float: left;
5858 float: left;
5859 }
5859 }
5860 .fa.pull-left {
5860 .fa.pull-left {
5861 margin-right: .3em;
5861 margin-right: .3em;
5862 }
5862 }
5863 .fa.pull-right {
5863 .fa.pull-right {
5864 margin-left: .3em;
5864 margin-left: .3em;
5865 }
5865 }
5866 .fa-spin {
5866 .fa-spin {
5867 -webkit-animation: spin 2s infinite linear;
5867 -webkit-animation: spin 2s infinite linear;
5868 -moz-animation: spin 2s infinite linear;
5868 -moz-animation: spin 2s infinite linear;
5869 -o-animation: spin 2s infinite linear;
5869 -o-animation: spin 2s infinite linear;
5870 animation: spin 2s infinite linear;
5870 animation: spin 2s infinite linear;
5871 }
5871 }
5872 @-moz-keyframes spin {
5872 @-moz-keyframes spin {
5873 0% {
5873 0% {
5874 -moz-transform: rotate(0deg);
5874 -moz-transform: rotate(0deg);
5875 }
5875 }
5876 100% {
5876 100% {
5877 -moz-transform: rotate(359deg);
5877 -moz-transform: rotate(359deg);
5878 }
5878 }
5879 }
5879 }
5880 @-webkit-keyframes spin {
5880 @-webkit-keyframes spin {
5881 0% {
5881 0% {
5882 -webkit-transform: rotate(0deg);
5882 -webkit-transform: rotate(0deg);
5883 }
5883 }
5884 100% {
5884 100% {
5885 -webkit-transform: rotate(359deg);
5885 -webkit-transform: rotate(359deg);
5886 }
5886 }
5887 }
5887 }
5888 @-o-keyframes spin {
5888 @-o-keyframes spin {
5889 0% {
5889 0% {
5890 -o-transform: rotate(0deg);
5890 -o-transform: rotate(0deg);
5891 }
5891 }
5892 100% {
5892 100% {
5893 -o-transform: rotate(359deg);
5893 -o-transform: rotate(359deg);
5894 }
5894 }
5895 }
5895 }
5896 @keyframes spin {
5896 @keyframes spin {
5897 0% {
5897 0% {
5898 -webkit-transform: rotate(0deg);
5898 -webkit-transform: rotate(0deg);
5899 transform: rotate(0deg);
5899 transform: rotate(0deg);
5900 }
5900 }
5901 100% {
5901 100% {
5902 -webkit-transform: rotate(359deg);
5902 -webkit-transform: rotate(359deg);
5903 transform: rotate(359deg);
5903 transform: rotate(359deg);
5904 }
5904 }
5905 }
5905 }
5906 .fa-rotate-90 {
5906 .fa-rotate-90 {
5907 filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
5907 filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
5908 -webkit-transform: rotate(90deg);
5908 -webkit-transform: rotate(90deg);
5909 -moz-transform: rotate(90deg);
5909 -moz-transform: rotate(90deg);
5910 -ms-transform: rotate(90deg);
5910 -ms-transform: rotate(90deg);
5911 -o-transform: rotate(90deg);
5911 -o-transform: rotate(90deg);
5912 transform: rotate(90deg);
5912 transform: rotate(90deg);
5913 }
5913 }
5914 .fa-rotate-180 {
5914 .fa-rotate-180 {
5915 filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
5915 filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
5916 -webkit-transform: rotate(180deg);
5916 -webkit-transform: rotate(180deg);
5917 -moz-transform: rotate(180deg);
5917 -moz-transform: rotate(180deg);
5918 -ms-transform: rotate(180deg);
5918 -ms-transform: rotate(180deg);
5919 -o-transform: rotate(180deg);
5919 -o-transform: rotate(180deg);
5920 transform: rotate(180deg);
5920 transform: rotate(180deg);
5921 }
5921 }
5922 .fa-rotate-270 {
5922 .fa-rotate-270 {
5923 filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
5923 filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
5924 -webkit-transform: rotate(270deg);
5924 -webkit-transform: rotate(270deg);
5925 -moz-transform: rotate(270deg);
5925 -moz-transform: rotate(270deg);
5926 -ms-transform: rotate(270deg);
5926 -ms-transform: rotate(270deg);
5927 -o-transform: rotate(270deg);
5927 -o-transform: rotate(270deg);
5928 transform: rotate(270deg);
5928 transform: rotate(270deg);
5929 }
5929 }
5930 .fa-flip-horizontal {
5930 .fa-flip-horizontal {
5931 filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);
5931 filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);
5932 -webkit-transform: scale(-1, 1);
5932 -webkit-transform: scale(-1, 1);
5933 -moz-transform: scale(-1, 1);
5933 -moz-transform: scale(-1, 1);
5934 -ms-transform: scale(-1, 1);
5934 -ms-transform: scale(-1, 1);
5935 -o-transform: scale(-1, 1);
5935 -o-transform: scale(-1, 1);
5936 transform: scale(-1, 1);
5936 transform: scale(-1, 1);
5937 }
5937 }
5938 .fa-flip-vertical {
5938 .fa-flip-vertical {
5939 filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);
5939 filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);
5940 -webkit-transform: scale(1, -1);
5940 -webkit-transform: scale(1, -1);
5941 -moz-transform: scale(1, -1);
5941 -moz-transform: scale(1, -1);
5942 -ms-transform: scale(1, -1);
5942 -ms-transform: scale(1, -1);
5943 -o-transform: scale(1, -1);
5943 -o-transform: scale(1, -1);
5944 transform: scale(1, -1);
5944 transform: scale(1, -1);
5945 }
5945 }
5946 .fa-stack {
5946 .fa-stack {
5947 position: relative;
5947 position: relative;
5948 display: inline-block;
5948 display: inline-block;
5949 width: 2em;
5949 width: 2em;
5950 height: 2em;
5950 height: 2em;
5951 line-height: 2em;
5951 line-height: 2em;
5952 vertical-align: middle;
5952 vertical-align: middle;
5953 }
5953 }
5954 .fa-stack-1x,
5954 .fa-stack-1x,
5955 .fa-stack-2x {
5955 .fa-stack-2x {
5956 position: absolute;
5956 position: absolute;
5957 left: 0;
5957 left: 0;
5958 width: 100%;
5958 width: 100%;
5959 text-align: center;
5959 text-align: center;
5960 }
5960 }
5961 .fa-stack-1x {
5961 .fa-stack-1x {
5962 line-height: inherit;
5962 line-height: inherit;
5963 }
5963 }
5964 .fa-stack-2x {
5964 .fa-stack-2x {
5965 font-size: 2em;
5965 font-size: 2em;
5966 }
5966 }
5967 .fa-inverse {
5967 .fa-inverse {
5968 color: #ffffff;
5968 color: #ffffff;
5969 }
5969 }
5970 /* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
5970 /* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
5971 readers do not read off random characters that represent icons */
5971 readers do not read off random characters that represent icons */
5972 .fa-glass:before {
5972 .fa-glass:before {
5973 content: "\f000";
5973 content: "\f000";
5974 }
5974 }
5975 .fa-music:before {
5975 .fa-music:before {
5976 content: "\f001";
5976 content: "\f001";
5977 }
5977 }
5978 .fa-search:before {
5978 .fa-search:before {
5979 content: "\f002";
5979 content: "\f002";
5980 }
5980 }
5981 .fa-envelope-o:before {
5981 .fa-envelope-o:before {
5982 content: "\f003";
5982 content: "\f003";
5983 }
5983 }
5984 .fa-heart:before {
5984 .fa-heart:before {
5985 content: "\f004";
5985 content: "\f004";
5986 }
5986 }
5987 .fa-star:before {
5987 .fa-star:before {
5988 content: "\f005";
5988 content: "\f005";
5989 }
5989 }
5990 .fa-star-o:before {
5990 .fa-star-o:before {
5991 content: "\f006";
5991 content: "\f006";
5992 }
5992 }
5993 .fa-user:before {
5993 .fa-user:before {
5994 content: "\f007";
5994 content: "\f007";
5995 }
5995 }
5996 .fa-film:before {
5996 .fa-film:before {
5997 content: "\f008";
5997 content: "\f008";
5998 }
5998 }
5999 .fa-th-large:before {
5999 .fa-th-large:before {
6000 content: "\f009";
6000 content: "\f009";
6001 }
6001 }
6002 .fa-th:before {
6002 .fa-th:before {
6003 content: "\f00a";
6003 content: "\f00a";
6004 }
6004 }
6005 .fa-th-list:before {
6005 .fa-th-list:before {
6006 content: "\f00b";
6006 content: "\f00b";
6007 }
6007 }
6008 .fa-check:before {
6008 .fa-check:before {
6009 content: "\f00c";
6009 content: "\f00c";
6010 }
6010 }
6011 .fa-times:before {
6011 .fa-times:before {
6012 content: "\f00d";
6012 content: "\f00d";
6013 }
6013 }
6014 .fa-search-plus:before {
6014 .fa-search-plus:before {
6015 content: "\f00e";
6015 content: "\f00e";
6016 }
6016 }
6017 .fa-search-minus:before {
6017 .fa-search-minus:before {
6018 content: "\f010";
6018 content: "\f010";
6019 }
6019 }
6020 .fa-power-off:before {
6020 .fa-power-off:before {
6021 content: "\f011";
6021 content: "\f011";
6022 }
6022 }
6023 .fa-signal:before {
6023 .fa-signal:before {
6024 content: "\f012";
6024 content: "\f012";
6025 }
6025 }
6026 .fa-gear:before,
6026 .fa-gear:before,
6027 .fa-cog:before {
6027 .fa-cog:before {
6028 content: "\f013";
6028 content: "\f013";
6029 }
6029 }
6030 .fa-trash-o:before {
6030 .fa-trash-o:before {
6031 content: "\f014";
6031 content: "\f014";
6032 }
6032 }
6033 .fa-home:before {
6033 .fa-home:before {
6034 content: "\f015";
6034 content: "\f015";
6035 }
6035 }
6036 .fa-file-o:before {
6036 .fa-file-o:before {
6037 content: "\f016";
6037 content: "\f016";
6038 }
6038 }
6039 .fa-clock-o:before {
6039 .fa-clock-o:before {
6040 content: "\f017";
6040 content: "\f017";
6041 }
6041 }
6042 .fa-road:before {
6042 .fa-road:before {
6043 content: "\f018";
6043 content: "\f018";
6044 }
6044 }
6045 .fa-download:before {
6045 .fa-download:before {
6046 content: "\f019";
6046 content: "\f019";
6047 }
6047 }
6048 .fa-arrow-circle-o-down:before {
6048 .fa-arrow-circle-o-down:before {
6049 content: "\f01a";
6049 content: "\f01a";
6050 }
6050 }
6051 .fa-arrow-circle-o-up:before {
6051 .fa-arrow-circle-o-up:before {
6052 content: "\f01b";
6052 content: "\f01b";
6053 }
6053 }
6054 .fa-inbox:before {
6054 .fa-inbox:before {
6055 content: "\f01c";
6055 content: "\f01c";
6056 }
6056 }
6057 .fa-play-circle-o:before {
6057 .fa-play-circle-o:before {
6058 content: "\f01d";
6058 content: "\f01d";
6059 }
6059 }
6060 .fa-rotate-right:before,
6060 .fa-rotate-right:before,
6061 .fa-repeat:before {
6061 .fa-repeat:before {
6062 content: "\f01e";
6062 content: "\f01e";
6063 }
6063 }
6064 .fa-refresh:before {
6064 .fa-refresh:before {
6065 content: "\f021";
6065 content: "\f021";
6066 }
6066 }
6067 .fa-list-alt:before {
6067 .fa-list-alt:before {
6068 content: "\f022";
6068 content: "\f022";
6069 }
6069 }
6070 .fa-lock:before {
6070 .fa-lock:before {
6071 content: "\f023";
6071 content: "\f023";
6072 }
6072 }
6073 .fa-flag:before {
6073 .fa-flag:before {
6074 content: "\f024";
6074 content: "\f024";
6075 }
6075 }
6076 .fa-headphones:before {
6076 .fa-headphones:before {
6077 content: "\f025";
6077 content: "\f025";
6078 }
6078 }
6079 .fa-volume-off:before {
6079 .fa-volume-off:before {
6080 content: "\f026";
6080 content: "\f026";
6081 }
6081 }
6082 .fa-volume-down:before {
6082 .fa-volume-down:before {
6083 content: "\f027";
6083 content: "\f027";
6084 }
6084 }
6085 .fa-volume-up:before {
6085 .fa-volume-up:before {
6086 content: "\f028";
6086 content: "\f028";
6087 }
6087 }
6088 .fa-qrcode:before {
6088 .fa-qrcode:before {
6089 content: "\f029";
6089 content: "\f029";
6090 }
6090 }
6091 .fa-barcode:before {
6091 .fa-barcode:before {
6092 content: "\f02a";
6092 content: "\f02a";
6093 }
6093 }
6094 .fa-tag:before {
6094 .fa-tag:before {
6095 content: "\f02b";
6095 content: "\f02b";
6096 }
6096 }
6097 .fa-tags:before {
6097 .fa-tags:before {
6098 content: "\f02c";
6098 content: "\f02c";
6099 }
6099 }
6100 .fa-book:before {
6100 .fa-book:before {
6101 content: "\f02d";
6101 content: "\f02d";
6102 }
6102 }
6103 .fa-bookmark:before {
6103 .fa-bookmark:before {
6104 content: "\f02e";
6104 content: "\f02e";
6105 }
6105 }
6106 .fa-print:before {
6106 .fa-print:before {
6107 content: "\f02f";
6107 content: "\f02f";
6108 }
6108 }
6109 .fa-camera:before {
6109 .fa-camera:before {
6110 content: "\f030";
6110 content: "\f030";
6111 }
6111 }
6112 .fa-font:before {
6112 .fa-font:before {
6113 content: "\f031";
6113 content: "\f031";
6114 }
6114 }
6115 .fa-bold:before {
6115 .fa-bold:before {
6116 content: "\f032";
6116 content: "\f032";
6117 }
6117 }
6118 .fa-italic:before {
6118 .fa-italic:before {
6119 content: "\f033";
6119 content: "\f033";
6120 }
6120 }
6121 .fa-text-height:before {
6121 .fa-text-height:before {
6122 content: "\f034";
6122 content: "\f034";
6123 }
6123 }
6124 .fa-text-width:before {
6124 .fa-text-width:before {
6125 content: "\f035";
6125 content: "\f035";
6126 }
6126 }
6127 .fa-align-left:before {
6127 .fa-align-left:before {
6128 content: "\f036";
6128 content: "\f036";
6129 }
6129 }
6130 .fa-align-center:before {
6130 .fa-align-center:before {
6131 content: "\f037";
6131 content: "\f037";
6132 }
6132 }
6133 .fa-align-right:before {
6133 .fa-align-right:before {
6134 content: "\f038";
6134 content: "\f038";
6135 }
6135 }
6136 .fa-align-justify:before {
6136 .fa-align-justify:before {
6137 content: "\f039";
6137 content: "\f039";
6138 }
6138 }
6139 .fa-list:before {
6139 .fa-list:before {
6140 content: "\f03a";
6140 content: "\f03a";
6141 }
6141 }
6142 .fa-dedent:before,
6142 .fa-dedent:before,
6143 .fa-outdent:before {
6143 .fa-outdent:before {
6144 content: "\f03b";
6144 content: "\f03b";
6145 }
6145 }
6146 .fa-indent:before {
6146 .fa-indent:before {
6147 content: "\f03c";
6147 content: "\f03c";
6148 }
6148 }
6149 .fa-video-camera:before {
6149 .fa-video-camera:before {
6150 content: "\f03d";
6150 content: "\f03d";
6151 }
6151 }
6152 .fa-photo:before,
6152 .fa-photo:before,
6153 .fa-image:before,
6153 .fa-image:before,
6154 .fa-picture-o:before {
6154 .fa-picture-o:before {
6155 content: "\f03e";
6155 content: "\f03e";
6156 }
6156 }
6157 .fa-pencil:before {
6157 .fa-pencil:before {
6158 content: "\f040";
6158 content: "\f040";
6159 }
6159 }
6160 .fa-map-marker:before {
6160 .fa-map-marker:before {
6161 content: "\f041";
6161 content: "\f041";
6162 }
6162 }
6163 .fa-adjust:before {
6163 .fa-adjust:before {
6164 content: "\f042";
6164 content: "\f042";
6165 }
6165 }
6166 .fa-tint:before {
6166 .fa-tint:before {
6167 content: "\f043";
6167 content: "\f043";
6168 }
6168 }
6169 .fa-edit:before,
6169 .fa-edit:before,
6170 .fa-pencil-square-o:before {
6170 .fa-pencil-square-o:before {
6171 content: "\f044";
6171 content: "\f044";
6172 }
6172 }
6173 .fa-share-square-o:before {
6173 .fa-share-square-o:before {
6174 content: "\f045";
6174 content: "\f045";
6175 }
6175 }
6176 .fa-check-square-o:before {
6176 .fa-check-square-o:before {
6177 content: "\f046";
6177 content: "\f046";
6178 }
6178 }
6179 .fa-arrows:before {
6179 .fa-arrows:before {
6180 content: "\f047";
6180 content: "\f047";
6181 }
6181 }
6182 .fa-step-backward:before {
6182 .fa-step-backward:before {
6183 content: "\f048";
6183 content: "\f048";
6184 }
6184 }
6185 .fa-fast-backward:before {
6185 .fa-fast-backward:before {
6186 content: "\f049";
6186 content: "\f049";
6187 }
6187 }
6188 .fa-backward:before {
6188 .fa-backward:before {
6189 content: "\f04a";
6189 content: "\f04a";
6190 }
6190 }
6191 .fa-play:before {
6191 .fa-play:before {
6192 content: "\f04b";
6192 content: "\f04b";
6193 }
6193 }
6194 .fa-pause:before {
6194 .fa-pause:before {
6195 content: "\f04c";
6195 content: "\f04c";
6196 }
6196 }
6197 .fa-stop:before {
6197 .fa-stop:before {
6198 content: "\f04d";
6198 content: "\f04d";
6199 }
6199 }
6200 .fa-forward:before {
6200 .fa-forward:before {
6201 content: "\f04e";
6201 content: "\f04e";
6202 }
6202 }
6203 .fa-fast-forward:before {
6203 .fa-fast-forward:before {
6204 content: "\f050";
6204 content: "\f050";
6205 }
6205 }
6206 .fa-step-forward:before {
6206 .fa-step-forward:before {
6207 content: "\f051";
6207 content: "\f051";
6208 }
6208 }
6209 .fa-eject:before {
6209 .fa-eject:before {
6210 content: "\f052";
6210 content: "\f052";
6211 }
6211 }
6212 .fa-chevron-left:before {
6212 .fa-chevron-left:before {
6213 content: "\f053";
6213 content: "\f053";
6214 }
6214 }
6215 .fa-chevron-right:before {
6215 .fa-chevron-right:before {
6216 content: "\f054";
6216 content: "\f054";
6217 }
6217 }
6218 .fa-plus-circle:before {
6218 .fa-plus-circle:before {
6219 content: "\f055";
6219 content: "\f055";
6220 }
6220 }
6221 .fa-minus-circle:before {
6221 .fa-minus-circle:before {
6222 content: "\f056";
6222 content: "\f056";
6223 }
6223 }
6224 .fa-times-circle:before {
6224 .fa-times-circle:before {
6225 content: "\f057";
6225 content: "\f057";
6226 }
6226 }
6227 .fa-check-circle:before {
6227 .fa-check-circle:before {
6228 content: "\f058";
6228 content: "\f058";
6229 }
6229 }
6230 .fa-question-circle:before {
6230 .fa-question-circle:before {
6231 content: "\f059";
6231 content: "\f059";
6232 }
6232 }
6233 .fa-info-circle:before {
6233 .fa-info-circle:before {
6234 content: "\f05a";
6234 content: "\f05a";
6235 }
6235 }
6236 .fa-crosshairs:before {
6236 .fa-crosshairs:before {
6237 content: "\f05b";
6237 content: "\f05b";
6238 }
6238 }
6239 .fa-times-circle-o:before {
6239 .fa-times-circle-o:before {
6240 content: "\f05c";
6240 content: "\f05c";
6241 }
6241 }
6242 .fa-check-circle-o:before {
6242 .fa-check-circle-o:before {
6243 content: "\f05d";
6243 content: "\f05d";
6244 }
6244 }
6245 .fa-ban:before {
6245 .fa-ban:before {
6246 content: "\f05e";
6246 content: "\f05e";
6247 }
6247 }
6248 .fa-arrow-left:before {
6248 .fa-arrow-left:before {
6249 content: "\f060";
6249 content: "\f060";
6250 }
6250 }
6251 .fa-arrow-right:before {
6251 .fa-arrow-right:before {
6252 content: "\f061";
6252 content: "\f061";
6253 }
6253 }
6254 .fa-arrow-up:before {
6254 .fa-arrow-up:before {
6255 content: "\f062";
6255 content: "\f062";
6256 }
6256 }
6257 .fa-arrow-down:before {
6257 .fa-arrow-down:before {
6258 content: "\f063";
6258 content: "\f063";
6259 }
6259 }
6260 .fa-mail-forward:before,
6260 .fa-mail-forward:before,
6261 .fa-share:before {
6261 .fa-share:before {
6262 content: "\f064";
6262 content: "\f064";
6263 }
6263 }
6264 .fa-expand:before {
6264 .fa-expand:before {
6265 content: "\f065";
6265 content: "\f065";
6266 }
6266 }
6267 .fa-compress:before {
6267 .fa-compress:before {
6268 content: "\f066";
6268 content: "\f066";
6269 }
6269 }
6270 .fa-plus:before {
6270 .fa-plus:before {
6271 content: "\f067";
6271 content: "\f067";
6272 }
6272 }
6273 .fa-minus:before {
6273 .fa-minus:before {
6274 content: "\f068";
6274 content: "\f068";
6275 }
6275 }
6276 .fa-asterisk:before {
6276 .fa-asterisk:before {
6277 content: "\f069";
6277 content: "\f069";
6278 }
6278 }
6279 .fa-exclamation-circle:before {
6279 .fa-exclamation-circle:before {
6280 content: "\f06a";
6280 content: "\f06a";
6281 }
6281 }
6282 .fa-gift:before {
6282 .fa-gift:before {
6283 content: "\f06b";
6283 content: "\f06b";
6284 }
6284 }
6285 .fa-leaf:before {
6285 .fa-leaf:before {
6286 content: "\f06c";
6286 content: "\f06c";
6287 }
6287 }
6288 .fa-fire:before {
6288 .fa-fire:before {
6289 content: "\f06d";
6289 content: "\f06d";
6290 }
6290 }
6291 .fa-eye:before {
6291 .fa-eye:before {
6292 content: "\f06e";
6292 content: "\f06e";
6293 }
6293 }
6294 .fa-eye-slash:before {
6294 .fa-eye-slash:before {
6295 content: "\f070";
6295 content: "\f070";
6296 }
6296 }
6297 .fa-warning:before,
6297 .fa-warning:before,
6298 .fa-exclamation-triangle:before {
6298 .fa-exclamation-triangle:before {
6299 content: "\f071";
6299 content: "\f071";
6300 }
6300 }
6301 .fa-plane:before {
6301 .fa-plane:before {
6302 content: "\f072";
6302 content: "\f072";
6303 }
6303 }
6304 .fa-calendar:before {
6304 .fa-calendar:before {
6305 content: "\f073";
6305 content: "\f073";
6306 }
6306 }
6307 .fa-random:before {
6307 .fa-random:before {
6308 content: "\f074";
6308 content: "\f074";
6309 }
6309 }
6310 .fa-comment:before {
6310 .fa-comment:before {
6311 content: "\f075";
6311 content: "\f075";
6312 }
6312 }
6313 .fa-magnet:before {
6313 .fa-magnet:before {
6314 content: "\f076";
6314 content: "\f076";
6315 }
6315 }
6316 .fa-chevron-up:before {
6316 .fa-chevron-up:before {
6317 content: "\f077";
6317 content: "\f077";
6318 }
6318 }
6319 .fa-chevron-down:before {
6319 .fa-chevron-down:before {
6320 content: "\f078";
6320 content: "\f078";
6321 }
6321 }
6322 .fa-retweet:before {
6322 .fa-retweet:before {
6323 content: "\f079";
6323 content: "\f079";
6324 }
6324 }
6325 .fa-shopping-cart:before {
6325 .fa-shopping-cart:before {
6326 content: "\f07a";
6326 content: "\f07a";
6327 }
6327 }
6328 .fa-folder:before {
6328 .fa-folder:before {
6329 content: "\f07b";
6329 content: "\f07b";
6330 }
6330 }
6331 .fa-folder-open:before {
6331 .fa-folder-open:before {
6332 content: "\f07c";
6332 content: "\f07c";
6333 }
6333 }
6334 .fa-arrows-v:before {
6334 .fa-arrows-v:before {
6335 content: "\f07d";
6335 content: "\f07d";
6336 }
6336 }
6337 .fa-arrows-h:before {
6337 .fa-arrows-h:before {
6338 content: "\f07e";
6338 content: "\f07e";
6339 }
6339 }
6340 .fa-bar-chart-o:before {
6340 .fa-bar-chart-o:before {
6341 content: "\f080";
6341 content: "\f080";
6342 }
6342 }
6343 .fa-twitter-square:before {
6343 .fa-twitter-square:before {
6344 content: "\f081";
6344 content: "\f081";
6345 }
6345 }
6346 .fa-facebook-square:before {
6346 .fa-facebook-square:before {
6347 content: "\f082";
6347 content: "\f082";
6348 }
6348 }
6349 .fa-camera-retro:before {
6349 .fa-camera-retro:before {
6350 content: "\f083";
6350 content: "\f083";
6351 }
6351 }
6352 .fa-key:before {
6352 .fa-key:before {
6353 content: "\f084";
6353 content: "\f084";
6354 }
6354 }
6355 .fa-gears:before,
6355 .fa-gears:before,
6356 .fa-cogs:before {
6356 .fa-cogs:before {
6357 content: "\f085";
6357 content: "\f085";
6358 }
6358 }
6359 .fa-comments:before {
6359 .fa-comments:before {
6360 content: "\f086";
6360 content: "\f086";
6361 }
6361 }
6362 .fa-thumbs-o-up:before {
6362 .fa-thumbs-o-up:before {
6363 content: "\f087";
6363 content: "\f087";
6364 }
6364 }
6365 .fa-thumbs-o-down:before {
6365 .fa-thumbs-o-down:before {
6366 content: "\f088";
6366 content: "\f088";
6367 }
6367 }
6368 .fa-star-half:before {
6368 .fa-star-half:before {
6369 content: "\f089";
6369 content: "\f089";
6370 }
6370 }
6371 .fa-heart-o:before {
6371 .fa-heart-o:before {
6372 content: "\f08a";
6372 content: "\f08a";
6373 }
6373 }
6374 .fa-sign-out:before {
6374 .fa-sign-out:before {
6375 content: "\f08b";
6375 content: "\f08b";
6376 }
6376 }
6377 .fa-linkedin-square:before {
6377 .fa-linkedin-square:before {
6378 content: "\f08c";
6378 content: "\f08c";
6379 }
6379 }
6380 .fa-thumb-tack:before {
6380 .fa-thumb-tack:before {
6381 content: "\f08d";
6381 content: "\f08d";
6382 }
6382 }
6383 .fa-external-link:before {
6383 .fa-external-link:before {
6384 content: "\f08e";
6384 content: "\f08e";
6385 }
6385 }
6386 .fa-sign-in:before {
6386 .fa-sign-in:before {
6387 content: "\f090";
6387 content: "\f090";
6388 }
6388 }
6389 .fa-trophy:before {
6389 .fa-trophy:before {
6390 content: "\f091";
6390 content: "\f091";
6391 }
6391 }
6392 .fa-github-square:before {
6392 .fa-github-square:before {
6393 content: "\f092";
6393 content: "\f092";
6394 }
6394 }
6395 .fa-upload:before {
6395 .fa-upload:before {
6396 content: "\f093";
6396 content: "\f093";
6397 }
6397 }
6398 .fa-lemon-o:before {
6398 .fa-lemon-o:before {
6399 content: "\f094";
6399 content: "\f094";
6400 }
6400 }
6401 .fa-phone:before {
6401 .fa-phone:before {
6402 content: "\f095";
6402 content: "\f095";
6403 }
6403 }
6404 .fa-square-o:before {
6404 .fa-square-o:before {
6405 content: "\f096";
6405 content: "\f096";
6406 }
6406 }
6407 .fa-bookmark-o:before {
6407 .fa-bookmark-o:before {
6408 content: "\f097";
6408 content: "\f097";
6409 }
6409 }
6410 .fa-phone-square:before {
6410 .fa-phone-square:before {
6411 content: "\f098";
6411 content: "\f098";
6412 }
6412 }
6413 .fa-twitter:before {
6413 .fa-twitter:before {
6414 content: "\f099";
6414 content: "\f099";
6415 }
6415 }
6416 .fa-facebook:before {
6416 .fa-facebook:before {
6417 content: "\f09a";
6417 content: "\f09a";
6418 }
6418 }
6419 .fa-github:before {
6419 .fa-github:before {
6420 content: "\f09b";
6420 content: "\f09b";
6421 }
6421 }
6422 .fa-unlock:before {
6422 .fa-unlock:before {
6423 content: "\f09c";
6423 content: "\f09c";
6424 }
6424 }
6425 .fa-credit-card:before {
6425 .fa-credit-card:before {
6426 content: "\f09d";
6426 content: "\f09d";
6427 }
6427 }
6428 .fa-rss:before {
6428 .fa-rss:before {
6429 content: "\f09e";
6429 content: "\f09e";
6430 }
6430 }
6431 .fa-hdd-o:before {
6431 .fa-hdd-o:before {
6432 content: "\f0a0";
6432 content: "\f0a0";
6433 }
6433 }
6434 .fa-bullhorn:before {
6434 .fa-bullhorn:before {
6435 content: "\f0a1";
6435 content: "\f0a1";
6436 }
6436 }
6437 .fa-bell:before {
6437 .fa-bell:before {
6438 content: "\f0f3";
6438 content: "\f0f3";
6439 }
6439 }
6440 .fa-certificate:before {
6440 .fa-certificate:before {
6441 content: "\f0a3";
6441 content: "\f0a3";
6442 }
6442 }
6443 .fa-hand-o-right:before {
6443 .fa-hand-o-right:before {
6444 content: "\f0a4";
6444 content: "\f0a4";
6445 }
6445 }
6446 .fa-hand-o-left:before {
6446 .fa-hand-o-left:before {
6447 content: "\f0a5";
6447 content: "\f0a5";
6448 }
6448 }
6449 .fa-hand-o-up:before {
6449 .fa-hand-o-up:before {
6450 content: "\f0a6";
6450 content: "\f0a6";
6451 }
6451 }
6452 .fa-hand-o-down:before {
6452 .fa-hand-o-down:before {
6453 content: "\f0a7";
6453 content: "\f0a7";
6454 }
6454 }
6455 .fa-arrow-circle-left:before {
6455 .fa-arrow-circle-left:before {
6456 content: "\f0a8";
6456 content: "\f0a8";
6457 }
6457 }
6458 .fa-arrow-circle-right:before {
6458 .fa-arrow-circle-right:before {
6459 content: "\f0a9";
6459 content: "\f0a9";
6460 }
6460 }
6461 .fa-arrow-circle-up:before {
6461 .fa-arrow-circle-up:before {
6462 content: "\f0aa";
6462 content: "\f0aa";
6463 }
6463 }
6464 .fa-arrow-circle-down:before {
6464 .fa-arrow-circle-down:before {
6465 content: "\f0ab";
6465 content: "\f0ab";
6466 }
6466 }
6467 .fa-globe:before {
6467 .fa-globe:before {
6468 content: "\f0ac";
6468 content: "\f0ac";
6469 }
6469 }
6470 .fa-wrench:before {
6470 .fa-wrench:before {
6471 content: "\f0ad";
6471 content: "\f0ad";
6472 }
6472 }
6473 .fa-tasks:before {
6473 .fa-tasks:before {
6474 content: "\f0ae";
6474 content: "\f0ae";
6475 }
6475 }
6476 .fa-filter:before {
6476 .fa-filter:before {
6477 content: "\f0b0";
6477 content: "\f0b0";
6478 }
6478 }
6479 .fa-briefcase:before {
6479 .fa-briefcase:before {
6480 content: "\f0b1";
6480 content: "\f0b1";
6481 }
6481 }
6482 .fa-arrows-alt:before {
6482 .fa-arrows-alt:before {
6483 content: "\f0b2";
6483 content: "\f0b2";
6484 }
6484 }
6485 .fa-group:before,
6485 .fa-group:before,
6486 .fa-users:before {
6486 .fa-users:before {
6487 content: "\f0c0";
6487 content: "\f0c0";
6488 }
6488 }
6489 .fa-chain:before,
6489 .fa-chain:before,
6490 .fa-link:before {
6490 .fa-link:before {
6491 content: "\f0c1";
6491 content: "\f0c1";
6492 }
6492 }
6493 .fa-cloud:before {
6493 .fa-cloud:before {
6494 content: "\f0c2";
6494 content: "\f0c2";
6495 }
6495 }
6496 .fa-flask:before {
6496 .fa-flask:before {
6497 content: "\f0c3";
6497 content: "\f0c3";
6498 }
6498 }
6499 .fa-cut:before,
6499 .fa-cut:before,
6500 .fa-scissors:before {
6500 .fa-scissors:before {
6501 content: "\f0c4";
6501 content: "\f0c4";
6502 }
6502 }
6503 .fa-copy:before,
6503 .fa-copy:before,
6504 .fa-files-o:before {
6504 .fa-files-o:before {
6505 content: "\f0c5";
6505 content: "\f0c5";
6506 }
6506 }
6507 .fa-paperclip:before {
6507 .fa-paperclip:before {
6508 content: "\f0c6";
6508 content: "\f0c6";
6509 }
6509 }
6510 .fa-save:before,
6510 .fa-save:before,
6511 .fa-floppy-o:before {
6511 .fa-floppy-o:before {
6512 content: "\f0c7";
6512 content: "\f0c7";
6513 }
6513 }
6514 .fa-square:before {
6514 .fa-square:before {
6515 content: "\f0c8";
6515 content: "\f0c8";
6516 }
6516 }
6517 .fa-navicon:before,
6517 .fa-navicon:before,
6518 .fa-reorder:before,
6518 .fa-reorder:before,
6519 .fa-bars:before {
6519 .fa-bars:before {
6520 content: "\f0c9";
6520 content: "\f0c9";
6521 }
6521 }
6522 .fa-list-ul:before {
6522 .fa-list-ul:before {
6523 content: "\f0ca";
6523 content: "\f0ca";
6524 }
6524 }
6525 .fa-list-ol:before {
6525 .fa-list-ol:before {
6526 content: "\f0cb";
6526 content: "\f0cb";
6527 }
6527 }
6528 .fa-strikethrough:before {
6528 .fa-strikethrough:before {
6529 content: "\f0cc";
6529 content: "\f0cc";
6530 }
6530 }
6531 .fa-underline:before {
6531 .fa-underline:before {
6532 content: "\f0cd";
6532 content: "\f0cd";
6533 }
6533 }
6534 .fa-table:before {
6534 .fa-table:before {
6535 content: "\f0ce";
6535 content: "\f0ce";
6536 }
6536 }
6537 .fa-magic:before {
6537 .fa-magic:before {
6538 content: "\f0d0";
6538 content: "\f0d0";
6539 }
6539 }
6540 .fa-truck:before {
6540 .fa-truck:before {
6541 content: "\f0d1";
6541 content: "\f0d1";
6542 }
6542 }
6543 .fa-pinterest:before {
6543 .fa-pinterest:before {
6544 content: "\f0d2";
6544 content: "\f0d2";
6545 }
6545 }
6546 .fa-pinterest-square:before {
6546 .fa-pinterest-square:before {
6547 content: "\f0d3";
6547 content: "\f0d3";
6548 }
6548 }
6549 .fa-google-plus-square:before {
6549 .fa-google-plus-square:before {
6550 content: "\f0d4";
6550 content: "\f0d4";
6551 }
6551 }
6552 .fa-google-plus:before {
6552 .fa-google-plus:before {
6553 content: "\f0d5";
6553 content: "\f0d5";
6554 }
6554 }
6555 .fa-money:before {
6555 .fa-money:before {
6556 content: "\f0d6";
6556 content: "\f0d6";
6557 }
6557 }
6558 .fa-caret-down:before {
6558 .fa-caret-down:before {
6559 content: "\f0d7";
6559 content: "\f0d7";
6560 }
6560 }
6561 .fa-caret-up:before {
6561 .fa-caret-up:before {
6562 content: "\f0d8";
6562 content: "\f0d8";
6563 }
6563 }
6564 .fa-caret-left:before {
6564 .fa-caret-left:before {
6565 content: "\f0d9";
6565 content: "\f0d9";
6566 }
6566 }
6567 .fa-caret-right:before {
6567 .fa-caret-right:before {
6568 content: "\f0da";
6568 content: "\f0da";
6569 }
6569 }
6570 .fa-columns:before {
6570 .fa-columns:before {
6571 content: "\f0db";
6571 content: "\f0db";
6572 }
6572 }
6573 .fa-unsorted:before,
6573 .fa-unsorted:before,
6574 .fa-sort:before {
6574 .fa-sort:before {
6575 content: "\f0dc";
6575 content: "\f0dc";
6576 }
6576 }
6577 .fa-sort-down:before,
6577 .fa-sort-down:before,
6578 .fa-sort-desc:before {
6578 .fa-sort-desc:before {
6579 content: "\f0dd";
6579 content: "\f0dd";
6580 }
6580 }
6581 .fa-sort-up:before,
6581 .fa-sort-up:before,
6582 .fa-sort-asc:before {
6582 .fa-sort-asc:before {
6583 content: "\f0de";
6583 content: "\f0de";
6584 }
6584 }
6585 .fa-envelope:before {
6585 .fa-envelope:before {
6586 content: "\f0e0";
6586 content: "\f0e0";
6587 }
6587 }
6588 .fa-linkedin:before {
6588 .fa-linkedin:before {
6589 content: "\f0e1";
6589 content: "\f0e1";
6590 }
6590 }
6591 .fa-rotate-left:before,
6591 .fa-rotate-left:before,
6592 .fa-undo:before {
6592 .fa-undo:before {
6593 content: "\f0e2";
6593 content: "\f0e2";
6594 }
6594 }
6595 .fa-legal:before,
6595 .fa-legal:before,
6596 .fa-gavel:before {
6596 .fa-gavel:before {
6597 content: "\f0e3";
6597 content: "\f0e3";
6598 }
6598 }
6599 .fa-dashboard:before,
6599 .fa-dashboard:before,
6600 .fa-tachometer:before {
6600 .fa-tachometer:before {
6601 content: "\f0e4";
6601 content: "\f0e4";
6602 }
6602 }
6603 .fa-comment-o:before {
6603 .fa-comment-o:before {
6604 content: "\f0e5";
6604 content: "\f0e5";
6605 }
6605 }
6606 .fa-comments-o:before {
6606 .fa-comments-o:before {
6607 content: "\f0e6";
6607 content: "\f0e6";
6608 }
6608 }
6609 .fa-flash:before,
6609 .fa-flash:before,
6610 .fa-bolt:before {
6610 .fa-bolt:before {
6611 content: "\f0e7";
6611 content: "\f0e7";
6612 }
6612 }
6613 .fa-sitemap:before {
6613 .fa-sitemap:before {
6614 content: "\f0e8";
6614 content: "\f0e8";
6615 }
6615 }
6616 .fa-umbrella:before {
6616 .fa-umbrella:before {
6617 content: "\f0e9";
6617 content: "\f0e9";
6618 }
6618 }
6619 .fa-paste:before,
6619 .fa-paste:before,
6620 .fa-clipboard:before {
6620 .fa-clipboard:before {
6621 content: "\f0ea";
6621 content: "\f0ea";
6622 }
6622 }
6623 .fa-lightbulb-o:before {
6623 .fa-lightbulb-o:before {
6624 content: "\f0eb";
6624 content: "\f0eb";
6625 }
6625 }
6626 .fa-exchange:before {
6626 .fa-exchange:before {
6627 content: "\f0ec";
6627 content: "\f0ec";
6628 }
6628 }
6629 .fa-cloud-download:before {
6629 .fa-cloud-download:before {
6630 content: "\f0ed";
6630 content: "\f0ed";
6631 }
6631 }
6632 .fa-cloud-upload:before {
6632 .fa-cloud-upload:before {
6633 content: "\f0ee";
6633 content: "\f0ee";
6634 }
6634 }
6635 .fa-user-md:before {
6635 .fa-user-md:before {
6636 content: "\f0f0";
6636 content: "\f0f0";
6637 }
6637 }
6638 .fa-stethoscope:before {
6638 .fa-stethoscope:before {
6639 content: "\f0f1";
6639 content: "\f0f1";
6640 }
6640 }
6641 .fa-suitcase:before {
6641 .fa-suitcase:before {
6642 content: "\f0f2";
6642 content: "\f0f2";
6643 }
6643 }
6644 .fa-bell-o:before {
6644 .fa-bell-o:before {
6645 content: "\f0a2";
6645 content: "\f0a2";
6646 }
6646 }
6647 .fa-coffee:before {
6647 .fa-coffee:before {
6648 content: "\f0f4";
6648 content: "\f0f4";
6649 }
6649 }
6650 .fa-cutlery:before {
6650 .fa-cutlery:before {
6651 content: "\f0f5";
6651 content: "\f0f5";
6652 }
6652 }
6653 .fa-file-text-o:before {
6653 .fa-file-text-o:before {
6654 content: "\f0f6";
6654 content: "\f0f6";
6655 }
6655 }
6656 .fa-building-o:before {
6656 .fa-building-o:before {
6657 content: "\f0f7";
6657 content: "\f0f7";
6658 }
6658 }
6659 .fa-hospital-o:before {
6659 .fa-hospital-o:before {
6660 content: "\f0f8";
6660 content: "\f0f8";
6661 }
6661 }
6662 .fa-ambulance:before {
6662 .fa-ambulance:before {
6663 content: "\f0f9";
6663 content: "\f0f9";
6664 }
6664 }
6665 .fa-medkit:before {
6665 .fa-medkit:before {
6666 content: "\f0fa";
6666 content: "\f0fa";
6667 }
6667 }
6668 .fa-fighter-jet:before {
6668 .fa-fighter-jet:before {
6669 content: "\f0fb";
6669 content: "\f0fb";
6670 }
6670 }
6671 .fa-beer:before {
6671 .fa-beer:before {
6672 content: "\f0fc";
6672 content: "\f0fc";
6673 }
6673 }
6674 .fa-h-square:before {
6674 .fa-h-square:before {
6675 content: "\f0fd";
6675 content: "\f0fd";
6676 }
6676 }
6677 .fa-plus-square:before {
6677 .fa-plus-square:before {
6678 content: "\f0fe";
6678 content: "\f0fe";
6679 }
6679 }
6680 .fa-angle-double-left:before {
6680 .fa-angle-double-left:before {
6681 content: "\f100";
6681 content: "\f100";
6682 }
6682 }
6683 .fa-angle-double-right:before {
6683 .fa-angle-double-right:before {
6684 content: "\f101";
6684 content: "\f101";
6685 }
6685 }
6686 .fa-angle-double-up:before {
6686 .fa-angle-double-up:before {
6687 content: "\f102";
6687 content: "\f102";
6688 }
6688 }
6689 .fa-angle-double-down:before {
6689 .fa-angle-double-down:before {
6690 content: "\f103";
6690 content: "\f103";
6691 }
6691 }
6692 .fa-angle-left:before {
6692 .fa-angle-left:before {
6693 content: "\f104";
6693 content: "\f104";
6694 }
6694 }
6695 .fa-angle-right:before {
6695 .fa-angle-right:before {
6696 content: "\f105";
6696 content: "\f105";
6697 }
6697 }
6698 .fa-angle-up:before {
6698 .fa-angle-up:before {
6699 content: "\f106";
6699 content: "\f106";
6700 }
6700 }
6701 .fa-angle-down:before {
6701 .fa-angle-down:before {
6702 content: "\f107";
6702 content: "\f107";
6703 }
6703 }
6704 .fa-desktop:before {
6704 .fa-desktop:before {
6705 content: "\f108";
6705 content: "\f108";
6706 }
6706 }
6707 .fa-laptop:before {
6707 .fa-laptop:before {
6708 content: "\f109";
6708 content: "\f109";
6709 }
6709 }
6710 .fa-tablet:before {
6710 .fa-tablet:before {
6711 content: "\f10a";
6711 content: "\f10a";
6712 }
6712 }
6713 .fa-mobile-phone:before,
6713 .fa-mobile-phone:before,
6714 .fa-mobile:before {
6714 .fa-mobile:before {
6715 content: "\f10b";
6715 content: "\f10b";
6716 }
6716 }
6717 .fa-circle-o:before {
6717 .fa-circle-o:before {
6718 content: "\f10c";
6718 content: "\f10c";
6719 }
6719 }
6720 .fa-quote-left:before {
6720 .fa-quote-left:before {
6721 content: "\f10d";
6721 content: "\f10d";
6722 }
6722 }
6723 .fa-quote-right:before {
6723 .fa-quote-right:before {
6724 content: "\f10e";
6724 content: "\f10e";
6725 }
6725 }
6726 .fa-spinner:before {
6726 .fa-spinner:before {
6727 content: "\f110";
6727 content: "\f110";
6728 }
6728 }
6729 .fa-circle:before {
6729 .fa-circle:before {
6730 content: "\f111";
6730 content: "\f111";
6731 }
6731 }
6732 .fa-mail-reply:before,
6732 .fa-mail-reply:before,
6733 .fa-reply:before {
6733 .fa-reply:before {
6734 content: "\f112";
6734 content: "\f112";
6735 }
6735 }
6736 .fa-github-alt:before {
6736 .fa-github-alt:before {
6737 content: "\f113";
6737 content: "\f113";
6738 }
6738 }
6739 .fa-folder-o:before {
6739 .fa-folder-o:before {
6740 content: "\f114";
6740 content: "\f114";
6741 }
6741 }
6742 .fa-folder-open-o:before {
6742 .fa-folder-open-o:before {
6743 content: "\f115";
6743 content: "\f115";
6744 }
6744 }
6745 .fa-smile-o:before {
6745 .fa-smile-o:before {
6746 content: "\f118";
6746 content: "\f118";
6747 }
6747 }
6748 .fa-frown-o:before {
6748 .fa-frown-o:before {
6749 content: "\f119";
6749 content: "\f119";
6750 }
6750 }
6751 .fa-meh-o:before {
6751 .fa-meh-o:before {
6752 content: "\f11a";
6752 content: "\f11a";
6753 }
6753 }
6754 .fa-gamepad:before {
6754 .fa-gamepad:before {
6755 content: "\f11b";
6755 content: "\f11b";
6756 }
6756 }
6757 .fa-keyboard-o:before {
6757 .fa-keyboard-o:before {
6758 content: "\f11c";
6758 content: "\f11c";
6759 }
6759 }
6760 .fa-flag-o:before {
6760 .fa-flag-o:before {
6761 content: "\f11d";
6761 content: "\f11d";
6762 }
6762 }
6763 .fa-flag-checkered:before {
6763 .fa-flag-checkered:before {
6764 content: "\f11e";
6764 content: "\f11e";
6765 }
6765 }
6766 .fa-terminal:before {
6766 .fa-terminal:before {
6767 content: "\f120";
6767 content: "\f120";
6768 }
6768 }
6769 .fa-code:before {
6769 .fa-code:before {
6770 content: "\f121";
6770 content: "\f121";
6771 }
6771 }
6772 .fa-mail-reply-all:before,
6772 .fa-mail-reply-all:before,
6773 .fa-reply-all:before {
6773 .fa-reply-all:before {
6774 content: "\f122";
6774 content: "\f122";
6775 }
6775 }
6776 .fa-star-half-empty:before,
6776 .fa-star-half-empty:before,
6777 .fa-star-half-full:before,
6777 .fa-star-half-full:before,
6778 .fa-star-half-o:before {
6778 .fa-star-half-o:before {
6779 content: "\f123";
6779 content: "\f123";
6780 }
6780 }
6781 .fa-location-arrow:before {
6781 .fa-location-arrow:before {
6782 content: "\f124";
6782 content: "\f124";
6783 }
6783 }
6784 .fa-crop:before {
6784 .fa-crop:before {
6785 content: "\f125";
6785 content: "\f125";
6786 }
6786 }
6787 .fa-code-fork:before {
6787 .fa-code-fork:before {
6788 content: "\f126";
6788 content: "\f126";
6789 }
6789 }
6790 .fa-unlink:before,
6790 .fa-unlink:before,
6791 .fa-chain-broken:before {
6791 .fa-chain-broken:before {
6792 content: "\f127";
6792 content: "\f127";
6793 }
6793 }
6794 .fa-question:before {
6794 .fa-question:before {
6795 content: "\f128";
6795 content: "\f128";
6796 }
6796 }
6797 .fa-info:before {
6797 .fa-info:before {
6798 content: "\f129";
6798 content: "\f129";
6799 }
6799 }
6800 .fa-exclamation:before {
6800 .fa-exclamation:before {
6801 content: "\f12a";
6801 content: "\f12a";
6802 }
6802 }
6803 .fa-superscript:before {
6803 .fa-superscript:before {
6804 content: "\f12b";
6804 content: "\f12b";
6805 }
6805 }
6806 .fa-subscript:before {
6806 .fa-subscript:before {
6807 content: "\f12c";
6807 content: "\f12c";
6808 }
6808 }
6809 .fa-eraser:before {
6809 .fa-eraser:before {
6810 content: "\f12d";
6810 content: "\f12d";
6811 }
6811 }
6812 .fa-puzzle-piece:before {
6812 .fa-puzzle-piece:before {
6813 content: "\f12e";
6813 content: "\f12e";
6814 }
6814 }
6815 .fa-microphone:before {
6815 .fa-microphone:before {
6816 content: "\f130";
6816 content: "\f130";
6817 }
6817 }
6818 .fa-microphone-slash:before {
6818 .fa-microphone-slash:before {
6819 content: "\f131";
6819 content: "\f131";
6820 }
6820 }
6821 .fa-shield:before {
6821 .fa-shield:before {
6822 content: "\f132";
6822 content: "\f132";
6823 }
6823 }
6824 .fa-calendar-o:before {
6824 .fa-calendar-o:before {
6825 content: "\f133";
6825 content: "\f133";
6826 }
6826 }
6827 .fa-fire-extinguisher:before {
6827 .fa-fire-extinguisher:before {
6828 content: "\f134";
6828 content: "\f134";
6829 }
6829 }
6830 .fa-rocket:before {
6830 .fa-rocket:before {
6831 content: "\f135";
6831 content: "\f135";
6832 }
6832 }
6833 .fa-maxcdn:before {
6833 .fa-maxcdn:before {
6834 content: "\f136";
6834 content: "\f136";
6835 }
6835 }
6836 .fa-chevron-circle-left:before {
6836 .fa-chevron-circle-left:before {
6837 content: "\f137";
6837 content: "\f137";
6838 }
6838 }
6839 .fa-chevron-circle-right:before {
6839 .fa-chevron-circle-right:before {
6840 content: "\f138";
6840 content: "\f138";
6841 }
6841 }
6842 .fa-chevron-circle-up:before {
6842 .fa-chevron-circle-up:before {
6843 content: "\f139";
6843 content: "\f139";
6844 }
6844 }
6845 .fa-chevron-circle-down:before {
6845 .fa-chevron-circle-down:before {
6846 content: "\f13a";
6846 content: "\f13a";
6847 }
6847 }
6848 .fa-html5:before {
6848 .fa-html5:before {
6849 content: "\f13b";
6849 content: "\f13b";
6850 }
6850 }
6851 .fa-css3:before {
6851 .fa-css3:before {
6852 content: "\f13c";
6852 content: "\f13c";
6853 }
6853 }
6854 .fa-anchor:before {
6854 .fa-anchor:before {
6855 content: "\f13d";
6855 content: "\f13d";
6856 }
6856 }
6857 .fa-unlock-alt:before {
6857 .fa-unlock-alt:before {
6858 content: "\f13e";
6858 content: "\f13e";
6859 }
6859 }
6860 .fa-bullseye:before {
6860 .fa-bullseye:before {
6861 content: "\f140";
6861 content: "\f140";
6862 }
6862 }
6863 .fa-ellipsis-h:before {
6863 .fa-ellipsis-h:before {
6864 content: "\f141";
6864 content: "\f141";
6865 }
6865 }
6866 .fa-ellipsis-v:before {
6866 .fa-ellipsis-v:before {
6867 content: "\f142";
6867 content: "\f142";
6868 }
6868 }
6869 .fa-rss-square:before {
6869 .fa-rss-square:before {
6870 content: "\f143";
6870 content: "\f143";
6871 }
6871 }
6872 .fa-play-circle:before {
6872 .fa-play-circle:before {
6873 content: "\f144";
6873 content: "\f144";
6874 }
6874 }
6875 .fa-ticket:before {
6875 .fa-ticket:before {
6876 content: "\f145";
6876 content: "\f145";
6877 }
6877 }
6878 .fa-minus-square:before {
6878 .fa-minus-square:before {
6879 content: "\f146";
6879 content: "\f146";
6880 }
6880 }
6881 .fa-minus-square-o:before {
6881 .fa-minus-square-o:before {
6882 content: "\f147";
6882 content: "\f147";
6883 }
6883 }
6884 .fa-level-up:before {
6884 .fa-level-up:before {
6885 content: "\f148";
6885 content: "\f148";
6886 }
6886 }
6887 .fa-level-down:before {
6887 .fa-level-down:before {
6888 content: "\f149";
6888 content: "\f149";
6889 }
6889 }
6890 .fa-check-square:before {
6890 .fa-check-square:before {
6891 content: "\f14a";
6891 content: "\f14a";
6892 }
6892 }
6893 .fa-pencil-square:before {
6893 .fa-pencil-square:before {
6894 content: "\f14b";
6894 content: "\f14b";
6895 }
6895 }
6896 .fa-external-link-square:before {
6896 .fa-external-link-square:before {
6897 content: "\f14c";
6897 content: "\f14c";
6898 }
6898 }
6899 .fa-share-square:before {
6899 .fa-share-square:before {
6900 content: "\f14d";
6900 content: "\f14d";
6901 }
6901 }
6902 .fa-compass:before {
6902 .fa-compass:before {
6903 content: "\f14e";
6903 content: "\f14e";
6904 }
6904 }
6905 .fa-toggle-down:before,
6905 .fa-toggle-down:before,
6906 .fa-caret-square-o-down:before {
6906 .fa-caret-square-o-down:before {
6907 content: "\f150";
6907 content: "\f150";
6908 }
6908 }
6909 .fa-toggle-up:before,
6909 .fa-toggle-up:before,
6910 .fa-caret-square-o-up:before {
6910 .fa-caret-square-o-up:before {
6911 content: "\f151";
6911 content: "\f151";
6912 }
6912 }
6913 .fa-toggle-right:before,
6913 .fa-toggle-right:before,
6914 .fa-caret-square-o-right:before {
6914 .fa-caret-square-o-right:before {
6915 content: "\f152";
6915 content: "\f152";
6916 }
6916 }
6917 .fa-euro:before,
6917 .fa-euro:before,
6918 .fa-eur:before {
6918 .fa-eur:before {
6919 content: "\f153";
6919 content: "\f153";
6920 }
6920 }
6921 .fa-gbp:before {
6921 .fa-gbp:before {
6922 content: "\f154";
6922 content: "\f154";
6923 }
6923 }
6924 .fa-dollar:before,
6924 .fa-dollar:before,
6925 .fa-usd:before {
6925 .fa-usd:before {
6926 content: "\f155";
6926 content: "\f155";
6927 }
6927 }
6928 .fa-rupee:before,
6928 .fa-rupee:before,
6929 .fa-inr:before {
6929 .fa-inr:before {
6930 content: "\f156";
6930 content: "\f156";
6931 }
6931 }
6932 .fa-cny:before,
6932 .fa-cny:before,
6933 .fa-rmb:before,
6933 .fa-rmb:before,
6934 .fa-yen:before,
6934 .fa-yen:before,
6935 .fa-jpy:before {
6935 .fa-jpy:before {
6936 content: "\f157";
6936 content: "\f157";
6937 }
6937 }
6938 .fa-ruble:before,
6938 .fa-ruble:before,
6939 .fa-rouble:before,
6939 .fa-rouble:before,
6940 .fa-rub:before {
6940 .fa-rub:before {
6941 content: "\f158";
6941 content: "\f158";
6942 }
6942 }
6943 .fa-won:before,
6943 .fa-won:before,
6944 .fa-krw:before {
6944 .fa-krw:before {
6945 content: "\f159";
6945 content: "\f159";
6946 }
6946 }
6947 .fa-bitcoin:before,
6947 .fa-bitcoin:before,
6948 .fa-btc:before {
6948 .fa-btc:before {
6949 content: "\f15a";
6949 content: "\f15a";
6950 }
6950 }
6951 .fa-file:before {
6951 .fa-file:before {
6952 content: "\f15b";
6952 content: "\f15b";
6953 }
6953 }
6954 .fa-file-text:before {
6954 .fa-file-text:before {
6955 content: "\f15c";
6955 content: "\f15c";
6956 }
6956 }
6957 .fa-sort-alpha-asc:before {
6957 .fa-sort-alpha-asc:before {
6958 content: "\f15d";
6958 content: "\f15d";
6959 }
6959 }
6960 .fa-sort-alpha-desc:before {
6960 .fa-sort-alpha-desc:before {
6961 content: "\f15e";
6961 content: "\f15e";
6962 }
6962 }
6963 .fa-sort-amount-asc:before {
6963 .fa-sort-amount-asc:before {
6964 content: "\f160";
6964 content: "\f160";
6965 }
6965 }
6966 .fa-sort-amount-desc:before {
6966 .fa-sort-amount-desc:before {
6967 content: "\f161";
6967 content: "\f161";
6968 }
6968 }
6969 .fa-sort-numeric-asc:before {
6969 .fa-sort-numeric-asc:before {
6970 content: "\f162";
6970 content: "\f162";
6971 }
6971 }
6972 .fa-sort-numeric-desc:before {
6972 .fa-sort-numeric-desc:before {
6973 content: "\f163";
6973 content: "\f163";
6974 }
6974 }
6975 .fa-thumbs-up:before {
6975 .fa-thumbs-up:before {
6976 content: "\f164";
6976 content: "\f164";
6977 }
6977 }
6978 .fa-thumbs-down:before {
6978 .fa-thumbs-down:before {
6979 content: "\f165";
6979 content: "\f165";
6980 }
6980 }
6981 .fa-youtube-square:before {
6981 .fa-youtube-square:before {
6982 content: "\f166";
6982 content: "\f166";
6983 }
6983 }
6984 .fa-youtube:before {
6984 .fa-youtube:before {
6985 content: "\f167";
6985 content: "\f167";
6986 }
6986 }
6987 .fa-xing:before {
6987 .fa-xing:before {
6988 content: "\f168";
6988 content: "\f168";
6989 }
6989 }
6990 .fa-xing-square:before {
6990 .fa-xing-square:before {
6991 content: "\f169";
6991 content: "\f169";
6992 }
6992 }
6993 .fa-youtube-play:before {
6993 .fa-youtube-play:before {
6994 content: "\f16a";
6994 content: "\f16a";
6995 }
6995 }
6996 .fa-dropbox:before {
6996 .fa-dropbox:before {
6997 content: "\f16b";
6997 content: "\f16b";
6998 }
6998 }
6999 .fa-stack-overflow:before {
6999 .fa-stack-overflow:before {
7000 content: "\f16c";
7000 content: "\f16c";
7001 }
7001 }
7002 .fa-instagram:before {
7002 .fa-instagram:before {
7003 content: "\f16d";
7003 content: "\f16d";
7004 }
7004 }
7005 .fa-flickr:before {
7005 .fa-flickr:before {
7006 content: "\f16e";
7006 content: "\f16e";
7007 }
7007 }
7008 .fa-adn:before {
7008 .fa-adn:before {
7009 content: "\f170";
7009 content: "\f170";
7010 }
7010 }
7011 .fa-bitbucket:before {
7011 .fa-bitbucket:before {
7012 content: "\f171";
7012 content: "\f171";
7013 }
7013 }
7014 .fa-bitbucket-square:before {
7014 .fa-bitbucket-square:before {
7015 content: "\f172";
7015 content: "\f172";
7016 }
7016 }
7017 .fa-tumblr:before {
7017 .fa-tumblr:before {
7018 content: "\f173";
7018 content: "\f173";
7019 }
7019 }
7020 .fa-tumblr-square:before {
7020 .fa-tumblr-square:before {
7021 content: "\f174";
7021 content: "\f174";
7022 }
7022 }
7023 .fa-long-arrow-down:before {
7023 .fa-long-arrow-down:before {
7024 content: "\f175";
7024 content: "\f175";
7025 }
7025 }
7026 .fa-long-arrow-up:before {
7026 .fa-long-arrow-up:before {
7027 content: "\f176";
7027 content: "\f176";
7028 }
7028 }
7029 .fa-long-arrow-left:before {
7029 .fa-long-arrow-left:before {
7030 content: "\f177";
7030 content: "\f177";
7031 }
7031 }
7032 .fa-long-arrow-right:before {
7032 .fa-long-arrow-right:before {
7033 content: "\f178";
7033 content: "\f178";
7034 }
7034 }
7035 .fa-apple:before {
7035 .fa-apple:before {
7036 content: "\f179";
7036 content: "\f179";
7037 }
7037 }
7038 .fa-windows:before {
7038 .fa-windows:before {
7039 content: "\f17a";
7039 content: "\f17a";
7040 }
7040 }
7041 .fa-android:before {
7041 .fa-android:before {
7042 content: "\f17b";
7042 content: "\f17b";
7043 }
7043 }
7044 .fa-linux:before {
7044 .fa-linux:before {
7045 content: "\f17c";
7045 content: "\f17c";
7046 }
7046 }
7047 .fa-dribbble:before {
7047 .fa-dribbble:before {
7048 content: "\f17d";
7048 content: "\f17d";
7049 }
7049 }
7050 .fa-skype:before {
7050 .fa-skype:before {
7051 content: "\f17e";
7051 content: "\f17e";
7052 }
7052 }
7053 .fa-foursquare:before {
7053 .fa-foursquare:before {
7054 content: "\f180";
7054 content: "\f180";
7055 }
7055 }
7056 .fa-trello:before {
7056 .fa-trello:before {
7057 content: "\f181";
7057 content: "\f181";
7058 }
7058 }
7059 .fa-female:before {
7059 .fa-female:before {
7060 content: "\f182";
7060 content: "\f182";
7061 }
7061 }
7062 .fa-male:before {
7062 .fa-male:before {
7063 content: "\f183";
7063 content: "\f183";
7064 }
7064 }
7065 .fa-gittip:before {
7065 .fa-gittip:before {
7066 content: "\f184";
7066 content: "\f184";
7067 }
7067 }
7068 .fa-sun-o:before {
7068 .fa-sun-o:before {
7069 content: "\f185";
7069 content: "\f185";
7070 }
7070 }
7071 .fa-moon-o:before {
7071 .fa-moon-o:before {
7072 content: "\f186";
7072 content: "\f186";
7073 }
7073 }
7074 .fa-archive:before {
7074 .fa-archive:before {
7075 content: "\f187";
7075 content: "\f187";
7076 }
7076 }
7077 .fa-bug:before {
7077 .fa-bug:before {
7078 content: "\f188";
7078 content: "\f188";
7079 }
7079 }
7080 .fa-vk:before {
7080 .fa-vk:before {
7081 content: "\f189";
7081 content: "\f189";
7082 }
7082 }
7083 .fa-weibo:before {
7083 .fa-weibo:before {
7084 content: "\f18a";
7084 content: "\f18a";
7085 }
7085 }
7086 .fa-renren:before {
7086 .fa-renren:before {
7087 content: "\f18b";
7087 content: "\f18b";
7088 }
7088 }
7089 .fa-pagelines:before {
7089 .fa-pagelines:before {
7090 content: "\f18c";
7090 content: "\f18c";
7091 }
7091 }
7092 .fa-stack-exchange:before {
7092 .fa-stack-exchange:before {
7093 content: "\f18d";
7093 content: "\f18d";
7094 }
7094 }
7095 .fa-arrow-circle-o-right:before {
7095 .fa-arrow-circle-o-right:before {
7096 content: "\f18e";
7096 content: "\f18e";
7097 }
7097 }
7098 .fa-arrow-circle-o-left:before {
7098 .fa-arrow-circle-o-left:before {
7099 content: "\f190";
7099 content: "\f190";
7100 }
7100 }
7101 .fa-toggle-left:before,
7101 .fa-toggle-left:before,
7102 .fa-caret-square-o-left:before {
7102 .fa-caret-square-o-left:before {
7103 content: "\f191";
7103 content: "\f191";
7104 }
7104 }
7105 .fa-dot-circle-o:before {
7105 .fa-dot-circle-o:before {
7106 content: "\f192";
7106 content: "\f192";
7107 }
7107 }
7108 .fa-wheelchair:before {
7108 .fa-wheelchair:before {
7109 content: "\f193";
7109 content: "\f193";
7110 }
7110 }
7111 .fa-vimeo-square:before {
7111 .fa-vimeo-square:before {
7112 content: "\f194";
7112 content: "\f194";
7113 }
7113 }
7114 .fa-turkish-lira:before,
7114 .fa-turkish-lira:before,
7115 .fa-try:before {
7115 .fa-try:before {
7116 content: "\f195";
7116 content: "\f195";
7117 }
7117 }
7118 .fa-plus-square-o:before {
7118 .fa-plus-square-o:before {
7119 content: "\f196";
7119 content: "\f196";
7120 }
7120 }
7121 .fa-space-shuttle:before {
7121 .fa-space-shuttle:before {
7122 content: "\f197";
7122 content: "\f197";
7123 }
7123 }
7124 .fa-slack:before {
7124 .fa-slack:before {
7125 content: "\f198";
7125 content: "\f198";
7126 }
7126 }
7127 .fa-envelope-square:before {
7127 .fa-envelope-square:before {
7128 content: "\f199";
7128 content: "\f199";
7129 }
7129 }
7130 .fa-wordpress:before {
7130 .fa-wordpress:before {
7131 content: "\f19a";
7131 content: "\f19a";
7132 }
7132 }
7133 .fa-openid:before {
7133 .fa-openid:before {
7134 content: "\f19b";
7134 content: "\f19b";
7135 }
7135 }
7136 .fa-institution:before,
7136 .fa-institution:before,
7137 .fa-bank:before,
7137 .fa-bank:before,
7138 .fa-university:before {
7138 .fa-university:before {
7139 content: "\f19c";
7139 content: "\f19c";
7140 }
7140 }
7141 .fa-mortar-board:before,
7141 .fa-mortar-board:before,
7142 .fa-graduation-cap:before {
7142 .fa-graduation-cap:before {
7143 content: "\f19d";
7143 content: "\f19d";
7144 }
7144 }
7145 .fa-yahoo:before {
7145 .fa-yahoo:before {
7146 content: "\f19e";
7146 content: "\f19e";
7147 }
7147 }
7148 .fa-google:before {
7148 .fa-google:before {
7149 content: "\f1a0";
7149 content: "\f1a0";
7150 }
7150 }
7151 .fa-reddit:before {
7151 .fa-reddit:before {
7152 content: "\f1a1";
7152 content: "\f1a1";
7153 }
7153 }
7154 .fa-reddit-square:before {
7154 .fa-reddit-square:before {
7155 content: "\f1a2";
7155 content: "\f1a2";
7156 }
7156 }
7157 .fa-stumbleupon-circle:before {
7157 .fa-stumbleupon-circle:before {
7158 content: "\f1a3";
7158 content: "\f1a3";
7159 }
7159 }
7160 .fa-stumbleupon:before {
7160 .fa-stumbleupon:before {
7161 content: "\f1a4";
7161 content: "\f1a4";
7162 }
7162 }
7163 .fa-delicious:before {
7163 .fa-delicious:before {
7164 content: "\f1a5";
7164 content: "\f1a5";
7165 }
7165 }
7166 .fa-digg:before {
7166 .fa-digg:before {
7167 content: "\f1a6";
7167 content: "\f1a6";
7168 }
7168 }
7169 .fa-pied-piper-square:before,
7169 .fa-pied-piper-square:before,
7170 .fa-pied-piper:before {
7170 .fa-pied-piper:before {
7171 content: "\f1a7";
7171 content: "\f1a7";
7172 }
7172 }
7173 .fa-pied-piper-alt:before {
7173 .fa-pied-piper-alt:before {
7174 content: "\f1a8";
7174 content: "\f1a8";
7175 }
7175 }
7176 .fa-drupal:before {
7176 .fa-drupal:before {
7177 content: "\f1a9";
7177 content: "\f1a9";
7178 }
7178 }
7179 .fa-joomla:before {
7179 .fa-joomla:before {
7180 content: "\f1aa";
7180 content: "\f1aa";
7181 }
7181 }
7182 .fa-language:before {
7182 .fa-language:before {
7183 content: "\f1ab";
7183 content: "\f1ab";
7184 }
7184 }
7185 .fa-fax:before {
7185 .fa-fax:before {
7186 content: "\f1ac";
7186 content: "\f1ac";
7187 }
7187 }
7188 .fa-building:before {
7188 .fa-building:before {
7189 content: "\f1ad";
7189 content: "\f1ad";
7190 }
7190 }
7191 .fa-child:before {
7191 .fa-child:before {
7192 content: "\f1ae";
7192 content: "\f1ae";
7193 }
7193 }
7194 .fa-paw:before {
7194 .fa-paw:before {
7195 content: "\f1b0";
7195 content: "\f1b0";
7196 }
7196 }
7197 .fa-spoon:before {
7197 .fa-spoon:before {
7198 content: "\f1b1";
7198 content: "\f1b1";
7199 }
7199 }
7200 .fa-cube:before {
7200 .fa-cube:before {
7201 content: "\f1b2";
7201 content: "\f1b2";
7202 }
7202 }
7203 .fa-cubes:before {
7203 .fa-cubes:before {
7204 content: "\f1b3";
7204 content: "\f1b3";
7205 }
7205 }
7206 .fa-behance:before {
7206 .fa-behance:before {
7207 content: "\f1b4";
7207 content: "\f1b4";
7208 }
7208 }
7209 .fa-behance-square:before {
7209 .fa-behance-square:before {
7210 content: "\f1b5";
7210 content: "\f1b5";
7211 }
7211 }
7212 .fa-steam:before {
7212 .fa-steam:before {
7213 content: "\f1b6";
7213 content: "\f1b6";
7214 }
7214 }
7215 .fa-steam-square:before {
7215 .fa-steam-square:before {
7216 content: "\f1b7";
7216 content: "\f1b7";
7217 }
7217 }
7218 .fa-recycle:before {
7218 .fa-recycle:before {
7219 content: "\f1b8";
7219 content: "\f1b8";
7220 }
7220 }
7221 .fa-automobile:before,
7221 .fa-automobile:before,
7222 .fa-car:before {
7222 .fa-car:before {
7223 content: "\f1b9";
7223 content: "\f1b9";
7224 }
7224 }
7225 .fa-cab:before,
7225 .fa-cab:before,
7226 .fa-taxi:before {
7226 .fa-taxi:before {
7227 content: "\f1ba";
7227 content: "\f1ba";
7228 }
7228 }
7229 .fa-tree:before {
7229 .fa-tree:before {
7230 content: "\f1bb";
7230 content: "\f1bb";
7231 }
7231 }
7232 .fa-spotify:before {
7232 .fa-spotify:before {
7233 content: "\f1bc";
7233 content: "\f1bc";
7234 }
7234 }
7235 .fa-deviantart:before {
7235 .fa-deviantart:before {
7236 content: "\f1bd";
7236 content: "\f1bd";
7237 }
7237 }
7238 .fa-soundcloud:before {
7238 .fa-soundcloud:before {
7239 content: "\f1be";
7239 content: "\f1be";
7240 }
7240 }
7241 .fa-database:before {
7241 .fa-database:before {
7242 content: "\f1c0";
7242 content: "\f1c0";
7243 }
7243 }
7244 .fa-file-pdf-o:before {
7244 .fa-file-pdf-o:before {
7245 content: "\f1c1";
7245 content: "\f1c1";
7246 }
7246 }
7247 .fa-file-word-o:before {
7247 .fa-file-word-o:before {
7248 content: "\f1c2";
7248 content: "\f1c2";
7249 }
7249 }
7250 .fa-file-excel-o:before {
7250 .fa-file-excel-o:before {
7251 content: "\f1c3";
7251 content: "\f1c3";
7252 }
7252 }
7253 .fa-file-powerpoint-o:before {
7253 .fa-file-powerpoint-o:before {
7254 content: "\f1c4";
7254 content: "\f1c4";
7255 }
7255 }
7256 .fa-file-photo-o:before,
7256 .fa-file-photo-o:before,
7257 .fa-file-picture-o:before,
7257 .fa-file-picture-o:before,
7258 .fa-file-image-o:before {
7258 .fa-file-image-o:before {
7259 content: "\f1c5";
7259 content: "\f1c5";
7260 }
7260 }
7261 .fa-file-zip-o:before,
7261 .fa-file-zip-o:before,
7262 .fa-file-archive-o:before {
7262 .fa-file-archive-o:before {
7263 content: "\f1c6";
7263 content: "\f1c6";
7264 }
7264 }
7265 .fa-file-sound-o:before,
7265 .fa-file-sound-o:before,
7266 .fa-file-audio-o:before {
7266 .fa-file-audio-o:before {
7267 content: "\f1c7";
7267 content: "\f1c7";
7268 }
7268 }
7269 .fa-file-movie-o:before,
7269 .fa-file-movie-o:before,
7270 .fa-file-video-o:before {
7270 .fa-file-video-o:before {
7271 content: "\f1c8";
7271 content: "\f1c8";
7272 }
7272 }
7273 .fa-file-code-o:before {
7273 .fa-file-code-o:before {
7274 content: "\f1c9";
7274 content: "\f1c9";
7275 }
7275 }
7276 .fa-vine:before {
7276 .fa-vine:before {
7277 content: "\f1ca";
7277 content: "\f1ca";
7278 }
7278 }
7279 .fa-codepen:before {
7279 .fa-codepen:before {
7280 content: "\f1cb";
7280 content: "\f1cb";
7281 }
7281 }
7282 .fa-jsfiddle:before {
7282 .fa-jsfiddle:before {
7283 content: "\f1cc";
7283 content: "\f1cc";
7284 }
7284 }
7285 .fa-life-bouy:before,
7285 .fa-life-bouy:before,
7286 .fa-life-saver:before,
7286 .fa-life-saver:before,
7287 .fa-support:before,
7287 .fa-support:before,
7288 .fa-life-ring:before {
7288 .fa-life-ring:before {
7289 content: "\f1cd";
7289 content: "\f1cd";
7290 }
7290 }
7291 .fa-circle-o-notch:before {
7291 .fa-circle-o-notch:before {
7292 content: "\f1ce";
7292 content: "\f1ce";
7293 }
7293 }
7294 .fa-ra:before,
7294 .fa-ra:before,
7295 .fa-rebel:before {
7295 .fa-rebel:before {
7296 content: "\f1d0";
7296 content: "\f1d0";
7297 }
7297 }
7298 .fa-ge:before,
7298 .fa-ge:before,
7299 .fa-empire:before {
7299 .fa-empire:before {
7300 content: "\f1d1";
7300 content: "\f1d1";
7301 }
7301 }
7302 .fa-git-square:before {
7302 .fa-git-square:before {
7303 content: "\f1d2";
7303 content: "\f1d2";
7304 }
7304 }
7305 .fa-git:before {
7305 .fa-git:before {
7306 content: "\f1d3";
7306 content: "\f1d3";
7307 }
7307 }
7308 .fa-hacker-news:before {
7308 .fa-hacker-news:before {
7309 content: "\f1d4";
7309 content: "\f1d4";
7310 }
7310 }
7311 .fa-tencent-weibo:before {
7311 .fa-tencent-weibo:before {
7312 content: "\f1d5";
7312 content: "\f1d5";
7313 }
7313 }
7314 .fa-qq:before {
7314 .fa-qq:before {
7315 content: "\f1d6";
7315 content: "\f1d6";
7316 }
7316 }
7317 .fa-wechat:before,
7317 .fa-wechat:before,
7318 .fa-weixin:before {
7318 .fa-weixin:before {
7319 content: "\f1d7";
7319 content: "\f1d7";
7320 }
7320 }
7321 .fa-send:before,
7321 .fa-send:before,
7322 .fa-paper-plane:before {
7322 .fa-paper-plane:before {
7323 content: "\f1d8";
7323 content: "\f1d8";
7324 }
7324 }
7325 .fa-send-o:before,
7325 .fa-send-o:before,
7326 .fa-paper-plane-o:before {
7326 .fa-paper-plane-o:before {
7327 content: "\f1d9";
7327 content: "\f1d9";
7328 }
7328 }
7329 .fa-history:before {
7329 .fa-history:before {
7330 content: "\f1da";
7330 content: "\f1da";
7331 }
7331 }
7332 .fa-circle-thin:before {
7332 .fa-circle-thin:before {
7333 content: "\f1db";
7333 content: "\f1db";
7334 }
7334 }
7335 .fa-header:before {
7335 .fa-header:before {
7336 content: "\f1dc";
7336 content: "\f1dc";
7337 }
7337 }
7338 .fa-paragraph:before {
7338 .fa-paragraph:before {
7339 content: "\f1dd";
7339 content: "\f1dd";
7340 }
7340 }
7341 .fa-sliders:before {
7341 .fa-sliders:before {
7342 content: "\f1de";
7342 content: "\f1de";
7343 }
7343 }
7344 .fa-share-alt:before {
7344 .fa-share-alt:before {
7345 content: "\f1e0";
7345 content: "\f1e0";
7346 }
7346 }
7347 .fa-share-alt-square:before {
7347 .fa-share-alt-square:before {
7348 content: "\f1e1";
7348 content: "\f1e1";
7349 }
7349 }
7350 .fa-bomb:before {
7350 .fa-bomb:before {
7351 content: "\f1e2";
7351 content: "\f1e2";
7352 }
7352 }
7353 /*!
7353 /*!
7354 *
7354 *
7355 * IPython base
7355 * IPython base
7356 *
7356 *
7357 */
7357 */
7358 .modal.fade .modal-dialog {
7358 .modal.fade .modal-dialog {
7359 -webkit-transform: translate(0, 0);
7359 -webkit-transform: translate(0, 0);
7360 -ms-transform: translate(0, 0);
7360 -ms-transform: translate(0, 0);
7361 transform: translate(0, 0);
7361 transform: translate(0, 0);
7362 }
7362 }
7363 code {
7363 code {
7364 color: #000000;
7364 color: #000000;
7365 }
7365 }
7366 pre {
7366 pre {
7367 font-size: inherit;
7367 font-size: inherit;
7368 line-height: inherit;
7368 line-height: inherit;
7369 }
7369 }
7370 label {
7370 label {
7371 font-weight: normal;
7371 font-weight: normal;
7372 }
7372 }
7373 .border-box-sizing {
7373 .border-box-sizing {
7374 box-sizing: border-box;
7374 box-sizing: border-box;
7375 -moz-box-sizing: border-box;
7375 -moz-box-sizing: border-box;
7376 -webkit-box-sizing: border-box;
7376 -webkit-box-sizing: border-box;
7377 }
7377 }
7378 .corner-all {
7378 .corner-all {
7379 border-radius: 4px;
7379 border-radius: 4px;
7380 }
7380 }
7381 .no-padding {
7381 .no-padding {
7382 padding: 0px;
7382 padding: 0px;
7383 }
7383 }
7384 /* Flexible box model classes */
7384 /* Flexible box model classes */
7385 /* Taken from Alex Russell http://infrequently.org/2009/08/css-3-progress/ */
7385 /* Taken from Alex Russell http://infrequently.org/2009/08/css-3-progress/ */
7386 /* This file is a compatability layer. It allows the usage of flexible box
7386 /* This file is a compatability layer. It allows the usage of flexible box
7387 model layouts accross multiple browsers, including older browsers. The newest,
7387 model layouts accross multiple browsers, including older browsers. The newest,
7388 universal implementation of the flexible box model is used when available (see
7388 universal implementation of the flexible box model is used when available (see
7389 `Modern browsers` comments below). Browsers that are known to implement this
7389 `Modern browsers` comments below). Browsers that are known to implement this
7390 new spec completely include:
7390 new spec completely include:
7391
7391
7392 Firefox 28.0+
7392 Firefox 28.0+
7393 Chrome 29.0+
7393 Chrome 29.0+
7394 Internet Explorer 11+
7394 Internet Explorer 11+
7395 Opera 17.0+
7395 Opera 17.0+
7396
7396
7397 Browsers not listed, including Safari, are supported via the styling under the
7397 Browsers not listed, including Safari, are supported via the styling under the
7398 `Old browsers` comments below.
7398 `Old browsers` comments below.
7399 */
7399 */
7400 .hbox {
7400 .hbox {
7401 /* Old browsers */
7401 /* Old browsers */
7402 display: -webkit-box;
7402 display: -webkit-box;
7403 -webkit-box-orient: horizontal;
7403 -webkit-box-orient: horizontal;
7404 -webkit-box-align: stretch;
7404 -webkit-box-align: stretch;
7405 display: -moz-box;
7405 display: -moz-box;
7406 -moz-box-orient: horizontal;
7406 -moz-box-orient: horizontal;
7407 -moz-box-align: stretch;
7407 -moz-box-align: stretch;
7408 display: box;
7408 display: box;
7409 box-orient: horizontal;
7409 box-orient: horizontal;
7410 box-align: stretch;
7410 box-align: stretch;
7411 /* Modern browsers */
7411 /* Modern browsers */
7412 display: flex;
7412 display: flex;
7413 flex-direction: row;
7413 flex-direction: row;
7414 align-items: stretch;
7414 align-items: stretch;
7415 }
7415 }
7416 .hbox > * {
7416 .hbox > * {
7417 /* Old browsers */
7417 /* Old browsers */
7418 -webkit-box-flex: 0;
7418 -webkit-box-flex: 0;
7419 -moz-box-flex: 0;
7419 -moz-box-flex: 0;
7420 box-flex: 0;
7420 box-flex: 0;
7421 /* Modern browsers */
7421 /* Modern browsers */
7422 flex: none;
7422 flex: none;
7423 }
7423 }
7424 .vbox {
7424 .vbox {
7425 /* Old browsers */
7425 /* Old browsers */
7426 display: -webkit-box;
7426 display: -webkit-box;
7427 -webkit-box-orient: vertical;
7427 -webkit-box-orient: vertical;
7428 -webkit-box-align: stretch;
7428 -webkit-box-align: stretch;
7429 display: -moz-box;
7429 display: -moz-box;
7430 -moz-box-orient: vertical;
7430 -moz-box-orient: vertical;
7431 -moz-box-align: stretch;
7431 -moz-box-align: stretch;
7432 display: box;
7432 display: box;
7433 box-orient: vertical;
7433 box-orient: vertical;
7434 box-align: stretch;
7434 box-align: stretch;
7435 /* Modern browsers */
7435 /* Modern browsers */
7436 display: flex;
7436 display: flex;
7437 flex-direction: column;
7437 flex-direction: column;
7438 align-items: stretch;
7438 align-items: stretch;
7439 }
7439 }
7440 .vbox > * {
7440 .vbox > * {
7441 /* Old browsers */
7441 /* Old browsers */
7442 -webkit-box-flex: 0;
7442 -webkit-box-flex: 0;
7443 -moz-box-flex: 0;
7443 -moz-box-flex: 0;
7444 box-flex: 0;
7444 box-flex: 0;
7445 /* Modern browsers */
7445 /* Modern browsers */
7446 flex: none;
7446 flex: none;
7447 }
7447 }
7448 .hbox.reverse,
7448 .hbox.reverse,
7449 .vbox.reverse,
7449 .vbox.reverse,
7450 .reverse {
7450 .reverse {
7451 /* Old browsers */
7451 /* Old browsers */
7452 -webkit-box-direction: reverse;
7452 -webkit-box-direction: reverse;
7453 -moz-box-direction: reverse;
7453 -moz-box-direction: reverse;
7454 box-direction: reverse;
7454 box-direction: reverse;
7455 /* Modern browsers */
7455 /* Modern browsers */
7456 flex-direction: row-reverse;
7456 flex-direction: row-reverse;
7457 }
7457 }
7458 .hbox.box-flex0,
7458 .hbox.box-flex0,
7459 .vbox.box-flex0,
7459 .vbox.box-flex0,
7460 .box-flex0 {
7460 .box-flex0 {
7461 /* Old browsers */
7461 /* Old browsers */
7462 -webkit-box-flex: 0;
7462 -webkit-box-flex: 0;
7463 -moz-box-flex: 0;
7463 -moz-box-flex: 0;
7464 box-flex: 0;
7464 box-flex: 0;
7465 /* Modern browsers */
7465 /* Modern browsers */
7466 flex: none;
7466 flex: none;
7467 width: auto;
7467 width: auto;
7468 }
7468 }
7469 .hbox.box-flex1,
7469 .hbox.box-flex1,
7470 .vbox.box-flex1,
7470 .vbox.box-flex1,
7471 .box-flex1 {
7471 .box-flex1 {
7472 /* Old browsers */
7472 /* Old browsers */
7473 -webkit-box-flex: 1;
7473 -webkit-box-flex: 1;
7474 -moz-box-flex: 1;
7474 -moz-box-flex: 1;
7475 box-flex: 1;
7475 box-flex: 1;
7476 /* Modern browsers */
7476 /* Modern browsers */
7477 flex: 1;
7477 flex: 1;
7478 }
7478 }
7479 .hbox.box-flex,
7479 .hbox.box-flex,
7480 .vbox.box-flex,
7480 .vbox.box-flex,
7481 .box-flex {
7481 .box-flex {
7482 /* Old browsers */
7482 /* Old browsers */
7483 /* Old browsers */
7483 /* Old browsers */
7484 -webkit-box-flex: 1;
7484 -webkit-box-flex: 1;
7485 -moz-box-flex: 1;
7485 -moz-box-flex: 1;
7486 box-flex: 1;
7486 box-flex: 1;
7487 /* Modern browsers */
7487 /* Modern browsers */
7488 flex: 1;
7488 flex: 1;
7489 }
7489 }
7490 .hbox.box-flex2,
7490 .hbox.box-flex2,
7491 .vbox.box-flex2,
7491 .vbox.box-flex2,
7492 .box-flex2 {
7492 .box-flex2 {
7493 /* Old browsers */
7493 /* Old browsers */
7494 -webkit-box-flex: 2;
7494 -webkit-box-flex: 2;
7495 -moz-box-flex: 2;
7495 -moz-box-flex: 2;
7496 box-flex: 2;
7496 box-flex: 2;
7497 /* Modern browsers */
7497 /* Modern browsers */
7498 flex: 2;
7498 flex: 2;
7499 }
7499 }
7500 .box-group1 {
7500 .box-group1 {
7501 /* Deprecated */
7501 /* Deprecated */
7502 -webkit-box-flex-group: 1;
7502 -webkit-box-flex-group: 1;
7503 -moz-box-flex-group: 1;
7503 -moz-box-flex-group: 1;
7504 box-flex-group: 1;
7504 box-flex-group: 1;
7505 }
7505 }
7506 .box-group2 {
7506 .box-group2 {
7507 /* Deprecated */
7507 /* Deprecated */
7508 -webkit-box-flex-group: 2;
7508 -webkit-box-flex-group: 2;
7509 -moz-box-flex-group: 2;
7509 -moz-box-flex-group: 2;
7510 box-flex-group: 2;
7510 box-flex-group: 2;
7511 }
7511 }
7512 .hbox.start,
7512 .hbox.start,
7513 .vbox.start,
7513 .vbox.start,
7514 .start {
7514 .start {
7515 /* Old browsers */
7515 /* Old browsers */
7516 -webkit-box-pack: start;
7516 -webkit-box-pack: start;
7517 -moz-box-pack: start;
7517 -moz-box-pack: start;
7518 box-pack: start;
7518 box-pack: start;
7519 /* Modern browsers */
7519 /* Modern browsers */
7520 justify-content: flex-start;
7520 justify-content: flex-start;
7521 }
7521 }
7522 .hbox.end,
7522 .hbox.end,
7523 .vbox.end,
7523 .vbox.end,
7524 .end {
7524 .end {
7525 /* Old browsers */
7525 /* Old browsers */
7526 -webkit-box-pack: end;
7526 -webkit-box-pack: end;
7527 -moz-box-pack: end;
7527 -moz-box-pack: end;
7528 box-pack: end;
7528 box-pack: end;
7529 /* Modern browsers */
7529 /* Modern browsers */
7530 justify-content: flex-end;
7530 justify-content: flex-end;
7531 }
7531 }
7532 .hbox.center,
7532 .hbox.center,
7533 .vbox.center,
7533 .vbox.center,
7534 .center {
7534 .center {
7535 /* Old browsers */
7535 /* Old browsers */
7536 -webkit-box-pack: center;
7536 -webkit-box-pack: center;
7537 -moz-box-pack: center;
7537 -moz-box-pack: center;
7538 box-pack: center;
7538 box-pack: center;
7539 /* Modern browsers */
7539 /* Modern browsers */
7540 justify-content: center;
7540 justify-content: center;
7541 }
7541 }
7542 .hbox.align-start,
7542 .hbox.align-start,
7543 .vbox.align-start,
7543 .vbox.align-start,
7544 .align-start {
7544 .align-start {
7545 /* Old browsers */
7545 /* Old browsers */
7546 -webkit-box-align: start;
7546 -webkit-box-align: start;
7547 -moz-box-align: start;
7547 -moz-box-align: start;
7548 box-align: start;
7548 box-align: start;
7549 /* Modern browsers */
7549 /* Modern browsers */
7550 align-items: flex-start;
7550 align-items: flex-start;
7551 }
7551 }
7552 .hbox.align-end,
7552 .hbox.align-end,
7553 .vbox.align-end,
7553 .vbox.align-end,
7554 .align-end {
7554 .align-end {
7555 /* Old browsers */
7555 /* Old browsers */
7556 -webkit-box-align: end;
7556 -webkit-box-align: end;
7557 -moz-box-align: end;
7557 -moz-box-align: end;
7558 box-align: end;
7558 box-align: end;
7559 /* Modern browsers */
7559 /* Modern browsers */
7560 align-items: flex-end;
7560 align-items: flex-end;
7561 }
7561 }
7562 .hbox.align-center,
7562 .hbox.align-center,
7563 .vbox.align-center,
7563 .vbox.align-center,
7564 .align-center {
7564 .align-center {
7565 /* Old browsers */
7565 /* Old browsers */
7566 -webkit-box-align: center;
7566 -webkit-box-align: center;
7567 -moz-box-align: center;
7567 -moz-box-align: center;
7568 box-align: center;
7568 box-align: center;
7569 /* Modern browsers */
7569 /* Modern browsers */
7570 align-items: center;
7570 align-items: center;
7571 }
7571 }
7572 div.error {
7572 div.error {
7573 margin: 2em;
7573 margin: 2em;
7574 text-align: center;
7574 text-align: center;
7575 }
7575 }
7576 div.error > h1 {
7576 div.error > h1 {
7577 font-size: 500%;
7577 font-size: 500%;
7578 line-height: normal;
7578 line-height: normal;
7579 }
7579 }
7580 div.error > p {
7580 div.error > p {
7581 font-size: 200%;
7581 font-size: 200%;
7582 line-height: normal;
7582 line-height: normal;
7583 }
7583 }
7584 div.traceback-wrapper {
7584 div.traceback-wrapper {
7585 text-align: left;
7585 text-align: left;
7586 max-width: 800px;
7586 max-width: 800px;
7587 margin: auto;
7587 margin: auto;
7588 }
7588 }
7589 /**
7589 /**
7590 * Primary styles
7590 * Primary styles
7591 *
7591 *
7592 * Author: IPython Development Team
7592 * Author: IPython Development Team
7593 */
7593 */
7594 body {
7594 body {
7595 background-color: white;
7595 background-color: white;
7596 /* This makes sure that the body covers the entire window and needs to
7596 /* This makes sure that the body covers the entire window and needs to
7597 be in a different element than the display: box in wrapper below */
7597 be in a different element than the display: box in wrapper below */
7598 position: absolute;
7598 position: absolute;
7599 left: 0px;
7599 left: 0px;
7600 right: 0px;
7600 right: 0px;
7601 top: 0px;
7601 top: 0px;
7602 bottom: 0px;
7602 bottom: 0px;
7603 overflow: visible;
7603 overflow: visible;
7604 }
7604 }
7605 div#header {
7605 div#header {
7606 /* Initially hidden to prevent FLOUC */
7606 /* Initially hidden to prevent FLOUC */
7607 display: none;
7607 display: none;
7608 margin-bottom: 0px;
7608 margin-bottom: 0px;
7609 padding-left: 30px;
7609 padding-left: 30px;
7610 padding-bottom: 5px;
7610 padding-bottom: 5px;
7611 border-bottom: 1px solid #e7e7e7;
7611 border-bottom: 1px solid #e7e7e7;
7612 box-sizing: border-box;
7612 box-sizing: border-box;
7613 -moz-box-sizing: border-box;
7613 -moz-box-sizing: border-box;
7614 -webkit-box-sizing: border-box;
7614 -webkit-box-sizing: border-box;
7615 }
7615 }
7616 #ipython_notebook {
7616 #ipython_notebook {
7617 padding-left: 0px;
7617 padding-left: 0px;
7618 }
7618 }
7619 #noscript {
7619 #noscript {
7620 width: auto;
7620 width: auto;
7621 padding-top: 16px;
7621 padding-top: 16px;
7622 padding-bottom: 16px;
7622 padding-bottom: 16px;
7623 text-align: center;
7623 text-align: center;
7624 font-size: 22px;
7624 font-size: 22px;
7625 color: red;
7625 color: red;
7626 font-weight: bold;
7626 font-weight: bold;
7627 }
7627 }
7628 #ipython_notebook img {
7628 #ipython_notebook img {
7629 font-family: Verdana, "Helvetica Neue", Arial, Helvetica, Geneva, sans-serif;
7629 font-family: Verdana, "Helvetica Neue", Arial, Helvetica, Geneva, sans-serif;
7630 height: 24px;
7630 height: 24px;
7631 text-decoration: none;
7631 text-decoration: none;
7632 color: black;
7632 color: black;
7633 }
7633 }
7634 #site {
7634 #site {
7635 width: 100%;
7635 width: 100%;
7636 display: none;
7636 display: none;
7637 box-sizing: border-box;
7637 box-sizing: border-box;
7638 -moz-box-sizing: border-box;
7638 -moz-box-sizing: border-box;
7639 -webkit-box-sizing: border-box;
7639 -webkit-box-sizing: border-box;
7640 }
7640 }
7641 /* Smaller buttons */
7641 /* Smaller buttons */
7642 .ui-button .ui-button-text {
7642 .ui-button .ui-button-text {
7643 padding: 0.2em 0.8em;
7643 padding: 0.2em 0.8em;
7644 font-size: 77%;
7644 font-size: 77%;
7645 }
7645 }
7646 input.ui-button {
7646 input.ui-button {
7647 padding: 0.3em 0.9em;
7647 padding: 0.3em 0.9em;
7648 }
7648 }
7649 .navbar span {
7649 .navbar span {
7650 margin-top: 3px;
7650 margin-top: 3px;
7651 }
7651 }
7652 span#login_widget {
7652 span#login_widget {
7653 float: right;
7653 float: right;
7654 }
7654 }
7655 span#login_widget > .button,
7655 span#login_widget > .button,
7656 #logout {
7656 #logout {
7657 display: inline-block;
7657 display: inline-block;
7658 margin-bottom: 0;
7658 margin-bottom: 0;
7659 font-weight: normal;
7659 font-weight: normal;
7660 text-align: center;
7660 text-align: center;
7661 vertical-align: middle;
7661 vertical-align: middle;
7662 cursor: pointer;
7662 cursor: pointer;
7663 background-image: none;
7663 background-image: none;
7664 border: 1px solid transparent;
7664 border: 1px solid transparent;
7665 white-space: nowrap;
7665 white-space: nowrap;
7666 padding: 6px 12px;
7666 padding: 6px 12px;
7667 font-size: 13px;
7667 font-size: 13px;
7668 line-height: 1.42857143;
7668 line-height: 1.42857143;
7669 border-radius: 4px;
7669 border-radius: 4px;
7670 -webkit-user-select: none;
7670 -webkit-user-select: none;
7671 -moz-user-select: none;
7671 -moz-user-select: none;
7672 -ms-user-select: none;
7672 -ms-user-select: none;
7673 user-select: none;
7673 user-select: none;
7674 color: #333333;
7674 color: #333333;
7675 background-color: #ffffff;
7675 background-color: #ffffff;
7676 border-color: #cccccc;
7676 border-color: #cccccc;
7677 padding: 5px 10px;
7677 padding: 5px 10px;
7678 font-size: 12px;
7678 font-size: 12px;
7679 line-height: 1.5;
7679 line-height: 1.5;
7680 border-radius: 3px;
7680 border-radius: 3px;
7681 }
7681 }
7682 span#login_widget > .button:focus,
7682 span#login_widget > .button:focus,
7683 #logout:focus,
7683 #logout:focus,
7684 span#login_widget > .button:active:focus,
7684 span#login_widget > .button:active:focus,
7685 #logout:active:focus,
7685 #logout:active:focus,
7686 span#login_widget > .button.active:focus,
7686 span#login_widget > .button.active:focus,
7687 #logout.active:focus {
7687 #logout.active:focus {
7688 outline: thin dotted;
7688 outline: thin dotted;
7689 outline: 5px auto -webkit-focus-ring-color;
7689 outline: 5px auto -webkit-focus-ring-color;
7690 outline-offset: -2px;
7690 outline-offset: -2px;
7691 }
7691 }
7692 span#login_widget > .button:hover,
7692 span#login_widget > .button:hover,
7693 #logout:hover,
7693 #logout:hover,
7694 span#login_widget > .button:focus,
7694 span#login_widget > .button:focus,
7695 #logout:focus {
7695 #logout:focus {
7696 color: #333333;
7696 color: #333333;
7697 text-decoration: none;
7697 text-decoration: none;
7698 }
7698 }
7699 span#login_widget > .button:active,
7699 span#login_widget > .button:active,
7700 #logout:active,
7700 #logout:active,
7701 span#login_widget > .button.active,
7701 span#login_widget > .button.active,
7702 #logout.active {
7702 #logout.active {
7703 outline: 0;
7703 outline: 0;
7704 background-image: none;
7704 background-image: none;
7705 -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
7705 -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
7706 box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
7706 box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
7707 }
7707 }
7708 span#login_widget > .button.disabled,
7708 span#login_widget > .button.disabled,
7709 #logout.disabled,
7709 #logout.disabled,
7710 span#login_widget > .button[disabled],
7710 span#login_widget > .button[disabled],
7711 #logout[disabled],
7711 #logout[disabled],
7712 fieldset[disabled] span#login_widget > .button,
7712 fieldset[disabled] span#login_widget > .button,
7713 fieldset[disabled] #logout {
7713 fieldset[disabled] #logout {
7714 cursor: not-allowed;
7714 cursor: not-allowed;
7715 pointer-events: none;
7715 pointer-events: none;
7716 opacity: 0.65;
7716 opacity: 0.65;
7717 filter: alpha(opacity=65);
7717 filter: alpha(opacity=65);
7718 -webkit-box-shadow: none;
7718 -webkit-box-shadow: none;
7719 box-shadow: none;
7719 box-shadow: none;
7720 }
7720 }
7721 span#login_widget > .button:hover,
7721 span#login_widget > .button:hover,
7722 #logout:hover,
7722 #logout:hover,
7723 span#login_widget > .button:focus,
7723 span#login_widget > .button:focus,
7724 #logout:focus,
7724 #logout:focus,
7725 span#login_widget > .button:active,
7725 span#login_widget > .button:active,
7726 #logout:active,
7726 #logout:active,
7727 span#login_widget > .button.active,
7727 span#login_widget > .button.active,
7728 #logout.active,
7728 #logout.active,
7729 .open .dropdown-togglespan#login_widget > .button,
7729 .open .dropdown-togglespan#login_widget > .button,
7730 .open .dropdown-toggle#logout {
7730 .open .dropdown-toggle#logout {
7731 color: #333333;
7731 color: #333333;
7732 background-color: #ebebeb;
7732 background-color: #ebebeb;
7733 border-color: #adadad;
7733 border-color: #adadad;
7734 }
7734 }
7735 span#login_widget > .button:active,
7735 span#login_widget > .button:active,
7736 #logout:active,
7736 #logout:active,
7737 span#login_widget > .button.active,
7737 span#login_widget > .button.active,
7738 #logout.active,
7738 #logout.active,
7739 .open .dropdown-togglespan#login_widget > .button,
7739 .open .dropdown-togglespan#login_widget > .button,
7740 .open .dropdown-toggle#logout {
7740 .open .dropdown-toggle#logout {
7741 background-image: none;
7741 background-image: none;
7742 }
7742 }
7743 span#login_widget > .button.disabled,
7743 span#login_widget > .button.disabled,
7744 #logout.disabled,
7744 #logout.disabled,
7745 span#login_widget > .button[disabled],
7745 span#login_widget > .button[disabled],
7746 #logout[disabled],
7746 #logout[disabled],
7747 fieldset[disabled] span#login_widget > .button,
7747 fieldset[disabled] span#login_widget > .button,
7748 fieldset[disabled] #logout,
7748 fieldset[disabled] #logout,
7749 span#login_widget > .button.disabled:hover,
7749 span#login_widget > .button.disabled:hover,
7750 #logout.disabled:hover,
7750 #logout.disabled:hover,
7751 span#login_widget > .button[disabled]:hover,
7751 span#login_widget > .button[disabled]:hover,
7752 #logout[disabled]:hover,
7752 #logout[disabled]:hover,
7753 fieldset[disabled] span#login_widget > .button:hover,
7753 fieldset[disabled] span#login_widget > .button:hover,
7754 fieldset[disabled] #logout:hover,
7754 fieldset[disabled] #logout:hover,
7755 span#login_widget > .button.disabled:focus,
7755 span#login_widget > .button.disabled:focus,
7756 #logout.disabled:focus,
7756 #logout.disabled:focus,
7757 span#login_widget > .button[disabled]:focus,
7757 span#login_widget > .button[disabled]:focus,
7758 #logout[disabled]:focus,
7758 #logout[disabled]:focus,
7759 fieldset[disabled] span#login_widget > .button:focus,
7759 fieldset[disabled] span#login_widget > .button:focus,
7760 fieldset[disabled] #logout:focus,
7760 fieldset[disabled] #logout:focus,
7761 span#login_widget > .button.disabled:active,
7761 span#login_widget > .button.disabled:active,
7762 #logout.disabled:active,
7762 #logout.disabled:active,
7763 span#login_widget > .button[disabled]:active,
7763 span#login_widget > .button[disabled]:active,
7764 #logout[disabled]:active,
7764 #logout[disabled]:active,
7765 fieldset[disabled] span#login_widget > .button:active,
7765 fieldset[disabled] span#login_widget > .button:active,
7766 fieldset[disabled] #logout:active,
7766 fieldset[disabled] #logout:active,
7767 span#login_widget > .button.disabled.active,
7767 span#login_widget > .button.disabled.active,
7768 #logout.disabled.active,
7768 #logout.disabled.active,
7769 span#login_widget > .button[disabled].active,
7769 span#login_widget > .button[disabled].active,
7770 #logout[disabled].active,
7770 #logout[disabled].active,
7771 fieldset[disabled] span#login_widget > .button.active,
7771 fieldset[disabled] span#login_widget > .button.active,
7772 fieldset[disabled] #logout.active {
7772 fieldset[disabled] #logout.active {
7773 background-color: #ffffff;
7773 background-color: #ffffff;
7774 border-color: #cccccc;
7774 border-color: #cccccc;
7775 }
7775 }
7776 span#login_widget > .button .badge,
7776 span#login_widget > .button .badge,
7777 #logout .badge {
7777 #logout .badge {
7778 color: #ffffff;
7778 color: #ffffff;
7779 background-color: #333333;
7779 background-color: #333333;
7780 }
7780 }
7781 .nav-header {
7781 .nav-header {
7782 text-transform: none;
7782 text-transform: none;
7783 }
7783 }
7784 #header > span {
7784 #header > span {
7785 margin-top: 10px;
7785 margin-top: 10px;
7786 }
7786 }
7787 .modal_stretch .modal-dialog {
7787 .modal_stretch .modal-dialog {
7788 /* Old browsers */
7788 /* Old browsers */
7789 display: -webkit-box;
7789 display: -webkit-box;
7790 -webkit-box-orient: vertical;
7790 -webkit-box-orient: vertical;
7791 -webkit-box-align: stretch;
7791 -webkit-box-align: stretch;
7792 display: -moz-box;
7792 display: -moz-box;
7793 -moz-box-orient: vertical;
7793 -moz-box-orient: vertical;
7794 -moz-box-align: stretch;
7794 -moz-box-align: stretch;
7795 display: box;
7795 display: box;
7796 box-orient: vertical;
7796 box-orient: vertical;
7797 box-align: stretch;
7797 box-align: stretch;
7798 /* Modern browsers */
7798 /* Modern browsers */
7799 display: flex;
7799 display: flex;
7800 flex-direction: column;
7800 flex-direction: column;
7801 align-items: stretch;
7801 align-items: stretch;
7802 /* Old browsers */
7802 /* Old browsers */
7803 -webkit-box-flex: 0;
7803 -webkit-box-flex: 0;
7804 -moz-box-flex: 0;
7804 -moz-box-flex: 0;
7805 box-flex: 0;
7805 box-flex: 0;
7806 /* Modern browsers */
7806 /* Modern browsers */
7807 flex: none;
7807 flex: none;
7808 min-height: 80%;
7808 min-height: 80%;
7809 }
7809 }
7810 .modal_stretch .modal-dialog .modal-body {
7810 .modal_stretch .modal-dialog .modal-body {
7811 max-height: none;
7811 max-height: none;
7812 flex: 1;
7812 flex: 1;
7813 }
7813 }
7814 @media (min-width: 768px) {
7814 @media (min-width: 768px) {
7815 .modal .modal-dialog {
7815 .modal .modal-dialog {
7816 width: 700px;
7816 width: 700px;
7817 }
7817 }
7818 }
7818 }
7819 /*!
7819 /*!
7820 *
7820 *
7821 * IPython auth
7821 * IPython auth
7822 *
7822 *
7823 */
7823 */
7824 .center-nav {
7824 .center-nav {
7825 display: inline-block;
7825 display: inline-block;
7826 margin-bottom: -4px;
7826 margin-bottom: -4px;
7827 }
7827 }
7828 /*!
7828 /*!
7829 *
7829 *
7830 * IPython tree view
7830 * IPython tree view
7831 *
7831 *
7832 */
7832 */
7833 /* We need an invisible input field on top of the sentense*/
7833 /* We need an invisible input field on top of the sentense*/
7834 /* "Drag file onto the list ..." */
7834 /* "Drag file onto the list ..." */
7835 .alternate_upload {
7835 .alternate_upload {
7836 background-color: none;
7836 background-color: none;
7837 display: inline;
7837 display: inline;
7838 }
7838 }
7839 .alternate_upload.form {
7839 .alternate_upload.form {
7840 padding: 0;
7840 padding: 0;
7841 margin: 0;
7841 margin: 0;
7842 }
7842 }
7843 .alternate_upload input.fileinput {
7843 .alternate_upload input.fileinput {
7844 background-color: red;
7844 background-color: red;
7845 position: relative;
7845 position: relative;
7846 opacity: 0;
7846 opacity: 0;
7847 z-index: 2;
7847 z-index: 2;
7848 width: 295px;
7848 width: 295px;
7849 margin-left: 163px;
7849 margin-left: 163px;
7850 cursor: pointer;
7850 cursor: pointer;
7851 height: 26px;
7851 height: 26px;
7852 }
7852 }
7853 /**
7853 /**
7854 * Primary styles
7854 * Primary styles
7855 *
7855 *
7856 * Author: IPython Development Team
7856 * Author: IPython Development Team
7857 */
7857 */
7858 ul#tabs {
7858 ul#tabs {
7859 margin-bottom: 4px;
7859 margin-bottom: 4px;
7860 }
7860 }
7861 ul#tabs a {
7861 ul#tabs a {
7862 padding-top: 6px;
7862 padding-top: 6px;
7863 padding-bottom: 4px;
7863 padding-bottom: 4px;
7864 }
7864 }
7865 ul.breadcrumb a:focus,
7865 ul.breadcrumb a:focus,
7866 ul.breadcrumb a:hover {
7866 ul.breadcrumb a:hover {
7867 text-decoration: none;
7867 text-decoration: none;
7868 }
7868 }
7869 ul.breadcrumb i.icon-home {
7869 ul.breadcrumb i.icon-home {
7870 font-size: 16px;
7870 font-size: 16px;
7871 margin-right: 4px;
7871 margin-right: 4px;
7872 }
7872 }
7873 ul.breadcrumb span {
7873 ul.breadcrumb span {
7874 color: #5e5e5e;
7874 color: #5e5e5e;
7875 }
7875 }
7876 .list_toolbar {
7876 .list_toolbar {
7877 padding: 4px 0 4px 0;
7877 padding: 4px 0 4px 0;
7878 vertical-align: middle;
7878 vertical-align: middle;
7879 }
7879 }
7880 .list_toolbar .tree-buttons {
7880 .list_toolbar .tree-buttons {
7881 padding-top: 2px;
7881 padding-top: 2px;
7882 }
7882 }
7883 .list_toolbar [class*="span"] {
7883 .list_toolbar [class*="span"] {
7884 min-height: 24px;
7884 min-height: 24px;
7885 }
7885 }
7886 .list_header {
7886 .list_header {
7887 font-weight: bold;
7887 font-weight: bold;
7888 }
7888 }
7889 .list_container {
7889 .list_container {
7890 margin-top: 4px;
7890 margin-top: 4px;
7891 margin-bottom: 20px;
7891 margin-bottom: 20px;
7892 border: 1px solid #ababab;
7892 border: 1px solid #ababab;
7893 border-radius: 4px;
7893 border-radius: 4px;
7894 }
7894 }
7895 .list_container > div {
7895 .list_container > div {
7896 border-bottom: 1px solid #ababab;
7896 border-bottom: 1px solid #ababab;
7897 }
7897 }
7898 .list_container > div:hover .list-item {
7898 .list_container > div:hover .list-item {
7899 background-color: red;
7899 background-color: red;
7900 }
7900 }
7901 .list_container > div:last-child {
7901 .list_container > div:last-child {
7902 border: none;
7902 border: none;
7903 }
7903 }
7904 .list_item:hover .list_item {
7904 .list_item:hover .list_item {
7905 background-color: #ddd;
7905 background-color: #ddd;
7906 }
7906 }
7907 .list_item a {
7907 .list_item a {
7908 text-decoration: none;
7908 text-decoration: none;
7909 }
7909 }
7910 .action_col {
7910 .action_col {
7911 text-align: right;
7911 text-align: right;
7912 }
7912 }
7913 .list_header > div,
7913 .list_header > div,
7914 .list_item > div {
7914 .list_item > div {
7915 padding-top: 4px;
7915 padding-top: 4px;
7916 padding-bottom: 4px;
7916 padding-bottom: 4px;
7917 padding-left: 7px;
7917 padding-left: 7px;
7918 padding-right: 7px;
7918 padding-right: 7px;
7919 line-height: 22px;
7919 line-height: 22px;
7920 }
7920 }
7921 .item_name {
7921 .item_name {
7922 line-height: 22px;
7922 line-height: 22px;
7923 height: 24px;
7923 height: 24px;
7924 }
7924 }
7925 .item_icon {
7925 .item_icon {
7926 font-size: 14px;
7926 font-size: 14px;
7927 color: #5e5e5e;
7927 color: #5e5e5e;
7928 margin-right: 7px;
7928 margin-right: 7px;
7929 }
7929 }
7930 .item_buttons {
7930 .item_buttons {
7931 line-height: 1em;
7931 line-height: 1em;
7932 }
7932 }
7933 .toolbar_info {
7933 .toolbar_info {
7934 height: 24px;
7934 height: 24px;
7935 line-height: 24px;
7935 line-height: 24px;
7936 }
7936 }
7937 input.nbname_input,
7937 input.nbname_input,
7938 input.engine_num_input {
7938 input.engine_num_input {
7939 padding-top: 3px;
7939 padding-top: 3px;
7940 padding-bottom: 3px;
7940 padding-bottom: 3px;
7941 height: 22px;
7941 height: 22px;
7942 line-height: 14px;
7942 line-height: 14px;
7943 margin: 0px;
7943 margin: 0px;
7944 }
7944 }
7945 input.engine_num_input {
7945 input.engine_num_input {
7946 width: 60px;
7946 width: 60px;
7947 }
7947 }
7948 .highlight_text {
7948 .highlight_text {
7949 color: blue;
7949 color: blue;
7950 }
7950 }
7951 #project_name > .breadcrumb {
7951 #project_name > .breadcrumb {
7952 padding: 0px;
7952 padding: 0px;
7953 margin-bottom: 0px;
7953 margin-bottom: 0px;
7954 background-color: transparent;
7954 background-color: transparent;
7955 font-weight: bold;
7955 font-weight: bold;
7956 }
7956 }
7957 .tab-content .row {
7957 .tab-content .row {
7958 margin-left: 0px;
7958 margin-left: 0px;
7959 margin-right: 0px;
7959 margin-right: 0px;
7960 }
7960 }
7961 .folder_icon:before {
7961 .folder_icon:before {
7962 display: inline-block;
7962 display: inline-block;
7963 font-family: FontAwesome;
7963 font-family: FontAwesome;
7964 font-style: normal;
7964 font-style: normal;
7965 font-weight: normal;
7965 font-weight: normal;
7966 line-height: 1;
7966 line-height: 1;
7967 -webkit-font-smoothing: antialiased;
7967 -webkit-font-smoothing: antialiased;
7968 -moz-osx-font-smoothing: grayscale;
7968 -moz-osx-font-smoothing: grayscale;
7969 content: "\f114";
7969 content: "\f114";
7970 }
7970 }
7971 .folder_icon:before.pull-left {
7971 .folder_icon:before.pull-left {
7972 margin-right: .3em;
7972 margin-right: .3em;
7973 }
7973 }
7974 .folder_icon:before.pull-right {
7974 .folder_icon:before.pull-right {
7975 margin-left: .3em;
7975 margin-left: .3em;
7976 }
7976 }
7977 .notebook_icon:before {
7977 .notebook_icon:before {
7978 display: inline-block;
7978 display: inline-block;
7979 font-family: FontAwesome;
7979 font-family: FontAwesome;
7980 font-style: normal;
7980 font-style: normal;
7981 font-weight: normal;
7981 font-weight: normal;
7982 line-height: 1;
7982 line-height: 1;
7983 -webkit-font-smoothing: antialiased;
7983 -webkit-font-smoothing: antialiased;
7984 -moz-osx-font-smoothing: grayscale;
7984 -moz-osx-font-smoothing: grayscale;
7985 content: "\f02d";
7985 content: "\f02d";
7986 }
7986 }
7987 .notebook_icon:before.pull-left {
7987 .notebook_icon:before.pull-left {
7988 margin-right: .3em;
7988 margin-right: .3em;
7989 }
7989 }
7990 .notebook_icon:before.pull-right {
7990 .notebook_icon:before.pull-right {
7991 margin-left: .3em;
7991 margin-left: .3em;
7992 }
7992 }
7993 .file_icon:before {
7993 .file_icon:before {
7994 display: inline-block;
7994 display: inline-block;
7995 font-family: FontAwesome;
7995 font-family: FontAwesome;
7996 font-style: normal;
7996 font-style: normal;
7997 font-weight: normal;
7997 font-weight: normal;
7998 line-height: 1;
7998 line-height: 1;
7999 -webkit-font-smoothing: antialiased;
7999 -webkit-font-smoothing: antialiased;
8000 -moz-osx-font-smoothing: grayscale;
8000 -moz-osx-font-smoothing: grayscale;
8001 content: "\f016";
8001 content: "\f016";
8002 }
8002 }
8003 .file_icon:before.pull-left {
8003 .file_icon:before.pull-left {
8004 margin-right: .3em;
8004 margin-right: .3em;
8005 }
8005 }
8006 .file_icon:before.pull-right {
8006 .file_icon:before.pull-right {
8007 margin-left: .3em;
8007 margin-left: .3em;
8008 }
8008 }
8009 /*!
8009 /*!
8010 *
8010 *
8011 * IPython notebook
8011 * IPython notebook
8012 *
8012 *
8013 */
8013 */
8014 /* CSS font colors for translated ANSI colors. */
8014 /* CSS font colors for translated ANSI colors. */
8015 .ansibold {
8015 .ansibold {
8016 font-weight: bold;
8016 font-weight: bold;
8017 }
8017 }
8018 /* use dark versions for foreground, to improve visibility */
8018 /* use dark versions for foreground, to improve visibility */
8019 .ansiblack {
8019 .ansiblack {
8020 color: black;
8020 color: black;
8021 }
8021 }
8022 .ansired {
8022 .ansired {
8023 color: darkred;
8023 color: darkred;
8024 }
8024 }
8025 .ansigreen {
8025 .ansigreen {
8026 color: darkgreen;
8026 color: darkgreen;
8027 }
8027 }
8028 .ansiyellow {
8028 .ansiyellow {
8029 color: brown;
8029 color: brown;
8030 }
8030 }
8031 .ansiblue {
8031 .ansiblue {
8032 color: darkblue;
8032 color: darkblue;
8033 }
8033 }
8034 .ansipurple {
8034 .ansipurple {
8035 color: darkviolet;
8035 color: darkviolet;
8036 }
8036 }
8037 .ansicyan {
8037 .ansicyan {
8038 color: steelblue;
8038 color: steelblue;
8039 }
8039 }
8040 .ansigray {
8040 .ansigray {
8041 color: gray;
8041 color: gray;
8042 }
8042 }
8043 /* and light for background, for the same reason */
8043 /* and light for background, for the same reason */
8044 .ansibgblack {
8044 .ansibgblack {
8045 background-color: black;
8045 background-color: black;
8046 }
8046 }
8047 .ansibgred {
8047 .ansibgred {
8048 background-color: red;
8048 background-color: red;
8049 }
8049 }
8050 .ansibggreen {
8050 .ansibggreen {
8051 background-color: green;
8051 background-color: green;
8052 }
8052 }
8053 .ansibgyellow {
8053 .ansibgyellow {
8054 background-color: yellow;
8054 background-color: yellow;
8055 }
8055 }
8056 .ansibgblue {
8056 .ansibgblue {
8057 background-color: blue;
8057 background-color: blue;
8058 }
8058 }
8059 .ansibgpurple {
8059 .ansibgpurple {
8060 background-color: magenta;
8060 background-color: magenta;
8061 }
8061 }
8062 .ansibgcyan {
8062 .ansibgcyan {
8063 background-color: cyan;
8063 background-color: cyan;
8064 }
8064 }
8065 .ansibggray {
8065 .ansibggray {
8066 background-color: gray;
8066 background-color: gray;
8067 }
8067 }
8068 div.cell {
8068 div.cell {
8069 border: 1px solid transparent;
8069 border: 1px solid transparent;
8070 /* Old browsers */
8070 /* Old browsers */
8071 display: -webkit-box;
8071 display: -webkit-box;
8072 -webkit-box-orient: vertical;
8072 -webkit-box-orient: vertical;
8073 -webkit-box-align: stretch;
8073 -webkit-box-align: stretch;
8074 display: -moz-box;
8074 display: -moz-box;
8075 -moz-box-orient: vertical;
8075 -moz-box-orient: vertical;
8076 -moz-box-align: stretch;
8076 -moz-box-align: stretch;
8077 display: box;
8077 display: box;
8078 box-orient: vertical;
8078 box-orient: vertical;
8079 box-align: stretch;
8079 box-align: stretch;
8080 /* Modern browsers */
8080 /* Modern browsers */
8081 display: flex;
8081 display: flex;
8082 flex-direction: column;
8082 flex-direction: column;
8083 align-items: stretch;
8083 align-items: stretch;
8084 /* Old browsers */
8084 /* Old browsers */
8085 -webkit-box-flex: 0;
8085 -webkit-box-flex: 0;
8086 -moz-box-flex: 0;
8086 -moz-box-flex: 0;
8087 box-flex: 0;
8087 box-flex: 0;
8088 /* Modern browsers */
8088 /* Modern browsers */
8089 flex: none;
8089 flex: none;
8090 border-radius: 4px;
8090 border-radius: 4px;
8091 box-sizing: border-box;
8091 box-sizing: border-box;
8092 -moz-box-sizing: border-box;
8092 -moz-box-sizing: border-box;
8093 -webkit-box-sizing: border-box;
8093 -webkit-box-sizing: border-box;
8094 border-width: thin;
8094 border-width: thin;
8095 border-style: solid;
8095 border-style: solid;
8096 width: 100%;
8096 width: 100%;
8097 padding: 5px 5px 5px 0px;
8097 padding: 5px 5px 5px 0px;
8098 /* This acts as a spacer between cells, that is outside the border */
8098 /* This acts as a spacer between cells, that is outside the border */
8099 margin: 0px;
8099 margin: 0px;
8100 outline: none;
8100 outline: none;
8101 }
8101 }
8102 div.cell.selected {
8102 div.cell.selected {
8103 border-color: #ababab;
8103 border-color: #ababab;
8104 }
8104 }
8105 div.cell.edit_mode {
8105 div.cell.edit_mode {
8106 border-color: green;
8106 border-color: green;
8107 }
8107 }
8108 div.prompt {
8108 div.prompt {
8109 /* This needs to be wide enough for 3 digit prompt numbers: In[100]: */
8109 /* This needs to be wide enough for 3 digit prompt numbers: In[100]: */
8110 min-width: 15ex;
8110 min-width: 15ex;
8111 /* This padding is tuned to match the padding on the CodeMirror editor. */
8111 /* This padding is tuned to match the padding on the CodeMirror editor. */
8112 padding: 0.4em;
8112 padding: 0.4em;
8113 margin: 0px;
8113 margin: 0px;
8114 font-family: monospace;
8114 font-family: monospace;
8115 text-align: right;
8115 text-align: right;
8116 /* This has to match that of the the CodeMirror class line-height below */
8116 /* This has to match that of the the CodeMirror class line-height below */
8117 line-height: 1.21429em;
8117 line-height: 1.21429em;
8118 }
8118 }
8119 @media (max-width: 480px) {
8119 @media (max-width: 480px) {
8120 div.prompt {
8120 div.prompt {
8121 text-align: left;
8121 text-align: left;
8122 }
8122 }
8123 }
8123 }
8124 div.inner_cell {
8124 div.inner_cell {
8125 /* Old browsers */
8125 /* Old browsers */
8126 display: -webkit-box;
8126 display: -webkit-box;
8127 -webkit-box-orient: vertical;
8127 -webkit-box-orient: vertical;
8128 -webkit-box-align: stretch;
8128 -webkit-box-align: stretch;
8129 display: -moz-box;
8129 display: -moz-box;
8130 -moz-box-orient: vertical;
8130 -moz-box-orient: vertical;
8131 -moz-box-align: stretch;
8131 -moz-box-align: stretch;
8132 display: box;
8132 display: box;
8133 box-orient: vertical;
8133 box-orient: vertical;
8134 box-align: stretch;
8134 box-align: stretch;
8135 /* Modern browsers */
8135 /* Modern browsers */
8136 display: flex;
8136 display: flex;
8137 flex-direction: column;
8137 flex-direction: column;
8138 align-items: stretch;
8138 align-items: stretch;
8139 /* Old browsers */
8139 /* Old browsers */
8140 -webkit-box-flex: 0;
8140 -webkit-box-flex: 0;
8141 -moz-box-flex: 0;
8141 -moz-box-flex: 0;
8142 box-flex: 0;
8142 box-flex: 0;
8143 /* Modern browsers */
8143 /* Modern browsers */
8144 flex: none;
8144 flex: none;
8145 /* Old browsers */
8145 /* Old browsers */
8146 -webkit-box-flex: 1;
8146 -webkit-box-flex: 1;
8147 -moz-box-flex: 1;
8147 -moz-box-flex: 1;
8148 box-flex: 1;
8148 box-flex: 1;
8149 /* Modern browsers */
8149 /* Modern browsers */
8150 flex: 1;
8150 flex: 1;
8151 }
8151 }
8152 /* input_area and input_prompt must match in top border and margin for alignment */
8152 /* input_area and input_prompt must match in top border and margin for alignment */
8153 div.input_area {
8153 div.input_area {
8154 border: 1px solid #cfcfcf;
8154 border: 1px solid #cfcfcf;
8155 border-radius: 4px;
8155 border-radius: 4px;
8156 background: #f7f7f7;
8156 background: #f7f7f7;
8157 line-height: 1.21429em;
8157 line-height: 1.21429em;
8158 }
8158 }
8159 /* This is needed so that empty prompt areas can collapse to zero height when there
8159 /* This is needed so that empty prompt areas can collapse to zero height when there
8160 is no content in the output_subarea and the prompt. The main purpose of this is
8160 is no content in the output_subarea and the prompt. The main purpose of this is
8161 to make sure that empty JavaScript output_subareas have no height. */
8161 to make sure that empty JavaScript output_subareas have no height. */
8162 div.prompt:empty {
8162 div.prompt:empty {
8163 padding-top: 0;
8163 padding-top: 0;
8164 padding-bottom: 0;
8164 padding-bottom: 0;
8165 }
8165 }
8166 /* any special styling for code cells that are currently running goes here */
8166 /* any special styling for code cells that are currently running goes here */
8167 div.input {
8167 div.input {
8168 page-break-inside: avoid;
8168 page-break-inside: avoid;
8169 /* Old browsers */
8169 /* Old browsers */
8170 display: -webkit-box;
8170 display: -webkit-box;
8171 -webkit-box-orient: horizontal;
8171 -webkit-box-orient: horizontal;
8172 -webkit-box-align: stretch;
8172 -webkit-box-align: stretch;
8173 display: -moz-box;
8173 display: -moz-box;
8174 -moz-box-orient: horizontal;
8174 -moz-box-orient: horizontal;
8175 -moz-box-align: stretch;
8175 -moz-box-align: stretch;
8176 display: box;
8176 display: box;
8177 box-orient: horizontal;
8177 box-orient: horizontal;
8178 box-align: stretch;
8178 box-align: stretch;
8179 /* Modern browsers */
8179 /* Modern browsers */
8180 display: flex;
8180 display: flex;
8181 flex-direction: row;
8181 flex-direction: row;
8182 align-items: stretch;
8182 align-items: stretch;
8183 /* Old browsers */
8183 /* Old browsers */
8184 -webkit-box-flex: 0;
8184 -webkit-box-flex: 0;
8185 -moz-box-flex: 0;
8185 -moz-box-flex: 0;
8186 box-flex: 0;
8186 box-flex: 0;
8187 /* Modern browsers */
8187 /* Modern browsers */
8188 flex: none;
8188 flex: none;
8189 }
8189 }
8190 @media (max-width: 480px) {
8190 @media (max-width: 480px) {
8191 div.input {
8191 div.input {
8192 /* Old browsers */
8192 /* Old browsers */
8193 display: -webkit-box;
8193 display: -webkit-box;
8194 -webkit-box-orient: vertical;
8194 -webkit-box-orient: vertical;
8195 -webkit-box-align: stretch;
8195 -webkit-box-align: stretch;
8196 display: -moz-box;
8196 display: -moz-box;
8197 -moz-box-orient: vertical;
8197 -moz-box-orient: vertical;
8198 -moz-box-align: stretch;
8198 -moz-box-align: stretch;
8199 display: box;
8199 display: box;
8200 box-orient: vertical;
8200 box-orient: vertical;
8201 box-align: stretch;
8201 box-align: stretch;
8202 /* Modern browsers */
8202 /* Modern browsers */
8203 display: flex;
8203 display: flex;
8204 flex-direction: column;
8204 flex-direction: column;
8205 align-items: stretch;
8205 align-items: stretch;
8206 /* Old browsers */
8206 /* Old browsers */
8207 -webkit-box-flex: 0;
8207 -webkit-box-flex: 0;
8208 -moz-box-flex: 0;
8208 -moz-box-flex: 0;
8209 box-flex: 0;
8209 box-flex: 0;
8210 /* Modern browsers */
8210 /* Modern browsers */
8211 flex: none;
8211 flex: none;
8212 }
8212 }
8213 }
8213 }
8214 /* input_area and input_prompt must match in top border and margin for alignment */
8214 /* input_area and input_prompt must match in top border and margin for alignment */
8215 div.input_prompt {
8215 div.input_prompt {
8216 color: #000080;
8216 color: #000080;
8217 border-top: 1px solid transparent;
8217 border-top: 1px solid transparent;
8218 }
8218 }
8219 div.input_area > div.highlight {
8219 div.input_area > div.highlight {
8220 margin: 0.4em;
8220 margin: 0.4em;
8221 border: none;
8221 border: none;
8222 padding: 0px;
8222 padding: 0px;
8223 background-color: transparent;
8223 background-color: transparent;
8224 }
8224 }
8225 div.input_area > div.highlight > pre {
8225 div.input_area > div.highlight > pre {
8226 margin: 0px;
8226 margin: 0px;
8227 border: none;
8227 border: none;
8228 padding: 0px;
8228 padding: 0px;
8229 background-color: transparent;
8229 background-color: transparent;
8230 }
8230 }
8231 /* The following gets added to the <head> if it is detected that the user has a
8231 /* The following gets added to the <head> if it is detected that the user has a
8232 * monospace font with inconsistent normal/bold/italic height. See
8232 * monospace font with inconsistent normal/bold/italic height. See
8233 * notebookmain.js. Such fonts will have keywords vertically offset with
8233 * notebookmain.js. Such fonts will have keywords vertically offset with
8234 * respect to the rest of the text. The user should select a better font.
8234 * respect to the rest of the text. The user should select a better font.
8235 * See: https://github.com/ipython/ipython/issues/1503
8235 * See: https://github.com/ipython/ipython/issues/1503
8236 *
8236 *
8237 * .CodeMirror span {
8237 * .CodeMirror span {
8238 * vertical-align: bottom;
8238 * vertical-align: bottom;
8239 * }
8239 * }
8240 */
8240 */
8241 .CodeMirror {
8241 .CodeMirror {
8242 line-height: 1.21429em;
8242 line-height: 1.21429em;
8243 /* Changed from 1em to our global default */
8243 /* Changed from 1em to our global default */
8244 height: auto;
8244 height: auto;
8245 /* Changed to auto to autogrow */
8245 /* Changed to auto to autogrow */
8246 background: none;
8246 background: none;
8247 /* Changed from white to allow our bg to show through */
8247 /* Changed from white to allow our bg to show through */
8248 }
8248 }
8249 .CodeMirror-scroll {
8249 .CodeMirror-scroll {
8250 /* The CodeMirror docs are a bit fuzzy on if overflow-y should be hidden or visible.*/
8250 /* The CodeMirror docs are a bit fuzzy on if overflow-y should be hidden or visible.*/
8251 /* We have found that if it is visible, vertical scrollbars appear with font size changes.*/
8251 /* We have found that if it is visible, vertical scrollbars appear with font size changes.*/
8252 overflow-y: hidden;
8252 overflow-y: hidden;
8253 overflow-x: auto;
8253 overflow-x: auto;
8254 }
8254 }
8255 .CodeMirror-lines {
8255 .CodeMirror-lines {
8256 /* In CM2, this used to be 0.4em, but in CM3 it went to 4px. We need the em value because */
8256 /* In CM2, this used to be 0.4em, but in CM3 it went to 4px. We need the em value because */
8257 /* we have set a different line-height and want this to scale with that. */
8257 /* we have set a different line-height and want this to scale with that. */
8258 padding: 0.4em;
8258 padding: 0.4em;
8259 }
8259 }
8260 .CodeMirror-linenumber {
8260 .CodeMirror-linenumber {
8261 padding: 0 8px 0 4px;
8261 padding: 0 8px 0 4px;
8262 }
8262 }
8263 .CodeMirror-gutters {
8263 .CodeMirror-gutters {
8264 border-bottom-left-radius: 4px;
8264 border-bottom-left-radius: 4px;
8265 border-top-left-radius: 4px;
8265 border-top-left-radius: 4px;
8266 }
8266 }
8267 .CodeMirror pre {
8267 .CodeMirror pre {
8268 /* In CM3 this went to 4px from 0 in CM2. We need the 0 value because of how we size */
8268 /* In CM3 this went to 4px from 0 in CM2. We need the 0 value because of how we size */
8269 /* .CodeMirror-lines */
8269 /* .CodeMirror-lines */
8270 padding: 0;
8270 padding: 0;
8271 border: 0;
8271 border: 0;
8272 border-radius: 0;
8272 border-radius: 0;
8273 }
8273 }
8274 .CodeMirror-vscrollbar,
8274 .CodeMirror-vscrollbar,
8275 .CodeMirror-hscrollbar {
8275 .CodeMirror-hscrollbar {
8276 display: none !important;
8276 display: none !important;
8277 }
8277 }
8278 /*
8278 /*
8279
8279
8280 Original style from softwaremaniacs.org (c) Ivan Sagalaev <Maniac@SoftwareManiacs.Org>
8280 Original style from softwaremaniacs.org (c) Ivan Sagalaev <Maniac@SoftwareManiacs.Org>
8281 Adapted from GitHub theme
8281 Adapted from GitHub theme
8282
8282
8283 */
8283 */
8284 pre code {
8284 pre code {
8285 display: block;
8285 display: block;
8286 padding: 0.5em;
8286 padding: 0.5em;
8287 }
8287 }
8288 .highlight-base,
8288 .highlight-base,
8289 pre code,
8289 pre code,
8290 pre .subst,
8290 pre .subst,
8291 pre .tag .title,
8291 pre .tag .title,
8292 pre .lisp .title,
8292 pre .lisp .title,
8293 pre .clojure .built_in,
8293 pre .clojure .built_in,
8294 pre .nginx .title {
8294 pre .nginx .title {
8295 color: black;
8295 color: black;
8296 }
8296 }
8297 .highlight-string,
8297 .highlight-string,
8298 pre .string,
8298 pre .string,
8299 pre .constant,
8299 pre .constant,
8300 pre .parent,
8300 pre .parent,
8301 pre .tag .value,
8301 pre .tag .value,
8302 pre .rules .value,
8302 pre .rules .value,
8303 pre .rules .value .number,
8303 pre .rules .value .number,
8304 pre .preprocessor,
8304 pre .preprocessor,
8305 pre .ruby .symbol,
8305 pre .ruby .symbol,
8306 pre .ruby .symbol .string,
8306 pre .ruby .symbol .string,
8307 pre .aggregate,
8307 pre .aggregate,
8308 pre .template_tag,
8308 pre .template_tag,
8309 pre .django .variable,
8309 pre .django .variable,
8310 pre .smalltalk .class,
8310 pre .smalltalk .class,
8311 pre .addition,
8311 pre .addition,
8312 pre .flow,
8312 pre .flow,
8313 pre .stream,
8313 pre .stream,
8314 pre .bash .variable,
8314 pre .bash .variable,
8315 pre .apache .tag,
8315 pre .apache .tag,
8316 pre .apache .cbracket,
8316 pre .apache .cbracket,
8317 pre .tex .command,
8317 pre .tex .command,
8318 pre .tex .special,
8318 pre .tex .special,
8319 pre .erlang_repl .function_or_atom,
8319 pre .erlang_repl .function_or_atom,
8320 pre .markdown .header {
8320 pre .markdown .header {
8321 color: #BA2121;
8321 color: #BA2121;
8322 }
8322 }
8323 .highlight-comment,
8323 .highlight-comment,
8324 pre .comment,
8324 pre .comment,
8325 pre .annotation,
8325 pre .annotation,
8326 pre .template_comment,
8326 pre .template_comment,
8327 pre .diff .header,
8327 pre .diff .header,
8328 pre .chunk,
8328 pre .chunk,
8329 pre .markdown .blockquote {
8329 pre .markdown .blockquote {
8330 color: #408080;
8330 color: #408080;
8331 font-style: italic;
8331 font-style: italic;
8332 }
8332 }
8333 .highlight-number,
8333 .highlight-number,
8334 pre .number,
8334 pre .number,
8335 pre .date,
8335 pre .date,
8336 pre .regexp,
8336 pre .regexp,
8337 pre .literal,
8337 pre .literal,
8338 pre .smalltalk .symbol,
8338 pre .smalltalk .symbol,
8339 pre .smalltalk .char,
8339 pre .smalltalk .char,
8340 pre .go .constant,
8340 pre .go .constant,
8341 pre .change,
8341 pre .change,
8342 pre .markdown .bullet,
8342 pre .markdown .bullet,
8343 pre .markdown .link_url {
8343 pre .markdown .link_url {
8344 color: #080;
8344 color: #080;
8345 }
8345 }
8346 pre .label,
8346 pre .label,
8347 pre .javadoc,
8347 pre .javadoc,
8348 pre .ruby .string,
8348 pre .ruby .string,
8349 pre .decorator,
8349 pre .decorator,
8350 pre .filter .argument,
8350 pre .filter .argument,
8351 pre .localvars,
8351 pre .localvars,
8352 pre .array,
8352 pre .array,
8353 pre .attr_selector,
8353 pre .attr_selector,
8354 pre .important,
8354 pre .important,
8355 pre .pseudo,
8355 pre .pseudo,
8356 pre .pi,
8356 pre .pi,
8357 pre .doctype,
8357 pre .doctype,
8358 pre .deletion,
8358 pre .deletion,
8359 pre .envvar,
8359 pre .envvar,
8360 pre .shebang,
8360 pre .shebang,
8361 pre .apache .sqbracket,
8361 pre .apache .sqbracket,
8362 pre .nginx .built_in,
8362 pre .nginx .built_in,
8363 pre .tex .formula,
8363 pre .tex .formula,
8364 pre .erlang_repl .reserved,
8364 pre .erlang_repl .reserved,
8365 pre .prompt,
8365 pre .prompt,
8366 pre .markdown .link_label,
8366 pre .markdown .link_label,
8367 pre .vhdl .attribute,
8367 pre .vhdl .attribute,
8368 pre .clojure .attribute,
8368 pre .clojure .attribute,
8369 pre .coffeescript .property {
8369 pre .coffeescript .property {
8370 color: #8888ff;
8370 color: #8888ff;
8371 }
8371 }
8372 .highlight-keyword,
8372 .highlight-keyword,
8373 pre .keyword,
8373 pre .keyword,
8374 pre .id,
8374 pre .id,
8375 pre .phpdoc,
8375 pre .phpdoc,
8376 pre .aggregate,
8376 pre .aggregate,
8377 pre .css .tag,
8377 pre .css .tag,
8378 pre .javadoctag,
8378 pre .javadoctag,
8379 pre .phpdoc,
8379 pre .phpdoc,
8380 pre .yardoctag,
8380 pre .yardoctag,
8381 pre .smalltalk .class,
8381 pre .smalltalk .class,
8382 pre .winutils,
8382 pre .winutils,
8383 pre .bash .variable,
8383 pre .bash .variable,
8384 pre .apache .tag,
8384 pre .apache .tag,
8385 pre .go .typename,
8385 pre .go .typename,
8386 pre .tex .command,
8386 pre .tex .command,
8387 pre .markdown .strong,
8387 pre .markdown .strong,
8388 pre .request,
8388 pre .request,
8389 pre .status {
8389 pre .status {
8390 color: #008000;
8390 color: #008000;
8391 font-weight: bold;
8391 font-weight: bold;
8392 }
8392 }
8393 .highlight-builtin,
8393 .highlight-builtin,
8394 pre .built_in {
8394 pre .built_in {
8395 color: #008000;
8395 color: #008000;
8396 }
8396 }
8397 pre .markdown .emphasis {
8397 pre .markdown .emphasis {
8398 font-style: italic;
8398 font-style: italic;
8399 }
8399 }
8400 pre .nginx .built_in {
8400 pre .nginx .built_in {
8401 font-weight: normal;
8401 font-weight: normal;
8402 }
8402 }
8403 pre .coffeescript .javascript,
8403 pre .coffeescript .javascript,
8404 pre .javascript .xml,
8404 pre .javascript .xml,
8405 pre .tex .formula,
8405 pre .tex .formula,
8406 pre .xml .javascript,
8406 pre .xml .javascript,
8407 pre .xml .vbscript,
8407 pre .xml .vbscript,
8408 pre .xml .css,
8408 pre .xml .css,
8409 pre .xml .cdata {
8409 pre .xml .cdata {
8410 opacity: 0.5;
8410 opacity: 0.5;
8411 }
8411 }
8412 /* apply the same style to codemirror */
8412 /* apply the same style to codemirror */
8413 .cm-s-ipython span.cm-variable {
8413 .cm-s-ipython span.cm-variable {
8414 color: black;
8414 color: black;
8415 }
8415 }
8416 .cm-s-ipython span.cm-keyword {
8416 .cm-s-ipython span.cm-keyword {
8417 color: #008000;
8417 color: #008000;
8418 font-weight: bold;
8418 font-weight: bold;
8419 }
8419 }
8420 .cm-s-ipython span.cm-number {
8420 .cm-s-ipython span.cm-number {
8421 color: #080;
8421 color: #080;
8422 }
8422 }
8423 .cm-s-ipython span.cm-comment {
8423 .cm-s-ipython span.cm-comment {
8424 color: #408080;
8424 color: #408080;
8425 font-style: italic;
8425 font-style: italic;
8426 }
8426 }
8427 .cm-s-ipython span.cm-string {
8427 .cm-s-ipython span.cm-string {
8428 color: #BA2121;
8428 color: #BA2121;
8429 }
8429 }
8430 .cm-s-ipython span.cm-builtin {
8430 .cm-s-ipython span.cm-builtin {
8431 color: #008000;
8431 color: #008000;
8432 }
8432 }
8433 .cm-s-ipython span.cm-error {
8433 .cm-s-ipython span.cm-error {
8434 color: #f00;
8434 color: #f00;
8435 }
8435 }
8436 .cm-s-ipython span.cm-operator {
8436 .cm-s-ipython span.cm-operator {
8437 color: #AA22FF;
8437 color: #AA22FF;
8438 font-weight: bold;
8438 font-weight: bold;
8439 }
8439 }
8440 .cm-s-ipython span.cm-meta {
8440 .cm-s-ipython span.cm-meta {
8441 color: #AA22FF;
8441 color: #AA22FF;
8442 }
8442 }
8443 .cm-s-ipython span.cm-tab {
8443 .cm-s-ipython span.cm-tab {
8444 background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);
8444 background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);
8445 background-position: right;
8445 background-position: right;
8446 background-repeat: no-repeat;
8446 background-repeat: no-repeat;
8447 }
8447 }
8448 div.output_wrapper {
8448 div.output_wrapper {
8449 /* this position must be relative to enable descendents to be absolute within it */
8449 /* this position must be relative to enable descendents to be absolute within it */
8450 position: relative;
8450 position: relative;
8451 /* Old browsers */
8451 /* Old browsers */
8452 display: -webkit-box;
8452 display: -webkit-box;
8453 -webkit-box-orient: vertical;
8453 -webkit-box-orient: vertical;
8454 -webkit-box-align: stretch;
8454 -webkit-box-align: stretch;
8455 display: -moz-box;
8455 display: -moz-box;
8456 -moz-box-orient: vertical;
8456 -moz-box-orient: vertical;
8457 -moz-box-align: stretch;
8457 -moz-box-align: stretch;
8458 display: box;
8458 display: box;
8459 box-orient: vertical;
8459 box-orient: vertical;
8460 box-align: stretch;
8460 box-align: stretch;
8461 /* Modern browsers */
8461 /* Modern browsers */
8462 display: flex;
8462 display: flex;
8463 flex-direction: column;
8463 flex-direction: column;
8464 align-items: stretch;
8464 align-items: stretch;
8465 /* Old browsers */
8465 /* Old browsers */
8466 -webkit-box-flex: 0;
8466 -webkit-box-flex: 0;
8467 -moz-box-flex: 0;
8467 -moz-box-flex: 0;
8468 box-flex: 0;
8468 box-flex: 0;
8469 /* Modern browsers */
8469 /* Modern browsers */
8470 flex: none;
8470 flex: none;
8471 }
8471 }
8472 /* class for the output area when it should be height-limited */
8472 /* class for the output area when it should be height-limited */
8473 div.output_scroll {
8473 div.output_scroll {
8474 /* ideally, this would be max-height, but FF barfs all over that */
8474 /* ideally, this would be max-height, but FF barfs all over that */
8475 height: 24em;
8475 height: 24em;
8476 /* FF needs this *and the wrapper* to specify full width, or it will shrinkwrap */
8476 /* FF needs this *and the wrapper* to specify full width, or it will shrinkwrap */
8477 width: 100%;
8477 width: 100%;
8478 overflow: auto;
8478 overflow: auto;
8479 border-radius: 4px;
8479 border-radius: 4px;
8480 -webkit-box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
8480 -webkit-box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
8481 box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
8481 box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
8482 display: block;
8482 display: block;
8483 }
8483 }
8484 /* output div while it is collapsed */
8484 /* output div while it is collapsed */
8485 div.output_collapsed {
8485 div.output_collapsed {
8486 margin: 0px;
8486 margin: 0px;
8487 padding: 0px;
8487 padding: 0px;
8488 /* Old browsers */
8488 /* Old browsers */
8489 display: -webkit-box;
8489 display: -webkit-box;
8490 -webkit-box-orient: vertical;
8490 -webkit-box-orient: vertical;
8491 -webkit-box-align: stretch;
8491 -webkit-box-align: stretch;
8492 display: -moz-box;
8492 display: -moz-box;
8493 -moz-box-orient: vertical;
8493 -moz-box-orient: vertical;
8494 -moz-box-align: stretch;
8494 -moz-box-align: stretch;
8495 display: box;
8495 display: box;
8496 box-orient: vertical;
8496 box-orient: vertical;
8497 box-align: stretch;
8497 box-align: stretch;
8498 /* Modern browsers */
8498 /* Modern browsers */
8499 display: flex;
8499 display: flex;
8500 flex-direction: column;
8500 flex-direction: column;
8501 align-items: stretch;
8501 align-items: stretch;
8502 /* Old browsers */
8502 /* Old browsers */
8503 -webkit-box-flex: 0;
8503 -webkit-box-flex: 0;
8504 -moz-box-flex: 0;
8504 -moz-box-flex: 0;
8505 box-flex: 0;
8505 box-flex: 0;
8506 /* Modern browsers */
8506 /* Modern browsers */
8507 flex: none;
8507 flex: none;
8508 }
8508 }
8509 div.out_prompt_overlay {
8509 div.out_prompt_overlay {
8510 height: 100%;
8510 height: 100%;
8511 padding: 0px 0.4em;
8511 padding: 0px 0.4em;
8512 position: absolute;
8512 position: absolute;
8513 border-radius: 4px;
8513 border-radius: 4px;
8514 }
8514 }
8515 div.out_prompt_overlay:hover {
8515 div.out_prompt_overlay:hover {
8516 /* use inner shadow to get border that is computed the same on WebKit/FF */
8516 /* use inner shadow to get border that is computed the same on WebKit/FF */
8517 -webkit-box-shadow: inset 0 0 1px #000000;
8517 -webkit-box-shadow: inset 0 0 1px #000000;
8518 box-shadow: inset 0 0 1px #000000;
8518 box-shadow: inset 0 0 1px #000000;
8519 background: rgba(240, 240, 240, 0.5);
8519 background: rgba(240, 240, 240, 0.5);
8520 }
8520 }
8521 div.output_prompt {
8521 div.output_prompt {
8522 color: #8b0000;
8522 color: #8b0000;
8523 }
8523 }
8524 /* This class is the outer container of all output sections. */
8524 /* This class is the outer container of all output sections. */
8525 div.output_area {
8525 div.output_area {
8526 padding: 0px;
8526 padding: 0px;
8527 page-break-inside: avoid;
8527 page-break-inside: avoid;
8528 /* Old browsers */
8528 /* Old browsers */
8529 display: -webkit-box;
8529 display: -webkit-box;
8530 -webkit-box-orient: horizontal;
8530 -webkit-box-orient: horizontal;
8531 -webkit-box-align: stretch;
8531 -webkit-box-align: stretch;
8532 display: -moz-box;
8532 display: -moz-box;
8533 -moz-box-orient: horizontal;
8533 -moz-box-orient: horizontal;
8534 -moz-box-align: stretch;
8534 -moz-box-align: stretch;
8535 display: box;
8535 display: box;
8536 box-orient: horizontal;
8536 box-orient: horizontal;
8537 box-align: stretch;
8537 box-align: stretch;
8538 /* Modern browsers */
8538 /* Modern browsers */
8539 display: flex;
8539 display: flex;
8540 flex-direction: row;
8540 flex-direction: row;
8541 align-items: stretch;
8541 align-items: stretch;
8542 /* Old browsers */
8542 /* Old browsers */
8543 -webkit-box-flex: 0;
8543 -webkit-box-flex: 0;
8544 -moz-box-flex: 0;
8544 -moz-box-flex: 0;
8545 box-flex: 0;
8545 box-flex: 0;
8546 /* Modern browsers */
8546 /* Modern browsers */
8547 flex: none;
8547 flex: none;
8548 }
8548 }
8549 div.output_area .MathJax_Display {
8549 div.output_area .MathJax_Display {
8550 text-align: left !important;
8550 text-align: left !important;
8551 }
8551 }
8552 div.output_area .rendered_html table {
8552 div.output_area .rendered_html table {
8553 margin-left: 0;
8553 margin-left: 0;
8554 margin-right: 0;
8554 margin-right: 0;
8555 }
8555 }
8556 div.output_area .rendered_html img {
8556 div.output_area .rendered_html img {
8557 margin-left: 0;
8557 margin-left: 0;
8558 margin-right: 0;
8558 margin-right: 0;
8559 }
8559 }
8560 /* This is needed to protect the pre formating from global settings such
8560 /* This is needed to protect the pre formating from global settings such
8561 as that of bootstrap */
8561 as that of bootstrap */
8562 .output {
8562 .output {
8563 /* Old browsers */
8563 /* Old browsers */
8564 display: -webkit-box;
8564 display: -webkit-box;
8565 -webkit-box-orient: vertical;
8565 -webkit-box-orient: vertical;
8566 -webkit-box-align: stretch;
8566 -webkit-box-align: stretch;
8567 display: -moz-box;
8567 display: -moz-box;
8568 -moz-box-orient: vertical;
8568 -moz-box-orient: vertical;
8569 -moz-box-align: stretch;
8569 -moz-box-align: stretch;
8570 display: box;
8570 display: box;
8571 box-orient: vertical;
8571 box-orient: vertical;
8572 box-align: stretch;
8572 box-align: stretch;
8573 /* Modern browsers */
8573 /* Modern browsers */
8574 display: flex;
8574 display: flex;
8575 flex-direction: column;
8575 flex-direction: column;
8576 align-items: stretch;
8576 align-items: stretch;
8577 /* Old browsers */
8577 /* Old browsers */
8578 -webkit-box-flex: 0;
8578 -webkit-box-flex: 0;
8579 -moz-box-flex: 0;
8579 -moz-box-flex: 0;
8580 box-flex: 0;
8580 box-flex: 0;
8581 /* Modern browsers */
8581 /* Modern browsers */
8582 flex: none;
8582 flex: none;
8583 }
8583 }
8584 @media (max-width: 480px) {
8584 @media (max-width: 480px) {
8585 div.output_area {
8585 div.output_area {
8586 /* Old browsers */
8586 /* Old browsers */
8587 display: -webkit-box;
8587 display: -webkit-box;
8588 -webkit-box-orient: vertical;
8588 -webkit-box-orient: vertical;
8589 -webkit-box-align: stretch;
8589 -webkit-box-align: stretch;
8590 display: -moz-box;
8590 display: -moz-box;
8591 -moz-box-orient: vertical;
8591 -moz-box-orient: vertical;
8592 -moz-box-align: stretch;
8592 -moz-box-align: stretch;
8593 display: box;
8593 display: box;
8594 box-orient: vertical;
8594 box-orient: vertical;
8595 box-align: stretch;
8595 box-align: stretch;
8596 /* Modern browsers */
8596 /* Modern browsers */
8597 display: flex;
8597 display: flex;
8598 flex-direction: column;
8598 flex-direction: column;
8599 align-items: stretch;
8599 align-items: stretch;
8600 /* Old browsers */
8600 /* Old browsers */
8601 -webkit-box-flex: 0;
8601 -webkit-box-flex: 0;
8602 -moz-box-flex: 0;
8602 -moz-box-flex: 0;
8603 box-flex: 0;
8603 box-flex: 0;
8604 /* Modern browsers */
8604 /* Modern browsers */
8605 flex: none;
8605 flex: none;
8606 }
8606 }
8607 }
8607 }
8608 div.output_area pre {
8608 div.output_area pre {
8609 margin: 0;
8609 margin: 0;
8610 padding: 0;
8610 padding: 0;
8611 border: 0;
8611 border: 0;
8612 vertical-align: baseline;
8612 vertical-align: baseline;
8613 color: #000000;
8613 color: #000000;
8614 background-color: transparent;
8614 background-color: transparent;
8615 border-radius: 0;
8615 border-radius: 0;
8616 }
8616 }
8617 /* This class is for the output subarea inside the output_area and after
8617 /* This class is for the output subarea inside the output_area and after
8618 the prompt div. */
8618 the prompt div. */
8619 div.output_subarea {
8619 div.output_subarea {
8620 padding: 0.4em 0.4em 0em 0.4em;
8620 padding: 0.4em 0.4em 0em 0.4em;
8621 /* Old browsers */
8621 /* Old browsers */
8622 -webkit-box-flex: 1;
8622 -webkit-box-flex: 1;
8623 -moz-box-flex: 1;
8623 -moz-box-flex: 1;
8624 box-flex: 1;
8624 box-flex: 1;
8625 /* Modern browsers */
8625 /* Modern browsers */
8626 flex: 1;
8626 flex: 1;
8627 }
8627 }
8628 /* The rest of the output_* classes are for special styling of the different
8628 /* The rest of the output_* classes are for special styling of the different
8629 output types */
8629 output types */
8630 /* all text output has this class: */
8630 /* all text output has this class: */
8631 div.output_text {
8631 div.output_text {
8632 text-align: left;
8632 text-align: left;
8633 color: #000000;
8633 color: #000000;
8634 /* This has to match that of the the CodeMirror class line-height below */
8634 /* This has to match that of the the CodeMirror class line-height below */
8635 line-height: 1.21429em;
8635 line-height: 1.21429em;
8636 }
8636 }
8637 /* stdout/stderr are 'text' as well as 'stream', but execute_result/error are *not* streams */
8637 /* stdout/stderr are 'text' as well as 'stream', but execute_result/error are *not* streams */
8638 div.output_stderr {
8638 div.output_stderr {
8639 background: #fdd;
8639 background: #fdd;
8640 /* very light red background for stderr */
8640 /* very light red background for stderr */
8641 }
8641 }
8642 div.output_latex {
8642 div.output_latex {
8643 text-align: left;
8643 text-align: left;
8644 }
8644 }
8645 /* Empty output_javascript divs should have no height */
8645 /* Empty output_javascript divs should have no height */
8646 div.output_javascript:empty {
8646 div.output_javascript:empty {
8647 padding: 0;
8647 padding: 0;
8648 }
8648 }
8649 .js-error {
8649 .js-error {
8650 color: darkred;
8650 color: darkred;
8651 }
8651 }
8652 /* raw_input styles */
8652 /* raw_input styles */
8653 div.raw_input_container {
8653 div.raw_input_container {
8654 font-family: monospace;
8654 font-family: monospace;
8655 padding-top: 5px;
8655 padding-top: 5px;
8656 }
8656 }
8657 span.raw_input_prompt {
8657 span.raw_input_prompt {
8658 /* nothing needed here */
8658 /* nothing needed here */
8659 }
8659 }
8660 input.raw_input {
8660 input.raw_input {
8661 font-family: inherit;
8661 font-family: inherit;
8662 font-size: inherit;
8662 font-size: inherit;
8663 color: inherit;
8663 color: inherit;
8664 width: auto;
8664 width: auto;
8665 /* make sure input baseline aligns with prompt */
8665 /* make sure input baseline aligns with prompt */
8666 vertical-align: baseline;
8666 vertical-align: baseline;
8667 /* padding + margin = 0.5em between prompt and cursor */
8667 /* padding + margin = 0.5em between prompt and cursor */
8668 padding: 0em 0.25em;
8668 padding: 0em 0.25em;
8669 margin: 0em 0.25em;
8669 margin: 0em 0.25em;
8670 }
8670 }
8671 input.raw_input:focus {
8671 input.raw_input:focus {
8672 box-shadow: none;
8672 box-shadow: none;
8673 }
8673 }
8674 p.p-space {
8674 p.p-space {
8675 margin-bottom: 10px;
8675 margin-bottom: 10px;
8676 }
8676 }
8677 .rendered_html {
8677 .rendered_html {
8678 color: #000000;
8678 color: #000000;
8679 /* any extras will just be numbers: */
8679 /* any extras will just be numbers: */
8680 }
8680 }
8681 .rendered_html em {
8681 .rendered_html em {
8682 font-style: italic;
8682 font-style: italic;
8683 }
8683 }
8684 .rendered_html strong {
8684 .rendered_html strong {
8685 font-weight: bold;
8685 font-weight: bold;
8686 }
8686 }
8687 .rendered_html u {
8687 .rendered_html u {
8688 text-decoration: underline;
8688 text-decoration: underline;
8689 }
8689 }
8690 .rendered_html :link {
8690 .rendered_html :link {
8691 text-decoration: underline;
8691 text-decoration: underline;
8692 }
8692 }
8693 .rendered_html :visited {
8693 .rendered_html :visited {
8694 text-decoration: underline;
8694 text-decoration: underline;
8695 }
8695 }
8696 .rendered_html h1 {
8696 .rendered_html h1 {
8697 font-size: 185.7%;
8697 font-size: 185.7%;
8698 margin: 1.08em 0 0 0;
8698 margin: 1.08em 0 0 0;
8699 font-weight: bold;
8699 font-weight: bold;
8700 line-height: 1.0;
8700 line-height: 1.0;
8701 }
8701 }
8702 .rendered_html h2 {
8702 .rendered_html h2 {
8703 font-size: 157.1%;
8703 font-size: 157.1%;
8704 margin: 1.27em 0 0 0;
8704 margin: 1.27em 0 0 0;
8705 font-weight: bold;
8705 font-weight: bold;
8706 line-height: 1.0;
8706 line-height: 1.0;
8707 }
8707 }
8708 .rendered_html h3 {
8708 .rendered_html h3 {
8709 font-size: 128.6%;
8709 font-size: 128.6%;
8710 margin: 1.55em 0 0 0;
8710 margin: 1.55em 0 0 0;
8711 font-weight: bold;
8711 font-weight: bold;
8712 line-height: 1.0;
8712 line-height: 1.0;
8713 }
8713 }
8714 .rendered_html h4 {
8714 .rendered_html h4 {
8715 font-size: 100%;
8715 font-size: 100%;
8716 margin: 2em 0 0 0;
8716 margin: 2em 0 0 0;
8717 font-weight: bold;
8717 font-weight: bold;
8718 line-height: 1.0;
8718 line-height: 1.0;
8719 }
8719 }
8720 .rendered_html h5 {
8720 .rendered_html h5 {
8721 font-size: 100%;
8721 font-size: 100%;
8722 margin: 2em 0 0 0;
8722 margin: 2em 0 0 0;
8723 font-weight: bold;
8723 font-weight: bold;
8724 line-height: 1.0;
8724 line-height: 1.0;
8725 font-style: italic;
8725 font-style: italic;
8726 }
8726 }
8727 .rendered_html h6 {
8727 .rendered_html h6 {
8728 font-size: 100%;
8728 font-size: 100%;
8729 margin: 2em 0 0 0;
8729 margin: 2em 0 0 0;
8730 font-weight: bold;
8730 font-weight: bold;
8731 line-height: 1.0;
8731 line-height: 1.0;
8732 font-style: italic;
8732 font-style: italic;
8733 }
8733 }
8734 .rendered_html h1:first-child {
8734 .rendered_html h1:first-child {
8735 margin-top: 0.538em;
8735 margin-top: 0.538em;
8736 }
8736 }
8737 .rendered_html h2:first-child {
8737 .rendered_html h2:first-child {
8738 margin-top: 0.636em;
8738 margin-top: 0.636em;
8739 }
8739 }
8740 .rendered_html h3:first-child {
8740 .rendered_html h3:first-child {
8741 margin-top: 0.777em;
8741 margin-top: 0.777em;
8742 }
8742 }
8743 .rendered_html h4:first-child {
8743 .rendered_html h4:first-child {
8744 margin-top: 1em;
8744 margin-top: 1em;
8745 }
8745 }
8746 .rendered_html h5:first-child {
8746 .rendered_html h5:first-child {
8747 margin-top: 1em;
8747 margin-top: 1em;
8748 }
8748 }
8749 .rendered_html h6:first-child {
8749 .rendered_html h6:first-child {
8750 margin-top: 1em;
8750 margin-top: 1em;
8751 }
8751 }
8752 .rendered_html ul {
8752 .rendered_html ul {
8753 list-style: disc;
8753 list-style: disc;
8754 margin: 0em 2em;
8754 margin: 0em 2em;
8755 padding-left: 0px;
8755 padding-left: 0px;
8756 }
8756 }
8757 .rendered_html ul ul {
8757 .rendered_html ul ul {
8758 list-style: square;
8758 list-style: square;
8759 margin: 0em 2em;
8759 margin: 0em 2em;
8760 }
8760 }
8761 .rendered_html ul ul ul {
8761 .rendered_html ul ul ul {
8762 list-style: circle;
8762 list-style: circle;
8763 margin: 0em 2em;
8763 margin: 0em 2em;
8764 }
8764 }
8765 .rendered_html ol {
8765 .rendered_html ol {
8766 list-style: decimal;
8766 list-style: decimal;
8767 margin: 0em 2em;
8767 margin: 0em 2em;
8768 padding-left: 0px;
8768 padding-left: 0px;
8769 }
8769 }
8770 .rendered_html ol ol {
8770 .rendered_html ol ol {
8771 list-style: upper-alpha;
8771 list-style: upper-alpha;
8772 margin: 0em 2em;
8772 margin: 0em 2em;
8773 }
8773 }
8774 .rendered_html ol ol ol {
8774 .rendered_html ol ol ol {
8775 list-style: lower-alpha;
8775 list-style: lower-alpha;
8776 margin: 0em 2em;
8776 margin: 0em 2em;
8777 }
8777 }
8778 .rendered_html ol ol ol ol {
8778 .rendered_html ol ol ol ol {
8779 list-style: lower-roman;
8779 list-style: lower-roman;
8780 margin: 0em 2em;
8780 margin: 0em 2em;
8781 }
8781 }
8782 .rendered_html ol ol ol ol ol {
8782 .rendered_html ol ol ol ol ol {
8783 list-style: decimal;
8783 list-style: decimal;
8784 margin: 0em 2em;
8784 margin: 0em 2em;
8785 }
8785 }
8786 .rendered_html * + ul {
8786 .rendered_html * + ul {
8787 margin-top: 1em;
8787 margin-top: 1em;
8788 }
8788 }
8789 .rendered_html * + ol {
8789 .rendered_html * + ol {
8790 margin-top: 1em;
8790 margin-top: 1em;
8791 }
8791 }
8792 .rendered_html hr {
8792 .rendered_html hr {
8793 color: #000000;
8793 color: #000000;
8794 background-color: #000000;
8794 background-color: #000000;
8795 }
8795 }
8796 .rendered_html pre {
8796 .rendered_html pre {
8797 margin: 1em 2em;
8797 margin: 1em 2em;
8798 }
8798 }
8799 .rendered_html pre,
8799 .rendered_html pre,
8800 .rendered_html code {
8800 .rendered_html code {
8801 border: 0;
8801 border: 0;
8802 background-color: #ffffff;
8802 background-color: #ffffff;
8803 color: #000000;
8803 color: #000000;
8804 font-size: 100%;
8804 font-size: 100%;
8805 padding: 0px;
8805 padding: 0px;
8806 }
8806 }
8807 .rendered_html blockquote {
8807 .rendered_html blockquote {
8808 margin: 1em 2em;
8808 margin: 1em 2em;
8809 }
8809 }
8810 .rendered_html table {
8810 .rendered_html table {
8811 margin-left: auto;
8811 margin-left: auto;
8812 margin-right: auto;
8812 margin-right: auto;
8813 border: 1px solid #000000;
8813 border: 1px solid #000000;
8814 border-collapse: collapse;
8814 border-collapse: collapse;
8815 }
8815 }
8816 .rendered_html tr,
8816 .rendered_html tr,
8817 .rendered_html th,
8817 .rendered_html th,
8818 .rendered_html td {
8818 .rendered_html td {
8819 border: 1px solid #000000;
8819 border: 1px solid #000000;
8820 border-collapse: collapse;
8820 border-collapse: collapse;
8821 margin: 1em 2em;
8821 margin: 1em 2em;
8822 }
8822 }
8823 .rendered_html td,
8823 .rendered_html td,
8824 .rendered_html th {
8824 .rendered_html th {
8825 text-align: left;
8825 text-align: left;
8826 vertical-align: middle;
8826 vertical-align: middle;
8827 padding: 4px;
8827 padding: 4px;
8828 }
8828 }
8829 .rendered_html th {
8829 .rendered_html th {
8830 font-weight: bold;
8830 font-weight: bold;
8831 }
8831 }
8832 .rendered_html * + table {
8832 .rendered_html * + table {
8833 margin-top: 1em;
8833 margin-top: 1em;
8834 }
8834 }
8835 .rendered_html p {
8835 .rendered_html p {
8836 text-align: justify;
8836 text-align: justify;
8837 }
8837 }
8838 .rendered_html * + p {
8838 .rendered_html * + p {
8839 margin-top: 1em;
8839 margin-top: 1em;
8840 }
8840 }
8841 .rendered_html img {
8841 .rendered_html img {
8842 display: block;
8842 display: block;
8843 margin-left: auto;
8843 margin-left: auto;
8844 margin-right: auto;
8844 margin-right: auto;
8845 }
8845 }
8846 .rendered_html * + img {
8846 .rendered_html * + img {
8847 margin-top: 1em;
8847 margin-top: 1em;
8848 }
8848 }
8849 div.text_cell {
8849 div.text_cell {
8850 padding: 5px 5px 5px 0px;
8850 padding: 5px 5px 5px 0px;
8851 /* Old browsers */
8851 /* Old browsers */
8852 display: -webkit-box;
8852 display: -webkit-box;
8853 -webkit-box-orient: horizontal;
8853 -webkit-box-orient: horizontal;
8854 -webkit-box-align: stretch;
8854 -webkit-box-align: stretch;
8855 display: -moz-box;
8855 display: -moz-box;
8856 -moz-box-orient: horizontal;
8856 -moz-box-orient: horizontal;
8857 -moz-box-align: stretch;
8857 -moz-box-align: stretch;
8858 display: box;
8858 display: box;
8859 box-orient: horizontal;
8859 box-orient: horizontal;
8860 box-align: stretch;
8860 box-align: stretch;
8861 /* Modern browsers */
8861 /* Modern browsers */
8862 display: flex;
8862 display: flex;
8863 flex-direction: row;
8863 flex-direction: row;
8864 align-items: stretch;
8864 align-items: stretch;
8865 /* Old browsers */
8865 /* Old browsers */
8866 -webkit-box-flex: 0;
8866 -webkit-box-flex: 0;
8867 -moz-box-flex: 0;
8867 -moz-box-flex: 0;
8868 box-flex: 0;
8868 box-flex: 0;
8869 /* Modern browsers */
8869 /* Modern browsers */
8870 flex: none;
8870 flex: none;
8871 }
8871 }
8872 @media (max-width: 480px) {
8872 @media (max-width: 480px) {
8873 div.text_cell > div.prompt {
8873 div.text_cell > div.prompt {
8874 display: none;
8874 display: none;
8875 }
8875 }
8876 }
8876 }
8877 div.text_cell_render {
8877 div.text_cell_render {
8878 /*font-family: "Helvetica Neue", Arial, Helvetica, Geneva, sans-serif;*/
8878 /*font-family: "Helvetica Neue", Arial, Helvetica, Geneva, sans-serif;*/
8879 outline: none;
8879 outline: none;
8880 resize: none;
8880 resize: none;
8881 width: inherit;
8881 width: inherit;
8882 border-style: none;
8882 border-style: none;
8883 padding: 0.5em 0.5em 0.5em 0.4em;
8883 padding: 0.5em 0.5em 0.5em 0.4em;
8884 color: #000000;
8884 color: #000000;
8885 box-sizing: border-box;
8885 box-sizing: border-box;
8886 -moz-box-sizing: border-box;
8886 -moz-box-sizing: border-box;
8887 -webkit-box-sizing: border-box;
8887 -webkit-box-sizing: border-box;
8888 }
8888 }
8889 a.anchor-link:link {
8889 a.anchor-link:link {
8890 text-decoration: none;
8890 text-decoration: none;
8891 padding: 0px 20px;
8891 padding: 0px 20px;
8892 visibility: hidden;
8892 visibility: hidden;
8893 }
8893 }
8894 h1:hover .anchor-link,
8894 h1:hover .anchor-link,
8895 h2:hover .anchor-link,
8895 h2:hover .anchor-link,
8896 h3:hover .anchor-link,
8896 h3:hover .anchor-link,
8897 h4:hover .anchor-link,
8897 h4:hover .anchor-link,
8898 h5:hover .anchor-link,
8898 h5:hover .anchor-link,
8899 h6:hover .anchor-link {
8899 h6:hover .anchor-link {
8900 visibility: visible;
8900 visibility: visible;
8901 }
8901 }
8902 div.cell.text_cell.rendered {
8902 div.cell.text_cell.rendered {
8903 padding: 0px;
8903 padding: 0px;
8904 }
8904 }
8905 .cm-s-heading-1,
8905 .cm-s-heading-1,
8906 .cm-s-heading-2,
8906 .cm-s-heading-2,
8907 .cm-s-heading-3,
8907 .cm-s-heading-3,
8908 .cm-s-heading-4,
8908 .cm-s-heading-4,
8909 .cm-s-heading-5,
8909 .cm-s-heading-5,
8910 .cm-s-heading-6 {
8910 .cm-s-heading-6 {
8911 font-weight: bold;
8911 font-weight: bold;
8912 font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
8912 font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
8913 }
8913 }
8914 .cm-s-heading-1 {
8914 .cm-s-heading-1 {
8915 font-size: 150%;
8915 font-size: 150%;
8916 }
8916 }
8917 .cm-s-heading-2 {
8917 .cm-s-heading-2 {
8918 font-size: 130%;
8918 font-size: 130%;
8919 }
8919 }
8920 .cm-s-heading-3 {
8920 .cm-s-heading-3 {
8921 font-size: 120%;
8921 font-size: 120%;
8922 }
8922 }
8923 .cm-s-heading-4 {
8923 .cm-s-heading-4 {
8924 font-size: 110%;
8924 font-size: 110%;
8925 }
8925 }
8926 .cm-s-heading-5 {
8926 .cm-s-heading-5 {
8927 font-size: 100%;
8927 font-size: 100%;
8928 font-style: italic;
8928 font-style: italic;
8929 }
8929 }
8930 .cm-s-heading-6 {
8930 .cm-s-heading-6 {
8931 font-size: 90%;
8931 font-size: 90%;
8932 font-style: italic;
8932 font-style: italic;
8933 }
8933 }
8934 .widget-area {
8934 .widget-area {
8935 /*
8935 /*
8936 LESS file that styles IPython notebook widgets and the area they sit in.
8936 LESS file that styles IPython notebook widgets and the area they sit in.
8937
8937
8938 The widget area typically looks something like this:
8938 The widget area typically looks something like this:
8939 +------------------------------------------+
8939 +------------------------------------------+
8940 | widget-area |
8940 | widget-area |
8941 | +--------+---------------------------+ |
8941 | +--------+---------------------------+ |
8942 | | prompt | widget-subarea | |
8942 | | prompt | widget-subarea | |
8943 | | | +--------+ +--------+ | |
8943 | | | +--------+ +--------+ | |
8944 | | | | widget | | widget | | |
8944 | | | | widget | | widget | | |
8945 | | | +--------+ +--------+ | |
8945 | | | +--------+ +--------+ | |
8946 | +--------+---------------------------+ |
8946 | +--------+---------------------------+ |
8947 +------------------------------------------+
8947 +------------------------------------------+
8948 */
8948 */
8949 page-break-inside: avoid;
8949 page-break-inside: avoid;
8950 /* Old browsers */
8950 /* Old browsers */
8951 display: -webkit-box;
8951 display: -webkit-box;
8952 -webkit-box-orient: horizontal;
8952 -webkit-box-orient: horizontal;
8953 -webkit-box-align: stretch;
8953 -webkit-box-align: stretch;
8954 display: -moz-box;
8954 display: -moz-box;
8955 -moz-box-orient: horizontal;
8955 -moz-box-orient: horizontal;
8956 -moz-box-align: stretch;
8956 -moz-box-align: stretch;
8957 display: box;
8957 display: box;
8958 box-orient: horizontal;
8958 box-orient: horizontal;
8959 box-align: stretch;
8959 box-align: stretch;
8960 /* Modern browsers */
8960 /* Modern browsers */
8961 display: flex;
8961 display: flex;
8962 flex-direction: row;
8962 flex-direction: row;
8963 align-items: stretch;
8963 align-items: stretch;
8964 /* Old browsers */
8964 /* Old browsers */
8965 -webkit-box-flex: 0;
8965 -webkit-box-flex: 0;
8966 -moz-box-flex: 0;
8966 -moz-box-flex: 0;
8967 box-flex: 0;
8967 box-flex: 0;
8968 /* Modern browsers */
8968 /* Modern browsers */
8969 flex: none;
8969 flex: none;
8970 }
8970 }
8971 .widget-area .widget-subarea {
8971 .widget-area .widget-subarea {
8972 padding: 0.44em 0.4em 0.4em 1px;
8972 padding: 0.44em 0.4em 0.4em 1px;
8973 margin-left: 6px;
8973 margin-left: 6px;
8974 box-sizing: border-box;
8974 box-sizing: border-box;
8975 -moz-box-sizing: border-box;
8975 -moz-box-sizing: border-box;
8976 -webkit-box-sizing: border-box;
8976 -webkit-box-sizing: border-box;
8977 /* Old browsers */
8977 /* Old browsers */
8978 display: -webkit-box;
8978 display: -webkit-box;
8979 -webkit-box-orient: vertical;
8979 -webkit-box-orient: vertical;
8980 -webkit-box-align: stretch;
8980 -webkit-box-align: stretch;
8981 display: -moz-box;
8981 display: -moz-box;
8982 -moz-box-orient: vertical;
8982 -moz-box-orient: vertical;
8983 -moz-box-align: stretch;
8983 -moz-box-align: stretch;
8984 display: box;
8984 display: box;
8985 box-orient: vertical;
8985 box-orient: vertical;
8986 box-align: stretch;
8986 box-align: stretch;
8987 /* Modern browsers */
8987 /* Modern browsers */
8988 display: flex;
8988 display: flex;
8989 flex-direction: column;
8989 flex-direction: column;
8990 align-items: stretch;
8990 align-items: stretch;
8991 /* Old browsers */
8991 /* Old browsers */
8992 -webkit-box-flex: 0;
8992 -webkit-box-flex: 0;
8993 -moz-box-flex: 0;
8993 -moz-box-flex: 0;
8994 box-flex: 0;
8994 box-flex: 0;
8995 /* Modern browsers */
8995 /* Modern browsers */
8996 flex: none;
8996 flex: none;
8997 /* Old browsers */
8997 /* Old browsers */
8998 -webkit-box-flex: 2;
8998 -webkit-box-flex: 2;
8999 -moz-box-flex: 2;
8999 -moz-box-flex: 2;
9000 box-flex: 2;
9000 box-flex: 2;
9001 /* Modern browsers */
9001 /* Modern browsers */
9002 flex: 2;
9002 flex: 2;
9003 /* Old browsers */
9003 /* Old browsers */
9004 -webkit-box-align: start;
9004 -webkit-box-align: start;
9005 -moz-box-align: start;
9005 -moz-box-align: start;
9006 box-align: start;
9006 box-align: start;
9007 /* Modern browsers */
9007 /* Modern browsers */
9008 align-items: flex-start;
9008 align-items: flex-start;
9009 }
9009 }
9010 /* THE CLASSES BELOW CAN APPEAR ANYWHERE IN THE DOM (POSSIBLEY OUTSIDE OF
9010 /* THE CLASSES BELOW CAN APPEAR ANYWHERE IN THE DOM (POSSIBLEY OUTSIDE OF
9011 THE WIDGET AREA). */
9011 THE WIDGET AREA). */
9012 .widget-hlabel {
9012 .widget-hlabel {
9013 /* Horizontal Label */
9013 /* Horizontal Label */
9014 min-width: 10ex;
9014 min-width: 10ex;
9015 padding-right: 8px;
9015 padding-right: 8px;
9016 padding-top: 5px;
9016 padding-top: 5px;
9017 text-align: right;
9017 text-align: right;
9018 vertical-align: text-top;
9018 vertical-align: text-top;
9019 }
9019 }
9020 .widget-vlabel {
9020 .widget-vlabel {
9021 /* Vertical Label */
9021 /* Vertical Label */
9022 padding-bottom: 5px;
9022 padding-bottom: 5px;
9023 text-align: center;
9023 text-align: center;
9024 vertical-align: text-bottom;
9024 vertical-align: text-bottom;
9025 }
9025 }
9026 .widget-hreadout {
9026 .widget-hreadout {
9027 padding-left: 8px;
9027 padding-left: 8px;
9028 padding-top: 5px;
9028 padding-top: 5px;
9029 text-align: left;
9029 text-align: left;
9030 vertical-align: text-top;
9030 vertical-align: text-top;
9031 }
9031 }
9032 .widget-vreadout {
9032 .widget-vreadout {
9033 /* Vertical Label */
9033 /* Vertical Label */
9034 padding-top: 5px;
9034 padding-top: 5px;
9035 text-align: center;
9035 text-align: center;
9036 vertical-align: text-top;
9036 vertical-align: text-top;
9037 }
9037 }
9038 .slide-track {
9038 .slide-track {
9039 /* Slider Track */
9039 /* Slider Track */
9040 border: 1px solid #CCCCCC;
9040 border: 1px solid #CCCCCC;
9041 background: #FFFFFF;
9041 background: #FFFFFF;
9042 border-radius: 4px;
9042 border-radius: 4px;
9043 /* Round the corners of the slide track */
9043 /* Round the corners of the slide track */
9044 }
9044 }
9045 .widget-hslider {
9045 .widget-hslider {
9046 /* Horizontal jQuery Slider
9046 /* Horizontal jQuery Slider
9047
9047
9048 Both the horizontal and vertical versions of the slider are characterized
9048 Both the horizontal and vertical versions of the slider are characterized
9049 by a styled div that contains an invisible jQuery slide div which
9049 by a styled div that contains an invisible jQuery slide div which
9050 contains a visible slider handle div. This is requred so we can control
9050 contains a visible slider handle div. This is requred so we can control
9051 how the slider is drawn and 'fix' the issue where the slide handle
9051 how the slider is drawn and 'fix' the issue where the slide handle
9052 doesn't stop at the end of the slide.
9052 doesn't stop at the end of the slide.
9053
9053
9054 Both horizontal and vertical sliders have this div nesting:
9054 Both horizontal and vertical sliders have this div nesting:
9055 +------------------------------------------+
9055 +------------------------------------------+
9056 | widget-(h/v)slider |
9056 | widget-(h/v)slider |
9057 | +--------+---------------------------+ |
9057 | +--------+---------------------------+ |
9058 | | ui-slider | |
9058 | | ui-slider | |
9059 | | +------------------+ | |
9059 | | +------------------+ | |
9060 | | | ui-slider-handle | | |
9060 | | | ui-slider-handle | | |
9061 | | +------------------+ | |
9061 | | +------------------+ | |
9062 | +--------+---------------------------+ |
9062 | +--------+---------------------------+ |
9063 +------------------------------------------+
9063 +------------------------------------------+
9064 */
9064 */
9065 /* Fix the padding of the slide track so the ui-slider is sized
9065 /* Fix the padding of the slide track so the ui-slider is sized
9066 correctly. */
9066 correctly. */
9067 padding-left: 8px;
9067 padding-left: 8px;
9068 padding-right: 5px;
9068 padding-right: 5px;
9069 overflow: visible;
9069 overflow: visible;
9070 /* Default size of the slider */
9070 /* Default size of the slider */
9071 width: 350px;
9071 width: 350px;
9072 height: 5px;
9072 height: 5px;
9073 max-height: 5px;
9073 max-height: 5px;
9074 margin-top: 13px;
9074 margin-top: 13px;
9075 margin-bottom: 10px;
9075 margin-bottom: 10px;
9076 /* Style the slider track */
9076 /* Style the slider track */
9077 /* Slider Track */
9077 /* Slider Track */
9078 border: 1px solid #CCCCCC;
9078 border: 1px solid #CCCCCC;
9079 background: #FFFFFF;
9079 background: #FFFFFF;
9080 border-radius: 4px;
9080 border-radius: 4px;
9081 /* Round the corners of the slide track */
9081 /* Round the corners of the slide track */
9082 /* Make the div a flex box (makes FF behave correctly). */
9082 /* Make the div a flex box (makes FF behave correctly). */
9083 /* Old browsers */
9083 /* Old browsers */
9084 display: -webkit-box;
9084 display: -webkit-box;
9085 -webkit-box-orient: horizontal;
9085 -webkit-box-orient: horizontal;
9086 -webkit-box-align: stretch;
9086 -webkit-box-align: stretch;
9087 display: -moz-box;
9087 display: -moz-box;
9088 -moz-box-orient: horizontal;
9088 -moz-box-orient: horizontal;
9089 -moz-box-align: stretch;
9089 -moz-box-align: stretch;
9090 display: box;
9090 display: box;
9091 box-orient: horizontal;
9091 box-orient: horizontal;
9092 box-align: stretch;
9092 box-align: stretch;
9093 /* Modern browsers */
9093 /* Modern browsers */
9094 display: flex;
9094 display: flex;
9095 flex-direction: row;
9095 flex-direction: row;
9096 align-items: stretch;
9096 align-items: stretch;
9097 /* Old browsers */
9097 /* Old browsers */
9098 -webkit-box-flex: 0;
9098 -webkit-box-flex: 0;
9099 -moz-box-flex: 0;
9099 -moz-box-flex: 0;
9100 box-flex: 0;
9100 box-flex: 0;
9101 /* Modern browsers */
9101 /* Modern browsers */
9102 flex: none;
9102 flex: none;
9103 }
9103 }
9104 .widget-hslider .ui-slider {
9104 .widget-hslider .ui-slider {
9105 /* Inner, invisible slide div */
9105 /* Inner, invisible slide div */
9106 border: 0px !important;
9106 border: 0px !important;
9107 background: none !important;
9107 background: none !important;
9108 /* Old browsers */
9108 /* Old browsers */
9109 display: -webkit-box;
9109 display: -webkit-box;
9110 -webkit-box-orient: horizontal;
9110 -webkit-box-orient: horizontal;
9111 -webkit-box-align: stretch;
9111 -webkit-box-align: stretch;
9112 display: -moz-box;
9112 display: -moz-box;
9113 -moz-box-orient: horizontal;
9113 -moz-box-orient: horizontal;
9114 -moz-box-align: stretch;
9114 -moz-box-align: stretch;
9115 display: box;
9115 display: box;
9116 box-orient: horizontal;
9116 box-orient: horizontal;
9117 box-align: stretch;
9117 box-align: stretch;
9118 /* Modern browsers */
9118 /* Modern browsers */
9119 display: flex;
9119 display: flex;
9120 flex-direction: row;
9120 flex-direction: row;
9121 align-items: stretch;
9121 align-items: stretch;
9122 /* Old browsers */
9122 /* Old browsers */
9123 -webkit-box-flex: 0;
9123 -webkit-box-flex: 0;
9124 -moz-box-flex: 0;
9124 -moz-box-flex: 0;
9125 box-flex: 0;
9125 box-flex: 0;
9126 /* Modern browsers */
9126 /* Modern browsers */
9127 flex: none;
9127 flex: none;
9128 /* Old browsers */
9128 /* Old browsers */
9129 -webkit-box-flex: 1;
9129 -webkit-box-flex: 1;
9130 -moz-box-flex: 1;
9130 -moz-box-flex: 1;
9131 box-flex: 1;
9131 box-flex: 1;
9132 /* Modern browsers */
9132 /* Modern browsers */
9133 flex: 1;
9133 flex: 1;
9134 }
9134 }
9135 .widget-hslider .ui-slider .ui-slider-handle {
9135 .widget-hslider .ui-slider .ui-slider-handle {
9136 width: 14px !important;
9136 width: 14px !important;
9137 height: 28px !important;
9137 height: 28px !important;
9138 margin-top: -8px !important;
9138 margin-top: -8px !important;
9139 }
9139 }
9140 .widget-vslider {
9140 .widget-vslider {
9141 /* Vertical jQuery Slider */
9141 /* Vertical jQuery Slider */
9142 /* Fix the padding of the slide track so the ui-slider is sized
9142 /* Fix the padding of the slide track so the ui-slider is sized
9143 correctly. */
9143 correctly. */
9144 padding-bottom: 8px;
9144 padding-bottom: 8px;
9145 overflow: visible;
9145 overflow: visible;
9146 /* Default size of the slider */
9146 /* Default size of the slider */
9147 width: 5px;
9147 width: 5px;
9148 max-width: 5px;
9148 max-width: 5px;
9149 height: 250px;
9149 height: 250px;
9150 margin-left: 12px;
9150 margin-left: 12px;
9151 /* Style the slider track */
9151 /* Style the slider track */
9152 /* Slider Track */
9152 /* Slider Track */
9153 border: 1px solid #CCCCCC;
9153 border: 1px solid #CCCCCC;
9154 background: #FFFFFF;
9154 background: #FFFFFF;
9155 border-radius: 4px;
9155 border-radius: 4px;
9156 /* Round the corners of the slide track */
9156 /* Round the corners of the slide track */
9157 /* Make the div a flex box (makes FF behave correctly). */
9157 /* Make the div a flex box (makes FF behave correctly). */
9158 /* Old browsers */
9158 /* Old browsers */
9159 display: -webkit-box;
9159 display: -webkit-box;
9160 -webkit-box-orient: vertical;
9160 -webkit-box-orient: vertical;
9161 -webkit-box-align: stretch;
9161 -webkit-box-align: stretch;
9162 display: -moz-box;
9162 display: -moz-box;
9163 -moz-box-orient: vertical;
9163 -moz-box-orient: vertical;
9164 -moz-box-align: stretch;
9164 -moz-box-align: stretch;
9165 display: box;
9165 display: box;
9166 box-orient: vertical;
9166 box-orient: vertical;
9167 box-align: stretch;
9167 box-align: stretch;
9168 /* Modern browsers */
9168 /* Modern browsers */
9169 display: flex;
9169 display: flex;
9170 flex-direction: column;
9170 flex-direction: column;
9171 align-items: stretch;
9171 align-items: stretch;
9172 /* Old browsers */
9172 /* Old browsers */
9173 -webkit-box-flex: 0;
9173 -webkit-box-flex: 0;
9174 -moz-box-flex: 0;
9174 -moz-box-flex: 0;
9175 box-flex: 0;
9175 box-flex: 0;
9176 /* Modern browsers */
9176 /* Modern browsers */
9177 flex: none;
9177 flex: none;
9178 }
9178 }
9179 .widget-vslider .ui-slider {
9179 .widget-vslider .ui-slider {
9180 /* Inner, invisible slide div */
9180 /* Inner, invisible slide div */
9181 border: 0px !important;
9181 border: 0px !important;
9182 background: none !important;
9182 background: none !important;
9183 margin-left: -4px;
9183 margin-left: -4px;
9184 margin-top: 5px;
9184 margin-top: 5px;
9185 /* Old browsers */
9185 /* Old browsers */
9186 display: -webkit-box;
9186 display: -webkit-box;
9187 -webkit-box-orient: vertical;
9187 -webkit-box-orient: vertical;
9188 -webkit-box-align: stretch;
9188 -webkit-box-align: stretch;
9189 display: -moz-box;
9189 display: -moz-box;
9190 -moz-box-orient: vertical;
9190 -moz-box-orient: vertical;
9191 -moz-box-align: stretch;
9191 -moz-box-align: stretch;
9192 display: box;
9192 display: box;
9193 box-orient: vertical;
9193 box-orient: vertical;
9194 box-align: stretch;
9194 box-align: stretch;
9195 /* Modern browsers */
9195 /* Modern browsers */
9196 display: flex;
9196 display: flex;
9197 flex-direction: column;
9197 flex-direction: column;
9198 align-items: stretch;
9198 align-items: stretch;
9199 /* Old browsers */
9199 /* Old browsers */
9200 -webkit-box-flex: 0;
9200 -webkit-box-flex: 0;
9201 -moz-box-flex: 0;
9201 -moz-box-flex: 0;
9202 box-flex: 0;
9202 box-flex: 0;
9203 /* Modern browsers */
9203 /* Modern browsers */
9204 flex: none;
9204 flex: none;
9205 /* Old browsers */
9205 /* Old browsers */
9206 -webkit-box-flex: 1;
9206 -webkit-box-flex: 1;
9207 -moz-box-flex: 1;
9207 -moz-box-flex: 1;
9208 box-flex: 1;
9208 box-flex: 1;
9209 /* Modern browsers */
9209 /* Modern browsers */
9210 flex: 1;
9210 flex: 1;
9211 }
9211 }
9212 .widget-vslider .ui-slider .ui-slider-handle {
9212 .widget-vslider .ui-slider .ui-slider-handle {
9213 width: 28px !important;
9213 width: 28px !important;
9214 height: 14px !important;
9214 height: 14px !important;
9215 margin-left: -9px;
9215 margin-left: -9px;
9216 }
9216 }
9217 .widget-text {
9217 .widget-text {
9218 /* String Textbox - used for TextBoxView and TextAreaView */
9218 /* String Textbox - used for TextBoxView and TextAreaView */
9219 width: 350px;
9219 width: 350px;
9220 margin: 0px !important;
9220 margin: 0px !important;
9221 }
9221 }
9222 .widget-listbox {
9222 .widget-listbox {
9223 /* Listbox */
9223 /* Listbox */
9224 width: 350px;
9224 width: 350px;
9225 margin-bottom: 0px;
9225 margin-bottom: 0px;
9226 }
9226 }
9227 .widget-numeric-text {
9227 .widget-numeric-text {
9228 /* Single Line Textbox - used for IntTextView and FloatTextView */
9228 /* Single Line Textbox - used for IntTextView and FloatTextView */
9229 width: 150px;
9229 width: 150px;
9230 margin: 0px !important;
9230 margin: 0px !important;
9231 }
9231 }
9232 .widget-progress {
9232 .widget-progress {
9233 /* Progress Bar */
9233 /* Progress Bar */
9234 margin-top: 6px;
9234 margin-top: 6px;
9235 width: 350px;
9235 width: 350px;
9236 }
9236 }
9237 .widget-progress .progress-bar {
9237 .widget-progress .progress-bar {
9238 /* Disable progress bar animation */
9238 /* Disable progress bar animation */
9239 -webkit-transition: none;
9239 -webkit-transition: none;
9240 -moz-transition: none;
9240 -moz-transition: none;
9241 -ms-transition: none;
9241 -ms-transition: none;
9242 -o-transition: none;
9242 -o-transition: none;
9243 transition: none;
9243 transition: none;
9244 }
9244 }
9245 .widget-combo-btn {
9245 .widget-combo-btn {
9246 /* ComboBox Main Button */
9246 /* ComboBox Main Button */
9247 min-width: 125px;
9247 min-width: 125px;
9248 }
9248 }
9249 .widget-box {
9249 .widget-box {
9250 /* The following section sets the style for the invisible div that
9250 /* The following section sets the style for the invisible div that
9251 hold widgets and their accompanying labels.
9251 hold widgets and their accompanying labels.
9252
9252
9253 Looks like this:
9253 Looks like this:
9254 +-----------------------------+
9254 +-----------------------------+
9255 | widget-box (or similar) |
9255 | widget-box (or similar) |
9256 | +-------+---------------+ |
9256 | +-------+---------------+ |
9257 | | Label | Actual Widget | |
9257 | | Label | Actual Widget | |
9258 | +-------+---------------+ |
9258 | +-------+---------------+ |
9259 +-----------------------------+
9259 +-----------------------------+
9260 */
9260 */
9261 margin: 5px;
9261 margin: 5px;
9262 /* Old browsers */
9262 /* Old browsers */
9263 -webkit-box-pack: start;
9263 -webkit-box-pack: start;
9264 -moz-box-pack: start;
9264 -moz-box-pack: start;
9265 box-pack: start;
9265 box-pack: start;
9266 /* Modern browsers */
9266 /* Modern browsers */
9267 justify-content: flex-start;
9267 justify-content: flex-start;
9268 /* Box */
9268 /* Box */
9269 box-sizing: border-box;
9269 box-sizing: border-box;
9270 -moz-box-sizing: border-box;
9270 -moz-box-sizing: border-box;
9271 -webkit-box-sizing: border-box;
9271 -webkit-box-sizing: border-box;
9272 /* Old browsers */
9272 /* Old browsers */
9273 -webkit-box-align: start;
9273 -webkit-box-align: start;
9274 -moz-box-align: start;
9274 -moz-box-align: start;
9275 box-align: start;
9275 box-align: start;
9276 /* Modern browsers */
9276 /* Modern browsers */
9277 align-items: flex-start;
9277 align-items: flex-start;
9278 }
9278 }
9279 .widget-hbox {
9279 .widget-hbox {
9280 /* Horizontal widgets */
9280 /* Horizontal widgets */
9281 /* The following section sets the style for the invisible div that
9281 /* The following section sets the style for the invisible div that
9282 hold widgets and their accompanying labels.
9282 hold widgets and their accompanying labels.
9283
9283
9284 Looks like this:
9284 Looks like this:
9285 +-----------------------------+
9285 +-----------------------------+
9286 | widget-box (or similar) |
9286 | widget-box (or similar) |
9287 | +-------+---------------+ |
9287 | +-------+---------------+ |
9288 | | Label | Actual Widget | |
9288 | | Label | Actual Widget | |
9289 | +-------+---------------+ |
9289 | +-------+---------------+ |
9290 +-----------------------------+
9290 +-----------------------------+
9291 */
9291 */
9292 margin: 5px;
9292 margin: 5px;
9293 /* Old browsers */
9293 /* Old browsers */
9294 -webkit-box-pack: start;
9294 -webkit-box-pack: start;
9295 -moz-box-pack: start;
9295 -moz-box-pack: start;
9296 box-pack: start;
9296 box-pack: start;
9297 /* Modern browsers */
9297 /* Modern browsers */
9298 justify-content: flex-start;
9298 justify-content: flex-start;
9299 /* Box */
9299 /* Box */
9300 box-sizing: border-box;
9300 box-sizing: border-box;
9301 -moz-box-sizing: border-box;
9301 -moz-box-sizing: border-box;
9302 -webkit-box-sizing: border-box;
9302 -webkit-box-sizing: border-box;
9303 /* Old browsers */
9303 /* Old browsers */
9304 -webkit-box-align: start;
9304 -webkit-box-align: start;
9305 -moz-box-align: start;
9305 -moz-box-align: start;
9306 box-align: start;
9306 box-align: start;
9307 /* Modern browsers */
9307 /* Modern browsers */
9308 align-items: flex-start;
9308 align-items: flex-start;
9309 /* Old browsers */
9309 /* Old browsers */
9310 display: -webkit-box;
9310 display: -webkit-box;
9311 -webkit-box-orient: horizontal;
9311 -webkit-box-orient: horizontal;
9312 -webkit-box-align: stretch;
9312 -webkit-box-align: stretch;
9313 display: -moz-box;
9313 display: -moz-box;
9314 -moz-box-orient: horizontal;
9314 -moz-box-orient: horizontal;
9315 -moz-box-align: stretch;
9315 -moz-box-align: stretch;
9316 display: box;
9316 display: box;
9317 box-orient: horizontal;
9317 box-orient: horizontal;
9318 box-align: stretch;
9318 box-align: stretch;
9319 /* Modern browsers */
9319 /* Modern browsers */
9320 display: flex;
9320 display: flex;
9321 flex-direction: row;
9321 flex-direction: row;
9322 align-items: stretch;
9322 align-items: stretch;
9323 /* Old browsers */
9323 /* Old browsers */
9324 -webkit-box-flex: 0;
9324 -webkit-box-flex: 0;
9325 -moz-box-flex: 0;
9325 -moz-box-flex: 0;
9326 box-flex: 0;
9326 box-flex: 0;
9327 /* Modern browsers */
9327 /* Modern browsers */
9328 flex: none;
9328 flex: none;
9329 }
9329 }
9330 .widget-hbox-single {
9330 .widget-hbox-single {
9331 /* Single line horizontal widgets */
9331 /* Single line horizontal widgets */
9332 /* Horizontal widgets */
9332 /* Horizontal widgets */
9333 /* The following section sets the style for the invisible div that
9333 /* The following section sets the style for the invisible div that
9334 hold widgets and their accompanying labels.
9334 hold widgets and their accompanying labels.
9335
9335
9336 Looks like this:
9336 Looks like this:
9337 +-----------------------------+
9337 +-----------------------------+
9338 | widget-box (or similar) |
9338 | widget-box (or similar) |
9339 | +-------+---------------+ |
9339 | +-------+---------------+ |
9340 | | Label | Actual Widget | |
9340 | | Label | Actual Widget | |
9341 | +-------+---------------+ |
9341 | +-------+---------------+ |
9342 +-----------------------------+
9342 +-----------------------------+
9343 */
9343 */
9344 margin: 5px;
9344 margin: 5px;
9345 /* Old browsers */
9345 /* Old browsers */
9346 -webkit-box-pack: start;
9346 -webkit-box-pack: start;
9347 -moz-box-pack: start;
9347 -moz-box-pack: start;
9348 box-pack: start;
9348 box-pack: start;
9349 /* Modern browsers */
9349 /* Modern browsers */
9350 justify-content: flex-start;
9350 justify-content: flex-start;
9351 /* Box */
9351 /* Box */
9352 box-sizing: border-box;
9352 box-sizing: border-box;
9353 -moz-box-sizing: border-box;
9353 -moz-box-sizing: border-box;
9354 -webkit-box-sizing: border-box;
9354 -webkit-box-sizing: border-box;
9355 /* Old browsers */
9355 /* Old browsers */
9356 -webkit-box-align: start;
9356 -webkit-box-align: start;
9357 -moz-box-align: start;
9357 -moz-box-align: start;
9358 box-align: start;
9358 box-align: start;
9359 /* Modern browsers */
9359 /* Modern browsers */
9360 align-items: flex-start;
9360 align-items: flex-start;
9361 /* Old browsers */
9361 /* Old browsers */
9362 display: -webkit-box;
9362 display: -webkit-box;
9363 -webkit-box-orient: horizontal;
9363 -webkit-box-orient: horizontal;
9364 -webkit-box-align: stretch;
9364 -webkit-box-align: stretch;
9365 display: -moz-box;
9365 display: -moz-box;
9366 -moz-box-orient: horizontal;
9366 -moz-box-orient: horizontal;
9367 -moz-box-align: stretch;
9367 -moz-box-align: stretch;
9368 display: box;
9368 display: box;
9369 box-orient: horizontal;
9369 box-orient: horizontal;
9370 box-align: stretch;
9370 box-align: stretch;
9371 /* Modern browsers */
9371 /* Modern browsers */
9372 display: flex;
9372 display: flex;
9373 flex-direction: row;
9373 flex-direction: row;
9374 align-items: stretch;
9374 align-items: stretch;
9375 /* Old browsers */
9375 /* Old browsers */
9376 -webkit-box-flex: 0;
9376 -webkit-box-flex: 0;
9377 -moz-box-flex: 0;
9377 -moz-box-flex: 0;
9378 box-flex: 0;
9378 box-flex: 0;
9379 /* Modern browsers */
9379 /* Modern browsers */
9380 flex: none;
9380 flex: none;
9381 height: 30px;
9381 height: 30px;
9382 }
9382 }
9383 .widget-hbox-single input[type="checkbox"] {
9383 .widget-hbox-single input[type="checkbox"] {
9384 margin-top: 9px;
9384 margin-top: 9px;
9385 }
9385 }
9386 .widget-vbox {
9386 .widget-vbox {
9387 /* Vertical widgets */
9387 /* Vertical widgets */
9388 /* The following section sets the style for the invisible div that
9388 /* The following section sets the style for the invisible div that
9389 hold widgets and their accompanying labels.
9389 hold widgets and their accompanying labels.
9390
9390
9391 Looks like this:
9391 Looks like this:
9392 +-----------------------------+
9392 +-----------------------------+
9393 | widget-box (or similar) |
9393 | widget-box (or similar) |
9394 | +-------+---------------+ |
9394 | +-------+---------------+ |
9395 | | Label | Actual Widget | |
9395 | | Label | Actual Widget | |
9396 | +-------+---------------+ |
9396 | +-------+---------------+ |
9397 +-----------------------------+
9397 +-----------------------------+
9398 */
9398 */
9399 margin: 5px;
9399 margin: 5px;
9400 /* Old browsers */
9400 /* Old browsers */
9401 -webkit-box-pack: start;
9401 -webkit-box-pack: start;
9402 -moz-box-pack: start;
9402 -moz-box-pack: start;
9403 box-pack: start;
9403 box-pack: start;
9404 /* Modern browsers */
9404 /* Modern browsers */
9405 justify-content: flex-start;
9405 justify-content: flex-start;
9406 /* Box */
9406 /* Box */
9407 box-sizing: border-box;
9407 box-sizing: border-box;
9408 -moz-box-sizing: border-box;
9408 -moz-box-sizing: border-box;
9409 -webkit-box-sizing: border-box;
9409 -webkit-box-sizing: border-box;
9410 /* Old browsers */
9410 /* Old browsers */
9411 -webkit-box-align: start;
9411 -webkit-box-align: start;
9412 -moz-box-align: start;
9412 -moz-box-align: start;
9413 box-align: start;
9413 box-align: start;
9414 /* Modern browsers */
9414 /* Modern browsers */
9415 align-items: flex-start;
9415 align-items: flex-start;
9416 /* Old browsers */
9416 /* Old browsers */
9417 display: -webkit-box;
9417 display: -webkit-box;
9418 -webkit-box-orient: vertical;
9418 -webkit-box-orient: vertical;
9419 -webkit-box-align: stretch;
9419 -webkit-box-align: stretch;
9420 display: -moz-box;
9420 display: -moz-box;
9421 -moz-box-orient: vertical;
9421 -moz-box-orient: vertical;
9422 -moz-box-align: stretch;
9422 -moz-box-align: stretch;
9423 display: box;
9423 display: box;
9424 box-orient: vertical;
9424 box-orient: vertical;
9425 box-align: stretch;
9425 box-align: stretch;
9426 /* Modern browsers */
9426 /* Modern browsers */
9427 display: flex;
9427 display: flex;
9428 flex-direction: column;
9428 flex-direction: column;
9429 align-items: stretch;
9429 align-items: stretch;
9430 /* Old browsers */
9430 /* Old browsers */
9431 -webkit-box-flex: 0;
9431 -webkit-box-flex: 0;
9432 -moz-box-flex: 0;
9432 -moz-box-flex: 0;
9433 box-flex: 0;
9433 box-flex: 0;
9434 /* Modern browsers */
9434 /* Modern browsers */
9435 flex: none;
9435 flex: none;
9436 }
9436 }
9437 .widget-vbox-single {
9437 .widget-vbox-single {
9438 /* For vertical slides */
9438 /* For vertical slides */
9439 /* Vertical widgets */
9439 /* Vertical widgets */
9440 /* The following section sets the style for the invisible div that
9440 /* The following section sets the style for the invisible div that
9441 hold widgets and their accompanying labels.
9441 hold widgets and their accompanying labels.
9442
9442
9443 Looks like this:
9443 Looks like this:
9444 +-----------------------------+
9444 +-----------------------------+
9445 | widget-box (or similar) |
9445 | widget-box (or similar) |
9446 | +-------+---------------+ |
9446 | +-------+---------------+ |
9447 | | Label | Actual Widget | |
9447 | | Label | Actual Widget | |
9448 | +-------+---------------+ |
9448 | +-------+---------------+ |
9449 +-----------------------------+
9449 +-----------------------------+
9450 */
9450 */
9451 margin: 5px;
9451 margin: 5px;
9452 /* Old browsers */
9452 /* Old browsers */
9453 -webkit-box-pack: start;
9453 -webkit-box-pack: start;
9454 -moz-box-pack: start;
9454 -moz-box-pack: start;
9455 box-pack: start;
9455 box-pack: start;
9456 /* Modern browsers */
9456 /* Modern browsers */
9457 justify-content: flex-start;
9457 justify-content: flex-start;
9458 /* Box */
9458 /* Box */
9459 box-sizing: border-box;
9459 box-sizing: border-box;
9460 -moz-box-sizing: border-box;
9460 -moz-box-sizing: border-box;
9461 -webkit-box-sizing: border-box;
9461 -webkit-box-sizing: border-box;
9462 /* Old browsers */
9462 /* Old browsers */
9463 -webkit-box-align: start;
9463 -webkit-box-align: start;
9464 -moz-box-align: start;
9464 -moz-box-align: start;
9465 box-align: start;
9465 box-align: start;
9466 /* Modern browsers */
9466 /* Modern browsers */
9467 align-items: flex-start;
9467 align-items: flex-start;
9468 /* Old browsers */
9468 /* Old browsers */
9469 display: -webkit-box;
9469 display: -webkit-box;
9470 -webkit-box-orient: vertical;
9470 -webkit-box-orient: vertical;
9471 -webkit-box-align: stretch;
9471 -webkit-box-align: stretch;
9472 display: -moz-box;
9472 display: -moz-box;
9473 -moz-box-orient: vertical;
9473 -moz-box-orient: vertical;
9474 -moz-box-align: stretch;
9474 -moz-box-align: stretch;
9475 display: box;
9475 display: box;
9476 box-orient: vertical;
9476 box-orient: vertical;
9477 box-align: stretch;
9477 box-align: stretch;
9478 /* Modern browsers */
9478 /* Modern browsers */
9479 display: flex;
9479 display: flex;
9480 flex-direction: column;
9480 flex-direction: column;
9481 align-items: stretch;
9481 align-items: stretch;
9482 /* Old browsers */
9482 /* Old browsers */
9483 -webkit-box-flex: 0;
9483 -webkit-box-flex: 0;
9484 -moz-box-flex: 0;
9484 -moz-box-flex: 0;
9485 box-flex: 0;
9485 box-flex: 0;
9486 /* Modern browsers */
9486 /* Modern browsers */
9487 flex: none;
9487 flex: none;
9488 width: 30px;
9488 width: 30px;
9489 }
9489 }
9490 .widget-modal {
9490 .widget-modal {
9491 /* Box - ModalView */
9491 /* Box - ModalView */
9492 overflow: hidden;
9492 overflow: hidden;
9493 position: absolute !important;
9493 position: absolute !important;
9494 top: 0px;
9494 top: 0px;
9495 left: 0px;
9495 left: 0px;
9496 margin-left: 0px !important;
9496 margin-left: 0px !important;
9497 }
9497 }
9498 .widget-modal-body {
9498 .widget-modal-body {
9499 /* Box - ModalView Body */
9499 /* Box - ModalView Body */
9500 max-height: none !important;
9500 max-height: none !important;
9501 }
9501 }
9502 .widget-box {
9502 .widget-box {
9503 /* Box */
9503 /* Box */
9504 box-sizing: border-box;
9504 box-sizing: border-box;
9505 -moz-box-sizing: border-box;
9505 -moz-box-sizing: border-box;
9506 -webkit-box-sizing: border-box;
9506 -webkit-box-sizing: border-box;
9507 /* Old browsers */
9507 /* Old browsers */
9508 -webkit-box-align: start;
9508 -webkit-box-align: start;
9509 -moz-box-align: start;
9509 -moz-box-align: start;
9510 box-align: start;
9510 box-align: start;
9511 /* Modern browsers */
9511 /* Modern browsers */
9512 align-items: flex-start;
9512 align-items: flex-start;
9513 }
9513 }
9514 .widget-radio-box {
9514 .widget-radio-box {
9515 /* Contains RadioButtonsWidget */
9515 /* Contains RadioButtonsWidget */
9516 /* Old browsers */
9516 /* Old browsers */
9517 display: -webkit-box;
9517 display: -webkit-box;
9518 -webkit-box-orient: vertical;
9518 -webkit-box-orient: vertical;
9519 -webkit-box-align: stretch;
9519 -webkit-box-align: stretch;
9520 display: -moz-box;
9520 display: -moz-box;
9521 -moz-box-orient: vertical;
9521 -moz-box-orient: vertical;
9522 -moz-box-align: stretch;
9522 -moz-box-align: stretch;
9523 display: box;
9523 display: box;
9524 box-orient: vertical;
9524 box-orient: vertical;
9525 box-align: stretch;
9525 box-align: stretch;
9526 /* Modern browsers */
9526 /* Modern browsers */
9527 display: flex;
9527 display: flex;
9528 flex-direction: column;
9528 flex-direction: column;
9529 align-items: stretch;
9529 align-items: stretch;
9530 /* Old browsers */
9530 /* Old browsers */
9531 -webkit-box-flex: 0;
9531 -webkit-box-flex: 0;
9532 -moz-box-flex: 0;
9532 -moz-box-flex: 0;
9533 box-flex: 0;
9533 box-flex: 0;
9534 /* Modern browsers */
9534 /* Modern browsers */
9535 flex: none;
9535 flex: none;
9536 box-sizing: border-box;
9536 box-sizing: border-box;
9537 -moz-box-sizing: border-box;
9537 -moz-box-sizing: border-box;
9538 -webkit-box-sizing: border-box;
9538 -webkit-box-sizing: border-box;
9539 padding-top: 4px;
9539 padding-top: 4px;
9540 }
9540 }
9541 .widget-radio-box label {
9541 .widget-radio-box label {
9542 margin-top: 0px;
9542 margin-top: 0px;
9543 }
9543 }
9544 .docked-widget-modal {
9544 .docked-widget-modal {
9545 /* Horizontal Label */
9545 /* Horizontal Label */
9546 overflow: hidden;
9546 overflow: hidden;
9547 position: relative !important;
9547 position: relative !important;
9548 top: 0px !important;
9548 top: 0px !important;
9549 left: 0px !important;
9549 left: 0px !important;
9550 margin-left: 0px !important;
9550 margin-left: 0px !important;
9551 }
9551 }
9552 /*!
9552 /*!
9553 *
9553 *
9554 * IPython notebook webapp
9554 * IPython notebook webapp
9555 *
9555 *
9556 */
9556 */
9557 body {
9557 body {
9558 background-color: #ffffff;
9558 background-color: #ffffff;
9559 }
9559 }
9560 body.notebook_app {
9560 body.notebook_app {
9561 overflow: hidden;
9561 overflow: hidden;
9562 }
9562 }
9563 @media (max-width: 767px) {
9563 @media (max-width: 767px) {
9564 body.notebook_app {
9564 body.notebook_app {
9565 padding-left: 0px;
9565 padding-left: 0px;
9566 padding-right: 0px;
9566 padding-right: 0px;
9567 }
9567 }
9568 }
9568 }
9569 #ipython-main-app {
9569 #ipython-main-app {
9570 box-sizing: border-box;
9570 box-sizing: border-box;
9571 -moz-box-sizing: border-box;
9571 -moz-box-sizing: border-box;
9572 -webkit-box-sizing: border-box;
9572 -webkit-box-sizing: border-box;
9573 }
9573 }
9574 span#notebook_name {
9574 span#notebook_name {
9575 height: 1em;
9575 height: 1em;
9576 line-height: 1em;
9576 line-height: 1em;
9577 padding: 3px;
9577 padding: 3px;
9578 border: none;
9578 border: none;
9579 font-size: 146.5%;
9579 font-size: 146.5%;
9580 }
9580 }
9581 div#notebook_panel {
9581 div#notebook_panel {
9582 margin: 0px 0px 0px 0px;
9582 margin: 0px 0px 0px 0px;
9583 padding: 0px;
9583 padding: 0px;
9584 -webkit-box-shadow: inset 1px 4px 9px -6px rgba(0, 0, 0, 0.25);
9584 -webkit-box-shadow: inset 1px 4px 9px -6px rgba(0, 0, 0, 0.25);
9585 box-shadow: inset 1px 4px 9px -6px rgba(0, 0, 0, 0.25);
9585 box-shadow: inset 1px 4px 9px -6px rgba(0, 0, 0, 0.25);
9586 box-sizing: border-box;
9586 box-sizing: border-box;
9587 -moz-box-sizing: border-box;
9587 -moz-box-sizing: border-box;
9588 -webkit-box-sizing: border-box;
9588 -webkit-box-sizing: border-box;
9589 }
9589 }
9590 div#notebook {
9590 div#notebook {
9591 font-size: 14px;
9591 font-size: 14px;
9592 line-height: 20px;
9592 line-height: 20px;
9593 overflow-y: scroll;
9593 overflow-y: scroll;
9594 overflow-x: auto;
9594 overflow-x: auto;
9595 width: 100%;
9595 width: 100%;
9596 /* This spaces the cell away from the edge of the notebook area */
9596 /* This spaces the cell away from the edge of the notebook area */
9597 padding: 1em 0 1em 0;
9597 padding: 1em 0 1em 0;
9598 margin: 0px;
9598 margin: 0px;
9599 border-top: 1px solid #e7e7e7;
9599 border-top: 1px solid #e7e7e7;
9600 outline: none;
9600 outline: none;
9601 box-sizing: border-box;
9601 box-sizing: border-box;
9602 -moz-box-sizing: border-box;
9602 -moz-box-sizing: border-box;
9603 -webkit-box-sizing: border-box;
9603 -webkit-box-sizing: border-box;
9604 }
9604 }
9605 div.ui-widget-content {
9605 div.ui-widget-content {
9606 border: 1px solid #ababab;
9606 border: 1px solid #ababab;
9607 outline: none;
9607 outline: none;
9608 }
9608 }
9609 pre.dialog {
9609 pre.dialog {
9610 background-color: #f7f7f7;
9610 background-color: #f7f7f7;
9611 border: 1px solid #ddd;
9611 border: 1px solid #ddd;
9612 border-radius: 4px;
9612 border-radius: 4px;
9613 padding: 0.4em;
9613 padding: 0.4em;
9614 padding-left: 2em;
9614 padding-left: 2em;
9615 }
9615 }
9616 p.dialog {
9616 p.dialog {
9617 padding: 0.2em;
9617 padding: 0.2em;
9618 }
9618 }
9619 /* Word-wrap output correctly. This is the CSS3 spelling, though Firefox seems
9619 /* Word-wrap output correctly. This is the CSS3 spelling, though Firefox seems
9620 to not honor it correctly. Webkit browsers (Chrome, rekonq, Safari) do.
9620 to not honor it correctly. Webkit browsers (Chrome, rekonq, Safari) do.
9621 */
9621 */
9622 pre,
9622 pre,
9623 code,
9623 code,
9624 kbd,
9624 kbd,
9625 samp {
9625 samp {
9626 white-space: pre-wrap;
9626 white-space: pre-wrap;
9627 }
9627 }
9628 #fonttest {
9628 #fonttest {
9629 font-family: monospace;
9629 font-family: monospace;
9630 }
9630 }
9631 p {
9631 p {
9632 margin-bottom: 0;
9632 margin-bottom: 0;
9633 }
9633 }
9634 .end_space {
9634 .end_space {
9635 height: 200px;
9635 height: 200px;
9636 }
9636 }
9637 /* CSS for the cell toolbar */
9637 /* CSS for the cell toolbar */
9638 .celltoolbar {
9638 .celltoolbar {
9639 border: thin solid #CFCFCF;
9639 border: thin solid #CFCFCF;
9640 border-bottom: none;
9640 border-bottom: none;
9641 background: #EEE;
9641 background: #EEE;
9642 border-radius: 3px 3px 0px 0px;
9642 border-radius: 3px 3px 0px 0px;
9643 width: 100%;
9643 width: 100%;
9644 -webkit-box-pack: end;
9644 -webkit-box-pack: end;
9645 height: 29px;
9645 height: 29px;
9646 padding-right: 4px;
9646 padding-right: 4px;
9647 /* Old browsers */
9647 /* Old browsers */
9648 display: -webkit-box;
9648 display: -webkit-box;
9649 -webkit-box-orient: horizontal;
9649 -webkit-box-orient: horizontal;
9650 -webkit-box-align: stretch;
9650 -webkit-box-align: stretch;
9651 display: -moz-box;
9651 display: -moz-box;
9652 -moz-box-orient: horizontal;
9652 -moz-box-orient: horizontal;
9653 -moz-box-align: stretch;
9653 -moz-box-align: stretch;
9654 display: box;
9654 display: box;
9655 box-orient: horizontal;
9655 box-orient: horizontal;
9656 box-align: stretch;
9656 box-align: stretch;
9657 /* Modern browsers */
9657 /* Modern browsers */
9658 display: flex;
9658 display: flex;
9659 flex-direction: row;
9659 flex-direction: row;
9660 align-items: stretch;
9660 align-items: stretch;
9661 /* Old browsers */
9661 /* Old browsers */
9662 -webkit-box-flex: 0;
9662 -webkit-box-flex: 0;
9663 -moz-box-flex: 0;
9663 -moz-box-flex: 0;
9664 box-flex: 0;
9664 box-flex: 0;
9665 /* Modern browsers */
9665 /* Modern browsers */
9666 flex: none;
9666 flex: none;
9667 /* Old browsers */
9667 /* Old browsers */
9668 -webkit-box-direction: reverse;
9668 -webkit-box-direction: reverse;
9669 -moz-box-direction: reverse;
9669 -moz-box-direction: reverse;
9670 box-direction: reverse;
9670 box-direction: reverse;
9671 /* Modern browsers */
9671 /* Modern browsers */
9672 flex-direction: row-reverse;
9672 flex-direction: row-reverse;
9673 }
9673 }
9674 .ctb_hideshow {
9674 .ctb_hideshow {
9675 display: none;
9675 display: none;
9676 vertical-align: bottom;
9676 vertical-align: bottom;
9677 }
9677 }
9678 /* ctb_show is added to the ctb_hideshow div to show the cell toolbar.
9678 /* ctb_show is added to the ctb_hideshow div to show the cell toolbar.
9679 Cell toolbars are only shown when the ctb_global_show class is also set.
9679 Cell toolbars are only shown when the ctb_global_show class is also set.
9680 */
9680 */
9681 .ctb_global_show .ctb_show.ctb_hideshow {
9681 .ctb_global_show .ctb_show.ctb_hideshow {
9682 display: block;
9682 display: block;
9683 }
9683 }
9684 .ctb_global_show .ctb_show + .input_area,
9684 .ctb_global_show .ctb_show + .input_area,
9685 .ctb_global_show .ctb_show + div.text_cell_input {
9685 .ctb_global_show .ctb_show + div.text_cell_input {
9686 border-top-right-radius: 0px;
9686 border-top-right-radius: 0px;
9687 border-top-left-radius: 0px;
9687 border-top-left-radius: 0px;
9688 }
9688 }
9689 .celltoolbar {
9689 .celltoolbar {
9690 font-size: 87%;
9690 font-size: 87%;
9691 padding-top: 3px;
9691 padding-top: 3px;
9692 }
9692 }
9693 .celltoolbar select {
9693 .celltoolbar select {
9694 font-size: 87%;
9694 font-size: 87%;
9695 height: 22px;
9695 height: 22px;
9696 }
9696 }
9697 .celltoolbar label {
9697 .celltoolbar label {
9698 margin-left: 5px;
9698 margin-left: 5px;
9699 margin-right: 5px;
9699 margin-right: 5px;
9700 }
9700 }
9701 .completions {
9701 .completions {
9702 position: absolute;
9702 position: absolute;
9703 z-index: 10;
9703 z-index: 10;
9704 overflow: hidden;
9704 overflow: hidden;
9705 border: 1px solid #ababab;
9705 border: 1px solid #ababab;
9706 border-radius: 4px;
9706 border-radius: 4px;
9707 -webkit-box-shadow: 0px 6px 10px -1px #adadad;
9707 -webkit-box-shadow: 0px 6px 10px -1px #adadad;
9708 box-shadow: 0px 6px 10px -1px #adadad;
9708 box-shadow: 0px 6px 10px -1px #adadad;
9709 }
9709 }
9710 .completions select {
9710 .completions select {
9711 background: white;
9711 background: white;
9712 outline: none;
9712 outline: none;
9713 border: none;
9713 border: none;
9714 padding: 0px;
9714 padding: 0px;
9715 margin: 0px;
9715 margin: 0px;
9716 overflow: auto;
9716 overflow: auto;
9717 font-family: monospace;
9717 font-family: monospace;
9718 font-size: 110%;
9718 font-size: 110%;
9719 color: #000000;
9719 color: #000000;
9720 width: auto;
9720 width: auto;
9721 }
9721 }
9722 .completions select option.context {
9722 .completions select option.context {
9723 color: #3071a9;
9723 color: #3071a9;
9724 }
9724 }
9725 #kernel_selector_widget {
9725 #kernel_selector_widget {
9726 margin-right: 1em;
9726 margin-right: 1em;
9727 float: right;
9727 float: right;
9728 }
9728 }
9729 #kernel_selector_widget > button {
9729 #kernel_selector_widget > button {
9730 display: inline-block;
9730 display: inline-block;
9731 margin-bottom: 0;
9731 margin-bottom: 0;
9732 font-weight: normal;
9732 font-weight: normal;
9733 text-align: center;
9733 text-align: center;
9734 vertical-align: middle;
9734 vertical-align: middle;
9735 cursor: pointer;
9735 cursor: pointer;
9736 background-image: none;
9736 background-image: none;
9737 border: 1px solid transparent;
9737 border: 1px solid transparent;
9738 white-space: nowrap;
9738 white-space: nowrap;
9739 padding: 6px 12px;
9739 padding: 6px 12px;
9740 font-size: 13px;
9740 font-size: 13px;
9741 line-height: 1.42857143;
9741 line-height: 1.42857143;
9742 border-radius: 4px;
9742 border-radius: 4px;
9743 -webkit-user-select: none;
9743 -webkit-user-select: none;
9744 -moz-user-select: none;
9744 -moz-user-select: none;
9745 -ms-user-select: none;
9745 -ms-user-select: none;
9746 user-select: none;
9746 user-select: none;
9747 color: #333333;
9747 color: #333333;
9748 background-color: #ffffff;
9748 background-color: #ffffff;
9749 border-color: #cccccc;
9749 border-color: #cccccc;
9750 padding: 5px 10px;
9750 padding: 5px 10px;
9751 font-size: 12px;
9751 font-size: 12px;
9752 line-height: 1.5;
9752 line-height: 1.5;
9753 border-radius: 3px;
9753 border-radius: 3px;
9754 }
9754 }
9755 #kernel_selector_widget > button:focus,
9755 #kernel_selector_widget > button:focus,
9756 #kernel_selector_widget > button:active:focus,
9756 #kernel_selector_widget > button:active:focus,
9757 #kernel_selector_widget > button.active:focus {
9757 #kernel_selector_widget > button.active:focus {
9758 outline: thin dotted;
9758 outline: thin dotted;
9759 outline: 5px auto -webkit-focus-ring-color;
9759 outline: 5px auto -webkit-focus-ring-color;
9760 outline-offset: -2px;
9760 outline-offset: -2px;
9761 }
9761 }
9762 #kernel_selector_widget > button:hover,
9762 #kernel_selector_widget > button:hover,
9763 #kernel_selector_widget > button:focus {
9763 #kernel_selector_widget > button:focus {
9764 color: #333333;
9764 color: #333333;
9765 text-decoration: none;
9765 text-decoration: none;
9766 }
9766 }
9767 #kernel_selector_widget > button:active,
9767 #kernel_selector_widget > button:active,
9768 #kernel_selector_widget > button.active {
9768 #kernel_selector_widget > button.active {
9769 outline: 0;
9769 outline: 0;
9770 background-image: none;
9770 background-image: none;
9771 -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
9771 -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
9772 box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
9772 box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
9773 }
9773 }
9774 #kernel_selector_widget > button.disabled,
9774 #kernel_selector_widget > button.disabled,
9775 #kernel_selector_widget > button[disabled],
9775 #kernel_selector_widget > button[disabled],
9776 fieldset[disabled] #kernel_selector_widget > button {
9776 fieldset[disabled] #kernel_selector_widget > button {
9777 cursor: not-allowed;
9777 cursor: not-allowed;
9778 pointer-events: none;
9778 pointer-events: none;
9779 opacity: 0.65;
9779 opacity: 0.65;
9780 filter: alpha(opacity=65);
9780 filter: alpha(opacity=65);
9781 -webkit-box-shadow: none;
9781 -webkit-box-shadow: none;
9782 box-shadow: none;
9782 box-shadow: none;
9783 }
9783 }
9784 #kernel_selector_widget > button:hover,
9784 #kernel_selector_widget > button:hover,
9785 #kernel_selector_widget > button:focus,
9785 #kernel_selector_widget > button:focus,
9786 #kernel_selector_widget > button:active,
9786 #kernel_selector_widget > button:active,
9787 #kernel_selector_widget > button.active,
9787 #kernel_selector_widget > button.active,
9788 .open .dropdown-toggle#kernel_selector_widget > button {
9788 .open .dropdown-toggle#kernel_selector_widget > button {
9789 color: #333333;
9789 color: #333333;
9790 background-color: #ebebeb;
9790 background-color: #ebebeb;
9791 border-color: #adadad;
9791 border-color: #adadad;
9792 }
9792 }
9793 #kernel_selector_widget > button:active,
9793 #kernel_selector_widget > button:active,
9794 #kernel_selector_widget > button.active,
9794 #kernel_selector_widget > button.active,
9795 .open .dropdown-toggle#kernel_selector_widget > button {
9795 .open .dropdown-toggle#kernel_selector_widget > button {
9796 background-image: none;
9796 background-image: none;
9797 }
9797 }
9798 #kernel_selector_widget > button.disabled,
9798 #kernel_selector_widget > button.disabled,
9799 #kernel_selector_widget > button[disabled],
9799 #kernel_selector_widget > button[disabled],
9800 fieldset[disabled] #kernel_selector_widget > button,
9800 fieldset[disabled] #kernel_selector_widget > button,
9801 #kernel_selector_widget > button.disabled:hover,
9801 #kernel_selector_widget > button.disabled:hover,
9802 #kernel_selector_widget > button[disabled]:hover,
9802 #kernel_selector_widget > button[disabled]:hover,
9803 fieldset[disabled] #kernel_selector_widget > button:hover,
9803 fieldset[disabled] #kernel_selector_widget > button:hover,
9804 #kernel_selector_widget > button.disabled:focus,
9804 #kernel_selector_widget > button.disabled:focus,
9805 #kernel_selector_widget > button[disabled]:focus,
9805 #kernel_selector_widget > button[disabled]:focus,
9806 fieldset[disabled] #kernel_selector_widget > button:focus,
9806 fieldset[disabled] #kernel_selector_widget > button:focus,
9807 #kernel_selector_widget > button.disabled:active,
9807 #kernel_selector_widget > button.disabled:active,
9808 #kernel_selector_widget > button[disabled]:active,
9808 #kernel_selector_widget > button[disabled]:active,
9809 fieldset[disabled] #kernel_selector_widget > button:active,
9809 fieldset[disabled] #kernel_selector_widget > button:active,
9810 #kernel_selector_widget > button.disabled.active,
9810 #kernel_selector_widget > button.disabled.active,
9811 #kernel_selector_widget > button[disabled].active,
9811 #kernel_selector_widget > button[disabled].active,
9812 fieldset[disabled] #kernel_selector_widget > button.active {
9812 fieldset[disabled] #kernel_selector_widget > button.active {
9813 background-color: #ffffff;
9813 background-color: #ffffff;
9814 border-color: #cccccc;
9814 border-color: #cccccc;
9815 }
9815 }
9816 #kernel_selector_widget > button .badge {
9816 #kernel_selector_widget > button .badge {
9817 color: #ffffff;
9817 color: #ffffff;
9818 background-color: #333333;
9818 background-color: #333333;
9819 }
9819 }
9820 #kernel_selector_widget > button > span.caret {
9820 #kernel_selector_widget > button > span.caret {
9821 margin-top: 0px;
9821 margin-top: 0px;
9822 }
9822 }
9823 #menubar {
9823 #menubar {
9824 margin-top: 0px;
9824 margin-top: 0px;
9825 margin-bottom: -19px;
9825 margin-bottom: -19px;
9826 position: relative;
9826 position: relative;
9827 box-sizing: border-box;
9827 box-sizing: border-box;
9828 -moz-box-sizing: border-box;
9828 -moz-box-sizing: border-box;
9829 -webkit-box-sizing: border-box;
9829 -webkit-box-sizing: border-box;
9830 }
9830 }
9831 #menubar .navbar {
9831 #menubar .navbar {
9832 border-top: 1px;
9832 border-top: 1px;
9833 border-radius: 0px 0px 4px 4px;
9833 border-radius: 0px 0px 4px 4px;
9834 }
9834 }
9835 #menubar li.dropdown {
9835 #menubar li.dropdown {
9836 line-height: 12px;
9836 line-height: 12px;
9837 }
9837 }
9838 #menubar li.dropdown a {
9838 #menubar li.dropdown a {
9839 padding-top: 6px;
9839 padding-top: 6px;
9840 padding-bottom: 5px;
9840 padding-bottom: 5px;
9841 }
9841 }
9842 #menubar ul.navbar-right {
9842 #menubar ul.navbar-right {
9843 padding-top: 2px;
9843 padding-top: 2px;
9844 }
9844 }
9845 .nav-wrapper {
9845 .nav-wrapper {
9846 border-bottom: 1px solid #e7e7e7;
9846 border-bottom: 1px solid #e7e7e7;
9847 }
9847 }
9848 i.menu-icon {
9848 i.menu-icon {
9849 padding-top: 4px;
9849 padding-top: 4px;
9850 }
9850 }
9851 ul#help_menu li a {
9851 ul#help_menu li a {
9852 overflow: hidden;
9852 overflow: hidden;
9853 padding-right: 2.2em;
9853 padding-right: 2.2em;
9854 }
9854 }
9855 ul#help_menu li a i {
9855 ul#help_menu li a i {
9856 margin-right: -1.2em;
9856 margin-right: -1.2em;
9857 }
9857 }
9858 #menus {
9858 #menus {
9859 min-height: 30px;
9859 min-height: 30px;
9860 }
9860 }
9861 .dropdown-submenu {
9861 .dropdown-submenu {
9862 position: relative;
9862 position: relative;
9863 }
9863 }
9864 .dropdown-submenu > .dropdown-menu {
9864 .dropdown-submenu > .dropdown-menu {
9865 top: 0;
9865 top: 0;
9866 left: 100%;
9866 left: 100%;
9867 margin-top: -6px;
9867 margin-top: -6px;
9868 margin-left: -1px;
9868 margin-left: -1px;
9869 -webkit-border-radius: 0 6px 6px 6px;
9869 -webkit-border-radius: 0 6px 6px 6px;
9870 -moz-border-radius: 0 6px 6px 6px;
9870 -moz-border-radius: 0 6px 6px 6px;
9871 border-radius: 0 6px 6px 6px;
9871 border-radius: 0 6px 6px 6px;
9872 }
9872 }
9873 .dropdown-submenu:hover > .dropdown-menu {
9873 .dropdown-submenu:hover > .dropdown-menu {
9874 display: block;
9874 display: block;
9875 }
9875 }
9876 .dropdown-submenu > a:after {
9876 .dropdown-submenu > a:after {
9877 display: block;
9877 display: block;
9878 content: " ";
9878 content: " ";
9879 float: right;
9879 float: right;
9880 width: 0;
9880 width: 0;
9881 height: 0;
9881 height: 0;
9882 border-color: transparent;
9882 border-color: transparent;
9883 border-style: solid;
9883 border-style: solid;
9884 border-width: 5px 0 5px 5px;
9884 border-width: 5px 0 5px 5px;
9885 border-left-color: #cccccc;
9885 border-left-color: #cccccc;
9886 margin-top: 5px;
9886 margin-top: 5px;
9887 margin-right: -10px;
9887 margin-right: -10px;
9888 }
9888 }
9889 .dropdown-submenu:hover > a:after {
9889 .dropdown-submenu:hover > a:after {
9890 border-left-color: #ffffff;
9890 border-left-color: #ffffff;
9891 }
9891 }
9892 .dropdown-submenu.pull-left {
9892 .dropdown-submenu.pull-left {
9893 float: none;
9893 float: none;
9894 }
9894 }
9895 .dropdown-submenu.pull-left > .dropdown-menu {
9895 .dropdown-submenu.pull-left > .dropdown-menu {
9896 left: -100%;
9896 left: -100%;
9897 margin-left: 10px;
9897 margin-left: 10px;
9898 -webkit-border-radius: 6px 0 6px 6px;
9898 -webkit-border-radius: 6px 0 6px 6px;
9899 -moz-border-radius: 6px 0 6px 6px;
9899 -moz-border-radius: 6px 0 6px 6px;
9900 border-radius: 6px 0 6px 6px;
9900 border-radius: 6px 0 6px 6px;
9901 }
9901 }
9902 #notification_area {
9902 #notification_area {
9903 float: right !important;
9903 float: right !important;
9904 float: right;
9904 float: right;
9905 z-index: 10;
9905 z-index: 10;
9906 }
9906 }
9907 .indicator_area {
9907 .indicator_area {
9908 color: #777777;
9908 color: #777777;
9909 padding: 4px 3px;
9909 padding: 4px 3px;
9910 margin: 0px;
9910 margin: 0px;
9911 width: 11px;
9911 width: 11px;
9912 z-index: 10;
9912 z-index: 10;
9913 text-align: center;
9913 text-align: center;
9914 }
9914 }
9915 #kernel_indicator {
9915 #kernel_indicator {
9916 float: right !important;
9916 float: right !important;
9917 float: right;
9917 float: right;
9918 color: #777777;
9918 color: #777777;
9919 padding: 4px 3px;
9919 padding: 4px 3px;
9920 margin: 0px;
9920 margin: 0px;
9921 width: 11px;
9921 width: 11px;
9922 z-index: 10;
9922 z-index: 10;
9923 text-align: center;
9923 text-align: center;
9924 margin-right: 12px;
9924 margin-right: 12px;
9925 }
9925 }
9926 #modal_indicator {
9926 #modal_indicator {
9927 float: right !important;
9927 float: right !important;
9928 float: right;
9928 float: right;
9929 color: #777777;
9929 color: #777777;
9930 padding: 4px 3px;
9930 padding: 4px 3px;
9931 margin: 0px;
9931 margin: 0px;
9932 width: 11px;
9932 width: 11px;
9933 z-index: 10;
9933 z-index: 10;
9934 text-align: center;
9934 text-align: center;
9935 margin-right: 5px;
9935 margin-right: 5px;
9936 }
9936 }
9937 .edit_mode_icon:before {
9937 .edit_mode_icon:before {
9938 display: inline-block;
9938 display: inline-block;
9939 font-family: FontAwesome;
9939 font-family: FontAwesome;
9940 font-style: normal;
9940 font-style: normal;
9941 font-weight: normal;
9941 font-weight: normal;
9942 line-height: 1;
9942 line-height: 1;
9943 -webkit-font-smoothing: antialiased;
9943 -webkit-font-smoothing: antialiased;
9944 -moz-osx-font-smoothing: grayscale;
9944 -moz-osx-font-smoothing: grayscale;
9945 content: "\f040";
9945 content: "\f040";
9946 }
9946 }
9947 .edit_mode_icon:before.pull-left {
9947 .edit_mode_icon:before.pull-left {
9948 margin-right: .3em;
9948 margin-right: .3em;
9949 }
9949 }
9950 .edit_mode_icon:before.pull-right {
9950 .edit_mode_icon:before.pull-right {
9951 margin-left: .3em;
9951 margin-left: .3em;
9952 }
9952 }
9953 .command_mode_icon:before {
9953 .command_mode_icon:before {
9954 display: inline-block;
9954 display: inline-block;
9955 font-family: FontAwesome;
9955 font-family: FontAwesome;
9956 font-style: normal;
9956 font-style: normal;
9957 font-weight: normal;
9957 font-weight: normal;
9958 line-height: 1;
9958 line-height: 1;
9959 -webkit-font-smoothing: antialiased;
9959 -webkit-font-smoothing: antialiased;
9960 -moz-osx-font-smoothing: grayscale;
9960 -moz-osx-font-smoothing: grayscale;
9961 content: ' ';
9961 content: ' ';
9962 }
9962 }
9963 .command_mode_icon:before.pull-left {
9963 .command_mode_icon:before.pull-left {
9964 margin-right: .3em;
9964 margin-right: .3em;
9965 }
9965 }
9966 .command_mode_icon:before.pull-right {
9966 .command_mode_icon:before.pull-right {
9967 margin-left: .3em;
9967 margin-left: .3em;
9968 }
9968 }
9969 .kernel_idle_icon:before {
9969 .kernel_idle_icon:before {
9970 display: inline-block;
9970 display: inline-block;
9971 font-family: FontAwesome;
9971 font-family: FontAwesome;
9972 font-style: normal;
9972 font-style: normal;
9973 font-weight: normal;
9973 font-weight: normal;
9974 line-height: 1;
9974 line-height: 1;
9975 -webkit-font-smoothing: antialiased;
9975 -webkit-font-smoothing: antialiased;
9976 -moz-osx-font-smoothing: grayscale;
9976 -moz-osx-font-smoothing: grayscale;
9977 content: "\f10c";
9977 content: "\f10c";
9978 }
9978 }
9979 .kernel_idle_icon:before.pull-left {
9979 .kernel_idle_icon:before.pull-left {
9980 margin-right: .3em;
9980 margin-right: .3em;
9981 }
9981 }
9982 .kernel_idle_icon:before.pull-right {
9982 .kernel_idle_icon:before.pull-right {
9983 margin-left: .3em;
9983 margin-left: .3em;
9984 }
9984 }
9985 .kernel_busy_icon:before {
9985 .kernel_busy_icon:before {
9986 display: inline-block;
9986 display: inline-block;
9987 font-family: FontAwesome;
9987 font-family: FontAwesome;
9988 font-style: normal;
9988 font-style: normal;
9989 font-weight: normal;
9989 font-weight: normal;
9990 line-height: 1;
9990 line-height: 1;
9991 -webkit-font-smoothing: antialiased;
9991 -webkit-font-smoothing: antialiased;
9992 -moz-osx-font-smoothing: grayscale;
9992 -moz-osx-font-smoothing: grayscale;
9993 content: "\f111";
9993 content: "\f111";
9994 }
9994 }
9995 .kernel_busy_icon:before.pull-left {
9995 .kernel_busy_icon:before.pull-left {
9996 margin-right: .3em;
9996 margin-right: .3em;
9997 }
9997 }
9998 .kernel_busy_icon:before.pull-right {
9998 .kernel_busy_icon:before.pull-right {
9999 margin-left: .3em;
9999 margin-left: .3em;
10000 }
10000 }
10001 .kernel_dead_icon:before {
10002 display: inline-block;
10003 font-family: FontAwesome;
10004 font-style: normal;
10005 font-weight: normal;
10006 line-height: 1;
10007 -webkit-font-smoothing: antialiased;
10008 -moz-osx-font-smoothing: grayscale;
10009 content: "\f1e2";
10010 }
10011 .kernel_dead_icon:before.pull-left {
10012 margin-right: .3em;
10013 }
10014 .kernel_dead_icon:before.pull-right {
10015 margin-left: .3em;
10016 }
10017 .kernel_disconnected_icon:before {
10018 display: inline-block;
10019 font-family: FontAwesome;
10020 font-style: normal;
10021 font-weight: normal;
10022 line-height: 1;
10023 -webkit-font-smoothing: antialiased;
10024 -moz-osx-font-smoothing: grayscale;
10025 content: "\f127";
10026 }
10027 .kernel_disconnected_icon:before.pull-left {
10028 margin-right: .3em;
10029 }
10030 .kernel_disconnected_icon:before.pull-right {
10031 margin-left: .3em;
10032 }
10001 .notification_widget {
10033 .notification_widget {
10002 color: #777777;
10034 color: #777777;
10003 padding: 1px 12px;
10035 padding: 1px 12px;
10004 margin: 2px 4px;
10036 margin: 2px 4px;
10005 z-index: 10;
10037 z-index: 10;
10006 background: rgba(240, 240, 240, 0.5);
10038 background: rgba(240, 240, 240, 0.5);
10007 float: right !important;
10039 float: right !important;
10008 float: right;
10040 float: right;
10009 box-sizing: border-box;
10041 box-sizing: border-box;
10010 -moz-box-sizing: border-box;
10042 -moz-box-sizing: border-box;
10011 -webkit-box-sizing: border-box;
10043 -webkit-box-sizing: border-box;
10012 display: inline-block;
10044 display: inline-block;
10013 margin-bottom: 0;
10045 margin-bottom: 0;
10014 font-weight: normal;
10046 font-weight: normal;
10015 text-align: center;
10047 text-align: center;
10016 vertical-align: middle;
10048 vertical-align: middle;
10017 cursor: pointer;
10049 cursor: pointer;
10018 background-image: none;
10050 background-image: none;
10019 border: 1px solid transparent;
10051 border: 1px solid transparent;
10020 white-space: nowrap;
10052 white-space: nowrap;
10021 padding: 6px 12px;
10053 padding: 6px 12px;
10022 font-size: 13px;
10054 font-size: 13px;
10023 line-height: 1.42857143;
10055 line-height: 1.42857143;
10024 border-radius: 4px;
10056 border-radius: 4px;
10025 -webkit-user-select: none;
10057 -webkit-user-select: none;
10026 -moz-user-select: none;
10058 -moz-user-select: none;
10027 -ms-user-select: none;
10059 -ms-user-select: none;
10028 user-select: none;
10060 user-select: none;
10029 color: #333333;
10061 color: #333333;
10030 background-color: #ffffff;
10062 background-color: #ffffff;
10031 border-color: #cccccc;
10063 border-color: #cccccc;
10032 padding: 1px 5px;
10064 padding: 1px 5px;
10033 font-size: 12px;
10065 font-size: 12px;
10034 line-height: 1.5;
10066 line-height: 1.5;
10035 border-radius: 3px;
10067 border-radius: 3px;
10036 }
10068 }
10037 .notification_widget:focus,
10069 .notification_widget:focus,
10038 .notification_widget:active:focus,
10070 .notification_widget:active:focus,
10039 .notification_widget.active:focus {
10071 .notification_widget.active:focus {
10040 outline: thin dotted;
10072 outline: thin dotted;
10041 outline: 5px auto -webkit-focus-ring-color;
10073 outline: 5px auto -webkit-focus-ring-color;
10042 outline-offset: -2px;
10074 outline-offset: -2px;
10043 }
10075 }
10044 .notification_widget:hover,
10076 .notification_widget:hover,
10045 .notification_widget:focus {
10077 .notification_widget:focus {
10046 color: #333333;
10078 color: #333333;
10047 text-decoration: none;
10079 text-decoration: none;
10048 }
10080 }
10049 .notification_widget:active,
10081 .notification_widget:active,
10050 .notification_widget.active {
10082 .notification_widget.active {
10051 outline: 0;
10083 outline: 0;
10052 background-image: none;
10084 background-image: none;
10053 -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
10085 -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
10054 box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
10086 box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
10055 }
10087 }
10056 .notification_widget.disabled,
10088 .notification_widget.disabled,
10057 .notification_widget[disabled],
10089 .notification_widget[disabled],
10058 fieldset[disabled] .notification_widget {
10090 fieldset[disabled] .notification_widget {
10059 cursor: not-allowed;
10091 cursor: not-allowed;
10060 pointer-events: none;
10092 pointer-events: none;
10061 opacity: 0.65;
10093 opacity: 0.65;
10062 filter: alpha(opacity=65);
10094 filter: alpha(opacity=65);
10063 -webkit-box-shadow: none;
10095 -webkit-box-shadow: none;
10064 box-shadow: none;
10096 box-shadow: none;
10065 }
10097 }
10066 .notification_widget:hover,
10098 .notification_widget:hover,
10067 .notification_widget:focus,
10099 .notification_widget:focus,
10068 .notification_widget:active,
10100 .notification_widget:active,
10069 .notification_widget.active,
10101 .notification_widget.active,
10070 .open .dropdown-toggle.notification_widget {
10102 .open .dropdown-toggle.notification_widget {
10071 color: #333333;
10103 color: #333333;
10072 background-color: #ebebeb;
10104 background-color: #ebebeb;
10073 border-color: #adadad;
10105 border-color: #adadad;
10074 }
10106 }
10075 .notification_widget:active,
10107 .notification_widget:active,
10076 .notification_widget.active,
10108 .notification_widget.active,
10077 .open .dropdown-toggle.notification_widget {
10109 .open .dropdown-toggle.notification_widget {
10078 background-image: none;
10110 background-image: none;
10079 }
10111 }
10080 .notification_widget.disabled,
10112 .notification_widget.disabled,
10081 .notification_widget[disabled],
10113 .notification_widget[disabled],
10082 fieldset[disabled] .notification_widget,
10114 fieldset[disabled] .notification_widget,
10083 .notification_widget.disabled:hover,
10115 .notification_widget.disabled:hover,
10084 .notification_widget[disabled]:hover,
10116 .notification_widget[disabled]:hover,
10085 fieldset[disabled] .notification_widget:hover,
10117 fieldset[disabled] .notification_widget:hover,
10086 .notification_widget.disabled:focus,
10118 .notification_widget.disabled:focus,
10087 .notification_widget[disabled]:focus,
10119 .notification_widget[disabled]:focus,
10088 fieldset[disabled] .notification_widget:focus,
10120 fieldset[disabled] .notification_widget:focus,
10089 .notification_widget.disabled:active,
10121 .notification_widget.disabled:active,
10090 .notification_widget[disabled]:active,
10122 .notification_widget[disabled]:active,
10091 fieldset[disabled] .notification_widget:active,
10123 fieldset[disabled] .notification_widget:active,
10092 .notification_widget.disabled.active,
10124 .notification_widget.disabled.active,
10093 .notification_widget[disabled].active,
10125 .notification_widget[disabled].active,
10094 fieldset[disabled] .notification_widget.active {
10126 fieldset[disabled] .notification_widget.active {
10095 background-color: #ffffff;
10127 background-color: #ffffff;
10096 border-color: #cccccc;
10128 border-color: #cccccc;
10097 }
10129 }
10098 .notification_widget .badge {
10130 .notification_widget .badge {
10099 color: #ffffff;
10131 color: #ffffff;
10100 background-color: #333333;
10132 background-color: #333333;
10101 }
10133 }
10102 .notification_widget.span {
10134 .notification_widget.span {
10103 padding-right: 2px;
10135 padding-right: 2px;
10104 }
10136 }
10105 .notification_widget.warning {
10137 .notification_widget.warning {
10106 color: #ffffff;
10138 color: #ffffff;
10107 background-color: #f0ad4e;
10139 background-color: #f0ad4e;
10108 border-color: #eea236;
10140 border-color: #eea236;
10109 }
10141 }
10110 .notification_widget.warning:hover,
10142 .notification_widget.warning:hover,
10111 .notification_widget.warning:focus,
10143 .notification_widget.warning:focus,
10112 .notification_widget.warning:active,
10144 .notification_widget.warning:active,
10113 .notification_widget.warning.active,
10145 .notification_widget.warning.active,
10114 .open .dropdown-toggle.notification_widget.warning {
10146 .open .dropdown-toggle.notification_widget.warning {
10115 color: #ffffff;
10147 color: #ffffff;
10116 background-color: #ed9c28;
10148 background-color: #ed9c28;
10117 border-color: #d58512;
10149 border-color: #d58512;
10118 }
10150 }
10119 .notification_widget.warning:active,
10151 .notification_widget.warning:active,
10120 .notification_widget.warning.active,
10152 .notification_widget.warning.active,
10121 .open .dropdown-toggle.notification_widget.warning {
10153 .open .dropdown-toggle.notification_widget.warning {
10122 background-image: none;
10154 background-image: none;
10123 }
10155 }
10124 .notification_widget.warning.disabled,
10156 .notification_widget.warning.disabled,
10125 .notification_widget.warning[disabled],
10157 .notification_widget.warning[disabled],
10126 fieldset[disabled] .notification_widget.warning,
10158 fieldset[disabled] .notification_widget.warning,
10127 .notification_widget.warning.disabled:hover,
10159 .notification_widget.warning.disabled:hover,
10128 .notification_widget.warning[disabled]:hover,
10160 .notification_widget.warning[disabled]:hover,
10129 fieldset[disabled] .notification_widget.warning:hover,
10161 fieldset[disabled] .notification_widget.warning:hover,
10130 .notification_widget.warning.disabled:focus,
10162 .notification_widget.warning.disabled:focus,
10131 .notification_widget.warning[disabled]:focus,
10163 .notification_widget.warning[disabled]:focus,
10132 fieldset[disabled] .notification_widget.warning:focus,
10164 fieldset[disabled] .notification_widget.warning:focus,
10133 .notification_widget.warning.disabled:active,
10165 .notification_widget.warning.disabled:active,
10134 .notification_widget.warning[disabled]:active,
10166 .notification_widget.warning[disabled]:active,
10135 fieldset[disabled] .notification_widget.warning:active,
10167 fieldset[disabled] .notification_widget.warning:active,
10136 .notification_widget.warning.disabled.active,
10168 .notification_widget.warning.disabled.active,
10137 .notification_widget.warning[disabled].active,
10169 .notification_widget.warning[disabled].active,
10138 fieldset[disabled] .notification_widget.warning.active {
10170 fieldset[disabled] .notification_widget.warning.active {
10139 background-color: #f0ad4e;
10171 background-color: #f0ad4e;
10140 border-color: #eea236;
10172 border-color: #eea236;
10141 }
10173 }
10142 .notification_widget.warning .badge {
10174 .notification_widget.warning .badge {
10143 color: #f0ad4e;
10175 color: #f0ad4e;
10144 background-color: #ffffff;
10176 background-color: #ffffff;
10145 }
10177 }
10146 .notification_widget.success {
10178 .notification_widget.success {
10147 color: #ffffff;
10179 color: #ffffff;
10148 background-color: #5cb85c;
10180 background-color: #5cb85c;
10149 border-color: #4cae4c;
10181 border-color: #4cae4c;
10150 }
10182 }
10151 .notification_widget.success:hover,
10183 .notification_widget.success:hover,
10152 .notification_widget.success:focus,
10184 .notification_widget.success:focus,
10153 .notification_widget.success:active,
10185 .notification_widget.success:active,
10154 .notification_widget.success.active,
10186 .notification_widget.success.active,
10155 .open .dropdown-toggle.notification_widget.success {
10187 .open .dropdown-toggle.notification_widget.success {
10156 color: #ffffff;
10188 color: #ffffff;
10157 background-color: #47a447;
10189 background-color: #47a447;
10158 border-color: #398439;
10190 border-color: #398439;
10159 }
10191 }
10160 .notification_widget.success:active,
10192 .notification_widget.success:active,
10161 .notification_widget.success.active,
10193 .notification_widget.success.active,
10162 .open .dropdown-toggle.notification_widget.success {
10194 .open .dropdown-toggle.notification_widget.success {
10163 background-image: none;
10195 background-image: none;
10164 }
10196 }
10165 .notification_widget.success.disabled,
10197 .notification_widget.success.disabled,
10166 .notification_widget.success[disabled],
10198 .notification_widget.success[disabled],
10167 fieldset[disabled] .notification_widget.success,
10199 fieldset[disabled] .notification_widget.success,
10168 .notification_widget.success.disabled:hover,
10200 .notification_widget.success.disabled:hover,
10169 .notification_widget.success[disabled]:hover,
10201 .notification_widget.success[disabled]:hover,
10170 fieldset[disabled] .notification_widget.success:hover,
10202 fieldset[disabled] .notification_widget.success:hover,
10171 .notification_widget.success.disabled:focus,
10203 .notification_widget.success.disabled:focus,
10172 .notification_widget.success[disabled]:focus,
10204 .notification_widget.success[disabled]:focus,
10173 fieldset[disabled] .notification_widget.success:focus,
10205 fieldset[disabled] .notification_widget.success:focus,
10174 .notification_widget.success.disabled:active,
10206 .notification_widget.success.disabled:active,
10175 .notification_widget.success[disabled]:active,
10207 .notification_widget.success[disabled]:active,
10176 fieldset[disabled] .notification_widget.success:active,
10208 fieldset[disabled] .notification_widget.success:active,
10177 .notification_widget.success.disabled.active,
10209 .notification_widget.success.disabled.active,
10178 .notification_widget.success[disabled].active,
10210 .notification_widget.success[disabled].active,
10179 fieldset[disabled] .notification_widget.success.active {
10211 fieldset[disabled] .notification_widget.success.active {
10180 background-color: #5cb85c;
10212 background-color: #5cb85c;
10181 border-color: #4cae4c;
10213 border-color: #4cae4c;
10182 }
10214 }
10183 .notification_widget.success .badge {
10215 .notification_widget.success .badge {
10184 color: #5cb85c;
10216 color: #5cb85c;
10185 background-color: #ffffff;
10217 background-color: #ffffff;
10186 }
10218 }
10187 .notification_widget.info {
10219 .notification_widget.info {
10188 color: #ffffff;
10220 color: #ffffff;
10189 background-color: #5bc0de;
10221 background-color: #5bc0de;
10190 border-color: #46b8da;
10222 border-color: #46b8da;
10191 }
10223 }
10192 .notification_widget.info:hover,
10224 .notification_widget.info:hover,
10193 .notification_widget.info:focus,
10225 .notification_widget.info:focus,
10194 .notification_widget.info:active,
10226 .notification_widget.info:active,
10195 .notification_widget.info.active,
10227 .notification_widget.info.active,
10196 .open .dropdown-toggle.notification_widget.info {
10228 .open .dropdown-toggle.notification_widget.info {
10197 color: #ffffff;
10229 color: #ffffff;
10198 background-color: #39b3d7;
10230 background-color: #39b3d7;
10199 border-color: #269abc;
10231 border-color: #269abc;
10200 }
10232 }
10201 .notification_widget.info:active,
10233 .notification_widget.info:active,
10202 .notification_widget.info.active,
10234 .notification_widget.info.active,
10203 .open .dropdown-toggle.notification_widget.info {
10235 .open .dropdown-toggle.notification_widget.info {
10204 background-image: none;
10236 background-image: none;
10205 }
10237 }
10206 .notification_widget.info.disabled,
10238 .notification_widget.info.disabled,
10207 .notification_widget.info[disabled],
10239 .notification_widget.info[disabled],
10208 fieldset[disabled] .notification_widget.info,
10240 fieldset[disabled] .notification_widget.info,
10209 .notification_widget.info.disabled:hover,
10241 .notification_widget.info.disabled:hover,
10210 .notification_widget.info[disabled]:hover,
10242 .notification_widget.info[disabled]:hover,
10211 fieldset[disabled] .notification_widget.info:hover,
10243 fieldset[disabled] .notification_widget.info:hover,
10212 .notification_widget.info.disabled:focus,
10244 .notification_widget.info.disabled:focus,
10213 .notification_widget.info[disabled]:focus,
10245 .notification_widget.info[disabled]:focus,
10214 fieldset[disabled] .notification_widget.info:focus,
10246 fieldset[disabled] .notification_widget.info:focus,
10215 .notification_widget.info.disabled:active,
10247 .notification_widget.info.disabled:active,
10216 .notification_widget.info[disabled]:active,
10248 .notification_widget.info[disabled]:active,
10217 fieldset[disabled] .notification_widget.info:active,
10249 fieldset[disabled] .notification_widget.info:active,
10218 .notification_widget.info.disabled.active,
10250 .notification_widget.info.disabled.active,
10219 .notification_widget.info[disabled].active,
10251 .notification_widget.info[disabled].active,
10220 fieldset[disabled] .notification_widget.info.active {
10252 fieldset[disabled] .notification_widget.info.active {
10221 background-color: #5bc0de;
10253 background-color: #5bc0de;
10222 border-color: #46b8da;
10254 border-color: #46b8da;
10223 }
10255 }
10224 .notification_widget.info .badge {
10256 .notification_widget.info .badge {
10225 color: #5bc0de;
10257 color: #5bc0de;
10226 background-color: #ffffff;
10258 background-color: #ffffff;
10227 }
10259 }
10228 .notification_widget.danger {
10260 .notification_widget.danger {
10229 color: #ffffff;
10261 color: #ffffff;
10230 background-color: #d9534f;
10262 background-color: #d9534f;
10231 border-color: #d43f3a;
10263 border-color: #d43f3a;
10232 }
10264 }
10233 .notification_widget.danger:hover,
10265 .notification_widget.danger:hover,
10234 .notification_widget.danger:focus,
10266 .notification_widget.danger:focus,
10235 .notification_widget.danger:active,
10267 .notification_widget.danger:active,
10236 .notification_widget.danger.active,
10268 .notification_widget.danger.active,
10237 .open .dropdown-toggle.notification_widget.danger {
10269 .open .dropdown-toggle.notification_widget.danger {
10238 color: #ffffff;
10270 color: #ffffff;
10239 background-color: #d2322d;
10271 background-color: #d2322d;
10240 border-color: #ac2925;
10272 border-color: #ac2925;
10241 }
10273 }
10242 .notification_widget.danger:active,
10274 .notification_widget.danger:active,
10243 .notification_widget.danger.active,
10275 .notification_widget.danger.active,
10244 .open .dropdown-toggle.notification_widget.danger {
10276 .open .dropdown-toggle.notification_widget.danger {
10245 background-image: none;
10277 background-image: none;
10246 }
10278 }
10247 .notification_widget.danger.disabled,
10279 .notification_widget.danger.disabled,
10248 .notification_widget.danger[disabled],
10280 .notification_widget.danger[disabled],
10249 fieldset[disabled] .notification_widget.danger,
10281 fieldset[disabled] .notification_widget.danger,
10250 .notification_widget.danger.disabled:hover,
10282 .notification_widget.danger.disabled:hover,
10251 .notification_widget.danger[disabled]:hover,
10283 .notification_widget.danger[disabled]:hover,
10252 fieldset[disabled] .notification_widget.danger:hover,
10284 fieldset[disabled] .notification_widget.danger:hover,
10253 .notification_widget.danger.disabled:focus,
10285 .notification_widget.danger.disabled:focus,
10254 .notification_widget.danger[disabled]:focus,
10286 .notification_widget.danger[disabled]:focus,
10255 fieldset[disabled] .notification_widget.danger:focus,
10287 fieldset[disabled] .notification_widget.danger:focus,
10256 .notification_widget.danger.disabled:active,
10288 .notification_widget.danger.disabled:active,
10257 .notification_widget.danger[disabled]:active,
10289 .notification_widget.danger[disabled]:active,
10258 fieldset[disabled] .notification_widget.danger:active,
10290 fieldset[disabled] .notification_widget.danger:active,
10259 .notification_widget.danger.disabled.active,
10291 .notification_widget.danger.disabled.active,
10260 .notification_widget.danger[disabled].active,
10292 .notification_widget.danger[disabled].active,
10261 fieldset[disabled] .notification_widget.danger.active {
10293 fieldset[disabled] .notification_widget.danger.active {
10262 background-color: #d9534f;
10294 background-color: #d9534f;
10263 border-color: #d43f3a;
10295 border-color: #d43f3a;
10264 }
10296 }
10265 .notification_widget.danger .badge {
10297 .notification_widget.danger .badge {
10266 color: #d9534f;
10298 color: #d9534f;
10267 background-color: #ffffff;
10299 background-color: #ffffff;
10268 }
10300 }
10269 div#pager_splitter {
10301 div#pager_splitter {
10270 height: 8px;
10302 height: 8px;
10271 box-sizing: border-box;
10303 box-sizing: border-box;
10272 -moz-box-sizing: border-box;
10304 -moz-box-sizing: border-box;
10273 -webkit-box-sizing: border-box;
10305 -webkit-box-sizing: border-box;
10274 }
10306 }
10275 #pager-container {
10307 #pager-container {
10276 position: relative;
10308 position: relative;
10277 padding: 15px 0px;
10309 padding: 15px 0px;
10278 box-sizing: border-box;
10310 box-sizing: border-box;
10279 -moz-box-sizing: border-box;
10311 -moz-box-sizing: border-box;
10280 -webkit-box-sizing: border-box;
10312 -webkit-box-sizing: border-box;
10281 }
10313 }
10282 div#pager {
10314 div#pager {
10283 font-size: 14px;
10315 font-size: 14px;
10284 line-height: 20px;
10316 line-height: 20px;
10285 overflow: auto;
10317 overflow: auto;
10286 display: none;
10318 display: none;
10287 box-sizing: border-box;
10319 box-sizing: border-box;
10288 -moz-box-sizing: border-box;
10320 -moz-box-sizing: border-box;
10289 -webkit-box-sizing: border-box;
10321 -webkit-box-sizing: border-box;
10290 }
10322 }
10291 div#pager pre {
10323 div#pager pre {
10292 line-height: 1.21429em;
10324 line-height: 1.21429em;
10293 color: #000000;
10325 color: #000000;
10294 background-color: #f7f7f7;
10326 background-color: #f7f7f7;
10295 padding: 0.4em;
10327 padding: 0.4em;
10296 }
10328 }
10297 .quickhelp {
10329 .quickhelp {
10298 /* Old browsers */
10330 /* Old browsers */
10299 display: -webkit-box;
10331 display: -webkit-box;
10300 -webkit-box-orient: horizontal;
10332 -webkit-box-orient: horizontal;
10301 -webkit-box-align: stretch;
10333 -webkit-box-align: stretch;
10302 display: -moz-box;
10334 display: -moz-box;
10303 -moz-box-orient: horizontal;
10335 -moz-box-orient: horizontal;
10304 -moz-box-align: stretch;
10336 -moz-box-align: stretch;
10305 display: box;
10337 display: box;
10306 box-orient: horizontal;
10338 box-orient: horizontal;
10307 box-align: stretch;
10339 box-align: stretch;
10308 /* Modern browsers */
10340 /* Modern browsers */
10309 display: flex;
10341 display: flex;
10310 flex-direction: row;
10342 flex-direction: row;
10311 align-items: stretch;
10343 align-items: stretch;
10312 /* Old browsers */
10344 /* Old browsers */
10313 -webkit-box-flex: 0;
10345 -webkit-box-flex: 0;
10314 -moz-box-flex: 0;
10346 -moz-box-flex: 0;
10315 box-flex: 0;
10347 box-flex: 0;
10316 /* Modern browsers */
10348 /* Modern browsers */
10317 flex: none;
10349 flex: none;
10318 }
10350 }
10319 .shortcut_key {
10351 .shortcut_key {
10320 display: inline-block;
10352 display: inline-block;
10321 width: 20ex;
10353 width: 20ex;
10322 text-align: right;
10354 text-align: right;
10323 font-family: monospace;
10355 font-family: monospace;
10324 }
10356 }
10325 .shortcut_descr {
10357 .shortcut_descr {
10326 display: inline-block;
10358 display: inline-block;
10327 /* Old browsers */
10359 /* Old browsers */
10328 -webkit-box-flex: 1;
10360 -webkit-box-flex: 1;
10329 -moz-box-flex: 1;
10361 -moz-box-flex: 1;
10330 box-flex: 1;
10362 box-flex: 1;
10331 /* Modern browsers */
10363 /* Modern browsers */
10332 flex: 1;
10364 flex: 1;
10333 }
10365 }
10334 span#save_widget {
10366 span#save_widget {
10335 padding: 0px 5px;
10367 padding: 0px 5px;
10336 margin-top: 12px;
10368 margin-top: 12px;
10337 }
10369 }
10338 span#checkpoint_status,
10370 span#checkpoint_status,
10339 span#autosave_status {
10371 span#autosave_status {
10340 font-size: small;
10372 font-size: small;
10341 }
10373 }
10342 @media (max-width: 767px) {
10374 @media (max-width: 767px) {
10343 span#save_widget {
10375 span#save_widget {
10344 font-size: small;
10376 font-size: small;
10345 }
10377 }
10346 span#checkpoint_status,
10378 span#checkpoint_status,
10347 span#autosave_status {
10379 span#autosave_status {
10348 font-size: x-small;
10380 font-size: x-small;
10349 }
10381 }
10350 }
10382 }
10351 @media (max-width: 767px) {
10383 @media (max-width: 767px) {
10352 span#checkpoint_status,
10384 span#checkpoint_status,
10353 span#autosave_status {
10385 span#autosave_status {
10354 display: none;
10386 display: none;
10355 }
10387 }
10356 }
10388 }
10357 @media (min-width: 768px) and (max-width: 979px) {
10389 @media (min-width: 768px) and (max-width: 979px) {
10358 span#checkpoint_status {
10390 span#checkpoint_status {
10359 display: none;
10391 display: none;
10360 }
10392 }
10361 span#autosave_status {
10393 span#autosave_status {
10362 font-size: x-small;
10394 font-size: x-small;
10363 }
10395 }
10364 }
10396 }
10365 .toolbar {
10397 .toolbar {
10366 padding: 0px;
10398 padding: 0px;
10367 margin-left: -5px;
10399 margin-left: -5px;
10368 margin-top: -5px;
10400 margin-top: -5px;
10369 box-sizing: border-box;
10401 box-sizing: border-box;
10370 -moz-box-sizing: border-box;
10402 -moz-box-sizing: border-box;
10371 -webkit-box-sizing: border-box;
10403 -webkit-box-sizing: border-box;
10372 }
10404 }
10373 .toolbar select,
10405 .toolbar select,
10374 .toolbar label {
10406 .toolbar label {
10375 width: auto;
10407 width: auto;
10376 vertical-align: middle;
10408 vertical-align: middle;
10377 margin-right: 2px;
10409 margin-right: 2px;
10378 margin-bottom: 0px;
10410 margin-bottom: 0px;
10379 display: inline;
10411 display: inline;
10380 font-size: 92%;
10412 font-size: 92%;
10381 margin-left: 0.3em;
10413 margin-left: 0.3em;
10382 margin-right: 0.3em;
10414 margin-right: 0.3em;
10383 padding: 0px;
10415 padding: 0px;
10384 padding-top: 3px;
10416 padding-top: 3px;
10385 }
10417 }
10386 .toolbar .btn {
10418 .toolbar .btn {
10387 padding: 2px 8px;
10419 padding: 2px 8px;
10388 }
10420 }
10389 .toolbar .btn-group {
10421 .toolbar .btn-group {
10390 margin-top: 0px;
10422 margin-top: 0px;
10391 margin-left: 5px;
10423 margin-left: 5px;
10392 }
10424 }
10393 #maintoolbar {
10425 #maintoolbar {
10394 margin-bottom: -3px;
10426 margin-bottom: -3px;
10395 margin-top: -8px;
10427 margin-top: -8px;
10396 border: 0px;
10428 border: 0px;
10397 min-height: 27px;
10429 min-height: 27px;
10398 margin-left: 32px;
10430 margin-left: 32px;
10399 padding-top: 6px;
10431 padding-top: 6px;
10400 padding-bottom: 8px;
10432 padding-bottom: 8px;
10401 }
10433 }
10402 #maintoolbar .navbar-text {
10434 #maintoolbar .navbar-text {
10403 float: none;
10435 float: none;
10404 vertical-align: middle;
10436 vertical-align: middle;
10405 text-align: right;
10437 text-align: right;
10406 margin-left: 5px;
10438 margin-left: 5px;
10407 margin-right: 0px;
10439 margin-right: 0px;
10408 margin-top: 0px;
10440 margin-top: 0px;
10409 }
10441 }
10410 #maintoolbar .toolbar {
10442 #maintoolbar .toolbar {
10411 margin-top: 0px;
10443 margin-top: 0px;
10412 }
10444 }
10413 .select-xs {
10445 .select-xs {
10414 height: 24px;
10446 height: 24px;
10415 }
10447 }
10416 /**
10448 /**
10417 * Primary styles
10449 * Primary styles
10418 *
10450 *
10419 * Author: IPython Development Team
10451 * Author: IPython Development Team
10420 */
10452 */
10421 /** WARNING IF YOU ARE EDITTING THIS FILE, if this is a .css file, It has a lot
10453 /** WARNING IF YOU ARE EDITTING THIS FILE, if this is a .css file, It has a lot
10422 * of chance of beeing generated from the ../less/[samename].less file, you can
10454 * of chance of beeing generated from the ../less/[samename].less file, you can
10423 * try to get back the less file by reverting somme commit in history
10455 * try to get back the less file by reverting somme commit in history
10424 **/
10456 **/
10425 /*
10457 /*
10426 * We'll try to get something pretty, so we
10458 * We'll try to get something pretty, so we
10427 * have some strange css to have the scroll bar on
10459 * have some strange css to have the scroll bar on
10428 * the left with fix button on the top right of the tooltip
10460 * the left with fix button on the top right of the tooltip
10429 */
10461 */
10430 @-moz-keyframes fadeOut {
10462 @-moz-keyframes fadeOut {
10431 from {
10463 from {
10432 opacity: 1;
10464 opacity: 1;
10433 }
10465 }
10434 to {
10466 to {
10435 opacity: 0;
10467 opacity: 0;
10436 }
10468 }
10437 }
10469 }
10438 @-webkit-keyframes fadeOut {
10470 @-webkit-keyframes fadeOut {
10439 from {
10471 from {
10440 opacity: 1;
10472 opacity: 1;
10441 }
10473 }
10442 to {
10474 to {
10443 opacity: 0;
10475 opacity: 0;
10444 }
10476 }
10445 }
10477 }
10446 @-moz-keyframes fadeIn {
10478 @-moz-keyframes fadeIn {
10447 from {
10479 from {
10448 opacity: 0;
10480 opacity: 0;
10449 }
10481 }
10450 to {
10482 to {
10451 opacity: 1;
10483 opacity: 1;
10452 }
10484 }
10453 }
10485 }
10454 @-webkit-keyframes fadeIn {
10486 @-webkit-keyframes fadeIn {
10455 from {
10487 from {
10456 opacity: 0;
10488 opacity: 0;
10457 }
10489 }
10458 to {
10490 to {
10459 opacity: 1;
10491 opacity: 1;
10460 }
10492 }
10461 }
10493 }
10462 /*properties of tooltip after "expand"*/
10494 /*properties of tooltip after "expand"*/
10463 .bigtooltip {
10495 .bigtooltip {
10464 overflow: auto;
10496 overflow: auto;
10465 height: 200px;
10497 height: 200px;
10466 -webkit-transition-property: height;
10498 -webkit-transition-property: height;
10467 -webkit-transition-duration: 500ms;
10499 -webkit-transition-duration: 500ms;
10468 -moz-transition-property: height;
10500 -moz-transition-property: height;
10469 -moz-transition-duration: 500ms;
10501 -moz-transition-duration: 500ms;
10470 transition-property: height;
10502 transition-property: height;
10471 transition-duration: 500ms;
10503 transition-duration: 500ms;
10472 }
10504 }
10473 /*properties of tooltip before "expand"*/
10505 /*properties of tooltip before "expand"*/
10474 .smalltooltip {
10506 .smalltooltip {
10475 -webkit-transition-property: height;
10507 -webkit-transition-property: height;
10476 -webkit-transition-duration: 500ms;
10508 -webkit-transition-duration: 500ms;
10477 -moz-transition-property: height;
10509 -moz-transition-property: height;
10478 -moz-transition-duration: 500ms;
10510 -moz-transition-duration: 500ms;
10479 transition-property: height;
10511 transition-property: height;
10480 transition-duration: 500ms;
10512 transition-duration: 500ms;
10481 text-overflow: ellipsis;
10513 text-overflow: ellipsis;
10482 overflow: hidden;
10514 overflow: hidden;
10483 height: 80px;
10515 height: 80px;
10484 }
10516 }
10485 .tooltipbuttons {
10517 .tooltipbuttons {
10486 position: absolute;
10518 position: absolute;
10487 padding-right: 15px;
10519 padding-right: 15px;
10488 top: 0px;
10520 top: 0px;
10489 right: 0px;
10521 right: 0px;
10490 }
10522 }
10491 .tooltiptext {
10523 .tooltiptext {
10492 /*avoid the button to overlap on some docstring*/
10524 /*avoid the button to overlap on some docstring*/
10493 padding-right: 30px;
10525 padding-right: 30px;
10494 }
10526 }
10495 .ipython_tooltip {
10527 .ipython_tooltip {
10496 max-width: 700px;
10528 max-width: 700px;
10497 /*fade-in animation when inserted*/
10529 /*fade-in animation when inserted*/
10498 -webkit-animation: fadeOut 400ms;
10530 -webkit-animation: fadeOut 400ms;
10499 -moz-animation: fadeOut 400ms;
10531 -moz-animation: fadeOut 400ms;
10500 animation: fadeOut 400ms;
10532 animation: fadeOut 400ms;
10501 -webkit-animation: fadeIn 400ms;
10533 -webkit-animation: fadeIn 400ms;
10502 -moz-animation: fadeIn 400ms;
10534 -moz-animation: fadeIn 400ms;
10503 animation: fadeIn 400ms;
10535 animation: fadeIn 400ms;
10504 vertical-align: middle;
10536 vertical-align: middle;
10505 background-color: #f7f7f7;
10537 background-color: #f7f7f7;
10506 overflow: visible;
10538 overflow: visible;
10507 border: #ababab 1px solid;
10539 border: #ababab 1px solid;
10508 outline: none;
10540 outline: none;
10509 padding: 3px;
10541 padding: 3px;
10510 margin: 0px;
10542 margin: 0px;
10511 padding-left: 7px;
10543 padding-left: 7px;
10512 font-family: monospace;
10544 font-family: monospace;
10513 min-height: 50px;
10545 min-height: 50px;
10514 -moz-box-shadow: 0px 6px 10px -1px #adadad;
10546 -moz-box-shadow: 0px 6px 10px -1px #adadad;
10515 -webkit-box-shadow: 0px 6px 10px -1px #adadad;
10547 -webkit-box-shadow: 0px 6px 10px -1px #adadad;
10516 box-shadow: 0px 6px 10px -1px #adadad;
10548 box-shadow: 0px 6px 10px -1px #adadad;
10517 border-radius: 4px;
10549 border-radius: 4px;
10518 position: absolute;
10550 position: absolute;
10519 z-index: 1000;
10551 z-index: 1000;
10520 }
10552 }
10521 .ipython_tooltip a {
10553 .ipython_tooltip a {
10522 float: right;
10554 float: right;
10523 }
10555 }
10524 .ipython_tooltip .tooltiptext pre {
10556 .ipython_tooltip .tooltiptext pre {
10525 border: 0;
10557 border: 0;
10526 border-radius: 0;
10558 border-radius: 0;
10527 font-size: 100%;
10559 font-size: 100%;
10528 background-color: #f7f7f7;
10560 background-color: #f7f7f7;
10529 }
10561 }
10530 .pretooltiparrow {
10562 .pretooltiparrow {
10531 left: 0px;
10563 left: 0px;
10532 margin: 0px;
10564 margin: 0px;
10533 top: -16px;
10565 top: -16px;
10534 width: 40px;
10566 width: 40px;
10535 height: 16px;
10567 height: 16px;
10536 overflow: hidden;
10568 overflow: hidden;
10537 position: absolute;
10569 position: absolute;
10538 }
10570 }
10539 .pretooltiparrow:before {
10571 .pretooltiparrow:before {
10540 background-color: #f7f7f7;
10572 background-color: #f7f7f7;
10541 border: 1px #ababab solid;
10573 border: 1px #ababab solid;
10542 z-index: 11;
10574 z-index: 11;
10543 content: "";
10575 content: "";
10544 position: absolute;
10576 position: absolute;
10545 left: 15px;
10577 left: 15px;
10546 top: 10px;
10578 top: 10px;
10547 width: 25px;
10579 width: 25px;
10548 height: 25px;
10580 height: 25px;
10549 -webkit-transform: rotate(45deg);
10581 -webkit-transform: rotate(45deg);
10550 -moz-transform: rotate(45deg);
10582 -moz-transform: rotate(45deg);
10551 -ms-transform: rotate(45deg);
10583 -ms-transform: rotate(45deg);
10552 -o-transform: rotate(45deg);
10584 -o-transform: rotate(45deg);
10553 }
10585 }
10554 /*# sourceMappingURL=../style/style.min.css.map */ No newline at end of file
10586 /*# sourceMappingURL=../style/style.min.css.map */
@@ -1,28 +1,64 b''
1
1
2 //
2 //
3 // Miscellaneous javascript tests
3 // Kernel tests
4 //
4 //
5 casper.notebook_test(function () {
5 casper.notebook_test(function () {
6 this.evaluate(function () {
6 this.evaluate(function () {
7 IPython.notebook.kernel.kernel_info(
7 IPython.notebook.kernel.kernel_info(
8 function(msg){
8 function(msg){
9 IPython._kernel_info_response = msg;
9 IPython._kernel_info_response = msg;
10 })
10 })
11 });
11 });
12
12
13 this.waitFor(
13 this.waitFor(
14 function () {
14 function () {
15 return this.evaluate(function(){
15 return this.evaluate(function(){
16 return IPython._kernel_info_response;
16 return IPython._kernel_info_response;
17 });
17 });
18 });
18 });
19
19
20 this.then(function () {
20 this.then(function () {
21 var kernel_info_response = this.evaluate(function(){
21 var kernel_info_response = this.evaluate(function(){
22 return IPython._kernel_info_response;
22 return IPython._kernel_info_response;
23 });
23 });
24 this.test.assertTrue( kernel_info_response.msg_type === 'kernel_info_reply', 'Kernel info request return kernel_info_reply');
24 this.test.assertTrue( kernel_info_response.msg_type === 'kernel_info_reply', 'Kernel info request return kernel_info_reply');
25 this.test.assertTrue( kernel_info_response.content !== undefined, 'Kernel_info_reply is not undefined');
25 this.test.assertTrue( kernel_info_response.content !== undefined, 'Kernel_info_reply is not undefined');
26 });
26 });
27
27
28 this.thenEvaluate(function () {
29 var kernel = IPython.notebook.session.kernel;
30 IPython._channels = [
31 kernel.shell_channel,
32 kernel.iopub_channel,
33 kernel.stdin_channel
34 ];
35 kernel.kill();
36 });
37
38 this.waitFor(function () {
39 return this.evaluate(function(){
40 for (var i=0; i < IPython._channels.length; i++) {
41 var ws = IPython._channels[i];
42 if (ws.readyState !== ws.CLOSED) {
43 return false;
44 }
45 }
46 return true;
47 });
48 });
49
50 this.then(function () {
51 var states = this.evaluate(function() {
52 var states = [];
53 for (var i = 0; i < IPython._channels.length; i++) {
54 states.push(IPython._channels[i].readyState);
55 }
56 return states;
57 });
58
59 for (var i = 0; i < states.length; i++) {
60 this.test.assertEquals(states[i], WebSocket.CLOSED,
61 "Kernel.kill closes websockets[" + i + "]");
62 }
63 });
28 });
64 });
General Comments 0
You need to be logged in to leave comments. Login now