##// END OF EJS Templates
debug-style: moved from pylons controller to pyramid view.
dan -
r1900:7da9bb63 default
parent child Browse files
Show More
@@ -0,0 +1,42 b''
1 # -*- coding: utf-8 -*-
2
3 # Copyright (C) 2016-2017 RhodeCode GmbH
4 #
5 # This program is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU Affero General Public License, version 3
7 # (only), as published by the Free Software Foundation.
8 #
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
13 #
14 # You should have received a copy of the GNU Affero General Public License
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 #
17 # This program is dual-licensed. If you wish to learn more about the
18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20 from rhodecode.apps._base import ADMIN_PREFIX
21 from rhodecode.lib.utils2 import str2bool
22
23
24 def debug_style_enabled(info, request):
25 return str2bool(request.registry.settings.get('debug_style'))
26
27
28 def includeme(config):
29 config.add_route(
30 name='debug_style_home',
31 pattern=ADMIN_PREFIX + '/debug_style',
32 custom_predicates=(debug_style_enabled,))
33 config.add_route(
34 name='debug_style_template',
35 pattern=ADMIN_PREFIX + '/debug_style/t/{t_path}',
36 custom_predicates=(debug_style_enabled,))
37
38 # Scan module for configuration decorators.
39 config.scan()
40
41
42
@@ -0,0 +1,58 b''
1 # -*- coding: utf-8 -*-
2
3 # Copyright (C) 2016-2017 RhodeCode GmbH
4 #
5 # This program is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU Affero General Public License, version 3
7 # (only), as published by the Free Software Foundation.
8 #
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
13 #
14 # You should have received a copy of the GNU Affero General Public License
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 #
17 # This program is dual-licensed. If you wish to learn more about the
18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20
21 import os
22 import logging
23
24 from pyramid.view import view_config
25 from pyramid.renderers import render_to_response
26 from rhodecode.apps._base import BaseAppView
27
28 log = logging.getLogger(__name__)
29
30
31 class DebugStyleView(BaseAppView):
32 def load_default_context(self):
33 c = self._get_local_tmpl_context()
34 self._register_global_c(c)
35 return c
36
37 @view_config(
38 route_name='debug_style_home', request_method='GET',
39 renderer=None)
40 def index(self):
41 c = self.load_default_context()
42 c.active = 'index'
43
44 return render_to_response(
45 'debug_style/index.html', self._get_template_context(c),
46 request=self.request)
47
48 @view_config(
49 route_name='debug_style_template', request_method='GET',
50 renderer=None)
51 def template(self):
52 t_path = self.request.matchdict['t_path']
53 c = self.load_default_context()
54 c.active = os.path.splitext(t_path)[0]
55
56 return render_to_response(
57 'debug_style/' + t_path, self._get_template_context(c),
58 request=self.request) No newline at end of file
@@ -1,532 +1,533 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2
2
3 # Copyright (C) 2010-2017 RhodeCode GmbH
3 # Copyright (C) 2010-2017 RhodeCode GmbH
4 #
4 #
5 # This program is free software: you can redistribute it and/or modify
5 # This program is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU Affero General Public License, version 3
6 # it under the terms of the GNU Affero General Public License, version 3
7 # (only), as published by the Free Software Foundation.
7 # (only), as published by the Free Software Foundation.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU Affero General Public License
14 # You should have received a copy of the GNU Affero General Public License
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 #
16 #
17 # This program is dual-licensed. If you wish to learn more about the
17 # This program is dual-licensed. If you wish to learn more about the
18 # RhodeCode Enterprise Edition, including its added features, Support services,
18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20
20
21 """
21 """
22 Pylons middleware initialization
22 Pylons middleware initialization
23 """
23 """
24 import logging
24 import logging
25 from collections import OrderedDict
25 from collections import OrderedDict
26
26
27 from paste.registry import RegistryManager
27 from paste.registry import RegistryManager
28 from paste.gzipper import make_gzip_middleware
28 from paste.gzipper import make_gzip_middleware
29 from pylons.wsgiapp import PylonsApp
29 from pylons.wsgiapp import PylonsApp
30 from pyramid.authorization import ACLAuthorizationPolicy
30 from pyramid.authorization import ACLAuthorizationPolicy
31 from pyramid.config import Configurator
31 from pyramid.config import Configurator
32 from pyramid.settings import asbool, aslist
32 from pyramid.settings import asbool, aslist
33 from pyramid.wsgi import wsgiapp
33 from pyramid.wsgi import wsgiapp
34 from pyramid.httpexceptions import (
34 from pyramid.httpexceptions import (
35 HTTPException, HTTPError, HTTPInternalServerError, HTTPFound)
35 HTTPException, HTTPError, HTTPInternalServerError, HTTPFound)
36 from pyramid.events import ApplicationCreated
36 from pyramid.events import ApplicationCreated
37 from pyramid.renderers import render_to_response
37 from pyramid.renderers import render_to_response
38 from routes.middleware import RoutesMiddleware
38 from routes.middleware import RoutesMiddleware
39 import routes.util
39 import routes.util
40
40
41 import rhodecode
41 import rhodecode
42
42
43 from rhodecode.model import meta
43 from rhodecode.model import meta
44 from rhodecode.config import patches
44 from rhodecode.config import patches
45 from rhodecode.config.routing import STATIC_FILE_PREFIX
45 from rhodecode.config.routing import STATIC_FILE_PREFIX
46 from rhodecode.config.environment import (
46 from rhodecode.config.environment import (
47 load_environment, load_pyramid_environment)
47 load_environment, load_pyramid_environment)
48
48
49 from rhodecode.lib.vcs import VCSCommunicationError
49 from rhodecode.lib.vcs import VCSCommunicationError
50 from rhodecode.lib.exceptions import VCSServerUnavailable
50 from rhodecode.lib.exceptions import VCSServerUnavailable
51 from rhodecode.lib.middleware import csrf
51 from rhodecode.lib.middleware import csrf
52 from rhodecode.lib.middleware.appenlight import wrap_in_appenlight_if_enabled
52 from rhodecode.lib.middleware.appenlight import wrap_in_appenlight_if_enabled
53 from rhodecode.lib.middleware.error_handling import (
53 from rhodecode.lib.middleware.error_handling import (
54 PylonsErrorHandlingMiddleware)
54 PylonsErrorHandlingMiddleware)
55 from rhodecode.lib.middleware.https_fixup import HttpsFixup
55 from rhodecode.lib.middleware.https_fixup import HttpsFixup
56 from rhodecode.lib.middleware.vcs import VCSMiddleware
56 from rhodecode.lib.middleware.vcs import VCSMiddleware
57 from rhodecode.lib.plugins.utils import register_rhodecode_plugin
57 from rhodecode.lib.plugins.utils import register_rhodecode_plugin
58 from rhodecode.lib.utils2 import aslist as rhodecode_aslist, AttributeDict
58 from rhodecode.lib.utils2 import aslist as rhodecode_aslist, AttributeDict
59 from rhodecode.subscribers import (
59 from rhodecode.subscribers import (
60 scan_repositories_if_enabled, write_js_routes_if_enabled,
60 scan_repositories_if_enabled, write_js_routes_if_enabled,
61 write_metadata_if_needed)
61 write_metadata_if_needed)
62
62
63
63
64 log = logging.getLogger(__name__)
64 log = logging.getLogger(__name__)
65
65
66
66
67 # this is used to avoid avoid the route lookup overhead in routesmiddleware
67 # this is used to avoid avoid the route lookup overhead in routesmiddleware
68 # for certain routes which won't go to pylons to - eg. static files, debugger
68 # for certain routes which won't go to pylons to - eg. static files, debugger
69 # it is only needed for the pylons migration and can be removed once complete
69 # it is only needed for the pylons migration and can be removed once complete
70 class SkippableRoutesMiddleware(RoutesMiddleware):
70 class SkippableRoutesMiddleware(RoutesMiddleware):
71 """ Routes middleware that allows you to skip prefixes """
71 """ Routes middleware that allows you to skip prefixes """
72
72
73 def __init__(self, *args, **kw):
73 def __init__(self, *args, **kw):
74 self.skip_prefixes = kw.pop('skip_prefixes', [])
74 self.skip_prefixes = kw.pop('skip_prefixes', [])
75 super(SkippableRoutesMiddleware, self).__init__(*args, **kw)
75 super(SkippableRoutesMiddleware, self).__init__(*args, **kw)
76
76
77 def __call__(self, environ, start_response):
77 def __call__(self, environ, start_response):
78 for prefix in self.skip_prefixes:
78 for prefix in self.skip_prefixes:
79 if environ['PATH_INFO'].startswith(prefix):
79 if environ['PATH_INFO'].startswith(prefix):
80 # added to avoid the case when a missing /_static route falls
80 # added to avoid the case when a missing /_static route falls
81 # through to pylons and causes an exception as pylons is
81 # through to pylons and causes an exception as pylons is
82 # expecting wsgiorg.routingargs to be set in the environ
82 # expecting wsgiorg.routingargs to be set in the environ
83 # by RoutesMiddleware.
83 # by RoutesMiddleware.
84 if 'wsgiorg.routing_args' not in environ:
84 if 'wsgiorg.routing_args' not in environ:
85 environ['wsgiorg.routing_args'] = (None, {})
85 environ['wsgiorg.routing_args'] = (None, {})
86 return self.app(environ, start_response)
86 return self.app(environ, start_response)
87
87
88 return super(SkippableRoutesMiddleware, self).__call__(
88 return super(SkippableRoutesMiddleware, self).__call__(
89 environ, start_response)
89 environ, start_response)
90
90
91
91
92 def make_app(global_conf, static_files=True, **app_conf):
92 def make_app(global_conf, static_files=True, **app_conf):
93 """Create a Pylons WSGI application and return it
93 """Create a Pylons WSGI application and return it
94
94
95 ``global_conf``
95 ``global_conf``
96 The inherited configuration for this application. Normally from
96 The inherited configuration for this application. Normally from
97 the [DEFAULT] section of the Paste ini file.
97 the [DEFAULT] section of the Paste ini file.
98
98
99 ``app_conf``
99 ``app_conf``
100 The application's local configuration. Normally specified in
100 The application's local configuration. Normally specified in
101 the [app:<name>] section of the Paste ini file (where <name>
101 the [app:<name>] section of the Paste ini file (where <name>
102 defaults to main).
102 defaults to main).
103
103
104 """
104 """
105 # Apply compatibility patches
105 # Apply compatibility patches
106 patches.kombu_1_5_1_python_2_7_11()
106 patches.kombu_1_5_1_python_2_7_11()
107 patches.inspect_getargspec()
107 patches.inspect_getargspec()
108
108
109 # Configure the Pylons environment
109 # Configure the Pylons environment
110 config = load_environment(global_conf, app_conf)
110 config = load_environment(global_conf, app_conf)
111
111
112 # The Pylons WSGI app
112 # The Pylons WSGI app
113 app = PylonsApp(config=config)
113 app = PylonsApp(config=config)
114 if rhodecode.is_test:
114 if rhodecode.is_test:
115 app = csrf.CSRFDetector(app)
115 app = csrf.CSRFDetector(app)
116
116
117 expected_origin = config.get('expected_origin')
117 expected_origin = config.get('expected_origin')
118 if expected_origin:
118 if expected_origin:
119 # The API can be accessed from other Origins.
119 # The API can be accessed from other Origins.
120 app = csrf.OriginChecker(app, expected_origin,
120 app = csrf.OriginChecker(app, expected_origin,
121 skip_urls=[routes.util.url_for('api')])
121 skip_urls=[routes.util.url_for('api')])
122
122
123 # Establish the Registry for this application
123 # Establish the Registry for this application
124 app = RegistryManager(app)
124 app = RegistryManager(app)
125
125
126 app.config = config
126 app.config = config
127
127
128 return app
128 return app
129
129
130
130
131 def make_pyramid_app(global_config, **settings):
131 def make_pyramid_app(global_config, **settings):
132 """
132 """
133 Constructs the WSGI application based on Pyramid and wraps the Pylons based
133 Constructs the WSGI application based on Pyramid and wraps the Pylons based
134 application.
134 application.
135
135
136 Specials:
136 Specials:
137
137
138 * We migrate from Pylons to Pyramid. While doing this, we keep both
138 * We migrate from Pylons to Pyramid. While doing this, we keep both
139 frameworks functional. This involves moving some WSGI middlewares around
139 frameworks functional. This involves moving some WSGI middlewares around
140 and providing access to some data internals, so that the old code is
140 and providing access to some data internals, so that the old code is
141 still functional.
141 still functional.
142
142
143 * The application can also be integrated like a plugin via the call to
143 * The application can also be integrated like a plugin via the call to
144 `includeme`. This is accompanied with the other utility functions which
144 `includeme`. This is accompanied with the other utility functions which
145 are called. Changing this should be done with great care to not break
145 are called. Changing this should be done with great care to not break
146 cases when these fragments are assembled from another place.
146 cases when these fragments are assembled from another place.
147
147
148 """
148 """
149 # The edition string should be available in pylons too, so we add it here
149 # The edition string should be available in pylons too, so we add it here
150 # before copying the settings.
150 # before copying the settings.
151 settings.setdefault('rhodecode.edition', 'Community Edition')
151 settings.setdefault('rhodecode.edition', 'Community Edition')
152
152
153 # As long as our Pylons application does expect "unprepared" settings, make
153 # As long as our Pylons application does expect "unprepared" settings, make
154 # sure that we keep an unmodified copy. This avoids unintentional change of
154 # sure that we keep an unmodified copy. This avoids unintentional change of
155 # behavior in the old application.
155 # behavior in the old application.
156 settings_pylons = settings.copy()
156 settings_pylons = settings.copy()
157
157
158 sanitize_settings_and_apply_defaults(settings)
158 sanitize_settings_and_apply_defaults(settings)
159 config = Configurator(settings=settings)
159 config = Configurator(settings=settings)
160 add_pylons_compat_data(config.registry, global_config, settings_pylons)
160 add_pylons_compat_data(config.registry, global_config, settings_pylons)
161
161
162 load_pyramid_environment(global_config, settings)
162 load_pyramid_environment(global_config, settings)
163
163
164 includeme_first(config)
164 includeme_first(config)
165 includeme(config)
165 includeme(config)
166 pyramid_app = config.make_wsgi_app()
166 pyramid_app = config.make_wsgi_app()
167 pyramid_app = wrap_app_in_wsgi_middlewares(pyramid_app, config)
167 pyramid_app = wrap_app_in_wsgi_middlewares(pyramid_app, config)
168 pyramid_app.config = config
168 pyramid_app.config = config
169
169
170 # creating the app uses a connection - return it after we are done
170 # creating the app uses a connection - return it after we are done
171 meta.Session.remove()
171 meta.Session.remove()
172
172
173 return pyramid_app
173 return pyramid_app
174
174
175
175
176 def make_not_found_view(config):
176 def make_not_found_view(config):
177 """
177 """
178 This creates the view which should be registered as not-found-view to
178 This creates the view which should be registered as not-found-view to
179 pyramid. Basically it contains of the old pylons app, converted to a view.
179 pyramid. Basically it contains of the old pylons app, converted to a view.
180 Additionally it is wrapped by some other middlewares.
180 Additionally it is wrapped by some other middlewares.
181 """
181 """
182 settings = config.registry.settings
182 settings = config.registry.settings
183 vcs_server_enabled = settings['vcs.server.enable']
183 vcs_server_enabled = settings['vcs.server.enable']
184
184
185 # Make pylons app from unprepared settings.
185 # Make pylons app from unprepared settings.
186 pylons_app = make_app(
186 pylons_app = make_app(
187 config.registry._pylons_compat_global_config,
187 config.registry._pylons_compat_global_config,
188 **config.registry._pylons_compat_settings)
188 **config.registry._pylons_compat_settings)
189 config.registry._pylons_compat_config = pylons_app.config
189 config.registry._pylons_compat_config = pylons_app.config
190
190
191 # Appenlight monitoring.
191 # Appenlight monitoring.
192 pylons_app, appenlight_client = wrap_in_appenlight_if_enabled(
192 pylons_app, appenlight_client = wrap_in_appenlight_if_enabled(
193 pylons_app, settings)
193 pylons_app, settings)
194
194
195 # The pylons app is executed inside of the pyramid 404 exception handler.
195 # The pylons app is executed inside of the pyramid 404 exception handler.
196 # Exceptions which are raised inside of it are not handled by pyramid
196 # Exceptions which are raised inside of it are not handled by pyramid
197 # again. Therefore we add a middleware that invokes the error handler in
197 # again. Therefore we add a middleware that invokes the error handler in
198 # case of an exception or error response. This way we return proper error
198 # case of an exception or error response. This way we return proper error
199 # HTML pages in case of an error.
199 # HTML pages in case of an error.
200 reraise = (settings.get('debugtoolbar.enabled', False) or
200 reraise = (settings.get('debugtoolbar.enabled', False) or
201 rhodecode.disable_error_handler)
201 rhodecode.disable_error_handler)
202 pylons_app = PylonsErrorHandlingMiddleware(
202 pylons_app = PylonsErrorHandlingMiddleware(
203 pylons_app, error_handler, reraise)
203 pylons_app, error_handler, reraise)
204
204
205 # The VCSMiddleware shall operate like a fallback if pyramid doesn't find a
205 # The VCSMiddleware shall operate like a fallback if pyramid doesn't find a
206 # view to handle the request. Therefore it is wrapped around the pylons
206 # view to handle the request. Therefore it is wrapped around the pylons
207 # app. It has to be outside of the error handling otherwise error responses
207 # app. It has to be outside of the error handling otherwise error responses
208 # from the vcsserver are converted to HTML error pages. This confuses the
208 # from the vcsserver are converted to HTML error pages. This confuses the
209 # command line tools and the user won't get a meaningful error message.
209 # command line tools and the user won't get a meaningful error message.
210 if vcs_server_enabled:
210 if vcs_server_enabled:
211 pylons_app = VCSMiddleware(
211 pylons_app = VCSMiddleware(
212 pylons_app, settings, appenlight_client, registry=config.registry)
212 pylons_app, settings, appenlight_client, registry=config.registry)
213
213
214 # Convert WSGI app to pyramid view and return it.
214 # Convert WSGI app to pyramid view and return it.
215 return wsgiapp(pylons_app)
215 return wsgiapp(pylons_app)
216
216
217
217
218 def add_pylons_compat_data(registry, global_config, settings):
218 def add_pylons_compat_data(registry, global_config, settings):
219 """
219 """
220 Attach data to the registry to support the Pylons integration.
220 Attach data to the registry to support the Pylons integration.
221 """
221 """
222 registry._pylons_compat_global_config = global_config
222 registry._pylons_compat_global_config = global_config
223 registry._pylons_compat_settings = settings
223 registry._pylons_compat_settings = settings
224
224
225
225
226 def error_handler(exception, request):
226 def error_handler(exception, request):
227 import rhodecode
227 import rhodecode
228 from rhodecode.lib import helpers
228 from rhodecode.lib import helpers
229
229
230 rhodecode_title = rhodecode.CONFIG.get('rhodecode_title') or 'RhodeCode'
230 rhodecode_title = rhodecode.CONFIG.get('rhodecode_title') or 'RhodeCode'
231
231
232 base_response = HTTPInternalServerError()
232 base_response = HTTPInternalServerError()
233 # prefer original exception for the response since it may have headers set
233 # prefer original exception for the response since it may have headers set
234 if isinstance(exception, HTTPException):
234 if isinstance(exception, HTTPException):
235 base_response = exception
235 base_response = exception
236 elif isinstance(exception, VCSCommunicationError):
236 elif isinstance(exception, VCSCommunicationError):
237 base_response = VCSServerUnavailable()
237 base_response = VCSServerUnavailable()
238
238
239 def is_http_error(response):
239 def is_http_error(response):
240 # error which should have traceback
240 # error which should have traceback
241 return response.status_code > 499
241 return response.status_code > 499
242
242
243 if is_http_error(base_response):
243 if is_http_error(base_response):
244 log.exception(
244 log.exception(
245 'error occurred handling this request for path: %s', request.path)
245 'error occurred handling this request for path: %s', request.path)
246
246
247 c = AttributeDict()
247 c = AttributeDict()
248 c.error_message = base_response.status
248 c.error_message = base_response.status
249 c.error_explanation = base_response.explanation or str(base_response)
249 c.error_explanation = base_response.explanation or str(base_response)
250 c.visual = AttributeDict()
250 c.visual = AttributeDict()
251
251
252 c.visual.rhodecode_support_url = (
252 c.visual.rhodecode_support_url = (
253 request.registry.settings.get('rhodecode_support_url') or
253 request.registry.settings.get('rhodecode_support_url') or
254 request.route_url('rhodecode_support')
254 request.route_url('rhodecode_support')
255 )
255 )
256 c.redirect_time = 0
256 c.redirect_time = 0
257 c.rhodecode_name = rhodecode_title
257 c.rhodecode_name = rhodecode_title
258 if not c.rhodecode_name:
258 if not c.rhodecode_name:
259 c.rhodecode_name = 'Rhodecode'
259 c.rhodecode_name = 'Rhodecode'
260
260
261 c.causes = []
261 c.causes = []
262 if hasattr(base_response, 'causes'):
262 if hasattr(base_response, 'causes'):
263 c.causes = base_response.causes
263 c.causes = base_response.causes
264 c.messages = helpers.flash.pop_messages()
264 c.messages = helpers.flash.pop_messages()
265
265
266 response = render_to_response(
266 response = render_to_response(
267 '/errors/error_document.mako', {'c': c, 'h': helpers}, request=request,
267 '/errors/error_document.mako', {'c': c, 'h': helpers}, request=request,
268 response=base_response)
268 response=base_response)
269
269
270 return response
270 return response
271
271
272
272
273 def includeme(config):
273 def includeme(config):
274 settings = config.registry.settings
274 settings = config.registry.settings
275
275
276 # plugin information
276 # plugin information
277 config.registry.rhodecode_plugins = OrderedDict()
277 config.registry.rhodecode_plugins = OrderedDict()
278
278
279 config.add_directive(
279 config.add_directive(
280 'register_rhodecode_plugin', register_rhodecode_plugin)
280 'register_rhodecode_plugin', register_rhodecode_plugin)
281
281
282 if asbool(settings.get('appenlight', 'false')):
282 if asbool(settings.get('appenlight', 'false')):
283 config.include('appenlight_client.ext.pyramid_tween')
283 config.include('appenlight_client.ext.pyramid_tween')
284
284
285 # Includes which are required. The application would fail without them.
285 # Includes which are required. The application would fail without them.
286 config.include('pyramid_mako')
286 config.include('pyramid_mako')
287 config.include('pyramid_beaker')
287 config.include('pyramid_beaker')
288
288
289 config.include('rhodecode.authentication')
289 config.include('rhodecode.authentication')
290 config.include('rhodecode.integrations')
290 config.include('rhodecode.integrations')
291
291
292 # apps
292 # apps
293 config.include('rhodecode.apps._base')
293 config.include('rhodecode.apps._base')
294 config.include('rhodecode.apps.ops')
294 config.include('rhodecode.apps.ops')
295
295
296 config.include('rhodecode.apps.admin')
296 config.include('rhodecode.apps.admin')
297 config.include('rhodecode.apps.channelstream')
297 config.include('rhodecode.apps.channelstream')
298 config.include('rhodecode.apps.login')
298 config.include('rhodecode.apps.login')
299 config.include('rhodecode.apps.home')
299 config.include('rhodecode.apps.home')
300 config.include('rhodecode.apps.repository')
300 config.include('rhodecode.apps.repository')
301 config.include('rhodecode.apps.repo_group')
301 config.include('rhodecode.apps.repo_group')
302 config.include('rhodecode.apps.search')
302 config.include('rhodecode.apps.search')
303 config.include('rhodecode.apps.user_profile')
303 config.include('rhodecode.apps.user_profile')
304 config.include('rhodecode.apps.my_account')
304 config.include('rhodecode.apps.my_account')
305 config.include('rhodecode.apps.svn_support')
305 config.include('rhodecode.apps.svn_support')
306 config.include('rhodecode.apps.gist')
306 config.include('rhodecode.apps.gist')
307
307
308 config.include('rhodecode.apps.debug_style')
308 config.include('rhodecode.tweens')
309 config.include('rhodecode.tweens')
309 config.include('rhodecode.api')
310 config.include('rhodecode.api')
310
311
311 config.add_route(
312 config.add_route(
312 'rhodecode_support', 'https://rhodecode.com/help/', static=True)
313 'rhodecode_support', 'https://rhodecode.com/help/', static=True)
313
314
314 config.add_translation_dirs('rhodecode:i18n/')
315 config.add_translation_dirs('rhodecode:i18n/')
315 settings['default_locale_name'] = settings.get('lang', 'en')
316 settings['default_locale_name'] = settings.get('lang', 'en')
316
317
317 # Add subscribers.
318 # Add subscribers.
318 config.add_subscriber(scan_repositories_if_enabled, ApplicationCreated)
319 config.add_subscriber(scan_repositories_if_enabled, ApplicationCreated)
319 config.add_subscriber(write_metadata_if_needed, ApplicationCreated)
320 config.add_subscriber(write_metadata_if_needed, ApplicationCreated)
320 config.add_subscriber(write_js_routes_if_enabled, ApplicationCreated)
321 config.add_subscriber(write_js_routes_if_enabled, ApplicationCreated)
321
322
322 config.add_request_method(
323 config.add_request_method(
323 'rhodecode.lib.partial_renderer.get_partial_renderer',
324 'rhodecode.lib.partial_renderer.get_partial_renderer',
324 'get_partial_renderer')
325 'get_partial_renderer')
325
326
326 # events
327 # events
327 # TODO(marcink): this should be done when pyramid migration is finished
328 # TODO(marcink): this should be done when pyramid migration is finished
328 # config.add_subscriber(
329 # config.add_subscriber(
329 # 'rhodecode.integrations.integrations_event_handler',
330 # 'rhodecode.integrations.integrations_event_handler',
330 # 'rhodecode.events.RhodecodeEvent')
331 # 'rhodecode.events.RhodecodeEvent')
331
332
332 # Set the authorization policy.
333 # Set the authorization policy.
333 authz_policy = ACLAuthorizationPolicy()
334 authz_policy = ACLAuthorizationPolicy()
334 config.set_authorization_policy(authz_policy)
335 config.set_authorization_policy(authz_policy)
335
336
336 # Set the default renderer for HTML templates to mako.
337 # Set the default renderer for HTML templates to mako.
337 config.add_mako_renderer('.html')
338 config.add_mako_renderer('.html')
338
339
339 config.add_renderer(
340 config.add_renderer(
340 name='json_ext',
341 name='json_ext',
341 factory='rhodecode.lib.ext_json_renderer.pyramid_ext_json')
342 factory='rhodecode.lib.ext_json_renderer.pyramid_ext_json')
342
343
343 # include RhodeCode plugins
344 # include RhodeCode plugins
344 includes = aslist(settings.get('rhodecode.includes', []))
345 includes = aslist(settings.get('rhodecode.includes', []))
345 for inc in includes:
346 for inc in includes:
346 config.include(inc)
347 config.include(inc)
347
348
348 # This is the glue which allows us to migrate in chunks. By registering the
349 # This is the glue which allows us to migrate in chunks. By registering the
349 # pylons based application as the "Not Found" view in Pyramid, we will
350 # pylons based application as the "Not Found" view in Pyramid, we will
350 # fallback to the old application each time the new one does not yet know
351 # fallback to the old application each time the new one does not yet know
351 # how to handle a request.
352 # how to handle a request.
352 config.add_notfound_view(make_not_found_view(config))
353 config.add_notfound_view(make_not_found_view(config))
353
354
354 if not settings.get('debugtoolbar.enabled', False):
355 if not settings.get('debugtoolbar.enabled', False):
355 # if no toolbar, then any exception gets caught and rendered
356 # if no toolbar, then any exception gets caught and rendered
356 config.add_view(error_handler, context=Exception)
357 config.add_view(error_handler, context=Exception)
357
358
358 config.add_view(error_handler, context=HTTPError)
359 config.add_view(error_handler, context=HTTPError)
359
360
360
361
361 def includeme_first(config):
362 def includeme_first(config):
362 # redirect automatic browser favicon.ico requests to correct place
363 # redirect automatic browser favicon.ico requests to correct place
363 def favicon_redirect(context, request):
364 def favicon_redirect(context, request):
364 return HTTPFound(
365 return HTTPFound(
365 request.static_path('rhodecode:public/images/favicon.ico'))
366 request.static_path('rhodecode:public/images/favicon.ico'))
366
367
367 config.add_view(favicon_redirect, route_name='favicon')
368 config.add_view(favicon_redirect, route_name='favicon')
368 config.add_route('favicon', '/favicon.ico')
369 config.add_route('favicon', '/favicon.ico')
369
370
370 def robots_redirect(context, request):
371 def robots_redirect(context, request):
371 return HTTPFound(
372 return HTTPFound(
372 request.static_path('rhodecode:public/robots.txt'))
373 request.static_path('rhodecode:public/robots.txt'))
373
374
374 config.add_view(robots_redirect, route_name='robots')
375 config.add_view(robots_redirect, route_name='robots')
375 config.add_route('robots', '/robots.txt')
376 config.add_route('robots', '/robots.txt')
376
377
377 config.add_static_view(
378 config.add_static_view(
378 '_static/deform', 'deform:static')
379 '_static/deform', 'deform:static')
379 config.add_static_view(
380 config.add_static_view(
380 '_static/rhodecode', path='rhodecode:public', cache_max_age=3600 * 24)
381 '_static/rhodecode', path='rhodecode:public', cache_max_age=3600 * 24)
381
382
382
383
383 def wrap_app_in_wsgi_middlewares(pyramid_app, config):
384 def wrap_app_in_wsgi_middlewares(pyramid_app, config):
384 """
385 """
385 Apply outer WSGI middlewares around the application.
386 Apply outer WSGI middlewares around the application.
386
387
387 Part of this has been moved up from the Pylons layer, so that the
388 Part of this has been moved up from the Pylons layer, so that the
388 data is also available if old Pylons code is hit through an already ported
389 data is also available if old Pylons code is hit through an already ported
389 view.
390 view.
390 """
391 """
391 settings = config.registry.settings
392 settings = config.registry.settings
392
393
393 # enable https redirects based on HTTP_X_URL_SCHEME set by proxy
394 # enable https redirects based on HTTP_X_URL_SCHEME set by proxy
394 pyramid_app = HttpsFixup(pyramid_app, settings)
395 pyramid_app = HttpsFixup(pyramid_app, settings)
395
396
396 # Add RoutesMiddleware to support the pylons compatibility tween during
397 # Add RoutesMiddleware to support the pylons compatibility tween during
397 # migration to pyramid.
398 # migration to pyramid.
398 pyramid_app = SkippableRoutesMiddleware(
399 pyramid_app = SkippableRoutesMiddleware(
399 pyramid_app, config.registry._pylons_compat_config['routes.map'],
400 pyramid_app, config.registry._pylons_compat_config['routes.map'],
400 skip_prefixes=(STATIC_FILE_PREFIX, '/_debug_toolbar'))
401 skip_prefixes=(STATIC_FILE_PREFIX, '/_debug_toolbar'))
401
402
402 pyramid_app, _ = wrap_in_appenlight_if_enabled(pyramid_app, settings)
403 pyramid_app, _ = wrap_in_appenlight_if_enabled(pyramid_app, settings)
403
404
404 if settings['gzip_responses']:
405 if settings['gzip_responses']:
405 pyramid_app = make_gzip_middleware(
406 pyramid_app = make_gzip_middleware(
406 pyramid_app, settings, compress_level=1)
407 pyramid_app, settings, compress_level=1)
407
408
408 # this should be the outer most middleware in the wsgi stack since
409 # this should be the outer most middleware in the wsgi stack since
409 # middleware like Routes make database calls
410 # middleware like Routes make database calls
410 def pyramid_app_with_cleanup(environ, start_response):
411 def pyramid_app_with_cleanup(environ, start_response):
411 try:
412 try:
412 return pyramid_app(environ, start_response)
413 return pyramid_app(environ, start_response)
413 finally:
414 finally:
414 # Dispose current database session and rollback uncommitted
415 # Dispose current database session and rollback uncommitted
415 # transactions.
416 # transactions.
416 meta.Session.remove()
417 meta.Session.remove()
417
418
418 # In a single threaded mode server, on non sqlite db we should have
419 # In a single threaded mode server, on non sqlite db we should have
419 # '0 Current Checked out connections' at the end of a request,
420 # '0 Current Checked out connections' at the end of a request,
420 # if not, then something, somewhere is leaving a connection open
421 # if not, then something, somewhere is leaving a connection open
421 pool = meta.Base.metadata.bind.engine.pool
422 pool = meta.Base.metadata.bind.engine.pool
422 log.debug('sa pool status: %s', pool.status())
423 log.debug('sa pool status: %s', pool.status())
423
424
424 return pyramid_app_with_cleanup
425 return pyramid_app_with_cleanup
425
426
426
427
427 def sanitize_settings_and_apply_defaults(settings):
428 def sanitize_settings_and_apply_defaults(settings):
428 """
429 """
429 Applies settings defaults and does all type conversion.
430 Applies settings defaults and does all type conversion.
430
431
431 We would move all settings parsing and preparation into this place, so that
432 We would move all settings parsing and preparation into this place, so that
432 we have only one place left which deals with this part. The remaining parts
433 we have only one place left which deals with this part. The remaining parts
433 of the application would start to rely fully on well prepared settings.
434 of the application would start to rely fully on well prepared settings.
434
435
435 This piece would later be split up per topic to avoid a big fat monster
436 This piece would later be split up per topic to avoid a big fat monster
436 function.
437 function.
437 """
438 """
438
439
439 # Pyramid's mako renderer has to search in the templates folder so that the
440 # Pyramid's mako renderer has to search in the templates folder so that the
440 # old templates still work. Ported and new templates are expected to use
441 # old templates still work. Ported and new templates are expected to use
441 # real asset specifications for the includes.
442 # real asset specifications for the includes.
442 mako_directories = settings.setdefault('mako.directories', [
443 mako_directories = settings.setdefault('mako.directories', [
443 # Base templates of the original Pylons application
444 # Base templates of the original Pylons application
444 'rhodecode:templates',
445 'rhodecode:templates',
445 ])
446 ])
446 log.debug(
447 log.debug(
447 "Using the following Mako template directories: %s",
448 "Using the following Mako template directories: %s",
448 mako_directories)
449 mako_directories)
449
450
450 # Default includes, possible to change as a user
451 # Default includes, possible to change as a user
451 pyramid_includes = settings.setdefault('pyramid.includes', [
452 pyramid_includes = settings.setdefault('pyramid.includes', [
452 'rhodecode.lib.middleware.request_wrapper',
453 'rhodecode.lib.middleware.request_wrapper',
453 ])
454 ])
454 log.debug(
455 log.debug(
455 "Using the following pyramid.includes: %s",
456 "Using the following pyramid.includes: %s",
456 pyramid_includes)
457 pyramid_includes)
457
458
458 # TODO: johbo: Re-think this, usually the call to config.include
459 # TODO: johbo: Re-think this, usually the call to config.include
459 # should allow to pass in a prefix.
460 # should allow to pass in a prefix.
460 settings.setdefault('rhodecode.api.url', '/_admin/api')
461 settings.setdefault('rhodecode.api.url', '/_admin/api')
461
462
462 # Sanitize generic settings.
463 # Sanitize generic settings.
463 _list_setting(settings, 'default_encoding', 'UTF-8')
464 _list_setting(settings, 'default_encoding', 'UTF-8')
464 _bool_setting(settings, 'is_test', 'false')
465 _bool_setting(settings, 'is_test', 'false')
465 _bool_setting(settings, 'gzip_responses', 'false')
466 _bool_setting(settings, 'gzip_responses', 'false')
466
467
467 # Call split out functions that sanitize settings for each topic.
468 # Call split out functions that sanitize settings for each topic.
468 _sanitize_appenlight_settings(settings)
469 _sanitize_appenlight_settings(settings)
469 _sanitize_vcs_settings(settings)
470 _sanitize_vcs_settings(settings)
470
471
471 return settings
472 return settings
472
473
473
474
474 def _sanitize_appenlight_settings(settings):
475 def _sanitize_appenlight_settings(settings):
475 _bool_setting(settings, 'appenlight', 'false')
476 _bool_setting(settings, 'appenlight', 'false')
476
477
477
478
478 def _sanitize_vcs_settings(settings):
479 def _sanitize_vcs_settings(settings):
479 """
480 """
480 Applies settings defaults and does type conversion for all VCS related
481 Applies settings defaults and does type conversion for all VCS related
481 settings.
482 settings.
482 """
483 """
483 _string_setting(settings, 'vcs.svn.compatible_version', '')
484 _string_setting(settings, 'vcs.svn.compatible_version', '')
484 _string_setting(settings, 'git_rev_filter', '--all')
485 _string_setting(settings, 'git_rev_filter', '--all')
485 _string_setting(settings, 'vcs.hooks.protocol', 'http')
486 _string_setting(settings, 'vcs.hooks.protocol', 'http')
486 _string_setting(settings, 'vcs.scm_app_implementation', 'http')
487 _string_setting(settings, 'vcs.scm_app_implementation', 'http')
487 _string_setting(settings, 'vcs.server', '')
488 _string_setting(settings, 'vcs.server', '')
488 _string_setting(settings, 'vcs.server.log_level', 'debug')
489 _string_setting(settings, 'vcs.server.log_level', 'debug')
489 _string_setting(settings, 'vcs.server.protocol', 'http')
490 _string_setting(settings, 'vcs.server.protocol', 'http')
490 _bool_setting(settings, 'startup.import_repos', 'false')
491 _bool_setting(settings, 'startup.import_repos', 'false')
491 _bool_setting(settings, 'vcs.hooks.direct_calls', 'false')
492 _bool_setting(settings, 'vcs.hooks.direct_calls', 'false')
492 _bool_setting(settings, 'vcs.server.enable', 'true')
493 _bool_setting(settings, 'vcs.server.enable', 'true')
493 _bool_setting(settings, 'vcs.start_server', 'false')
494 _bool_setting(settings, 'vcs.start_server', 'false')
494 _list_setting(settings, 'vcs.backends', 'hg, git, svn')
495 _list_setting(settings, 'vcs.backends', 'hg, git, svn')
495 _int_setting(settings, 'vcs.connection_timeout', 3600)
496 _int_setting(settings, 'vcs.connection_timeout', 3600)
496
497
497 # Support legacy values of vcs.scm_app_implementation. Legacy
498 # Support legacy values of vcs.scm_app_implementation. Legacy
498 # configurations may use 'rhodecode.lib.middleware.utils.scm_app_http'
499 # configurations may use 'rhodecode.lib.middleware.utils.scm_app_http'
499 # which is now mapped to 'http'.
500 # which is now mapped to 'http'.
500 scm_app_impl = settings['vcs.scm_app_implementation']
501 scm_app_impl = settings['vcs.scm_app_implementation']
501 if scm_app_impl == 'rhodecode.lib.middleware.utils.scm_app_http':
502 if scm_app_impl == 'rhodecode.lib.middleware.utils.scm_app_http':
502 settings['vcs.scm_app_implementation'] = 'http'
503 settings['vcs.scm_app_implementation'] = 'http'
503
504
504
505
505 def _int_setting(settings, name, default):
506 def _int_setting(settings, name, default):
506 settings[name] = int(settings.get(name, default))
507 settings[name] = int(settings.get(name, default))
507
508
508
509
509 def _bool_setting(settings, name, default):
510 def _bool_setting(settings, name, default):
510 input = settings.get(name, default)
511 input = settings.get(name, default)
511 if isinstance(input, unicode):
512 if isinstance(input, unicode):
512 input = input.encode('utf8')
513 input = input.encode('utf8')
513 settings[name] = asbool(input)
514 settings[name] = asbool(input)
514
515
515
516
516 def _list_setting(settings, name, default):
517 def _list_setting(settings, name, default):
517 raw_value = settings.get(name, default)
518 raw_value = settings.get(name, default)
518
519
519 old_separator = ','
520 old_separator = ','
520 if old_separator in raw_value:
521 if old_separator in raw_value:
521 # If we get a comma separated list, pass it to our own function.
522 # If we get a comma separated list, pass it to our own function.
522 settings[name] = rhodecode_aslist(raw_value, sep=old_separator)
523 settings[name] = rhodecode_aslist(raw_value, sep=old_separator)
523 else:
524 else:
524 # Otherwise we assume it uses pyramids space/newline separation.
525 # Otherwise we assume it uses pyramids space/newline separation.
525 settings[name] = aslist(raw_value)
526 settings[name] = aslist(raw_value)
526
527
527
528
528 def _string_setting(settings, name, default, lower=True):
529 def _string_setting(settings, name, default, lower=True):
529 value = settings.get(name, default)
530 value = settings.get(name, default)
530 if lower:
531 if lower:
531 value = value.lower()
532 value = value.lower()
532 settings[name] = value
533 settings[name] = value
@@ -1,893 +1,884 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2
2
3 # Copyright (C) 2010-2017 RhodeCode GmbH
3 # Copyright (C) 2010-2017 RhodeCode GmbH
4 #
4 #
5 # This program is free software: you can redistribute it and/or modify
5 # This program is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU Affero General Public License, version 3
6 # it under the terms of the GNU Affero General Public License, version 3
7 # (only), as published by the Free Software Foundation.
7 # (only), as published by the Free Software Foundation.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU Affero General Public License
14 # You should have received a copy of the GNU Affero General Public License
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 #
16 #
17 # This program is dual-licensed. If you wish to learn more about the
17 # This program is dual-licensed. If you wish to learn more about the
18 # RhodeCode Enterprise Edition, including its added features, Support services,
18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20
20
21 """
21 """
22 Routes configuration
22 Routes configuration
23
23
24 The more specific and detailed routes should be defined first so they
24 The more specific and detailed routes should be defined first so they
25 may take precedent over the more generic routes. For more information
25 may take precedent over the more generic routes. For more information
26 refer to the routes manual at http://routes.groovie.org/docs/
26 refer to the routes manual at http://routes.groovie.org/docs/
27
27
28 IMPORTANT: if you change any routing here, make sure to take a look at lib/base.py
28 IMPORTANT: if you change any routing here, make sure to take a look at lib/base.py
29 and _route_name variable which uses some of stored naming here to do redirects.
29 and _route_name variable which uses some of stored naming here to do redirects.
30 """
30 """
31 import os
31 import os
32 import re
32 import re
33 from routes import Mapper
33 from routes import Mapper
34
34
35 # prefix for non repository related links needs to be prefixed with `/`
35 # prefix for non repository related links needs to be prefixed with `/`
36 ADMIN_PREFIX = '/_admin'
36 ADMIN_PREFIX = '/_admin'
37 STATIC_FILE_PREFIX = '/_static'
37 STATIC_FILE_PREFIX = '/_static'
38
38
39 # Default requirements for URL parts
39 # Default requirements for URL parts
40 URL_NAME_REQUIREMENTS = {
40 URL_NAME_REQUIREMENTS = {
41 # group name can have a slash in them, but they must not end with a slash
41 # group name can have a slash in them, but they must not end with a slash
42 'group_name': r'.*?[^/]',
42 'group_name': r'.*?[^/]',
43 'repo_group_name': r'.*?[^/]',
43 'repo_group_name': r'.*?[^/]',
44 # repo names can have a slash in them, but they must not end with a slash
44 # repo names can have a slash in them, but they must not end with a slash
45 'repo_name': r'.*?[^/]',
45 'repo_name': r'.*?[^/]',
46 # file path eats up everything at the end
46 # file path eats up everything at the end
47 'f_path': r'.*',
47 'f_path': r'.*',
48 # reference types
48 # reference types
49 'source_ref_type': '(branch|book|tag|rev|\%\(source_ref_type\)s)',
49 'source_ref_type': '(branch|book|tag|rev|\%\(source_ref_type\)s)',
50 'target_ref_type': '(branch|book|tag|rev|\%\(target_ref_type\)s)',
50 'target_ref_type': '(branch|book|tag|rev|\%\(target_ref_type\)s)',
51 }
51 }
52
52
53
53
54 def add_route_requirements(route_path, requirements):
54 def add_route_requirements(route_path, requirements):
55 """
55 """
56 Adds regex requirements to pyramid routes using a mapping dict
56 Adds regex requirements to pyramid routes using a mapping dict
57
57
58 >>> add_route_requirements('/{action}/{id}', {'id': r'\d+'})
58 >>> add_route_requirements('/{action}/{id}', {'id': r'\d+'})
59 '/{action}/{id:\d+}'
59 '/{action}/{id:\d+}'
60
60
61 """
61 """
62 for key, regex in requirements.items():
62 for key, regex in requirements.items():
63 route_path = route_path.replace('{%s}' % key, '{%s:%s}' % (key, regex))
63 route_path = route_path.replace('{%s}' % key, '{%s:%s}' % (key, regex))
64 return route_path
64 return route_path
65
65
66
66
67 class JSRoutesMapper(Mapper):
67 class JSRoutesMapper(Mapper):
68 """
68 """
69 Wrapper for routes.Mapper to make pyroutes compatible url definitions
69 Wrapper for routes.Mapper to make pyroutes compatible url definitions
70 """
70 """
71 _named_route_regex = re.compile(r'^[a-z-_0-9A-Z]+$')
71 _named_route_regex = re.compile(r'^[a-z-_0-9A-Z]+$')
72 _argument_prog = re.compile('\{(.*?)\}|:\((.*)\)')
72 _argument_prog = re.compile('\{(.*?)\}|:\((.*)\)')
73 def __init__(self, *args, **kw):
73 def __init__(self, *args, **kw):
74 super(JSRoutesMapper, self).__init__(*args, **kw)
74 super(JSRoutesMapper, self).__init__(*args, **kw)
75 self._jsroutes = []
75 self._jsroutes = []
76
76
77 def connect(self, *args, **kw):
77 def connect(self, *args, **kw):
78 """
78 """
79 Wrapper for connect to take an extra argument jsroute=True
79 Wrapper for connect to take an extra argument jsroute=True
80
80
81 :param jsroute: boolean, if True will add the route to the pyroutes list
81 :param jsroute: boolean, if True will add the route to the pyroutes list
82 """
82 """
83 if kw.pop('jsroute', False):
83 if kw.pop('jsroute', False):
84 if not self._named_route_regex.match(args[0]):
84 if not self._named_route_regex.match(args[0]):
85 raise Exception('only named routes can be added to pyroutes')
85 raise Exception('only named routes can be added to pyroutes')
86 self._jsroutes.append(args[0])
86 self._jsroutes.append(args[0])
87
87
88 super(JSRoutesMapper, self).connect(*args, **kw)
88 super(JSRoutesMapper, self).connect(*args, **kw)
89
89
90 def _extract_route_information(self, route):
90 def _extract_route_information(self, route):
91 """
91 """
92 Convert a route into tuple(name, path, args), eg:
92 Convert a route into tuple(name, path, args), eg:
93 ('show_user', '/profile/%(username)s', ['username'])
93 ('show_user', '/profile/%(username)s', ['username'])
94 """
94 """
95 routepath = route.routepath
95 routepath = route.routepath
96 def replace(matchobj):
96 def replace(matchobj):
97 if matchobj.group(1):
97 if matchobj.group(1):
98 return "%%(%s)s" % matchobj.group(1).split(':')[0]
98 return "%%(%s)s" % matchobj.group(1).split(':')[0]
99 else:
99 else:
100 return "%%(%s)s" % matchobj.group(2)
100 return "%%(%s)s" % matchobj.group(2)
101
101
102 routepath = self._argument_prog.sub(replace, routepath)
102 routepath = self._argument_prog.sub(replace, routepath)
103 return (
103 return (
104 route.name,
104 route.name,
105 routepath,
105 routepath,
106 [(arg[0].split(':')[0] if arg[0] != '' else arg[1])
106 [(arg[0].split(':')[0] if arg[0] != '' else arg[1])
107 for arg in self._argument_prog.findall(route.routepath)]
107 for arg in self._argument_prog.findall(route.routepath)]
108 )
108 )
109
109
110 def jsroutes(self):
110 def jsroutes(self):
111 """
111 """
112 Return a list of pyroutes.js compatible routes
112 Return a list of pyroutes.js compatible routes
113 """
113 """
114 for route_name in self._jsroutes:
114 for route_name in self._jsroutes:
115 yield self._extract_route_information(self._routenames[route_name])
115 yield self._extract_route_information(self._routenames[route_name])
116
116
117
117
118 def make_map(config):
118 def make_map(config):
119 """Create, configure and return the routes Mapper"""
119 """Create, configure and return the routes Mapper"""
120 rmap = JSRoutesMapper(
120 rmap = JSRoutesMapper(
121 directory=config['pylons.paths']['controllers'],
121 directory=config['pylons.paths']['controllers'],
122 always_scan=config['debug'])
122 always_scan=config['debug'])
123 rmap.minimization = False
123 rmap.minimization = False
124 rmap.explicit = False
124 rmap.explicit = False
125
125
126 from rhodecode.lib.utils2 import str2bool
126 from rhodecode.lib.utils2 import str2bool
127 from rhodecode.model import repo, repo_group
127 from rhodecode.model import repo, repo_group
128
128
129 def check_repo(environ, match_dict):
129 def check_repo(environ, match_dict):
130 """
130 """
131 check for valid repository for proper 404 handling
131 check for valid repository for proper 404 handling
132
132
133 :param environ:
133 :param environ:
134 :param match_dict:
134 :param match_dict:
135 """
135 """
136 repo_name = match_dict.get('repo_name')
136 repo_name = match_dict.get('repo_name')
137
137
138 if match_dict.get('f_path'):
138 if match_dict.get('f_path'):
139 # fix for multiple initial slashes that causes errors
139 # fix for multiple initial slashes that causes errors
140 match_dict['f_path'] = match_dict['f_path'].lstrip('/')
140 match_dict['f_path'] = match_dict['f_path'].lstrip('/')
141 repo_model = repo.RepoModel()
141 repo_model = repo.RepoModel()
142 by_name_match = repo_model.get_by_repo_name(repo_name)
142 by_name_match = repo_model.get_by_repo_name(repo_name)
143 # if we match quickly from database, short circuit the operation,
143 # if we match quickly from database, short circuit the operation,
144 # and validate repo based on the type.
144 # and validate repo based on the type.
145 if by_name_match:
145 if by_name_match:
146 return True
146 return True
147
147
148 by_id_match = repo_model.get_repo_by_id(repo_name)
148 by_id_match = repo_model.get_repo_by_id(repo_name)
149 if by_id_match:
149 if by_id_match:
150 repo_name = by_id_match.repo_name
150 repo_name = by_id_match.repo_name
151 match_dict['repo_name'] = repo_name
151 match_dict['repo_name'] = repo_name
152 return True
152 return True
153
153
154 return False
154 return False
155
155
156 def check_group(environ, match_dict):
156 def check_group(environ, match_dict):
157 """
157 """
158 check for valid repository group path for proper 404 handling
158 check for valid repository group path for proper 404 handling
159
159
160 :param environ:
160 :param environ:
161 :param match_dict:
161 :param match_dict:
162 """
162 """
163 repo_group_name = match_dict.get('group_name')
163 repo_group_name = match_dict.get('group_name')
164 repo_group_model = repo_group.RepoGroupModel()
164 repo_group_model = repo_group.RepoGroupModel()
165 by_name_match = repo_group_model.get_by_group_name(repo_group_name)
165 by_name_match = repo_group_model.get_by_group_name(repo_group_name)
166 if by_name_match:
166 if by_name_match:
167 return True
167 return True
168
168
169 return False
169 return False
170
170
171 def check_user_group(environ, match_dict):
171 def check_user_group(environ, match_dict):
172 """
172 """
173 check for valid user group for proper 404 handling
173 check for valid user group for proper 404 handling
174
174
175 :param environ:
175 :param environ:
176 :param match_dict:
176 :param match_dict:
177 """
177 """
178 return True
178 return True
179
179
180 def check_int(environ, match_dict):
180 def check_int(environ, match_dict):
181 return match_dict.get('id').isdigit()
181 return match_dict.get('id').isdigit()
182
182
183
183
184 #==========================================================================
184 #==========================================================================
185 # CUSTOM ROUTES HERE
185 # CUSTOM ROUTES HERE
186 #==========================================================================
186 #==========================================================================
187
187
188 # ping and pylons error test
188 # ping and pylons error test
189 rmap.connect('ping', '%s/ping' % (ADMIN_PREFIX,), controller='home', action='ping')
189 rmap.connect('ping', '%s/ping' % (ADMIN_PREFIX,), controller='home', action='ping')
190 rmap.connect('error_test', '%s/error_test' % (ADMIN_PREFIX,), controller='home', action='error_test')
190 rmap.connect('error_test', '%s/error_test' % (ADMIN_PREFIX,), controller='home', action='error_test')
191
191
192 # ADMIN REPOSITORY ROUTES
192 # ADMIN REPOSITORY ROUTES
193 with rmap.submapper(path_prefix=ADMIN_PREFIX,
193 with rmap.submapper(path_prefix=ADMIN_PREFIX,
194 controller='admin/repos') as m:
194 controller='admin/repos') as m:
195 m.connect('repos', '/repos',
195 m.connect('repos', '/repos',
196 action='create', conditions={'method': ['POST']})
196 action='create', conditions={'method': ['POST']})
197 m.connect('repos', '/repos',
197 m.connect('repos', '/repos',
198 action='index', conditions={'method': ['GET']})
198 action='index', conditions={'method': ['GET']})
199 m.connect('new_repo', '/create_repository', jsroute=True,
199 m.connect('new_repo', '/create_repository', jsroute=True,
200 action='create_repository', conditions={'method': ['GET']})
200 action='create_repository', conditions={'method': ['GET']})
201 m.connect('delete_repo', '/repos/{repo_name}',
201 m.connect('delete_repo', '/repos/{repo_name}',
202 action='delete', conditions={'method': ['DELETE']},
202 action='delete', conditions={'method': ['DELETE']},
203 requirements=URL_NAME_REQUIREMENTS)
203 requirements=URL_NAME_REQUIREMENTS)
204 m.connect('repo', '/repos/{repo_name}',
204 m.connect('repo', '/repos/{repo_name}',
205 action='show', conditions={'method': ['GET'],
205 action='show', conditions={'method': ['GET'],
206 'function': check_repo},
206 'function': check_repo},
207 requirements=URL_NAME_REQUIREMENTS)
207 requirements=URL_NAME_REQUIREMENTS)
208
208
209 # ADMIN REPOSITORY GROUPS ROUTES
209 # ADMIN REPOSITORY GROUPS ROUTES
210 with rmap.submapper(path_prefix=ADMIN_PREFIX,
210 with rmap.submapper(path_prefix=ADMIN_PREFIX,
211 controller='admin/repo_groups') as m:
211 controller='admin/repo_groups') as m:
212 m.connect('repo_groups', '/repo_groups',
212 m.connect('repo_groups', '/repo_groups',
213 action='create', conditions={'method': ['POST']})
213 action='create', conditions={'method': ['POST']})
214 m.connect('repo_groups', '/repo_groups',
214 m.connect('repo_groups', '/repo_groups',
215 action='index', conditions={'method': ['GET']})
215 action='index', conditions={'method': ['GET']})
216 m.connect('new_repo_group', '/repo_groups/new',
216 m.connect('new_repo_group', '/repo_groups/new',
217 action='new', conditions={'method': ['GET']})
217 action='new', conditions={'method': ['GET']})
218 m.connect('update_repo_group', '/repo_groups/{group_name}',
218 m.connect('update_repo_group', '/repo_groups/{group_name}',
219 action='update', conditions={'method': ['PUT'],
219 action='update', conditions={'method': ['PUT'],
220 'function': check_group},
220 'function': check_group},
221 requirements=URL_NAME_REQUIREMENTS)
221 requirements=URL_NAME_REQUIREMENTS)
222
222
223 # EXTRAS REPO GROUP ROUTES
223 # EXTRAS REPO GROUP ROUTES
224 m.connect('edit_repo_group', '/repo_groups/{group_name}/edit',
224 m.connect('edit_repo_group', '/repo_groups/{group_name}/edit',
225 action='edit',
225 action='edit',
226 conditions={'method': ['GET'], 'function': check_group},
226 conditions={'method': ['GET'], 'function': check_group},
227 requirements=URL_NAME_REQUIREMENTS)
227 requirements=URL_NAME_REQUIREMENTS)
228 m.connect('edit_repo_group', '/repo_groups/{group_name}/edit',
228 m.connect('edit_repo_group', '/repo_groups/{group_name}/edit',
229 action='edit',
229 action='edit',
230 conditions={'method': ['PUT'], 'function': check_group},
230 conditions={'method': ['PUT'], 'function': check_group},
231 requirements=URL_NAME_REQUIREMENTS)
231 requirements=URL_NAME_REQUIREMENTS)
232
232
233 m.connect('edit_repo_group_advanced', '/repo_groups/{group_name}/edit/advanced',
233 m.connect('edit_repo_group_advanced', '/repo_groups/{group_name}/edit/advanced',
234 action='edit_repo_group_advanced',
234 action='edit_repo_group_advanced',
235 conditions={'method': ['GET'], 'function': check_group},
235 conditions={'method': ['GET'], 'function': check_group},
236 requirements=URL_NAME_REQUIREMENTS)
236 requirements=URL_NAME_REQUIREMENTS)
237 m.connect('edit_repo_group_advanced', '/repo_groups/{group_name}/edit/advanced',
237 m.connect('edit_repo_group_advanced', '/repo_groups/{group_name}/edit/advanced',
238 action='edit_repo_group_advanced',
238 action='edit_repo_group_advanced',
239 conditions={'method': ['PUT'], 'function': check_group},
239 conditions={'method': ['PUT'], 'function': check_group},
240 requirements=URL_NAME_REQUIREMENTS)
240 requirements=URL_NAME_REQUIREMENTS)
241
241
242 m.connect('edit_repo_group_perms', '/repo_groups/{group_name}/edit/permissions',
242 m.connect('edit_repo_group_perms', '/repo_groups/{group_name}/edit/permissions',
243 action='edit_repo_group_perms',
243 action='edit_repo_group_perms',
244 conditions={'method': ['GET'], 'function': check_group},
244 conditions={'method': ['GET'], 'function': check_group},
245 requirements=URL_NAME_REQUIREMENTS)
245 requirements=URL_NAME_REQUIREMENTS)
246 m.connect('edit_repo_group_perms', '/repo_groups/{group_name}/edit/permissions',
246 m.connect('edit_repo_group_perms', '/repo_groups/{group_name}/edit/permissions',
247 action='update_perms',
247 action='update_perms',
248 conditions={'method': ['PUT'], 'function': check_group},
248 conditions={'method': ['PUT'], 'function': check_group},
249 requirements=URL_NAME_REQUIREMENTS)
249 requirements=URL_NAME_REQUIREMENTS)
250
250
251 m.connect('delete_repo_group', '/repo_groups/{group_name}',
251 m.connect('delete_repo_group', '/repo_groups/{group_name}',
252 action='delete', conditions={'method': ['DELETE'],
252 action='delete', conditions={'method': ['DELETE'],
253 'function': check_group},
253 'function': check_group},
254 requirements=URL_NAME_REQUIREMENTS)
254 requirements=URL_NAME_REQUIREMENTS)
255
255
256 # ADMIN USER ROUTES
256 # ADMIN USER ROUTES
257 with rmap.submapper(path_prefix=ADMIN_PREFIX,
257 with rmap.submapper(path_prefix=ADMIN_PREFIX,
258 controller='admin/users') as m:
258 controller='admin/users') as m:
259 m.connect('users', '/users',
259 m.connect('users', '/users',
260 action='create', conditions={'method': ['POST']})
260 action='create', conditions={'method': ['POST']})
261 m.connect('new_user', '/users/new',
261 m.connect('new_user', '/users/new',
262 action='new', conditions={'method': ['GET']})
262 action='new', conditions={'method': ['GET']})
263 m.connect('update_user', '/users/{user_id}',
263 m.connect('update_user', '/users/{user_id}',
264 action='update', conditions={'method': ['PUT']})
264 action='update', conditions={'method': ['PUT']})
265 m.connect('delete_user', '/users/{user_id}',
265 m.connect('delete_user', '/users/{user_id}',
266 action='delete', conditions={'method': ['DELETE']})
266 action='delete', conditions={'method': ['DELETE']})
267 m.connect('edit_user', '/users/{user_id}/edit',
267 m.connect('edit_user', '/users/{user_id}/edit',
268 action='edit', conditions={'method': ['GET']}, jsroute=True)
268 action='edit', conditions={'method': ['GET']}, jsroute=True)
269 m.connect('user', '/users/{user_id}',
269 m.connect('user', '/users/{user_id}',
270 action='show', conditions={'method': ['GET']})
270 action='show', conditions={'method': ['GET']})
271 m.connect('force_password_reset_user', '/users/{user_id}/password_reset',
271 m.connect('force_password_reset_user', '/users/{user_id}/password_reset',
272 action='reset_password', conditions={'method': ['POST']})
272 action='reset_password', conditions={'method': ['POST']})
273 m.connect('create_personal_repo_group', '/users/{user_id}/create_repo_group',
273 m.connect('create_personal_repo_group', '/users/{user_id}/create_repo_group',
274 action='create_personal_repo_group', conditions={'method': ['POST']})
274 action='create_personal_repo_group', conditions={'method': ['POST']})
275
275
276 # EXTRAS USER ROUTES
276 # EXTRAS USER ROUTES
277 m.connect('edit_user_advanced', '/users/{user_id}/edit/advanced',
277 m.connect('edit_user_advanced', '/users/{user_id}/edit/advanced',
278 action='edit_advanced', conditions={'method': ['GET']})
278 action='edit_advanced', conditions={'method': ['GET']})
279 m.connect('edit_user_advanced', '/users/{user_id}/edit/advanced',
279 m.connect('edit_user_advanced', '/users/{user_id}/edit/advanced',
280 action='update_advanced', conditions={'method': ['PUT']})
280 action='update_advanced', conditions={'method': ['PUT']})
281
281
282 m.connect('edit_user_global_perms', '/users/{user_id}/edit/global_permissions',
282 m.connect('edit_user_global_perms', '/users/{user_id}/edit/global_permissions',
283 action='edit_global_perms', conditions={'method': ['GET']})
283 action='edit_global_perms', conditions={'method': ['GET']})
284 m.connect('edit_user_global_perms', '/users/{user_id}/edit/global_permissions',
284 m.connect('edit_user_global_perms', '/users/{user_id}/edit/global_permissions',
285 action='update_global_perms', conditions={'method': ['PUT']})
285 action='update_global_perms', conditions={'method': ['PUT']})
286
286
287 m.connect('edit_user_perms_summary', '/users/{user_id}/edit/permissions_summary',
287 m.connect('edit_user_perms_summary', '/users/{user_id}/edit/permissions_summary',
288 action='edit_perms_summary', conditions={'method': ['GET']})
288 action='edit_perms_summary', conditions={'method': ['GET']})
289
289
290
290
291 # ADMIN USER GROUPS REST ROUTES
291 # ADMIN USER GROUPS REST ROUTES
292 with rmap.submapper(path_prefix=ADMIN_PREFIX,
292 with rmap.submapper(path_prefix=ADMIN_PREFIX,
293 controller='admin/user_groups') as m:
293 controller='admin/user_groups') as m:
294 m.connect('users_groups', '/user_groups',
294 m.connect('users_groups', '/user_groups',
295 action='create', conditions={'method': ['POST']})
295 action='create', conditions={'method': ['POST']})
296 m.connect('users_groups', '/user_groups',
296 m.connect('users_groups', '/user_groups',
297 action='index', conditions={'method': ['GET']})
297 action='index', conditions={'method': ['GET']})
298 m.connect('new_users_group', '/user_groups/new',
298 m.connect('new_users_group', '/user_groups/new',
299 action='new', conditions={'method': ['GET']})
299 action='new', conditions={'method': ['GET']})
300 m.connect('update_users_group', '/user_groups/{user_group_id}',
300 m.connect('update_users_group', '/user_groups/{user_group_id}',
301 action='update', conditions={'method': ['PUT']})
301 action='update', conditions={'method': ['PUT']})
302 m.connect('delete_users_group', '/user_groups/{user_group_id}',
302 m.connect('delete_users_group', '/user_groups/{user_group_id}',
303 action='delete', conditions={'method': ['DELETE']})
303 action='delete', conditions={'method': ['DELETE']})
304 m.connect('edit_users_group', '/user_groups/{user_group_id}/edit',
304 m.connect('edit_users_group', '/user_groups/{user_group_id}/edit',
305 action='edit', conditions={'method': ['GET']},
305 action='edit', conditions={'method': ['GET']},
306 function=check_user_group)
306 function=check_user_group)
307
307
308 # EXTRAS USER GROUP ROUTES
308 # EXTRAS USER GROUP ROUTES
309 m.connect('edit_user_group_global_perms',
309 m.connect('edit_user_group_global_perms',
310 '/user_groups/{user_group_id}/edit/global_permissions',
310 '/user_groups/{user_group_id}/edit/global_permissions',
311 action='edit_global_perms', conditions={'method': ['GET']})
311 action='edit_global_perms', conditions={'method': ['GET']})
312 m.connect('edit_user_group_global_perms',
312 m.connect('edit_user_group_global_perms',
313 '/user_groups/{user_group_id}/edit/global_permissions',
313 '/user_groups/{user_group_id}/edit/global_permissions',
314 action='update_global_perms', conditions={'method': ['PUT']})
314 action='update_global_perms', conditions={'method': ['PUT']})
315 m.connect('edit_user_group_perms_summary',
315 m.connect('edit_user_group_perms_summary',
316 '/user_groups/{user_group_id}/edit/permissions_summary',
316 '/user_groups/{user_group_id}/edit/permissions_summary',
317 action='edit_perms_summary', conditions={'method': ['GET']})
317 action='edit_perms_summary', conditions={'method': ['GET']})
318
318
319 m.connect('edit_user_group_perms',
319 m.connect('edit_user_group_perms',
320 '/user_groups/{user_group_id}/edit/permissions',
320 '/user_groups/{user_group_id}/edit/permissions',
321 action='edit_perms', conditions={'method': ['GET']})
321 action='edit_perms', conditions={'method': ['GET']})
322 m.connect('edit_user_group_perms',
322 m.connect('edit_user_group_perms',
323 '/user_groups/{user_group_id}/edit/permissions',
323 '/user_groups/{user_group_id}/edit/permissions',
324 action='update_perms', conditions={'method': ['PUT']})
324 action='update_perms', conditions={'method': ['PUT']})
325
325
326 m.connect('edit_user_group_advanced',
326 m.connect('edit_user_group_advanced',
327 '/user_groups/{user_group_id}/edit/advanced',
327 '/user_groups/{user_group_id}/edit/advanced',
328 action='edit_advanced', conditions={'method': ['GET']})
328 action='edit_advanced', conditions={'method': ['GET']})
329
329
330 m.connect('edit_user_group_advanced_sync',
330 m.connect('edit_user_group_advanced_sync',
331 '/user_groups/{user_group_id}/edit/advanced/sync',
331 '/user_groups/{user_group_id}/edit/advanced/sync',
332 action='edit_advanced_set_synchronization', conditions={'method': ['POST']})
332 action='edit_advanced_set_synchronization', conditions={'method': ['POST']})
333
333
334 m.connect('edit_user_group_members',
334 m.connect('edit_user_group_members',
335 '/user_groups/{user_group_id}/edit/members', jsroute=True,
335 '/user_groups/{user_group_id}/edit/members', jsroute=True,
336 action='user_group_members', conditions={'method': ['GET']})
336 action='user_group_members', conditions={'method': ['GET']})
337
337
338 # ADMIN PERMISSIONS ROUTES
338 # ADMIN PERMISSIONS ROUTES
339 with rmap.submapper(path_prefix=ADMIN_PREFIX,
339 with rmap.submapper(path_prefix=ADMIN_PREFIX,
340 controller='admin/permissions') as m:
340 controller='admin/permissions') as m:
341 m.connect('admin_permissions_application', '/permissions/application',
341 m.connect('admin_permissions_application', '/permissions/application',
342 action='permission_application_update', conditions={'method': ['POST']})
342 action='permission_application_update', conditions={'method': ['POST']})
343 m.connect('admin_permissions_application', '/permissions/application',
343 m.connect('admin_permissions_application', '/permissions/application',
344 action='permission_application', conditions={'method': ['GET']})
344 action='permission_application', conditions={'method': ['GET']})
345
345
346 m.connect('admin_permissions_global', '/permissions/global',
346 m.connect('admin_permissions_global', '/permissions/global',
347 action='permission_global_update', conditions={'method': ['POST']})
347 action='permission_global_update', conditions={'method': ['POST']})
348 m.connect('admin_permissions_global', '/permissions/global',
348 m.connect('admin_permissions_global', '/permissions/global',
349 action='permission_global', conditions={'method': ['GET']})
349 action='permission_global', conditions={'method': ['GET']})
350
350
351 m.connect('admin_permissions_object', '/permissions/object',
351 m.connect('admin_permissions_object', '/permissions/object',
352 action='permission_objects_update', conditions={'method': ['POST']})
352 action='permission_objects_update', conditions={'method': ['POST']})
353 m.connect('admin_permissions_object', '/permissions/object',
353 m.connect('admin_permissions_object', '/permissions/object',
354 action='permission_objects', conditions={'method': ['GET']})
354 action='permission_objects', conditions={'method': ['GET']})
355
355
356 m.connect('admin_permissions_ips', '/permissions/ips',
356 m.connect('admin_permissions_ips', '/permissions/ips',
357 action='permission_ips', conditions={'method': ['POST']})
357 action='permission_ips', conditions={'method': ['POST']})
358 m.connect('admin_permissions_ips', '/permissions/ips',
358 m.connect('admin_permissions_ips', '/permissions/ips',
359 action='permission_ips', conditions={'method': ['GET']})
359 action='permission_ips', conditions={'method': ['GET']})
360
360
361 m.connect('admin_permissions_overview', '/permissions/overview',
361 m.connect('admin_permissions_overview', '/permissions/overview',
362 action='permission_perms', conditions={'method': ['GET']})
362 action='permission_perms', conditions={'method': ['GET']})
363
363
364 # ADMIN DEFAULTS REST ROUTES
364 # ADMIN DEFAULTS REST ROUTES
365 with rmap.submapper(path_prefix=ADMIN_PREFIX,
365 with rmap.submapper(path_prefix=ADMIN_PREFIX,
366 controller='admin/defaults') as m:
366 controller='admin/defaults') as m:
367 m.connect('admin_defaults_repositories', '/defaults/repositories',
367 m.connect('admin_defaults_repositories', '/defaults/repositories',
368 action='update_repository_defaults', conditions={'method': ['POST']})
368 action='update_repository_defaults', conditions={'method': ['POST']})
369 m.connect('admin_defaults_repositories', '/defaults/repositories',
369 m.connect('admin_defaults_repositories', '/defaults/repositories',
370 action='index', conditions={'method': ['GET']})
370 action='index', conditions={'method': ['GET']})
371
371
372 # ADMIN DEBUG STYLE ROUTES
373 if str2bool(config.get('debug_style')):
374 with rmap.submapper(path_prefix=ADMIN_PREFIX + '/debug_style',
375 controller='debug_style') as m:
376 m.connect('debug_style_home', '',
377 action='index', conditions={'method': ['GET']})
378 m.connect('debug_style_template', '/t/{t_path}',
379 action='template', conditions={'method': ['GET']})
380
381 # ADMIN SETTINGS ROUTES
372 # ADMIN SETTINGS ROUTES
382 with rmap.submapper(path_prefix=ADMIN_PREFIX,
373 with rmap.submapper(path_prefix=ADMIN_PREFIX,
383 controller='admin/settings') as m:
374 controller='admin/settings') as m:
384
375
385 # default
376 # default
386 m.connect('admin_settings', '/settings',
377 m.connect('admin_settings', '/settings',
387 action='settings_global_update',
378 action='settings_global_update',
388 conditions={'method': ['POST']})
379 conditions={'method': ['POST']})
389 m.connect('admin_settings', '/settings',
380 m.connect('admin_settings', '/settings',
390 action='settings_global', conditions={'method': ['GET']})
381 action='settings_global', conditions={'method': ['GET']})
391
382
392 m.connect('admin_settings_vcs', '/settings/vcs',
383 m.connect('admin_settings_vcs', '/settings/vcs',
393 action='settings_vcs_update',
384 action='settings_vcs_update',
394 conditions={'method': ['POST']})
385 conditions={'method': ['POST']})
395 m.connect('admin_settings_vcs', '/settings/vcs',
386 m.connect('admin_settings_vcs', '/settings/vcs',
396 action='settings_vcs',
387 action='settings_vcs',
397 conditions={'method': ['GET']})
388 conditions={'method': ['GET']})
398 m.connect('admin_settings_vcs', '/settings/vcs',
389 m.connect('admin_settings_vcs', '/settings/vcs',
399 action='delete_svn_pattern',
390 action='delete_svn_pattern',
400 conditions={'method': ['DELETE']})
391 conditions={'method': ['DELETE']})
401
392
402 m.connect('admin_settings_mapping', '/settings/mapping',
393 m.connect('admin_settings_mapping', '/settings/mapping',
403 action='settings_mapping_update',
394 action='settings_mapping_update',
404 conditions={'method': ['POST']})
395 conditions={'method': ['POST']})
405 m.connect('admin_settings_mapping', '/settings/mapping',
396 m.connect('admin_settings_mapping', '/settings/mapping',
406 action='settings_mapping', conditions={'method': ['GET']})
397 action='settings_mapping', conditions={'method': ['GET']})
407
398
408 m.connect('admin_settings_global', '/settings/global',
399 m.connect('admin_settings_global', '/settings/global',
409 action='settings_global_update',
400 action='settings_global_update',
410 conditions={'method': ['POST']})
401 conditions={'method': ['POST']})
411 m.connect('admin_settings_global', '/settings/global',
402 m.connect('admin_settings_global', '/settings/global',
412 action='settings_global', conditions={'method': ['GET']})
403 action='settings_global', conditions={'method': ['GET']})
413
404
414 m.connect('admin_settings_visual', '/settings/visual',
405 m.connect('admin_settings_visual', '/settings/visual',
415 action='settings_visual_update',
406 action='settings_visual_update',
416 conditions={'method': ['POST']})
407 conditions={'method': ['POST']})
417 m.connect('admin_settings_visual', '/settings/visual',
408 m.connect('admin_settings_visual', '/settings/visual',
418 action='settings_visual', conditions={'method': ['GET']})
409 action='settings_visual', conditions={'method': ['GET']})
419
410
420 m.connect('admin_settings_issuetracker',
411 m.connect('admin_settings_issuetracker',
421 '/settings/issue-tracker', action='settings_issuetracker',
412 '/settings/issue-tracker', action='settings_issuetracker',
422 conditions={'method': ['GET']})
413 conditions={'method': ['GET']})
423 m.connect('admin_settings_issuetracker_save',
414 m.connect('admin_settings_issuetracker_save',
424 '/settings/issue-tracker/save',
415 '/settings/issue-tracker/save',
425 action='settings_issuetracker_save',
416 action='settings_issuetracker_save',
426 conditions={'method': ['POST']})
417 conditions={'method': ['POST']})
427 m.connect('admin_issuetracker_test', '/settings/issue-tracker/test',
418 m.connect('admin_issuetracker_test', '/settings/issue-tracker/test',
428 action='settings_issuetracker_test',
419 action='settings_issuetracker_test',
429 conditions={'method': ['POST']})
420 conditions={'method': ['POST']})
430 m.connect('admin_issuetracker_delete',
421 m.connect('admin_issuetracker_delete',
431 '/settings/issue-tracker/delete',
422 '/settings/issue-tracker/delete',
432 action='settings_issuetracker_delete',
423 action='settings_issuetracker_delete',
433 conditions={'method': ['DELETE']})
424 conditions={'method': ['DELETE']})
434
425
435 m.connect('admin_settings_email', '/settings/email',
426 m.connect('admin_settings_email', '/settings/email',
436 action='settings_email_update',
427 action='settings_email_update',
437 conditions={'method': ['POST']})
428 conditions={'method': ['POST']})
438 m.connect('admin_settings_email', '/settings/email',
429 m.connect('admin_settings_email', '/settings/email',
439 action='settings_email', conditions={'method': ['GET']})
430 action='settings_email', conditions={'method': ['GET']})
440
431
441 m.connect('admin_settings_hooks', '/settings/hooks',
432 m.connect('admin_settings_hooks', '/settings/hooks',
442 action='settings_hooks_update',
433 action='settings_hooks_update',
443 conditions={'method': ['POST', 'DELETE']})
434 conditions={'method': ['POST', 'DELETE']})
444 m.connect('admin_settings_hooks', '/settings/hooks',
435 m.connect('admin_settings_hooks', '/settings/hooks',
445 action='settings_hooks', conditions={'method': ['GET']})
436 action='settings_hooks', conditions={'method': ['GET']})
446
437
447 m.connect('admin_settings_search', '/settings/search',
438 m.connect('admin_settings_search', '/settings/search',
448 action='settings_search', conditions={'method': ['GET']})
439 action='settings_search', conditions={'method': ['GET']})
449
440
450 m.connect('admin_settings_supervisor', '/settings/supervisor',
441 m.connect('admin_settings_supervisor', '/settings/supervisor',
451 action='settings_supervisor', conditions={'method': ['GET']})
442 action='settings_supervisor', conditions={'method': ['GET']})
452 m.connect('admin_settings_supervisor_log', '/settings/supervisor/{procid}/log',
443 m.connect('admin_settings_supervisor_log', '/settings/supervisor/{procid}/log',
453 action='settings_supervisor_log', conditions={'method': ['GET']})
444 action='settings_supervisor_log', conditions={'method': ['GET']})
454
445
455 m.connect('admin_settings_labs', '/settings/labs',
446 m.connect('admin_settings_labs', '/settings/labs',
456 action='settings_labs_update',
447 action='settings_labs_update',
457 conditions={'method': ['POST']})
448 conditions={'method': ['POST']})
458 m.connect('admin_settings_labs', '/settings/labs',
449 m.connect('admin_settings_labs', '/settings/labs',
459 action='settings_labs', conditions={'method': ['GET']})
450 action='settings_labs', conditions={'method': ['GET']})
460
451
461 # ADMIN MY ACCOUNT
452 # ADMIN MY ACCOUNT
462 with rmap.submapper(path_prefix=ADMIN_PREFIX,
453 with rmap.submapper(path_prefix=ADMIN_PREFIX,
463 controller='admin/my_account') as m:
454 controller='admin/my_account') as m:
464
455
465 # NOTE(marcink): this needs to be kept for password force flag to be
456 # NOTE(marcink): this needs to be kept for password force flag to be
466 # handled in pylons controllers, remove after full migration to pyramid
457 # handled in pylons controllers, remove after full migration to pyramid
467 m.connect('my_account_password', '/my_account/password',
458 m.connect('my_account_password', '/my_account/password',
468 action='my_account_password', conditions={'method': ['GET']})
459 action='my_account_password', conditions={'method': ['GET']})
469
460
470 # NOTIFICATION REST ROUTES
461 # NOTIFICATION REST ROUTES
471 with rmap.submapper(path_prefix=ADMIN_PREFIX,
462 with rmap.submapper(path_prefix=ADMIN_PREFIX,
472 controller='admin/notifications') as m:
463 controller='admin/notifications') as m:
473 m.connect('notifications', '/notifications',
464 m.connect('notifications', '/notifications',
474 action='index', conditions={'method': ['GET']})
465 action='index', conditions={'method': ['GET']})
475 m.connect('notifications_mark_all_read', '/notifications/mark_all_read',
466 m.connect('notifications_mark_all_read', '/notifications/mark_all_read',
476 action='mark_all_read', conditions={'method': ['POST']})
467 action='mark_all_read', conditions={'method': ['POST']})
477 m.connect('/notifications/{notification_id}',
468 m.connect('/notifications/{notification_id}',
478 action='update', conditions={'method': ['PUT']})
469 action='update', conditions={'method': ['PUT']})
479 m.connect('/notifications/{notification_id}',
470 m.connect('/notifications/{notification_id}',
480 action='delete', conditions={'method': ['DELETE']})
471 action='delete', conditions={'method': ['DELETE']})
481 m.connect('notification', '/notifications/{notification_id}',
472 m.connect('notification', '/notifications/{notification_id}',
482 action='show', conditions={'method': ['GET']})
473 action='show', conditions={'method': ['GET']})
483
474
484 # USER JOURNAL
475 # USER JOURNAL
485 rmap.connect('journal', '%s/journal' % (ADMIN_PREFIX,),
476 rmap.connect('journal', '%s/journal' % (ADMIN_PREFIX,),
486 controller='journal', action='index')
477 controller='journal', action='index')
487 rmap.connect('journal_rss', '%s/journal/rss' % (ADMIN_PREFIX,),
478 rmap.connect('journal_rss', '%s/journal/rss' % (ADMIN_PREFIX,),
488 controller='journal', action='journal_rss')
479 controller='journal', action='journal_rss')
489 rmap.connect('journal_atom', '%s/journal/atom' % (ADMIN_PREFIX,),
480 rmap.connect('journal_atom', '%s/journal/atom' % (ADMIN_PREFIX,),
490 controller='journal', action='journal_atom')
481 controller='journal', action='journal_atom')
491
482
492 rmap.connect('public_journal', '%s/public_journal' % (ADMIN_PREFIX,),
483 rmap.connect('public_journal', '%s/public_journal' % (ADMIN_PREFIX,),
493 controller='journal', action='public_journal')
484 controller='journal', action='public_journal')
494
485
495 rmap.connect('public_journal_rss', '%s/public_journal/rss' % (ADMIN_PREFIX,),
486 rmap.connect('public_journal_rss', '%s/public_journal/rss' % (ADMIN_PREFIX,),
496 controller='journal', action='public_journal_rss')
487 controller='journal', action='public_journal_rss')
497
488
498 rmap.connect('public_journal_rss_old', '%s/public_journal_rss' % (ADMIN_PREFIX,),
489 rmap.connect('public_journal_rss_old', '%s/public_journal_rss' % (ADMIN_PREFIX,),
499 controller='journal', action='public_journal_rss')
490 controller='journal', action='public_journal_rss')
500
491
501 rmap.connect('public_journal_atom',
492 rmap.connect('public_journal_atom',
502 '%s/public_journal/atom' % (ADMIN_PREFIX,), controller='journal',
493 '%s/public_journal/atom' % (ADMIN_PREFIX,), controller='journal',
503 action='public_journal_atom')
494 action='public_journal_atom')
504
495
505 rmap.connect('public_journal_atom_old',
496 rmap.connect('public_journal_atom_old',
506 '%s/public_journal_atom' % (ADMIN_PREFIX,), controller='journal',
497 '%s/public_journal_atom' % (ADMIN_PREFIX,), controller='journal',
507 action='public_journal_atom')
498 action='public_journal_atom')
508
499
509 rmap.connect('toggle_following', '%s/toggle_following' % (ADMIN_PREFIX,),
500 rmap.connect('toggle_following', '%s/toggle_following' % (ADMIN_PREFIX,),
510 controller='journal', action='toggle_following', jsroute=True,
501 controller='journal', action='toggle_following', jsroute=True,
511 conditions={'method': ['POST']})
502 conditions={'method': ['POST']})
512
503
513 #==========================================================================
504 #==========================================================================
514 # REPOSITORY ROUTES
505 # REPOSITORY ROUTES
515 #==========================================================================
506 #==========================================================================
516
507
517 rmap.connect('repo_creating_home', '/{repo_name}/repo_creating',
508 rmap.connect('repo_creating_home', '/{repo_name}/repo_creating',
518 controller='admin/repos', action='repo_creating',
509 controller='admin/repos', action='repo_creating',
519 requirements=URL_NAME_REQUIREMENTS)
510 requirements=URL_NAME_REQUIREMENTS)
520 rmap.connect('repo_check_home', '/{repo_name}/crepo_check',
511 rmap.connect('repo_check_home', '/{repo_name}/crepo_check',
521 controller='admin/repos', action='repo_check',
512 controller='admin/repos', action='repo_check',
522 requirements=URL_NAME_REQUIREMENTS)
513 requirements=URL_NAME_REQUIREMENTS)
523
514
524 rmap.connect('changeset_home', '/{repo_name}/changeset/{revision}',
515 rmap.connect('changeset_home', '/{repo_name}/changeset/{revision}',
525 controller='changeset', revision='tip',
516 controller='changeset', revision='tip',
526 conditions={'function': check_repo},
517 conditions={'function': check_repo},
527 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
518 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
528 rmap.connect('changeset_children', '/{repo_name}/changeset_children/{revision}',
519 rmap.connect('changeset_children', '/{repo_name}/changeset_children/{revision}',
529 controller='changeset', revision='tip', action='changeset_children',
520 controller='changeset', revision='tip', action='changeset_children',
530 conditions={'function': check_repo},
521 conditions={'function': check_repo},
531 requirements=URL_NAME_REQUIREMENTS)
522 requirements=URL_NAME_REQUIREMENTS)
532 rmap.connect('changeset_parents', '/{repo_name}/changeset_parents/{revision}',
523 rmap.connect('changeset_parents', '/{repo_name}/changeset_parents/{revision}',
533 controller='changeset', revision='tip', action='changeset_parents',
524 controller='changeset', revision='tip', action='changeset_parents',
534 conditions={'function': check_repo},
525 conditions={'function': check_repo},
535 requirements=URL_NAME_REQUIREMENTS)
526 requirements=URL_NAME_REQUIREMENTS)
536
527
537 # repo edit options
528 # repo edit options
538 rmap.connect('edit_repo_fields', '/{repo_name}/settings/fields',
529 rmap.connect('edit_repo_fields', '/{repo_name}/settings/fields',
539 controller='admin/repos', action='edit_fields',
530 controller='admin/repos', action='edit_fields',
540 conditions={'method': ['GET'], 'function': check_repo},
531 conditions={'method': ['GET'], 'function': check_repo},
541 requirements=URL_NAME_REQUIREMENTS)
532 requirements=URL_NAME_REQUIREMENTS)
542 rmap.connect('create_repo_fields', '/{repo_name}/settings/fields/new',
533 rmap.connect('create_repo_fields', '/{repo_name}/settings/fields/new',
543 controller='admin/repos', action='create_repo_field',
534 controller='admin/repos', action='create_repo_field',
544 conditions={'method': ['PUT'], 'function': check_repo},
535 conditions={'method': ['PUT'], 'function': check_repo},
545 requirements=URL_NAME_REQUIREMENTS)
536 requirements=URL_NAME_REQUIREMENTS)
546 rmap.connect('delete_repo_fields', '/{repo_name}/settings/fields/{field_id}',
537 rmap.connect('delete_repo_fields', '/{repo_name}/settings/fields/{field_id}',
547 controller='admin/repos', action='delete_repo_field',
538 controller='admin/repos', action='delete_repo_field',
548 conditions={'method': ['DELETE'], 'function': check_repo},
539 conditions={'method': ['DELETE'], 'function': check_repo},
549 requirements=URL_NAME_REQUIREMENTS)
540 requirements=URL_NAME_REQUIREMENTS)
550
541
551 rmap.connect('toggle_locking', '/{repo_name}/settings/advanced/locking_toggle',
542 rmap.connect('toggle_locking', '/{repo_name}/settings/advanced/locking_toggle',
552 controller='admin/repos', action='toggle_locking',
543 controller='admin/repos', action='toggle_locking',
553 conditions={'method': ['GET'], 'function': check_repo},
544 conditions={'method': ['GET'], 'function': check_repo},
554 requirements=URL_NAME_REQUIREMENTS)
545 requirements=URL_NAME_REQUIREMENTS)
555
546
556 rmap.connect('edit_repo_remote', '/{repo_name}/settings/remote',
547 rmap.connect('edit_repo_remote', '/{repo_name}/settings/remote',
557 controller='admin/repos', action='edit_remote_form',
548 controller='admin/repos', action='edit_remote_form',
558 conditions={'method': ['GET'], 'function': check_repo},
549 conditions={'method': ['GET'], 'function': check_repo},
559 requirements=URL_NAME_REQUIREMENTS)
550 requirements=URL_NAME_REQUIREMENTS)
560 rmap.connect('edit_repo_remote', '/{repo_name}/settings/remote',
551 rmap.connect('edit_repo_remote', '/{repo_name}/settings/remote',
561 controller='admin/repos', action='edit_remote',
552 controller='admin/repos', action='edit_remote',
562 conditions={'method': ['PUT'], 'function': check_repo},
553 conditions={'method': ['PUT'], 'function': check_repo},
563 requirements=URL_NAME_REQUIREMENTS)
554 requirements=URL_NAME_REQUIREMENTS)
564
555
565 rmap.connect('edit_repo_statistics', '/{repo_name}/settings/statistics',
556 rmap.connect('edit_repo_statistics', '/{repo_name}/settings/statistics',
566 controller='admin/repos', action='edit_statistics_form',
557 controller='admin/repos', action='edit_statistics_form',
567 conditions={'method': ['GET'], 'function': check_repo},
558 conditions={'method': ['GET'], 'function': check_repo},
568 requirements=URL_NAME_REQUIREMENTS)
559 requirements=URL_NAME_REQUIREMENTS)
569 rmap.connect('edit_repo_statistics', '/{repo_name}/settings/statistics',
560 rmap.connect('edit_repo_statistics', '/{repo_name}/settings/statistics',
570 controller='admin/repos', action='edit_statistics',
561 controller='admin/repos', action='edit_statistics',
571 conditions={'method': ['PUT'], 'function': check_repo},
562 conditions={'method': ['PUT'], 'function': check_repo},
572 requirements=URL_NAME_REQUIREMENTS)
563 requirements=URL_NAME_REQUIREMENTS)
573 rmap.connect('repo_settings_issuetracker',
564 rmap.connect('repo_settings_issuetracker',
574 '/{repo_name}/settings/issue-tracker',
565 '/{repo_name}/settings/issue-tracker',
575 controller='admin/repos', action='repo_issuetracker',
566 controller='admin/repos', action='repo_issuetracker',
576 conditions={'method': ['GET'], 'function': check_repo},
567 conditions={'method': ['GET'], 'function': check_repo},
577 requirements=URL_NAME_REQUIREMENTS)
568 requirements=URL_NAME_REQUIREMENTS)
578 rmap.connect('repo_issuetracker_test',
569 rmap.connect('repo_issuetracker_test',
579 '/{repo_name}/settings/issue-tracker/test',
570 '/{repo_name}/settings/issue-tracker/test',
580 controller='admin/repos', action='repo_issuetracker_test',
571 controller='admin/repos', action='repo_issuetracker_test',
581 conditions={'method': ['POST'], 'function': check_repo},
572 conditions={'method': ['POST'], 'function': check_repo},
582 requirements=URL_NAME_REQUIREMENTS)
573 requirements=URL_NAME_REQUIREMENTS)
583 rmap.connect('repo_issuetracker_delete',
574 rmap.connect('repo_issuetracker_delete',
584 '/{repo_name}/settings/issue-tracker/delete',
575 '/{repo_name}/settings/issue-tracker/delete',
585 controller='admin/repos', action='repo_issuetracker_delete',
576 controller='admin/repos', action='repo_issuetracker_delete',
586 conditions={'method': ['DELETE'], 'function': check_repo},
577 conditions={'method': ['DELETE'], 'function': check_repo},
587 requirements=URL_NAME_REQUIREMENTS)
578 requirements=URL_NAME_REQUIREMENTS)
588 rmap.connect('repo_issuetracker_save',
579 rmap.connect('repo_issuetracker_save',
589 '/{repo_name}/settings/issue-tracker/save',
580 '/{repo_name}/settings/issue-tracker/save',
590 controller='admin/repos', action='repo_issuetracker_save',
581 controller='admin/repos', action='repo_issuetracker_save',
591 conditions={'method': ['POST'], 'function': check_repo},
582 conditions={'method': ['POST'], 'function': check_repo},
592 requirements=URL_NAME_REQUIREMENTS)
583 requirements=URL_NAME_REQUIREMENTS)
593 rmap.connect('repo_vcs_settings', '/{repo_name}/settings/vcs',
584 rmap.connect('repo_vcs_settings', '/{repo_name}/settings/vcs',
594 controller='admin/repos', action='repo_settings_vcs_update',
585 controller='admin/repos', action='repo_settings_vcs_update',
595 conditions={'method': ['POST'], 'function': check_repo},
586 conditions={'method': ['POST'], 'function': check_repo},
596 requirements=URL_NAME_REQUIREMENTS)
587 requirements=URL_NAME_REQUIREMENTS)
597 rmap.connect('repo_vcs_settings', '/{repo_name}/settings/vcs',
588 rmap.connect('repo_vcs_settings', '/{repo_name}/settings/vcs',
598 controller='admin/repos', action='repo_settings_vcs',
589 controller='admin/repos', action='repo_settings_vcs',
599 conditions={'method': ['GET'], 'function': check_repo},
590 conditions={'method': ['GET'], 'function': check_repo},
600 requirements=URL_NAME_REQUIREMENTS)
591 requirements=URL_NAME_REQUIREMENTS)
601 rmap.connect('repo_vcs_settings', '/{repo_name}/settings/vcs',
592 rmap.connect('repo_vcs_settings', '/{repo_name}/settings/vcs',
602 controller='admin/repos', action='repo_delete_svn_pattern',
593 controller='admin/repos', action='repo_delete_svn_pattern',
603 conditions={'method': ['DELETE'], 'function': check_repo},
594 conditions={'method': ['DELETE'], 'function': check_repo},
604 requirements=URL_NAME_REQUIREMENTS)
595 requirements=URL_NAME_REQUIREMENTS)
605 rmap.connect('repo_pullrequest_settings', '/{repo_name}/settings/pullrequest',
596 rmap.connect('repo_pullrequest_settings', '/{repo_name}/settings/pullrequest',
606 controller='admin/repos', action='repo_settings_pullrequest',
597 controller='admin/repos', action='repo_settings_pullrequest',
607 conditions={'method': ['GET', 'POST'], 'function': check_repo},
598 conditions={'method': ['GET', 'POST'], 'function': check_repo},
608 requirements=URL_NAME_REQUIREMENTS)
599 requirements=URL_NAME_REQUIREMENTS)
609
600
610 # still working url for backward compat.
601 # still working url for backward compat.
611 rmap.connect('raw_changeset_home_depraced',
602 rmap.connect('raw_changeset_home_depraced',
612 '/{repo_name}/raw-changeset/{revision}',
603 '/{repo_name}/raw-changeset/{revision}',
613 controller='changeset', action='changeset_raw',
604 controller='changeset', action='changeset_raw',
614 revision='tip', conditions={'function': check_repo},
605 revision='tip', conditions={'function': check_repo},
615 requirements=URL_NAME_REQUIREMENTS)
606 requirements=URL_NAME_REQUIREMENTS)
616
607
617 # new URLs
608 # new URLs
618 rmap.connect('changeset_raw_home',
609 rmap.connect('changeset_raw_home',
619 '/{repo_name}/changeset-diff/{revision}',
610 '/{repo_name}/changeset-diff/{revision}',
620 controller='changeset', action='changeset_raw',
611 controller='changeset', action='changeset_raw',
621 revision='tip', conditions={'function': check_repo},
612 revision='tip', conditions={'function': check_repo},
622 requirements=URL_NAME_REQUIREMENTS)
613 requirements=URL_NAME_REQUIREMENTS)
623
614
624 rmap.connect('changeset_patch_home',
615 rmap.connect('changeset_patch_home',
625 '/{repo_name}/changeset-patch/{revision}',
616 '/{repo_name}/changeset-patch/{revision}',
626 controller='changeset', action='changeset_patch',
617 controller='changeset', action='changeset_patch',
627 revision='tip', conditions={'function': check_repo},
618 revision='tip', conditions={'function': check_repo},
628 requirements=URL_NAME_REQUIREMENTS)
619 requirements=URL_NAME_REQUIREMENTS)
629
620
630 rmap.connect('changeset_download_home',
621 rmap.connect('changeset_download_home',
631 '/{repo_name}/changeset-download/{revision}',
622 '/{repo_name}/changeset-download/{revision}',
632 controller='changeset', action='changeset_download',
623 controller='changeset', action='changeset_download',
633 revision='tip', conditions={'function': check_repo},
624 revision='tip', conditions={'function': check_repo},
634 requirements=URL_NAME_REQUIREMENTS)
625 requirements=URL_NAME_REQUIREMENTS)
635
626
636 rmap.connect('changeset_comment',
627 rmap.connect('changeset_comment',
637 '/{repo_name}/changeset/{revision}/comment', jsroute=True,
628 '/{repo_name}/changeset/{revision}/comment', jsroute=True,
638 controller='changeset', revision='tip', action='comment',
629 controller='changeset', revision='tip', action='comment',
639 conditions={'function': check_repo},
630 conditions={'function': check_repo},
640 requirements=URL_NAME_REQUIREMENTS)
631 requirements=URL_NAME_REQUIREMENTS)
641
632
642 rmap.connect('changeset_comment_preview',
633 rmap.connect('changeset_comment_preview',
643 '/{repo_name}/changeset/comment/preview', jsroute=True,
634 '/{repo_name}/changeset/comment/preview', jsroute=True,
644 controller='changeset', action='preview_comment',
635 controller='changeset', action='preview_comment',
645 conditions={'function': check_repo, 'method': ['POST']},
636 conditions={'function': check_repo, 'method': ['POST']},
646 requirements=URL_NAME_REQUIREMENTS)
637 requirements=URL_NAME_REQUIREMENTS)
647
638
648 rmap.connect('changeset_comment_delete',
639 rmap.connect('changeset_comment_delete',
649 '/{repo_name}/changeset/comment/{comment_id}/delete',
640 '/{repo_name}/changeset/comment/{comment_id}/delete',
650 controller='changeset', action='delete_comment',
641 controller='changeset', action='delete_comment',
651 conditions={'function': check_repo, 'method': ['DELETE']},
642 conditions={'function': check_repo, 'method': ['DELETE']},
652 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
643 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
653
644
654 rmap.connect('changeset_info', '/{repo_name}/changeset_info/{revision}',
645 rmap.connect('changeset_info', '/{repo_name}/changeset_info/{revision}',
655 controller='changeset', action='changeset_info',
646 controller='changeset', action='changeset_info',
656 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
647 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
657
648
658 rmap.connect('compare_home',
649 rmap.connect('compare_home',
659 '/{repo_name}/compare',
650 '/{repo_name}/compare',
660 controller='compare', action='index',
651 controller='compare', action='index',
661 conditions={'function': check_repo},
652 conditions={'function': check_repo},
662 requirements=URL_NAME_REQUIREMENTS)
653 requirements=URL_NAME_REQUIREMENTS)
663
654
664 rmap.connect('compare_url',
655 rmap.connect('compare_url',
665 '/{repo_name}/compare/{source_ref_type}@{source_ref:.*?}...{target_ref_type}@{target_ref:.*?}',
656 '/{repo_name}/compare/{source_ref_type}@{source_ref:.*?}...{target_ref_type}@{target_ref:.*?}',
666 controller='compare', action='compare',
657 controller='compare', action='compare',
667 conditions={'function': check_repo},
658 conditions={'function': check_repo},
668 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
659 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
669
660
670 rmap.connect('pullrequest_home',
661 rmap.connect('pullrequest_home',
671 '/{repo_name}/pull-request/new', controller='pullrequests',
662 '/{repo_name}/pull-request/new', controller='pullrequests',
672 action='index', conditions={'function': check_repo,
663 action='index', conditions={'function': check_repo,
673 'method': ['GET']},
664 'method': ['GET']},
674 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
665 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
675
666
676 rmap.connect('pullrequest',
667 rmap.connect('pullrequest',
677 '/{repo_name}/pull-request/new', controller='pullrequests',
668 '/{repo_name}/pull-request/new', controller='pullrequests',
678 action='create', conditions={'function': check_repo,
669 action='create', conditions={'function': check_repo,
679 'method': ['POST']},
670 'method': ['POST']},
680 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
671 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
681
672
682 rmap.connect('pullrequest_repo_refs',
673 rmap.connect('pullrequest_repo_refs',
683 '/{repo_name}/pull-request/refs/{target_repo_name:.*?[^/]}',
674 '/{repo_name}/pull-request/refs/{target_repo_name:.*?[^/]}',
684 controller='pullrequests',
675 controller='pullrequests',
685 action='get_repo_refs',
676 action='get_repo_refs',
686 conditions={'function': check_repo, 'method': ['GET']},
677 conditions={'function': check_repo, 'method': ['GET']},
687 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
678 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
688
679
689 rmap.connect('pullrequest_repo_destinations',
680 rmap.connect('pullrequest_repo_destinations',
690 '/{repo_name}/pull-request/repo-destinations',
681 '/{repo_name}/pull-request/repo-destinations',
691 controller='pullrequests',
682 controller='pullrequests',
692 action='get_repo_destinations',
683 action='get_repo_destinations',
693 conditions={'function': check_repo, 'method': ['GET']},
684 conditions={'function': check_repo, 'method': ['GET']},
694 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
685 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
695
686
696 rmap.connect('pullrequest_show',
687 rmap.connect('pullrequest_show',
697 '/{repo_name}/pull-request/{pull_request_id}',
688 '/{repo_name}/pull-request/{pull_request_id}',
698 controller='pullrequests',
689 controller='pullrequests',
699 action='show', conditions={'function': check_repo,
690 action='show', conditions={'function': check_repo,
700 'method': ['GET']},
691 'method': ['GET']},
701 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
692 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
702
693
703 rmap.connect('pullrequest_update',
694 rmap.connect('pullrequest_update',
704 '/{repo_name}/pull-request/{pull_request_id}',
695 '/{repo_name}/pull-request/{pull_request_id}',
705 controller='pullrequests',
696 controller='pullrequests',
706 action='update', conditions={'function': check_repo,
697 action='update', conditions={'function': check_repo,
707 'method': ['PUT']},
698 'method': ['PUT']},
708 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
699 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
709
700
710 rmap.connect('pullrequest_merge',
701 rmap.connect('pullrequest_merge',
711 '/{repo_name}/pull-request/{pull_request_id}',
702 '/{repo_name}/pull-request/{pull_request_id}',
712 controller='pullrequests',
703 controller='pullrequests',
713 action='merge', conditions={'function': check_repo,
704 action='merge', conditions={'function': check_repo,
714 'method': ['POST']},
705 'method': ['POST']},
715 requirements=URL_NAME_REQUIREMENTS)
706 requirements=URL_NAME_REQUIREMENTS)
716
707
717 rmap.connect('pullrequest_delete',
708 rmap.connect('pullrequest_delete',
718 '/{repo_name}/pull-request/{pull_request_id}',
709 '/{repo_name}/pull-request/{pull_request_id}',
719 controller='pullrequests',
710 controller='pullrequests',
720 action='delete', conditions={'function': check_repo,
711 action='delete', conditions={'function': check_repo,
721 'method': ['DELETE']},
712 'method': ['DELETE']},
722 requirements=URL_NAME_REQUIREMENTS)
713 requirements=URL_NAME_REQUIREMENTS)
723
714
724 rmap.connect('pullrequest_comment',
715 rmap.connect('pullrequest_comment',
725 '/{repo_name}/pull-request-comment/{pull_request_id}',
716 '/{repo_name}/pull-request-comment/{pull_request_id}',
726 controller='pullrequests',
717 controller='pullrequests',
727 action='comment', conditions={'function': check_repo,
718 action='comment', conditions={'function': check_repo,
728 'method': ['POST']},
719 'method': ['POST']},
729 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
720 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
730
721
731 rmap.connect('pullrequest_comment_delete',
722 rmap.connect('pullrequest_comment_delete',
732 '/{repo_name}/pull-request-comment/{comment_id}/delete',
723 '/{repo_name}/pull-request-comment/{comment_id}/delete',
733 controller='pullrequests', action='delete_comment',
724 controller='pullrequests', action='delete_comment',
734 conditions={'function': check_repo, 'method': ['DELETE']},
725 conditions={'function': check_repo, 'method': ['DELETE']},
735 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
726 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
736
727
737 rmap.connect('changelog_home', '/{repo_name}/changelog', jsroute=True,
728 rmap.connect('changelog_home', '/{repo_name}/changelog', jsroute=True,
738 controller='changelog', conditions={'function': check_repo},
729 controller='changelog', conditions={'function': check_repo},
739 requirements=URL_NAME_REQUIREMENTS)
730 requirements=URL_NAME_REQUIREMENTS)
740
731
741 rmap.connect('changelog_file_home',
732 rmap.connect('changelog_file_home',
742 '/{repo_name}/changelog/{revision}/{f_path}',
733 '/{repo_name}/changelog/{revision}/{f_path}',
743 controller='changelog', f_path=None,
734 controller='changelog', f_path=None,
744 conditions={'function': check_repo},
735 conditions={'function': check_repo},
745 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
736 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
746
737
747 rmap.connect('changelog_elements', '/{repo_name}/changelog_details',
738 rmap.connect('changelog_elements', '/{repo_name}/changelog_details',
748 controller='changelog', action='changelog_elements',
739 controller='changelog', action='changelog_elements',
749 conditions={'function': check_repo},
740 conditions={'function': check_repo},
750 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
741 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
751
742
752 rmap.connect('files_home', '/{repo_name}/files/{revision}/{f_path}',
743 rmap.connect('files_home', '/{repo_name}/files/{revision}/{f_path}',
753 controller='files', revision='tip', f_path='',
744 controller='files', revision='tip', f_path='',
754 conditions={'function': check_repo},
745 conditions={'function': check_repo},
755 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
746 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
756
747
757 rmap.connect('files_home_simple_catchrev',
748 rmap.connect('files_home_simple_catchrev',
758 '/{repo_name}/files/{revision}',
749 '/{repo_name}/files/{revision}',
759 controller='files', revision='tip', f_path='',
750 controller='files', revision='tip', f_path='',
760 conditions={'function': check_repo},
751 conditions={'function': check_repo},
761 requirements=URL_NAME_REQUIREMENTS)
752 requirements=URL_NAME_REQUIREMENTS)
762
753
763 rmap.connect('files_home_simple_catchall',
754 rmap.connect('files_home_simple_catchall',
764 '/{repo_name}/files',
755 '/{repo_name}/files',
765 controller='files', revision='tip', f_path='',
756 controller='files', revision='tip', f_path='',
766 conditions={'function': check_repo},
757 conditions={'function': check_repo},
767 requirements=URL_NAME_REQUIREMENTS)
758 requirements=URL_NAME_REQUIREMENTS)
768
759
769 rmap.connect('files_history_home',
760 rmap.connect('files_history_home',
770 '/{repo_name}/history/{revision}/{f_path}',
761 '/{repo_name}/history/{revision}/{f_path}',
771 controller='files', action='history', revision='tip', f_path='',
762 controller='files', action='history', revision='tip', f_path='',
772 conditions={'function': check_repo},
763 conditions={'function': check_repo},
773 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
764 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
774
765
775 rmap.connect('files_authors_home',
766 rmap.connect('files_authors_home',
776 '/{repo_name}/authors/{revision}/{f_path}',
767 '/{repo_name}/authors/{revision}/{f_path}',
777 controller='files', action='authors', revision='tip', f_path='',
768 controller='files', action='authors', revision='tip', f_path='',
778 conditions={'function': check_repo},
769 conditions={'function': check_repo},
779 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
770 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
780
771
781 rmap.connect('files_diff_home', '/{repo_name}/diff/{f_path}',
772 rmap.connect('files_diff_home', '/{repo_name}/diff/{f_path}',
782 controller='files', action='diff', f_path='',
773 controller='files', action='diff', f_path='',
783 conditions={'function': check_repo},
774 conditions={'function': check_repo},
784 requirements=URL_NAME_REQUIREMENTS)
775 requirements=URL_NAME_REQUIREMENTS)
785
776
786 rmap.connect('files_diff_2way_home',
777 rmap.connect('files_diff_2way_home',
787 '/{repo_name}/diff-2way/{f_path}',
778 '/{repo_name}/diff-2way/{f_path}',
788 controller='files', action='diff_2way', f_path='',
779 controller='files', action='diff_2way', f_path='',
789 conditions={'function': check_repo},
780 conditions={'function': check_repo},
790 requirements=URL_NAME_REQUIREMENTS)
781 requirements=URL_NAME_REQUIREMENTS)
791
782
792 rmap.connect('files_rawfile_home',
783 rmap.connect('files_rawfile_home',
793 '/{repo_name}/rawfile/{revision}/{f_path}',
784 '/{repo_name}/rawfile/{revision}/{f_path}',
794 controller='files', action='rawfile', revision='tip',
785 controller='files', action='rawfile', revision='tip',
795 f_path='', conditions={'function': check_repo},
786 f_path='', conditions={'function': check_repo},
796 requirements=URL_NAME_REQUIREMENTS)
787 requirements=URL_NAME_REQUIREMENTS)
797
788
798 rmap.connect('files_raw_home',
789 rmap.connect('files_raw_home',
799 '/{repo_name}/raw/{revision}/{f_path}',
790 '/{repo_name}/raw/{revision}/{f_path}',
800 controller='files', action='raw', revision='tip', f_path='',
791 controller='files', action='raw', revision='tip', f_path='',
801 conditions={'function': check_repo},
792 conditions={'function': check_repo},
802 requirements=URL_NAME_REQUIREMENTS)
793 requirements=URL_NAME_REQUIREMENTS)
803
794
804 rmap.connect('files_render_home',
795 rmap.connect('files_render_home',
805 '/{repo_name}/render/{revision}/{f_path}',
796 '/{repo_name}/render/{revision}/{f_path}',
806 controller='files', action='index', revision='tip', f_path='',
797 controller='files', action='index', revision='tip', f_path='',
807 rendered=True, conditions={'function': check_repo},
798 rendered=True, conditions={'function': check_repo},
808 requirements=URL_NAME_REQUIREMENTS)
799 requirements=URL_NAME_REQUIREMENTS)
809
800
810 rmap.connect('files_annotate_home',
801 rmap.connect('files_annotate_home',
811 '/{repo_name}/annotate/{revision}/{f_path}',
802 '/{repo_name}/annotate/{revision}/{f_path}',
812 controller='files', action='index', revision='tip',
803 controller='files', action='index', revision='tip',
813 f_path='', annotate=True, conditions={'function': check_repo},
804 f_path='', annotate=True, conditions={'function': check_repo},
814 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
805 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
815
806
816 rmap.connect('files_annotate_previous',
807 rmap.connect('files_annotate_previous',
817 '/{repo_name}/annotate-previous/{revision}/{f_path}',
808 '/{repo_name}/annotate-previous/{revision}/{f_path}',
818 controller='files', action='annotate_previous', revision='tip',
809 controller='files', action='annotate_previous', revision='tip',
819 f_path='', annotate=True, conditions={'function': check_repo},
810 f_path='', annotate=True, conditions={'function': check_repo},
820 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
811 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
821
812
822 rmap.connect('files_edit',
813 rmap.connect('files_edit',
823 '/{repo_name}/edit/{revision}/{f_path}',
814 '/{repo_name}/edit/{revision}/{f_path}',
824 controller='files', action='edit', revision='tip',
815 controller='files', action='edit', revision='tip',
825 f_path='',
816 f_path='',
826 conditions={'function': check_repo, 'method': ['POST']},
817 conditions={'function': check_repo, 'method': ['POST']},
827 requirements=URL_NAME_REQUIREMENTS)
818 requirements=URL_NAME_REQUIREMENTS)
828
819
829 rmap.connect('files_edit_home',
820 rmap.connect('files_edit_home',
830 '/{repo_name}/edit/{revision}/{f_path}',
821 '/{repo_name}/edit/{revision}/{f_path}',
831 controller='files', action='edit_home', revision='tip',
822 controller='files', action='edit_home', revision='tip',
832 f_path='', conditions={'function': check_repo},
823 f_path='', conditions={'function': check_repo},
833 requirements=URL_NAME_REQUIREMENTS)
824 requirements=URL_NAME_REQUIREMENTS)
834
825
835 rmap.connect('files_add',
826 rmap.connect('files_add',
836 '/{repo_name}/add/{revision}/{f_path}',
827 '/{repo_name}/add/{revision}/{f_path}',
837 controller='files', action='add', revision='tip',
828 controller='files', action='add', revision='tip',
838 f_path='',
829 f_path='',
839 conditions={'function': check_repo, 'method': ['POST']},
830 conditions={'function': check_repo, 'method': ['POST']},
840 requirements=URL_NAME_REQUIREMENTS)
831 requirements=URL_NAME_REQUIREMENTS)
841
832
842 rmap.connect('files_add_home',
833 rmap.connect('files_add_home',
843 '/{repo_name}/add/{revision}/{f_path}',
834 '/{repo_name}/add/{revision}/{f_path}',
844 controller='files', action='add_home', revision='tip',
835 controller='files', action='add_home', revision='tip',
845 f_path='', conditions={'function': check_repo},
836 f_path='', conditions={'function': check_repo},
846 requirements=URL_NAME_REQUIREMENTS)
837 requirements=URL_NAME_REQUIREMENTS)
847
838
848 rmap.connect('files_delete',
839 rmap.connect('files_delete',
849 '/{repo_name}/delete/{revision}/{f_path}',
840 '/{repo_name}/delete/{revision}/{f_path}',
850 controller='files', action='delete', revision='tip',
841 controller='files', action='delete', revision='tip',
851 f_path='',
842 f_path='',
852 conditions={'function': check_repo, 'method': ['POST']},
843 conditions={'function': check_repo, 'method': ['POST']},
853 requirements=URL_NAME_REQUIREMENTS)
844 requirements=URL_NAME_REQUIREMENTS)
854
845
855 rmap.connect('files_delete_home',
846 rmap.connect('files_delete_home',
856 '/{repo_name}/delete/{revision}/{f_path}',
847 '/{repo_name}/delete/{revision}/{f_path}',
857 controller='files', action='delete_home', revision='tip',
848 controller='files', action='delete_home', revision='tip',
858 f_path='', conditions={'function': check_repo},
849 f_path='', conditions={'function': check_repo},
859 requirements=URL_NAME_REQUIREMENTS)
850 requirements=URL_NAME_REQUIREMENTS)
860
851
861 rmap.connect('files_archive_home', '/{repo_name}/archive/{fname}',
852 rmap.connect('files_archive_home', '/{repo_name}/archive/{fname}',
862 controller='files', action='archivefile',
853 controller='files', action='archivefile',
863 conditions={'function': check_repo},
854 conditions={'function': check_repo},
864 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
855 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
865
856
866 rmap.connect('files_nodelist_home',
857 rmap.connect('files_nodelist_home',
867 '/{repo_name}/nodelist/{revision}/{f_path}',
858 '/{repo_name}/nodelist/{revision}/{f_path}',
868 controller='files', action='nodelist',
859 controller='files', action='nodelist',
869 conditions={'function': check_repo},
860 conditions={'function': check_repo},
870 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
861 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
871
862
872 rmap.connect('files_nodetree_full',
863 rmap.connect('files_nodetree_full',
873 '/{repo_name}/nodetree_full/{commit_id}/{f_path}',
864 '/{repo_name}/nodetree_full/{commit_id}/{f_path}',
874 controller='files', action='nodetree_full',
865 controller='files', action='nodetree_full',
875 conditions={'function': check_repo},
866 conditions={'function': check_repo},
876 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
867 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
877
868
878 rmap.connect('repo_fork_create_home', '/{repo_name}/fork',
869 rmap.connect('repo_fork_create_home', '/{repo_name}/fork',
879 controller='forks', action='fork_create',
870 controller='forks', action='fork_create',
880 conditions={'function': check_repo, 'method': ['POST']},
871 conditions={'function': check_repo, 'method': ['POST']},
881 requirements=URL_NAME_REQUIREMENTS)
872 requirements=URL_NAME_REQUIREMENTS)
882
873
883 rmap.connect('repo_fork_home', '/{repo_name}/fork',
874 rmap.connect('repo_fork_home', '/{repo_name}/fork',
884 controller='forks', action='fork',
875 controller='forks', action='fork',
885 conditions={'function': check_repo},
876 conditions={'function': check_repo},
886 requirements=URL_NAME_REQUIREMENTS)
877 requirements=URL_NAME_REQUIREMENTS)
887
878
888 rmap.connect('repo_forks_home', '/{repo_name}/forks',
879 rmap.connect('repo_forks_home', '/{repo_name}/forks',
889 controller='forks', action='forks',
880 controller='forks', action='forks',
890 conditions={'function': check_repo},
881 conditions={'function': check_repo},
891 requirements=URL_NAME_REQUIREMENTS)
882 requirements=URL_NAME_REQUIREMENTS)
892
883
893 return rmap
884 return rmap
@@ -1,174 +1,176 b''
1
1
2 /******************************************************************************
2 /******************************************************************************
3 * *
3 * *
4 * DO NOT CHANGE THIS FILE MANUALLY *
4 * DO NOT CHANGE THIS FILE MANUALLY *
5 * *
5 * *
6 * *
6 * *
7 * This file is automatically generated when the app starts up with *
7 * This file is automatically generated when the app starts up with *
8 * generate_js_files = true *
8 * generate_js_files = true *
9 * *
9 * *
10 * To add a route here pass jsroute=True to the route definition in the app *
10 * To add a route here pass jsroute=True to the route definition in the app *
11 * *
11 * *
12 ******************************************************************************/
12 ******************************************************************************/
13 function registerRCRoutes() {
13 function registerRCRoutes() {
14 // routes registration
14 // routes registration
15 pyroutes.register('new_repo', '/_admin/create_repository', []);
15 pyroutes.register('new_repo', '/_admin/create_repository', []);
16 pyroutes.register('edit_user', '/_admin/users/%(user_id)s/edit', ['user_id']);
16 pyroutes.register('edit_user', '/_admin/users/%(user_id)s/edit', ['user_id']);
17 pyroutes.register('edit_user_group_members', '/_admin/user_groups/%(user_group_id)s/edit/members', ['user_group_id']);
17 pyroutes.register('edit_user_group_members', '/_admin/user_groups/%(user_group_id)s/edit/members', ['user_group_id']);
18 pyroutes.register('toggle_following', '/_admin/toggle_following', []);
18 pyroutes.register('toggle_following', '/_admin/toggle_following', []);
19 pyroutes.register('changeset_home', '/%(repo_name)s/changeset/%(revision)s', ['repo_name', 'revision']);
19 pyroutes.register('changeset_home', '/%(repo_name)s/changeset/%(revision)s', ['repo_name', 'revision']);
20 pyroutes.register('changeset_comment', '/%(repo_name)s/changeset/%(revision)s/comment', ['repo_name', 'revision']);
20 pyroutes.register('changeset_comment', '/%(repo_name)s/changeset/%(revision)s/comment', ['repo_name', 'revision']);
21 pyroutes.register('changeset_comment_preview', '/%(repo_name)s/changeset/comment/preview', ['repo_name']);
21 pyroutes.register('changeset_comment_preview', '/%(repo_name)s/changeset/comment/preview', ['repo_name']);
22 pyroutes.register('changeset_comment_delete', '/%(repo_name)s/changeset/comment/%(comment_id)s/delete', ['repo_name', 'comment_id']);
22 pyroutes.register('changeset_comment_delete', '/%(repo_name)s/changeset/comment/%(comment_id)s/delete', ['repo_name', 'comment_id']);
23 pyroutes.register('changeset_info', '/%(repo_name)s/changeset_info/%(revision)s', ['repo_name', 'revision']);
23 pyroutes.register('changeset_info', '/%(repo_name)s/changeset_info/%(revision)s', ['repo_name', 'revision']);
24 pyroutes.register('compare_url', '/%(repo_name)s/compare/%(source_ref_type)s@%(source_ref)s...%(target_ref_type)s@%(target_ref)s', ['repo_name', 'source_ref_type', 'source_ref', 'target_ref_type', 'target_ref']);
24 pyroutes.register('compare_url', '/%(repo_name)s/compare/%(source_ref_type)s@%(source_ref)s...%(target_ref_type)s@%(target_ref)s', ['repo_name', 'source_ref_type', 'source_ref', 'target_ref_type', 'target_ref']);
25 pyroutes.register('pullrequest_home', '/%(repo_name)s/pull-request/new', ['repo_name']);
25 pyroutes.register('pullrequest_home', '/%(repo_name)s/pull-request/new', ['repo_name']);
26 pyroutes.register('pullrequest', '/%(repo_name)s/pull-request/new', ['repo_name']);
26 pyroutes.register('pullrequest', '/%(repo_name)s/pull-request/new', ['repo_name']);
27 pyroutes.register('pullrequest_repo_refs', '/%(repo_name)s/pull-request/refs/%(target_repo_name)s', ['repo_name', 'target_repo_name']);
27 pyroutes.register('pullrequest_repo_refs', '/%(repo_name)s/pull-request/refs/%(target_repo_name)s', ['repo_name', 'target_repo_name']);
28 pyroutes.register('pullrequest_repo_destinations', '/%(repo_name)s/pull-request/repo-destinations', ['repo_name']);
28 pyroutes.register('pullrequest_repo_destinations', '/%(repo_name)s/pull-request/repo-destinations', ['repo_name']);
29 pyroutes.register('pullrequest_show', '/%(repo_name)s/pull-request/%(pull_request_id)s', ['repo_name', 'pull_request_id']);
29 pyroutes.register('pullrequest_show', '/%(repo_name)s/pull-request/%(pull_request_id)s', ['repo_name', 'pull_request_id']);
30 pyroutes.register('pullrequest_update', '/%(repo_name)s/pull-request/%(pull_request_id)s', ['repo_name', 'pull_request_id']);
30 pyroutes.register('pullrequest_update', '/%(repo_name)s/pull-request/%(pull_request_id)s', ['repo_name', 'pull_request_id']);
31 pyroutes.register('pullrequest_comment', '/%(repo_name)s/pull-request-comment/%(pull_request_id)s', ['repo_name', 'pull_request_id']);
31 pyroutes.register('pullrequest_comment', '/%(repo_name)s/pull-request-comment/%(pull_request_id)s', ['repo_name', 'pull_request_id']);
32 pyroutes.register('pullrequest_comment_delete', '/%(repo_name)s/pull-request-comment/%(comment_id)s/delete', ['repo_name', 'comment_id']);
32 pyroutes.register('pullrequest_comment_delete', '/%(repo_name)s/pull-request-comment/%(comment_id)s/delete', ['repo_name', 'comment_id']);
33 pyroutes.register('changelog_home', '/%(repo_name)s/changelog', ['repo_name']);
33 pyroutes.register('changelog_home', '/%(repo_name)s/changelog', ['repo_name']);
34 pyroutes.register('changelog_file_home', '/%(repo_name)s/changelog/%(revision)s/%(f_path)s', ['repo_name', 'revision', 'f_path']);
34 pyroutes.register('changelog_file_home', '/%(repo_name)s/changelog/%(revision)s/%(f_path)s', ['repo_name', 'revision', 'f_path']);
35 pyroutes.register('changelog_elements', '/%(repo_name)s/changelog_details', ['repo_name']);
35 pyroutes.register('changelog_elements', '/%(repo_name)s/changelog_details', ['repo_name']);
36 pyroutes.register('files_home', '/%(repo_name)s/files/%(revision)s/%(f_path)s', ['repo_name', 'revision', 'f_path']);
36 pyroutes.register('files_home', '/%(repo_name)s/files/%(revision)s/%(f_path)s', ['repo_name', 'revision', 'f_path']);
37 pyroutes.register('files_history_home', '/%(repo_name)s/history/%(revision)s/%(f_path)s', ['repo_name', 'revision', 'f_path']);
37 pyroutes.register('files_history_home', '/%(repo_name)s/history/%(revision)s/%(f_path)s', ['repo_name', 'revision', 'f_path']);
38 pyroutes.register('files_authors_home', '/%(repo_name)s/authors/%(revision)s/%(f_path)s', ['repo_name', 'revision', 'f_path']);
38 pyroutes.register('files_authors_home', '/%(repo_name)s/authors/%(revision)s/%(f_path)s', ['repo_name', 'revision', 'f_path']);
39 pyroutes.register('files_annotate_home', '/%(repo_name)s/annotate/%(revision)s/%(f_path)s', ['repo_name', 'revision', 'f_path']);
39 pyroutes.register('files_annotate_home', '/%(repo_name)s/annotate/%(revision)s/%(f_path)s', ['repo_name', 'revision', 'f_path']);
40 pyroutes.register('files_annotate_previous', '/%(repo_name)s/annotate-previous/%(revision)s/%(f_path)s', ['repo_name', 'revision', 'f_path']);
40 pyroutes.register('files_annotate_previous', '/%(repo_name)s/annotate-previous/%(revision)s/%(f_path)s', ['repo_name', 'revision', 'f_path']);
41 pyroutes.register('files_archive_home', '/%(repo_name)s/archive/%(fname)s', ['repo_name', 'fname']);
41 pyroutes.register('files_archive_home', '/%(repo_name)s/archive/%(fname)s', ['repo_name', 'fname']);
42 pyroutes.register('files_nodelist_home', '/%(repo_name)s/nodelist/%(revision)s/%(f_path)s', ['repo_name', 'revision', 'f_path']);
42 pyroutes.register('files_nodelist_home', '/%(repo_name)s/nodelist/%(revision)s/%(f_path)s', ['repo_name', 'revision', 'f_path']);
43 pyroutes.register('files_nodetree_full', '/%(repo_name)s/nodetree_full/%(commit_id)s/%(f_path)s', ['repo_name', 'commit_id', 'f_path']);
43 pyroutes.register('files_nodetree_full', '/%(repo_name)s/nodetree_full/%(commit_id)s/%(f_path)s', ['repo_name', 'commit_id', 'f_path']);
44 pyroutes.register('favicon', '/favicon.ico', []);
44 pyroutes.register('favicon', '/favicon.ico', []);
45 pyroutes.register('robots', '/robots.txt', []);
45 pyroutes.register('robots', '/robots.txt', []);
46 pyroutes.register('auth_home', '/_admin/auth*traverse', []);
46 pyroutes.register('auth_home', '/_admin/auth*traverse', []);
47 pyroutes.register('global_integrations_new', '/_admin/integrations/new', []);
47 pyroutes.register('global_integrations_new', '/_admin/integrations/new', []);
48 pyroutes.register('global_integrations_home', '/_admin/integrations', []);
48 pyroutes.register('global_integrations_home', '/_admin/integrations', []);
49 pyroutes.register('global_integrations_list', '/_admin/integrations/%(integration)s', ['integration']);
49 pyroutes.register('global_integrations_list', '/_admin/integrations/%(integration)s', ['integration']);
50 pyroutes.register('global_integrations_create', '/_admin/integrations/%(integration)s/new', ['integration']);
50 pyroutes.register('global_integrations_create', '/_admin/integrations/%(integration)s/new', ['integration']);
51 pyroutes.register('global_integrations_edit', '/_admin/integrations/%(integration)s/%(integration_id)s', ['integration', 'integration_id']);
51 pyroutes.register('global_integrations_edit', '/_admin/integrations/%(integration)s/%(integration_id)s', ['integration', 'integration_id']);
52 pyroutes.register('repo_group_integrations_home', '/%(repo_group_name)s/settings/integrations', ['repo_group_name']);
52 pyroutes.register('repo_group_integrations_home', '/%(repo_group_name)s/settings/integrations', ['repo_group_name']);
53 pyroutes.register('repo_group_integrations_list', '/%(repo_group_name)s/settings/integrations/%(integration)s', ['repo_group_name', 'integration']);
53 pyroutes.register('repo_group_integrations_list', '/%(repo_group_name)s/settings/integrations/%(integration)s', ['repo_group_name', 'integration']);
54 pyroutes.register('repo_group_integrations_new', '/%(repo_group_name)s/settings/integrations/new', ['repo_group_name']);
54 pyroutes.register('repo_group_integrations_new', '/%(repo_group_name)s/settings/integrations/new', ['repo_group_name']);
55 pyroutes.register('repo_group_integrations_create', '/%(repo_group_name)s/settings/integrations/%(integration)s/new', ['repo_group_name', 'integration']);
55 pyroutes.register('repo_group_integrations_create', '/%(repo_group_name)s/settings/integrations/%(integration)s/new', ['repo_group_name', 'integration']);
56 pyroutes.register('repo_group_integrations_edit', '/%(repo_group_name)s/settings/integrations/%(integration)s/%(integration_id)s', ['repo_group_name', 'integration', 'integration_id']);
56 pyroutes.register('repo_group_integrations_edit', '/%(repo_group_name)s/settings/integrations/%(integration)s/%(integration_id)s', ['repo_group_name', 'integration', 'integration_id']);
57 pyroutes.register('repo_integrations_home', '/%(repo_name)s/settings/integrations', ['repo_name']);
57 pyroutes.register('repo_integrations_home', '/%(repo_name)s/settings/integrations', ['repo_name']);
58 pyroutes.register('repo_integrations_list', '/%(repo_name)s/settings/integrations/%(integration)s', ['repo_name', 'integration']);
58 pyroutes.register('repo_integrations_list', '/%(repo_name)s/settings/integrations/%(integration)s', ['repo_name', 'integration']);
59 pyroutes.register('repo_integrations_new', '/%(repo_name)s/settings/integrations/new', ['repo_name']);
59 pyroutes.register('repo_integrations_new', '/%(repo_name)s/settings/integrations/new', ['repo_name']);
60 pyroutes.register('repo_integrations_create', '/%(repo_name)s/settings/integrations/%(integration)s/new', ['repo_name', 'integration']);
60 pyroutes.register('repo_integrations_create', '/%(repo_name)s/settings/integrations/%(integration)s/new', ['repo_name', 'integration']);
61 pyroutes.register('repo_integrations_edit', '/%(repo_name)s/settings/integrations/%(integration)s/%(integration_id)s', ['repo_name', 'integration', 'integration_id']);
61 pyroutes.register('repo_integrations_edit', '/%(repo_name)s/settings/integrations/%(integration)s/%(integration_id)s', ['repo_name', 'integration', 'integration_id']);
62 pyroutes.register('ops_ping', '/_admin/ops/ping', []);
62 pyroutes.register('ops_ping', '/_admin/ops/ping', []);
63 pyroutes.register('admin_home', '/_admin', []);
63 pyroutes.register('admin_home', '/_admin', []);
64 pyroutes.register('admin_audit_logs', '/_admin/audit_logs', []);
64 pyroutes.register('admin_audit_logs', '/_admin/audit_logs', []);
65 pyroutes.register('pull_requests_global_0', '/_admin/pull_requests/%(pull_request_id)s', ['pull_request_id']);
65 pyroutes.register('pull_requests_global_0', '/_admin/pull_requests/%(pull_request_id)s', ['pull_request_id']);
66 pyroutes.register('pull_requests_global_1', '/_admin/pull-requests/%(pull_request_id)s', ['pull_request_id']);
66 pyroutes.register('pull_requests_global_1', '/_admin/pull-requests/%(pull_request_id)s', ['pull_request_id']);
67 pyroutes.register('pull_requests_global', '/_admin/pull-request/%(pull_request_id)s', ['pull_request_id']);
67 pyroutes.register('pull_requests_global', '/_admin/pull-request/%(pull_request_id)s', ['pull_request_id']);
68 pyroutes.register('admin_settings_open_source', '/_admin/settings/open_source', []);
68 pyroutes.register('admin_settings_open_source', '/_admin/settings/open_source', []);
69 pyroutes.register('admin_settings_vcs_svn_generate_cfg', '/_admin/settings/vcs/svn_generate_cfg', []);
69 pyroutes.register('admin_settings_vcs_svn_generate_cfg', '/_admin/settings/vcs/svn_generate_cfg', []);
70 pyroutes.register('admin_settings_system', '/_admin/settings/system', []);
70 pyroutes.register('admin_settings_system', '/_admin/settings/system', []);
71 pyroutes.register('admin_settings_system_update', '/_admin/settings/system/updates', []);
71 pyroutes.register('admin_settings_system_update', '/_admin/settings/system/updates', []);
72 pyroutes.register('admin_settings_sessions', '/_admin/settings/sessions', []);
72 pyroutes.register('admin_settings_sessions', '/_admin/settings/sessions', []);
73 pyroutes.register('admin_settings_sessions_cleanup', '/_admin/settings/sessions/cleanup', []);
73 pyroutes.register('admin_settings_sessions_cleanup', '/_admin/settings/sessions/cleanup', []);
74 pyroutes.register('admin_settings_process_management', '/_admin/settings/process_management', []);
74 pyroutes.register('admin_settings_process_management', '/_admin/settings/process_management', []);
75 pyroutes.register('admin_settings_process_management_signal', '/_admin/settings/process_management/signal', []);
75 pyroutes.register('admin_settings_process_management_signal', '/_admin/settings/process_management/signal', []);
76 pyroutes.register('admin_permissions_ips', '/_admin/permissions/ips', []);
76 pyroutes.register('admin_permissions_ips', '/_admin/permissions/ips', []);
77 pyroutes.register('users', '/_admin/users', []);
77 pyroutes.register('users', '/_admin/users', []);
78 pyroutes.register('users_data', '/_admin/users_data', []);
78 pyroutes.register('users_data', '/_admin/users_data', []);
79 pyroutes.register('edit_user_auth_tokens', '/_admin/users/%(user_id)s/edit/auth_tokens', ['user_id']);
79 pyroutes.register('edit_user_auth_tokens', '/_admin/users/%(user_id)s/edit/auth_tokens', ['user_id']);
80 pyroutes.register('edit_user_auth_tokens_add', '/_admin/users/%(user_id)s/edit/auth_tokens/new', ['user_id']);
80 pyroutes.register('edit_user_auth_tokens_add', '/_admin/users/%(user_id)s/edit/auth_tokens/new', ['user_id']);
81 pyroutes.register('edit_user_auth_tokens_delete', '/_admin/users/%(user_id)s/edit/auth_tokens/delete', ['user_id']);
81 pyroutes.register('edit_user_auth_tokens_delete', '/_admin/users/%(user_id)s/edit/auth_tokens/delete', ['user_id']);
82 pyroutes.register('edit_user_emails', '/_admin/users/%(user_id)s/edit/emails', ['user_id']);
82 pyroutes.register('edit_user_emails', '/_admin/users/%(user_id)s/edit/emails', ['user_id']);
83 pyroutes.register('edit_user_emails_add', '/_admin/users/%(user_id)s/edit/emails/new', ['user_id']);
83 pyroutes.register('edit_user_emails_add', '/_admin/users/%(user_id)s/edit/emails/new', ['user_id']);
84 pyroutes.register('edit_user_emails_delete', '/_admin/users/%(user_id)s/edit/emails/delete', ['user_id']);
84 pyroutes.register('edit_user_emails_delete', '/_admin/users/%(user_id)s/edit/emails/delete', ['user_id']);
85 pyroutes.register('edit_user_ips', '/_admin/users/%(user_id)s/edit/ips', ['user_id']);
85 pyroutes.register('edit_user_ips', '/_admin/users/%(user_id)s/edit/ips', ['user_id']);
86 pyroutes.register('edit_user_ips_add', '/_admin/users/%(user_id)s/edit/ips/new', ['user_id']);
86 pyroutes.register('edit_user_ips_add', '/_admin/users/%(user_id)s/edit/ips/new', ['user_id']);
87 pyroutes.register('edit_user_ips_delete', '/_admin/users/%(user_id)s/edit/ips/delete', ['user_id']);
87 pyroutes.register('edit_user_ips_delete', '/_admin/users/%(user_id)s/edit/ips/delete', ['user_id']);
88 pyroutes.register('edit_user_groups_management', '/_admin/users/%(user_id)s/edit/groups_management', ['user_id']);
88 pyroutes.register('edit_user_groups_management', '/_admin/users/%(user_id)s/edit/groups_management', ['user_id']);
89 pyroutes.register('edit_user_groups_management_updates', '/_admin/users/%(user_id)s/edit/edit_user_groups_management/updates', ['user_id']);
89 pyroutes.register('edit_user_groups_management_updates', '/_admin/users/%(user_id)s/edit/edit_user_groups_management/updates', ['user_id']);
90 pyroutes.register('edit_user_audit_logs', '/_admin/users/%(user_id)s/edit/audit', ['user_id']);
90 pyroutes.register('edit_user_audit_logs', '/_admin/users/%(user_id)s/edit/audit', ['user_id']);
91 pyroutes.register('channelstream_connect', '/_admin/channelstream/connect', []);
91 pyroutes.register('channelstream_connect', '/_admin/channelstream/connect', []);
92 pyroutes.register('channelstream_subscribe', '/_admin/channelstream/subscribe', []);
92 pyroutes.register('channelstream_subscribe', '/_admin/channelstream/subscribe', []);
93 pyroutes.register('channelstream_proxy', '/_channelstream', []);
93 pyroutes.register('channelstream_proxy', '/_channelstream', []);
94 pyroutes.register('login', '/_admin/login', []);
94 pyroutes.register('login', '/_admin/login', []);
95 pyroutes.register('logout', '/_admin/logout', []);
95 pyroutes.register('logout', '/_admin/logout', []);
96 pyroutes.register('register', '/_admin/register', []);
96 pyroutes.register('register', '/_admin/register', []);
97 pyroutes.register('reset_password', '/_admin/password_reset', []);
97 pyroutes.register('reset_password', '/_admin/password_reset', []);
98 pyroutes.register('reset_password_confirmation', '/_admin/password_reset_confirmation', []);
98 pyroutes.register('reset_password_confirmation', '/_admin/password_reset_confirmation', []);
99 pyroutes.register('home', '/', []);
99 pyroutes.register('home', '/', []);
100 pyroutes.register('user_autocomplete_data', '/_users', []);
100 pyroutes.register('user_autocomplete_data', '/_users', []);
101 pyroutes.register('user_group_autocomplete_data', '/_user_groups', []);
101 pyroutes.register('user_group_autocomplete_data', '/_user_groups', []);
102 pyroutes.register('repo_list_data', '/_repos', []);
102 pyroutes.register('repo_list_data', '/_repos', []);
103 pyroutes.register('goto_switcher_data', '/_goto_data', []);
103 pyroutes.register('goto_switcher_data', '/_goto_data', []);
104 pyroutes.register('repo_summary_explicit', '/%(repo_name)s/summary', ['repo_name']);
104 pyroutes.register('repo_summary_explicit', '/%(repo_name)s/summary', ['repo_name']);
105 pyroutes.register('repo_summary_commits', '/%(repo_name)s/summary-commits', ['repo_name']);
105 pyroutes.register('repo_summary_commits', '/%(repo_name)s/summary-commits', ['repo_name']);
106 pyroutes.register('repo_commit', '/%(repo_name)s/changeset/%(commit_id)s', ['repo_name', 'commit_id']);
106 pyroutes.register('repo_commit', '/%(repo_name)s/changeset/%(commit_id)s', ['repo_name', 'commit_id']);
107 pyroutes.register('repo_refs_data', '/%(repo_name)s/refs-data', ['repo_name']);
107 pyroutes.register('repo_refs_data', '/%(repo_name)s/refs-data', ['repo_name']);
108 pyroutes.register('repo_refs_changelog_data', '/%(repo_name)s/refs-data-changelog', ['repo_name']);
108 pyroutes.register('repo_refs_changelog_data', '/%(repo_name)s/refs-data-changelog', ['repo_name']);
109 pyroutes.register('repo_stats', '/%(repo_name)s/repo_stats/%(commit_id)s', ['repo_name', 'commit_id']);
109 pyroutes.register('repo_stats', '/%(repo_name)s/repo_stats/%(commit_id)s', ['repo_name', 'commit_id']);
110 pyroutes.register('tags_home', '/%(repo_name)s/tags', ['repo_name']);
110 pyroutes.register('tags_home', '/%(repo_name)s/tags', ['repo_name']);
111 pyroutes.register('branches_home', '/%(repo_name)s/branches', ['repo_name']);
111 pyroutes.register('branches_home', '/%(repo_name)s/branches', ['repo_name']);
112 pyroutes.register('bookmarks_home', '/%(repo_name)s/bookmarks', ['repo_name']);
112 pyroutes.register('bookmarks_home', '/%(repo_name)s/bookmarks', ['repo_name']);
113 pyroutes.register('pullrequest_show', '/%(repo_name)s/pull-request/%(pull_request_id)s', ['repo_name', 'pull_request_id']);
113 pyroutes.register('pullrequest_show', '/%(repo_name)s/pull-request/%(pull_request_id)s', ['repo_name', 'pull_request_id']);
114 pyroutes.register('pullrequest_show_all', '/%(repo_name)s/pull-request', ['repo_name']);
114 pyroutes.register('pullrequest_show_all', '/%(repo_name)s/pull-request', ['repo_name']);
115 pyroutes.register('pullrequest_show_all_data', '/%(repo_name)s/pull-request-data', ['repo_name']);
115 pyroutes.register('pullrequest_show_all_data', '/%(repo_name)s/pull-request-data', ['repo_name']);
116 pyroutes.register('changeset_home', '/%(repo_name)s/changeset/%(revision)s', ['repo_name', 'revision']);
116 pyroutes.register('changeset_home', '/%(repo_name)s/changeset/%(revision)s', ['repo_name', 'revision']);
117 pyroutes.register('changeset_children', '/%(repo_name)s/changeset_children/%(revision)s', ['repo_name', 'revision']);
117 pyroutes.register('changeset_children', '/%(repo_name)s/changeset_children/%(revision)s', ['repo_name', 'revision']);
118 pyroutes.register('changeset_parents', '/%(repo_name)s/changeset_parents/%(revision)s', ['repo_name', 'revision']);
118 pyroutes.register('changeset_parents', '/%(repo_name)s/changeset_parents/%(revision)s', ['repo_name', 'revision']);
119 pyroutes.register('edit_repo', '/%(repo_name)s/settings', ['repo_name']);
119 pyroutes.register('edit_repo', '/%(repo_name)s/settings', ['repo_name']);
120 pyroutes.register('edit_repo_advanced', '/%(repo_name)s/settings/advanced', ['repo_name']);
120 pyroutes.register('edit_repo_advanced', '/%(repo_name)s/settings/advanced', ['repo_name']);
121 pyroutes.register('edit_repo_advanced_delete', '/%(repo_name)s/settings/advanced/delete', ['repo_name']);
121 pyroutes.register('edit_repo_advanced_delete', '/%(repo_name)s/settings/advanced/delete', ['repo_name']);
122 pyroutes.register('edit_repo_advanced_locking', '/%(repo_name)s/settings/advanced/locking', ['repo_name']);
122 pyroutes.register('edit_repo_advanced_locking', '/%(repo_name)s/settings/advanced/locking', ['repo_name']);
123 pyroutes.register('edit_repo_advanced_journal', '/%(repo_name)s/settings/advanced/journal', ['repo_name']);
123 pyroutes.register('edit_repo_advanced_journal', '/%(repo_name)s/settings/advanced/journal', ['repo_name']);
124 pyroutes.register('edit_repo_advanced_fork', '/%(repo_name)s/settings/advanced/fork', ['repo_name']);
124 pyroutes.register('edit_repo_advanced_fork', '/%(repo_name)s/settings/advanced/fork', ['repo_name']);
125 pyroutes.register('edit_repo_caches', '/%(repo_name)s/settings/caches', ['repo_name']);
125 pyroutes.register('edit_repo_caches', '/%(repo_name)s/settings/caches', ['repo_name']);
126 pyroutes.register('edit_repo_perms', '/%(repo_name)s/settings/permissions', ['repo_name']);
126 pyroutes.register('edit_repo_perms', '/%(repo_name)s/settings/permissions', ['repo_name']);
127 pyroutes.register('repo_reviewers', '/%(repo_name)s/settings/review/rules', ['repo_name']);
127 pyroutes.register('repo_reviewers', '/%(repo_name)s/settings/review/rules', ['repo_name']);
128 pyroutes.register('repo_default_reviewers_data', '/%(repo_name)s/settings/review/default-reviewers', ['repo_name']);
128 pyroutes.register('repo_default_reviewers_data', '/%(repo_name)s/settings/review/default-reviewers', ['repo_name']);
129 pyroutes.register('repo_maintenance', '/%(repo_name)s/settings/maintenance', ['repo_name']);
129 pyroutes.register('repo_maintenance', '/%(repo_name)s/settings/maintenance', ['repo_name']);
130 pyroutes.register('repo_maintenance_execute', '/%(repo_name)s/settings/maintenance/execute', ['repo_name']);
130 pyroutes.register('repo_maintenance_execute', '/%(repo_name)s/settings/maintenance/execute', ['repo_name']);
131 pyroutes.register('strip', '/%(repo_name)s/settings/strip', ['repo_name']);
131 pyroutes.register('strip', '/%(repo_name)s/settings/strip', ['repo_name']);
132 pyroutes.register('strip_check', '/%(repo_name)s/settings/strip_check', ['repo_name']);
132 pyroutes.register('strip_check', '/%(repo_name)s/settings/strip_check', ['repo_name']);
133 pyroutes.register('strip_execute', '/%(repo_name)s/settings/strip_execute', ['repo_name']);
133 pyroutes.register('strip_execute', '/%(repo_name)s/settings/strip_execute', ['repo_name']);
134 pyroutes.register('rss_feed_home', '/%(repo_name)s/feed/rss', ['repo_name']);
134 pyroutes.register('rss_feed_home', '/%(repo_name)s/feed/rss', ['repo_name']);
135 pyroutes.register('atom_feed_home', '/%(repo_name)s/feed/atom', ['repo_name']);
135 pyroutes.register('atom_feed_home', '/%(repo_name)s/feed/atom', ['repo_name']);
136 pyroutes.register('repo_summary', '/%(repo_name)s', ['repo_name']);
136 pyroutes.register('repo_summary', '/%(repo_name)s', ['repo_name']);
137 pyroutes.register('repo_summary_slash', '/%(repo_name)s/', ['repo_name']);
137 pyroutes.register('repo_summary_slash', '/%(repo_name)s/', ['repo_name']);
138 pyroutes.register('repo_group_home', '/%(repo_group_name)s', ['repo_group_name']);
138 pyroutes.register('repo_group_home', '/%(repo_group_name)s', ['repo_group_name']);
139 pyroutes.register('repo_group_home_slash', '/%(repo_group_name)s/', ['repo_group_name']);
139 pyroutes.register('repo_group_home_slash', '/%(repo_group_name)s/', ['repo_group_name']);
140 pyroutes.register('search', '/_admin/search', []);
140 pyroutes.register('search', '/_admin/search', []);
141 pyroutes.register('search_repo', '/%(repo_name)s/search', ['repo_name']);
141 pyroutes.register('search_repo', '/%(repo_name)s/search', ['repo_name']);
142 pyroutes.register('user_profile', '/_profiles/%(username)s', ['username']);
142 pyroutes.register('user_profile', '/_profiles/%(username)s', ['username']);
143 pyroutes.register('my_account_profile', '/_admin/my_account/profile', []);
143 pyroutes.register('my_account_profile', '/_admin/my_account/profile', []);
144 pyroutes.register('my_account_edit', '/_admin/my_account/edit', []);
144 pyroutes.register('my_account_edit', '/_admin/my_account/edit', []);
145 pyroutes.register('my_account_update', '/_admin/my_account/update', []);
145 pyroutes.register('my_account_update', '/_admin/my_account/update', []);
146 pyroutes.register('my_account_password', '/_admin/my_account/password', []);
146 pyroutes.register('my_account_password', '/_admin/my_account/password', []);
147 pyroutes.register('my_account_password_update', '/_admin/my_account/password', []);
147 pyroutes.register('my_account_password_update', '/_admin/my_account/password', []);
148 pyroutes.register('my_account_auth_tokens', '/_admin/my_account/auth_tokens', []);
148 pyroutes.register('my_account_auth_tokens', '/_admin/my_account/auth_tokens', []);
149 pyroutes.register('my_account_auth_tokens_add', '/_admin/my_account/auth_tokens/new', []);
149 pyroutes.register('my_account_auth_tokens_add', '/_admin/my_account/auth_tokens/new', []);
150 pyroutes.register('my_account_auth_tokens_delete', '/_admin/my_account/auth_tokens/delete', []);
150 pyroutes.register('my_account_auth_tokens_delete', '/_admin/my_account/auth_tokens/delete', []);
151 pyroutes.register('my_account_emails', '/_admin/my_account/emails', []);
151 pyroutes.register('my_account_emails', '/_admin/my_account/emails', []);
152 pyroutes.register('my_account_emails_add', '/_admin/my_account/emails/new', []);
152 pyroutes.register('my_account_emails_add', '/_admin/my_account/emails/new', []);
153 pyroutes.register('my_account_emails_delete', '/_admin/my_account/emails/delete', []);
153 pyroutes.register('my_account_emails_delete', '/_admin/my_account/emails/delete', []);
154 pyroutes.register('my_account_repos', '/_admin/my_account/repos', []);
154 pyroutes.register('my_account_repos', '/_admin/my_account/repos', []);
155 pyroutes.register('my_account_watched', '/_admin/my_account/watched', []);
155 pyroutes.register('my_account_watched', '/_admin/my_account/watched', []);
156 pyroutes.register('my_account_perms', '/_admin/my_account/perms', []);
156 pyroutes.register('my_account_perms', '/_admin/my_account/perms', []);
157 pyroutes.register('my_account_notifications', '/_admin/my_account/notifications', []);
157 pyroutes.register('my_account_notifications', '/_admin/my_account/notifications', []);
158 pyroutes.register('my_account_notifications_toggle_visibility', '/_admin/my_account/toggle_visibility', []);
158 pyroutes.register('my_account_notifications_toggle_visibility', '/_admin/my_account/toggle_visibility', []);
159 pyroutes.register('my_account_pullrequests', '/_admin/my_account/pull_requests', []);
159 pyroutes.register('my_account_pullrequests', '/_admin/my_account/pull_requests', []);
160 pyroutes.register('my_account_pullrequests_data', '/_admin/my_account/pull_requests/data', []);
160 pyroutes.register('my_account_pullrequests_data', '/_admin/my_account/pull_requests/data', []);
161 pyroutes.register('my_account_notifications_test_channelstream', '/_admin/my_account/test_channelstream', []);
161 pyroutes.register('my_account_notifications_test_channelstream', '/_admin/my_account/test_channelstream', []);
162 pyroutes.register('gists_show', '/_admin/gists', []);
162 pyroutes.register('gists_show', '/_admin/gists', []);
163 pyroutes.register('gists_new', '/_admin/gists/new', []);
163 pyroutes.register('gists_new', '/_admin/gists/new', []);
164 pyroutes.register('gists_create', '/_admin/gists/create', []);
164 pyroutes.register('gists_create', '/_admin/gists/create', []);
165 pyroutes.register('gist_show', '/_admin/gists/%(gist_id)s', ['gist_id']);
165 pyroutes.register('gist_show', '/_admin/gists/%(gist_id)s', ['gist_id']);
166 pyroutes.register('gist_delete', '/_admin/gists/%(gist_id)s/delete', ['gist_id']);
166 pyroutes.register('gist_delete', '/_admin/gists/%(gist_id)s/delete', ['gist_id']);
167 pyroutes.register('gist_edit', '/_admin/gists/%(gist_id)s/edit', ['gist_id']);
167 pyroutes.register('gist_edit', '/_admin/gists/%(gist_id)s/edit', ['gist_id']);
168 pyroutes.register('gist_edit_check_revision', '/_admin/gists/%(gist_id)s/edit/check_revision', ['gist_id']);
168 pyroutes.register('gist_edit_check_revision', '/_admin/gists/%(gist_id)s/edit/check_revision', ['gist_id']);
169 pyroutes.register('gist_update', '/_admin/gists/%(gist_id)s/update', ['gist_id']);
169 pyroutes.register('gist_update', '/_admin/gists/%(gist_id)s/update', ['gist_id']);
170 pyroutes.register('gist_show_rev', '/_admin/gists/%(gist_id)s/%(revision)s', ['gist_id', 'revision']);
170 pyroutes.register('gist_show_rev', '/_admin/gists/%(gist_id)s/%(revision)s', ['gist_id', 'revision']);
171 pyroutes.register('gist_show_formatted', '/_admin/gists/%(gist_id)s/%(revision)s/%(format)s', ['gist_id', 'revision', 'format']);
171 pyroutes.register('gist_show_formatted', '/_admin/gists/%(gist_id)s/%(revision)s/%(format)s', ['gist_id', 'revision', 'format']);
172 pyroutes.register('gist_show_formatted_path', '/_admin/gists/%(gist_id)s/%(revision)s/%(format)s/%(f_path)s', ['gist_id', 'revision', 'format', 'f_path']);
172 pyroutes.register('gist_show_formatted_path', '/_admin/gists/%(gist_id)s/%(revision)s/%(format)s/%(f_path)s', ['gist_id', 'revision', 'format', 'f_path']);
173 pyroutes.register('debug_style_home', '/_admin/debug_style', []);
174 pyroutes.register('debug_style_template', '/_admin/debug_style/t/%(t_path)s', ['t_path']);
173 pyroutes.register('apiv2', '/_admin/api', []);
175 pyroutes.register('apiv2', '/_admin/api', []);
174 }
176 }
@@ -1,604 +1,604 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2 <%inherit file="root.mako"/>
2 <%inherit file="root.mako"/>
3
3
4 <div class="outerwrapper">
4 <div class="outerwrapper">
5 <!-- HEADER -->
5 <!-- HEADER -->
6 <div class="header">
6 <div class="header">
7 <div id="header-inner" class="wrapper">
7 <div id="header-inner" class="wrapper">
8 <div id="logo">
8 <div id="logo">
9 <div class="logo-wrapper">
9 <div class="logo-wrapper">
10 <a href="${h.route_path('home')}"><img src="${h.asset('images/rhodecode-logo-white-216x60.png')}" alt="RhodeCode"/></a>
10 <a href="${h.route_path('home')}"><img src="${h.asset('images/rhodecode-logo-white-216x60.png')}" alt="RhodeCode"/></a>
11 </div>
11 </div>
12 %if c.rhodecode_name:
12 %if c.rhodecode_name:
13 <div class="branding">- ${h.branding(c.rhodecode_name)}</div>
13 <div class="branding">- ${h.branding(c.rhodecode_name)}</div>
14 %endif
14 %endif
15 </div>
15 </div>
16 <!-- MENU BAR NAV -->
16 <!-- MENU BAR NAV -->
17 ${self.menu_bar_nav()}
17 ${self.menu_bar_nav()}
18 <!-- END MENU BAR NAV -->
18 <!-- END MENU BAR NAV -->
19 </div>
19 </div>
20 </div>
20 </div>
21 ${self.menu_bar_subnav()}
21 ${self.menu_bar_subnav()}
22 <!-- END HEADER -->
22 <!-- END HEADER -->
23
23
24 <!-- CONTENT -->
24 <!-- CONTENT -->
25 <div id="content" class="wrapper">
25 <div id="content" class="wrapper">
26
26
27 <rhodecode-toast id="notifications"></rhodecode-toast>
27 <rhodecode-toast id="notifications"></rhodecode-toast>
28
28
29 <div class="main">
29 <div class="main">
30 ${next.main()}
30 ${next.main()}
31 </div>
31 </div>
32 </div>
32 </div>
33 <!-- END CONTENT -->
33 <!-- END CONTENT -->
34
34
35 </div>
35 </div>
36 <!-- FOOTER -->
36 <!-- FOOTER -->
37 <div id="footer">
37 <div id="footer">
38 <div id="footer-inner" class="title wrapper">
38 <div id="footer-inner" class="title wrapper">
39 <div>
39 <div>
40 <p class="footer-link-right">
40 <p class="footer-link-right">
41 % if c.visual.show_version:
41 % if c.visual.show_version:
42 RhodeCode Enterprise ${c.rhodecode_version} ${c.rhodecode_edition}
42 RhodeCode Enterprise ${c.rhodecode_version} ${c.rhodecode_edition}
43 % endif
43 % endif
44 &copy; 2010-${h.datetime.today().year}, <a href="${h.route_url('rhodecode_official')}" target="_blank">RhodeCode GmbH</a>. All rights reserved.
44 &copy; 2010-${h.datetime.today().year}, <a href="${h.route_url('rhodecode_official')}" target="_blank">RhodeCode GmbH</a>. All rights reserved.
45 % if c.visual.rhodecode_support_url:
45 % if c.visual.rhodecode_support_url:
46 <a href="${c.visual.rhodecode_support_url}" target="_blank">${_('Support')}</a>
46 <a href="${c.visual.rhodecode_support_url}" target="_blank">${_('Support')}</a>
47 % endif
47 % endif
48 </p>
48 </p>
49 <% sid = 'block' if request.GET.get('showrcid') else 'none' %>
49 <% sid = 'block' if request.GET.get('showrcid') else 'none' %>
50 <p class="server-instance" style="display:${sid}">
50 <p class="server-instance" style="display:${sid}">
51 ## display hidden instance ID if specially defined
51 ## display hidden instance ID if specially defined
52 % if c.rhodecode_instanceid:
52 % if c.rhodecode_instanceid:
53 ${_('RhodeCode instance id: %s') % c.rhodecode_instanceid}
53 ${_('RhodeCode instance id: %s') % c.rhodecode_instanceid}
54 % endif
54 % endif
55 </p>
55 </p>
56 </div>
56 </div>
57 </div>
57 </div>
58 </div>
58 </div>
59
59
60 <!-- END FOOTER -->
60 <!-- END FOOTER -->
61
61
62 ### MAKO DEFS ###
62 ### MAKO DEFS ###
63
63
64 <%def name="menu_bar_subnav()">
64 <%def name="menu_bar_subnav()">
65 </%def>
65 </%def>
66
66
67 <%def name="breadcrumbs(class_='breadcrumbs')">
67 <%def name="breadcrumbs(class_='breadcrumbs')">
68 <div class="${class_}">
68 <div class="${class_}">
69 ${self.breadcrumbs_links()}
69 ${self.breadcrumbs_links()}
70 </div>
70 </div>
71 </%def>
71 </%def>
72
72
73 <%def name="admin_menu()">
73 <%def name="admin_menu()">
74 <ul class="admin_menu submenu">
74 <ul class="admin_menu submenu">
75 <li><a href="${h.route_path('admin_audit_logs')}">${_('Admin audit logs')}</a></li>
75 <li><a href="${h.route_path('admin_audit_logs')}">${_('Admin audit logs')}</a></li>
76 <li><a href="${h.url('repos')}">${_('Repositories')}</a></li>
76 <li><a href="${h.url('repos')}">${_('Repositories')}</a></li>
77 <li><a href="${h.url('repo_groups')}">${_('Repository groups')}</a></li>
77 <li><a href="${h.url('repo_groups')}">${_('Repository groups')}</a></li>
78 <li><a href="${h.route_path('users')}">${_('Users')}</a></li>
78 <li><a href="${h.route_path('users')}">${_('Users')}</a></li>
79 <li><a href="${h.url('users_groups')}">${_('User groups')}</a></li>
79 <li><a href="${h.url('users_groups')}">${_('User groups')}</a></li>
80 <li><a href="${h.url('admin_permissions_application')}">${_('Permissions')}</a></li>
80 <li><a href="${h.url('admin_permissions_application')}">${_('Permissions')}</a></li>
81 <li><a href="${h.route_path('auth_home', traverse='')}">${_('Authentication')}</a></li>
81 <li><a href="${h.route_path('auth_home', traverse='')}">${_('Authentication')}</a></li>
82 <li><a href="${h.route_path('global_integrations_home')}">${_('Integrations')}</a></li>
82 <li><a href="${h.route_path('global_integrations_home')}">${_('Integrations')}</a></li>
83 <li><a href="${h.url('admin_defaults_repositories')}">${_('Defaults')}</a></li>
83 <li><a href="${h.url('admin_defaults_repositories')}">${_('Defaults')}</a></li>
84 <li class="last"><a href="${h.url('admin_settings')}">${_('Settings')}</a></li>
84 <li class="last"><a href="${h.url('admin_settings')}">${_('Settings')}</a></li>
85 </ul>
85 </ul>
86 </%def>
86 </%def>
87
87
88
88
89 <%def name="dt_info_panel(elements)">
89 <%def name="dt_info_panel(elements)">
90 <dl class="dl-horizontal">
90 <dl class="dl-horizontal">
91 %for dt, dd, title, show_items in elements:
91 %for dt, dd, title, show_items in elements:
92 <dt>${dt}:</dt>
92 <dt>${dt}:</dt>
93 <dd title="${h.tooltip(title)}">
93 <dd title="${h.tooltip(title)}">
94 %if callable(dd):
94 %if callable(dd):
95 ## allow lazy evaluation of elements
95 ## allow lazy evaluation of elements
96 ${dd()}
96 ${dd()}
97 %else:
97 %else:
98 ${dd}
98 ${dd}
99 %endif
99 %endif
100 %if show_items:
100 %if show_items:
101 <span class="btn-collapse" data-toggle="item-${h.md5_safe(dt)[:6]}-details">${_('Show More')} </span>
101 <span class="btn-collapse" data-toggle="item-${h.md5_safe(dt)[:6]}-details">${_('Show More')} </span>
102 %endif
102 %endif
103 </dd>
103 </dd>
104
104
105 %if show_items:
105 %if show_items:
106 <div class="collapsable-content" data-toggle="item-${h.md5_safe(dt)[:6]}-details" style="display: none">
106 <div class="collapsable-content" data-toggle="item-${h.md5_safe(dt)[:6]}-details" style="display: none">
107 %for item in show_items:
107 %for item in show_items:
108 <dt></dt>
108 <dt></dt>
109 <dd>${item}</dd>
109 <dd>${item}</dd>
110 %endfor
110 %endfor
111 </div>
111 </div>
112 %endif
112 %endif
113
113
114 %endfor
114 %endfor
115 </dl>
115 </dl>
116 </%def>
116 </%def>
117
117
118
118
119 <%def name="gravatar(email, size=16)">
119 <%def name="gravatar(email, size=16)">
120 <%
120 <%
121 if (size > 16):
121 if (size > 16):
122 gravatar_class = 'gravatar gravatar-large'
122 gravatar_class = 'gravatar gravatar-large'
123 else:
123 else:
124 gravatar_class = 'gravatar'
124 gravatar_class = 'gravatar'
125 %>
125 %>
126 <%doc>
126 <%doc>
127 TODO: johbo: For now we serve double size images to make it smooth
127 TODO: johbo: For now we serve double size images to make it smooth
128 for retina. This is how it worked until now. Should be replaced
128 for retina. This is how it worked until now. Should be replaced
129 with a better solution at some point.
129 with a better solution at some point.
130 </%doc>
130 </%doc>
131 <img class="${gravatar_class}" src="${h.gravatar_url(email, size * 2)}" height="${size}" width="${size}">
131 <img class="${gravatar_class}" src="${h.gravatar_url(email, size * 2)}" height="${size}" width="${size}">
132 </%def>
132 </%def>
133
133
134
134
135 <%def name="gravatar_with_user(contact, size=16, show_disabled=False)">
135 <%def name="gravatar_with_user(contact, size=16, show_disabled=False)">
136 <% email = h.email_or_none(contact) %>
136 <% email = h.email_or_none(contact) %>
137 <div class="rc-user tooltip" title="${h.tooltip(h.author_string(email))}">
137 <div class="rc-user tooltip" title="${h.tooltip(h.author_string(email))}">
138 ${self.gravatar(email, size)}
138 ${self.gravatar(email, size)}
139 <span class="${'user user-disabled' if show_disabled else 'user'}"> ${h.link_to_user(contact)}</span>
139 <span class="${'user user-disabled' if show_disabled else 'user'}"> ${h.link_to_user(contact)}</span>
140 </div>
140 </div>
141 </%def>
141 </%def>
142
142
143
143
144 ## admin menu used for people that have some admin resources
144 ## admin menu used for people that have some admin resources
145 <%def name="admin_menu_simple(repositories=None, repository_groups=None, user_groups=None)">
145 <%def name="admin_menu_simple(repositories=None, repository_groups=None, user_groups=None)">
146 <ul class="submenu">
146 <ul class="submenu">
147 %if repositories:
147 %if repositories:
148 <li class="local-admin-repos"><a href="${h.url('repos')}">${_('Repositories')}</a></li>
148 <li class="local-admin-repos"><a href="${h.url('repos')}">${_('Repositories')}</a></li>
149 %endif
149 %endif
150 %if repository_groups:
150 %if repository_groups:
151 <li class="local-admin-repo-groups"><a href="${h.url('repo_groups')}">${_('Repository groups')}</a></li>
151 <li class="local-admin-repo-groups"><a href="${h.url('repo_groups')}">${_('Repository groups')}</a></li>
152 %endif
152 %endif
153 %if user_groups:
153 %if user_groups:
154 <li class="local-admin-user-groups"><a href="${h.url('users_groups')}">${_('User groups')}</a></li>
154 <li class="local-admin-user-groups"><a href="${h.url('users_groups')}">${_('User groups')}</a></li>
155 %endif
155 %endif
156 </ul>
156 </ul>
157 </%def>
157 </%def>
158
158
159 <%def name="repo_page_title(repo_instance)">
159 <%def name="repo_page_title(repo_instance)">
160 <div class="title-content">
160 <div class="title-content">
161 <div class="title-main">
161 <div class="title-main">
162 ## SVN/HG/GIT icons
162 ## SVN/HG/GIT icons
163 %if h.is_hg(repo_instance):
163 %if h.is_hg(repo_instance):
164 <i class="icon-hg"></i>
164 <i class="icon-hg"></i>
165 %endif
165 %endif
166 %if h.is_git(repo_instance):
166 %if h.is_git(repo_instance):
167 <i class="icon-git"></i>
167 <i class="icon-git"></i>
168 %endif
168 %endif
169 %if h.is_svn(repo_instance):
169 %if h.is_svn(repo_instance):
170 <i class="icon-svn"></i>
170 <i class="icon-svn"></i>
171 %endif
171 %endif
172
172
173 ## public/private
173 ## public/private
174 %if repo_instance.private:
174 %if repo_instance.private:
175 <i class="icon-repo-private"></i>
175 <i class="icon-repo-private"></i>
176 %else:
176 %else:
177 <i class="icon-repo-public"></i>
177 <i class="icon-repo-public"></i>
178 %endif
178 %endif
179
179
180 ## repo name with group name
180 ## repo name with group name
181 ${h.breadcrumb_repo_link(c.rhodecode_db_repo)}
181 ${h.breadcrumb_repo_link(c.rhodecode_db_repo)}
182
182
183 </div>
183 </div>
184
184
185 ## FORKED
185 ## FORKED
186 %if repo_instance.fork:
186 %if repo_instance.fork:
187 <p>
187 <p>
188 <i class="icon-code-fork"></i> ${_('Fork of')}
188 <i class="icon-code-fork"></i> ${_('Fork of')}
189 <a href="${h.route_path('repo_summary',repo_name=repo_instance.fork.repo_name)}">${repo_instance.fork.repo_name}</a>
189 <a href="${h.route_path('repo_summary',repo_name=repo_instance.fork.repo_name)}">${repo_instance.fork.repo_name}</a>
190 </p>
190 </p>
191 %endif
191 %endif
192
192
193 ## IMPORTED FROM REMOTE
193 ## IMPORTED FROM REMOTE
194 %if repo_instance.clone_uri:
194 %if repo_instance.clone_uri:
195 <p>
195 <p>
196 <i class="icon-code-fork"></i> ${_('Clone from')}
196 <i class="icon-code-fork"></i> ${_('Clone from')}
197 <a href="${h.url(h.safe_str(h.hide_credentials(repo_instance.clone_uri)))}">${h.hide_credentials(repo_instance.clone_uri)}</a>
197 <a href="${h.url(h.safe_str(h.hide_credentials(repo_instance.clone_uri)))}">${h.hide_credentials(repo_instance.clone_uri)}</a>
198 </p>
198 </p>
199 %endif
199 %endif
200
200
201 ## LOCKING STATUS
201 ## LOCKING STATUS
202 %if repo_instance.locked[0]:
202 %if repo_instance.locked[0]:
203 <p class="locking_locked">
203 <p class="locking_locked">
204 <i class="icon-repo-lock"></i>
204 <i class="icon-repo-lock"></i>
205 ${_('Repository locked by %(user)s') % {'user': h.person_by_id(repo_instance.locked[0])}}
205 ${_('Repository locked by %(user)s') % {'user': h.person_by_id(repo_instance.locked[0])}}
206 </p>
206 </p>
207 %elif repo_instance.enable_locking:
207 %elif repo_instance.enable_locking:
208 <p class="locking_unlocked">
208 <p class="locking_unlocked">
209 <i class="icon-repo-unlock"></i>
209 <i class="icon-repo-unlock"></i>
210 ${_('Repository not locked. Pull repository to lock it.')}
210 ${_('Repository not locked. Pull repository to lock it.')}
211 </p>
211 </p>
212 %endif
212 %endif
213
213
214 </div>
214 </div>
215 </%def>
215 </%def>
216
216
217 <%def name="repo_menu(active=None)">
217 <%def name="repo_menu(active=None)">
218 <%
218 <%
219 def is_active(selected):
219 def is_active(selected):
220 if selected == active:
220 if selected == active:
221 return "active"
221 return "active"
222 %>
222 %>
223
223
224 <!--- CONTEXT BAR -->
224 <!--- CONTEXT BAR -->
225 <div id="context-bar">
225 <div id="context-bar">
226 <div class="wrapper">
226 <div class="wrapper">
227 <ul id="context-pages" class="horizontal-list navigation">
227 <ul id="context-pages" class="horizontal-list navigation">
228 <li class="${is_active('summary')}"><a class="menulink" href="${h.route_path('repo_summary', repo_name=c.repo_name)}"><div class="menulabel">${_('Summary')}</div></a></li>
228 <li class="${is_active('summary')}"><a class="menulink" href="${h.route_path('repo_summary', repo_name=c.repo_name)}"><div class="menulabel">${_('Summary')}</div></a></li>
229 <li class="${is_active('changelog')}"><a class="menulink" href="${h.url('changelog_home', repo_name=c.repo_name)}"><div class="menulabel">${_('Changelog')}</div></a></li>
229 <li class="${is_active('changelog')}"><a class="menulink" href="${h.url('changelog_home', repo_name=c.repo_name)}"><div class="menulabel">${_('Changelog')}</div></a></li>
230 <li class="${is_active('files')}"><a class="menulink" href="${h.url('files_home', repo_name=c.repo_name, revision=c.rhodecode_db_repo.landing_rev[1])}"><div class="menulabel">${_('Files')}</div></a></li>
230 <li class="${is_active('files')}"><a class="menulink" href="${h.url('files_home', repo_name=c.repo_name, revision=c.rhodecode_db_repo.landing_rev[1])}"><div class="menulabel">${_('Files')}</div></a></li>
231 <li class="${is_active('compare')}">
231 <li class="${is_active('compare')}">
232 <a class="menulink" href="${h.url('compare_home',repo_name=c.repo_name)}"><div class="menulabel">${_('Compare')}</div></a>
232 <a class="menulink" href="${h.url('compare_home',repo_name=c.repo_name)}"><div class="menulabel">${_('Compare')}</div></a>
233 </li>
233 </li>
234 ## TODO: anderson: ideally it would have a function on the scm_instance "enable_pullrequest() and enable_fork()"
234 ## TODO: anderson: ideally it would have a function on the scm_instance "enable_pullrequest() and enable_fork()"
235 %if c.rhodecode_db_repo.repo_type in ['git','hg']:
235 %if c.rhodecode_db_repo.repo_type in ['git','hg']:
236 <li class="${is_active('showpullrequest')}">
236 <li class="${is_active('showpullrequest')}">
237 <a class="menulink" href="${h.route_path('pullrequest_show_all', repo_name=c.repo_name)}" title="${h.tooltip(_('Show Pull Requests for %s') % c.repo_name)}">
237 <a class="menulink" href="${h.route_path('pullrequest_show_all', repo_name=c.repo_name)}" title="${h.tooltip(_('Show Pull Requests for %s') % c.repo_name)}">
238 %if c.repository_pull_requests:
238 %if c.repository_pull_requests:
239 <span class="pr_notifications">${c.repository_pull_requests}</span>
239 <span class="pr_notifications">${c.repository_pull_requests}</span>
240 %endif
240 %endif
241 <div class="menulabel">${_('Pull Requests')}</div>
241 <div class="menulabel">${_('Pull Requests')}</div>
242 </a>
242 </a>
243 </li>
243 </li>
244 %endif
244 %endif
245 <li class="${is_active('options')}">
245 <li class="${is_active('options')}">
246 <a class="menulink dropdown">
246 <a class="menulink dropdown">
247 <div class="menulabel">${_('Options')} <div class="show_more"></div></div>
247 <div class="menulabel">${_('Options')} <div class="show_more"></div></div>
248 </a>
248 </a>
249 <ul class="submenu">
249 <ul class="submenu">
250 %if h.HasRepoPermissionAll('repository.admin')(c.repo_name):
250 %if h.HasRepoPermissionAll('repository.admin')(c.repo_name):
251 <li><a href="${h.route_path('edit_repo',repo_name=c.repo_name)}">${_('Settings')}</a></li>
251 <li><a href="${h.route_path('edit_repo',repo_name=c.repo_name)}">${_('Settings')}</a></li>
252 %endif
252 %endif
253 %if c.rhodecode_db_repo.fork:
253 %if c.rhodecode_db_repo.fork:
254 <li><a href="${h.url('compare_url',repo_name=c.rhodecode_db_repo.fork.repo_name,source_ref_type=c.rhodecode_db_repo.landing_rev[0],source_ref=c.rhodecode_db_repo.landing_rev[1], target_repo=c.repo_name,target_ref_type='branch' if request.GET.get('branch') else c.rhodecode_db_repo.landing_rev[0],target_ref=request.GET.get('branch') or c.rhodecode_db_repo.landing_rev[1], merge=1)}">
254 <li><a href="${h.url('compare_url',repo_name=c.rhodecode_db_repo.fork.repo_name,source_ref_type=c.rhodecode_db_repo.landing_rev[0],source_ref=c.rhodecode_db_repo.landing_rev[1], target_repo=c.repo_name,target_ref_type='branch' if request.GET.get('branch') else c.rhodecode_db_repo.landing_rev[0],target_ref=request.GET.get('branch') or c.rhodecode_db_repo.landing_rev[1], merge=1)}">
255 ${_('Compare fork')}</a></li>
255 ${_('Compare fork')}</a></li>
256 %endif
256 %endif
257
257
258 <li><a href="${h.route_path('search_repo',repo_name=c.repo_name)}">${_('Search')}</a></li>
258 <li><a href="${h.route_path('search_repo',repo_name=c.repo_name)}">${_('Search')}</a></li>
259
259
260 %if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name) and c.rhodecode_db_repo.enable_locking:
260 %if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name) and c.rhodecode_db_repo.enable_locking:
261 %if c.rhodecode_db_repo.locked[0]:
261 %if c.rhodecode_db_repo.locked[0]:
262 <li><a class="locking_del" href="${h.url('toggle_locking',repo_name=c.repo_name)}">${_('Unlock')}</a></li>
262 <li><a class="locking_del" href="${h.url('toggle_locking',repo_name=c.repo_name)}">${_('Unlock')}</a></li>
263 %else:
263 %else:
264 <li><a class="locking_add" href="${h.url('toggle_locking',repo_name=c.repo_name)}">${_('Lock')}</a></li>
264 <li><a class="locking_add" href="${h.url('toggle_locking',repo_name=c.repo_name)}">${_('Lock')}</a></li>
265 %endif
265 %endif
266 %endif
266 %endif
267 %if c.rhodecode_user.username != h.DEFAULT_USER:
267 %if c.rhodecode_user.username != h.DEFAULT_USER:
268 %if c.rhodecode_db_repo.repo_type in ['git','hg']:
268 %if c.rhodecode_db_repo.repo_type in ['git','hg']:
269 <li><a href="${h.url('repo_fork_home',repo_name=c.repo_name)}">${_('Fork')}</a></li>
269 <li><a href="${h.url('repo_fork_home',repo_name=c.repo_name)}">${_('Fork')}</a></li>
270 <li><a href="${h.url('pullrequest_home',repo_name=c.repo_name)}">${_('Create Pull Request')}</a></li>
270 <li><a href="${h.url('pullrequest_home',repo_name=c.repo_name)}">${_('Create Pull Request')}</a></li>
271 %endif
271 %endif
272 %endif
272 %endif
273 </ul>
273 </ul>
274 </li>
274 </li>
275 </ul>
275 </ul>
276 </div>
276 </div>
277 <div class="clear"></div>
277 <div class="clear"></div>
278 </div>
278 </div>
279 <!--- END CONTEXT BAR -->
279 <!--- END CONTEXT BAR -->
280
280
281 </%def>
281 </%def>
282
282
283 <%def name="usermenu(active=False)">
283 <%def name="usermenu(active=False)">
284 ## USER MENU
284 ## USER MENU
285 <li id="quick_login_li" class="${'active' if active else ''}">
285 <li id="quick_login_li" class="${'active' if active else ''}">
286 <a id="quick_login_link" class="menulink childs">
286 <a id="quick_login_link" class="menulink childs">
287 ${gravatar(c.rhodecode_user.email, 20)}
287 ${gravatar(c.rhodecode_user.email, 20)}
288 <span class="user">
288 <span class="user">
289 %if c.rhodecode_user.username != h.DEFAULT_USER:
289 %if c.rhodecode_user.username != h.DEFAULT_USER:
290 <span class="menu_link_user">${c.rhodecode_user.username}</span><div class="show_more"></div>
290 <span class="menu_link_user">${c.rhodecode_user.username}</span><div class="show_more"></div>
291 %else:
291 %else:
292 <span>${_('Sign in')}</span>
292 <span>${_('Sign in')}</span>
293 %endif
293 %endif
294 </span>
294 </span>
295 </a>
295 </a>
296
296
297 <div class="user-menu submenu">
297 <div class="user-menu submenu">
298 <div id="quick_login">
298 <div id="quick_login">
299 %if c.rhodecode_user.username == h.DEFAULT_USER:
299 %if c.rhodecode_user.username == h.DEFAULT_USER:
300 <h4>${_('Sign in to your account')}</h4>
300 <h4>${_('Sign in to your account')}</h4>
301 ${h.form(h.route_path('login', _query={'came_from': h.url.current()}), needs_csrf_token=False)}
301 ${h.form(h.route_path('login', _query={'came_from': h.url.current()}), needs_csrf_token=False)}
302 <div class="form form-vertical">
302 <div class="form form-vertical">
303 <div class="fields">
303 <div class="fields">
304 <div class="field">
304 <div class="field">
305 <div class="label">
305 <div class="label">
306 <label for="username">${_('Username')}:</label>
306 <label for="username">${_('Username')}:</label>
307 </div>
307 </div>
308 <div class="input">
308 <div class="input">
309 ${h.text('username',class_='focus',tabindex=1)}
309 ${h.text('username',class_='focus',tabindex=1)}
310 </div>
310 </div>
311
311
312 </div>
312 </div>
313 <div class="field">
313 <div class="field">
314 <div class="label">
314 <div class="label">
315 <label for="password">${_('Password')}:</label>
315 <label for="password">${_('Password')}:</label>
316 %if h.HasPermissionAny('hg.password_reset.enabled')():
316 %if h.HasPermissionAny('hg.password_reset.enabled')():
317 <span class="forgot_password">${h.link_to(_('(Forgot password?)'),h.route_path('reset_password'), class_='pwd_reset')}</span>
317 <span class="forgot_password">${h.link_to(_('(Forgot password?)'),h.route_path('reset_password'), class_='pwd_reset')}</span>
318 %endif
318 %endif
319 </div>
319 </div>
320 <div class="input">
320 <div class="input">
321 ${h.password('password',class_='focus',tabindex=2)}
321 ${h.password('password',class_='focus',tabindex=2)}
322 </div>
322 </div>
323 </div>
323 </div>
324 <div class="buttons">
324 <div class="buttons">
325 <div class="register">
325 <div class="register">
326 %if h.HasPermissionAny('hg.admin', 'hg.register.auto_activate', 'hg.register.manual_activate')():
326 %if h.HasPermissionAny('hg.admin', 'hg.register.auto_activate', 'hg.register.manual_activate')():
327 ${h.link_to(_("Don't have an account?"),h.route_path('register'))} <br/>
327 ${h.link_to(_("Don't have an account?"),h.route_path('register'))} <br/>
328 %endif
328 %endif
329 ${h.link_to(_("Using external auth? Sign In here."),h.route_path('login'))}
329 ${h.link_to(_("Using external auth? Sign In here."),h.route_path('login'))}
330 </div>
330 </div>
331 <div class="submit">
331 <div class="submit">
332 ${h.submit('sign_in',_('Sign In'),class_="btn btn-small",tabindex=3)}
332 ${h.submit('sign_in',_('Sign In'),class_="btn btn-small",tabindex=3)}
333 </div>
333 </div>
334 </div>
334 </div>
335 </div>
335 </div>
336 </div>
336 </div>
337 ${h.end_form()}
337 ${h.end_form()}
338 %else:
338 %else:
339 <div class="">
339 <div class="">
340 <div class="big_gravatar">${gravatar(c.rhodecode_user.email, 48)}</div>
340 <div class="big_gravatar">${gravatar(c.rhodecode_user.email, 48)}</div>
341 <div class="full_name">${c.rhodecode_user.full_name_or_username}</div>
341 <div class="full_name">${c.rhodecode_user.full_name_or_username}</div>
342 <div class="email">${c.rhodecode_user.email}</div>
342 <div class="email">${c.rhodecode_user.email}</div>
343 </div>
343 </div>
344 <div class="">
344 <div class="">
345 <ol class="links">
345 <ol class="links">
346 <li>${h.link_to(_(u'My account'),h.route_path('my_account_profile'))}</li>
346 <li>${h.link_to(_(u'My account'),h.route_path('my_account_profile'))}</li>
347 % if c.rhodecode_user.personal_repo_group:
347 % if c.rhodecode_user.personal_repo_group:
348 <li>${h.link_to(_(u'My personal group'), h.route_path('repo_group_home', repo_group_name=c.rhodecode_user.personal_repo_group.group_name))}</li>
348 <li>${h.link_to(_(u'My personal group'), h.route_path('repo_group_home', repo_group_name=c.rhodecode_user.personal_repo_group.group_name))}</li>
349 % endif
349 % endif
350 <li class="logout">
350 <li class="logout">
351 ${h.secure_form(h.route_path('logout'))}
351 ${h.secure_form(h.route_path('logout'))}
352 ${h.submit('log_out', _(u'Sign Out'),class_="btn btn-primary")}
352 ${h.submit('log_out', _(u'Sign Out'),class_="btn btn-primary")}
353 ${h.end_form()}
353 ${h.end_form()}
354 </li>
354 </li>
355 </ol>
355 </ol>
356 </div>
356 </div>
357 %endif
357 %endif
358 </div>
358 </div>
359 </div>
359 </div>
360 %if c.rhodecode_user.username != h.DEFAULT_USER:
360 %if c.rhodecode_user.username != h.DEFAULT_USER:
361 <div class="pill_container">
361 <div class="pill_container">
362 % if c.unread_notifications == 0:
362 % if c.unread_notifications == 0:
363 <a class="menu_link_notifications empty" href="${h.url('notifications')}">${c.unread_notifications}</a>
363 <a class="menu_link_notifications empty" href="${h.url('notifications')}">${c.unread_notifications}</a>
364 % else:
364 % else:
365 <a class="menu_link_notifications" href="${h.url('notifications')}">${c.unread_notifications}</a>
365 <a class="menu_link_notifications" href="${h.url('notifications')}">${c.unread_notifications}</a>
366 % endif
366 % endif
367 </div>
367 </div>
368 % endif
368 % endif
369 </li>
369 </li>
370 </%def>
370 </%def>
371
371
372 <%def name="menu_items(active=None)">
372 <%def name="menu_items(active=None)">
373 <%
373 <%
374 def is_active(selected):
374 def is_active(selected):
375 if selected == active:
375 if selected == active:
376 return "active"
376 return "active"
377 return ""
377 return ""
378 %>
378 %>
379 <ul id="quick" class="main_nav navigation horizontal-list">
379 <ul id="quick" class="main_nav navigation horizontal-list">
380 <!-- repo switcher -->
380 <!-- repo switcher -->
381 <li class="${is_active('repositories')} repo_switcher_li has_select2">
381 <li class="${is_active('repositories')} repo_switcher_li has_select2">
382 <input id="repo_switcher" name="repo_switcher" type="hidden">
382 <input id="repo_switcher" name="repo_switcher" type="hidden">
383 </li>
383 </li>
384
384
385 ## ROOT MENU
385 ## ROOT MENU
386 %if c.rhodecode_user.username != h.DEFAULT_USER:
386 %if c.rhodecode_user.username != h.DEFAULT_USER:
387 <li class="${is_active('journal')}">
387 <li class="${is_active('journal')}">
388 <a class="menulink" title="${_('Show activity journal')}" href="${h.url('journal')}">
388 <a class="menulink" title="${_('Show activity journal')}" href="${h.url('journal')}">
389 <div class="menulabel">${_('Journal')}</div>
389 <div class="menulabel">${_('Journal')}</div>
390 </a>
390 </a>
391 </li>
391 </li>
392 %else:
392 %else:
393 <li class="${is_active('journal')}">
393 <li class="${is_active('journal')}">
394 <a class="menulink" title="${_('Show Public activity journal')}" href="${h.url('public_journal')}">
394 <a class="menulink" title="${_('Show Public activity journal')}" href="${h.url('public_journal')}">
395 <div class="menulabel">${_('Public journal')}</div>
395 <div class="menulabel">${_('Public journal')}</div>
396 </a>
396 </a>
397 </li>
397 </li>
398 %endif
398 %endif
399 <li class="${is_active('gists')}">
399 <li class="${is_active('gists')}">
400 <a class="menulink childs" title="${_('Show Gists')}" href="${h.route_path('gists_show')}">
400 <a class="menulink childs" title="${_('Show Gists')}" href="${h.route_path('gists_show')}">
401 <div class="menulabel">${_('Gists')}</div>
401 <div class="menulabel">${_('Gists')}</div>
402 </a>
402 </a>
403 </li>
403 </li>
404 <li class="${is_active('search')}">
404 <li class="${is_active('search')}">
405 <a class="menulink" title="${_('Search in repositories you have access to')}" href="${h.route_path('search')}">
405 <a class="menulink" title="${_('Search in repositories you have access to')}" href="${h.route_path('search')}">
406 <div class="menulabel">${_('Search')}</div>
406 <div class="menulabel">${_('Search')}</div>
407 </a>
407 </a>
408 </li>
408 </li>
409 % if h.HasPermissionAll('hg.admin')('access admin main page'):
409 % if h.HasPermissionAll('hg.admin')('access admin main page'):
410 <li class="${is_active('admin')}">
410 <li class="${is_active('admin')}">
411 <a class="menulink childs" title="${_('Admin settings')}" href="#" onclick="return false;">
411 <a class="menulink childs" title="${_('Admin settings')}" href="#" onclick="return false;">
412 <div class="menulabel">${_('Admin')} <div class="show_more"></div></div>
412 <div class="menulabel">${_('Admin')} <div class="show_more"></div></div>
413 </a>
413 </a>
414 ${admin_menu()}
414 ${admin_menu()}
415 </li>
415 </li>
416 % elif c.rhodecode_user.repositories_admin or c.rhodecode_user.repository_groups_admin or c.rhodecode_user.user_groups_admin:
416 % elif c.rhodecode_user.repositories_admin or c.rhodecode_user.repository_groups_admin or c.rhodecode_user.user_groups_admin:
417 <li class="${is_active('admin')}">
417 <li class="${is_active('admin')}">
418 <a class="menulink childs" title="${_('Delegated Admin settings')}">
418 <a class="menulink childs" title="${_('Delegated Admin settings')}">
419 <div class="menulabel">${_('Admin')} <div class="show_more"></div></div>
419 <div class="menulabel">${_('Admin')} <div class="show_more"></div></div>
420 </a>
420 </a>
421 ${admin_menu_simple(c.rhodecode_user.repositories_admin,
421 ${admin_menu_simple(c.rhodecode_user.repositories_admin,
422 c.rhodecode_user.repository_groups_admin,
422 c.rhodecode_user.repository_groups_admin,
423 c.rhodecode_user.user_groups_admin or h.HasPermissionAny('hg.usergroup.create.true')())}
423 c.rhodecode_user.user_groups_admin or h.HasPermissionAny('hg.usergroup.create.true')())}
424 </li>
424 </li>
425 % endif
425 % endif
426 % if c.debug_style:
426 % if c.debug_style:
427 <li class="${is_active('debug_style')}">
427 <li class="${is_active('debug_style')}">
428 <a class="menulink" title="${_('Style')}" href="${h.url('debug_style_home')}">
428 <a class="menulink" title="${_('Style')}" href="${h.route_path('debug_style_home')}">
429 <div class="menulabel">${_('Style')}</div>
429 <div class="menulabel">${_('Style')}</div>
430 </a>
430 </a>
431 </li>
431 </li>
432 % endif
432 % endif
433 ## render extra user menu
433 ## render extra user menu
434 ${usermenu(active=(active=='my_account'))}
434 ${usermenu(active=(active=='my_account'))}
435 </ul>
435 </ul>
436
436
437 <script type="text/javascript">
437 <script type="text/javascript">
438 var visual_show_public_icon = "${c.visual.show_public_icon}" == "True";
438 var visual_show_public_icon = "${c.visual.show_public_icon}" == "True";
439
439
440 /*format the look of items in the list*/
440 /*format the look of items in the list*/
441 var format = function(state, escapeMarkup){
441 var format = function(state, escapeMarkup){
442 if (!state.id){
442 if (!state.id){
443 return state.text; // optgroup
443 return state.text; // optgroup
444 }
444 }
445 var obj_dict = state.obj;
445 var obj_dict = state.obj;
446 var tmpl = '';
446 var tmpl = '';
447
447
448 if(obj_dict && state.type == 'repo'){
448 if(obj_dict && state.type == 'repo'){
449 if(obj_dict['repo_type'] === 'hg'){
449 if(obj_dict['repo_type'] === 'hg'){
450 tmpl += '<i class="icon-hg"></i> ';
450 tmpl += '<i class="icon-hg"></i> ';
451 }
451 }
452 else if(obj_dict['repo_type'] === 'git'){
452 else if(obj_dict['repo_type'] === 'git'){
453 tmpl += '<i class="icon-git"></i> ';
453 tmpl += '<i class="icon-git"></i> ';
454 }
454 }
455 else if(obj_dict['repo_type'] === 'svn'){
455 else if(obj_dict['repo_type'] === 'svn'){
456 tmpl += '<i class="icon-svn"></i> ';
456 tmpl += '<i class="icon-svn"></i> ';
457 }
457 }
458 if(obj_dict['private']){
458 if(obj_dict['private']){
459 tmpl += '<i class="icon-lock" ></i> ';
459 tmpl += '<i class="icon-lock" ></i> ';
460 }
460 }
461 else if(visual_show_public_icon){
461 else if(visual_show_public_icon){
462 tmpl += '<i class="icon-unlock-alt"></i> ';
462 tmpl += '<i class="icon-unlock-alt"></i> ';
463 }
463 }
464 }
464 }
465 if(obj_dict && state.type == 'commit') {
465 if(obj_dict && state.type == 'commit') {
466 tmpl += '<i class="icon-tag"></i>';
466 tmpl += '<i class="icon-tag"></i>';
467 }
467 }
468 if(obj_dict && state.type == 'group'){
468 if(obj_dict && state.type == 'group'){
469 tmpl += '<i class="icon-folder-close"></i> ';
469 tmpl += '<i class="icon-folder-close"></i> ';
470 }
470 }
471 tmpl += escapeMarkup(state.text);
471 tmpl += escapeMarkup(state.text);
472 return tmpl;
472 return tmpl;
473 };
473 };
474
474
475 var formatResult = function(result, container, query, escapeMarkup) {
475 var formatResult = function(result, container, query, escapeMarkup) {
476 return format(result, escapeMarkup);
476 return format(result, escapeMarkup);
477 };
477 };
478
478
479 var formatSelection = function(data, container, escapeMarkup) {
479 var formatSelection = function(data, container, escapeMarkup) {
480 return format(data, escapeMarkup);
480 return format(data, escapeMarkup);
481 };
481 };
482
482
483 $("#repo_switcher").select2({
483 $("#repo_switcher").select2({
484 cachedDataSource: {},
484 cachedDataSource: {},
485 minimumInputLength: 2,
485 minimumInputLength: 2,
486 placeholder: '<div class="menulabel">${_('Go to')} <div class="show_more"></div></div>',
486 placeholder: '<div class="menulabel">${_('Go to')} <div class="show_more"></div></div>',
487 dropdownAutoWidth: true,
487 dropdownAutoWidth: true,
488 formatResult: formatResult,
488 formatResult: formatResult,
489 formatSelection: formatSelection,
489 formatSelection: formatSelection,
490 containerCssClass: "repo-switcher",
490 containerCssClass: "repo-switcher",
491 dropdownCssClass: "repo-switcher-dropdown",
491 dropdownCssClass: "repo-switcher-dropdown",
492 escapeMarkup: function(m){
492 escapeMarkup: function(m){
493 // don't escape our custom placeholder
493 // don't escape our custom placeholder
494 if(m.substr(0,23) == '<div class="menulabel">'){
494 if(m.substr(0,23) == '<div class="menulabel">'){
495 return m;
495 return m;
496 }
496 }
497
497
498 return Select2.util.escapeMarkup(m);
498 return Select2.util.escapeMarkup(m);
499 },
499 },
500 query: $.debounce(250, function(query){
500 query: $.debounce(250, function(query){
501 self = this;
501 self = this;
502 var cacheKey = query.term;
502 var cacheKey = query.term;
503 var cachedData = self.cachedDataSource[cacheKey];
503 var cachedData = self.cachedDataSource[cacheKey];
504
504
505 if (cachedData) {
505 if (cachedData) {
506 query.callback({results: cachedData.results});
506 query.callback({results: cachedData.results});
507 } else {
507 } else {
508 $.ajax({
508 $.ajax({
509 url: pyroutes.url('goto_switcher_data'),
509 url: pyroutes.url('goto_switcher_data'),
510 data: {'query': query.term},
510 data: {'query': query.term},
511 dataType: 'json',
511 dataType: 'json',
512 type: 'GET',
512 type: 'GET',
513 success: function(data) {
513 success: function(data) {
514 self.cachedDataSource[cacheKey] = data;
514 self.cachedDataSource[cacheKey] = data;
515 query.callback({results: data.results});
515 query.callback({results: data.results});
516 },
516 },
517 error: function(data, textStatus, errorThrown) {
517 error: function(data, textStatus, errorThrown) {
518 alert("Error while fetching entries.\nError code {0} ({1}).".format(data.status, data.statusText));
518 alert("Error while fetching entries.\nError code {0} ({1}).".format(data.status, data.statusText));
519 }
519 }
520 })
520 })
521 }
521 }
522 })
522 })
523 });
523 });
524
524
525 $("#repo_switcher").on('select2-selecting', function(e){
525 $("#repo_switcher").on('select2-selecting', function(e){
526 e.preventDefault();
526 e.preventDefault();
527 window.location = e.choice.url;
527 window.location = e.choice.url;
528 });
528 });
529
529
530 </script>
530 </script>
531 <script src="${h.asset('js/rhodecode/base/keyboard-bindings.js', ver=c.rhodecode_version_hash)}"></script>
531 <script src="${h.asset('js/rhodecode/base/keyboard-bindings.js', ver=c.rhodecode_version_hash)}"></script>
532 </%def>
532 </%def>
533
533
534 <div class="modal" id="help_kb" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
534 <div class="modal" id="help_kb" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
535 <div class="modal-dialog">
535 <div class="modal-dialog">
536 <div class="modal-content">
536 <div class="modal-content">
537 <div class="modal-header">
537 <div class="modal-header">
538 <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
538 <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
539 <h4 class="modal-title" id="myModalLabel">${_('Keyboard shortcuts')}</h4>
539 <h4 class="modal-title" id="myModalLabel">${_('Keyboard shortcuts')}</h4>
540 </div>
540 </div>
541 <div class="modal-body">
541 <div class="modal-body">
542 <div class="block-left">
542 <div class="block-left">
543 <table class="keyboard-mappings">
543 <table class="keyboard-mappings">
544 <tbody>
544 <tbody>
545 <tr>
545 <tr>
546 <th></th>
546 <th></th>
547 <th>${_('Site-wide shortcuts')}</th>
547 <th>${_('Site-wide shortcuts')}</th>
548 </tr>
548 </tr>
549 <%
549 <%
550 elems = [
550 elems = [
551 ('/', 'Open quick search box'),
551 ('/', 'Open quick search box'),
552 ('g h', 'Goto home page'),
552 ('g h', 'Goto home page'),
553 ('g g', 'Goto my private gists page'),
553 ('g g', 'Goto my private gists page'),
554 ('g G', 'Goto my public gists page'),
554 ('g G', 'Goto my public gists page'),
555 ('n r', 'New repository page'),
555 ('n r', 'New repository page'),
556 ('n g', 'New gist page'),
556 ('n g', 'New gist page'),
557 ]
557 ]
558 %>
558 %>
559 %for key, desc in elems:
559 %for key, desc in elems:
560 <tr>
560 <tr>
561 <td class="keys">
561 <td class="keys">
562 <span class="key tag">${key}</span>
562 <span class="key tag">${key}</span>
563 </td>
563 </td>
564 <td>${desc}</td>
564 <td>${desc}</td>
565 </tr>
565 </tr>
566 %endfor
566 %endfor
567 </tbody>
567 </tbody>
568 </table>
568 </table>
569 </div>
569 </div>
570 <div class="block-left">
570 <div class="block-left">
571 <table class="keyboard-mappings">
571 <table class="keyboard-mappings">
572 <tbody>
572 <tbody>
573 <tr>
573 <tr>
574 <th></th>
574 <th></th>
575 <th>${_('Repositories')}</th>
575 <th>${_('Repositories')}</th>
576 </tr>
576 </tr>
577 <%
577 <%
578 elems = [
578 elems = [
579 ('g s', 'Goto summary page'),
579 ('g s', 'Goto summary page'),
580 ('g c', 'Goto changelog page'),
580 ('g c', 'Goto changelog page'),
581 ('g f', 'Goto files page'),
581 ('g f', 'Goto files page'),
582 ('g F', 'Goto files page with file search activated'),
582 ('g F', 'Goto files page with file search activated'),
583 ('g p', 'Goto pull requests page'),
583 ('g p', 'Goto pull requests page'),
584 ('g o', 'Goto repository settings'),
584 ('g o', 'Goto repository settings'),
585 ('g O', 'Goto repository permissions settings'),
585 ('g O', 'Goto repository permissions settings'),
586 ]
586 ]
587 %>
587 %>
588 %for key, desc in elems:
588 %for key, desc in elems:
589 <tr>
589 <tr>
590 <td class="keys">
590 <td class="keys">
591 <span class="key tag">${key}</span>
591 <span class="key tag">${key}</span>
592 </td>
592 </td>
593 <td>${desc}</td>
593 <td>${desc}</td>
594 </tr>
594 </tr>
595 %endfor
595 %endfor
596 </tbody>
596 </tbody>
597 </table>
597 </table>
598 </div>
598 </div>
599 </div>
599 </div>
600 <div class="modal-footer">
600 <div class="modal-footer">
601 </div>
601 </div>
602 </div><!-- /.modal-content -->
602 </div><!-- /.modal-content -->
603 </div><!-- /.modal-dialog -->
603 </div><!-- /.modal-dialog -->
604 </div><!-- /.modal -->
604 </div><!-- /.modal -->
@@ -1,75 +1,75 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2 <%inherit file="/debug_style/index.html"/>
2 <%inherit file="/debug_style/index.html"/>
3
3
4 <%def name="breadcrumbs_links()">
4 <%def name="breadcrumbs_links()">
5 ${h.link_to(_('Style'), h.url('debug_style_home'))}
5 ${h.link_to(_('Style'), h.route_path('debug_style_home'))}
6 &raquo;
6 &raquo;
7 ${c.active}
7 ${c.active}
8 </%def>
8 </%def>
9
9
10
10
11 <%def name="real_main()">
11 <%def name="real_main()">
12 <div class="box">
12 <div class="box">
13 <div class="title">
13 <div class="title">
14 ${self.breadcrumbs()}
14 ${self.breadcrumbs()}
15 </div>
15 </div>
16
16
17 <div class='sidebar-col-wrapper'>
17 <div class='sidebar-col-wrapper'>
18
18
19 ${self.sidebar()}
19 ${self.sidebar()}
20
20
21 <div class="main-content">
21 <div class="main-content">
22
22
23 <h3>Alert Messages</h3>
23 <h3>Alert Messages</h3>
24 <p>
24 <p>
25 Alert messages are produced using the custom Polymer element
25 Alert messages are produced using the custom Polymer element
26 <code>rhodecode-toast</code> which is passed a message and level.
26 <code>rhodecode-toast</code> which is passed a message and level.
27 </p>
27 </p>
28
28
29 <div class="bs-example">
29 <div class="bs-example">
30 <p> There are four types of alert levels:</p>
30 <p> There are four types of alert levels:</p>
31 <div class="alert alert-success">
31 <div class="alert alert-success">
32 "success" is used when an action is completed as expected<br/>
32 "success" is used when an action is completed as expected<br/>
33 ex. updated settings, deletion of a repo/user
33 ex. updated settings, deletion of a repo/user
34 </div>
34 </div>
35 <div class="alert alert-warning">
35 <div class="alert alert-warning">
36 "warning" is for notification of impending issues<br/>
36 "warning" is for notification of impending issues<br/>
37 ex. a gist which was updated elsewhere during editing, disk out of space
37 ex. a gist which was updated elsewhere during editing, disk out of space
38 </div>
38 </div>
39 <div class="alert alert-error">
39 <div class="alert alert-error">
40 "error" should be used for unexpected results and actions which
40 "error" should be used for unexpected results and actions which
41 are not successful<br/>
41 are not successful<br/>
42 ex. a form not submitted, repo creation failure
42 ex. a form not submitted, repo creation failure
43 </div>
43 </div>
44 <div class="alert alert-info">
44 <div class="alert alert-info">
45 "info" is used for non-critical information<br/>
45 "info" is used for non-critical information<br/>
46 ex. notification of new messages, invitations to chat
46 ex. notification of new messages, invitations to chat
47 </div>
47 </div>
48 </div>
48 </div>
49
49
50 <p><br/>
50 <p><br/>
51 Whether singular or multiple, alerts are grouped into a dismissable
51 Whether singular or multiple, alerts are grouped into a dismissable
52 panel with a single "Close" button underneath.
52 panel with a single "Close" button underneath.
53 </p>
53 </p>
54 <a class="btn btn-default" id="test-notification">Test Notification</a>
54 <a class="btn btn-default" id="test-notification">Test Notification</a>
55
55
56 <script type="text/javascript">
56 <script type="text/javascript">
57 $('#test-notification').on('click', function(e){
57 $('#test-notification').on('click', function(e){
58 var levels = ['info', 'error', 'warning', 'success'];
58 var levels = ['info', 'error', 'warning', 'success'];
59 var level = levels[Math.floor(Math.random()*levels.length)];
59 var level = levels[Math.floor(Math.random()*levels.length)];
60 var payload = {
60 var payload = {
61 message: {
61 message: {
62 message: 'This is a test ' +level+ ' notification.',
62 message: 'This is a test ' +level+ ' notification.',
63 level: level,
63 level: level,
64 force: true
64 force: true
65 }
65 }
66 };
66 };
67 $.Topic('/notifications').publish(payload);
67 $.Topic('/notifications').publish(payload);
68 });
68 });
69 </script>
69 </script>
70
70
71 </div>
71 </div>
72 </div> <!-- .main-content -->
72 </div> <!-- .main-content -->
73 </div>
73 </div>
74 </div> <!-- .box -->
74 </div> <!-- .box -->
75 </%def>
75 </%def>
@@ -1,197 +1,197 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2 <%inherit file="/debug_style/index.html"/>
2 <%inherit file="/debug_style/index.html"/>
3
3
4 <%def name="breadcrumbs_links()">
4 <%def name="breadcrumbs_links()">
5 ${h.link_to(_('Style'), h.url('debug_style_home'))}
5 ${h.link_to(_('Style'), h.route_path('debug_style_home'))}
6 &raquo;
6 &raquo;
7 ${c.active}
7 ${c.active}
8 </%def>
8 </%def>
9
9
10
10
11 <%def name="real_main()">
11 <%def name="real_main()">
12 <div class="box">
12 <div class="box">
13 <div class="title">
13 <div class="title">
14 ${self.breadcrumbs()}
14 ${self.breadcrumbs()}
15 </div>
15 </div>
16
16
17 <div class='sidebar-col-wrapper'>
17 <div class='sidebar-col-wrapper'>
18 ${self.sidebar()}
18 ${self.sidebar()}
19
19
20 <div class="main-content">
20 <div class="main-content">
21
21
22 <h2>Buttons</h2>
22 <h2>Buttons</h2>
23
23
24 <p>
24 <p>
25 Form buttons in various sizes. Buttons are always capitalised.
25 Form buttons in various sizes. Buttons are always capitalised.
26 Use the following classes:
26 Use the following classes:
27 </p>
27 </p>
28
28
29 <ul>
29 <ul>
30 ## TODO: lisa: Are we actually using three sizes of buttons??
30 ## TODO: lisa: Are we actually using three sizes of buttons??
31 <li><code>.btn-lg</code> for large buttons</li>
31 <li><code>.btn-lg</code> for large buttons</li>
32 <li><code>.btn-sm</code> for small buttons</li>
32 <li><code>.btn-sm</code> for small buttons</li>
33 <li><code>.btn-xs</code> for xtra small buttons</li>
33 <li><code>.btn-xs</code> for xtra small buttons</li>
34 </ul>
34 </ul>
35
35
36 <p>Note that <code>.btn-mini</code> is supported for legacy reasons.</p>
36 <p>Note that <code>.btn-mini</code> is supported for legacy reasons.</p>
37
37
38 <div class="bs-example">
38 <div class="bs-example">
39 ## TODO: johbo: Should also work without the form element
39 ## TODO: johbo: Should also work without the form element
40 <form method='post' action=''>
40 <form method='post' action=''>
41 <div class='form'>
41 <div class='form'>
42
42
43 <div class="buttons">
43 <div class="buttons">
44 <input type="submit" value="Save .btn-lg" id="example_save" class="btn btn-lg">
44 <input type="submit" value="Save .btn-lg" id="example_save" class="btn btn-lg">
45 <input type="reset" value="Reset" id="example_reset" class="btn btn-lg">
45 <input type="reset" value="Reset" id="example_reset" class="btn btn-lg">
46 <button class="btn btn-lg">Large</button>
46 <button class="btn btn-lg">Large</button>
47 <a class="btn btn-lg" href="#">A link as button</a>
47 <a class="btn btn-lg" href="#">A link as button</a>
48 </div>
48 </div>
49
49
50 <div class="buttons">
50 <div class="buttons">
51 <input type="submit" value="Save" id="example_save" class="btn">
51 <input type="submit" value="Save" id="example_save" class="btn">
52 <input type="reset" value="Reset" id="example_reset" class="btn">
52 <input type="reset" value="Reset" id="example_reset" class="btn">
53 <button class="btn">Normal</button>
53 <button class="btn">Normal</button>
54 <button class="btn btn-danger">Normal</button>
54 <button class="btn btn-danger">Normal</button>
55 <a class="btn" href="#">A link as button</a>
55 <a class="btn" href="#">A link as button</a>
56 </div>
56 </div>
57
57
58 <div class="buttons">
58 <div class="buttons">
59 <input type="submit" value="Save .btn-sm" id="example_save" class="btn btn-sm">
59 <input type="submit" value="Save .btn-sm" id="example_save" class="btn btn-sm">
60 <input type="reset" value="Reset" id="example_reset" class="btn btn-sm">
60 <input type="reset" value="Reset" id="example_reset" class="btn btn-sm">
61 <button class="btn btn-sm">Small</button>
61 <button class="btn btn-sm">Small</button>
62 <button class="btn btn-sm btn-danger">Small</button>
62 <button class="btn btn-sm btn-danger">Small</button>
63 <a class="btn btn-sm" href="#">A link as button</a>
63 <a class="btn btn-sm" href="#">A link as button</a>
64 </div>
64 </div>
65
65
66 <div class="buttons">
66 <div class="buttons">
67 <input type="submit" value="Save .btn-xs" id="example_save" class="btn btn-xs">
67 <input type="submit" value="Save .btn-xs" id="example_save" class="btn btn-xs">
68 <input type="reset" value="Reset" id="example_reset" class="btn btn-xs">
68 <input type="reset" value="Reset" id="example_reset" class="btn btn-xs">
69 <button class="btn btn-xs">XSmall</button>
69 <button class="btn btn-xs">XSmall</button>
70 <button class="btn btn-xs btn-danger">XSmall</button>
70 <button class="btn btn-xs btn-danger">XSmall</button>
71 <a class="btn btn-xs" href="#">A link as button</a>
71 <a class="btn btn-xs" href="#">A link as button</a>
72 </div>
72 </div>
73
73
74 <div class="buttons">
74 <div class="buttons">
75 <input type="submit" value="Save .btn-mini" id="example_save" class="btn btn-mini">
75 <input type="submit" value="Save .btn-mini" id="example_save" class="btn btn-mini">
76 <input type="reset" value="Reset" id="example_reset" class="btn btn-mini">
76 <input type="reset" value="Reset" id="example_reset" class="btn btn-mini">
77 </div>
77 </div>
78
78
79 <div class="buttons">
79 <div class="buttons">
80 Buttons of style <code>.btn-link</code>:
80 Buttons of style <code>.btn-link</code>:
81 <input type="reset" value="Reset" id="example_reset" class="btn btn-link">
81 <input type="reset" value="Reset" id="example_reset" class="btn btn-link">
82 <button class="btn btn-link">Edit</button>
82 <button class="btn btn-link">Edit</button>
83 <button class="btn btn-danger btn-link">Delete</button>
83 <button class="btn btn-danger btn-link">Delete</button>
84 </div>
84 </div>
85 </div>
85 </div>
86 </form>
86 </form>
87 </div>
87 </div>
88
88
89
89
90 <h2>Buttons as Links</h2>
90 <h2>Buttons as Links</h2>
91 <p>
91 <p>
92 Most of our Edit/Delete buttons come in the following form.
92 Most of our Edit/Delete buttons come in the following form.
93 Inside of a table, these are "action buttons", and while an
93 Inside of a table, these are "action buttons", and while an
94 Edit <em>link</em> is a typical blue link, a Delete <em>button</em>
94 Edit <em>link</em> is a typical blue link, a Delete <em>button</em>
95 is red as per the 'btn-danger' styling and use <code>.btn-link</code>.
95 is red as per the 'btn-danger' styling and use <code>.btn-link</code>.
96 </p>
96 </p>
97 <p>
97 <p>
98 We use "Delete" when the thing being deleted cannot be undone;
98 We use "Delete" when the thing being deleted cannot be undone;
99 "Reset", and "Revoke" are used where applicable.
99 "Reset", and "Revoke" are used where applicable.
100 </p>
100 </p>
101 <p>
101 <p>
102 Note: Should there be a need for a change in the wording, be
102 Note: Should there be a need for a change in the wording, be
103 aware that corresponding documentation may also need updating.
103 aware that corresponding documentation may also need updating.
104 </p>
104 </p>
105 <div class="bs-example">
105 <div class="bs-example">
106 <table class="rctable edit_fields">
106 <table class="rctable edit_fields">
107 <tr><td></td><td></td></tr>
107 <tr><td></td><td></td></tr>
108 <tr>
108 <tr>
109 <td></td>
109 <td></td>
110 <td class=" td-action">
110 <td class=" td-action">
111 <div class="grid_edit">
111 <div class="grid_edit">
112 <a href="/_admin/repo_groups/breads/edit" title="Edit">Edit</a>
112 <a href="/_admin/repo_groups/breads/edit" title="Edit">Edit</a>
113 </div>
113 </div>
114 <div class="grid_delete">
114 <div class="grid_delete">
115 <form action="/_admin/repo_groups/breads" method="post"><div style="display:none">
115 <form action="/_admin/repo_groups/breads" method="post"><div style="display:none">
116 <input name="_method" type="hidden" value="delete">
116 <input name="_method" type="hidden" value="delete">
117 </div>
117 </div>
118 <div style="display: none;"><input id="csrf_token" name="csrf_token" type="hidden" value="03d6cc48726b885039b2f7675e85596b7dae6ecf"></div>
118 <div style="display: none;"><input id="csrf_token" name="csrf_token" type="hidden" value="03d6cc48726b885039b2f7675e85596b7dae6ecf"></div>
119 <button class="btn btn-link btn-danger" type="submit" onclick="return confirm('" +ungettext('confirm="" to="" delete="" this="" group:="" %s="" with="" repository','confirm="" repositories',gr_count)="" %="" (repo_group_name,="" gr_count)+"');"="">
119 <button class="btn btn-link btn-danger" type="submit" onclick="return confirm('" +ungettext('confirm="" to="" delete="" this="" group:="" %s="" with="" repository','confirm="" repositories',gr_count)="" %="" (repo_group_name,="" gr_count)+"');"="">
120 Delete
120 Delete
121 </button>
121 </button>
122 </form>
122 </form>
123 </div>
123 </div>
124 </td>
124 </td>
125 </tr>
125 </tr>
126 </table>
126 </table>
127 <div class="highlight-html"><xmp>
127 <div class="highlight-html"><xmp>
128 <a href="some-link" title="${_('Edit')}">${_('Edit')}</a>
128 <a href="some-link" title="${_('Edit')}">${_('Edit')}</a>
129
129
130 <button class="btn btn-link btn-danger" type="submit"
130 <button class="btn btn-link btn-danger" type="submit"
131 onclick="return confirm('${_('Confirm to remove this field: Field')}');">
131 onclick="return confirm('${_('Confirm to remove this field: Field')}');">
132 ${_('Delete')}
132 ${_('Delete')}
133 </button>
133 </button>
134 </xmp></div>
134 </xmp></div>
135 </div>
135 </div>
136
136
137
137
138 <h2>Buttons disabled</h2>
138 <h2>Buttons disabled</h2>
139
139
140 <p>Note that our application still uses the class <code>.disabled</code>
140 <p>Note that our application still uses the class <code>.disabled</code>
141 in some places. Interim we support both but prefer to use the
141 in some places. Interim we support both but prefer to use the
142 attribute <code>disabled</code> where possible.</p>
142 attribute <code>disabled</code> where possible.</p>
143
143
144 <div class="bs-example">
144 <div class="bs-example">
145 ## TODO: johbo: Should also work without the form element
145 ## TODO: johbo: Should also work without the form element
146 <form method='post' action=''>
146 <form method='post' action=''>
147 <div class='form'>
147 <div class='form'>
148
148
149 <div class="buttons">
149 <div class="buttons">
150 <input type="submit" value="Save .btn-lg" id="example_save" class="btn btn-lg" disabled>
150 <input type="submit" value="Save .btn-lg" id="example_save" class="btn btn-lg" disabled>
151 <input type="reset" value="Reset" id="example_reset" class="btn btn-lg" disabled>
151 <input type="reset" value="Reset" id="example_reset" class="btn btn-lg" disabled>
152 <button class="btn btn-lg" disabled>Large</button>
152 <button class="btn btn-lg" disabled>Large</button>
153 </div>
153 </div>
154
154
155 <div class="buttons">
155 <div class="buttons">
156 <input type="submit" value="Save" id="example_save" class="btn" disabled>
156 <input type="submit" value="Save" id="example_save" class="btn" disabled>
157 <input type="reset" value="Reset" id="example_reset" class="btn" disabled>
157 <input type="reset" value="Reset" id="example_reset" class="btn" disabled>
158 <button class="btn" disabled>Normal</button>
158 <button class="btn" disabled>Normal</button>
159 <button class="btn btn-danger" disabled>Normal</button>
159 <button class="btn btn-danger" disabled>Normal</button>
160 </div>
160 </div>
161
161
162 <div class="buttons">
162 <div class="buttons">
163 <input type="submit" value="Save .btn-sm" id="example_save" class="btn btn-sm" disabled>
163 <input type="submit" value="Save .btn-sm" id="example_save" class="btn btn-sm" disabled>
164 <input type="reset" value="Reset" id="example_reset" class="btn btn-sm" disabled>
164 <input type="reset" value="Reset" id="example_reset" class="btn btn-sm" disabled>
165 <button class="btn btn-sm" disabled>Small</button>
165 <button class="btn btn-sm" disabled>Small</button>
166 <button class="btn btn-sm btn-danger" disabled>Small</button>
166 <button class="btn btn-sm btn-danger" disabled>Small</button>
167 </div>
167 </div>
168
168
169 <div class="buttons">
169 <div class="buttons">
170 <input type="submit" value="Save .btn-xs" id="example_save" class="btn btn-xs" disabled>
170 <input type="submit" value="Save .btn-xs" id="example_save" class="btn btn-xs" disabled>
171 <input type="reset" value="Reset" id="example_reset" class="btn btn-xs" disabled>
171 <input type="reset" value="Reset" id="example_reset" class="btn btn-xs" disabled>
172 <button class="btn btn-xs" disabled>XSmall</button>
172 <button class="btn btn-xs" disabled>XSmall</button>
173 <button class="btn btn-xs btn-danger" disabled>XSmall</button>
173 <button class="btn btn-xs btn-danger" disabled>XSmall</button>
174 </div>
174 </div>
175
175
176 <div class="buttons">
176 <div class="buttons">
177 <input type="submit" value="Save .btn-mini" id="example_save" class="btn btn-mini" disabled>
177 <input type="submit" value="Save .btn-mini" id="example_save" class="btn btn-mini" disabled>
178 <input type="reset" value="Reset" id="example_reset" class="btn btn-mini" disabled>
178 <input type="reset" value="Reset" id="example_reset" class="btn btn-mini" disabled>
179 </div>
179 </div>
180
180
181 <div class="buttons">
181 <div class="buttons">
182 Buttons of style <code>.btn-link</code>:
182 Buttons of style <code>.btn-link</code>:
183 <input type="reset" value="Reset" id="example_reset" class="btn btn-link" disabled>
183 <input type="reset" value="Reset" id="example_reset" class="btn btn-link" disabled>
184 <button class="btn btn-link" disabled>Edit</button>
184 <button class="btn btn-link" disabled>Edit</button>
185 <button class="btn btn-link btn-danger" disabled>Delete</button>
185 <button class="btn btn-link btn-danger" disabled>Delete</button>
186 </div>
186 </div>
187
187
188 </div>
188 </div>
189 </form>
189 </form>
190 </div>
190 </div>
191
191
192
192
193
193
194 </div>
194 </div>
195 </div> <!-- .main-content -->
195 </div> <!-- .main-content -->
196 </div> <!-- .box -->
196 </div> <!-- .box -->
197 </%def>
197 </%def>
@@ -1,1160 +1,1160 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2 <%namespace name="base" file="/base/base.mako"/>
2 <%namespace name="base" file="/base/base.mako"/>
3 <%inherit file="/debug_style/index.html"/>
3 <%inherit file="/debug_style/index.html"/>
4
4
5 <%def name="breadcrumbs_links()">
5 <%def name="breadcrumbs_links()">
6 ${h.link_to(_('Style'), h.url('debug_style_home'))}
6 ${h.link_to(_('Style'), h.route_path('debug_style_home'))}
7 &raquo;
7 &raquo;
8 ${c.active}
8 ${c.active}
9 </%def>
9 </%def>
10
10
11 <%def name="js_extra()">
11 <%def name="js_extra()">
12 </%def>
12 </%def>
13
13
14 <%def name="css_extra()">
14 <%def name="css_extra()">
15 </%def>
15 </%def>
16
16
17
17
18 <%def name="real_main()">
18 <%def name="real_main()">
19 <div class="box">
19 <div class="box">
20 <div class="title">
20 <div class="title">
21 ${self.breadcrumbs()}
21 ${self.breadcrumbs()}
22 </div>
22 </div>
23
23
24 ##main
24 ##main
25 <div class='sidebar-col-wrapper'>
25 <div class='sidebar-col-wrapper'>
26 ${self.sidebar()}
26 ${self.sidebar()}
27
27
28 <div class="main-content">
28 <div class="main-content">
29
29
30
30
31
31
32 <h2>Code Blocks</h2>
32 <h2>Code Blocks</h2>
33
33
34 <dl class="dl-horizontal">
34 <dl class="dl-horizontal">
35 <dt><code>.codeblock</code></dt>
35 <dt><code>.codeblock</code></dt>
36 <dd>Used as a wrapping element around <code>.code-header</code> and
36 <dd>Used as a wrapping element around <code>.code-header</code> and
37 <code>.code-body</code>. Used to show the content of a file or a
37 <code>.code-body</code>. Used to show the content of a file or a
38 Gist.</dd>
38 Gist.</dd>
39
39
40 <dt><code>.diffblock</code></dt>
40 <dt><code>.diffblock</code></dt>
41 <dd>Used as a wrapping element to show a diff in a Commit or Pull
41 <dd>Used as a wrapping element to show a diff in a Commit or Pull
42 Request page. Contains usually <code>.code-header</code>,
42 Request page. Contains usually <code>.code-header</code>,
43 <code>.code-body</code> and in the edit case a <code>.message</code>.
43 <code>.code-body</code> and in the edit case a <code>.message</code>.
44 </dd>
44 </dd>
45 </dl>
45 </dl>
46
46
47
47
48 <p>Code Blocks are used in the following areas:</p>
48 <p>Code Blocks are used in the following areas:</p>
49
49
50 <ul>
50 <ul>
51 <li>Commit: Showing the Diff (still called Changeset in a few
51 <li>Commit: Showing the Diff (still called Changeset in a few
52 places).</li>
52 places).</li>
53 <li>File: Display a file, annotations, and edit a file.</li>
53 <li>File: Display a file, annotations, and edit a file.</li>
54 <li>Gist: Show the Gist and edit it.</li>
54 <li>Gist: Show the Gist and edit it.</li>
55 <li>Pull Request: Display the Diff of a Pull Request.</li>
55 <li>Pull Request: Display the Diff of a Pull Request.</li>
56 </ul>
56 </ul>
57
57
58
58
59
59
60 <!--
60 <!--
61 Compare Commits
61 Compare Commits
62 -->
62 -->
63 <h2>Compare Commits</h2>
63 <h2>Compare Commits</h2>
64
64
65 <div id="c-e589e34d6be8-5ab783e6d81b" class="diffblock margined comm">
65 <div id="c-e589e34d6be8-5ab783e6d81b" class="diffblock margined comm">
66 <div class="code-header">
66 <div class="code-header">
67 <div title="Go back to changed files overview">
67 <div title="Go back to changed files overview">
68 <a href="#changes_box">
68 <a href="#changes_box">
69 <i class="icon-circle-arrow-up"></i>
69 <i class="icon-circle-arrow-up"></i>
70 </a>
70 </a>
71 </div>
71 </div>
72 <div class="changeset_header">
72 <div class="changeset_header">
73 <div class="changeset_file">
73 <div class="changeset_file">
74 <i class="icon-file"></i>
74 <i class="icon-file"></i>
75 <a href="/example/files/e589e34d6be8ec2b44017f6c2e0bbe782f1aba6d/rhodecode/public/css/code-block.less">rhodecode/public/css/code-block.less</a>
75 <a href="/example/files/e589e34d6be8ec2b44017f6c2e0bbe782f1aba6d/rhodecode/public/css/code-block.less">rhodecode/public/css/code-block.less</a>
76 </div>
76 </div>
77 <div class="diff-actions">
77 <div class="diff-actions">
78 <a href="/example/diff/rhodecode/public/css/code-block.less?fulldiff=1&amp;diff1=d12301bafcc0aea15c9283d3af018daee2b04cd9&amp;diff=diff&amp;diff2=e589e34d6be8ec2b44017f6c2e0bbe782f1aba6d" class="tooltip" title="Show full diff for this file">
78 <a href="/example/diff/rhodecode/public/css/code-block.less?fulldiff=1&amp;diff1=d12301bafcc0aea15c9283d3af018daee2b04cd9&amp;diff=diff&amp;diff2=e589e34d6be8ec2b44017f6c2e0bbe782f1aba6d" class="tooltip" title="Show full diff for this file">
79 <img class="icon" src="/images/icons/page_white_go.png">
79 <img class="icon" src="/images/icons/page_white_go.png">
80 </a>
80 </a>
81 <a href="/example/diff-2way/rhodecode/public/css/code-block.less?fulldiff=1&amp;diff1=d12301bafcc0aea15c9283d3af018daee2b04cd9&amp;diff=diff&amp;diff2=e589e34d6be8ec2b44017f6c2e0bbe782f1aba6d" class="tooltip" title="Show full side-by-side diff for this file">
81 <a href="/example/diff-2way/rhodecode/public/css/code-block.less?fulldiff=1&amp;diff1=d12301bafcc0aea15c9283d3af018daee2b04cd9&amp;diff=diff&amp;diff2=e589e34d6be8ec2b44017f6c2e0bbe782f1aba6d" class="tooltip" title="Show full side-by-side diff for this file">
82 <img class="icon" src="/images/icons/application_double.png">
82 <img class="icon" src="/images/icons/application_double.png">
83 </a>
83 </a>
84 <a href="/example/diff/rhodecode/public/css/code-block.less?diff1=d12301bafcc0aea15c9283d3af018daee2b04cd9&amp;diff=raw&amp;diff2=e589e34d6be8ec2b44017f6c2e0bbe782f1aba6d" class="tooltip" title="Raw diff" tt_title="Raw diff">
84 <a href="/example/diff/rhodecode/public/css/code-block.less?diff1=d12301bafcc0aea15c9283d3af018daee2b04cd9&amp;diff=raw&amp;diff2=e589e34d6be8ec2b44017f6c2e0bbe782f1aba6d" class="tooltip" title="Raw diff" tt_title="Raw diff">
85 <img class="icon" src="/images/icons/page_white.png">
85 <img class="icon" src="/images/icons/page_white.png">
86 </a>
86 </a>
87 <a href="/example/diff/rhodecode/public/css/code-block.less?diff1=d12301bafcc0aea15c9283d3af018daee2b04cd9&amp;diff=download&amp;diff2=e589e34d6be8ec2b44017f6c2e0bbe782f1aba6d" class="tooltip" title="Download diff">
87 <a href="/example/diff/rhodecode/public/css/code-block.less?diff1=d12301bafcc0aea15c9283d3af018daee2b04cd9&amp;diff=download&amp;diff2=e589e34d6be8ec2b44017f6c2e0bbe782f1aba6d" class="tooltip" title="Download diff">
88 <img class="icon" src="/images/icons/page_save.png">
88 <img class="icon" src="/images/icons/page_save.png">
89 </a>
89 </a>
90 <a class="tooltip" href="/example/changeset/d12301bafcc0aea15c9283d3af018daee2b04cd9...80ead1899f50a894889e19ffeb49c9cebf5bf045?c-e589e34d6be8-5ab783e6d81b=WS%3A1&amp;c-e589e34d6be8-5ab783e6d81b=C%3A3#c-e589e34d6be8-5ab783e6d81b" title="Ignore white space"><img alt="Ignore white space" class="icon" src="/images/icons/text_strikethrough.png"></a>
90 <a class="tooltip" href="/example/changeset/d12301bafcc0aea15c9283d3af018daee2b04cd9...80ead1899f50a894889e19ffeb49c9cebf5bf045?c-e589e34d6be8-5ab783e6d81b=WS%3A1&amp;c-e589e34d6be8-5ab783e6d81b=C%3A3#c-e589e34d6be8-5ab783e6d81b" title="Ignore white space"><img alt="Ignore white space" class="icon" src="/images/icons/text_strikethrough.png"></a>
91 <a class="tooltip" href="/example/changeset/d12301bafcc0aea15c9283d3af018daee2b04cd9...80ead1899f50a894889e19ffeb49c9cebf5bf045?c-e589e34d6be8-5ab783e6d81b=C%3A6#c-e589e34d6be8-5ab783e6d81b" title="increase diff context to 6 lines"><img alt="increase diff context to 6 lines" class="icon" src="/images/icons/table_add.png"></a>
91 <a class="tooltip" href="/example/changeset/d12301bafcc0aea15c9283d3af018daee2b04cd9...80ead1899f50a894889e19ffeb49c9cebf5bf045?c-e589e34d6be8-5ab783e6d81b=C%3A6#c-e589e34d6be8-5ab783e6d81b" title="increase diff context to 6 lines"><img alt="increase diff context to 6 lines" class="icon" src="/images/icons/table_add.png"></a>
92 </div>
92 </div>
93 <span>
93 <span>
94 <label>
94 <label>
95 Show inline comments
95 Show inline comments
96 <input checked="checked" class="show-inline-comments" id="" id_for="c-e589e34d6be8-5ab783e6d81b" name="" type="checkbox" value="1">
96 <input checked="checked" class="show-inline-comments" id="" id_for="c-e589e34d6be8-5ab783e6d81b" name="" type="checkbox" value="1">
97 </label>
97 </label>
98 </span>
98 </span>
99 </div>
99 </div>
100 </div>
100 </div>
101 <div class="code-body">
101 <div class="code-body">
102 <div class="full_f_path" path="rhodecode/public/css/code-block.less"></div>
102 <div class="full_f_path" path="rhodecode/public/css/code-block.less"></div>
103 <table class="code-difftable">
103 <table class="code-difftable">
104 <tbody><tr class="line context">
104 <tbody><tr class="line context">
105 <td class="lineno old"><a href="#rhodecodepubliccsscode-blockless_o...">...</a></td>
105 <td class="lineno old"><a href="#rhodecodepubliccsscode-blockless_o...">...</a></td>
106 <td class="lineno new"><a href="#rhodecodepubliccsscode-blockless_n...">...</a></td>
106 <td class="lineno new"><a href="#rhodecodepubliccsscode-blockless_n...">...</a></td>
107 <td class="code no-comment">
107 <td class="code no-comment">
108 <pre>@@ -391,7 +391,7 @@
108 <pre>@@ -391,7 +391,7 @@
109 </pre>
109 </pre>
110 </td>
110 </td>
111 </tr>
111 </tr>
112 <tr class="line unmod">
112 <tr class="line unmod">
113 <td id="rhodecodepubliccsscode-blockless_o391" class="lineno old"><a href="#rhodecodepubliccsscode-blockless_o391">391</a></td>
113 <td id="rhodecodepubliccsscode-blockless_o391" class="lineno old"><a href="#rhodecodepubliccsscode-blockless_o391">391</a></td>
114 <td id="rhodecodepubliccsscode-blockless_n391" class="lineno new"><a href="#rhodecodepubliccsscode-blockless_n391">391</a></td>
114 <td id="rhodecodepubliccsscode-blockless_n391" class="lineno new"><a href="#rhodecodepubliccsscode-blockless_n391">391</a></td>
115 <td class="code no-comment">
115 <td class="code no-comment">
116 <pre>} /* Existing line, it might have a quite long content actually and in this case we might need some horizontal scrolling. The remaining text here is just used to make this line very long.
116 <pre>} /* Existing line, it might have a quite long content actually and in this case we might need some horizontal scrolling. The remaining text here is just used to make this line very long.
117 </pre>
117 </pre>
118 </td>
118 </td>
119 </tr>
119 </tr>
120 <tr class="line unmod">
120 <tr class="line unmod">
121 <td id="rhodecodepubliccsscode-blockless_o392" class="lineno old"><a href="#rhodecodepubliccsscode-blockless_o392">392</a></td>
121 <td id="rhodecodepubliccsscode-blockless_o392" class="lineno old"><a href="#rhodecodepubliccsscode-blockless_o392">392</a></td>
122 <td id="rhodecodepubliccsscode-blockless_n392" class="lineno new"><a href="#rhodecodepubliccsscode-blockless_n392">392</a></td>
122 <td id="rhodecodepubliccsscode-blockless_n392" class="lineno new"><a href="#rhodecodepubliccsscode-blockless_n392">392</a></td>
123 <td class="code no-comment">
123 <td class="code no-comment">
124 <pre></pre>
124 <pre></pre>
125 </td>
125 </td>
126 </tr>
126 </tr>
127 <tr class="line unmod">
127 <tr class="line unmod">
128 <td id="rhodecodepubliccsscode-blockless_o393" class="lineno old"><a href="#rhodecodepubliccsscode-blockless_o393">393</a></td>
128 <td id="rhodecodepubliccsscode-blockless_o393" class="lineno old"><a href="#rhodecodepubliccsscode-blockless_o393">393</a></td>
129 <td id="rhodecodepubliccsscode-blockless_n393" class="lineno new"><a href="#rhodecodepubliccsscode-blockless_n393">393</a></td>
129 <td id="rhodecodepubliccsscode-blockless_n393" class="lineno new"><a href="#rhodecodepubliccsscode-blockless_n393">393</a></td>
130 <td class="code no-comment">
130 <td class="code no-comment">
131 <pre>.code-body.textarea.editor,
131 <pre>.code-body.textarea.editor,
132 </pre>
132 </pre>
133 </td>
133 </td>
134 </tr>
134 </tr>
135 <tr class="line del">
135 <tr class="line del">
136 <td id="rhodecodepubliccsscode-blockless_o394" class="lineno old"><a href="#rhodecodepubliccsscode-blockless_o394">394</a></td>
136 <td id="rhodecodepubliccsscode-blockless_o394" class="lineno old"><a href="#rhodecodepubliccsscode-blockless_o394">394</a></td>
137 <td class="lineno new"><a href="#rhodecodepubliccsscode-blockless_n"></a></td>
137 <td class="lineno new"><a href="#rhodecodepubliccsscode-blockless_n"></a></td>
138 <td class="code no-comment">
138 <td class="code no-comment">
139 <pre>div.code-body{
139 <pre>div.code-body{
140 </pre>
140 </pre>
141 </td>
141 </td>
142 </tr>
142 </tr>
143 <tr class="line add">
143 <tr class="line add">
144 <td class="lineno old"><a href="#rhodecodepubliccsscode-blockless_o"></a></td>
144 <td class="lineno old"><a href="#rhodecodepubliccsscode-blockless_o"></a></td>
145 <td id="rhodecodepubliccsscode-blockless_n394" class="lineno new"><a href="#rhodecodepubliccsscode-blockless_n394">394</a></td>
145 <td id="rhodecodepubliccsscode-blockless_n394" class="lineno new"><a href="#rhodecodepubliccsscode-blockless_n394">394</a></td>
146 <td class="code no-comment">
146 <td class="code no-comment">
147 <pre>div.code-body<ins> </ins>{
147 <pre>div.code-body<ins> </ins>{
148 </pre>
148 </pre>
149 </td>
149 </td>
150 </tr>
150 </tr>
151 <tr class="line unmod">
151 <tr class="line unmod">
152 <td id="rhodecodepubliccsscode-blockless_o395" class="lineno old"><a href="#rhodecodepubliccsscode-blockless_o395">395</a></td>
152 <td id="rhodecodepubliccsscode-blockless_o395" class="lineno old"><a href="#rhodecodepubliccsscode-blockless_o395">395</a></td>
153 <td id="rhodecodepubliccsscode-blockless_n395" class="lineno new"><a href="#rhodecodepubliccsscode-blockless_n395">395</a></td>
153 <td id="rhodecodepubliccsscode-blockless_n395" class="lineno new"><a href="#rhodecodepubliccsscode-blockless_n395">395</a></td>
154 <td class="code no-comment">
154 <td class="code no-comment">
155 <pre> float: left;
155 <pre> float: left;
156 </pre>
156 </pre>
157 </td>
157 </td>
158 </tr>
158 </tr>
159 <tr class="line unmod">
159 <tr class="line unmod">
160 <td id="rhodecodepubliccsscode-blockless_o396" class="lineno old"><a href="#rhodecodepubliccsscode-blockless_o396">396</a></td>
160 <td id="rhodecodepubliccsscode-blockless_o396" class="lineno old"><a href="#rhodecodepubliccsscode-blockless_o396">396</a></td>
161 <td id="rhodecodepubliccsscode-blockless_n396" class="lineno new"><a href="#rhodecodepubliccsscode-blockless_n396">396</a></td>
161 <td id="rhodecodepubliccsscode-blockless_n396" class="lineno new"><a href="#rhodecodepubliccsscode-blockless_n396">396</a></td>
162 <td class="code no-comment">
162 <td class="code no-comment">
163 <pre> position: relative;
163 <pre> position: relative;
164 </pre>
164 </pre>
165 </td>
165 </td>
166 </tr>
166 </tr>
167 <tr class="line unmod">
167 <tr class="line unmod">
168 <td id="rhodecodepubliccsscode-blockless_o397" class="lineno old"><a href="#rhodecodepubliccsscode-blockless_o397">397</a></td>
168 <td id="rhodecodepubliccsscode-blockless_o397" class="lineno old"><a href="#rhodecodepubliccsscode-blockless_o397">397</a></td>
169 <td id="rhodecodepubliccsscode-blockless_n397" class="lineno new"><a href="#rhodecodepubliccsscode-blockless_n397">397</a></td>
169 <td id="rhodecodepubliccsscode-blockless_n397" class="lineno new"><a href="#rhodecodepubliccsscode-blockless_n397">397</a></td>
170 <td class="code no-comment">
170 <td class="code no-comment">
171 <pre> max-width: none;
171 <pre> max-width: none;
172 </pre>
172 </pre>
173 </td>
173 </td>
174 </tr>
174 </tr>
175 <tr class="line context">
175 <tr class="line context">
176 <td class="lineno old"><a href="#rhodecodepubliccsscode-blockless_o...">...</a></td>
176 <td class="lineno old"><a href="#rhodecodepubliccsscode-blockless_o...">...</a></td>
177 <td class="lineno new"><a href="#rhodecodepubliccsscode-blockless_n...">...</a></td>
177 <td class="lineno new"><a href="#rhodecodepubliccsscode-blockless_n...">...</a></td>
178 <td class="code no-comment">
178 <td class="code no-comment">
179 <pre>@@ -399,3 +399,6 @@
179 <pre>@@ -399,3 +399,6 @@
180 </pre>
180 </pre>
181 </td>
181 </td>
182 </tr>
182 </tr>
183 <tr class="line unmod">
183 <tr class="line unmod">
184 <td id="rhodecodepubliccsscode-blockless_o399" class="lineno old"><a href="#rhodecodepubliccsscode-blockless_o399">399</a></td>
184 <td id="rhodecodepubliccsscode-blockless_o399" class="lineno old"><a href="#rhodecodepubliccsscode-blockless_o399">399</a></td>
185 <td id="rhodecodepubliccsscode-blockless_n399" class="lineno new"><a href="#rhodecodepubliccsscode-blockless_n399">399</a></td>
185 <td id="rhodecodepubliccsscode-blockless_n399" class="lineno new"><a href="#rhodecodepubliccsscode-blockless_n399">399</a></td>
186 <td class="code no-comment">
186 <td class="code no-comment">
187 <pre> box-sizing: border-box;
187 <pre> box-sizing: border-box;
188 </pre>
188 </pre>
189 </td>
189 </td>
190 </tr>
190 </tr>
191 <tr class="line unmod">
191 <tr class="line unmod">
192 <td id="rhodecodepubliccsscode-blockless_o400" class="lineno old"><a href="#rhodecodepubliccsscode-blockless_o400">400</a></td>
192 <td id="rhodecodepubliccsscode-blockless_o400" class="lineno old"><a href="#rhodecodepubliccsscode-blockless_o400">400</a></td>
193 <td id="rhodecodepubliccsscode-blockless_n400" class="lineno new"><a href="#rhodecodepubliccsscode-blockless_n400">400</a></td>
193 <td id="rhodecodepubliccsscode-blockless_n400" class="lineno new"><a href="#rhodecodepubliccsscode-blockless_n400">400</a></td>
194 <td class="code no-comment">
194 <td class="code no-comment">
195 <pre>}
195 <pre>}
196 </pre>
196 </pre>
197 </td>
197 </td>
198 </tr>
198 </tr>
199 <tr class="line unmod">
199 <tr class="line unmod">
200 <td id="rhodecodepubliccsscode-blockless_o401" class="lineno old"><a href="#rhodecodepubliccsscode-blockless_o401">401</a></td>
200 <td id="rhodecodepubliccsscode-blockless_o401" class="lineno old"><a href="#rhodecodepubliccsscode-blockless_o401">401</a></td>
201 <td id="rhodecodepubliccsscode-blockless_n401" class="lineno new"><a href="#rhodecodepubliccsscode-blockless_n401">401</a></td>
201 <td id="rhodecodepubliccsscode-blockless_n401" class="lineno new"><a href="#rhodecodepubliccsscode-blockless_n401">401</a></td>
202 <td class="code no-comment">
202 <td class="code no-comment">
203 <pre></pre>
203 <pre></pre>
204 </td>
204 </td>
205 </tr>
205 </tr>
206 <tr class="line add">
206 <tr class="line add">
207 <td class="lineno old"><a href="#rhodecodepubliccsscode-blockless_o"></a></td>
207 <td class="lineno old"><a href="#rhodecodepubliccsscode-blockless_o"></a></td>
208 <td id="rhodecodepubliccsscode-blockless_n402" class="lineno new"><a href="#rhodecodepubliccsscode-blockless_n402">402</a></td>
208 <td id="rhodecodepubliccsscode-blockless_n402" class="lineno new"><a href="#rhodecodepubliccsscode-blockless_n402">402</a></td>
209 <td class="code no-comment">
209 <td class="code no-comment">
210 <pre>.code-body td{
210 <pre>.code-body td{
211 </pre>
211 </pre>
212 </td>
212 </td>
213 </tr>
213 </tr>
214 <tr class="line add">
214 <tr class="line add">
215 <td class="lineno old"><a href="#rhodecodepubliccsscode-blockless_o"></a></td>
215 <td class="lineno old"><a href="#rhodecodepubliccsscode-blockless_o"></a></td>
216 <td id="rhodecodepubliccsscode-blockless_n403" class="lineno new"><a href="#rhodecodepubliccsscode-blockless_n403">403</a></td>
216 <td id="rhodecodepubliccsscode-blockless_n403" class="lineno new"><a href="#rhodecodepubliccsscode-blockless_n403">403</a></td>
217 <td class="code no-comment">
217 <td class="code no-comment">
218 <pre> line-height: 1.2em;
218 <pre> line-height: 1.2em;
219 </pre>
219 </pre>
220 </td>
220 </td>
221 </tr>
221 </tr>
222 <tr class="line add">
222 <tr class="line add">
223 <td class="lineno old"><a href="#rhodecodepubliccsscode-blockless_o"></a></td>
223 <td class="lineno old"><a href="#rhodecodepubliccsscode-blockless_o"></a></td>
224 <td id="rhodecodepubliccsscode-blockless_n404" class="lineno new"><a href="#rhodecodepubliccsscode-blockless_n404">404</a></td>
224 <td id="rhodecodepubliccsscode-blockless_n404" class="lineno new"><a href="#rhodecodepubliccsscode-blockless_n404">404</a></td>
225 <td class="code no-comment">
225 <td class="code no-comment">
226 <pre>}
226 <pre>}
227 </pre>
227 </pre>
228 </td>
228 </td>
229 </tr>
229 </tr>
230 <tr class="line context">
230 <tr class="line context">
231 <td class="lineno old"><a href="#rhodecodepubliccsscode-blockless_o...">...</a></td>
231 <td class="lineno old"><a href="#rhodecodepubliccsscode-blockless_o...">...</a></td>
232 <td class="lineno new"><a href="#rhodecodepubliccsscode-blockless_n...">...</a></td>
232 <td class="lineno new"><a href="#rhodecodepubliccsscode-blockless_n...">...</a></td>
233 <td class="code no-comment">
233 <td class="code no-comment">
234 <pre> No newline at end of file
234 <pre> No newline at end of file
235 </pre>
235 </pre>
236 </td>
236 </td>
237 </tr>
237 </tr>
238 </tbody></table>
238 </tbody></table>
239 </div>
239 </div>
240 </div>
240 </div>
241
241
242
242
243
243
244
244
245
245
246
246
247 <!--
247 <!--
248 Pull Request
248 Pull Request
249 -->
249 -->
250
250
251 <h2>Pull Request</h2>
251 <h2>Pull Request</h2>
252
252
253 <div class="cs_files">
253 <div class="cs_files">
254 <table class="compare_view_files">
254 <table class="compare_view_files">
255
255
256 <tbody><tr class="cs_M collapse_file" fid="c--5f1d017cf13b">
256 <tbody><tr class="cs_M collapse_file" fid="c--5f1d017cf13b">
257 <td class="cs_icon_td">
257 <td class="cs_icon_td">
258 <span class="collapse_file_icon" fid="c--5f1d017cf13b"></span>
258 <span class="collapse_file_icon" fid="c--5f1d017cf13b"></span>
259 </td>
259 </td>
260 <td class="cs_icon_td">
260 <td class="cs_icon_td">
261 <div class="flag_status not_reviewed hidden"></div>
261 <div class="flag_status not_reviewed hidden"></div>
262 </td>
262 </td>
263 <td id="a_c--5f1d017cf13b">
263 <td id="a_c--5f1d017cf13b">
264 <a class="compare_view_filepath" href="#a_c--5f1d017cf13b">
264 <a class="compare_view_filepath" href="#a_c--5f1d017cf13b">
265 rhodecode/public/css/main.less
265 rhodecode/public/css/main.less
266 </a>
266 </a>
267 <span id="diff_c--5f1d017cf13b" class="diff_links" style="">
267 <span id="diff_c--5f1d017cf13b" class="diff_links" style="">
268 <a href="/example/diff/rhodecode/public/css/main.less?fulldiff=1&amp;diff1=f73e9946825c8a7ef2c1178cd1e67986d5831f8f&amp;diff=diff&amp;diff2=27eb56cf467ca849112536d62decb2ed020b3ebc">
268 <a href="/example/diff/rhodecode/public/css/main.less?fulldiff=1&amp;diff1=f73e9946825c8a7ef2c1178cd1e67986d5831f8f&amp;diff=diff&amp;diff2=27eb56cf467ca849112536d62decb2ed020b3ebc">
269 Unified Diff
269 Unified Diff
270 </a>
270 </a>
271 |
271 |
272 <a href="/example/diff-2way/rhodecode/public/css/main.less?fulldiff=1&amp;diff1=f73e9946825c8a7ef2c1178cd1e67986d5831f8f&amp;diff=diff&amp;diff2=27eb56cf467ca849112536d62decb2ed020b3ebc">
272 <a href="/example/diff-2way/rhodecode/public/css/main.less?fulldiff=1&amp;diff1=f73e9946825c8a7ef2c1178cd1e67986d5831f8f&amp;diff=diff&amp;diff2=27eb56cf467ca849112536d62decb2ed020b3ebc">
273 Side-by-side Diff
273 Side-by-side Diff
274 </a>
274 </a>
275 </span>
275 </span>
276 </td>
276 </td>
277 <td>
277 <td>
278 <div class="changes pull-right"><div style="width:100px"><div class="added top-left-rounded-corner-mid bottom-left-rounded-corner-mid" style="width:33.3333333333%">1</div><div class="deleted top-right-rounded-corner-mid bottom-right-rounded-corner-mid" style="width:66.6666666667%">2</div></div></div>
278 <div class="changes pull-right"><div style="width:100px"><div class="added top-left-rounded-corner-mid bottom-left-rounded-corner-mid" style="width:33.3333333333%">1</div><div class="deleted top-right-rounded-corner-mid bottom-right-rounded-corner-mid" style="width:66.6666666667%">2</div></div></div>
279 <div class="comment-bubble pull-right" data-path="rhodecode/public/css/main.less">
279 <div class="comment-bubble pull-right" data-path="rhodecode/public/css/main.less">
280 <i class="icon-comment"></i>
280 <i class="icon-comment"></i>
281 </div>
281 </div>
282 </td>
282 </td>
283 </tr>
283 </tr>
284 <tr id="tr_c--5f1d017cf13b">
284 <tr id="tr_c--5f1d017cf13b">
285 <td></td>
285 <td></td>
286 <td></td>
286 <td></td>
287 <td class="injected_diff" colspan="2">
287 <td class="injected_diff" colspan="2">
288
288
289 <div class="diff-container" id="diff-container-140360026534904">
289 <div class="diff-container" id="diff-container-140360026534904">
290 <div id="c--5f1d017cf13b_target"></div>
290 <div id="c--5f1d017cf13b_target"></div>
291 <div id="c--5f1d017cf13b" class="diffblock margined comm">
291 <div id="c--5f1d017cf13b" class="diffblock margined comm">
292 <div class="code-body">
292 <div class="code-body">
293 <div class="full_f_path" path="rhodecode/public/css/main.less" style="display: none;"></div>
293 <div class="full_f_path" path="rhodecode/public/css/main.less" style="display: none;"></div>
294 <table class="code-difftable">
294 <table class="code-difftable">
295 <tbody><tr class="line context">
295 <tbody><tr class="line context">
296 <td class="lineno old"><a href="#rhodecodepubliccssmainless_o...">...</a></td>
296 <td class="lineno old"><a href="#rhodecodepubliccssmainless_o...">...</a></td>
297 <td class="lineno new"><a href="#rhodecodepubliccssmainless_n...">...</a></td>
297 <td class="lineno new"><a href="#rhodecodepubliccssmainless_n...">...</a></td>
298 <td class="code ">
298 <td class="code ">
299 <pre>@@ -2110,7 +2110,6 @@
299 <pre>@@ -2110,7 +2110,6 @@
300 </pre>
300 </pre>
301 </td>
301 </td>
302 </tr>
302 </tr>
303 <tr class="line unmod">
303 <tr class="line unmod">
304 <td id="rhodecodepubliccssmainless_o2110" class="lineno old"><a href="#rhodecodepubliccssmainless_o2110">2110</a></td>
304 <td id="rhodecodepubliccssmainless_o2110" class="lineno old"><a href="#rhodecodepubliccssmainless_o2110">2110</a></td>
305 <td id="rhodecodepubliccssmainless_n2110" class="lineno new"><a href="#rhodecodepubliccssmainless_n2110">2110</a></td>
305 <td id="rhodecodepubliccssmainless_n2110" class="lineno new"><a href="#rhodecodepubliccssmainless_n2110">2110</a></td>
306 <td class="code ">
306 <td class="code ">
307 <pre><span class="tab-escape"> </span>width: auto !important;
307 <pre><span class="tab-escape"> </span>width: auto !important;
308 </pre>
308 </pre>
309 </td>
309 </td>
310 </tr>
310 </tr>
311 <tr class="line unmod">
311 <tr class="line unmod">
312 <td id="rhodecodepubliccssmainless_o2111" class="lineno old"><a href="#rhodecodepubliccssmainless_o2111">2111</a></td>
312 <td id="rhodecodepubliccssmainless_o2111" class="lineno old"><a href="#rhodecodepubliccssmainless_o2111">2111</a></td>
313 <td id="rhodecodepubliccssmainless_n2111" class="lineno new"><a href="#rhodecodepubliccssmainless_n2111">2111</a></td>
313 <td id="rhodecodepubliccssmainless_n2111" class="lineno new"><a href="#rhodecodepubliccssmainless_n2111">2111</a></td>
314 <td class="code ">
314 <td class="code ">
315 <pre><span class="tab-escape"> </span>min-width: 160px;
315 <pre><span class="tab-escape"> </span>min-width: 160px;
316 </pre>
316 </pre>
317 </td>
317 </td>
318 </tr>
318 </tr>
319 <tr class="line unmod">
319 <tr class="line unmod">
320 <td id="rhodecodepubliccssmainless_o2112" class="lineno old"><a href="#rhodecodepubliccssmainless_o2112">2112</a></td>
320 <td id="rhodecodepubliccssmainless_o2112" class="lineno old"><a href="#rhodecodepubliccssmainless_o2112">2112</a></td>
321 <td id="rhodecodepubliccssmainless_n2112" class="lineno new"><a href="#rhodecodepubliccssmainless_n2112">2112</a></td>
321 <td id="rhodecodepubliccssmainless_n2112" class="lineno new"><a href="#rhodecodepubliccssmainless_n2112">2112</a></td>
322 <td class="code ">
322 <td class="code ">
323 <pre><span class="tab-escape"> </span>margin: @padding @padding @padding 0;
323 <pre><span class="tab-escape"> </span>margin: @padding @padding @padding 0;
324 </pre>
324 </pre>
325 </td>
325 </td>
326 </tr>
326 </tr>
327 <tr class="line del">
327 <tr class="line del">
328 <td id="rhodecodepubliccssmainless_o2113" class="lineno old"><a href="#rhodecodepubliccssmainless_o2113">2113</a></td>
328 <td id="rhodecodepubliccssmainless_o2113" class="lineno old"><a href="#rhodecodepubliccssmainless_o2113">2113</a></td>
329 <td class="lineno new"><a href="#rhodecodepubliccssmainless_n"></a></td>
329 <td class="lineno new"><a href="#rhodecodepubliccssmainless_n"></a></td>
330 <td class="code ">
330 <td class="code ">
331 <pre><span class="tab-escape"> </span>padding: .9em; /* Old comment which was making this line a very long line so that we might have to deal with it by either adding horizontal scrolling or some smart way of breaking this line. */
331 <pre><span class="tab-escape"> </span>padding: .9em; /* Old comment which was making this line a very long line so that we might have to deal with it by either adding horizontal scrolling or some smart way of breaking this line. */
332 </pre>
332 </pre>
333 </td>
333 </td>
334 </tr>
334 </tr>
335 <tr class="line unmod">
335 <tr class="line unmod">
336 <td id="rhodecodepubliccssmainless_o2114" class="lineno old"><a href="#rhodecodepubliccssmainless_o2114">2114</a></td>
336 <td id="rhodecodepubliccssmainless_o2114" class="lineno old"><a href="#rhodecodepubliccssmainless_o2114">2114</a></td>
337 <td id="rhodecodepubliccssmainless_n2113" class="lineno new"><a href="#rhodecodepubliccssmainless_n2113">2113</a></td>
337 <td id="rhodecodepubliccssmainless_n2113" class="lineno new"><a href="#rhodecodepubliccssmainless_n2113">2113</a></td>
338 <td class="code ">
338 <td class="code ">
339 <pre> line-height: 1em;
339 <pre> line-height: 1em;
340 </pre>
340 </pre>
341 </td>
341 </td>
342 </tr>
342 </tr>
343 <tr class="line unmod">
343 <tr class="line unmod">
344 <td id="rhodecodepubliccssmainless_o2115" class="lineno old"><a href="#rhodecodepubliccssmainless_o2115">2115</a></td>
344 <td id="rhodecodepubliccssmainless_o2115" class="lineno old"><a href="#rhodecodepubliccssmainless_o2115">2115</a></td>
345 <td id="rhodecodepubliccssmainless_n2114" class="lineno new"><a href="#rhodecodepubliccssmainless_n2114">2114</a></td>
345 <td id="rhodecodepubliccssmainless_n2114" class="lineno new"><a href="#rhodecodepubliccssmainless_n2114">2114</a></td>
346 <td class="code ">
346 <td class="code ">
347 <pre><span class="tab-escape"> </span>z-index: 100;//js sets the menu below it to 9999
347 <pre><span class="tab-escape"> </span>z-index: 100;//js sets the menu below it to 9999
348 </pre>
348 </pre>
349 </td>
349 </td>
350 </tr>
350 </tr>
351 <tr class="line unmod">
351 <tr class="line unmod">
352 <td id="rhodecodepubliccssmainless_o2116" class="lineno old"><a href="#rhodecodepubliccssmainless_o2116">2116</a></td>
352 <td id="rhodecodepubliccssmainless_o2116" class="lineno old"><a href="#rhodecodepubliccssmainless_o2116">2116</a></td>
353 <td id="rhodecodepubliccssmainless_n2115" class="lineno new"><a href="#rhodecodepubliccssmainless_n2115">2115</a></td>
353 <td id="rhodecodepubliccssmainless_n2115" class="lineno new"><a href="#rhodecodepubliccssmainless_n2115">2115</a></td>
354 <td class="code ">
354 <td class="code ">
355 <pre><span class="tab-escape"> </span>background-color: white;
355 <pre><span class="tab-escape"> </span>background-color: white;
356 </pre>
356 </pre>
357 </td>
357 </td>
358 </tr>
358 </tr>
359 <tr class="line context">
359 <tr class="line context">
360 <td class="lineno old"><a href="#rhodecodepubliccssmainless_o...">...</a></td>
360 <td class="lineno old"><a href="#rhodecodepubliccssmainless_o...">...</a></td>
361 <td class="lineno new"><a href="#rhodecodepubliccssmainless_n...">...</a></td>
361 <td class="lineno new"><a href="#rhodecodepubliccssmainless_n...">...</a></td>
362 <td class="code ">
362 <td class="code ">
363 <pre>@@ -2118,7 +2117,7 @@
363 <pre>@@ -2118,7 +2117,7 @@
364 </pre>
364 </pre>
365 </td>
365 </td>
366 </tr>
366 </tr>
367 <tr class="line unmod">
367 <tr class="line unmod">
368 <td id="rhodecodepubliccssmainless_o2118" class="lineno old"><a href="#rhodecodepubliccssmainless_o2118">2118</a></td>
368 <td id="rhodecodepubliccssmainless_o2118" class="lineno old"><a href="#rhodecodepubliccssmainless_o2118">2118</a></td>
369 <td id="rhodecodepubliccssmainless_n2117" class="lineno new"><a href="#rhodecodepubliccssmainless_n2117">2117</a></td>
369 <td id="rhodecodepubliccssmainless_n2117" class="lineno new"><a href="#rhodecodepubliccssmainless_n2117">2117</a></td>
370 <td class="code ">
370 <td class="code ">
371 <pre></pre>
371 <pre></pre>
372 </td>
372 </td>
373 </tr>
373 </tr>
374 <tr class="line unmod">
374 <tr class="line unmod">
375 <td id="rhodecodepubliccssmainless_o2119" class="lineno old"><a href="#rhodecodepubliccssmainless_o2119">2119</a></td>
375 <td id="rhodecodepubliccssmainless_o2119" class="lineno old"><a href="#rhodecodepubliccssmainless_o2119">2119</a></td>
376 <td id="rhodecodepubliccssmainless_n2118" class="lineno new"><a href="#rhodecodepubliccssmainless_n2118">2118</a></td>
376 <td id="rhodecodepubliccssmainless_n2118" class="lineno new"><a href="#rhodecodepubliccssmainless_n2118">2118</a></td>
377 <td class="code ">
377 <td class="code ">
378 <pre><span class="tab-escape"> </span>a {
378 <pre><span class="tab-escape"> </span>a {
379 </pre>
379 </pre>
380 </td>
380 </td>
381 </tr>
381 </tr>
382 <tr class="line unmod">
382 <tr class="line unmod">
383 <td id="rhodecodepubliccssmainless_o2120" class="lineno old"><a href="#rhodecodepubliccssmainless_o2120">2120</a></td>
383 <td id="rhodecodepubliccssmainless_o2120" class="lineno old"><a href="#rhodecodepubliccssmainless_o2120">2120</a></td>
384 <td id="rhodecodepubliccssmainless_n2119" class="lineno new"><a href="#rhodecodepubliccssmainless_n2119">2119</a></td>
384 <td id="rhodecodepubliccssmainless_n2119" class="lineno new"><a href="#rhodecodepubliccssmainless_n2119">2119</a></td>
385 <td class="code ">
385 <td class="code ">
386 <pre><span class="tab-escape"> </span><span class="tab-escape"> </span>display:block;
386 <pre><span class="tab-escape"> </span><span class="tab-escape"> </span>display:block;
387 </pre>
387 </pre>
388 </td>
388 </td>
389 </tr>
389 </tr>
390 <tr class="line del">
390 <tr class="line del">
391 <td id="rhodecodepubliccssmainless_o2121" class="lineno old"><a href="#rhodecodepubliccssmainless_o2121">2121</a></td>
391 <td id="rhodecodepubliccssmainless_o2121" class="lineno old"><a href="#rhodecodepubliccssmainless_o2121">2121</a></td>
392 <td class="lineno new"><a href="#rhodecodepubliccssmainless_n"></a></td>
392 <td class="lineno new"><a href="#rhodecodepubliccssmainless_n"></a></td>
393 <td class="code ">
393 <td class="code ">
394 <pre><span class="tab-escape"> </span><del><span< del=""> <del>class=</del><del>"tab-escape"</del><del>&gt; </del>padding: <del>0</del>;
394 <pre><span class="tab-escape"> </span><del><span< del=""> <del>class=</del><del>"tab-escape"</del><del>&gt; </del>padding: <del>0</del>;
395 </span<></del></pre>
395 </span<></del></pre>
396 </td>
396 </td>
397 </tr>
397 </tr>
398 <tr class="line add">
398 <tr class="line add">
399 <td class="lineno old"><a href="#rhodecodepubliccssmainless_o"></a></td>
399 <td class="lineno old"><a href="#rhodecodepubliccssmainless_o"></a></td>
400 <td id="rhodecodepubliccssmainless_n2120" class="lineno new"><a href="#rhodecodepubliccssmainless_n2120">2120</a></td>
400 <td id="rhodecodepubliccssmainless_n2120" class="lineno new"><a href="#rhodecodepubliccssmainless_n2120">2120</a></td>
401 <td class="code ">
401 <td class="code ">
402 <pre><span class="tab-escape"> </span><ins> </ins> <ins> </ins><ins> </ins>padding: <ins>.9em</ins>;
402 <pre><span class="tab-escape"> </span><ins> </ins> <ins> </ins><ins> </ins>padding: <ins>.9em</ins>;
403 </pre>
403 </pre>
404 </td>
404 </td>
405 </tr>
405 </tr>
406 <tr class="line unmod">
406 <tr class="line unmod">
407 <td id="rhodecodepubliccssmainless_o2122" class="lineno old"><a href="#rhodecodepubliccssmainless_o2122">2122</a></td>
407 <td id="rhodecodepubliccssmainless_o2122" class="lineno old"><a href="#rhodecodepubliccssmainless_o2122">2122</a></td>
408 <td id="rhodecodepubliccssmainless_n2121" class="lineno new"><a href="#rhodecodepubliccssmainless_n2121">2121</a></td>
408 <td id="rhodecodepubliccssmainless_n2121" class="lineno new"><a href="#rhodecodepubliccssmainless_n2121">2121</a></td>
409 <td class="code ">
409 <td class="code ">
410 <pre></pre>
410 <pre></pre>
411 </td>
411 </td>
412 </tr>
412 </tr>
413 <tr class="line unmod">
413 <tr class="line unmod">
414 <td id="rhodecodepubliccssmainless_o2123" class="lineno old"><a href="#rhodecodepubliccssmainless_o2123">2123</a></td>
414 <td id="rhodecodepubliccssmainless_o2123" class="lineno old"><a href="#rhodecodepubliccssmainless_o2123">2123</a></td>
415 <td id="rhodecodepubliccssmainless_n2122" class="lineno new"><a href="#rhodecodepubliccssmainless_n2122">2122</a></td>
415 <td id="rhodecodepubliccssmainless_n2122" class="lineno new"><a href="#rhodecodepubliccssmainless_n2122">2122</a></td>
416 <td class="code ">
416 <td class="code ">
417 <pre><span class="tab-escape"> </span><span class="tab-escape"> </span>&amp;:after {
417 <pre><span class="tab-escape"> </span><span class="tab-escape"> </span>&amp;:after {
418 </pre>
418 </pre>
419 </td>
419 </td>
420 </tr>
420 </tr>
421 <tr class="line unmod">
421 <tr class="line unmod">
422 <td id="rhodecodepubliccssmainless_o2124" class="lineno old"><a href="#rhodecodepubliccssmainless_o2124">2124</a></td>
422 <td id="rhodecodepubliccssmainless_o2124" class="lineno old"><a href="#rhodecodepubliccssmainless_o2124">2124</a></td>
423 <td id="rhodecodepubliccssmainless_n2123" class="lineno new"><a href="#rhodecodepubliccssmainless_n2123">2123</a></td>
423 <td id="rhodecodepubliccssmainless_n2123" class="lineno new"><a href="#rhodecodepubliccssmainless_n2123">2123</a></td>
424 <td class="code ">
424 <td class="code ">
425 <pre><span class="tab-escape"> </span><span class="tab-escape"> </span><span class="tab-escape"> </span>content: "\00A0\25BE";
425 <pre><span class="tab-escape"> </span><span class="tab-escape"> </span><span class="tab-escape"> </span>content: "\00A0\25BE";
426 </pre>
426 </pre>
427 </td>
427 </td>
428 </tr>
428 </tr>
429 </tbody></table>
429 </tbody></table>
430 </div>
430 </div>
431 </div>
431 </div>
432 </div>
432 </div>
433
433
434 </td>
434 </td>
435 </tr>
435 </tr>
436 </tbody></table>
436 </tbody></table>
437 </div>
437 </div>
438
438
439
439
440
440
441
441
442
442
443
443
444
444
445
445
446
446
447 <!--
447 <!--
448 File View
448 File View
449 -->
449 -->
450
450
451 ##TODO: lisa: I believe this needs to be updated as the layout has changed.
451 ##TODO: lisa: I believe this needs to be updated as the layout has changed.
452 <h2>File View</h2>
452 <h2>File View</h2>
453
453
454 <div class="codeblock">
454 <div class="codeblock">
455 <div class="code-header">
455 <div class="code-header">
456 <div class="stats">
456 <div class="stats">
457 <div class="img">
457 <div class="img">
458 <i class="icon-file"></i>
458 <i class="icon-file"></i>
459 <span class="revision_id item"><a href="/example/changeset/fc252256eb0fcb4f2613e66f0126ea27967ae28c">r5487:fc252256eb0f</a></span>
459 <span class="revision_id item"><a href="/example/changeset/fc252256eb0fcb4f2613e66f0126ea27967ae28c">r5487:fc252256eb0f</a></span>
460 <span>1.2 KiB</span>
460 <span>1.2 KiB</span>
461 <span class="item last">text/x-python</span>
461 <span class="item last">text/x-python</span>
462 <div class="buttons">
462 <div class="buttons">
463
463
464 <a id="file_history_overview" class="btn btn-mini" href="#">
464 <a id="file_history_overview" class="btn btn-mini" href="#">
465 <i class="icon-time"></i> history
465 <i class="icon-time"></i> history
466 </a>
466 </a>
467 <a id="file_history_overview_full" class="btn btn-mini" style="display: none" href="/example/changelog/fc252256eb0fcb4f2613e66f0126ea27967ae28c/rhodecode/websetup.py">
467 <a id="file_history_overview_full" class="btn btn-mini" style="display: none" href="/example/changelog/fc252256eb0fcb4f2613e66f0126ea27967ae28c/rhodecode/websetup.py">
468 <i class="icon-time"></i> show full history
468 <i class="icon-time"></i> show full history
469 </a>
469 </a>
470 <a class="btn btn-mini" href="/example/annotate/fc252256eb0fcb4f2613e66f0126ea27967ae28c/rhodecode/websetup.py">annotation</a>
470 <a class="btn btn-mini" href="/example/annotate/fc252256eb0fcb4f2613e66f0126ea27967ae28c/rhodecode/websetup.py">annotation</a>
471 <a class="btn btn-mini" href="/example/raw/fc252256eb0fcb4f2613e66f0126ea27967ae28c/rhodecode/websetup.py">raw</a>
471 <a class="btn btn-mini" href="/example/raw/fc252256eb0fcb4f2613e66f0126ea27967ae28c/rhodecode/websetup.py">raw</a>
472 <a class="btn btn-mini" href="/example/rawfile/fc252256eb0fcb4f2613e66f0126ea27967ae28c/rhodecode/websetup.py">
472 <a class="btn btn-mini" href="/example/rawfile/fc252256eb0fcb4f2613e66f0126ea27967ae28c/rhodecode/websetup.py">
473 <i class="icon-archive"></i> download
473 <i class="icon-archive"></i> download
474 </a>
474 </a>
475
475
476 <a class="btn btn-mini disabled tooltip" href="#" title="Editing files allowed only when on branch head commit">edit</a>
476 <a class="btn btn-mini disabled tooltip" href="#" title="Editing files allowed only when on branch head commit">edit</a>
477 <a class="btn btn-mini btn-danger disabled tooltip" href="#" title="Deleting files allowed only when on branch head commit">delete</a>
477 <a class="btn btn-mini btn-danger disabled tooltip" href="#" title="Deleting files allowed only when on branch head commit">delete</a>
478 </div>
478 </div>
479 </div>
479 </div>
480 </div>
480 </div>
481 <div id="file_history_container"></div>
481 <div id="file_history_container"></div>
482 <div class="author">
482 <div class="author">
483 <div class="gravatar">
483 <div class="gravatar">
484 <img alt="gravatar" src="https://secure.gravatar.com/avatar/99e27b99c64003ca8c9875c9e3843495?d=identicon&amp;s=32" height="16" width="16">
484 <img alt="gravatar" src="https://secure.gravatar.com/avatar/99e27b99c64003ca8c9875c9e3843495?d=identicon&amp;s=32" height="16" width="16">
485 </div>
485 </div>
486 <div title="Marcin Kuzminski <marcin@python-works.com>" class="user">Marcin Kuzminski - <span class="tooltip" title="Wed, 02 Jul 2014 08:48:15">6m and 12d ago</span></div>
486 <div title="Marcin Kuzminski <marcin@python-works.com>" class="user">Marcin Kuzminski - <span class="tooltip" title="Wed, 02 Jul 2014 08:48:15">6m and 12d ago</span></div>
487 </div>
487 </div>
488 <div id="trimmed_message_box" class="commit">License changes</div>
488 <div id="trimmed_message_box" class="commit">License changes</div>
489 <div id="message_expand" style="display: none;">
489 <div id="message_expand" style="display: none;">
490 <i class="icon-resize-vertical"></i>
490 <i class="icon-resize-vertical"></i>
491 expand
491 expand
492 <i class="icon-resize-vertical"></i>
492 <i class="icon-resize-vertical"></i>
493 </div>
493 </div>
494 </div>
494 </div>
495 <div class="code-body">
495 <div class="code-body">
496 <table class="code-highlighttable"><tbody><tr><td class="linenos"><div class="linenodiv"><pre><a href="#L1"> 1</a>
496 <table class="code-highlighttable"><tbody><tr><td class="linenos"><div class="linenodiv"><pre><a href="#L1"> 1</a>
497 <a href="#L2"> 2</a>
497 <a href="#L2"> 2</a>
498 <a href="#L3"> 3</a>
498 <a href="#L3"> 3</a>
499 <a href="#L4"> 4</a>
499 <a href="#L4"> 4</a>
500 <a href="#L5"> 5</a>
500 <a href="#L5"> 5</a>
501 <a href="#L6"> 6</a>
501 <a href="#L6"> 6</a>
502 <a href="#L7"> 7</a>
502 <a href="#L7"> 7</a>
503 <a href="#L8"> 8</a>
503 <a href="#L8"> 8</a>
504 <a href="#L9"> 9</a>
504 <a href="#L9"> 9</a>
505 <a href="#L10">10</a>
505 <a href="#L10">10</a>
506 <a href="#L11">11</a>
506 <a href="#L11">11</a>
507 <a href="#L12">12</a>
507 <a href="#L12">12</a>
508 <a href="#L13">13</a>
508 <a href="#L13">13</a>
509 <a href="#L14">14</a>
509 <a href="#L14">14</a>
510 <a href="#L15">15</a>
510 <a href="#L15">15</a>
511 <a href="#L16">16</a>
511 <a href="#L16">16</a>
512 <a href="#L17">17</a>
512 <a href="#L17">17</a>
513 <a href="#L18">18</a>
513 <a href="#L18">18</a>
514 <a href="#L19">19</a>
514 <a href="#L19">19</a>
515 <a href="#L20">20</a>
515 <a href="#L20">20</a>
516 <a href="#L21">21</a>
516 <a href="#L21">21</a>
517 <a href="#L22">22</a>
517 <a href="#L22">22</a>
518 <a href="#L23">23</a>
518 <a href="#L23">23</a>
519 <a href="#L24">24</a>
519 <a href="#L24">24</a>
520 <a href="#L25">25</a>
520 <a href="#L25">25</a>
521 <a href="#L26">26</a>
521 <a href="#L26">26</a>
522 <a href="#L27">27</a>
522 <a href="#L27">27</a>
523 <a href="#L28">28</a>
523 <a href="#L28">28</a>
524 <a href="#L29">29</a>
524 <a href="#L29">29</a>
525 <a href="#L30">30</a>
525 <a href="#L30">30</a>
526 <a href="#L31">31</a>
526 <a href="#L31">31</a>
527 <a href="#L32">32</a>
527 <a href="#L32">32</a>
528 <a href="#L33">33</a>
528 <a href="#L33">33</a>
529 <a href="#L34">34</a>
529 <a href="#L34">34</a>
530 <a href="#L35">35</a>
530 <a href="#L35">35</a>
531 <a href="#L36">36</a>
531 <a href="#L36">36</a>
532 <a href="#L37">37</a>
532 <a href="#L37">37</a>
533 <a href="#L38">38</a>
533 <a href="#L38">38</a>
534 <a href="#L39">39</a>
534 <a href="#L39">39</a>
535 <a href="#L40">40</a>
535 <a href="#L40">40</a>
536 <a href="#L41">41</a>
536 <a href="#L41">41</a>
537 <a href="#L42">42</a></pre></div></td><td id="hlcode" class="code"><div class="code-highlight"><pre><div id="L1"><a name="L-1"></a><span class="c"># -*- coding: utf-8 -*-</span>
537 <a href="#L42">42</a></pre></div></td><td id="hlcode" class="code"><div class="code-highlight"><pre><div id="L1"><a name="L-1"></a><span class="c"># -*- coding: utf-8 -*-</span>
538 </div><div id="L2"><a name="L-2"></a>
538 </div><div id="L2"><a name="L-2"></a>
539 </div><div id="L3"><a name="L-3"></a><span class="c"># Published under Business Source License.</span>
539 </div><div id="L3"><a name="L-3"></a><span class="c"># Published under Business Source License.</span>
540 </div><div id="L4"><a name="L-4"></a><span class="c"># Read the full license text at https://rhodecode.com/licenses.</span>
540 </div><div id="L4"><a name="L-4"></a><span class="c"># Read the full license text at https://rhodecode.com/licenses.</span>
541 </div><div id="L5"><a name="L-5"></a><span class="sd">"""</span>
541 </div><div id="L5"><a name="L-5"></a><span class="sd">"""</span>
542 </div><div id="L6"><a name="L-6"></a><span class="sd">rhodecode.websetup</span>
542 </div><div id="L6"><a name="L-6"></a><span class="sd">rhodecode.websetup</span>
543 </div><div id="L7"><a name="L-7"></a><span class="sd">~~~~~~~~~~~~~~~~~~</span>
543 </div><div id="L7"><a name="L-7"></a><span class="sd">~~~~~~~~~~~~~~~~~~</span>
544 </div><div id="L8"><a name="L-8"></a>
544 </div><div id="L8"><a name="L-8"></a>
545 </div><div id="L9"><a name="L-9"></a><span class="sd">Weboperations and setup for rhodecode. Intentionally long line to show what will happen if this line does not fit onto the screen. It might have some horizontal scrolling applied or some other fancy mechanism to deal with it.</span>
545 </div><div id="L9"><a name="L-9"></a><span class="sd">Weboperations and setup for rhodecode. Intentionally long line to show what will happen if this line does not fit onto the screen. It might have some horizontal scrolling applied or some other fancy mechanism to deal with it.</span>
546 </div><div id="L10"><a name="L-10"></a>
546 </div><div id="L10"><a name="L-10"></a>
547 </div><div id="L11"><a name="L-11"></a><span class="sd">:created_on: Dec 11, 2010</span>
547 </div><div id="L11"><a name="L-11"></a><span class="sd">:created_on: Dec 11, 2010</span>
548 </div><div id="L12"><a name="L-12"></a><span class="sd">:author: marcink</span>
548 </div><div id="L12"><a name="L-12"></a><span class="sd">:author: marcink</span>
549 </div><div id="L13"><a name="L-13"></a><span class="sd">:copyright: (c) 2013-2015 RhodeCode GmbH.</span>
549 </div><div id="L13"><a name="L-13"></a><span class="sd">:copyright: (c) 2013-2015 RhodeCode GmbH.</span>
550 </div><div id="L14"><a name="L-14"></a><span class="sd">:license: Business Source License, see LICENSE for more details.</span>
550 </div><div id="L14"><a name="L-14"></a><span class="sd">:license: Business Source License, see LICENSE for more details.</span>
551 </div><div id="L15"><a name="L-15"></a><span class="sd">"""</span>
551 </div><div id="L15"><a name="L-15"></a><span class="sd">"""</span>
552 </div><div id="L16"><a name="L-16"></a>
552 </div><div id="L16"><a name="L-16"></a>
553 </div><div id="L17"><a name="L-17"></a><span class="kn">import</span> <span class="nn">logging</span>
553 </div><div id="L17"><a name="L-17"></a><span class="kn">import</span> <span class="nn">logging</span>
554 </div><div id="L18"><a name="L-18"></a>
554 </div><div id="L18"><a name="L-18"></a>
555 </div><div id="L19"><a name="L-19"></a><span class="kn">from</span> <span class="nn">rhodecode.config.environment</span> <span class="kn">import</span> <span class="n">load_environment</span>
555 </div><div id="L19"><a name="L-19"></a><span class="kn">from</span> <span class="nn">rhodecode.config.environment</span> <span class="kn">import</span> <span class="n">load_environment</span>
556 </div><div id="L20"><a name="L-20"></a><span class="kn">from</span> <span class="nn">rhodecode.lib.db_manage</span> <span class="kn">import</span> <span class="n">DbManage</span>
556 </div><div id="L20"><a name="L-20"></a><span class="kn">from</span> <span class="nn">rhodecode.lib.db_manage</span> <span class="kn">import</span> <span class="n">DbManage</span>
557 </div><div id="L21"><a name="L-21"></a><span class="kn">from</span> <span class="nn">rhodecode.model.meta</span> <span class="kn">import</span> <span class="n">Session</span>
557 </div><div id="L21"><a name="L-21"></a><span class="kn">from</span> <span class="nn">rhodecode.model.meta</span> <span class="kn">import</span> <span class="n">Session</span>
558 </div><div id="L22"><a name="L-22"></a>
558 </div><div id="L22"><a name="L-22"></a>
559 </div><div id="L23"><a name="L-23"></a>
559 </div><div id="L23"><a name="L-23"></a>
560 </div><div id="L24"><a name="L-24"></a><span class="n">log</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="n">__name__</span><span class="p">)</span>
560 </div><div id="L24"><a name="L-24"></a><span class="n">log</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="n">__name__</span><span class="p">)</span>
561 </div><div id="L25"><a name="L-25"></a>
561 </div><div id="L25"><a name="L-25"></a>
562 </div><div id="L26"><a name="L-26"></a>
562 </div><div id="L26"><a name="L-26"></a>
563 </div><div id="L27"><a name="L-27"></a><span class="k">def</span> <span class="nf">setup_app</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="n">conf</span><span class="p">,</span> <span class="nb">vars</span><span class="p">):</span>
563 </div><div id="L27"><a name="L-27"></a><span class="k">def</span> <span class="nf">setup_app</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="n">conf</span><span class="p">,</span> <span class="nb">vars</span><span class="p">):</span>
564 </div><div id="L28"><a name="L-28"></a> <span class="sd">"""Place any commands to setup rhodecode here"""</span>
564 </div><div id="L28"><a name="L-28"></a> <span class="sd">"""Place any commands to setup rhodecode here"""</span>
565 </div><div id="L29"><a name="L-29"></a> <span class="n">dbconf</span> <span class="o">=</span> <span class="n">conf</span><span class="p">[</span><span class="s">'sqlalchemy.db1.url'</span><span class="p">]</span>
565 </div><div id="L29"><a name="L-29"></a> <span class="n">dbconf</span> <span class="o">=</span> <span class="n">conf</span><span class="p">[</span><span class="s">'sqlalchemy.db1.url'</span><span class="p">]</span>
566 </div><div id="L30"><a name="L-30"></a> <span class="n">dbmanage</span> <span class="o">=</span> <span class="n">DbManage</span><span class="p">(</span><span class="n">log_sql</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span> <span class="n">dbconf</span><span class="o">=</span><span class="n">dbconf</span><span class="p">,</span> <span class="n">root</span><span class="o">=</span><span class="n">conf</span><span class="p">[</span><span class="s">'here'</span><span class="p">],</span>
566 </div><div id="L30"><a name="L-30"></a> <span class="n">dbmanage</span> <span class="o">=</span> <span class="n">DbManage</span><span class="p">(</span><span class="n">log_sql</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span> <span class="n">dbconf</span><span class="o">=</span><span class="n">dbconf</span><span class="p">,</span> <span class="n">root</span><span class="o">=</span><span class="n">conf</span><span class="p">[</span><span class="s">'here'</span><span class="p">],</span>
567 </div><div id="L31"><a name="L-31"></a> <span class="n">tests</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span> <span class="n">cli_args</span><span class="o">=</span><span class="n">command</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">__dict__</span><span class="p">)</span>
567 </div><div id="L31"><a name="L-31"></a> <span class="n">tests</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span> <span class="n">cli_args</span><span class="o">=</span><span class="n">command</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">__dict__</span><span class="p">)</span>
568 </div><div id="L32"><a name="L-32"></a> <span class="n">dbmanage</span><span class="o">.</span><span class="n">create_tables</span><span class="p">(</span><span class="n">override</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
568 </div><div id="L32"><a name="L-32"></a> <span class="n">dbmanage</span><span class="o">.</span><span class="n">create_tables</span><span class="p">(</span><span class="n">override</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
569 </div><div id="L33"><a name="L-33"></a> <span class="n">dbmanage</span><span class="o">.</span><span class="n">set_db_version</span><span class="p">()</span>
569 </div><div id="L33"><a name="L-33"></a> <span class="n">dbmanage</span><span class="o">.</span><span class="n">set_db_version</span><span class="p">()</span>
570 </div><div id="L34"><a name="L-34"></a> <span class="n">opts</span> <span class="o">=</span> <span class="n">dbmanage</span><span class="o">.</span><span class="n">config_prompt</span><span class="p">(</span><span class="bp">None</span><span class="p">)</span>
570 </div><div id="L34"><a name="L-34"></a> <span class="n">opts</span> <span class="o">=</span> <span class="n">dbmanage</span><span class="o">.</span><span class="n">config_prompt</span><span class="p">(</span><span class="bp">None</span><span class="p">)</span>
571 </div><div id="L35"><a name="L-35"></a> <span class="n">dbmanage</span><span class="o">.</span><span class="n">create_settings</span><span class="p">(</span><span class="n">opts</span><span class="p">)</span>
571 </div><div id="L35"><a name="L-35"></a> <span class="n">dbmanage</span><span class="o">.</span><span class="n">create_settings</span><span class="p">(</span><span class="n">opts</span><span class="p">)</span>
572 </div><div id="L36"><a name="L-36"></a> <span class="n">dbmanage</span><span class="o">.</span><span class="n">create_default_user</span><span class="p">()</span>
572 </div><div id="L36"><a name="L-36"></a> <span class="n">dbmanage</span><span class="o">.</span><span class="n">create_default_user</span><span class="p">()</span>
573 </div><div id="L37"><a name="L-37"></a> <span class="n">dbmanage</span><span class="o">.</span><span class="n">admin_prompt</span><span class="p">()</span>
573 </div><div id="L37"><a name="L-37"></a> <span class="n">dbmanage</span><span class="o">.</span><span class="n">admin_prompt</span><span class="p">()</span>
574 </div><div id="L38"><a name="L-38"></a> <span class="n">dbmanage</span><span class="o">.</span><span class="n">create_permissions</span><span class="p">()</span>
574 </div><div id="L38"><a name="L-38"></a> <span class="n">dbmanage</span><span class="o">.</span><span class="n">create_permissions</span><span class="p">()</span>
575 </div><div id="L39"><a name="L-39"></a> <span class="n">dbmanage</span><span class="o">.</span><span class="n">populate_default_permissions</span><span class="p">()</span>
575 </div><div id="L39"><a name="L-39"></a> <span class="n">dbmanage</span><span class="o">.</span><span class="n">populate_default_permissions</span><span class="p">()</span>
576 </div><div id="L40"><a name="L-40"></a> <span class="n">Session</span><span class="p">()</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
576 </div><div id="L40"><a name="L-40"></a> <span class="n">Session</span><span class="p">()</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
577 </div><div id="L41"><a name="L-41"></a> <span class="n">load_environment</span><span class="p">(</span><span class="n">conf</span><span class="o">.</span><span class="n">global_conf</span><span class="p">,</span> <span class="n">conf</span><span class="o">.</span><span class="n">local_conf</span><span class="p">,</span> <span class="n">initial</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
577 </div><div id="L41"><a name="L-41"></a> <span class="n">load_environment</span><span class="p">(</span><span class="n">conf</span><span class="o">.</span><span class="n">global_conf</span><span class="p">,</span> <span class="n">conf</span><span class="o">.</span><span class="n">local_conf</span><span class="p">,</span> <span class="n">initial</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
578 </div><div id="L42"><a name="L-42"></a> <span class="n">DbManage</span><span class="o">.</span><span class="n">check_waitress</span><span class="p">()</span>
578 </div><div id="L42"><a name="L-42"></a> <span class="n">DbManage</span><span class="o">.</span><span class="n">check_waitress</span><span class="p">()</span>
579 </div></pre></div>
579 </div></pre></div>
580 </td></tr></tbody></table>
580 </td></tr></tbody></table>
581 </div>
581 </div>
582 </div>
582 </div>
583
583
584
584
585
585
586
586
587
587
588
588
589
589
590
590
591
591
592 <!--
592 <!--
593 Gist Edit
593 Gist Edit
594 -->
594 -->
595
595
596
596
597 <h2>Gist Edit</h2>
597 <h2>Gist Edit</h2>
598
598
599 <div class="codeblock">
599 <div class="codeblock">
600 <div class="code-header">
600 <div class="code-header">
601 <div class="form">
601 <div class="form">
602 <div class="fields">
602 <div class="fields">
603 <input id="filename" name="filename" placeholder="name this file..." size="30" type="text">
603 <input id="filename" name="filename" placeholder="name this file..." size="30" type="text">
604 <div class="select2-container drop-menu" id="s2id_mimetype"><a href="javascript:void(0)" class="select2-choice" tabindex="-1"> <span class="select2-chosen" id="select2-chosen-3">Python</span><abbr class="select2-search-choice-close"></abbr> <span class="select2-arrow" role="presentation"><b role="presentation"></b></span></a><label for="s2id_autogen3" class="select2-offscreen"></label><input class="select2-focusser select2-offscreen" type="text" aria-haspopup="true" role="button" aria-labelledby="select2-chosen-3" id="s2id_autogen3"><div class="select2-drop select2-display-none drop-menu-dropdown select2-with-searchbox"> <div class="select2-search"> <label for="s2id_autogen3_search" class="select2-offscreen"></label> <input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" class="select2-input" role="combobox" aria-expanded="true" aria-autocomplete="list" aria-owns="select2-results-3" id="s2id_autogen3_search" placeholder=""> </div> <ul class="select2-results" role="listbox" id="select2-results-3"> </ul></div></div><select id="mimetype" name="mimetype" tabindex="-1" title="" style="display: none;">
604 <div class="select2-container drop-menu" id="s2id_mimetype"><a href="javascript:void(0)" class="select2-choice" tabindex="-1"> <span class="select2-chosen" id="select2-chosen-3">Python</span><abbr class="select2-search-choice-close"></abbr> <span class="select2-arrow" role="presentation"><b role="presentation"></b></span></a><label for="s2id_autogen3" class="select2-offscreen"></label><input class="select2-focusser select2-offscreen" type="text" aria-haspopup="true" role="button" aria-labelledby="select2-chosen-3" id="s2id_autogen3"><div class="select2-drop select2-display-none drop-menu-dropdown select2-with-searchbox"> <div class="select2-search"> <label for="s2id_autogen3_search" class="select2-offscreen"></label> <input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" class="select2-input" role="combobox" aria-expanded="true" aria-autocomplete="list" aria-owns="select2-results-3" id="s2id_autogen3_search" placeholder=""> </div> <ul class="select2-results" role="listbox" id="select2-results-3"> </ul></div></div><select id="mimetype" name="mimetype" tabindex="-1" title="" style="display: none;">
605 <option selected="selected" value="plain">plain</option>
605 <option selected="selected" value="plain">plain</option>
606 <option value="text/apl" mode="apl">APL</option><option value="text/x-asterisk" mode="asterisk">Asterisk</option><option value="text/x-csrc" mode="clike">C</option><option value="text/x-c++src" mode="clike">C++</option><option value="text/x-cobol" mode="cobol">Cobol</option><option value="text/x-java" mode="clike">Java</option><option value="text/x-csharp" mode="clike">C#</option><option value="text/x-scala" mode="clike">Scala</option><option value="text/x-clojure" mode="clojure">Clojure</option><option value="text/x-coffeescript" mode="coffeescript">CoffeeScript</option><option value="text/x-common-lisp" mode="commonlisp">Common Lisp</option><option value="text/css" mode="css">CSS</option><option value="text/x-d" mode="d">D</option><option value="text/x-diff" mode="diff">diff</option><option value="application/xml-dtd" mode="dtd">DTD</option><option value="text/x-dylan" mode="dylan">Dylan</option><option value="text/x-ecl" mode="ecl">ECL</option><option value="text/x-eiffel" mode="eiffel">Eiffel</option><option value="text/x-erlang" mode="erlang">Erlang</option><option value="text/x-fortran" mode="fortran">Fortran</option><option value="text/x-fsharp" mode="mllike">F#</option><option value="text/x-gas" mode="gas">Gas</option><option value="text/x-go" mode="go">GO</option><option value="text/x-feature" mode="gherkin">Gherkin</option><option value="text/x-go" mode="go">Go</option><option value="text/x-groovy" mode="groovy">Groovy</option><option value="text/x-haml" mode="haml">HAML</option><option value="text/x-haskell" mode="haskell">Haskell</option><option value="text/x-haxe" mode="haxe">Haxe</option><option value="application/x-aspx" mode="htmlembedded">ASP.NET</option><option value="application/x-ejs" mode="htmlembedded">Embedded Javascript</option><option value="application/x-jsp" mode="htmlembedded">JavaServer Pages</option><option value="text/html" mode="htmlmixed">HTML</option><option value="message/http" mode="http">HTTP</option><option value="text/x-jade" mode="jade">Jade</option><option value="text/javascript" mode="javascript">JavaScript</option><option value="application/json" mode="javascript">JSON</option><option value="application/typescript" mode="javascript">TypeScript</option><option value="jinja2" mode="jinja2">Jinja2</option><option value="text/x-julia" mode="julia">Julia</option><option value="text/x-less" mode="less">LESS</option><option value="text/x-livescript" mode="livescript">LiveScript</option><option value="text/x-lua" mode="lua">Lua</option><option value="text/x-markdown" mode="markdown">Markdown (GitHub-flavour)</option><option value="text/mirc" mode="mirc">mIRC</option><option value="text/x-nginx-conf" mode="nginx">Nginx</option><option value="text/n-triples" mode="ntriples">NTriples</option><option value="text/x-ocaml" mode="ocaml">OCaml</option><option value="text/x-ocaml" mode="mllike">OCaml</option><option value="text/x-octave" mode="octave">Octave</option><option value="text/x-pascal" mode="pascal">Pascal</option><option value="null" mode="pegjs">PEG.js</option><option value="text/x-perl" mode="perl">Perl</option><option value="text/x-php" mode="php">PHP</option><option value="text/x-pig" mode="pig">Pig</option><option value="text/plain" mode="null">Plain Text</option><option value="text/x-properties" mode="properties">Properties files</option><option value="text/x-python" mode="python">Python</option><option value="text/x-puppet" mode="puppet">Puppet</option><option value="text/x-rsrc" mode="r">R</option><option value="text/x-rst" mode="rst">reStructuredText</option><option value="text/x-ruby" mode="ruby">Ruby</option><option value="text/x-rustsrc" mode="rust">Rust</option><option value="text/x-sass" mode="sass">Sass</option><option value="text/x-scheme" mode="scheme">Scheme</option><option value="text/x-scss" mode="css">SCSS</option><option value="text/x-sh" mode="shell">Shell</option><option value="application/sieve" mode="sieve">Sieve</option><option value="text/x-stsrc" mode="smalltalk">Smalltalk</option><option value="text/x-smarty" mode="smarty">Smarty</option><option value="text/x-smarty" mode="smartymixed">SmartyMixed</option><option value="text/x-solr" mode="solr">Solr</option><option value="application/x-sparql-query" mode="sparql">SPARQL</option><option value="text/x-sql" mode="sql">SQL</option><option value="text/x-mariadb" mode="sql">MariaDB</option><option value="text/x-stex" mode="stex">sTeX</option><option value="text/x-latex" mode="stex">LaTeX</option><option value="text/x-systemverilog" mode="verilog">SystemVerilog</option><option value="text/x-tcl" mode="tcl">Tcl</option><option value="text/x-tiddlywiki" mode="tiddlywiki">TiddlyWiki </option><option value="text/tiki" mode="tiki">Tiki wiki</option><option value="text/x-toml" mode="toml">TOML</option><option value="text/turtle" mode="turtle">Turtle</option><option value="text/x-vb" mode="vb">VB.NET</option><option value="text/vbscript" mode="vbscript">VBScript</option><option value="text/velocity" mode="velocity">Velocity</option><option value="text/x-verilog" mode="verilog">Verilog</option><option value="application/xml" mode="xml">XML</option><option value="text/html" mode="xml">HTML</option><option value="application/xquery" mode="xquery">XQuery</option><option value="text/x-yaml" mode="yaml">YAML</option><option value="text/x-z80" mode="z80">Z80</option></select>
606 <option value="text/apl" mode="apl">APL</option><option value="text/x-asterisk" mode="asterisk">Asterisk</option><option value="text/x-csrc" mode="clike">C</option><option value="text/x-c++src" mode="clike">C++</option><option value="text/x-cobol" mode="cobol">Cobol</option><option value="text/x-java" mode="clike">Java</option><option value="text/x-csharp" mode="clike">C#</option><option value="text/x-scala" mode="clike">Scala</option><option value="text/x-clojure" mode="clojure">Clojure</option><option value="text/x-coffeescript" mode="coffeescript">CoffeeScript</option><option value="text/x-common-lisp" mode="commonlisp">Common Lisp</option><option value="text/css" mode="css">CSS</option><option value="text/x-d" mode="d">D</option><option value="text/x-diff" mode="diff">diff</option><option value="application/xml-dtd" mode="dtd">DTD</option><option value="text/x-dylan" mode="dylan">Dylan</option><option value="text/x-ecl" mode="ecl">ECL</option><option value="text/x-eiffel" mode="eiffel">Eiffel</option><option value="text/x-erlang" mode="erlang">Erlang</option><option value="text/x-fortran" mode="fortran">Fortran</option><option value="text/x-fsharp" mode="mllike">F#</option><option value="text/x-gas" mode="gas">Gas</option><option value="text/x-go" mode="go">GO</option><option value="text/x-feature" mode="gherkin">Gherkin</option><option value="text/x-go" mode="go">Go</option><option value="text/x-groovy" mode="groovy">Groovy</option><option value="text/x-haml" mode="haml">HAML</option><option value="text/x-haskell" mode="haskell">Haskell</option><option value="text/x-haxe" mode="haxe">Haxe</option><option value="application/x-aspx" mode="htmlembedded">ASP.NET</option><option value="application/x-ejs" mode="htmlembedded">Embedded Javascript</option><option value="application/x-jsp" mode="htmlembedded">JavaServer Pages</option><option value="text/html" mode="htmlmixed">HTML</option><option value="message/http" mode="http">HTTP</option><option value="text/x-jade" mode="jade">Jade</option><option value="text/javascript" mode="javascript">JavaScript</option><option value="application/json" mode="javascript">JSON</option><option value="application/typescript" mode="javascript">TypeScript</option><option value="jinja2" mode="jinja2">Jinja2</option><option value="text/x-julia" mode="julia">Julia</option><option value="text/x-less" mode="less">LESS</option><option value="text/x-livescript" mode="livescript">LiveScript</option><option value="text/x-lua" mode="lua">Lua</option><option value="text/x-markdown" mode="markdown">Markdown (GitHub-flavour)</option><option value="text/mirc" mode="mirc">mIRC</option><option value="text/x-nginx-conf" mode="nginx">Nginx</option><option value="text/n-triples" mode="ntriples">NTriples</option><option value="text/x-ocaml" mode="ocaml">OCaml</option><option value="text/x-ocaml" mode="mllike">OCaml</option><option value="text/x-octave" mode="octave">Octave</option><option value="text/x-pascal" mode="pascal">Pascal</option><option value="null" mode="pegjs">PEG.js</option><option value="text/x-perl" mode="perl">Perl</option><option value="text/x-php" mode="php">PHP</option><option value="text/x-pig" mode="pig">Pig</option><option value="text/plain" mode="null">Plain Text</option><option value="text/x-properties" mode="properties">Properties files</option><option value="text/x-python" mode="python">Python</option><option value="text/x-puppet" mode="puppet">Puppet</option><option value="text/x-rsrc" mode="r">R</option><option value="text/x-rst" mode="rst">reStructuredText</option><option value="text/x-ruby" mode="ruby">Ruby</option><option value="text/x-rustsrc" mode="rust">Rust</option><option value="text/x-sass" mode="sass">Sass</option><option value="text/x-scheme" mode="scheme">Scheme</option><option value="text/x-scss" mode="css">SCSS</option><option value="text/x-sh" mode="shell">Shell</option><option value="application/sieve" mode="sieve">Sieve</option><option value="text/x-stsrc" mode="smalltalk">Smalltalk</option><option value="text/x-smarty" mode="smarty">Smarty</option><option value="text/x-smarty" mode="smartymixed">SmartyMixed</option><option value="text/x-solr" mode="solr">Solr</option><option value="application/x-sparql-query" mode="sparql">SPARQL</option><option value="text/x-sql" mode="sql">SQL</option><option value="text/x-mariadb" mode="sql">MariaDB</option><option value="text/x-stex" mode="stex">sTeX</option><option value="text/x-latex" mode="stex">LaTeX</option><option value="text/x-systemverilog" mode="verilog">SystemVerilog</option><option value="text/x-tcl" mode="tcl">Tcl</option><option value="text/x-tiddlywiki" mode="tiddlywiki">TiddlyWiki </option><option value="text/tiki" mode="tiki">Tiki wiki</option><option value="text/x-toml" mode="toml">TOML</option><option value="text/turtle" mode="turtle">Turtle</option><option value="text/x-vb" mode="vb">VB.NET</option><option value="text/vbscript" mode="vbscript">VBScript</option><option value="text/velocity" mode="velocity">Velocity</option><option value="text/x-verilog" mode="verilog">Verilog</option><option value="application/xml" mode="xml">XML</option><option value="text/html" mode="xml">HTML</option><option value="application/xquery" mode="xquery">XQuery</option><option value="text/x-yaml" mode="yaml">YAML</option><option value="text/x-z80" mode="z80">Z80</option></select>
607 <script>
607 <script>
608 $(document).ready(function() {
608 $(document).ready(function() {
609 $('#mimetype').select2({
609 $('#mimetype').select2({
610 containerCssClass: 'drop-menu',
610 containerCssClass: 'drop-menu',
611 dropdownCssClass: 'drop-menu-dropdown',
611 dropdownCssClass: 'drop-menu-dropdown',
612 dropdownAutoWidth: true
612 dropdownAutoWidth: true
613 });
613 });
614 });
614 });
615 </script>
615 </script>
616
616
617 </div>
617 </div>
618 </div>
618 </div>
619 </div>
619 </div>
620 <div id="editor_container">
620 <div id="editor_container">
621 <div id="editor_pre"></div>
621 <div id="editor_pre"></div>
622 <textarea id="editor" name="content" style="display: none;"></textarea><div class="CodeMirror cm-s-default"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 484px; left: 219.4091796875px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" style="position: absolute; padding: 0px; width: 1000px; height: 1em; outline: none;" tabindex="0"></textarea></div><div class="CodeMirror-hscrollbar" style="left: 29px; min-height: 18px;"><div style="height: 100%; min-height: 1px; width: 0px;"></div></div><div class="CodeMirror-vscrollbar" style="min-width: 18px; display: block; bottom: 0px;"><div style="min-width: 1px; height: 619px;"></div></div><div class="CodeMirror-scrollbar-filler"></div><div class="CodeMirror-gutter-filler"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="min-width: 700.269653320313px; margin-left: 29px; min-height: 619px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines"><div style="position: relative; outline: none;"><div class="CodeMirror-measure"><div class="CodeMirror-linenumber CodeMirror-gutter-elt"><div>47</div></div></div><div style="position: relative; z-index: 1; display: none;"></div><div class="CodeMirror-code"><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">1</div></div><pre><span class="cm-keyword">import</span> <span class="cm-variable">re</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">2</div></div><pre>&nbsp;</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">3</div></div><pre><span class="cm-keyword">from</span> <span class="cm-variable">django</span>.<span class="cm-variable">utils</span>.<span class="cm-variable">text</span> <span class="cm-keyword">import</span> <span class="cm-variable">compress_sequence</span>, <span class="cm-variable">compress_string</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">4</div></div><pre><span class="cm-keyword">from</span> <span class="cm-variable">django</span>.<span class="cm-variable">utils</span>.<span class="cm-variable">cache</span> <span class="cm-keyword">import</span> <span class="cm-variable">patch_vary_headers</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">5</div></div><pre>&nbsp;</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">6</div></div><pre><span class="cm-variable">re_accepts_gzip</span> = <span class="cm-variable">re</span>.<span class="cm-builtin">compile</span>(<span class="cm-string">r'\bgzip\b'</span>)</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">7</div></div><pre>&nbsp;</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">8</div></div><pre>&nbsp;</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">9</div></div><pre><span class="cm-keyword">class</span> <span class="cm-def">GZipMiddleware</span>(<span class="cm-builtin">object</span>): # Intentionally long line to show what will happen if this line does not fit onto the screen. It might have some horizontal scrolling applied or some other fancy mechanism to deal with it.</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">10</div></div><pre> <span class="cm-string">"""</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">11</div></div><pre><span class="cm-string"> This middleware compresses content if the browser allows gzip compression.</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">12</div></div><pre><span class="cm-string"> It sets the Vary header accordingly, so that caches will base their storage</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">13</div></div><pre><span class="cm-string"> on the Accept-Encoding header.</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">14</div></div><pre><span class="cm-string"> """</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">15</div></div><pre> <span class="cm-keyword">def</span> <span class="cm-def">process_response</span>(<span class="cm-variable-2">self</span>, <span class="cm-variable">request</span>, <span class="cm-variable">response</span>):</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">16</div></div><pre> <span class="cm-comment"># It's not worth attempting to compress really short responses.</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">17</div></div><pre> <span class="cm-keyword">if</span> <span class="cm-operator">not</span> <span class="cm-variable">response</span>.<span class="cm-variable">streaming</span> <span class="cm-operator">and</span> <span class="cm-builtin">len</span>(<span class="cm-variable">response</span>.<span class="cm-variable">content</span>) <span class="cm-operator">&lt;</span> <span class="cm-number">200</span>:</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">18</div></div><pre> <span class="cm-keyword">return</span> <span class="cm-variable">response</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">19</div></div><pre>&nbsp;</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">20</div></div><pre> <span class="cm-comment"># Avoid gzipping if we've already got a content-encoding.</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">21</div></div><pre> <span class="cm-keyword">if</span> <span class="cm-variable">response</span>.<span class="cm-variable">has_header</span>(<span class="cm-string">'Content-Encoding'</span>):</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">22</div></div><pre> <span class="cm-keyword">return</span> <span class="cm-variable">response</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">23</div></div><pre>&nbsp;</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">24</div></div><pre> <span class="cm-variable">patch_vary_headers</span>(<span class="cm-variable">response</span>, (<span class="cm-string">'Accept-Encoding'</span>,))</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">25</div></div><pre>&nbsp;</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">26</div></div><pre> <span class="cm-variable">ae</span> = <span class="cm-variable">request</span>.<span class="cm-variable">META</span>.<span class="cm-variable">get</span>(<span class="cm-string">'HTTP_ACCEPT_ENCODING'</span>, <span class="cm-string">''</span>)</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">27</div></div><pre> <span class="cm-keyword">if</span> <span class="cm-operator">not</span> <span class="cm-variable">re_accepts_gzip</span>.<span class="cm-variable">search</span>(<span class="cm-variable">ae</span>):</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">28</div></div><pre> <span class="cm-keyword">return</span> <span class="cm-variable">response</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">29</div></div><pre>&nbsp;</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">30</div></div><pre> <span class="cm-keyword">if</span> <span class="cm-variable">response</span>.<span class="cm-variable">streaming</span>:</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">31</div></div><pre> <span class="cm-comment"># Delete the `Content-Length` header for streaming content, because</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">32</div></div><pre> <span class="cm-comment"># we won't know the compressed size until we stream it.</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">33</div></div><pre> <span class="cm-variable">response</span>.<span class="cm-variable">streaming_content</span> = <span class="cm-variable">compress_sequence</span>(<span class="cm-variable">response</span>.<span class="cm-variable">streaming_content</span>)</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">34</div></div><pre> <span class="cm-keyword">del</span> <span class="cm-variable">response</span>[<span class="cm-string">'Content-Length'</span>]</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">35</div></div><pre> <span class="cm-keyword">else</span>:</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">36</div></div><pre> <span class="cm-comment"># Return the compressed content only if it's actually shorter.</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">37</div></div><pre> <span class="cm-variable">compressed_content</span> = <span class="cm-variable">compress_string</span>(<span class="cm-variable">response</span>.<span class="cm-variable">content</span>)</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">38</div></div><pre> <span class="cm-keyword">if</span> <span class="cm-builtin">len</span>(<span class="cm-variable">compressed_content</span>) <span class="cm-operator">&gt;=</span> <span class="cm-builtin">len</span>(<span class="cm-variable">response</span>.<span class="cm-variable">content</span>):</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">39</div></div><pre> <span class="cm-keyword">return</span> <span class="cm-variable">response</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">40</div></div><pre> <span class="cm-variable">response</span>.<span class="cm-variable">content</span> = <span class="cm-variable">compressed_content</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">41</div></div><pre> <span class="cm-variable">response</span>[<span class="cm-string">'Content-Length'</span>] = <span class="cm-builtin">str</span>(<span class="cm-builtin">len</span>(<span class="cm-variable">response</span>.<span class="cm-variable">content</span>))</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">42</div></div><pre>&nbsp;</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">43</div></div><pre> <span class="cm-keyword">if</span> <span class="cm-variable">response</span>.<span class="cm-variable">has_header</span>(<span class="cm-string">'ETag'</span>):</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">44</div></div><pre> <span class="cm-variable">response</span>[<span class="cm-string">'ETag'</span>] = <span class="cm-variable">re</span>.<span class="cm-variable">sub</span>(<span class="cm-string">'"$'</span>, <span class="cm-string">';gzip"'</span>, <span class="cm-variable">response</span>[<span class="cm-string">'ETag'</span>])</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">45</div></div><pre> <span class="cm-variable">response</span>[<span class="cm-string">'Content-Encoding'</span>] = <span class="cm-string">'gzip'</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">46</div></div><pre>&nbsp;</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">47</div></div><pre> <span class="cm-keyword">return</span> <span class="cm-variable">response</span></pre></div></div><div class="CodeMirror-cursor" style="left: 189.4091796875px; top: 598px; height: 13px;">&nbsp;</div><div class="CodeMirror-cursor CodeMirror-secondarycursor" style="display: none;">&nbsp;</div></div></div></div></div><div style="position: absolute; height: 30px; width: 1px; top: 619px;"></div><div class="CodeMirror-gutters" style="height: 619px;"><div class="CodeMirror-gutter CodeMirror-linenumbers" style="width: 28px;"></div></div></div></div>
622 <textarea id="editor" name="content" style="display: none;"></textarea><div class="CodeMirror cm-s-default"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 484px; left: 219.4091796875px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" style="position: absolute; padding: 0px; width: 1000px; height: 1em; outline: none;" tabindex="0"></textarea></div><div class="CodeMirror-hscrollbar" style="left: 29px; min-height: 18px;"><div style="height: 100%; min-height: 1px; width: 0px;"></div></div><div class="CodeMirror-vscrollbar" style="min-width: 18px; display: block; bottom: 0px;"><div style="min-width: 1px; height: 619px;"></div></div><div class="CodeMirror-scrollbar-filler"></div><div class="CodeMirror-gutter-filler"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="min-width: 700.269653320313px; margin-left: 29px; min-height: 619px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines"><div style="position: relative; outline: none;"><div class="CodeMirror-measure"><div class="CodeMirror-linenumber CodeMirror-gutter-elt"><div>47</div></div></div><div style="position: relative; z-index: 1; display: none;"></div><div class="CodeMirror-code"><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">1</div></div><pre><span class="cm-keyword">import</span> <span class="cm-variable">re</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">2</div></div><pre>&nbsp;</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">3</div></div><pre><span class="cm-keyword">from</span> <span class="cm-variable">django</span>.<span class="cm-variable">utils</span>.<span class="cm-variable">text</span> <span class="cm-keyword">import</span> <span class="cm-variable">compress_sequence</span>, <span class="cm-variable">compress_string</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">4</div></div><pre><span class="cm-keyword">from</span> <span class="cm-variable">django</span>.<span class="cm-variable">utils</span>.<span class="cm-variable">cache</span> <span class="cm-keyword">import</span> <span class="cm-variable">patch_vary_headers</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">5</div></div><pre>&nbsp;</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">6</div></div><pre><span class="cm-variable">re_accepts_gzip</span> = <span class="cm-variable">re</span>.<span class="cm-builtin">compile</span>(<span class="cm-string">r'\bgzip\b'</span>)</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">7</div></div><pre>&nbsp;</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">8</div></div><pre>&nbsp;</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">9</div></div><pre><span class="cm-keyword">class</span> <span class="cm-def">GZipMiddleware</span>(<span class="cm-builtin">object</span>): # Intentionally long line to show what will happen if this line does not fit onto the screen. It might have some horizontal scrolling applied or some other fancy mechanism to deal with it.</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">10</div></div><pre> <span class="cm-string">"""</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">11</div></div><pre><span class="cm-string"> This middleware compresses content if the browser allows gzip compression.</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">12</div></div><pre><span class="cm-string"> It sets the Vary header accordingly, so that caches will base their storage</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">13</div></div><pre><span class="cm-string"> on the Accept-Encoding header.</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">14</div></div><pre><span class="cm-string"> """</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">15</div></div><pre> <span class="cm-keyword">def</span> <span class="cm-def">process_response</span>(<span class="cm-variable-2">self</span>, <span class="cm-variable">request</span>, <span class="cm-variable">response</span>):</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">16</div></div><pre> <span class="cm-comment"># It's not worth attempting to compress really short responses.</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">17</div></div><pre> <span class="cm-keyword">if</span> <span class="cm-operator">not</span> <span class="cm-variable">response</span>.<span class="cm-variable">streaming</span> <span class="cm-operator">and</span> <span class="cm-builtin">len</span>(<span class="cm-variable">response</span>.<span class="cm-variable">content</span>) <span class="cm-operator">&lt;</span> <span class="cm-number">200</span>:</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">18</div></div><pre> <span class="cm-keyword">return</span> <span class="cm-variable">response</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">19</div></div><pre>&nbsp;</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">20</div></div><pre> <span class="cm-comment"># Avoid gzipping if we've already got a content-encoding.</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">21</div></div><pre> <span class="cm-keyword">if</span> <span class="cm-variable">response</span>.<span class="cm-variable">has_header</span>(<span class="cm-string">'Content-Encoding'</span>):</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">22</div></div><pre> <span class="cm-keyword">return</span> <span class="cm-variable">response</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">23</div></div><pre>&nbsp;</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">24</div></div><pre> <span class="cm-variable">patch_vary_headers</span>(<span class="cm-variable">response</span>, (<span class="cm-string">'Accept-Encoding'</span>,))</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">25</div></div><pre>&nbsp;</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">26</div></div><pre> <span class="cm-variable">ae</span> = <span class="cm-variable">request</span>.<span class="cm-variable">META</span>.<span class="cm-variable">get</span>(<span class="cm-string">'HTTP_ACCEPT_ENCODING'</span>, <span class="cm-string">''</span>)</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">27</div></div><pre> <span class="cm-keyword">if</span> <span class="cm-operator">not</span> <span class="cm-variable">re_accepts_gzip</span>.<span class="cm-variable">search</span>(<span class="cm-variable">ae</span>):</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">28</div></div><pre> <span class="cm-keyword">return</span> <span class="cm-variable">response</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">29</div></div><pre>&nbsp;</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">30</div></div><pre> <span class="cm-keyword">if</span> <span class="cm-variable">response</span>.<span class="cm-variable">streaming</span>:</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">31</div></div><pre> <span class="cm-comment"># Delete the `Content-Length` header for streaming content, because</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">32</div></div><pre> <span class="cm-comment"># we won't know the compressed size until we stream it.</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">33</div></div><pre> <span class="cm-variable">response</span>.<span class="cm-variable">streaming_content</span> = <span class="cm-variable">compress_sequence</span>(<span class="cm-variable">response</span>.<span class="cm-variable">streaming_content</span>)</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">34</div></div><pre> <span class="cm-keyword">del</span> <span class="cm-variable">response</span>[<span class="cm-string">'Content-Length'</span>]</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">35</div></div><pre> <span class="cm-keyword">else</span>:</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">36</div></div><pre> <span class="cm-comment"># Return the compressed content only if it's actually shorter.</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">37</div></div><pre> <span class="cm-variable">compressed_content</span> = <span class="cm-variable">compress_string</span>(<span class="cm-variable">response</span>.<span class="cm-variable">content</span>)</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">38</div></div><pre> <span class="cm-keyword">if</span> <span class="cm-builtin">len</span>(<span class="cm-variable">compressed_content</span>) <span class="cm-operator">&gt;=</span> <span class="cm-builtin">len</span>(<span class="cm-variable">response</span>.<span class="cm-variable">content</span>):</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">39</div></div><pre> <span class="cm-keyword">return</span> <span class="cm-variable">response</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">40</div></div><pre> <span class="cm-variable">response</span>.<span class="cm-variable">content</span> = <span class="cm-variable">compressed_content</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">41</div></div><pre> <span class="cm-variable">response</span>[<span class="cm-string">'Content-Length'</span>] = <span class="cm-builtin">str</span>(<span class="cm-builtin">len</span>(<span class="cm-variable">response</span>.<span class="cm-variable">content</span>))</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">42</div></div><pre>&nbsp;</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">43</div></div><pre> <span class="cm-keyword">if</span> <span class="cm-variable">response</span>.<span class="cm-variable">has_header</span>(<span class="cm-string">'ETag'</span>):</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">44</div></div><pre> <span class="cm-variable">response</span>[<span class="cm-string">'ETag'</span>] = <span class="cm-variable">re</span>.<span class="cm-variable">sub</span>(<span class="cm-string">'"$'</span>, <span class="cm-string">';gzip"'</span>, <span class="cm-variable">response</span>[<span class="cm-string">'ETag'</span>])</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">45</div></div><pre> <span class="cm-variable">response</span>[<span class="cm-string">'Content-Encoding'</span>] = <span class="cm-string">'gzip'</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">46</div></div><pre>&nbsp;</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">47</div></div><pre> <span class="cm-keyword">return</span> <span class="cm-variable">response</span></pre></div></div><div class="CodeMirror-cursor" style="left: 189.4091796875px; top: 598px; height: 13px;">&nbsp;</div><div class="CodeMirror-cursor CodeMirror-secondarycursor" style="display: none;">&nbsp;</div></div></div></div></div><div style="position: absolute; height: 30px; width: 1px; top: 619px;"></div><div class="CodeMirror-gutters" style="height: 619px;"><div class="CodeMirror-gutter CodeMirror-linenumbers" style="width: 28px;"></div></div></div></div>
623 </div>
623 </div>
624 </div>
624 </div>
625
625
626
626
627
627
628
628
629
629
630 <!--
630 <!--
631 File Edit
631 File Edit
632 -->
632 -->
633
633
634 <h2>File Edit</h2>
634 <h2>File Edit</h2>
635
635
636 <div class="codeblock">
636 <div class="codeblock">
637 <div class="code-header">
637 <div class="code-header">
638 <div class="stats">
638 <div class="stats">
639 <i class="icon-file"></i>
639 <i class="icon-file"></i>
640 <span class="item"><a href="/example/changeset/80ead1899f50a894889e19ffeb49c9cebf5bf045">r8248:80ead1899f50</a></span>
640 <span class="item"><a href="/example/changeset/80ead1899f50a894889e19ffeb49c9cebf5bf045">r8248:80ead1899f50</a></span>
641 <span class="item">1.2 KiB</span>
641 <span class="item">1.2 KiB</span>
642 <span class="item last">text/x-python</span>
642 <span class="item last">text/x-python</span>
643 <div class="buttons">
643 <div class="buttons">
644 <a class="btn btn-mini" href="/example/changelog/80ead1899f50a894889e19ffeb49c9cebf5bf045/rhodecode/websetup.py">
644 <a class="btn btn-mini" href="/example/changelog/80ead1899f50a894889e19ffeb49c9cebf5bf045/rhodecode/websetup.py">
645 <i class="icon-time"></i> history
645 <i class="icon-time"></i> history
646 </a>
646 </a>
647
647
648 <a class="btn btn-mini" href="/example/files/80ead1899f50a894889e19ffeb49c9cebf5bf045/rhodecode/websetup.py">source</a>
648 <a class="btn btn-mini" href="/example/files/80ead1899f50a894889e19ffeb49c9cebf5bf045/rhodecode/websetup.py">source</a>
649 <a class="btn btn-mini" href="/example/raw/80ead1899f50a894889e19ffeb49c9cebf5bf045/rhodecode/websetup.py">raw</a>
649 <a class="btn btn-mini" href="/example/raw/80ead1899f50a894889e19ffeb49c9cebf5bf045/rhodecode/websetup.py">raw</a>
650 <a class="btn btn-mini" href="/example/rawfile/80ead1899f50a894889e19ffeb49c9cebf5bf045/rhodecode/websetup.py">
650 <a class="btn btn-mini" href="/example/rawfile/80ead1899f50a894889e19ffeb49c9cebf5bf045/rhodecode/websetup.py">
651 <i class="icon-archive"></i> download
651 <i class="icon-archive"></i> download
652 </a>
652 </a>
653 </div>
653 </div>
654 </div>
654 </div>
655 <div class="form">
655 <div class="form">
656 <label for="set_mode">Editing file:</label>
656 <label for="set_mode">Editing file:</label>
657 rhodecode /
657 rhodecode /
658 <input type="text" name="filename" value="websetup.py">
658 <input type="text" name="filename" value="websetup.py">
659
659
660 <div class="select2-container drop-menu" id="s2id_set_mode"><a href="javascript:void(0)" class="select2-choice" tabindex="-1"> <span class="select2-chosen" id="select2-chosen-2">plain</span><abbr class="select2-search-choice-close"></abbr> <span class="select2-arrow" role="presentation"><b role="presentation"></b></span></a><label for="s2id_autogen2" class="select2-offscreen">Editing file:</label><input class="select2-focusser select2-offscreen" type="text" aria-haspopup="true" role="button" aria-labelledby="select2-chosen-2" id="s2id_autogen2"><div class="select2-drop select2-display-none drop-menu-dropdown select2-with-searchbox"> <div class="select2-search"> <label for="s2id_autogen2_search" class="select2-offscreen">Editing file:</label> <input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" class="select2-input" role="combobox" aria-expanded="true" aria-autocomplete="list" aria-owns="select2-results-2" id="s2id_autogen2_search" placeholder=""> </div> <ul class="select2-results" role="listbox" id="select2-results-2"> </ul></div></div><select id="set_mode" name="set_mode" tabindex="-1" title="Editing file:" style="display: none;">
660 <div class="select2-container drop-menu" id="s2id_set_mode"><a href="javascript:void(0)" class="select2-choice" tabindex="-1"> <span class="select2-chosen" id="select2-chosen-2">plain</span><abbr class="select2-search-choice-close"></abbr> <span class="select2-arrow" role="presentation"><b role="presentation"></b></span></a><label for="s2id_autogen2" class="select2-offscreen">Editing file:</label><input class="select2-focusser select2-offscreen" type="text" aria-haspopup="true" role="button" aria-labelledby="select2-chosen-2" id="s2id_autogen2"><div class="select2-drop select2-display-none drop-menu-dropdown select2-with-searchbox"> <div class="select2-search"> <label for="s2id_autogen2_search" class="select2-offscreen">Editing file:</label> <input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" class="select2-input" role="combobox" aria-expanded="true" aria-autocomplete="list" aria-owns="select2-results-2" id="s2id_autogen2_search" placeholder=""> </div> <ul class="select2-results" role="listbox" id="select2-results-2"> </ul></div></div><select id="set_mode" name="set_mode" tabindex="-1" title="Editing file:" style="display: none;">
661 <option selected="selected" value="plain">plain</option>
661 <option selected="selected" value="plain">plain</option>
662 <option value="apl">APL</option><option value="asterisk">Asterisk</option><option value="clike">C</option><option value="clike">C++</option><option value="cobol">Cobol</option><option value="clike">Java</option><option value="clike">C#</option><option value="clike">Scala</option><option value="clojure">Clojure</option><option value="coffeescript">CoffeeScript</option><option value="commonlisp">Common Lisp</option><option value="css">CSS</option><option value="d">D</option><option value="diff">diff</option><option value="dtd">DTD</option><option value="dylan">Dylan</option><option value="ecl">ECL</option><option value="eiffel">Eiffel</option><option value="erlang">Erlang</option><option value="fortran">Fortran</option><option value="mllike">F#</option><option value="gas">Gas</option><option value="go">GO</option><option value="gherkin">Gherkin</option><option value="go">Go</option><option value="groovy">Groovy</option><option value="haml">HAML</option><option value="haskell">Haskell</option><option value="haxe">Haxe</option><option value="htmlembedded">ASP.NET</option><option value="htmlembedded">Embedded Javascript</option><option value="htmlembedded">JavaServer Pages</option><option value="htmlmixed">HTML</option><option value="http">HTTP</option><option value="jade">Jade</option><option value="javascript">JavaScript</option><option value="javascript">JSON</option><option value="javascript">TypeScript</option><option value="jinja2">Jinja2</option><option value="julia">Julia</option><option value="less">LESS</option><option value="livescript">LiveScript</option><option value="lua">Lua</option><option value="markdown">Markdown (GitHub-flavour)</option><option value="mirc">mIRC</option><option value="nginx">Nginx</option><option value="ntriples">NTriples</option><option value="ocaml">OCaml</option><option value="mllike">OCaml</option><option value="octave">Octave</option><option value="pascal">Pascal</option><option value="pegjs">PEG.js</option><option value="perl">Perl</option><option value="php">PHP</option><option value="pig">Pig</option><option value="null">Plain Text</option><option value="properties">Properties files</option><option value="python" selected="selected">Python</option><option value="puppet">Puppet</option><option value="r">R</option><option value="rst">reStructuredText</option><option value="ruby">Ruby</option><option value="rust">Rust</option><option value="sass">Sass</option><option value="scheme">Scheme</option><option value="css">SCSS</option><option value="shell">Shell</option><option value="sieve">Sieve</option><option value="smalltalk">Smalltalk</option><option value="smarty">Smarty</option><option value="smartymixed">SmartyMixed</option><option value="solr">Solr</option><option value="sparql">SPARQL</option><option value="sql">SQL</option><option value="sql">MariaDB</option><option value="stex">sTeX</option><option value="stex">LaTeX</option><option value="verilog">SystemVerilog</option><option value="tcl">Tcl</option><option value="tiddlywiki">TiddlyWiki </option><option value="tiki">Tiki wiki</option><option value="toml">TOML</option><option value="turtle">Turtle</option><option value="vb">VB.NET</option><option value="vbscript">VBScript</option><option value="velocity">Velocity</option><option value="verilog">Verilog</option><option value="xml">XML</option><option value="xml">HTML</option><option value="xquery">XQuery</option><option value="yaml">YAML</option><option value="z80">Z80</option></select>
662 <option value="apl">APL</option><option value="asterisk">Asterisk</option><option value="clike">C</option><option value="clike">C++</option><option value="cobol">Cobol</option><option value="clike">Java</option><option value="clike">C#</option><option value="clike">Scala</option><option value="clojure">Clojure</option><option value="coffeescript">CoffeeScript</option><option value="commonlisp">Common Lisp</option><option value="css">CSS</option><option value="d">D</option><option value="diff">diff</option><option value="dtd">DTD</option><option value="dylan">Dylan</option><option value="ecl">ECL</option><option value="eiffel">Eiffel</option><option value="erlang">Erlang</option><option value="fortran">Fortran</option><option value="mllike">F#</option><option value="gas">Gas</option><option value="go">GO</option><option value="gherkin">Gherkin</option><option value="go">Go</option><option value="groovy">Groovy</option><option value="haml">HAML</option><option value="haskell">Haskell</option><option value="haxe">Haxe</option><option value="htmlembedded">ASP.NET</option><option value="htmlembedded">Embedded Javascript</option><option value="htmlembedded">JavaServer Pages</option><option value="htmlmixed">HTML</option><option value="http">HTTP</option><option value="jade">Jade</option><option value="javascript">JavaScript</option><option value="javascript">JSON</option><option value="javascript">TypeScript</option><option value="jinja2">Jinja2</option><option value="julia">Julia</option><option value="less">LESS</option><option value="livescript">LiveScript</option><option value="lua">Lua</option><option value="markdown">Markdown (GitHub-flavour)</option><option value="mirc">mIRC</option><option value="nginx">Nginx</option><option value="ntriples">NTriples</option><option value="ocaml">OCaml</option><option value="mllike">OCaml</option><option value="octave">Octave</option><option value="pascal">Pascal</option><option value="pegjs">PEG.js</option><option value="perl">Perl</option><option value="php">PHP</option><option value="pig">Pig</option><option value="null">Plain Text</option><option value="properties">Properties files</option><option value="python" selected="selected">Python</option><option value="puppet">Puppet</option><option value="r">R</option><option value="rst">reStructuredText</option><option value="ruby">Ruby</option><option value="rust">Rust</option><option value="sass">Sass</option><option value="scheme">Scheme</option><option value="css">SCSS</option><option value="shell">Shell</option><option value="sieve">Sieve</option><option value="smalltalk">Smalltalk</option><option value="smarty">Smarty</option><option value="smartymixed">SmartyMixed</option><option value="solr">Solr</option><option value="sparql">SPARQL</option><option value="sql">SQL</option><option value="sql">MariaDB</option><option value="stex">sTeX</option><option value="stex">LaTeX</option><option value="verilog">SystemVerilog</option><option value="tcl">Tcl</option><option value="tiddlywiki">TiddlyWiki </option><option value="tiki">Tiki wiki</option><option value="toml">TOML</option><option value="turtle">Turtle</option><option value="vb">VB.NET</option><option value="vbscript">VBScript</option><option value="velocity">Velocity</option><option value="verilog">Verilog</option><option value="xml">XML</option><option value="xml">HTML</option><option value="xquery">XQuery</option><option value="yaml">YAML</option><option value="z80">Z80</option></select>
663 <script>
663 <script>
664 $(document).ready(function() {
664 $(document).ready(function() {
665 $('#set_mode').select2({
665 $('#set_mode').select2({
666 containerCssClass: 'drop-menu',
666 containerCssClass: 'drop-menu',
667 dropdownCssClass: 'drop-menu-dropdown',
667 dropdownCssClass: 'drop-menu-dropdown',
668 dropdownAutoWidth: true
668 dropdownAutoWidth: true
669 });
669 });
670 });
670 });
671 </script>
671 </script>
672
672
673 <label for="line_wrap">line wraps</label>
673 <label for="line_wrap">line wraps</label>
674 <div class="select2-container drop-menu" id="s2id_line_wrap"><a href="javascript:void(0)" class="select2-choice" tabindex="-1"> <span class="select2-chosen" id="select2-chosen-3">off</span><abbr class="select2-search-choice-close"></abbr> <span class="select2-arrow" role="presentation"><b role="presentation"></b></span></a><label for="s2id_autogen3" class="select2-offscreen">line wraps</label><input class="select2-focusser select2-offscreen" type="text" aria-haspopup="true" role="button" aria-labelledby="select2-chosen-3" id="s2id_autogen3"><div class="select2-drop select2-display-none drop-menu-dropdown"> <div class="select2-search select2-search-hidden select2-offscreen"> <label for="s2id_autogen3_search" class="select2-offscreen">line wraps</label> <input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" class="select2-input" role="combobox" aria-expanded="true" aria-autocomplete="list" aria-owns="select2-results-3" id="s2id_autogen3_search" placeholder=""> </div> <ul class="select2-results" role="listbox" id="select2-results-3"> </ul></div></div><select id="line_wrap" name="line_wrap" tabindex="-1" title="line wraps" style="display: none;">
674 <div class="select2-container drop-menu" id="s2id_line_wrap"><a href="javascript:void(0)" class="select2-choice" tabindex="-1"> <span class="select2-chosen" id="select2-chosen-3">off</span><abbr class="select2-search-choice-close"></abbr> <span class="select2-arrow" role="presentation"><b role="presentation"></b></span></a><label for="s2id_autogen3" class="select2-offscreen">line wraps</label><input class="select2-focusser select2-offscreen" type="text" aria-haspopup="true" role="button" aria-labelledby="select2-chosen-3" id="s2id_autogen3"><div class="select2-drop select2-display-none drop-menu-dropdown"> <div class="select2-search select2-search-hidden select2-offscreen"> <label for="s2id_autogen3_search" class="select2-offscreen">line wraps</label> <input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" class="select2-input" role="combobox" aria-expanded="true" aria-autocomplete="list" aria-owns="select2-results-3" id="s2id_autogen3_search" placeholder=""> </div> <ul class="select2-results" role="listbox" id="select2-results-3"> </ul></div></div><select id="line_wrap" name="line_wrap" tabindex="-1" title="line wraps" style="display: none;">
675 <option value="on">on</option>
675 <option value="on">on</option>
676 <option selected="selected" value="off">off</option>
676 <option selected="selected" value="off">off</option>
677 </select>
677 </select>
678 <script>
678 <script>
679 $(document).ready(function() {
679 $(document).ready(function() {
680 $('#line_wrap').select2({
680 $('#line_wrap').select2({
681 containerCssClass: 'drop-menu',
681 containerCssClass: 'drop-menu',
682 dropdownCssClass: 'drop-menu-dropdown',
682 dropdownCssClass: 'drop-menu-dropdown',
683 dropdownAutoWidth: true,
683 dropdownAutoWidth: true,
684 minimumResultsForSearch: -1
684 minimumResultsForSearch: -1
685
685
686 });
686 });
687 });
687 });
688 </script>
688 </script>
689
689
690 <div id="render_preview" class="btn btn-mini hidden disabled">Preview</div>
690 <div id="render_preview" class="btn btn-mini hidden disabled">Preview</div>
691 </div>
691 </div>
692 </div>
692 </div>
693 <div id="editor_container">
693 <div id="editor_container">
694 <pre id="editor_pre"></pre>
694 <pre id="editor_pre"></pre>
695 <textarea id="editor" name="content" style="display: none;"># -*- coding: utf-8 -*-
695 <textarea id="editor" name="content" style="display: none;"># -*- coding: utf-8 -*-
696
696
697 # Published under Commercial License.
697 # Published under Commercial License.
698 # Read the full license text at https://rhodecode.com/licenses.
698 # Read the full license text at https://rhodecode.com/licenses.
699 """
699 """
700 rhodecode.websetup
700 rhodecode.websetup
701 ~~~~~~~~~~~~~~~~~~
701 ~~~~~~~~~~~~~~~~~~
702
702
703 Weboperations and setup for rhodecode
703 Weboperations and setup for rhodecode
704
704
705 :created_on: Dec 11, 2010
705 :created_on: Dec 11, 2010
706 :author: marcink
706 :author: marcink
707 :copyright: (c) 2013-2015 RhodeCode GmbH.
707 :copyright: (c) 2013-2015 RhodeCode GmbH.
708 :license: Commercial License, see LICENSE for more details.
708 :license: Commercial License, see LICENSE for more details.
709 """
709 """
710
710
711 import logging
711 import logging
712
712
713 from rhodecode.config.environment import load_environment
713 from rhodecode.config.environment import load_environment
714 from rhodecode.lib.db_manage import DbManage
714 from rhodecode.lib.db_manage import DbManage
715 from rhodecode.model.meta import Session
715 from rhodecode.model.meta import Session
716
716
717
717
718 log = logging.getLogger(__name__)
718 log = logging.getLogger(__name__)
719
719
720
720
721 def setup_app(command, conf, vars):
721 def setup_app(command, conf, vars):
722 """Place any commands to setup rhodecode here"""
722 """Place any commands to setup rhodecode here"""
723 dbconf = conf['sqlalchemy.db1.url']
723 dbconf = conf['sqlalchemy.db1.url']
724 dbmanage = DbManage(log_sql=True, dbconf=dbconf, root=conf['here'],
724 dbmanage = DbManage(log_sql=True, dbconf=dbconf, root=conf['here'],
725 tests=False, cli_args=command.options.__dict__)
725 tests=False, cli_args=command.options.__dict__)
726 dbmanage.create_tables(override=True)
726 dbmanage.create_tables(override=True)
727 dbmanage.set_db_version()
727 dbmanage.set_db_version()
728 opts = dbmanage.config_prompt(None)
728 opts = dbmanage.config_prompt(None)
729 dbmanage.create_settings(opts)
729 dbmanage.create_settings(opts)
730 dbmanage.create_default_user()
730 dbmanage.create_default_user()
731 dbmanage.admin_prompt()
731 dbmanage.admin_prompt()
732 dbmanage.create_permissions()
732 dbmanage.create_permissions()
733 dbmanage.populate_default_permissions()
733 dbmanage.populate_default_permissions()
734 Session().commit()
734 Session().commit()
735 load_environment(conf.global_conf, conf.local_conf, initial=True)
735 load_environment(conf.global_conf, conf.local_conf, initial=True)
736 </textarea><div class="CodeMirror cm-s-default CodeMirror-focused"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 5px; left: 34px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" style="position: absolute; padding: 0px; width: 1000px; height: 1em; outline: none;" tabindex="0"></textarea></div><div class="CodeMirror-hscrollbar" style="left: 29px; min-height: 18px;"><div style="height: 100%; min-height: 1px; width: 0px;"></div></div><div class="CodeMirror-vscrollbar" style="display: block; bottom: 0px; min-width: 18px;"><div style="min-width: 1px; height: 554px;"></div></div><div class="CodeMirror-scrollbar-filler"></div><div class="CodeMirror-gutter-filler"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="min-width: 579.350463867188px; margin-left: 29px; min-height: 554px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines"><div style="position: relative; outline: none;"><div class="CodeMirror-measure"><div style="width: 50px; height: 50px; overflow-x: scroll;"></div></div><div style="position: relative; z-index: 1; display: none;"></div><div class="CodeMirror-code"><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">1</div></div><pre><span class="cm-comment"># -*- coding: utf-8 -*-</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">2</div></div><pre>&nbsp;</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">3</div></div><pre><span class="cm-comment"># Published under Commercial License.</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">4</div></div><pre><span class="cm-comment"># Read the full license text at https://rhodecode.com/licenses.</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">5</div></div><pre><span class="cm-string">"""</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">6</div></div><pre><span class="cm-string">rhodecode.websetup</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">7</div></div><pre><span class="cm-string">~~~~~~~~~~~~~~~~~~</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">8</div></div><pre>&nbsp;</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">9</div></div><pre><span class="cm-string">Weboperations and setup for rhodecode</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">10</div></div><pre>&nbsp;</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">11</div></div><pre><span class="cm-string">:created_on: Dec 11, 2010</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">12</div></div><pre><span class="cm-string">:author: marcink</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">13</div></div><pre><span class="cm-string">:copyright: (c) 2013-2015 RhodeCode GmbH.</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">14</div></div><pre><span class="cm-string">:license: Commercial License, see LICENSE for more details.</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">15</div></div><pre><span class="cm-string">"""</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">16</div></div><pre>&nbsp;</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">17</div></div><pre><span class="cm-keyword">import</span> <span class="cm-variable">logging</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">18</div></div><pre>&nbsp;</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">19</div></div><pre><span class="cm-keyword">from</span> <span class="cm-variable">rhodecode</span>.<span class="cm-variable">config</span>.<span class="cm-variable">environment</span> <span class="cm-keyword">import</span> <span class="cm-variable">load_environment</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">20</div></div><pre><span class="cm-keyword">from</span> <span class="cm-variable">rhodecode</span>.<span class="cm-variable">lib</span>.<span class="cm-variable">db_manage</span> <span class="cm-keyword">import</span> <span class="cm-variable">DbManage</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">21</div></div><pre><span class="cm-keyword">from</span> <span class="cm-variable">rhodecode</span>.<span class="cm-variable">model</span>.<span class="cm-variable">meta</span> <span class="cm-keyword">import</span> <span class="cm-variable">Session</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">22</div></div><pre>&nbsp;</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">23</div></div><pre>&nbsp;</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">24</div></div><pre><span class="cm-variable">log</span> = <span class="cm-variable">logging</span>.<span class="cm-variable">getLogger</span>(<span class="cm-variable">__name__</span>) # Intentionally long line to show what will happen if this line does not fit onto the screen. It might have some horizontal scrolling applied or some other fancy mechanism to deal with it.</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">25</div></div><pre>&nbsp;</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">26</div></div><pre>&nbsp;</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">27</div></div><pre><span class="cm-keyword">def</span> <span class="cm-def">setup_app</span>(<span class="cm-variable">command</span>, <span class="cm-variable">conf</span>, <span class="cm-builtin">vars</span>):</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">28</div></div><pre> <span class="cm-string">"""Place any commands to setup rhodecode here"""</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">29</div></div><pre> <span class="cm-variable">dbconf</span> = <span class="cm-variable">conf</span>[<span class="cm-string">'sqlalchemy.db1.url'</span>]</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">30</div></div><pre> <span class="cm-variable">dbmanage</span> = <span class="cm-variable">DbManage</span>(<span class="cm-variable">log_sql</span>=<span class="cm-builtin">True</span>, <span class="cm-variable">dbconf</span>=<span class="cm-variable">dbconf</span>, <span class="cm-variable">root</span>=<span class="cm-variable">conf</span>[<span class="cm-string">'here'</span>],</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">31</div></div><pre> <span class="cm-variable">tests</span>=<span class="cm-builtin">False</span>, <span class="cm-variable">cli_args</span>=<span class="cm-variable">command</span>.<span class="cm-variable">options</span>.<span class="cm-variable">__dict__</span>)</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">32</div></div><pre> <span class="cm-variable">dbmanage</span>.<span class="cm-variable">create_tables</span>(<span class="cm-variable">override</span>=<span class="cm-builtin">True</span>)</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">33</div></div><pre> <span class="cm-variable">dbmanage</span>.<span class="cm-variable">set_db_version</span>()</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">34</div></div><pre> <span class="cm-variable">opts</span> = <span class="cm-variable">dbmanage</span>.<span class="cm-variable">config_prompt</span>(<span class="cm-builtin">None</span>)</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">35</div></div><pre> <span class="cm-variable">dbmanage</span>.<span class="cm-variable">create_settings</span>(<span class="cm-variable">opts</span>)</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">36</div></div><pre> <span class="cm-variable">dbmanage</span>.<span class="cm-variable">create_default_user</span>()</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">37</div></div><pre> <span class="cm-variable">dbmanage</span>.<span class="cm-variable">admin_prompt</span>()</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">38</div></div><pre> <span class="cm-variable">dbmanage</span>.<span class="cm-variable">create_permissions</span>()</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">39</div></div><pre> <span class="cm-variable">dbmanage</span>.<span class="cm-variable">populate_default_permissions</span>()</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">40</div></div><pre> <span class="cm-variable">Session</span>().<span class="cm-variable">commit</span>()</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">41</div></div><pre> <span class="cm-variable">load_environment</span>(<span class="cm-variable">conf</span>.<span class="cm-variable">global_conf</span>, <span class="cm-variable">conf</span>.<span class="cm-variable">local_conf</span>, <span class="cm-variable">initial</span>=<span class="cm-builtin">True</span>)</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">42</div></div><pre>&nbsp;</pre></div></div><div class="CodeMirror-cursor" style="left: 4px; top: 0px; height: 13px;">&nbsp;</div><div class="CodeMirror-cursor CodeMirror-secondarycursor" style="display: none;">&nbsp;</div></div></div></div></div><div style="position: absolute; height: 30px; width: 1px; top: 554px;"></div><div class="CodeMirror-gutters" style="height: 554px;"><div class="CodeMirror-gutter CodeMirror-linenumbers" style="width: 28px;"></div></div></div></div>
736 </textarea><div class="CodeMirror cm-s-default CodeMirror-focused"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 5px; left: 34px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" style="position: absolute; padding: 0px; width: 1000px; height: 1em; outline: none;" tabindex="0"></textarea></div><div class="CodeMirror-hscrollbar" style="left: 29px; min-height: 18px;"><div style="height: 100%; min-height: 1px; width: 0px;"></div></div><div class="CodeMirror-vscrollbar" style="display: block; bottom: 0px; min-width: 18px;"><div style="min-width: 1px; height: 554px;"></div></div><div class="CodeMirror-scrollbar-filler"></div><div class="CodeMirror-gutter-filler"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="min-width: 579.350463867188px; margin-left: 29px; min-height: 554px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines"><div style="position: relative; outline: none;"><div class="CodeMirror-measure"><div style="width: 50px; height: 50px; overflow-x: scroll;"></div></div><div style="position: relative; z-index: 1; display: none;"></div><div class="CodeMirror-code"><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">1</div></div><pre><span class="cm-comment"># -*- coding: utf-8 -*-</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">2</div></div><pre>&nbsp;</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">3</div></div><pre><span class="cm-comment"># Published under Commercial License.</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">4</div></div><pre><span class="cm-comment"># Read the full license text at https://rhodecode.com/licenses.</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">5</div></div><pre><span class="cm-string">"""</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">6</div></div><pre><span class="cm-string">rhodecode.websetup</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">7</div></div><pre><span class="cm-string">~~~~~~~~~~~~~~~~~~</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">8</div></div><pre>&nbsp;</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">9</div></div><pre><span class="cm-string">Weboperations and setup for rhodecode</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">10</div></div><pre>&nbsp;</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">11</div></div><pre><span class="cm-string">:created_on: Dec 11, 2010</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">12</div></div><pre><span class="cm-string">:author: marcink</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">13</div></div><pre><span class="cm-string">:copyright: (c) 2013-2015 RhodeCode GmbH.</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">14</div></div><pre><span class="cm-string">:license: Commercial License, see LICENSE for more details.</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">15</div></div><pre><span class="cm-string">"""</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">16</div></div><pre>&nbsp;</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">17</div></div><pre><span class="cm-keyword">import</span> <span class="cm-variable">logging</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">18</div></div><pre>&nbsp;</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">19</div></div><pre><span class="cm-keyword">from</span> <span class="cm-variable">rhodecode</span>.<span class="cm-variable">config</span>.<span class="cm-variable">environment</span> <span class="cm-keyword">import</span> <span class="cm-variable">load_environment</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">20</div></div><pre><span class="cm-keyword">from</span> <span class="cm-variable">rhodecode</span>.<span class="cm-variable">lib</span>.<span class="cm-variable">db_manage</span> <span class="cm-keyword">import</span> <span class="cm-variable">DbManage</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">21</div></div><pre><span class="cm-keyword">from</span> <span class="cm-variable">rhodecode</span>.<span class="cm-variable">model</span>.<span class="cm-variable">meta</span> <span class="cm-keyword">import</span> <span class="cm-variable">Session</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">22</div></div><pre>&nbsp;</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">23</div></div><pre>&nbsp;</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">24</div></div><pre><span class="cm-variable">log</span> = <span class="cm-variable">logging</span>.<span class="cm-variable">getLogger</span>(<span class="cm-variable">__name__</span>) # Intentionally long line to show what will happen if this line does not fit onto the screen. It might have some horizontal scrolling applied or some other fancy mechanism to deal with it.</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">25</div></div><pre>&nbsp;</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">26</div></div><pre>&nbsp;</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">27</div></div><pre><span class="cm-keyword">def</span> <span class="cm-def">setup_app</span>(<span class="cm-variable">command</span>, <span class="cm-variable">conf</span>, <span class="cm-builtin">vars</span>):</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">28</div></div><pre> <span class="cm-string">"""Place any commands to setup rhodecode here"""</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">29</div></div><pre> <span class="cm-variable">dbconf</span> = <span class="cm-variable">conf</span>[<span class="cm-string">'sqlalchemy.db1.url'</span>]</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">30</div></div><pre> <span class="cm-variable">dbmanage</span> = <span class="cm-variable">DbManage</span>(<span class="cm-variable">log_sql</span>=<span class="cm-builtin">True</span>, <span class="cm-variable">dbconf</span>=<span class="cm-variable">dbconf</span>, <span class="cm-variable">root</span>=<span class="cm-variable">conf</span>[<span class="cm-string">'here'</span>],</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">31</div></div><pre> <span class="cm-variable">tests</span>=<span class="cm-builtin">False</span>, <span class="cm-variable">cli_args</span>=<span class="cm-variable">command</span>.<span class="cm-variable">options</span>.<span class="cm-variable">__dict__</span>)</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">32</div></div><pre> <span class="cm-variable">dbmanage</span>.<span class="cm-variable">create_tables</span>(<span class="cm-variable">override</span>=<span class="cm-builtin">True</span>)</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">33</div></div><pre> <span class="cm-variable">dbmanage</span>.<span class="cm-variable">set_db_version</span>()</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">34</div></div><pre> <span class="cm-variable">opts</span> = <span class="cm-variable">dbmanage</span>.<span class="cm-variable">config_prompt</span>(<span class="cm-builtin">None</span>)</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">35</div></div><pre> <span class="cm-variable">dbmanage</span>.<span class="cm-variable">create_settings</span>(<span class="cm-variable">opts</span>)</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">36</div></div><pre> <span class="cm-variable">dbmanage</span>.<span class="cm-variable">create_default_user</span>()</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">37</div></div><pre> <span class="cm-variable">dbmanage</span>.<span class="cm-variable">admin_prompt</span>()</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">38</div></div><pre> <span class="cm-variable">dbmanage</span>.<span class="cm-variable">create_permissions</span>()</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">39</div></div><pre> <span class="cm-variable">dbmanage</span>.<span class="cm-variable">populate_default_permissions</span>()</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">40</div></div><pre> <span class="cm-variable">Session</span>().<span class="cm-variable">commit</span>()</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">41</div></div><pre> <span class="cm-variable">load_environment</span>(<span class="cm-variable">conf</span>.<span class="cm-variable">global_conf</span>, <span class="cm-variable">conf</span>.<span class="cm-variable">local_conf</span>, <span class="cm-variable">initial</span>=<span class="cm-builtin">True</span>)</pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="position: absolute; left: -29px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 20px;">42</div></div><pre>&nbsp;</pre></div></div><div class="CodeMirror-cursor" style="left: 4px; top: 0px; height: 13px;">&nbsp;</div><div class="CodeMirror-cursor CodeMirror-secondarycursor" style="display: none;">&nbsp;</div></div></div></div></div><div style="position: absolute; height: 30px; width: 1px; top: 554px;"></div><div class="CodeMirror-gutters" style="height: 554px;"><div class="CodeMirror-gutter CodeMirror-linenumbers" style="width: 28px;"></div></div></div></div>
737 <div id="editor_preview"></div>
737 <div id="editor_preview"></div>
738 </div>
738 </div>
739 <div class="message">
739 <div class="message">
740 <label class="codeblock-label">Commit Message</label>
740 <label class="codeblock-label">Commit Message</label>
741 <textarea id="commit" name="message" placeholder="Edited file rhodecode/websetup.py via RhodeCode"></textarea>
741 <textarea id="commit" name="message" placeholder="Edited file rhodecode/websetup.py via RhodeCode"></textarea>
742 </div>
742 </div>
743 </div>
743 </div>
744
744
745
745
746
746
747
747
748
748
749
749
750 <!--
750 <!--
751 Commit with comments
751 Commit with comments
752 -->
752 -->
753
753
754 <h2>Commit with comments</h2>
754 <h2>Commit with comments</h2>
755
755
756 <div class="diff-container" id="diff-container-140360037209920">
756 <div class="diff-container" id="diff-container-140360037209920">
757 <div id="c-4e5ee86997c6-7046e4320b26_target"></div>
757 <div id="c-4e5ee86997c6-7046e4320b26_target"></div>
758 <div id="c-4e5ee86997c6-7046e4320b26" class="diffblock margined comm">
758 <div id="c-4e5ee86997c6-7046e4320b26" class="diffblock margined comm">
759 <div class="code-header">
759 <div class="code-header">
760 <div title="Go back to changed files overview">
760 <div title="Go back to changed files overview">
761 <a href="#changes_box">
761 <a href="#changes_box">
762 <i class="icon-circle-arrow-up"></i>
762 <i class="icon-circle-arrow-up"></i>
763 </a>
763 </a>
764 </div>
764 </div>
765 <div class="changeset_header">
765 <div class="changeset_header">
766 <div class="changeset_file">
766 <div class="changeset_file">
767 <i class="icon-file"></i>
767 <i class="icon-file"></i>
768 <a href="/andersonsantos/rhodecode-dev-fork/files/4e5ee86997c64981d85cf62283af448624e26929/rhodecode/tests/functional/test_compare_local.py">rhodecode/tests/functional/test_compare_local.py</a>
768 <a href="/andersonsantos/rhodecode-dev-fork/files/4e5ee86997c64981d85cf62283af448624e26929/rhodecode/tests/functional/test_compare_local.py">rhodecode/tests/functional/test_compare_local.py</a>
769 </div>
769 </div>
770 <div class="diff-actions">
770 <div class="diff-actions">
771 <a href="/andersonsantos/rhodecode-dev-fork/diff/rhodecode/tests/functional/test_compare_local.py?fulldiff=1&amp;diff1=682135c2e3958d7c84db06d716efe482bd3ce7c6&amp;diff=diff&amp;diff2=4e5ee86997c64981d85cf62283af448624e26929" class="tooltip" title="Show full diff for this file">
771 <a href="/andersonsantos/rhodecode-dev-fork/diff/rhodecode/tests/functional/test_compare_local.py?fulldiff=1&amp;diff1=682135c2e3958d7c84db06d716efe482bd3ce7c6&amp;diff=diff&amp;diff2=4e5ee86997c64981d85cf62283af448624e26929" class="tooltip" title="Show full diff for this file">
772 <img class="icon" src="/images/icons/page_white_go.png">
772 <img class="icon" src="/images/icons/page_white_go.png">
773 </a>
773 </a>
774 <a href="/andersonsantos/rhodecode-dev-fork/diff-2way/rhodecode/tests/functional/test_compare_local.py?fulldiff=1&amp;diff1=682135c2e3958d7c84db06d716efe482bd3ce7c6&amp;diff=diff&amp;diff2=4e5ee86997c64981d85cf62283af448624e26929" class="tooltip" title="Show full side-by-side diff for this file">
774 <a href="/andersonsantos/rhodecode-dev-fork/diff-2way/rhodecode/tests/functional/test_compare_local.py?fulldiff=1&amp;diff1=682135c2e3958d7c84db06d716efe482bd3ce7c6&amp;diff=diff&amp;diff2=4e5ee86997c64981d85cf62283af448624e26929" class="tooltip" title="Show full side-by-side diff for this file">
775 <img class="icon" src="/images/icons/application_double.png">
775 <img class="icon" src="/images/icons/application_double.png">
776 </a>
776 </a>
777 <a href="/andersonsantos/rhodecode-dev-fork/diff/rhodecode/tests/functional/test_compare_local.py?diff1=682135c2e3958d7c84db06d716efe482bd3ce7c6&amp;diff=raw&amp;diff2=4e5ee86997c64981d85cf62283af448624e26929" class="tooltip" title="Raw diff">
777 <a href="/andersonsantos/rhodecode-dev-fork/diff/rhodecode/tests/functional/test_compare_local.py?diff1=682135c2e3958d7c84db06d716efe482bd3ce7c6&amp;diff=raw&amp;diff2=4e5ee86997c64981d85cf62283af448624e26929" class="tooltip" title="Raw diff">
778 <img class="icon" src="/images/icons/page_white.png">
778 <img class="icon" src="/images/icons/page_white.png">
779 </a>
779 </a>
780 <a href="/andersonsantos/rhodecode-dev-fork/diff/rhodecode/tests/functional/test_compare_local.py?diff1=682135c2e3958d7c84db06d716efe482bd3ce7c6&amp;diff=download&amp;diff2=4e5ee86997c64981d85cf62283af448624e26929" class="tooltip" title="Download diff">
780 <a href="/andersonsantos/rhodecode-dev-fork/diff/rhodecode/tests/functional/test_compare_local.py?diff1=682135c2e3958d7c84db06d716efe482bd3ce7c6&amp;diff=download&amp;diff2=4e5ee86997c64981d85cf62283af448624e26929" class="tooltip" title="Download diff">
781 <img class="icon" src="/images/icons/page_save.png">
781 <img class="icon" src="/images/icons/page_save.png">
782 </a>
782 </a>
783 <a class="tooltip" href="/andersonsantos/rhodecode-dev-fork/changeset/4e5ee86997c64981d85cf62283af448624e26929?c-4e5ee86997c6-7046e4320b26=WS%3A1&amp;c-4e5ee86997c6-7046e4320b26=C%3A3#c-4e5ee86997c6-7046e4320b26" title="Ignore white space"><img alt="Ignore white space" class="icon" src="/images/icons/text_strikethrough.png"></a>
783 <a class="tooltip" href="/andersonsantos/rhodecode-dev-fork/changeset/4e5ee86997c64981d85cf62283af448624e26929?c-4e5ee86997c6-7046e4320b26=WS%3A1&amp;c-4e5ee86997c6-7046e4320b26=C%3A3#c-4e5ee86997c6-7046e4320b26" title="Ignore white space"><img alt="Ignore white space" class="icon" src="/images/icons/text_strikethrough.png"></a>
784 <a class="tooltip" href="/andersonsantos/rhodecode-dev-fork/changeset/4e5ee86997c64981d85cf62283af448624e26929?c-4e5ee86997c6-7046e4320b26=C%3A6#c-4e5ee86997c6-7046e4320b26" title="increase diff context to 6 lines"><img alt="increase diff context to 6 lines" class="icon" src="/images/icons/table_add.png"></a>
784 <a class="tooltip" href="/andersonsantos/rhodecode-dev-fork/changeset/4e5ee86997c64981d85cf62283af448624e26929?c-4e5ee86997c6-7046e4320b26=C%3A6#c-4e5ee86997c6-7046e4320b26" title="increase diff context to 6 lines"><img alt="increase diff context to 6 lines" class="icon" src="/images/icons/table_add.png"></a>
785 </div>
785 </div>
786 <span>
786 <span>
787 <label>
787 <label>
788 Show inline comments
788 Show inline comments
789 <input checked="checked" class="show-inline-comments" id="" id_for="c-4e5ee86997c6-7046e4320b26" name="" type="checkbox" value="1">
789 <input checked="checked" class="show-inline-comments" id="" id_for="c-4e5ee86997c6-7046e4320b26" name="" type="checkbox" value="1">
790 </label>
790 </label>
791 </span>
791 </span>
792 </div>
792 </div>
793 </div>
793 </div>
794 <div class="code-body">
794 <div class="code-body">
795 <div class="full_f_path" path="rhodecode/tests/functional/test_compare_local.py"></div>
795 <div class="full_f_path" path="rhodecode/tests/functional/test_compare_local.py"></div>
796 <table class="code-difftable">
796 <table class="code-difftable">
797 <tbody><tr class="line context">
797 <tbody><tr class="line context">
798 <td class="lineno old"><a href="#rhodecodetestsfunctionaltest_compare_localpy_o...">...</a></td>
798 <td class="lineno old"><a href="#rhodecodetestsfunctionaltest_compare_localpy_o...">...</a></td>
799 <td class="lineno new"><a href="#rhodecodetestsfunctionaltest_compare_localpy_n...">...</a></td>
799 <td class="lineno new"><a href="#rhodecodetestsfunctionaltest_compare_localpy_n...">...</a></td>
800 <td class="code ">
800 <td class="code ">
801 <pre>@@ -59,7 +59,7 @@
801 <pre>@@ -59,7 +59,7 @@
802 </pre>
802 </pre>
803 </td>
803 </td>
804 </tr>
804 </tr>
805 <tr class="line unmod">
805 <tr class="line unmod">
806 <td id="rhodecodetestsfunctionaltest_compare_localpy_o59" class="lineno old"><a href="#rhodecodetestsfunctionaltest_compare_localpy_o59">59</a></td>
806 <td id="rhodecodetestsfunctionaltest_compare_localpy_o59" class="lineno old"><a href="#rhodecodetestsfunctionaltest_compare_localpy_o59">59</a></td>
807 <td id="rhodecodetestsfunctionaltest_compare_localpy_n59" class="lineno new"><a href="#rhodecodetestsfunctionaltest_compare_localpy_n59">59</a></td>
807 <td id="rhodecodetestsfunctionaltest_compare_localpy_n59" class="lineno new"><a href="#rhodecodetestsfunctionaltest_compare_localpy_n59">59</a></td>
808 <td class="code ">
808 <td class="code ">
809 <pre> 'tag': 'v0.2.0',
809 <pre> 'tag': 'v0.2.0',
810 </pre>
810 </pre>
811 </td>
811 </td>
812 </tr>
812 </tr>
813 <tr class="line unmod">
813 <tr class="line unmod">
814 <td id="rhodecodetestsfunctionaltest_compare_localpy_o60" class="lineno old"><a href="#rhodecodetestsfunctionaltest_compare_localpy_o60">60</a></td>
814 <td id="rhodecodetestsfunctionaltest_compare_localpy_o60" class="lineno old"><a href="#rhodecodetestsfunctionaltest_compare_localpy_o60">60</a></td>
815 <td id="rhodecodetestsfunctionaltest_compare_localpy_n60" class="lineno new"><a href="#rhodecodetestsfunctionaltest_compare_localpy_n60">60</a></td>
815 <td id="rhodecodetestsfunctionaltest_compare_localpy_n60" class="lineno new"><a href="#rhodecodetestsfunctionaltest_compare_localpy_n60">60</a></td>
816 <td class="code ">
816 <td class="code ">
817 <pre> 'branch': 'default',
817 <pre> 'branch': 'default',
818 </pre>
818 </pre>
819 </td>
819 </td>
820 </tr>
820 </tr>
821 <tr class="line unmod">
821 <tr class="line unmod">
822 <td id="rhodecodetestsfunctionaltest_compare_localpy_o61" class="lineno old"><a href="#rhodecodetestsfunctionaltest_compare_localpy_o61">61</a></td>
822 <td id="rhodecodetestsfunctionaltest_compare_localpy_o61" class="lineno old"><a href="#rhodecodetestsfunctionaltest_compare_localpy_o61">61</a></td>
823 <td id="rhodecodetestsfunctionaltest_compare_localpy_n61" class="lineno new"><a href="#rhodecodetestsfunctionaltest_compare_localpy_n61">61</a></td>
823 <td id="rhodecodetestsfunctionaltest_compare_localpy_n61" class="lineno new"><a href="#rhodecodetestsfunctionaltest_compare_localpy_n61">61</a></td>
824 <td class="code ">
824 <td class="code ">
825 <pre> 'response': # Intentionally long line to show what will happen if this line does not fit onto the screen. It might have some horizontal scrolling applied or some other fancy mechanism to deal with it.
825 <pre> 'response': # Intentionally long line to show what will happen if this line does not fit onto the screen. It might have some horizontal scrolling applied or some other fancy mechanism to deal with it.
826 </pre>
826 </pre>
827 </td>
827 </td>
828 </tr>
828 </tr>
829 <tr class="line del">
829 <tr class="line del">
830 <td id="rhodecodetestsfunctionaltest_compare_localpy_o62" class="lineno old"><a href="#rhodecodetestsfunctionaltest_compare_localpy_o62">62</a></td>
830 <td id="rhodecodetestsfunctionaltest_compare_localpy_o62" class="lineno old"><a href="#rhodecodetestsfunctionaltest_compare_localpy_o62">62</a></td>
831 <td class="lineno new"><a href="#rhodecodetestsfunctionaltest_compare_localpy_n"></a></td>
831 <td class="lineno new"><a href="#rhodecodetestsfunctionaltest_compare_localpy_n"></a></td>
832 <td class="code ">
832 <td class="code ">
833 <pre> '147 files changed: 5700 inserted, 10176 deleted'
833 <pre> '147 files changed: 5700 inserted, 10176 deleted'
834 </pre>
834 </pre>
835 </td>
835 </td>
836 </tr>
836 </tr>
837 <tr class="line add">
837 <tr class="line add">
838 <td class="lineno old"><a href="#rhodecodetestsfunctionaltest_compare_localpy_o"></a></td>
838 <td class="lineno old"><a href="#rhodecodetestsfunctionaltest_compare_localpy_o"></a></td>
839 <td id="rhodecodetestsfunctionaltest_compare_localpy_n62" class="lineno new"><a href="#rhodecodetestsfunctionaltest_compare_localpy_n62">62</a></td>
839 <td id="rhodecodetestsfunctionaltest_compare_localpy_n62" class="lineno new"><a href="#rhodecodetestsfunctionaltest_compare_localpy_n62">62</a></td>
840 <td class="code ">
840 <td class="code ">
841 <pre><ins> </ins> '147 files changed: 5700 inserted, 10176 deleted'
841 <pre><ins> </ins> '147 files changed: 5700 inserted, 10176 deleted'
842 </pre>
842 </pre>
843 </td>
843 </td>
844 </tr>
844 </tr>
845 <tr class="line unmod">
845 <tr class="line unmod">
846 <td id="rhodecodetestsfunctionaltest_compare_localpy_o63" class="lineno old"><a href="#rhodecodetestsfunctionaltest_compare_localpy_o63">63</a></td>
846 <td id="rhodecodetestsfunctionaltest_compare_localpy_o63" class="lineno old"><a href="#rhodecodetestsfunctionaltest_compare_localpy_o63">63</a></td>
847 <td id="rhodecodetestsfunctionaltest_compare_localpy_n63" class="lineno new"><a href="#rhodecodetestsfunctionaltest_compare_localpy_n63">63</a></td>
847 <td id="rhodecodetestsfunctionaltest_compare_localpy_n63" class="lineno new"><a href="#rhodecodetestsfunctionaltest_compare_localpy_n63">63</a></td>
848 <td class="code ">
848 <td class="code ">
849 <pre> },
849 <pre> },
850 </pre>
850 </pre>
851 </td>
851 </td>
852 </tr>
852 </tr>
853 <tr class="line unmod">
853 <tr class="line unmod">
854 <td id="rhodecodetestsfunctionaltest_compare_localpy_o64" class="lineno old"><a href="#rhodecodetestsfunctionaltest_compare_localpy_o64">64</a></td>
854 <td id="rhodecodetestsfunctionaltest_compare_localpy_o64" class="lineno old"><a href="#rhodecodetestsfunctionaltest_compare_localpy_o64">64</a></td>
855 <td id="rhodecodetestsfunctionaltest_compare_localpy_n64" class="lineno new"><a href="#rhodecodetestsfunctionaltest_compare_localpy_n64">64</a></td>
855 <td id="rhodecodetestsfunctionaltest_compare_localpy_n64" class="lineno new"><a href="#rhodecodetestsfunctionaltest_compare_localpy_n64">64</a></td>
856 <td class="code ">
856 <td class="code ">
857 <pre> 'git': {
857 <pre> 'git': {
858 </pre>
858 </pre>
859 </td>
859 </td>
860 </tr>
860 </tr>
861 <tr class="line unmod">
861 <tr class="line unmod">
862 <td id="rhodecodetestsfunctionaltest_compare_localpy_o65" class="lineno old"><a href="#rhodecodetestsfunctionaltest_compare_localpy_o65">65</a></td>
862 <td id="rhodecodetestsfunctionaltest_compare_localpy_o65" class="lineno old"><a href="#rhodecodetestsfunctionaltest_compare_localpy_o65">65</a></td>
863 <td id="rhodecodetestsfunctionaltest_compare_localpy_n65" class="lineno new"><a href="#rhodecodetestsfunctionaltest_compare_localpy_n65">65</a></td>
863 <td id="rhodecodetestsfunctionaltest_compare_localpy_n65" class="lineno new"><a href="#rhodecodetestsfunctionaltest_compare_localpy_n65">65</a></td>
864 <td class="code ">
864 <td class="code ">
865 <pre> 'tag': 'v0.2.2',
865 <pre> 'tag': 'v0.2.2',
866 </pre>
866 </pre>
867 </td>
867 </td>
868 </tr>
868 </tr>
869 <tr class="line context">
869 <tr class="line context">
870 <td class="lineno old"><a href="#rhodecodetestsfunctionaltest_compare_localpy_o...">...</a></td>
870 <td class="lineno old"><a href="#rhodecodetestsfunctionaltest_compare_localpy_o...">...</a></td>
871 <td class="lineno new"><a href="#rhodecodetestsfunctionaltest_compare_localpy_n...">...</a></td>
871 <td class="lineno new"><a href="#rhodecodetestsfunctionaltest_compare_localpy_n...">...</a></td>
872 <td class="code ">
872 <td class="code ">
873 <pre>@@ -77,9 +77,11 @@
873 <pre>@@ -77,9 +77,11 @@
874 </pre>
874 </pre>
875 </td>
875 </td>
876 </tr>
876 </tr>
877 <tr class="line unmod">
877 <tr class="line unmod">
878 <td id="rhodecodetestsfunctionaltest_compare_localpy_o77" class="lineno old"><a href="#rhodecodetestsfunctionaltest_compare_localpy_o77">77</a></td>
878 <td id="rhodecodetestsfunctionaltest_compare_localpy_o77" class="lineno old"><a href="#rhodecodetestsfunctionaltest_compare_localpy_o77">77</a></td>
879 <td id="rhodecodetestsfunctionaltest_compare_localpy_n77" class="lineno new"><a href="#rhodecodetestsfunctionaltest_compare_localpy_n77">77</a></td>
879 <td id="rhodecodetestsfunctionaltest_compare_localpy_n77" class="lineno new"><a href="#rhodecodetestsfunctionaltest_compare_localpy_n77">77</a></td>
880 <td class="code ">
880 <td class="code ">
881 <pre> target_ref=revisions[backend.alias]['tag'],
881 <pre> target_ref=revisions[backend.alias]['tag'],
882 </pre>
882 </pre>
883 </td>
883 </td>
884 </tr>
884 </tr>
885 <tr class="line unmod">
885 <tr class="line unmod">
886 <td id="rhodecodetestsfunctionaltest_compare_localpy_o78" class="lineno old"><a href="#rhodecodetestsfunctionaltest_compare_localpy_o78">78</a></td>
886 <td id="rhodecodetestsfunctionaltest_compare_localpy_o78" class="lineno old"><a href="#rhodecodetestsfunctionaltest_compare_localpy_o78">78</a></td>
887 <td id="rhodecodetestsfunctionaltest_compare_localpy_n78" class="lineno new"><a href="#rhodecodetestsfunctionaltest_compare_localpy_n78">78</a></td>
887 <td id="rhodecodetestsfunctionaltest_compare_localpy_n78" class="lineno new"><a href="#rhodecodetestsfunctionaltest_compare_localpy_n78">78</a></td>
888 <td class="code ">
888 <td class="code ">
889 <pre> ))
889 <pre> ))
890 </pre>
890 </pre>
891 </td>
891 </td>
892 </tr><tr id="comment-tr-3754" class="inline-comments"><td></td><td></td><td>
892 </tr><tr id="comment-tr-3754" class="inline-comments"><td></td><td></td><td>
893
893
894 <div class="comment" id="comment-3754" line="n78">
894 <div class="comment" id="comment-3754" line="n78">
895 <div class="comment-wrapp">
895 <div class="comment-wrapp">
896 <div class="meta">
896 <div class="meta">
897 <span class="gravatar">
897 <span class="gravatar">
898 <img src="https://secure.gravatar.com/avatar/72706ebd30734451af9ff3fb59f05ff1?d=identicon&amp;s=40" height="20" width="20">
898 <img src="https://secure.gravatar.com/avatar/72706ebd30734451af9ff3fb59f05ff1?d=identicon&amp;s=40" height="20" width="20">
899 </span>
899 </span>
900 <span class="user">
900 <span class="user">
901 anderson
901 anderson
902 </span>
902 </span>
903 <span class="date">
903 <span class="date">
904 just now |
904 just now |
905 </span>
905 </span>
906 <span class="status-change">
906 <span class="status-change">
907 Comment on commit
907 Comment on commit
908 </span>
908 </span>
909 <a class="permalink" href="#comment-3754"></a>
909 <a class="permalink" href="#comment-3754"></a>
910 </div>
910 </div>
911 <div class="text">
911 <div class="text">
912 <div class="rst-block"><p>commented line
912 <div class="rst-block"><p>commented line
913 with multiple lines</p>
913 with multiple lines</p>
914 </div>
914 </div>
915 </div>
915 </div>
916 </div>
916 </div>
917 </div><div class="add-comment"><span class="btn btn-default">Add another comment</span></div>
917 </div><div class="add-comment"><span class="btn btn-default">Add another comment</span></div>
918
918
919 </td></tr>
919 </td></tr>
920 <tr class="line unmod">
920 <tr class="line unmod">
921 <td id="rhodecodetestsfunctionaltest_compare_localpy_o79" class="lineno old"><a href="#rhodecodetestsfunctionaltest_compare_localpy_o79">79</a></td>
921 <td id="rhodecodetestsfunctionaltest_compare_localpy_o79" class="lineno old"><a href="#rhodecodetestsfunctionaltest_compare_localpy_o79">79</a></td>
922 <td id="rhodecodetestsfunctionaltest_compare_localpy_n79" class="lineno new"><a href="#rhodecodetestsfunctionaltest_compare_localpy_n79">79</a></td>
922 <td id="rhodecodetestsfunctionaltest_compare_localpy_n79" class="lineno new"><a href="#rhodecodetestsfunctionaltest_compare_localpy_n79">79</a></td>
923 <td class="code ">
923 <td class="code ">
924 <pre></pre>
924 <pre></pre>
925 </td>
925 </td>
926 </tr>
926 </tr>
927 <tr class="line del form-open hl-comment">
927 <tr class="line del form-open hl-comment">
928 <td id="rhodecodetestsfunctionaltest_compare_localpy_o80" class="lineno old"><a href="#rhodecodetestsfunctionaltest_compare_localpy_o80">80</a></td>
928 <td id="rhodecodetestsfunctionaltest_compare_localpy_o80" class="lineno old"><a href="#rhodecodetestsfunctionaltest_compare_localpy_o80">80</a></td>
929 <td class="lineno new"><a href="#rhodecodetestsfunctionaltest_compare_localpy_n"></a></td>
929 <td class="lineno new"><a href="#rhodecodetestsfunctionaltest_compare_localpy_n"></a></td>
930 <td class="code ">
930 <td class="code ">
931 <pre> response.mustcontain('%s@%s' % (<del>backend.repo_name,</del>
931 <pre> response.mustcontain('%s@%s' % (<del>backend.repo_name,</del>
932 </pre>
932 </pre>
933 </td>
933 </td>
934 </tr><tr id="comment-tr-undefined" class="comment-form-inline"><td></td><td></td><td>
934 </tr><tr id="comment-tr-undefined" class="comment-form-inline"><td></td><td></td><td>
935 <div class="comment-inline-form ac">
935 <div class="comment-inline-form ac">
936 <div class="overlay"><div class="overlay-text">Submitting...</div></div>
936 <div class="overlay"><div class="overlay-text">Submitting...</div></div>
937 <form action="#" class="inline-form" method="get">
937 <form action="#" class="inline-form" method="get">
938 <div id="edit-container_o80" class="clearfix">
938 <div id="edit-container_o80" class="clearfix">
939 <div class="comment-title pull-left">
939 <div class="comment-title pull-left">
940 Commenting on line o80.
940 Commenting on line o80.
941 </div>
941 </div>
942 <div class="comment-help pull-right">
942 <div class="comment-help pull-right">
943 Comments parsed using <a href="http://docutils.sourceforge.net/docs/user/rst/quickref.html">RST</a> syntax with <span class="tooltip" title="Use @username inside this text to send notification to this RhodeCode user">@mention</span> support.
943 Comments parsed using <a href="http://docutils.sourceforge.net/docs/user/rst/quickref.html">RST</a> syntax with <span class="tooltip" title="Use @username inside this text to send notification to this RhodeCode user">@mention</span> support.
944 </div>
944 </div>
945 <div style="clear: both"></div>
945 <div style="clear: both"></div>
946 <textarea id="text_o80" name="text" class="comment-block-ta ac-input" autocomplete="off"></textarea>
946 <textarea id="text_o80" name="text" class="comment-block-ta ac-input" autocomplete="off"></textarea>
947 </div>
947 </div>
948 <div id="preview-container_o80" class="clearfix" style="display: none;">
948 <div id="preview-container_o80" class="clearfix" style="display: none;">
949 <div class="comment-help">
949 <div class="comment-help">
950 Comment preview
950 Comment preview
951 </div>
951 </div>
952 <div id="preview-box_o80" class="preview-box"></div>
952 <div id="preview-box_o80" class="preview-box"></div>
953 </div>
953 </div>
954 <div class="comment-button pull-right">
954 <div class="comment-button pull-right">
955 <input type="hidden" name="f_path" value="rhodecode/tests/functional/test_compare_local.py">
955 <input type="hidden" name="f_path" value="rhodecode/tests/functional/test_compare_local.py">
956 <input type="hidden" name="line" value="o80">
956 <input type="hidden" name="line" value="o80">
957 <div id="preview-btn_o80" class="btn btn-default">Preview</div>
957 <div id="preview-btn_o80" class="btn btn-default">Preview</div>
958 <div id="edit-btn_o80" class="btn" style="display: none;">Edit</div>
958 <div id="edit-btn_o80" class="btn" style="display: none;">Edit</div>
959 <input class="btn btn-success save-inline-form" id="save" name="save" type="submit" value="Comment">
959 <input class="btn btn-success save-inline-form" id="save" name="save" type="submit" value="Comment">
960 </div>
960 </div>
961 <div class="comment-button hide-inline-form-button">
961 <div class="comment-button hide-inline-form-button">
962 <input class="btn hide-inline-form" id="hide-inline-form" name="hide-inline-form" type="reset" value="Cancel">
962 <input class="btn hide-inline-form" id="hide-inline-form" name="hide-inline-form" type="reset" value="Cancel">
963 </div>
963 </div>
964 </form>
964 </form>
965 </div>
965 </div>
966 </td></tr>
966 </td></tr>
967 <tr class="line add">
967 <tr class="line add">
968 <td class="lineno old"><a href="#rhodecodetestsfunctionaltest_compare_localpy_o"></a></td>
968 <td class="lineno old"><a href="#rhodecodetestsfunctionaltest_compare_localpy_o"></a></td>
969 <td id="rhodecodetestsfunctionaltest_compare_localpy_n80" class="lineno new"><a href="#rhodecodetestsfunctionaltest_compare_localpy_n80">80</a></td>
969 <td id="rhodecodetestsfunctionaltest_compare_localpy_n80" class="lineno new"><a href="#rhodecodetestsfunctionaltest_compare_localpy_n80">80</a></td>
970 <td class="code ">
970 <td class="code ">
971 <pre> response.mustcontain('%s@%s' % (
971 <pre> response.mustcontain('%s@%s' % (
972 </pre>
972 </pre>
973 </td>
973 </td>
974 </tr>
974 </tr>
975 <tr class="line add">
975 <tr class="line add">
976 <td class="lineno old"><a href="#rhodecodetestsfunctionaltest_compare_localpy_o"></a></td>
976 <td class="lineno old"><a href="#rhodecodetestsfunctionaltest_compare_localpy_o"></a></td>
977 <td id="rhodecodetestsfunctionaltest_compare_localpy_n81" class="lineno new"><a href="#rhodecodetestsfunctionaltest_compare_localpy_n81">81</a></td>
977 <td id="rhodecodetestsfunctionaltest_compare_localpy_n81" class="lineno new"><a href="#rhodecodetestsfunctionaltest_compare_localpy_n81">81</a></td>
978 <td class="code ">
978 <td class="code ">
979 <pre> backend.repo_name,
979 <pre> backend.repo_name,
980 </pre>
980 </pre>
981 </td>
981 </td>
982 </tr>
982 </tr>
983 <tr class="line unmod">
983 <tr class="line unmod">
984 <td id="rhodecodetestsfunctionaltest_compare_localpy_o81" class="lineno old"><a href="#rhodecodetestsfunctionaltest_compare_localpy_o81">81</a></td>
984 <td id="rhodecodetestsfunctionaltest_compare_localpy_o81" class="lineno old"><a href="#rhodecodetestsfunctionaltest_compare_localpy_o81">81</a></td>
985 <td id="rhodecodetestsfunctionaltest_compare_localpy_n82" class="lineno new"><a href="#rhodecodetestsfunctionaltest_compare_localpy_n82">82</a></td>
985 <td id="rhodecodetestsfunctionaltest_compare_localpy_n82" class="lineno new"><a href="#rhodecodetestsfunctionaltest_compare_localpy_n82">82</a></td>
986 <td class="code ">
986 <td class="code ">
987 <pre> revisions[backend.alias]['branch']))
987 <pre> revisions[backend.alias]['branch']))
988 </pre>
988 </pre>
989 </td>
989 </td>
990 </tr>
990 </tr>
991 <tr class="line del">
991 <tr class="line del">
992 <td id="rhodecodetestsfunctionaltest_compare_localpy_o82" class="lineno old"><a href="#rhodecodetestsfunctionaltest_compare_localpy_o82">82</a></td>
992 <td id="rhodecodetestsfunctionaltest_compare_localpy_o82" class="lineno old"><a href="#rhodecodetestsfunctionaltest_compare_localpy_o82">82</a></td>
993 <td class="lineno new"><a href="#rhodecodetestsfunctionaltest_compare_localpy_n"></a></td>
993 <td class="lineno new"><a href="#rhodecodetestsfunctionaltest_compare_localpy_n"></a></td>
994 <td class="code ">
994 <td class="code ">
995 <pre> response.mustcontain('%s@%s' % (<del>backend.repo_name,</del>
995 <pre> response.mustcontain('%s@%s' % (<del>backend.repo_name,</del>
996 </pre>
996 </pre>
997 </td>
997 </td>
998 </tr>
998 </tr>
999 <tr class="line add">
999 <tr class="line add">
1000 <td class="lineno old"><a href="#rhodecodetestsfunctionaltest_compare_localpy_o"></a></td>
1000 <td class="lineno old"><a href="#rhodecodetestsfunctionaltest_compare_localpy_o"></a></td>
1001 <td id="rhodecodetestsfunctionaltest_compare_localpy_n83" class="lineno new"><a href="#rhodecodetestsfunctionaltest_compare_localpy_n83">83</a></td>
1001 <td id="rhodecodetestsfunctionaltest_compare_localpy_n83" class="lineno new"><a href="#rhodecodetestsfunctionaltest_compare_localpy_n83">83</a></td>
1002 <td class="code ">
1002 <td class="code ">
1003 <pre> response.mustcontain('%s@%s' % (
1003 <pre> response.mustcontain('%s@%s' % (
1004 </pre>
1004 </pre>
1005 </td>
1005 </td>
1006 </tr>
1006 </tr>
1007 <tr class="line add">
1007 <tr class="line add">
1008 <td class="lineno old"><a href="#rhodecodetestsfunctionaltest_compare_localpy_o"></a></td>
1008 <td class="lineno old"><a href="#rhodecodetestsfunctionaltest_compare_localpy_o"></a></td>
1009 <td id="rhodecodetestsfunctionaltest_compare_localpy_n84" class="lineno new"><a href="#rhodecodetestsfunctionaltest_compare_localpy_n84">84</a></td>
1009 <td id="rhodecodetestsfunctionaltest_compare_localpy_n84" class="lineno new"><a href="#rhodecodetestsfunctionaltest_compare_localpy_n84">84</a></td>
1010 <td class="code ">
1010 <td class="code ">
1011 <pre> backend.repo_name,
1011 <pre> backend.repo_name,
1012 </pre>
1012 </pre>
1013 </td>
1013 </td>
1014 </tr>
1014 </tr>
1015 <tr class="line unmod">
1015 <tr class="line unmod">
1016 <td id="rhodecodetestsfunctionaltest_compare_localpy_o83" class="lineno old"><a href="#rhodecodetestsfunctionaltest_compare_localpy_o83">83</a></td>
1016 <td id="rhodecodetestsfunctionaltest_compare_localpy_o83" class="lineno old"><a href="#rhodecodetestsfunctionaltest_compare_localpy_o83">83</a></td>
1017 <td id="rhodecodetestsfunctionaltest_compare_localpy_n85" class="lineno new"><a href="#rhodecodetestsfunctionaltest_compare_localpy_n85">85</a></td>
1017 <td id="rhodecodetestsfunctionaltest_compare_localpy_n85" class="lineno new"><a href="#rhodecodetestsfunctionaltest_compare_localpy_n85">85</a></td>
1018 <td class="code ">
1018 <td class="code ">
1019 <pre> revisions[backend.alias]['tag']))
1019 <pre> revisions[backend.alias]['tag']))
1020 </pre>
1020 </pre>
1021 </td>
1021 </td>
1022 </tr>
1022 </tr>
1023 <tr class="line unmod">
1023 <tr class="line unmod">
1024 <td id="rhodecodetestsfunctionaltest_compare_localpy_o84" class="lineno old"><a href="#rhodecodetestsfunctionaltest_compare_localpy_o84">84</a></td>
1024 <td id="rhodecodetestsfunctionaltest_compare_localpy_o84" class="lineno old"><a href="#rhodecodetestsfunctionaltest_compare_localpy_o84">84</a></td>
1025 <td id="rhodecodetestsfunctionaltest_compare_localpy_n86" class="lineno new"><a href="#rhodecodetestsfunctionaltest_compare_localpy_n86">86</a></td>
1025 <td id="rhodecodetestsfunctionaltest_compare_localpy_n86" class="lineno new"><a href="#rhodecodetestsfunctionaltest_compare_localpy_n86">86</a></td>
1026 <td class="code ">
1026 <td class="code ">
1027 <pre> response.mustcontain(revisions[backend.alias]['response'])
1027 <pre> response.mustcontain(revisions[backend.alias]['response'])
1028 </pre>
1028 </pre>
1029 </td>
1029 </td>
1030 </tr>
1030 </tr>
1031 <tr class="line unmod">
1031 <tr class="line unmod">
1032 <td id="rhodecodetestsfunctionaltest_compare_localpy_o85" class="lineno old"><a href="#rhodecodetestsfunctionaltest_compare_localpy_o85">85</a></td>
1032 <td id="rhodecodetestsfunctionaltest_compare_localpy_o85" class="lineno old"><a href="#rhodecodetestsfunctionaltest_compare_localpy_o85">85</a></td>
1033 <td id="rhodecodetestsfunctionaltest_compare_localpy_n87" class="lineno new"><a href="#rhodecodetestsfunctionaltest_compare_localpy_n87">87</a></td>
1033 <td id="rhodecodetestsfunctionaltest_compare_localpy_n87" class="lineno new"><a href="#rhodecodetestsfunctionaltest_compare_localpy_n87">87</a></td>
1034 <td class="code ">
1034 <td class="code ">
1035 <pre></pre>
1035 <pre></pre>
1036 </td>
1036 </td>
1037 </tr>
1037 </tr>
1038 </tbody></table>
1038 </tbody></table>
1039 </div>
1039 </div>
1040 </div>
1040 </div>
1041 </div>
1041 </div>
1042
1042
1043
1043
1044
1044
1045 <!--
1045 <!--
1046 Side-by-side diff
1046 Side-by-side diff
1047 -->
1047 -->
1048
1048
1049 <h2>Side-by-side diff</h2>
1049 <h2>Side-by-side diff</h2>
1050
1050
1051 <div class="box">
1051 <div class="box">
1052 <div class="diff-container" style="overflow-x: hidden">
1052 <div class="diff-container" style="overflow-x: hidden">
1053 <div class="diffblock comm" style="margin:3px; padding:1px">
1053 <div class="diffblock comm" style="margin:3px; padding:1px">
1054 <div class="code-header">
1054 <div class="code-header">
1055 <div class="changeset_header">
1055 <div class="changeset_header">
1056 <div class="changeset_file">
1056 <div class="changeset_file">
1057 <i class="icon-file"></i>
1057 <i class="icon-file"></i>
1058 <a href="/pygments/files/ea295cfb622620f5ba13e226ec531e3fe5296399/tests/test_basic_api.py">tests/test_basic_api.py</a>
1058 <a href="/pygments/files/ea295cfb622620f5ba13e226ec531e3fe5296399/tests/test_basic_api.py">tests/test_basic_api.py</a>
1059 [mode: <span id="selected_mode">python</span>]
1059 [mode: <span id="selected_mode">python</span>]
1060 </div>
1060 </div>
1061 <div class="diff-actions">
1061 <div class="diff-actions">
1062 <a href="/pygments/diff/tests/test_basic_api.py?diff2=ea295cfb622620f5ba13e226ec531e3fe5296399&amp;diff=diff&amp;diff1=de45f950b669e2d991c4ba512fa6fe450c6616db&amp;fulldiff=1" class="tooltip" title="Show full diff for this file">
1062 <a href="/pygments/diff/tests/test_basic_api.py?diff2=ea295cfb622620f5ba13e226ec531e3fe5296399&amp;diff=diff&amp;diff1=de45f950b669e2d991c4ba512fa6fe450c6616db&amp;fulldiff=1" class="tooltip" title="Show full diff for this file">
1063 <img class="icon" src="/images/icons/page_white_go.png">
1063 <img class="icon" src="/images/icons/page_white_go.png">
1064 </a>
1064 </a>
1065 <a href="/pygments/diff-2way/tests/test_basic_api.py?diff2=ea295cfb622620f5ba13e226ec531e3fe5296399&amp;diff=diff&amp;diff1=de45f950b669e2d991c4ba512fa6fe450c6616db&amp;fulldiff=1" class="tooltip" title="Show full side-by-side diff for this file" tt_title="Show full side-by-side diff for this file">
1065 <a href="/pygments/diff-2way/tests/test_basic_api.py?diff2=ea295cfb622620f5ba13e226ec531e3fe5296399&amp;diff=diff&amp;diff1=de45f950b669e2d991c4ba512fa6fe450c6616db&amp;fulldiff=1" class="tooltip" title="Show full side-by-side diff for this file" tt_title="Show full side-by-side diff for this file">
1066 <img class="icon" src="/images/icons/application_double.png">
1066 <img class="icon" src="/images/icons/application_double.png">
1067 </a>
1067 </a>
1068 <a href="/pygments/diff/tests/test_basic_api.py?diff2=ea295cfb622620f5ba13e226ec531e3fe5296399&amp;diff1=de45f950b669e2d991c4ba512fa6fe450c6616db&amp;diff=raw" class="tooltip" title="Raw diff">
1068 <a href="/pygments/diff/tests/test_basic_api.py?diff2=ea295cfb622620f5ba13e226ec531e3fe5296399&amp;diff1=de45f950b669e2d991c4ba512fa6fe450c6616db&amp;diff=raw" class="tooltip" title="Raw diff">
1069 <img class="icon" src="/images/icons/page_white.png">
1069 <img class="icon" src="/images/icons/page_white.png">
1070 </a>
1070 </a>
1071 <a href="/pygments/diff/tests/test_basic_api.py?diff2=ea295cfb622620f5ba13e226ec531e3fe5296399&amp;diff1=de45f950b669e2d991c4ba512fa6fe450c6616db&amp;diff=download" class="tooltip" title="Download diff">
1071 <a href="/pygments/diff/tests/test_basic_api.py?diff2=ea295cfb622620f5ba13e226ec531e3fe5296399&amp;diff1=de45f950b669e2d991c4ba512fa6fe450c6616db&amp;diff=download" class="tooltip" title="Download diff">
1072 <img class="icon" src="/images/icons/page_save.png">
1072 <img class="icon" src="/images/icons/page_save.png">
1073 </a>
1073 </a>
1074 <label><input id="ignorews" name="ignorews" type="checkbox" value="1">ignore white space</label>
1074 <label><input id="ignorews" name="ignorews" type="checkbox" value="1">ignore white space</label>
1075 <label><input id="edit_mode" name="edit_mode" type="checkbox" value="1">turn on edit mode</label>
1075 <label><input id="edit_mode" name="edit_mode" type="checkbox" value="1">turn on edit mode</label>
1076
1076
1077 </div>
1077 </div>
1078 <div style="float: right; padding: 0px 10px 0px 0px">
1078 <div style="float: right; padding: 0px 10px 0px 0px">
1079 r1538:de45f950b669 ... r1539:ea295cfb6226
1079 r1538:de45f950b669 ... r1539:ea295cfb6226
1080 </div>
1080 </div>
1081 </div>
1081 </div>
1082 </div>
1082 </div>
1083 <div id="compare"></div>
1083 <div id="compare"></div>
1084 </div>
1084 </div>
1085 </div>
1085 </div>
1086
1086
1087 <script>
1087 <script>
1088 $(document).ready(function () {
1088 $(document).ready(function () {
1089 var example_lines = '1\n2\n3\n4\n5\n6\n7\n8\n9\n \n';
1089 var example_lines = '1\n2\n3\n4\n5\n6\n7\n8\n9\n \n';
1090
1090
1091 $('#compare').mergely({
1091 $('#compare').mergely({
1092 width: 'auto',
1092 width: 'auto',
1093 height: '600',
1093 height: '600',
1094 fgcolor: {a:'#ddffdd',c:'#cccccc',d:'#ffdddd'},
1094 fgcolor: {a:'#ddffdd',c:'#cccccc',d:'#ffdddd'},
1095 bgcolor: '#fff',
1095 bgcolor: '#fff',
1096 viewport: true,
1096 viewport: true,
1097 cmsettings: {mode: 'text/plain', readOnly: true, lineWrapping: false, lineNumbers: true},
1097 cmsettings: {mode: 'text/plain', readOnly: true, lineWrapping: false, lineNumbers: true},
1098 lhs: function(setValue) {
1098 lhs: function(setValue) {
1099 if("False" == "True"){
1099 if("False" == "True"){
1100 setValue('Binary file')
1100 setValue('Binary file')
1101 }
1101 }
1102 else if("MercurialCommit" == "EmptyCommit"){
1102 else if("MercurialCommit" == "EmptyCommit"){
1103 setValue('');
1103 setValue('');
1104 }
1104 }
1105 else{
1105 else{
1106 var left_value = example_lines.slice(0, 10) +
1106 var left_value = example_lines.slice(0, 10) +
1107 '123456789 '.repeat(10) +
1107 '123456789 '.repeat(10) +
1108 '\n'+
1108 '\n'+
1109 example_lines.slice(10, 20);
1109 example_lines.slice(10, 20);
1110 setValue(left_value + example_lines.repeat(9));
1110 setValue(left_value + example_lines.repeat(9));
1111 }
1111 }
1112
1112
1113 },
1113 },
1114 rhs: function(setValue) {
1114 rhs: function(setValue) {
1115 if("False" == "True"){
1115 if("False" == "True"){
1116 setValue('Binary file')
1116 setValue('Binary file')
1117 }
1117 }
1118 else if("MercurialCommit" == "EmptyCommit"){
1118 else if("MercurialCommit" == "EmptyCommit"){
1119 setValue('');
1119 setValue('');
1120 }
1120 }
1121 else{
1121 else{
1122 var right_value = example_lines +
1122 var right_value = example_lines +
1123 example_lines.slice(0, 8) +
1123 example_lines.slice(0, 8) +
1124 'abcdefghi '.repeat(10) +
1124 'abcdefghi '.repeat(10) +
1125 '\n'+
1125 '\n'+
1126 example_lines.slice(8, 20);
1126 example_lines.slice(8, 20);
1127 setValue(right_value + example_lines.repeat(9));
1127 setValue(right_value + example_lines.repeat(9));
1128 }
1128 }
1129 },
1129 },
1130 });
1130 });
1131
1131
1132 var detected_mode = detectCodeMirrorModeFromExt('test_basic_api.py', true);
1132 var detected_mode = detectCodeMirrorModeFromExt('test_basic_api.py', true);
1133 if(detected_mode){
1133 if(detected_mode){
1134 setCodeMirrorMode($('#compare').mergely('cm', 'lhs'), detected_mode);
1134 setCodeMirrorMode($('#compare').mergely('cm', 'lhs'), detected_mode);
1135 setCodeMirrorMode($('#compare').mergely('cm', 'rhs'), detected_mode);
1135 setCodeMirrorMode($('#compare').mergely('cm', 'rhs'), detected_mode);
1136 $('#selected_mode').html(detected_mode);
1136 $('#selected_mode').html(detected_mode);
1137 }
1137 }
1138
1138
1139 $('#ignorews').change(function(e){
1139 $('#ignorews').change(function(e){
1140 var val = e.currentTarget.checked;
1140 var val = e.currentTarget.checked;
1141 $('#compare').mergely('options', {ignorews: val});
1141 $('#compare').mergely('options', {ignorews: val});
1142 $('#compare').mergely('update');
1142 $('#compare').mergely('update');
1143 });
1143 });
1144 $('#edit_mode').change(function(e){
1144 $('#edit_mode').change(function(e){
1145 var val = !e.currentTarget.checked;
1145 var val = !e.currentTarget.checked;
1146 $('#compare').mergely('cm', 'lhs').setOption('readOnly', val);
1146 $('#compare').mergely('cm', 'lhs').setOption('readOnly', val);
1147 $('#compare').mergely('cm', 'rhs').setOption('readOnly', val);
1147 $('#compare').mergely('cm', 'rhs').setOption('readOnly', val);
1148 $('#compare').mergely('update');
1148 $('#compare').mergely('update');
1149 })
1149 })
1150 });
1150 });
1151 </script>
1151 </script>
1152
1152
1153 </div>
1153 </div>
1154
1154
1155 <!-- end examples -->
1155 <!-- end examples -->
1156
1156
1157 </div>
1157 </div>
1158 </div>
1158 </div>
1159 </div>
1159 </div>
1160 </%def>
1160 </%def>
@@ -1,961 +1,961 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2 <%inherit file="/debug_style/index.html"/>
2 <%inherit file="/debug_style/index.html"/>
3
3
4 <%def name="breadcrumbs_links()">
4 <%def name="breadcrumbs_links()">
5 ${h.link_to(_('Style'), h.url('debug_style_home'))}
5 ${h.link_to(_('Style'), h.route_path('debug_style_home'))}
6 &raquo;
6 &raquo;
7 ${c.active}
7 ${c.active}
8 </%def>
8 </%def>
9
9
10
10
11 <%def name="real_main()">
11 <%def name="real_main()">
12 <div class="box">
12 <div class="box">
13 <div class="title">
13 <div class="title">
14 ${self.breadcrumbs()}
14 ${self.breadcrumbs()}
15 </div>
15 </div>
16
16
17 <div class='sidebar-col-wrapper'>
17 <div class='sidebar-col-wrapper'>
18 ${self.sidebar()}
18 ${self.sidebar()}
19
19
20 <div class="main-content">
20 <div class="main-content">
21
21
22 <h2>Collapsable Content</h2>
22 <h2>Collapsable Content</h2>
23 <p>Where a section may have a very long list of information, it can be desirable to use collapsable content. There is a premade function for showing/hiding elements, though its use may or may not be practical, depending on the situation. Use it, or don't, on a case-by-case basis.</p>
23 <p>Where a section may have a very long list of information, it can be desirable to use collapsable content. There is a premade function for showing/hiding elements, though its use may or may not be practical, depending on the situation. Use it, or don't, on a case-by-case basis.</p>
24
24
25 <p><strong>To use the collapsable-content function:</strong> Create a toggle button using <code>&lt;div class="btn-collapse"&gt;Show More&lt;/div&gt;</code> and a data attribute using <code>data-toggle</code>. Clicking this button will toggle any sibling element(s) containing the class <code>collapsable-content</code> and an identical <code>data-toggle</code> attribute. It will also change the button to read "Show Less"; another click toggles it back to the previous state. Ideally, use pre-existing elements and add the class and attribute; creating a new div around the existing content may lead to unexpected results, as the toggle function will use <code>display:block</code> if no previous display specification was found.
25 <p><strong>To use the collapsable-content function:</strong> Create a toggle button using <code>&lt;div class="btn-collapse"&gt;Show More&lt;/div&gt;</code> and a data attribute using <code>data-toggle</code>. Clicking this button will toggle any sibling element(s) containing the class <code>collapsable-content</code> and an identical <code>data-toggle</code> attribute. It will also change the button to read "Show Less"; another click toggles it back to the previous state. Ideally, use pre-existing elements and add the class and attribute; creating a new div around the existing content may lead to unexpected results, as the toggle function will use <code>display:block</code> if no previous display specification was found.
26 </p>
26 </p>
27 <p>Notes:</p>
27 <p>Notes:</p>
28 <ul>
28 <ul>
29 <li>Changes made to the text of the button will require adjustment to the function, but for the sake of consistency and user experience, this is best avoided. </li>
29 <li>Changes made to the text of the button will require adjustment to the function, but for the sake of consistency and user experience, this is best avoided. </li>
30 <li>Collapsable content inside of a pjax loaded container will require <code>collapsableContent();</code> to be called from within the container. No variables are necessary.</li>
30 <li>Collapsable content inside of a pjax loaded container will require <code>collapsableContent();</code> to be called from within the container. No variables are necessary.</li>
31 </ul>
31 </ul>
32
32
33 </div> <!-- .main-content -->
33 </div> <!-- .main-content -->
34 </div> <!-- .sidebar-col-wrapper -->
34 </div> <!-- .sidebar-col-wrapper -->
35 </div> <!-- .box -->
35 </div> <!-- .box -->
36
36
37 <!-- CONTENT -->
37 <!-- CONTENT -->
38 <div id="content" class="wrapper">
38 <div id="content" class="wrapper">
39
39
40 <div class="main">
40 <div class="main">
41
41
42 <div class="box">
42 <div class="box">
43 <div class="title">
43 <div class="title">
44 <h1>
44 <h1>
45 Diff: enable filename with spaces on diffs
45 Diff: enable filename with spaces on diffs
46 </h1>
46 </h1>
47 <h1>
47 <h1>
48 <i class="icon-hg" ></i>
48 <i class="icon-hg" ></i>
49
49
50 <i class="icon-lock"></i>
50 <i class="icon-lock"></i>
51 <span><a href="/rhodecode-momentum">rhodecode-momentum</a></span>
51 <span><a href="/rhodecode-momentum">rhodecode-momentum</a></span>
52
52
53 </h1>
53 </h1>
54 </div>
54 </div>
55
55
56 <div class="box pr-summary">
56 <div class="box pr-summary">
57 <div class="summary-details block-left">
57 <div class="summary-details block-left">
58
58
59 <div class="pr-details-title">
59 <div class="pr-details-title">
60
60
61 Pull request #720 From Tue, 17 Feb 2015 16:21:38
61 Pull request #720 From Tue, 17 Feb 2015 16:21:38
62 <div class="btn-collapse" data-toggle="description">Show More</div>
62 <div class="btn-collapse" data-toggle="description">Show More</div>
63 </div>
63 </div>
64 <div id="summary" class="fields pr-details-content">
64 <div id="summary" class="fields pr-details-content">
65 <div class="field">
65 <div class="field">
66 <div class="label-summary">
66 <div class="label-summary">
67 <label>Origin:</label>
67 <label>Origin:</label>
68 </div>
68 </div>
69 <div class="input">
69 <div class="input">
70 <div>
70 <div>
71 <span class="tag">
71 <span class="tag">
72 <a href="/andersonsantos/rhodecode-momentum-fork#fix_574">book: fix_574</a>
72 <a href="/andersonsantos/rhodecode-momentum-fork#fix_574">book: fix_574</a>
73 </span>
73 </span>
74 <span class="clone-url">
74 <span class="clone-url">
75 <a href="/andersonsantos/rhodecode-momentum-fork">https://code.rhodecode.com/andersonsantos/rhodecode-momentum-fork</a>
75 <a href="/andersonsantos/rhodecode-momentum-fork">https://code.rhodecode.com/andersonsantos/rhodecode-momentum-fork</a>
76 </span>
76 </span>
77 </div>
77 </div>
78 <div>
78 <div>
79 <br>
79 <br>
80 <input type="text" value="hg pull -r 46b3d50315f0 https://code.rhodecode.com/andersonsantos/rhodecode-momentum-fork" readonly="readonly">
80 <input type="text" value="hg pull -r 46b3d50315f0 https://code.rhodecode.com/andersonsantos/rhodecode-momentum-fork" readonly="readonly">
81 </div>
81 </div>
82 </div>
82 </div>
83 </div>
83 </div>
84 <div class="field">
84 <div class="field">
85 <div class="label-summary">
85 <div class="label-summary">
86 <label>Review:</label>
86 <label>Review:</label>
87 </div>
87 </div>
88 <div class="input">
88 <div class="input">
89 <div class="flag_status under_review tooltip pull-left" title="Pull request status calculated from votes"></div>
89 <div class="flag_status under_review tooltip pull-left" title="Pull request status calculated from votes"></div>
90 <span class="changeset-status-lbl tooltip" title="Pull request status calculated from votes">
90 <span class="changeset-status-lbl tooltip" title="Pull request status calculated from votes">
91 Under Review
91 Under Review
92 </span>
92 </span>
93
93
94 </div>
94 </div>
95 </div>
95 </div>
96 <div class="field collapsable-content" data-toggle="description">
96 <div class="field collapsable-content" data-toggle="description">
97 <div class="label-summary">
97 <div class="label-summary">
98 <label>Description:</label>
98 <label>Description:</label>
99 </div>
99 </div>
100 <div class="input">
100 <div class="input">
101 <div class="pr-description">Fixing issue <a class="issue- tracker-link" href="http://bugs.rhodecode.com/issues/574"># 574</a>, changing regex for capturing filenames</div>
101 <div class="pr-description">Fixing issue <a class="issue- tracker-link" href="http://bugs.rhodecode.com/issues/574"># 574</a>, changing regex for capturing filenames</div>
102 </div>
102 </div>
103 </div>
103 </div>
104 <div class="field collapsable-content" data-toggle="description">
104 <div class="field collapsable-content" data-toggle="description">
105 <div class="label-summary">
105 <div class="label-summary">
106 <label>Comments:</label>
106 <label>Comments:</label>
107 </div>
107 </div>
108 <div class="input">
108 <div class="input">
109 <div>
109 <div>
110 <div class="comments-number">
110 <div class="comments-number">
111 <a href="#inline-comments-container">0 Pull request comments</a>,
111 <a href="#inline-comments-container">0 Pull request comments</a>,
112 0 Inline Comments
112 0 Inline Comments
113 </div>
113 </div>
114 </div>
114 </div>
115 </div>
115 </div>
116 </div>
116 </div>
117 </div>
117 </div>
118 </div>
118 </div>
119 <div>
119 <div>
120 <div class="reviewers-title block-right">
120 <div class="reviewers-title block-right">
121 <div class="pr-details-title">
121 <div class="pr-details-title">
122 Author
122 Author
123 </div>
123 </div>
124 </div>
124 </div>
125 <div class="block-right pr-details-content reviewers">
125 <div class="block-right pr-details-content reviewers">
126 <ul class="group_members">
126 <ul class="group_members">
127 <li>
127 <li>
128 <img class="gravatar" src="https://secure.gravatar.com/avatar/72706ebd30734451af9ff3fb59f05ff1?d=identicon&amp;s=32" height="16" width="16">
128 <img class="gravatar" src="https://secure.gravatar.com/avatar/72706ebd30734451af9ff3fb59f05ff1?d=identicon&amp;s=32" height="16" width="16">
129 <span class="user"> <a href="/_profiles/lolek">lolek (Lolek Santos)</a></span>
129 <span class="user"> <a href="/_profiles/lolek">lolek (Lolek Santos)</a></span>
130 </li>
130 </li>
131 </ul>
131 </ul>
132 </div>
132 </div>
133 <div class="reviewers-title block-right">
133 <div class="reviewers-title block-right">
134 <div class="pr-details-title">
134 <div class="pr-details-title">
135 Pull request reviewers
135 Pull request reviewers
136 <span class="btn-collapse" data-toggle="reviewers">Show More</span>
136 <span class="btn-collapse" data-toggle="reviewers">Show More</span>
137 </div>
137 </div>
138
138
139 </div>
139 </div>
140 <div id="reviewers" class="block-right pr-details-content reviewers">
140 <div id="reviewers" class="block-right pr-details-content reviewers">
141
141
142 <ul id="review_members" class="group_members">
142 <ul id="review_members" class="group_members">
143 <li id="reviewer_70">
143 <li id="reviewer_70">
144 <div class="reviewers_member">
144 <div class="reviewers_member">
145 <div class="reviewer_status tooltip pull-left" title="Not Reviewed">
145 <div class="reviewer_status tooltip pull-left" title="Not Reviewed">
146 <div class="flag_status rejected pull-left reviewer_member_status"></div>
146 <div class="flag_status rejected pull-left reviewer_member_status"></div>
147 </div>
147 </div>
148 <img class="gravatar" src="https://secure.gravatar.com/avatar/153a0fab13160b3e64a2cbc7c0373506?d=identicon&amp;s=32" height="16" width="16">
148 <img class="gravatar" src="https://secure.gravatar.com/avatar/153a0fab13160b3e64a2cbc7c0373506?d=identicon&amp;s=32" height="16" width="16">
149 <span class="user"> <a href="/_profiles/jenkins-tests">jenkins-tests</a> (reviewer)</span>
149 <span class="user"> <a href="/_profiles/jenkins-tests">jenkins-tests</a> (reviewer)</span>
150 </div>
150 </div>
151 <input id="reviewer_70_input" type="hidden" value="70" name="review_members">
151 <input id="reviewer_70_input" type="hidden" value="70" name="review_members">
152 <div class="reviewer_member_remove action_button" onclick="removeReviewMember(70, true)" style="visibility: hidden;">
152 <div class="reviewer_member_remove action_button" onclick="removeReviewMember(70, true)" style="visibility: hidden;">
153 <i class="icon-remove-sign"></i>
153 <i class="icon-remove-sign"></i>
154 </div>
154 </div>
155 </li>
155 </li>
156 <li id="reviewer_33" class="collapsable-content" data-toggle="reviewers">
156 <li id="reviewer_33" class="collapsable-content" data-toggle="reviewers">
157 <div class="reviewers_member">
157 <div class="reviewers_member">
158 <div class="reviewer_status tooltip pull-left" title="Not Reviewed">
158 <div class="reviewer_status tooltip pull-left" title="Not Reviewed">
159 <div class="flag_status approved pull-left reviewer_member_status"></div>
159 <div class="flag_status approved pull-left reviewer_member_status"></div>
160 </div>
160 </div>
161 <img class="gravatar" src="https://secure.gravatar.com/avatar/ffd6a317ec2b66be880143cd8459d0d9?d=identicon&amp;s=32" height="16" width="16">
161 <img class="gravatar" src="https://secure.gravatar.com/avatar/ffd6a317ec2b66be880143cd8459d0d9?d=identicon&amp;s=32" height="16" width="16">
162 <span class="user"> <a href="/_profiles/jenkins-tests">garbas (Rok Garbas)</a> (reviewer)</span>
162 <span class="user"> <a href="/_profiles/jenkins-tests">garbas (Rok Garbas)</a> (reviewer)</span>
163 </div>
163 </div>
164 </li>
164 </li>
165 <li id="reviewer_2" class="collapsable-content" data-toggle="reviewers">
165 <li id="reviewer_2" class="collapsable-content" data-toggle="reviewers">
166 <div class="reviewers_member">
166 <div class="reviewers_member">
167 <div class="reviewer_status tooltip pull-left" title="Not Reviewed">
167 <div class="reviewer_status tooltip pull-left" title="Not Reviewed">
168 <div class="flag_status not_reviewed pull-left reviewer_member_status"></div>
168 <div class="flag_status not_reviewed pull-left reviewer_member_status"></div>
169 </div>
169 </div>
170 <img class="gravatar" src="https://secure.gravatar.com/avatar/aad9d40cac1259ea39b5578554ad9d64?d=identicon&amp;s=32" height="16" width="16">
170 <img class="gravatar" src="https://secure.gravatar.com/avatar/aad9d40cac1259ea39b5578554ad9d64?d=identicon&amp;s=32" height="16" width="16">
171 <span class="user"> <a href="/_profiles/jenkins-tests">marcink (Marcin Kuzminski)</a> (reviewer)</span>
171 <span class="user"> <a href="/_profiles/jenkins-tests">marcink (Marcin Kuzminski)</a> (reviewer)</span>
172 </div>
172 </div>
173 </li>
173 </li>
174 <li id="reviewer_36" class="collapsable-content" data-toggle="reviewers">
174 <li id="reviewer_36" class="collapsable-content" data-toggle="reviewers">
175 <div class="reviewers_member">
175 <div class="reviewers_member">
176 <div class="reviewer_status tooltip pull-left" title="Not Reviewed">
176 <div class="reviewer_status tooltip pull-left" title="Not Reviewed">
177 <div class="flag_status approved pull-left reviewer_member_status"></div>
177 <div class="flag_status approved pull-left reviewer_member_status"></div>
178 </div>
178 </div>
179 <img class="gravatar" src="https://secure.gravatar.com/avatar/7a4da001a0af0016ed056ab523255db9?d=identicon&amp;s=32" height="16" width="16">
179 <img class="gravatar" src="https://secure.gravatar.com/avatar/7a4da001a0af0016ed056ab523255db9?d=identicon&amp;s=32" height="16" width="16">
180 <span class="user"> <a href="/_profiles/jenkins-tests">johbo (Johannes Bornhold)</a> (reviewer)</span>
180 <span class="user"> <a href="/_profiles/jenkins-tests">johbo (Johannes Bornhold)</a> (reviewer)</span>
181 </div>
181 </div>
182 </li>
182 </li>
183 <li id="reviewer_47" class="collapsable-content" data-toggle="reviewers">
183 <li id="reviewer_47" class="collapsable-content" data-toggle="reviewers">
184 <div class="reviewers_member">
184 <div class="reviewers_member">
185 <div class="reviewer_status tooltip pull-left" title="Not Reviewed">
185 <div class="reviewer_status tooltip pull-left" title="Not Reviewed">
186 <div class="flag_status under_review pull-left reviewer_member_status"></div>
186 <div class="flag_status under_review pull-left reviewer_member_status"></div>
187 </div>
187 </div>
188 <img class="gravatar" src="https://secure.gravatar.com/avatar/8f6dc00dce79d6bd7d415be5cea6a008?d=identicon&amp;s=32" height="16" width="16">
188 <img class="gravatar" src="https://secure.gravatar.com/avatar/8f6dc00dce79d6bd7d415be5cea6a008?d=identicon&amp;s=32" height="16" width="16">
189 <span class="user"> <a href="/_profiles/jenkins-tests">lisaq (Lisa Quatmann)</a> (reviewer)</span>
189 <span class="user"> <a href="/_profiles/jenkins-tests">lisaq (Lisa Quatmann)</a> (reviewer)</span>
190 </div>
190 </div>
191 </li>
191 </li>
192 <li id="reviewer_49" class="collapsable-content" data-toggle="reviewers">
192 <li id="reviewer_49" class="collapsable-content" data-toggle="reviewers">
193 <div class="reviewers_member">
193 <div class="reviewers_member">
194 <div class="reviewer_status tooltip pull-left" title="Not Reviewed">
194 <div class="reviewer_status tooltip pull-left" title="Not Reviewed">
195 <div class="flag_status approved pull-left reviewer_member_status"></div>
195 <div class="flag_status approved pull-left reviewer_member_status"></div>
196 </div>
196 </div>
197 <img class="gravatar" src="https://secure.gravatar.com/avatar/89f722927932a8f737a0feafb03a606e?d=identicon&amp;s=32" height="16" width="16">
197 <img class="gravatar" src="https://secure.gravatar.com/avatar/89f722927932a8f737a0feafb03a606e?d=identicon&amp;s=32" height="16" width="16">
198 <span class="user"> <a href="/_profiles/jenkins-tests">paris (Paris Kolios)</a> (reviewer)</span>
198 <span class="user"> <a href="/_profiles/jenkins-tests">paris (Paris Kolios)</a> (reviewer)</span>
199 </div>
199 </div>
200 </li>
200 </li>
201 <li id="reviewer_50" class="collapsable-content" data-toggle="reviewers">
201 <li id="reviewer_50" class="collapsable-content" data-toggle="reviewers">
202 <div class="reviewers_member">
202 <div class="reviewers_member">
203 <div class="reviewer_status tooltip pull-left" title="Not Reviewed">
203 <div class="reviewer_status tooltip pull-left" title="Not Reviewed">
204 <div class="flag_status approved pull-left reviewer_member_status"></div>
204 <div class="flag_status approved pull-left reviewer_member_status"></div>
205 </div>
205 </div>
206 <img class="gravatar" src="https://secure.gravatar.com/avatar/081322c975e8545ec269372405fbd016?d=identicon&amp;s=32" height="16" width="16">
206 <img class="gravatar" src="https://secure.gravatar.com/avatar/081322c975e8545ec269372405fbd016?d=identicon&amp;s=32" height="16" width="16">
207 <span class="user"> <a href="/_profiles/jenkins-tests">ergo (Marcin Lulek)</a> (reviewer)</span>
207 <span class="user"> <a href="/_profiles/jenkins-tests">ergo (Marcin Lulek)</a> (reviewer)</span>
208 </div>
208 </div>
209 </li>
209 </li>
210 <li id="reviewer_54" class="collapsable-content" data-toggle="reviewers">
210 <li id="reviewer_54" class="collapsable-content" data-toggle="reviewers">
211 <div class="reviewers_member">
211 <div class="reviewers_member">
212 <div class="reviewer_status tooltip pull-left" title="Not Reviewed">
212 <div class="reviewer_status tooltip pull-left" title="Not Reviewed">
213 <div class="flag_status under_review pull-left reviewer_member_status"></div>
213 <div class="flag_status under_review pull-left reviewer_member_status"></div>
214 </div>
214 </div>
215 <img class="gravatar" src="https://secure.gravatar.com/avatar/72706ebd30734451af9ff3fb59f05ff1?d=identicon&amp;s=32" height="16" width="16">
215 <img class="gravatar" src="https://secure.gravatar.com/avatar/72706ebd30734451af9ff3fb59f05ff1?d=identicon&amp;s=32" height="16" width="16">
216 <span class="user"> <a href="/_profiles/jenkins-tests">anderson (Anderson Santos)</a> (reviewer)</span>
216 <span class="user"> <a href="/_profiles/jenkins-tests">anderson (Anderson Santos)</a> (reviewer)</span>
217 </div>
217 </div>
218 </li>
218 </li>
219 <li id="reviewer_57" class="collapsable-content" data-toggle="reviewers">
219 <li id="reviewer_57" class="collapsable-content" data-toggle="reviewers">
220 <div class="reviewers_member">
220 <div class="reviewers_member">
221 <div class="reviewer_status tooltip pull-left" title="Not Reviewed">
221 <div class="reviewer_status tooltip pull-left" title="Not Reviewed">
222 <div class="flag_status approved pull-left reviewer_member_status"></div>
222 <div class="flag_status approved pull-left reviewer_member_status"></div>
223 </div>
223 </div>
224 <img class="gravatar" src="https://secure.gravatar.com/avatar/23e2ee8f5fd462cba8129a40cc1e896c?d=identicon&amp;s=32" height="16" width="16">
224 <img class="gravatar" src="https://secure.gravatar.com/avatar/23e2ee8f5fd462cba8129a40cc1e896c?d=identicon&amp;s=32" height="16" width="16">
225 <span class="user"> <a href="/_profiles/jenkins-tests">gmgauthier (Greg Gauthier)</a> (reviewer)</span>
225 <span class="user"> <a href="/_profiles/jenkins-tests">gmgauthier (Greg Gauthier)</a> (reviewer)</span>
226 </div>
226 </div>
227 </li>
227 </li>
228 <li id="reviewer_31" class="collapsable-content" data-toggle="reviewers">
228 <li id="reviewer_31" class="collapsable-content" data-toggle="reviewers">
229 <div class="reviewers_member">
229 <div class="reviewers_member">
230 <div class="reviewer_status tooltip pull-left" title="Not Reviewed">
230 <div class="reviewer_status tooltip pull-left" title="Not Reviewed">
231 <div class="flag_status under_review pull-left reviewer_member_status"></div>
231 <div class="flag_status under_review pull-left reviewer_member_status"></div>
232 </div>
232 </div>
233 <img class="gravatar" src="https://secure.gravatar.com/avatar/0c9a7e6674b6f0b35d98dbe073e3f0ab?d=identicon&amp;s=32" height="16" width="16">
233 <img class="gravatar" src="https://secure.gravatar.com/avatar/0c9a7e6674b6f0b35d98dbe073e3f0ab?d=identicon&amp;s=32" height="16" width="16">
234 <span class="user"> <a href="/_profiles/jenkins-tests">ostrobel (Oliver Strobel)</a> (reviewer)</span>
234 <span class="user"> <a href="/_profiles/jenkins-tests">ostrobel (Oliver Strobel)</a> (reviewer)</span>
235 </div>
235 </div>
236 </li>
236 </li>
237 </ul>
237 </ul>
238 <div id="add_reviewer_input" class="ac" style="display: none;">
238 <div id="add_reviewer_input" class="ac" style="display: none;">
239 </div>
239 </div>
240 </div>
240 </div>
241 </div>
241 </div>
242 </div>
242 </div>
243 </div>
243 </div>
244 <div class="box">
244 <div class="box">
245 <div class="table" >
245 <div class="table" >
246 <div id="changeset_compare_view_content">
246 <div id="changeset_compare_view_content">
247 <div class="compare_view_commits_title">
247 <div class="compare_view_commits_title">
248 <h2>Compare View: 6 commits<span class="btn-collapse" data-toggle="commits">Show More</span></h2>
248 <h2>Compare View: 6 commits<span class="btn-collapse" data-toggle="commits">Show More</span></h2>
249
249
250 </div>
250 </div>
251 <div class="container">
251 <div class="container">
252
252
253
253
254 <table class="rctable compare_view_commits">
254 <table class="rctable compare_view_commits">
255 <tr>
255 <tr>
256 <th>Time</th>
256 <th>Time</th>
257 <th>Author</th>
257 <th>Author</th>
258 <th>Commit</th>
258 <th>Commit</th>
259 <th></th>
259 <th></th>
260 <th>Title</th>
260 <th>Title</th>
261 </tr>
261 </tr>
262 <tr id="row-7e83e5cd7812dd9e055ce30e77c65cdc08154b43" commit_id="7e83e5cd7812dd9e055ce30e77c65cdc08154b43" class="compare_select">
262 <tr id="row-7e83e5cd7812dd9e055ce30e77c65cdc08154b43" commit_id="7e83e5cd7812dd9e055ce30e77c65cdc08154b43" class="compare_select">
263 <td class="td-time">
263 <td class="td-time">
264 <span class="tooltip" title="3 hours and 23 minutes ago" tt_title="3 hours and 23 minutes ago">2015-02-18 10:13:34</span>
264 <span class="tooltip" title="3 hours and 23 minutes ago" tt_title="3 hours and 23 minutes ago">2015-02-18 10:13:34</span>
265 </td>
265 </td>
266 <td class="td-user">
266 <td class="td-user">
267 <div class="gravatar_with_user">
267 <div class="gravatar_with_user">
268 <img class="gravatar" alt="gravatar" src="https://secure.gravatar.com/avatar/02cc31cea73b88b7209ba302c5967a9d?d=identicon&amp;s=16">
268 <img class="gravatar" alt="gravatar" src="https://secure.gravatar.com/avatar/02cc31cea73b88b7209ba302c5967a9d?d=identicon&amp;s=16">
269 <span title="Lolek Santos <lolek@rhodecode.com>" class="user">brian (Brian Butler)</span>
269 <span title="Lolek Santos <lolek@rhodecode.com>" class="user">brian (Brian Butler)</span>
270 </div>
270 </div>
271 </td>
271 </td>
272 <td class="td-hash">
272 <td class="td-hash">
273 <code>
273 <code>
274 <a href="/brian/documentation-rep/changeset/7e83e5cd7812dd9e055ce30e77c65cdc08154b43">r395:7e83e5cd7812</a>
274 <a href="/brian/documentation-rep/changeset/7e83e5cd7812dd9e055ce30e77c65cdc08154b43">r395:7e83e5cd7812</a>
275 </code>
275 </code>
276 </td>
276 </td>
277 <td class="expand_commit" data-commit-id="7e83e5cd7812dd9e055ce30e77c65cdc08154b43" title="Expand commit message">
277 <td class="expand_commit" data-commit-id="7e83e5cd7812dd9e055ce30e77c65cdc08154b43" title="Expand commit message">
278 <div class="show_more_col">
278 <div class="show_more_col">
279 <i class="show_more"></i>
279 <i class="show_more"></i>
280 </div>
280 </div>
281 </td>
281 </td>
282 <td class="mid td-description">
282 <td class="mid td-description">
283 <div class="log-container truncate-wrap">
283 <div class="log-container truncate-wrap">
284 <div id="c-7e83e5cd7812dd9e055ce30e77c65cdc08154b43" class="message truncate">rep: added how we doc to guide</div>
284 <div id="c-7e83e5cd7812dd9e055ce30e77c65cdc08154b43" class="message truncate">rep: added how we doc to guide</div>
285 </div>
285 </div>
286 </td>
286 </td>
287 </tr>
287 </tr>
288 <tr id="row-48ce1581bdb3aa7679c246cbdd3fb030623f5c87" commit_id="48ce1581bdb3aa7679c246cbdd3fb030623f5c87" class="compare_select">
288 <tr id="row-48ce1581bdb3aa7679c246cbdd3fb030623f5c87" commit_id="48ce1581bdb3aa7679c246cbdd3fb030623f5c87" class="compare_select">
289 <td class="td-time">
289 <td class="td-time">
290 <span class="tooltip" title="4 hours and 18 minutes ago">2015-02-18 09:18:31</span>
290 <span class="tooltip" title="4 hours and 18 minutes ago">2015-02-18 09:18:31</span>
291 </td>
291 </td>
292 <td class="td-user">
292 <td class="td-user">
293 <div class="gravatar_with_user">
293 <div class="gravatar_with_user">
294 <img class="gravatar" alt="gravatar" src="https://secure.gravatar.com/avatar/02cc31cea73b88b7209ba302c5967a9d?d=identicon&amp;s=16">
294 <img class="gravatar" alt="gravatar" src="https://secure.gravatar.com/avatar/02cc31cea73b88b7209ba302c5967a9d?d=identicon&amp;s=16">
295 <span title="Lolek Santos <lolek@rhodecode.com>" class="user">brian (Brian Butler)</span>
295 <span title="Lolek Santos <lolek@rhodecode.com>" class="user">brian (Brian Butler)</span>
296 </div>
296 </div>
297 </td>
297 </td>
298 <td class="td-hash">
298 <td class="td-hash">
299 <code>
299 <code>
300 <a href="/brian/documentation-rep/changeset/48ce1581bdb3aa7679c246cbdd3fb030623f5c87">r394:48ce1581bdb3</a>
300 <a href="/brian/documentation-rep/changeset/48ce1581bdb3aa7679c246cbdd3fb030623f5c87">r394:48ce1581bdb3</a>
301 </code>
301 </code>
302 </td>
302 </td>
303 <td class="expand_commit" data-commit-id="48ce1581bdb3aa7679c246cbdd3fb030623f5c87" title="Expand commit message">
303 <td class="expand_commit" data-commit-id="48ce1581bdb3aa7679c246cbdd3fb030623f5c87" title="Expand commit message">
304 <div class="show_more_col">
304 <div class="show_more_col">
305 <i class="show_more"></i>
305 <i class="show_more"></i>
306 </div>
306 </div>
307 </td>
307 </td>
308 <td class="mid td-description">
308 <td class="mid td-description">
309 <div class="log-container truncate-wrap">
309 <div class="log-container truncate-wrap">
310 <div id="c-48ce1581bdb3aa7679c246cbdd3fb030623f5c87" class="message truncate">repo 0004 - typo</div>
310 <div id="c-48ce1581bdb3aa7679c246cbdd3fb030623f5c87" class="message truncate">repo 0004 - typo</div>
311 </div>
311 </div>
312 </td>
312 </td>
313 </tr>
313 </tr>
314 <tr id="row-982d857aafb4c71e7686e419c32b71c9a837257d" commit_id="982d857aafb4c71e7686e419c32b71c9a837257d" class="compare_select collapsable-content" data-toggle="commits">
314 <tr id="row-982d857aafb4c71e7686e419c32b71c9a837257d" commit_id="982d857aafb4c71e7686e419c32b71c9a837257d" class="compare_select collapsable-content" data-toggle="commits">
315 <td class="td-time">
315 <td class="td-time">
316 <span class="tooltip" title="4 hours and 22 minutes ago">2015-02-18 09:14:45</span>
316 <span class="tooltip" title="4 hours and 22 minutes ago">2015-02-18 09:14:45</span>
317 </td>
317 </td>
318 <td class="td-user">
318 <td class="td-user">
319 <span class="gravatar" commit_id="982d857aafb4c71e7686e419c32b71c9a837257d">
319 <span class="gravatar" commit_id="982d857aafb4c71e7686e419c32b71c9a837257d">
320 <img alt="gravatar" src="https://secure.gravatar.com/avatar/02cc31cea73b88b7209ba302c5967a9d?d=identicon&amp;s=28" height="14" width="14">
320 <img alt="gravatar" src="https://secure.gravatar.com/avatar/02cc31cea73b88b7209ba302c5967a9d?d=identicon&amp;s=28" height="14" width="14">
321 </span>
321 </span>
322 <span class="author">brian (Brian Butler)</span>
322 <span class="author">brian (Brian Butler)</span>
323 </td>
323 </td>
324 <td class="td-hash">
324 <td class="td-hash">
325 <code>
325 <code>
326 <a href="/brian/documentation-rep/changeset/982d857aafb4c71e7686e419c32b71c9a837257d">r393:982d857aafb4</a>
326 <a href="/brian/documentation-rep/changeset/982d857aafb4c71e7686e419c32b71c9a837257d">r393:982d857aafb4</a>
327 </code>
327 </code>
328 </td>
328 </td>
329 <td class="expand_commit" data-commit-id="982d857aafb4c71e7686e419c32b71c9a837257d" title="Expand commit message">
329 <td class="expand_commit" data-commit-id="982d857aafb4c71e7686e419c32b71c9a837257d" title="Expand commit message">
330 <div class="show_more_col">
330 <div class="show_more_col">
331 <i class="show_more"></i>
331 <i class="show_more"></i>
332 </div>
332 </div>
333 </td>
333 </td>
334 <td class="mid td-description">
334 <td class="mid td-description">
335 <div class="log-container truncate-wrap">
335 <div class="log-container truncate-wrap">
336 <div id="c-982d857aafb4c71e7686e419c32b71c9a837257d" class="message truncate">internals: how to doc section added</div>
336 <div id="c-982d857aafb4c71e7686e419c32b71c9a837257d" class="message truncate">internals: how to doc section added</div>
337 </div>
337 </div>
338 </td>
338 </td>
339 </tr>
339 </tr>
340 <tr id="row-4c7258ad1af6dae91bbaf87a933e3597e676fab8" commit_id="4c7258ad1af6dae91bbaf87a933e3597e676fab8" class="compare_select collapsable-content" data-toggle="commits">
340 <tr id="row-4c7258ad1af6dae91bbaf87a933e3597e676fab8" commit_id="4c7258ad1af6dae91bbaf87a933e3597e676fab8" class="compare_select collapsable-content" data-toggle="commits">
341 <td class="td-time">
341 <td class="td-time">
342 <span class="tooltip" title="20 hours and 16 minutes ago">2015-02-17 17:20:44</span>
342 <span class="tooltip" title="20 hours and 16 minutes ago">2015-02-17 17:20:44</span>
343 </td>
343 </td>
344 <td class="td-user">
344 <td class="td-user">
345 <span class="gravatar" commit_id="4c7258ad1af6dae91bbaf87a933e3597e676fab8">
345 <span class="gravatar" commit_id="4c7258ad1af6dae91bbaf87a933e3597e676fab8">
346 <img alt="gravatar" src="https://secure.gravatar.com/avatar/02cc31cea73b88b7209ba302c5967a9d?d=identicon&amp;s=28" height="14" width="14">
346 <img alt="gravatar" src="https://secure.gravatar.com/avatar/02cc31cea73b88b7209ba302c5967a9d?d=identicon&amp;s=28" height="14" width="14">
347 </span>
347 </span>
348 <span class="author">brian (Brian Butler)</span>
348 <span class="author">brian (Brian Butler)</span>
349 </td>
349 </td>
350 <td class="td-hash">
350 <td class="td-hash">
351 <code>
351 <code>
352 <a href="/brian/documentation-rep/changeset/4c7258ad1af6dae91bbaf87a933e3597e676fab8">r392:4c7258ad1af6</a>
352 <a href="/brian/documentation-rep/changeset/4c7258ad1af6dae91bbaf87a933e3597e676fab8">r392:4c7258ad1af6</a>
353 </code>
353 </code>
354 </td>
354 </td>
355 <td class="expand_commit" data-commit-id="4c7258ad1af6dae91bbaf87a933e3597e676fab8" title="Expand commit message">
355 <td class="expand_commit" data-commit-id="4c7258ad1af6dae91bbaf87a933e3597e676fab8" title="Expand commit message">
356 <div class="show_more_col">
356 <div class="show_more_col">
357 <i class="show_more"></i>
357 <i class="show_more"></i>
358 </div>
358 </div>
359 </td>
359 </td>
360 <td class="mid td-description">
360 <td class="mid td-description">
361 <div class="log-container truncate-wrap">
361 <div class="log-container truncate-wrap">
362 <div id="c-4c7258ad1af6dae91bbaf87a933e3597e676fab8" class="message truncate">REP: 0004 Documentation standards</div>
362 <div id="c-4c7258ad1af6dae91bbaf87a933e3597e676fab8" class="message truncate">REP: 0004 Documentation standards</div>
363 </div>
363 </div>
364 </td>
364 </td>
365 </tr>
365 </tr>
366 <tr id="row-46b3d50315f0f2b1f64485ac95af4f384948f9cb" commit_id="46b3d50315f0f2b1f64485ac95af4f384948f9cb" class="compare_select collapsable-content" data-toggle="commits">
366 <tr id="row-46b3d50315f0f2b1f64485ac95af4f384948f9cb" commit_id="46b3d50315f0f2b1f64485ac95af4f384948f9cb" class="compare_select collapsable-content" data-toggle="commits">
367 <td class="td-time">
367 <td class="td-time">
368 <span class="tooltip" title="18 hours and 19 minutes ago">2015-02-17 16:18:49</span>
368 <span class="tooltip" title="18 hours and 19 minutes ago">2015-02-17 16:18:49</span>
369 </td>
369 </td>
370 <td class="td-user">
370 <td class="td-user">
371 <span class="gravatar" commit_id="46b3d50315f0f2b1f64485ac95af4f384948f9cb">
371 <span class="gravatar" commit_id="46b3d50315f0f2b1f64485ac95af4f384948f9cb">
372 <img alt="gravatar" src="https://secure.gravatar.com/avatar/72706ebd30734451af9ff3fb59f05ff1?d=identicon&amp;s=28" height="14" width="14">
372 <img alt="gravatar" src="https://secure.gravatar.com/avatar/72706ebd30734451af9ff3fb59f05ff1?d=identicon&amp;s=28" height="14" width="14">
373 </span>
373 </span>
374 <span class="author">anderson (Anderson Santos)</span>
374 <span class="author">anderson (Anderson Santos)</span>
375 </td>
375 </td>
376 <td class="td-hash">
376 <td class="td-hash">
377 <code>
377 <code>
378 <a href="/andersonsantos/rhodecode-momentum-fork/changeset/46b3d50315f0f2b1f64485ac95af4f384948f9cb">r8743:46b3d50315f0</a>
378 <a href="/andersonsantos/rhodecode-momentum-fork/changeset/46b3d50315f0f2b1f64485ac95af4f384948f9cb">r8743:46b3d50315f0</a>
379 </code>
379 </code>
380 </td>
380 </td>
381 <td class="expand_commit" data-commit-id="46b3d50315f0f2b1f64485ac95af4f384948f9cb" title="Expand commit message">
381 <td class="expand_commit" data-commit-id="46b3d50315f0f2b1f64485ac95af4f384948f9cb" title="Expand commit message">
382 <div class="show_more_col">
382 <div class="show_more_col">
383 <i class="show_more" ></i>
383 <i class="show_more" ></i>
384 </div>
384 </div>
385 </td>
385 </td>
386 <td class="mid td-description">
386 <td class="mid td-description">
387 <div class="log-container truncate-wrap">
387 <div class="log-container truncate-wrap">
388 <div id="c-46b3d50315f0f2b1f64485ac95af4f384948f9cb" class="message truncate">Diff: created tests for the diff with filenames with spaces</div>
388 <div id="c-46b3d50315f0f2b1f64485ac95af4f384948f9cb" class="message truncate">Diff: created tests for the diff with filenames with spaces</div>
389
389
390 </div>
390 </div>
391 </td>
391 </td>
392 </tr>
392 </tr>
393 <tr id="row-1e57d2549bd6c34798075bf05ac39f708bb33b90" commit_id="1e57d2549bd6c34798075bf05ac39f708bb33b90" class="compare_select collapsable-content" data-toggle="commits">
393 <tr id="row-1e57d2549bd6c34798075bf05ac39f708bb33b90" commit_id="1e57d2549bd6c34798075bf05ac39f708bb33b90" class="compare_select collapsable-content" data-toggle="commits">
394 <td class="td-time">
394 <td class="td-time">
395 <span class="tooltip" title="2 days ago">2015-02-16 10:06:08</span>
395 <span class="tooltip" title="2 days ago">2015-02-16 10:06:08</span>
396 </td>
396 </td>
397 <td class="td-user">
397 <td class="td-user">
398 <span class="gravatar" commit_id="1e57d2549bd6c34798075bf05ac39f708bb33b90">
398 <span class="gravatar" commit_id="1e57d2549bd6c34798075bf05ac39f708bb33b90">
399 <img alt="gravatar" src="https://secure.gravatar.com/avatar/72706ebd30734451af9ff3fb59f05ff1?d=identicon&amp;s=28" height="14" width="14">
399 <img alt="gravatar" src="https://secure.gravatar.com/avatar/72706ebd30734451af9ff3fb59f05ff1?d=identicon&amp;s=28" height="14" width="14">
400 </span>
400 </span>
401 <span class="author">anderson (Anderson Santos)</span>
401 <span class="author">anderson (Anderson Santos)</span>
402 </td>
402 </td>
403 <td class="td-hash">
403 <td class="td-hash">
404 <code>
404 <code>
405 <a href="/andersonsantos/rhodecode-momentum-fork/changeset/1e57d2549bd6c34798075bf05ac39f708bb33b90">r8742:1e57d2549bd6</a>
405 <a href="/andersonsantos/rhodecode-momentum-fork/changeset/1e57d2549bd6c34798075bf05ac39f708bb33b90">r8742:1e57d2549bd6</a>
406 </code>
406 </code>
407 </td>
407 </td>
408 <td class="expand_commit" data-commit-id="1e57d2549bd6c34798075bf05ac39f708bb33b90" title="Expand commit message">
408 <td class="expand_commit" data-commit-id="1e57d2549bd6c34798075bf05ac39f708bb33b90" title="Expand commit message">
409 <div class="show_more_col">
409 <div class="show_more_col">
410 <i class="show_more" ></i>
410 <i class="show_more" ></i>
411 </div>
411 </div>
412 </td>
412 </td>
413 <td class="mid td-description">
413 <td class="mid td-description">
414 <div class="log-container truncate-wrap">
414 <div class="log-container truncate-wrap">
415 <div id="c-1e57d2549bd6c34798075bf05ac39f708bb33b90" class="message truncate">Diff: fix renaming files with spaces <a class="issue-tracker-link" href="http://bugs.rhodecode.com/issues/574">#574</a></div>
415 <div id="c-1e57d2549bd6c34798075bf05ac39f708bb33b90" class="message truncate">Diff: fix renaming files with spaces <a class="issue-tracker-link" href="http://bugs.rhodecode.com/issues/574">#574</a></div>
416
416
417 </div>
417 </div>
418 </td>
418 </td>
419 </tr>
419 </tr>
420 </table>
420 </table>
421 </div>
421 </div>
422
422
423 <script>
423 <script>
424 $('.expand_commit').on('click',function(e){
424 $('.expand_commit').on('click',function(e){
425 $(this).children('i').hide();
425 $(this).children('i').hide();
426 var cid = $(this).data('commitId');
426 var cid = $(this).data('commitId');
427 $('#c-'+cid).css({'height': 'auto', 'margin': '.65em 1em .65em 0','white-space': 'pre-line', 'text-overflow': 'initial', 'overflow':'visible'})
427 $('#c-'+cid).css({'height': 'auto', 'margin': '.65em 1em .65em 0','white-space': 'pre-line', 'text-overflow': 'initial', 'overflow':'visible'})
428 $('#t-'+cid).css({'height': 'auto', 'text-overflow': 'initial', 'overflow':'visible', 'white-space':'normal'})
428 $('#t-'+cid).css({'height': 'auto', 'text-overflow': 'initial', 'overflow':'visible', 'white-space':'normal'})
429 });
429 });
430 $('.compare_select').on('click',function(e){
430 $('.compare_select').on('click',function(e){
431 var cid = $(this).attr('commit_id');
431 var cid = $(this).attr('commit_id');
432 $('#row-'+cid).toggleClass('hl', !$('#row-'+cid).hasClass('hl'));
432 $('#row-'+cid).toggleClass('hl', !$('#row-'+cid).hasClass('hl'));
433 });
433 });
434 </script>
434 </script>
435 <div class="cs_files_title">
435 <div class="cs_files_title">
436 <span class="cs_files_expand">
436 <span class="cs_files_expand">
437 <span id="expand_all_files">Expand All</span> | <span id="collapse_all_files">Collapse All</span>
437 <span id="expand_all_files">Expand All</span> | <span id="collapse_all_files">Collapse All</span>
438 </span>
438 </span>
439 <h2>
439 <h2>
440 7 files changed: 55 inserted, 9 deleted
440 7 files changed: 55 inserted, 9 deleted
441 </h2>
441 </h2>
442 </div>
442 </div>
443 <div class="cs_files">
443 <div class="cs_files">
444 <table class="compare_view_files">
444 <table class="compare_view_files">
445
445
446 <tr class="cs_A expand_file" fid="c--efbe5b7a3f13">
446 <tr class="cs_A expand_file" fid="c--efbe5b7a3f13">
447 <td class="cs_icon_td">
447 <td class="cs_icon_td">
448 <span class="expand_file_icon" fid="c--efbe5b7a3f13"></span>
448 <span class="expand_file_icon" fid="c--efbe5b7a3f13"></span>
449 </td>
449 </td>
450 <td class="cs_icon_td">
450 <td class="cs_icon_td">
451 <div class="flag_status not_reviewed hidden"></div>
451 <div class="flag_status not_reviewed hidden"></div>
452 </td>
452 </td>
453 <td id="a_c--efbe5b7a3f13">
453 <td id="a_c--efbe5b7a3f13">
454 <a class="compare_view_filepath" href="#a_c--efbe5b7a3f13">
454 <a class="compare_view_filepath" href="#a_c--efbe5b7a3f13">
455 rhodecode/tests/fixtures/git_diff_rename_file_with_spaces.diff
455 rhodecode/tests/fixtures/git_diff_rename_file_with_spaces.diff
456 </a>
456 </a>
457 <span id="diff_c--efbe5b7a3f13" class="diff_links" style="display: none;">
457 <span id="diff_c--efbe5b7a3f13" class="diff_links" style="display: none;">
458 <a href="/andersonsantos/rhodecode-momentum-fork/diff/rhodecode/tests/fixtures/git_diff_rename_file_with_spaces.diff?diff2=46b3d50315f0f2b1f64485ac95af4f384948f9cb&amp;diff1=b78e2376b986b2cf656a2b4390b09f303291c886&amp;fulldiff=1&amp;diff=diff">
458 <a href="/andersonsantos/rhodecode-momentum-fork/diff/rhodecode/tests/fixtures/git_diff_rename_file_with_spaces.diff?diff2=46b3d50315f0f2b1f64485ac95af4f384948f9cb&amp;diff1=b78e2376b986b2cf656a2b4390b09f303291c886&amp;fulldiff=1&amp;diff=diff">
459 Unified Diff
459 Unified Diff
460 </a>
460 </a>
461 |
461 |
462 <a href="/andersonsantos/rhodecode-momentum-fork/diff-2way/rhodecode/tests/fixtures/git_diff_rename_file_with_spaces.diff?diff2=46b3d50315f0f2b1f64485ac95af4f384948f9cb&amp;diff1=b78e2376b986b2cf656a2b4390b09f303291c886&amp;fulldiff=1&amp;diff=diff">
462 <a href="/andersonsantos/rhodecode-momentum-fork/diff-2way/rhodecode/tests/fixtures/git_diff_rename_file_with_spaces.diff?diff2=46b3d50315f0f2b1f64485ac95af4f384948f9cb&amp;diff1=b78e2376b986b2cf656a2b4390b09f303291c886&amp;fulldiff=1&amp;diff=diff">
463 Side-by-side Diff
463 Side-by-side Diff
464 </a>
464 </a>
465 </span>
465 </span>
466 </td>
466 </td>
467 <td>
467 <td>
468 <div class="changes pull-right"><div style="width:100px"><div class="added top-right-rounded-corner-mid bottom-right-rounded-corner-mid top-left-rounded-corner-mid bottom-left-rounded-corner-mid" style="width:100.0%">4</div><div class="deleted top-right-rounded-corner-mid bottom-right-rounded-corner-mid" style="width:0%"></div></div></div>
468 <div class="changes pull-right"><div style="width:100px"><div class="added top-right-rounded-corner-mid bottom-right-rounded-corner-mid top-left-rounded-corner-mid bottom-left-rounded-corner-mid" style="width:100.0%">4</div><div class="deleted top-right-rounded-corner-mid bottom-right-rounded-corner-mid" style="width:0%"></div></div></div>
469 <div class="comment-bubble pull-right" data-path="rhodecode/tests/fixtures/git_diff_rename_file_with_spaces.diff">
469 <div class="comment-bubble pull-right" data-path="rhodecode/tests/fixtures/git_diff_rename_file_with_spaces.diff">
470 <i class="icon-comment"></i>
470 <i class="icon-comment"></i>
471 </div>
471 </div>
472 </td>
472 </td>
473 </tr>
473 </tr>
474 <tr id="tr_c--efbe5b7a3f13">
474 <tr id="tr_c--efbe5b7a3f13">
475 <td></td>
475 <td></td>
476 <td></td>
476 <td></td>
477 <td class="injected_diff" colspan="2">
477 <td class="injected_diff" colspan="2">
478
478
479 <div class="diff-container" id="diff-container-140716195039928">
479 <div class="diff-container" id="diff-container-140716195039928">
480 <div id="c--efbe5b7a3f13_target" ></div>
480 <div id="c--efbe5b7a3f13_target" ></div>
481 <div id="c--efbe5b7a3f13" class="diffblock margined comm" >
481 <div id="c--efbe5b7a3f13" class="diffblock margined comm" >
482 <div class="code-body">
482 <div class="code-body">
483 <div class="full_f_path" path="rhodecode/tests/fixtures/git_diff_rename_file_with_spaces.diff" style="display: none;"></div>
483 <div class="full_f_path" path="rhodecode/tests/fixtures/git_diff_rename_file_with_spaces.diff" style="display: none;"></div>
484 <table class="code-difftable">
484 <table class="code-difftable">
485 <tr class="line context">
485 <tr class="line context">
486 <td class="add-comment-line"><span class="add-comment-content"></span></td>
486 <td class="add-comment-line"><span class="add-comment-content"></span></td>
487 <td class="lineno old"><a href="#rhodecodetestsfixturesgit_diff_rename_file_with_spacesdiff_o"></a></td>
487 <td class="lineno old"><a href="#rhodecodetestsfixturesgit_diff_rename_file_with_spacesdiff_o"></a></td>
488 <td class="lineno new"><a href="#rhodecodetestsfixturesgit_diff_rename_file_with_spacesdiff_n"></a></td>
488 <td class="lineno new"><a href="#rhodecodetestsfixturesgit_diff_rename_file_with_spacesdiff_n"></a></td>
489 <td class="code no-comment">
489 <td class="code no-comment">
490 <pre>new file 100644</pre>
490 <pre>new file 100644</pre>
491 </td>
491 </td>
492 </tr>
492 </tr>
493 <tr class="line add">
493 <tr class="line add">
494 <td class="add-comment-line"><span class="add-comment-content"><a href="#"><span class="icon-comment-add"></span></a></span></td>
494 <td class="add-comment-line"><span class="add-comment-content"><a href="#"><span class="icon-comment-add"></span></a></span></td>
495 <td class="lineno old"><a href="#rhodecodetestsfixturesgit_diff_rename_file_with_spacesdiff_o"></a></td>
495 <td class="lineno old"><a href="#rhodecodetestsfixturesgit_diff_rename_file_with_spacesdiff_o"></a></td>
496 <td id="rhodecodetestsfixturesgit_diff_rename_file_with_spacesdiff_n1" class="lineno new"><a href="#rhodecodetestsfixturesgit_diff_rename_file_with_spacesdiff_n1">1</a></td>
496 <td id="rhodecodetestsfixturesgit_diff_rename_file_with_spacesdiff_n1" class="lineno new"><a href="#rhodecodetestsfixturesgit_diff_rename_file_with_spacesdiff_n1">1</a></td>
497 <td class="code">
497 <td class="code">
498 <pre>diff --git a/file_with_ spaces.txt b/file_with_ two spaces.txt
498 <pre>diff --git a/file_with_ spaces.txt b/file_with_ two spaces.txt
499 </pre>
499 </pre>
500 </td>
500 </td>
501 </tr>
501 </tr>
502 <tr class="line add">
502 <tr class="line add">
503 <td class="add-comment-line"><span class="add-comment-content"><a href="#"><span class="icon-comment-add"></span></a></span></td>
503 <td class="add-comment-line"><span class="add-comment-content"><a href="#"><span class="icon-comment-add"></span></a></span></td>
504 <td class="lineno old"><a href="#rhodecodetestsfixturesgit_diff_rename_file_with_spacesdiff_o"></a></td>
504 <td class="lineno old"><a href="#rhodecodetestsfixturesgit_diff_rename_file_with_spacesdiff_o"></a></td>
505 <td id="rhodecodetestsfixturesgit_diff_rename_file_with_spacesdiff_n2" class="lineno new"><a href="#rhodecodetestsfixturesgit_diff_rename_file_with_spacesdiff_n2">2</a></td>
505 <td id="rhodecodetestsfixturesgit_diff_rename_file_with_spacesdiff_n2" class="lineno new"><a href="#rhodecodetestsfixturesgit_diff_rename_file_with_spacesdiff_n2">2</a></td>
506 <td class="code">
506 <td class="code">
507 <pre>similarity index 100%
507 <pre>similarity index 100%
508 </pre>
508 </pre>
509 </td>
509 </td>
510 </tr>
510 </tr>
511 <tr class="line add">
511 <tr class="line add">
512 <td class="add-comment-line"><span class="add-comment-content"><a href="#"><span class="icon-comment-add"></span></a></span></td>
512 <td class="add-comment-line"><span class="add-comment-content"><a href="#"><span class="icon-comment-add"></span></a></span></td>
513 <td class="lineno old"><a href="#rhodecodetestsfixturesgit_diff_rename_file_with_spacesdiff_o"></a></td>
513 <td class="lineno old"><a href="#rhodecodetestsfixturesgit_diff_rename_file_with_spacesdiff_o"></a></td>
514 <td id="rhodecodetestsfixturesgit_diff_rename_file_with_spacesdiff_n3" class="lineno new"><a href="#rhodecodetestsfixturesgit_diff_rename_file_with_spacesdiff_n3">3</a></td>
514 <td id="rhodecodetestsfixturesgit_diff_rename_file_with_spacesdiff_n3" class="lineno new"><a href="#rhodecodetestsfixturesgit_diff_rename_file_with_spacesdiff_n3">3</a></td>
515 <td class="code">
515 <td class="code">
516 <pre>rename from file_with_ spaces.txt
516 <pre>rename from file_with_ spaces.txt
517 </pre>
517 </pre>
518 </td>
518 </td>
519 </tr>
519 </tr>
520 <tr class="line add">
520 <tr class="line add">
521 <td class="add-comment-line"><span class="add-comment-content"><a href="#"><span class="icon-comment-add"></span></a></span></td>
521 <td class="add-comment-line"><span class="add-comment-content"><a href="#"><span class="icon-comment-add"></span></a></span></td>
522 <td class="lineno old"><a href="#rhodecodetestsfixturesgit_diff_rename_file_with_spacesdiff_o"></a></td>
522 <td class="lineno old"><a href="#rhodecodetestsfixturesgit_diff_rename_file_with_spacesdiff_o"></a></td>
523 <td id="rhodecodetestsfixturesgit_diff_rename_file_with_spacesdiff_n4" class="lineno new"><a href="#rhodecodetestsfixturesgit_diff_rename_file_with_spacesdiff_n4">4</a></td>
523 <td id="rhodecodetestsfixturesgit_diff_rename_file_with_spacesdiff_n4" class="lineno new"><a href="#rhodecodetestsfixturesgit_diff_rename_file_with_spacesdiff_n4">4</a></td>
524 <td class="code">
524 <td class="code">
525 <pre>rename to file_with_ two spaces.txt
525 <pre>rename to file_with_ two spaces.txt
526 </pre>
526 </pre>
527 </td>
527 </td>
528 </tr>
528 </tr>
529 <tr class="line context">
529 <tr class="line context">
530 <td class="add-comment-line"><span class="add-comment-content"></span></td>
530 <td class="add-comment-line"><span class="add-comment-content"></span></td>
531 <td class="lineno old"><a href="#rhodecodetestsfixturesgit_diff_rename_file_with_spacesdiff_o...">...</a></td>
531 <td class="lineno old"><a href="#rhodecodetestsfixturesgit_diff_rename_file_with_spacesdiff_o...">...</a></td>
532 <td class="lineno new"><a href="#rhodecodetestsfixturesgit_diff_rename_file_with_spacesdiff_n...">...</a></td>
532 <td class="lineno new"><a href="#rhodecodetestsfixturesgit_diff_rename_file_with_spacesdiff_n...">...</a></td>
533 <td class="code no-comment">
533 <td class="code no-comment">
534 <pre> No newline at end of file</pre>
534 <pre> No newline at end of file</pre>
535 </td>
535 </td>
536 </tr>
536 </tr>
537 </table>
537 </table>
538 </div>
538 </div>
539 </div>
539 </div>
540 </div>
540 </div>
541
541
542 </td>
542 </td>
543 </tr>
543 </tr>
544 <tr class="cs_A expand_file" fid="c--c21377f778f9">
544 <tr class="cs_A expand_file" fid="c--c21377f778f9">
545 <td class="cs_icon_td">
545 <td class="cs_icon_td">
546 <span class="expand_file_icon" fid="c--c21377f778f9"></span>
546 <span class="expand_file_icon" fid="c--c21377f778f9"></span>
547 </td>
547 </td>
548 <td class="cs_icon_td">
548 <td class="cs_icon_td">
549 <div class="flag_status not_reviewed hidden"></div>
549 <div class="flag_status not_reviewed hidden"></div>
550 </td>
550 </td>
551 <td id="a_c--c21377f778f9">
551 <td id="a_c--c21377f778f9">
552 <a class="compare_view_filepath" href="#a_c--c21377f778f9">
552 <a class="compare_view_filepath" href="#a_c--c21377f778f9">
553 rhodecode/tests/fixtures/hg_diff_copy_file_with_spaces.diff
553 rhodecode/tests/fixtures/hg_diff_copy_file_with_spaces.diff
554 </a>
554 </a>
555 <span id="diff_c--c21377f778f9" class="diff_links" style="display: none;">
555 <span id="diff_c--c21377f778f9" class="diff_links" style="display: none;">
556 <a href="/andersonsantos/rhodecode-momentum-fork/diff/rhodecode/tests/fixtures/hg_diff_copy_file_with_spaces.diff?diff2=46b3d50315f0f2b1f64485ac95af4f384948f9cb&amp;diff1=b78e2376b986b2cf656a2b4390b09f303291c886&amp;fulldiff=1&amp;diff=diff">
556 <a href="/andersonsantos/rhodecode-momentum-fork/diff/rhodecode/tests/fixtures/hg_diff_copy_file_with_spaces.diff?diff2=46b3d50315f0f2b1f64485ac95af4f384948f9cb&amp;diff1=b78e2376b986b2cf656a2b4390b09f303291c886&amp;fulldiff=1&amp;diff=diff">
557 Unified Diff
557 Unified Diff
558 </a>
558 </a>
559 |
559 |
560 <a href="/andersonsantos/rhodecode-momentum-fork/diff-2way/rhodecode/tests/fixtures/hg_diff_copy_file_with_spaces.diff?diff2=46b3d50315f0f2b1f64485ac95af4f384948f9cb&amp;diff1=b78e2376b986b2cf656a2b4390b09f303291c886&amp;fulldiff=1&amp;diff=diff">
560 <a href="/andersonsantos/rhodecode-momentum-fork/diff-2way/rhodecode/tests/fixtures/hg_diff_copy_file_with_spaces.diff?diff2=46b3d50315f0f2b1f64485ac95af4f384948f9cb&amp;diff1=b78e2376b986b2cf656a2b4390b09f303291c886&amp;fulldiff=1&amp;diff=diff">
561 Side-by-side Diff
561 Side-by-side Diff
562 </a>
562 </a>
563 </span>
563 </span>
564 </td>
564 </td>
565 <td>
565 <td>
566 <div class="changes pull-right"><div style="width:100px"><div class="added top-right-rounded-corner-mid bottom-right-rounded-corner-mid top-left-rounded-corner-mid bottom-left-rounded-corner-mid" style="width:100.0%">3</div><div class="deleted top-right-rounded-corner-mid bottom-right-rounded-corner-mid" style="width:0%"></div></div></div>
566 <div class="changes pull-right"><div style="width:100px"><div class="added top-right-rounded-corner-mid bottom-right-rounded-corner-mid top-left-rounded-corner-mid bottom-left-rounded-corner-mid" style="width:100.0%">3</div><div class="deleted top-right-rounded-corner-mid bottom-right-rounded-corner-mid" style="width:0%"></div></div></div>
567 <div class="comment-bubble pull-right" data-path="rhodecode/tests/fixtures/hg_diff_copy_file_with_spaces.diff">
567 <div class="comment-bubble pull-right" data-path="rhodecode/tests/fixtures/hg_diff_copy_file_with_spaces.diff">
568 <i class="icon-comment"></i>
568 <i class="icon-comment"></i>
569 </div>
569 </div>
570 </td>
570 </td>
571 </tr>
571 </tr>
572 <tr id="tr_c--c21377f778f9">
572 <tr id="tr_c--c21377f778f9">
573 <td></td>
573 <td></td>
574 <td></td>
574 <td></td>
575 <td class="injected_diff" colspan="2">
575 <td class="injected_diff" colspan="2">
576
576
577 <div class="diff-container" id="diff-container-140716195038344">
577 <div class="diff-container" id="diff-container-140716195038344">
578 <div id="c--c21377f778f9_target" ></div>
578 <div id="c--c21377f778f9_target" ></div>
579 <div id="c--c21377f778f9" class="diffblock margined comm" >
579 <div id="c--c21377f778f9" class="diffblock margined comm" >
580 <div class="code-body">
580 <div class="code-body">
581 <div class="full_f_path" path="rhodecode/tests/fixtures/hg_diff_copy_file_with_spaces.diff" style="display: none;"></div>
581 <div class="full_f_path" path="rhodecode/tests/fixtures/hg_diff_copy_file_with_spaces.diff" style="display: none;"></div>
582 <table class="code-difftable">
582 <table class="code-difftable">
583 <tr class="line context">
583 <tr class="line context">
584 <td class="add-comment-line"><span class="add-comment-content"></span></td>
584 <td class="add-comment-line"><span class="add-comment-content"></span></td>
585 <td class="lineno old"><a href="#rhodecodetestsfixtureshg_diff_copy_file_with_spacesdiff_o"></a></td>
585 <td class="lineno old"><a href="#rhodecodetestsfixtureshg_diff_copy_file_with_spacesdiff_o"></a></td>
586 <td class="lineno new"><a href="#rhodecodetestsfixtureshg_diff_copy_file_with_spacesdiff_n"></a></td>
586 <td class="lineno new"><a href="#rhodecodetestsfixtureshg_diff_copy_file_with_spacesdiff_n"></a></td>
587 <td class="code no-comment">
587 <td class="code no-comment">
588 <pre>new file 100644</pre>
588 <pre>new file 100644</pre>
589 </td>
589 </td>
590 </tr>
590 </tr>
591 <tr class="line add">
591 <tr class="line add">
592 <td class="add-comment-line"><span class="add-comment-content"><a href="#"><span class="icon-comment-add"></span></a></span></td>
592 <td class="add-comment-line"><span class="add-comment-content"><a href="#"><span class="icon-comment-add"></span></a></span></td>
593 <td class="lineno old"><a href="#rhodecodetestsfixtureshg_diff_copy_file_with_spacesdiff_o"></a></td>
593 <td class="lineno old"><a href="#rhodecodetestsfixtureshg_diff_copy_file_with_spacesdiff_o"></a></td>
594 <td id="rhodecodetestsfixtureshg_diff_copy_file_with_spacesdiff_n1" class="lineno new"><a href="#rhodecodetestsfixtureshg_diff_copy_file_with_spacesdiff_n1">1</a></td>
594 <td id="rhodecodetestsfixtureshg_diff_copy_file_with_spacesdiff_n1" class="lineno new"><a href="#rhodecodetestsfixtureshg_diff_copy_file_with_spacesdiff_n1">1</a></td>
595 <td class="code">
595 <td class="code">
596 <pre>diff --git a/file_changed_without_spaces.txt b/file_copied_ with spaces.txt
596 <pre>diff --git a/file_changed_without_spaces.txt b/file_copied_ with spaces.txt
597 </pre>
597 </pre>
598 </td>
598 </td>
599 </tr>
599 </tr>
600 <tr class="line add">
600 <tr class="line add">
601 <td class="add-comment-line"><span class="add-comment-content"><a href="#"><span class="icon-comment-add"></span></a></span></td>
601 <td class="add-comment-line"><span class="add-comment-content"><a href="#"><span class="icon-comment-add"></span></a></span></td>
602 <td class="lineno old"><a href="#rhodecodetestsfixtureshg_diff_copy_file_with_spacesdiff_o"></a></td>
602 <td class="lineno old"><a href="#rhodecodetestsfixtureshg_diff_copy_file_with_spacesdiff_o"></a></td>
603 <td id="rhodecodetestsfixtureshg_diff_copy_file_with_spacesdiff_n2" class="lineno new"><a href="#rhodecodetestsfixtureshg_diff_copy_file_with_spacesdiff_n2">2</a></td>
603 <td id="rhodecodetestsfixtureshg_diff_copy_file_with_spacesdiff_n2" class="lineno new"><a href="#rhodecodetestsfixtureshg_diff_copy_file_with_spacesdiff_n2">2</a></td>
604 <td class="code">
604 <td class="code">
605 <pre>copy from file_changed_without_spaces.txt
605 <pre>copy from file_changed_without_spaces.txt
606 </pre>
606 </pre>
607 </td>
607 </td>
608 </tr>
608 </tr>
609 <tr class="line add">
609 <tr class="line add">
610 <td class="add-comment-line"><span class="add-comment-content"><a href="#"><span class="icon-comment-add"></span></a></span></td>
610 <td class="add-comment-line"><span class="add-comment-content"><a href="#"><span class="icon-comment-add"></span></a></span></td>
611 <td class="lineno old"><a href="#rhodecodetestsfixtureshg_diff_copy_file_with_spacesdiff_o"></a></td>
611 <td class="lineno old"><a href="#rhodecodetestsfixtureshg_diff_copy_file_with_spacesdiff_o"></a></td>
612 <td id="rhodecodetestsfixtureshg_diff_copy_file_with_spacesdiff_n3" class="lineno new"><a href="#rhodecodetestsfixtureshg_diff_copy_file_with_spacesdiff_n3">3</a></td>
612 <td id="rhodecodetestsfixtureshg_diff_copy_file_with_spacesdiff_n3" class="lineno new"><a href="#rhodecodetestsfixtureshg_diff_copy_file_with_spacesdiff_n3">3</a></td>
613 <td class="code">
613 <td class="code">
614 <pre>copy to file_copied_ with spaces.txt
614 <pre>copy to file_copied_ with spaces.txt
615 </pre>
615 </pre>
616 </td>
616 </td>
617 </tr>
617 </tr>
618 <tr class="line context">
618 <tr class="line context">
619 <td class="add-comment-line"><span class="add-comment-content"></span></td>
619 <td class="add-comment-line"><span class="add-comment-content"></span></td>
620 <td class="lineno old"><a href="#rhodecodetestsfixtureshg_diff_copy_file_with_spacesdiff_o...">...</a></td>
620 <td class="lineno old"><a href="#rhodecodetestsfixtureshg_diff_copy_file_with_spacesdiff_o...">...</a></td>
621 <td class="lineno new"><a href="#rhodecodetestsfixtureshg_diff_copy_file_with_spacesdiff_n...">...</a></td>
621 <td class="lineno new"><a href="#rhodecodetestsfixtureshg_diff_copy_file_with_spacesdiff_n...">...</a></td>
622 <td class="code no-comment">
622 <td class="code no-comment">
623 <pre> No newline at end of file</pre>
623 <pre> No newline at end of file</pre>
624 </td>
624 </td>
625 </tr>
625 </tr>
626 </table>
626 </table>
627 </div>
627 </div>
628 </div>
628 </div>
629 </div>
629 </div>
630
630
631 </td>
631 </td>
632 </tr>
632 </tr>
633 <tr class="cs_A expand_file" fid="c--ee62085ad7a8">
633 <tr class="cs_A expand_file" fid="c--ee62085ad7a8">
634 <td class="cs_icon_td">
634 <td class="cs_icon_td">
635 <span class="expand_file_icon" fid="c--ee62085ad7a8"></span>
635 <span class="expand_file_icon" fid="c--ee62085ad7a8"></span>
636 </td>
636 </td>
637 <td class="cs_icon_td">
637 <td class="cs_icon_td">
638 <div class="flag_status not_reviewed hidden"></div>
638 <div class="flag_status not_reviewed hidden"></div>
639 </td>
639 </td>
640 <td id="a_c--ee62085ad7a8">
640 <td id="a_c--ee62085ad7a8">
641 <a class="compare_view_filepath" href="#a_c--ee62085ad7a8">
641 <a class="compare_view_filepath" href="#a_c--ee62085ad7a8">
642 rhodecode/tests/fixtures/hg_diff_rename_file_with_spaces.diff
642 rhodecode/tests/fixtures/hg_diff_rename_file_with_spaces.diff
643 </a>
643 </a>
644 <span id="diff_c--ee62085ad7a8" class="diff_links" style="display: none;">
644 <span id="diff_c--ee62085ad7a8" class="diff_links" style="display: none;">
645 <a href="/andersonsantos/rhodecode-momentum-fork/diff/rhodecode/tests/fixtures/hg_diff_rename_file_with_spaces.diff?diff2=46b3d50315f0f2b1f64485ac95af4f384948f9cb&amp;diff1=b78e2376b986b2cf656a2b4390b09f303291c886&amp;fulldiff=1&amp;diff=diff">
645 <a href="/andersonsantos/rhodecode-momentum-fork/diff/rhodecode/tests/fixtures/hg_diff_rename_file_with_spaces.diff?diff2=46b3d50315f0f2b1f64485ac95af4f384948f9cb&amp;diff1=b78e2376b986b2cf656a2b4390b09f303291c886&amp;fulldiff=1&amp;diff=diff">
646 Unified Diff
646 Unified Diff
647 </a>
647 </a>
648 |
648 |
649 <a href="/andersonsantos/rhodecode-momentum-fork/diff-2way/rhodecode/tests/fixtures/hg_diff_rename_file_with_spaces.diff?diff2=46b3d50315f0f2b1f64485ac95af4f384948f9cb&amp;diff1=b78e2376b986b2cf656a2b4390b09f303291c886&amp;fulldiff=1&amp;diff=diff">
649 <a href="/andersonsantos/rhodecode-momentum-fork/diff-2way/rhodecode/tests/fixtures/hg_diff_rename_file_with_spaces.diff?diff2=46b3d50315f0f2b1f64485ac95af4f384948f9cb&amp;diff1=b78e2376b986b2cf656a2b4390b09f303291c886&amp;fulldiff=1&amp;diff=diff">
650 Side-by-side Diff
650 Side-by-side Diff
651 </a>
651 </a>
652 </span>
652 </span>
653 </td>
653 </td>
654 <td>
654 <td>
655 <div class="changes pull-right"><div style="width:100px"><div class="added top-right-rounded-corner-mid bottom-right-rounded-corner-mid top-left-rounded-corner-mid bottom-left-rounded-corner-mid" style="width:100.0%">3</div><div class="deleted top-right-rounded-corner-mid bottom-right-rounded-corner-mid" style="width:0%"></div></div></div>
655 <div class="changes pull-right"><div style="width:100px"><div class="added top-right-rounded-corner-mid bottom-right-rounded-corner-mid top-left-rounded-corner-mid bottom-left-rounded-corner-mid" style="width:100.0%">3</div><div class="deleted top-right-rounded-corner-mid bottom-right-rounded-corner-mid" style="width:0%"></div></div></div>
656 <div class="comment-bubble pull-right" data-path="rhodecode/tests/fixtures/hg_diff_rename_file_with_spaces.diff">
656 <div class="comment-bubble pull-right" data-path="rhodecode/tests/fixtures/hg_diff_rename_file_with_spaces.diff">
657 <i class="icon-comment"></i>
657 <i class="icon-comment"></i>
658 </div>
658 </div>
659 </td>
659 </td>
660 </tr>
660 </tr>
661 <tr id="tr_c--ee62085ad7a8">
661 <tr id="tr_c--ee62085ad7a8">
662 <td></td>
662 <td></td>
663 <td></td>
663 <td></td>
664 <td class="injected_diff" colspan="2">
664 <td class="injected_diff" colspan="2">
665
665
666 <div class="diff-container" id="diff-container-140716195039496">
666 <div class="diff-container" id="diff-container-140716195039496">
667 <div id="c--ee62085ad7a8_target" ></div>
667 <div id="c--ee62085ad7a8_target" ></div>
668 <div id="c--ee62085ad7a8" class="diffblock margined comm" >
668 <div id="c--ee62085ad7a8" class="diffblock margined comm" >
669 <div class="code-body">
669 <div class="code-body">
670 <div class="full_f_path" path="rhodecode/tests/fixtures/hg_diff_rename_file_with_spaces.diff" style="display: none;"></div>
670 <div class="full_f_path" path="rhodecode/tests/fixtures/hg_diff_rename_file_with_spaces.diff" style="display: none;"></div>
671 <table class="code-difftable">
671 <table class="code-difftable">
672 <tr class="line context">
672 <tr class="line context">
673 <td class="add-comment-line"><span class="add-comment-content"></span></td>
673 <td class="add-comment-line"><span class="add-comment-content"></span></td>
674 <td class="lineno old"><a href="#rhodecodetestsfixtureshg_diff_rename_file_with_spacesdiff_o"></a></td>
674 <td class="lineno old"><a href="#rhodecodetestsfixtureshg_diff_rename_file_with_spacesdiff_o"></a></td>
675 <td class="lineno new"><a href="#rhodecodetestsfixtureshg_diff_rename_file_with_spacesdiff_n"></a></td>
675 <td class="lineno new"><a href="#rhodecodetestsfixtureshg_diff_rename_file_with_spacesdiff_n"></a></td>
676 <td class="code no-comment">
676 <td class="code no-comment">
677 <pre>new file 100644</pre>
677 <pre>new file 100644</pre>
678 </td>
678 </td>
679 </tr>
679 </tr>
680 <tr class="line add">
680 <tr class="line add">
681 <td class="add-comment-line"><span class="add-comment-content"><a href="#"><span class="icon-comment-add"></span></a></span></td>
681 <td class="add-comment-line"><span class="add-comment-content"><a href="#"><span class="icon-comment-add"></span></a></span></td>
682 <td class="lineno old"><a href="#rhodecodetestsfixtureshg_diff_rename_file_with_spacesdiff_o"></a></td>
682 <td class="lineno old"><a href="#rhodecodetestsfixtureshg_diff_rename_file_with_spacesdiff_o"></a></td>
683 <td id="rhodecodetestsfixtureshg_diff_rename_file_with_spacesdiff_n1" class="lineno new"><a href="#rhodecodetestsfixtureshg_diff_rename_file_with_spacesdiff_n1">1</a></td>
683 <td id="rhodecodetestsfixtureshg_diff_rename_file_with_spacesdiff_n1" class="lineno new"><a href="#rhodecodetestsfixtureshg_diff_rename_file_with_spacesdiff_n1">1</a></td>
684 <td class="code">
684 <td class="code">
685 <pre>diff --git a/file_ with update.txt b/file_changed _.txt
685 <pre>diff --git a/file_ with update.txt b/file_changed _.txt
686 </pre>
686 </pre>
687 </td>
687 </td>
688 </tr>
688 </tr>
689 <tr class="line add">
689 <tr class="line add">
690 <td class="add-comment-line"><span class="add-comment-content"><a href="#"><span class="icon-comment-add"></span></a></span></td>
690 <td class="add-comment-line"><span class="add-comment-content"><a href="#"><span class="icon-comment-add"></span></a></span></td>
691 <td class="lineno old"><a href="#rhodecodetestsfixtureshg_diff_rename_file_with_spacesdiff_o"></a></td>
691 <td class="lineno old"><a href="#rhodecodetestsfixtureshg_diff_rename_file_with_spacesdiff_o"></a></td>
692 <td id="rhodecodetestsfixtureshg_diff_rename_file_with_spacesdiff_n2" class="lineno new"><a href="#rhodecodetestsfixtureshg_diff_rename_file_with_spacesdiff_n2">2</a></td>
692 <td id="rhodecodetestsfixtureshg_diff_rename_file_with_spacesdiff_n2" class="lineno new"><a href="#rhodecodetestsfixtureshg_diff_rename_file_with_spacesdiff_n2">2</a></td>
693 <td class="code">
693 <td class="code">
694 <pre>rename from file_ with update.txt
694 <pre>rename from file_ with update.txt
695 </pre>
695 </pre>
696 </td>
696 </td>
697 </tr>
697 </tr>
698 <tr class="line add">
698 <tr class="line add">
699 <td class="add-comment-line"><span class="add-comment-content"><a href="#"><span class="icon-comment-add"></span></a></span></td>
699 <td class="add-comment-line"><span class="add-comment-content"><a href="#"><span class="icon-comment-add"></span></a></span></td>
700 <td class="lineno old"><a href="#rhodecodetestsfixtureshg_diff_rename_file_with_spacesdiff_o"></a></td>
700 <td class="lineno old"><a href="#rhodecodetestsfixtureshg_diff_rename_file_with_spacesdiff_o"></a></td>
701 <td id="rhodecodetestsfixtureshg_diff_rename_file_with_spacesdiff_n3" class="lineno new"><a href="#rhodecodetestsfixtureshg_diff_rename_file_with_spacesdiff_n3">3</a></td>
701 <td id="rhodecodetestsfixtureshg_diff_rename_file_with_spacesdiff_n3" class="lineno new"><a href="#rhodecodetestsfixtureshg_diff_rename_file_with_spacesdiff_n3">3</a></td>
702 <td class="code">
702 <td class="code">
703 <pre>rename to file_changed _.txt</pre>
703 <pre>rename to file_changed _.txt</pre>
704 </td>
704 </td>
705 </tr>
705 </tr>
706 </table>
706 </table>
707 </div>
707 </div>
708 </div>
708 </div>
709 </div>
709 </div>
710
710
711 </td>
711 </td>
712 </tr>
712 </tr>
713
713
714 </table>
714 </table>
715 </div>
715 </div>
716 </div>
716 </div>
717 </div>
717 </div>
718
718
719 </td>
719 </td>
720 </tr>
720 </tr>
721 </table>
721 </table>
722 </div>
722 </div>
723 </div>
723 </div>
724 </div>
724 </div>
725
725
726
726
727
727
728
728
729 <div id="comment-inline-form-template" style="display: none;">
729 <div id="comment-inline-form-template" style="display: none;">
730 <div class="comment-inline-form ac">
730 <div class="comment-inline-form ac">
731 <div class="overlay"><div class="overlay-text">Submitting...</div></div>
731 <div class="overlay"><div class="overlay-text">Submitting...</div></div>
732 <form action="#" class="inline-form" method="get">
732 <form action="#" class="inline-form" method="get">
733 <div id="edit-container_{1}" class="clearfix">
733 <div id="edit-container_{1}" class="clearfix">
734 <div class="comment-title pull-left">
734 <div class="comment-title pull-left">
735 Commenting on line {1}.
735 Commenting on line {1}.
736 </div>
736 </div>
737 <div class="comment-help pull-right">
737 <div class="comment-help pull-right">
738 Comments parsed using <a href="http://docutils.sourceforge.net/docs/user/rst/quickref.html">RST</a> syntax with <span class="tooltip" title="Use @username inside this text to send notification to this RhodeCode user">@mention</span> support.
738 Comments parsed using <a href="http://docutils.sourceforge.net/docs/user/rst/quickref.html">RST</a> syntax with <span class="tooltip" title="Use @username inside this text to send notification to this RhodeCode user">@mention</span> support.
739 </div>
739 </div>
740 <div style="clear: both"></div>
740 <div style="clear: both"></div>
741 <textarea id="text_{1}" name="text" class="comment-block-ta ac-input"></textarea>
741 <textarea id="text_{1}" name="text" class="comment-block-ta ac-input"></textarea>
742 </div>
742 </div>
743 <div id="preview-container_{1}" class="clearfix" style="display: none;">
743 <div id="preview-container_{1}" class="clearfix" style="display: none;">
744 <div class="comment-help">
744 <div class="comment-help">
745 Comment preview
745 Comment preview
746 </div>
746 </div>
747 <div id="preview-box_{1}" class="preview-box"></div>
747 <div id="preview-box_{1}" class="preview-box"></div>
748 </div>
748 </div>
749 <div class="comment-button pull-right">
749 <div class="comment-button pull-right">
750 <input type="hidden" name="f_path" value="{0}">
750 <input type="hidden" name="f_path" value="{0}">
751 <input type="hidden" name="line" value="{1}">
751 <input type="hidden" name="line" value="{1}">
752 <div id="preview-btn_{1}" class="btn btn-default">Preview</div>
752 <div id="preview-btn_{1}" class="btn btn-default">Preview</div>
753 <div id="edit-btn_{1}" class="btn" style="display: none;">Edit</div>
753 <div id="edit-btn_{1}" class="btn" style="display: none;">Edit</div>
754 <input class="btn btn-success save-inline-form" id="save" name="save" type="submit" value="Comment" />
754 <input class="btn btn-success save-inline-form" id="save" name="save" type="submit" value="Comment" />
755 </div>
755 </div>
756 <div class="comment-button hide-inline-form-button">
756 <div class="comment-button hide-inline-form-button">
757 <input class="btn hide-inline-form" id="hide-inline-form" name="hide-inline-form" type="reset" value="Cancel" />
757 <input class="btn hide-inline-form" id="hide-inline-form" name="hide-inline-form" type="reset" value="Cancel" />
758 </div>
758 </div>
759 </form>
759 </form>
760 </div>
760 </div>
761 </div>
761 </div>
762
762
763
763
764
764
765 <div class="comments">
765 <div class="comments">
766 <div id="inline-comments-container">
766 <div id="inline-comments-container">
767
767
768 <h2>0 Pull Request Comments</h2>
768 <h2>0 Pull Request Comments</h2>
769
769
770
770
771 </div>
771 </div>
772
772
773 </div>
773 </div>
774
774
775
775
776
776
777
777
778 <div class="pull-request-merge">
778 <div class="pull-request-merge">
779 </div>
779 </div>
780 <div class="comments">
780 <div class="comments">
781 <div class="comment-form ac">
781 <div class="comment-form ac">
782 <form action="/rhodecode-momentum/pull-request-comment/720" id="comments_form" method="POST">
782 <form action="/rhodecode-momentum/pull-request-comment/720" id="comments_form" method="POST">
783 <div style="display: none;"><input id="csrf_token" name="csrf_token" type="hidden" value="6dbc0b19ac65237df65d57202a3e1f2df4153e38" /></div>
783 <div style="display: none;"><input id="csrf_token" name="csrf_token" type="hidden" value="6dbc0b19ac65237df65d57202a3e1f2df4153e38" /></div>
784 <div id="edit-container" class="clearfix">
784 <div id="edit-container" class="clearfix">
785 <div class="comment-title pull-left">
785 <div class="comment-title pull-left">
786 Create a comment on this Pull Request.
786 Create a comment on this Pull Request.
787 </div>
787 </div>
788 <div class="comment-help pull-right">
788 <div class="comment-help pull-right">
789 Comments parsed using <a href="http://docutils.sourceforge.net/docs/user/rst/quickref.html">RST</a> syntax with <span class="tooltip" title="Use @username inside this text to send notification to this RhodeCode user">@mention</span> support.
789 Comments parsed using <a href="http://docutils.sourceforge.net/docs/user/rst/quickref.html">RST</a> syntax with <span class="tooltip" title="Use @username inside this text to send notification to this RhodeCode user">@mention</span> support.
790 </div>
790 </div>
791 <div style="clear: both"></div>
791 <div style="clear: both"></div>
792 <textarea class="comment-block-ta" id="text" name="text"></textarea>
792 <textarea class="comment-block-ta" id="text" name="text"></textarea>
793 </div>
793 </div>
794
794
795 <div id="preview-container" class="clearfix" style="display: none;">
795 <div id="preview-container" class="clearfix" style="display: none;">
796 <div class="comment-title">
796 <div class="comment-title">
797 Comment preview
797 Comment preview
798 </div>
798 </div>
799 <div id="preview-box" class="preview-box"></div>
799 <div id="preview-box" class="preview-box"></div>
800 </div>
800 </div>
801
801
802 <div id="comment_form_extras">
802 <div id="comment_form_extras">
803 </div>
803 </div>
804 <div class="action-button pull-right">
804 <div class="action-button pull-right">
805 <div id="preview-btn" class="btn">
805 <div id="preview-btn" class="btn">
806 Preview
806 Preview
807 </div>
807 </div>
808 <div id="edit-btn" class="btn" style="display: none;">
808 <div id="edit-btn" class="btn" style="display: none;">
809 Edit
809 Edit
810 </div>
810 </div>
811 <div class="comment-button">
811 <div class="comment-button">
812 <input class="btn btn-small btn-success comment-button-input" id="save" name="save" type="submit" value="Comment" />
812 <input class="btn btn-small btn-success comment-button-input" id="save" name="save" type="submit" value="Comment" />
813 </div>
813 </div>
814 </div>
814 </div>
815 </form>
815 </form>
816 </div>
816 </div>
817 </div>
817 </div>
818 <script>
818 <script>
819
819
820 $(document).ready(function() {
820 $(document).ready(function() {
821
821
822 var cm = initCommentBoxCodeMirror('#text');
822 var cm = initCommentBoxCodeMirror('#text');
823
823
824 // main form preview
824 // main form preview
825 $('#preview-btn').on('click', function(e) {
825 $('#preview-btn').on('click', function(e) {
826 $('#preview-btn').hide();
826 $('#preview-btn').hide();
827 $('#edit-btn').show();
827 $('#edit-btn').show();
828 var _text = cm.getValue();
828 var _text = cm.getValue();
829 if (!_text) {
829 if (!_text) {
830 return;
830 return;
831 }
831 }
832 var post_data = {
832 var post_data = {
833 'text': _text,
833 'text': _text,
834 'renderer': DEFAULT_RENDERER,
834 'renderer': DEFAULT_RENDERER,
835 'csrf_token': CSRF_TOKEN
835 'csrf_token': CSRF_TOKEN
836 };
836 };
837 var previewbox = $('#preview-box');
837 var previewbox = $('#preview-box');
838 previewbox.addClass('unloaded');
838 previewbox.addClass('unloaded');
839 previewbox.html(_gettext('Loading ...'));
839 previewbox.html(_gettext('Loading ...'));
840 $('#edit-container').hide();
840 $('#edit-container').hide();
841 $('#preview-container').show();
841 $('#preview-container').show();
842
842
843 var url = pyroutes.url('changeset_comment_preview', {'repo_name': 'rhodecode-momentum'});
843 var url = pyroutes.url('changeset_comment_preview', {'repo_name': 'rhodecode-momentum'});
844
844
845 ajaxPOST(url, post_data, function(o) {
845 ajaxPOST(url, post_data, function(o) {
846 previewbox.html(o);
846 previewbox.html(o);
847 previewbox.removeClass('unloaded');
847 previewbox.removeClass('unloaded');
848 });
848 });
849 });
849 });
850 $('#edit-btn').on('click', function(e) {
850 $('#edit-btn').on('click', function(e) {
851 $('#preview-btn').show();
851 $('#preview-btn').show();
852 $('#edit-btn').hide();
852 $('#edit-btn').hide();
853 $('#edit-container').show();
853 $('#edit-container').show();
854 $('#preview-container').hide();
854 $('#preview-container').hide();
855 });
855 });
856
856
857 var formatChangeStatus = function(state, escapeMarkup) {
857 var formatChangeStatus = function(state, escapeMarkup) {
858 var originalOption = state.element;
858 var originalOption = state.element;
859 return '<div class="flag_status ' + $(originalOption).data('status') + ' pull-left"></div>' +
859 return '<div class="flag_status ' + $(originalOption).data('status') + ' pull-left"></div>' +
860 '<span>' + escapeMarkup(state.text) + '</span>';
860 '<span>' + escapeMarkup(state.text) + '</span>';
861 };
861 };
862
862
863 var formatResult = function(result, container, query, escapeMarkup) {
863 var formatResult = function(result, container, query, escapeMarkup) {
864 return formatChangeStatus(result, escapeMarkup);
864 return formatChangeStatus(result, escapeMarkup);
865 };
865 };
866
866
867 var formatSelection = function(data, container, escapeMarkup) {
867 var formatSelection = function(data, container, escapeMarkup) {
868 return formatChangeStatus(data, escapeMarkup);
868 return formatChangeStatus(data, escapeMarkup);
869 };
869 };
870
870
871 $('#change_status_general').select2({
871 $('#change_status_general').select2({
872 placeholder: "Status Review",
872 placeholder: "Status Review",
873 formatResult: formatResult,
873 formatResult: formatResult,
874 formatSelection: formatSelection,
874 formatSelection: formatSelection,
875 containerCssClass: "drop-menu status_box_menu",
875 containerCssClass: "drop-menu status_box_menu",
876 dropdownCssClass: "drop-menu-dropdown",
876 dropdownCssClass: "drop-menu-dropdown",
877 dropdownAutoWidth: true,
877 dropdownAutoWidth: true,
878 minimumResultsForSearch: -1
878 minimumResultsForSearch: -1
879 });
879 });
880 });
880 });
881 </script>
881 </script>
882
882
883
883
884 <script type="text/javascript">
884 <script type="text/javascript">
885 // TODO: switch this to pyroutes
885 // TODO: switch this to pyroutes
886 AJAX_COMMENT_DELETE_URL = "/rhodecode-momentum/pull-request-comment/__COMMENT_ID__/delete";
886 AJAX_COMMENT_DELETE_URL = "/rhodecode-momentum/pull-request-comment/__COMMENT_ID__/delete";
887
887
888 $(function(){
888 $(function(){
889 ReviewerAutoComplete('#user');
889 ReviewerAutoComplete('#user');
890
890
891 $('#open_edit_reviewers').on('click', function(e){
891 $('#open_edit_reviewers').on('click', function(e){
892 $('#open_edit_reviewers').hide();
892 $('#open_edit_reviewers').hide();
893 $('#close_edit_reviewers').show();
893 $('#close_edit_reviewers').show();
894 $('#add_reviewer_input').show();
894 $('#add_reviewer_input').show();
895 $('.reviewer_member_remove').css('visibility', 'visible');
895 $('.reviewer_member_remove').css('visibility', 'visible');
896 });
896 });
897
897
898 $('#close_edit_reviewers').on('click', function(e){
898 $('#close_edit_reviewers').on('click', function(e){
899 $('#open_edit_reviewers').show();
899 $('#open_edit_reviewers').show();
900 $('#close_edit_reviewers').hide();
900 $('#close_edit_reviewers').hide();
901 $('#add_reviewer_input').hide();
901 $('#add_reviewer_input').hide();
902 $('.reviewer_member_remove').css('visibility', 'hidden');
902 $('.reviewer_member_remove').css('visibility', 'hidden');
903 });
903 });
904
904
905 $('.show-inline-comments').on('change', function(e){
905 $('.show-inline-comments').on('change', function(e){
906 var show = 'none';
906 var show = 'none';
907 var target = e.currentTarget;
907 var target = e.currentTarget;
908 if(target.checked){
908 if(target.checked){
909 show = ''
909 show = ''
910 }
910 }
911 var boxid = $(target).attr('id_for');
911 var boxid = $(target).attr('id_for');
912 var comments = $('#{0} .inline-comments'.format(boxid));
912 var comments = $('#{0} .inline-comments'.format(boxid));
913 var fn_display = function(idx){
913 var fn_display = function(idx){
914 $(this).css('display', show);
914 $(this).css('display', show);
915 };
915 };
916 $(comments).each(fn_display);
916 $(comments).each(fn_display);
917 var btns = $('#{0} .inline-comments-button'.format(boxid));
917 var btns = $('#{0} .inline-comments-button'.format(boxid));
918 $(btns).each(fn_display);
918 $(btns).each(fn_display);
919 });
919 });
920
920
921 var commentTotals = {};
921 var commentTotals = {};
922 $.each(file_comments, function(i, comment) {
922 $.each(file_comments, function(i, comment) {
923 var path = $(comment).attr('path');
923 var path = $(comment).attr('path');
924 var comms = $(comment).children().length;
924 var comms = $(comment).children().length;
925 if (path in commentTotals) {
925 if (path in commentTotals) {
926 commentTotals[path] += comms;
926 commentTotals[path] += comms;
927 } else {
927 } else {
928 commentTotals[path] = comms;
928 commentTotals[path] = comms;
929 }
929 }
930 });
930 });
931 $.each(commentTotals, function(path, total) {
931 $.each(commentTotals, function(path, total) {
932 var elem = $('.comment-bubble[data-path="'+ path +'"]')
932 var elem = $('.comment-bubble[data-path="'+ path +'"]')
933 elem.css('visibility', 'visible');
933 elem.css('visibility', 'visible');
934 elem.html(elem.html() + ' ' + total );
934 elem.html(elem.html() + ' ' + total );
935 });
935 });
936
936
937 $('#merge_pull_request_form').submit(function() {
937 $('#merge_pull_request_form').submit(function() {
938 if (!$('#merge_pull_request').attr('disabled')) {
938 if (!$('#merge_pull_request').attr('disabled')) {
939 $('#merge_pull_request').attr('disabled', 'disabled');
939 $('#merge_pull_request').attr('disabled', 'disabled');
940 }
940 }
941 return true;
941 return true;
942 });
942 });
943
943
944 $('#update_pull_request').on('click', function(e){
944 $('#update_pull_request').on('click', function(e){
945 updateReviewers(undefined, "rhodecode-momentum", "720");
945 updateReviewers(undefined, "rhodecode-momentum", "720");
946 });
946 });
947
947
948 $('#update_commits').on('click', function(e){
948 $('#update_commits').on('click', function(e){
949 updateCommits("rhodecode-momentum", "720");
949 updateCommits("rhodecode-momentum", "720");
950 });
950 });
951
951
952 })
952 })
953 </script>
953 </script>
954
954
955 </div>
955 </div>
956 </div></div>
956 </div></div>
957
957
958 </div>
958 </div>
959
959
960
960
961 </%def>
961 </%def>
@@ -1,295 +1,295 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2 <%inherit file="/debug_style/index.html"/>
2 <%inherit file="/debug_style/index.html"/>
3
3
4 <%def name="breadcrumbs_links()">
4 <%def name="breadcrumbs_links()">
5 ${h.link_to(_('Style'), h.url('debug_style_home'))}
5 ${h.link_to(_('Style'), h.route_path('debug_style_home'))}
6 &raquo;
6 &raquo;
7 ${c.active}
7 ${c.active}
8 </%def>
8 </%def>
9
9
10
10
11 <%def name="real_main()">
11 <%def name="real_main()">
12 <div class="box">
12 <div class="box">
13 <div class="title">
13 <div class="title">
14 ${self.breadcrumbs()}
14 ${self.breadcrumbs()}
15 </div>
15 </div>
16
16
17 <div class='sidebar-col-wrapper'>
17 <div class='sidebar-col-wrapper'>
18 ${self.sidebar()}
18 ${self.sidebar()}
19
19
20 <div class="main-content">
20 <div class="main-content">
21
21
22 <h2>Simple form elements (Depreciated)</h2>
22 <h2>Simple form elements (Depreciated)</h2>
23
23
24 <p>The wrapping <code>.field</code> also gets the class
24 <p>The wrapping <code>.field</code> also gets the class
25 <code>.field-sm</code>.</p>
25 <code>.field-sm</code>.</p>
26
26
27 <p>Buttons get additional the class <code>.btn-sm</code>.</p>
27 <p>Buttons get additional the class <code>.btn-sm</code>.</p>
28
28
29
29
30 <div class="bs-example">
30 <div class="bs-example">
31 <form method='post' action='none'>
31 <form method='post' action='none'>
32 <div class='form'>
32 <div class='form'>
33 <div class='fields'>
33 <div class='fields'>
34
34
35 <div class='field field-sm'>
35 <div class='field field-sm'>
36 <div class='label'>
36 <div class='label'>
37 <label for='example_input'>Example input label:</label>
37 <label for='example_input'>Example input label:</label>
38 </div>
38 </div>
39 <div class='input'>
39 <div class='input'>
40 <input id="example_input" type="text" placeholder="Example input">
40 <input id="example_input" type="text" placeholder="Example input">
41 </div>
41 </div>
42 </div>
42 </div>
43
43
44 <div class='field field-sm'>
44 <div class='field field-sm'>
45 <div class='label'>
45 <div class='label'>
46 <label for='example_input_ro'>Example input readonly:</label>
46 <label for='example_input_ro'>Example input readonly:</label>
47 </div>
47 </div>
48 <div class='input'>
48 <div class='input'>
49 <input id="example_input_ro" type="text" readonly="readonly" placeholder="Example input">
49 <input id="example_input_ro" type="text" readonly="readonly" placeholder="Example input">
50 </div>
50 </div>
51 </div>
51 </div>
52
52
53 <div class='field field-sm'>
53 <div class='field field-sm'>
54 <div class='label'>
54 <div class='label'>
55 <label for='example_select'>Example select input:</label>
55 <label for='example_select'>Example select input:</label>
56 </div>
56 </div>
57 <div class="select">
57 <div class="select">
58 <select id="example_select" >
58 <select id="example_select" >
59 <option value="#">${_('Templates...')}</option>
59 <option value="#">${_('Templates...')}</option>
60 <option value="ga">Google Analytics</option>
60 <option value="ga">Google Analytics</option>
61 <option value="clicky">Clicky</option>
61 <option value="clicky">Clicky</option>
62 <option value="server_announce">${_('Server Announcement')}</option>
62 <option value="server_announce">${_('Server Announcement')}</option>
63 </select>
63 </select>
64 </div>
64 </div>
65 </div>
65 </div>
66 <script>
66 <script>
67 $(document).ready(function() {
67 $(document).ready(function() {
68 $('#example_select').select2({
68 $('#example_select').select2({
69 containerCssClass: 'drop-menu',
69 containerCssClass: 'drop-menu',
70 dropdownCssClass: 'drop-menu-dropdown',
70 dropdownCssClass: 'drop-menu-dropdown',
71 dropdownAutoWidth: true,
71 dropdownAutoWidth: true,
72 minimumResultsForSearch: -1
72 minimumResultsForSearch: -1
73 });
73 });
74 });
74 });
75 </script>
75 </script>
76
76
77 <div class='field field-sm'>
77 <div class='field field-sm'>
78 <div class='label'>
78 <div class='label'>
79 <label for='example_checkbox'>Example checkbox:</label>
79 <label for='example_checkbox'>Example checkbox:</label>
80 </div>
80 </div>
81 <div class="checkboxes">
81 <div class="checkboxes">
82 <div class="checkbox">
82 <div class="checkbox">
83 <input id="example_checkbox" type="checkbox">
83 <input id="example_checkbox" type="checkbox">
84 <label for="example_checkbox">Label of the checkbox</label>
84 <label for="example_checkbox">Label of the checkbox</label>
85 </div>
85 </div>
86 </div>
86 </div>
87 </div>
87 </div>
88
88
89 <div class='field field-sm'>
89 <div class='field field-sm'>
90 <div class='label'>
90 <div class='label'>
91 <label for='example_checkboxes'>Example multiple checkboxes:</label>
91 <label for='example_checkboxes'>Example multiple checkboxes:</label>
92 </div>
92 </div>
93 <div class="checkboxes">
93 <div class="checkboxes">
94 <div class="checkbox">
94 <div class="checkbox">
95 <input id="example_checkboxes_01" type="checkbox">
95 <input id="example_checkboxes_01" type="checkbox">
96 <label for="example_checkboxes_01">Label of the first checkbox</label>
96 <label for="example_checkboxes_01">Label of the first checkbox</label>
97 </div>
97 </div>
98 <div class="checkbox">
98 <div class="checkbox">
99 <input id="example_checkboxes_02" type="checkbox">
99 <input id="example_checkboxes_02" type="checkbox">
100 <label for="example_checkboxes_02">Label of the first checkbox</label>
100 <label for="example_checkboxes_02">Label of the first checkbox</label>
101 </div>
101 </div>
102 <div class="checkbox">
102 <div class="checkbox">
103 <input id="example_checkboxes_03" type="checkbox">
103 <input id="example_checkboxes_03" type="checkbox">
104 <label for="example_checkboxes_03">Label of the first checkbox</label>
104 <label for="example_checkboxes_03">Label of the first checkbox</label>
105 </div>
105 </div>
106 </div>
106 </div>
107 </div>
107 </div>
108
108
109
109
110 <div class='field field-sm'>
110 <div class='field field-sm'>
111 <div class='label'>
111 <div class='label'>
112 <label for='example_checkboxes'>Example multiple checkboxes:</label>
112 <label for='example_checkboxes'>Example multiple checkboxes:</label>
113 </div>
113 </div>
114 ## TODO: johbo: This is off compared to the checkboxes
114 ## TODO: johbo: This is off compared to the checkboxes
115 <div class="radios">
115 <div class="radios">
116 <label><input type="radio" checked="checked" value="hg.create.repository" name="default_repo_create" id="default_repo_create_hgcreaterepository">Enabled</label>
116 <label><input type="radio" checked="checked" value="hg.create.repository" name="default_repo_create" id="default_repo_create_hgcreaterepository">Enabled</label>
117 <label><input type="radio" value="hg.create.none" name="default_repo_create" id="default_repo_create_hgcreatenone">Disabled</label>
117 <label><input type="radio" value="hg.create.none" name="default_repo_create" id="default_repo_create_hgcreatenone">Disabled</label>
118 <span class="help-block">
118 <span class="help-block">
119 Permission to allow repository creation. This includes ability to create
119 Permission to allow repository creation. This includes ability to create
120 repositories in root level. If this option is disabled admin of
120 repositories in root level. If this option is disabled admin of
121 repository group can still create repositories inside that
121 repository group can still create repositories inside that
122 repository group.
122 repository group.
123 </span>
123 </span>
124 </div>
124 </div>
125 </div>
125 </div>
126
126
127 <div class="buttons">
127 <div class="buttons">
128 <input type="submit" value="Save" id="example_save" class="btn btn-sm">
128 <input type="submit" value="Save" id="example_save" class="btn btn-sm">
129 <input type="reset" value="Reset" id="example_reset" class="btn btn-sm">
129 <input type="reset" value="Reset" id="example_reset" class="btn btn-sm">
130 </div>
130 </div>
131
131
132 </div>
132 </div>
133 </div>
133 </div>
134 </form>
134 </form>
135 </div>
135 </div>
136
136
137
137
138
138
139
139
140 <h2>Help text in form elements</h2>
140 <h2>Help text in form elements</h2>
141
141
142 <div class="bs-example">
142 <div class="bs-example">
143 <form method='post' action=''>
143 <form method='post' action=''>
144 <div class='form'>
144 <div class='form'>
145 <div class='fields'>
145 <div class='fields'>
146
146
147 <div class='field field-sm'>
147 <div class='field field-sm'>
148 <div class='label'>
148 <div class='label'>
149 <label for='02_example_input'>Example input label:</label>
149 <label for='02_example_input'>Example input label:</label>
150 </div>
150 </div>
151 <div class='input'>
151 <div class='input'>
152 <input id="02_example_input" type="text" placeholder="Placeholder text">
152 <input id="02_example_input" type="text" placeholder="Placeholder text">
153 <span class="help-block">
153 <span class="help-block">
154 Example help text for this input element. This help text
154 Example help text for this input element. This help text
155 will be shown under the input element itself. It can be
155 will be shown under the input element itself. It can be
156 so long that it will span multiple lines.
156 so long that it will span multiple lines.
157 </span>
157 </span>
158 </div>
158 </div>
159 </div>
159 </div>
160
160
161 <div class='field field-sm'>
161 <div class='field field-sm'>
162 <div class='label'>
162 <div class='label'>
163 <label for='02_example_checkbox'>Example checkbox with help block:</label>
163 <label for='02_example_checkbox'>Example checkbox with help block:</label>
164 </div>
164 </div>
165 <div class="checkboxes">
165 <div class="checkboxes">
166 <div class="checkbox">
166 <div class="checkbox">
167 <input id="02_example_checkbox" type="checkbox">
167 <input id="02_example_checkbox" type="checkbox">
168 <label for="02_example_checkbox">Label of the checkbox</label>
168 <label for="02_example_checkbox">Label of the checkbox</label>
169 </div>
169 </div>
170 <span class="help-block">
170 <span class="help-block">
171 Example help text for this checkbox element. This help text
171 Example help text for this checkbox element. This help text
172 will be shown under the checkbox element itself. It can be
172 will be shown under the checkbox element itself. It can be
173 so long that it will span multiple lines.
173 so long that it will span multiple lines.
174 </span>
174 </span>
175 </div>
175 </div>
176 </div>
176 </div>
177
177
178
178
179 <div class='field field-sm'>
179 <div class='field field-sm'>
180 <div class='label'>
180 <div class='label'>
181 <label>Multiple checkboxes:</label>
181 <label>Multiple checkboxes:</label>
182 </div>
182 </div>
183 <div class="checkboxes">
183 <div class="checkboxes">
184 <div class="checkbox">
184 <div class="checkbox">
185 <input id="02_example_checkboxes_01" type="checkbox">
185 <input id="02_example_checkboxes_01" type="checkbox">
186 <label for="02_example_checkboxes_01">Label of the first checkbox</label>
186 <label for="02_example_checkboxes_01">Label of the first checkbox</label>
187 </div>
187 </div>
188 <div class="checkbox">
188 <div class="checkbox">
189 <input id="02_example_checkboxes_02" type="checkbox">
189 <input id="02_example_checkboxes_02" type="checkbox">
190 <label for="02_example_checkboxes_02">Label of the first checkbox</label>
190 <label for="02_example_checkboxes_02">Label of the first checkbox</label>
191 </div>
191 </div>
192 <div class="checkbox">
192 <div class="checkbox">
193 <input id="02_example_checkboxes_03" type="checkbox">
193 <input id="02_example_checkboxes_03" type="checkbox">
194 <label for="02_example_checkboxes_03">Label of the first checkbox</label>
194 <label for="02_example_checkboxes_03">Label of the first checkbox</label>
195 </div>
195 </div>
196 <span class="help-block">
196 <span class="help-block">
197 Example help text for this checkbox element. This help text
197 Example help text for this checkbox element. This help text
198 will be shown under the checkbox element itself. It can be
198 will be shown under the checkbox element itself. It can be
199 so long that it will span multiple lines.
199 so long that it will span multiple lines.
200 </span>
200 </span>
201 </div>
201 </div>
202 </div>
202 </div>
203
203
204
204
205 </div>
205 </div>
206 </div>
206 </div>
207 </form>
207 </form>
208 </div>
208 </div>
209
209
210
210
211
211
212
212
213 <h2>Error messages</h2>
213 <h2>Error messages</h2>
214
214
215 <div class="bs-example">
215 <div class="bs-example">
216 <form method='post' action=''>
216 <form method='post' action=''>
217 <div class='form'>
217 <div class='form'>
218 <div class='fields'>
218 <div class='fields'>
219
219
220 <div class='field field-sm'>
220 <div class='field field-sm'>
221 <div class='label'>
221 <div class='label'>
222 <label for='04_example_input'>Example input label:</label>
222 <label for='04_example_input'>Example input label:</label>
223 </div>
223 </div>
224 <div class='input'>
224 <div class='input'>
225 <input id="04_example_input" type="text" placeholder="Example input"/>
225 <input id="04_example_input" type="text" placeholder="Example input"/>
226 <span class="error-message">
226 <span class="error-message">
227 If form validation fails, some input fields can show an
227 If form validation fails, some input fields can show an
228 error message close to the field.
228 error message close to the field.
229 </span>
229 </span>
230 </div>
230 </div>
231 </div>
231 </div>
232
232
233 </div>
233 </div>
234 </div>
234 </div>
235 </form>
235 </form>
236 </div>
236 </div>
237
237
238
238
239 <h2>Fields with buttons</h2>
239 <h2>Fields with buttons</h2>
240
240
241 <div class="bs-example">
241 <div class="bs-example">
242 <form method='post' action=''>
242 <form method='post' action=''>
243 <div class='form'>
243 <div class='form'>
244 <div class='fields'>
244 <div class='fields'>
245
245
246 <div class='field field-sm'>
246 <div class='field field-sm'>
247 <div class='label'>
247 <div class='label'>
248 <label for='05_example_input'>Example input label:</label>
248 <label for='05_example_input'>Example input label:</label>
249 </div>
249 </div>
250 <div class='input'>
250 <div class='input'>
251 <input id="05_example_input" type="text" readonly="readonly" placeholder="Example input">
251 <input id="05_example_input" type="text" readonly="readonly" placeholder="Example input">
252 <span class="btn action_button btn-x">
252 <span class="btn action_button btn-x">
253 <i class="icon-remove-sign"></i>
253 <i class="icon-remove-sign"></i>
254 delete
254 delete
255 </span>
255 </span>
256 <span class="help-block">
256 <span class="help-block">
257 Used if there is a list of values and the user can remove
257 Used if there is a list of values and the user can remove
258 single entries.
258 single entries.
259 </span>
259 </span>
260 </div>
260 </div>
261 </div>
261 </div>
262
262
263
263
264 <div class='field field-sm'>
264 <div class='field field-sm'>
265 <div class='label'>
265 <div class='label'>
266 <label for='05_example_input'>Example input label:</label>
266 <label for='05_example_input'>Example input label:</label>
267 </div>
267 </div>
268 <div class='input'>
268 <div class='input'>
269 <input id="05_example_input" type="text" readonly="readonly" placeholder="Example input">
269 <input id="05_example_input" type="text" readonly="readonly" placeholder="Example input">
270 <span title="Click to unlock. You must restart RhodeCode in order to make this setting take effect."
270 <span title="Click to unlock. You must restart RhodeCode in order to make this setting take effect."
271 class="tooltip" id="path_unlock"
271 class="tooltip" id="path_unlock"
272 tt_title="Click to unlock. You must restart RhodeCode in order to make this setting take effect.">
272 tt_title="Click to unlock. You must restart RhodeCode in order to make this setting take effect.">
273 <div class="btn btn-default">
273 <div class="btn btn-default">
274 <span><i class="icon-lock" id="path_unlock_icon"></i></span>
274 <span><i class="icon-lock" id="path_unlock_icon"></i></span>
275 </div>
275 </div>
276 </span>
276 </span>
277 <span class="help-block">
277 <span class="help-block">
278 Used together with locked fields, the user has to first
278 Used together with locked fields, the user has to first
279 unlock and afterwards it is possible to change the value.
279 unlock and afterwards it is possible to change the value.
280 </span>
280 </span>
281 </div>
281 </div>
282 </div>
282 </div>
283
283
284 </div>
284 </div>
285 </div>
285 </div>
286 </form>
286 </form>
287 </div>
287 </div>
288
288
289
289
290
290
291
291
292 </div>
292 </div>
293 </div> <!-- .main-content -->
293 </div> <!-- .main-content -->
294 </div> <!-- .box -->
294 </div> <!-- .box -->
295 </%def>
295 </%def>
@@ -1,619 +1,619 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2 <%inherit file="/debug_style/index.html"/>
2 <%inherit file="/debug_style/index.html"/>
3
3
4 <%def name="breadcrumbs_links()">
4 <%def name="breadcrumbs_links()">
5 ${h.link_to(_('Style'), h.url('debug_style_home'))}
5 ${h.link_to(_('Style'), h.route_path('debug_style_home'))}
6 &raquo;
6 &raquo;
7 ${c.active}
7 ${c.active}
8 </%def>
8 </%def>
9
9
10
10
11 <%def name="real_main()">
11 <%def name="real_main()">
12 <div class="box">
12 <div class="box">
13 <div class="title">
13 <div class="title">
14 ${self.breadcrumbs()}
14 ${self.breadcrumbs()}
15 </div>
15 </div>
16
16
17 <div class='sidebar-col-wrapper'>
17 <div class='sidebar-col-wrapper'>
18 ${self.sidebar()}
18 ${self.sidebar()}
19
19
20 <div class="main-content">
20 <div class="main-content">
21
21
22 <h2>Simple form elements (Depreciated)</h2>
22 <h2>Simple form elements (Depreciated)</h2>
23
23
24 <div class="bs-example">
24 <div class="bs-example">
25 <form method='post' action='none'>
25 <form method='post' action='none'>
26 <div class='form'>
26 <div class='form'>
27 <div class='fields'>
27 <div class='fields'>
28
28
29 <div class='field'>
29 <div class='field'>
30 <div class='label'>
30 <div class='label'>
31 <label for='example_input_ro'>Example input readonly:</label>
31 <label for='example_input_ro'>Example input readonly:</label>
32 </div>
32 </div>
33 <div class='input'>
33 <div class='input'>
34 <input id="example_input_ro" type="text" readonly="readonly" placeholder="Example input">
34 <input id="example_input_ro" type="text" readonly="readonly" placeholder="Example input">
35 </div>
35 </div>
36 </div>
36 </div>
37
37
38 <div class='field'>
38 <div class='field'>
39 <div class='label'>
39 <div class='label'>
40 <label for='example_input'>Example text:</label>
40 <label for='example_input'>Example text:</label>
41 </div>
41 </div>
42 <div class='input'>
42 <div class='input'>
43 <div class='text-as-placeholder'>
43 <div class='text-as-placeholder'>
44 http://something.example.com
44 http://something.example.com
45 <span class="link" id="edit_clone_uri"><i class="icon-edit"></i>${_('edit')}</span>
45 <span class="link" id="edit_clone_uri"><i class="icon-edit"></i>${_('edit')}</span>
46 </div>
46 </div>
47 <p class='help-block'>Help text in a paragraph.</p>
47 <p class='help-block'>Help text in a paragraph.</p>
48 </div>
48 </div>
49 </div>
49 </div>
50
50
51 <div class='field'>
51 <div class='field'>
52 <div class='label'>
52 <div class='label'>
53 <label for='example_select'>Example select input:</label>
53 <label for='example_select'>Example select input:</label>
54 </div>
54 </div>
55 <div class="select">
55 <div class="select">
56 <select id="example_select" >
56 <select id="example_select" >
57 <option value="#">${_('Templates...')}</option>
57 <option value="#">${_('Templates...')}</option>
58 <option value="ga">Google Analytics</option>
58 <option value="ga">Google Analytics</option>
59 <option value="clicky">Clicky</option>
59 <option value="clicky">Clicky</option>
60 <option value="server_announce">${_('Server Announcement')}</option>
60 <option value="server_announce">${_('Server Announcement')}</option>
61 </select>
61 </select>
62 </div>
62 </div>
63 </div>
63 </div>
64 <script>
64 <script>
65 $(document).ready(function() {
65 $(document).ready(function() {
66 $('#example_select').select2({
66 $('#example_select').select2({
67 containerCssClass: 'drop-menu',
67 containerCssClass: 'drop-menu',
68 dropdownCssClass: 'drop-menu-dropdown',
68 dropdownCssClass: 'drop-menu-dropdown',
69 dropdownAutoWidth: true,
69 dropdownAutoWidth: true,
70 minimumResultsForSearch: -1
70 minimumResultsForSearch: -1
71 });
71 });
72 });
72 });
73 </script>
73 </script>
74
74
75 <div class='field'>
75 <div class='field'>
76 <div class='label'>
76 <div class='label'>
77 <label for='example_select'>Example select input:</label>
77 <label for='example_select'>Example select input:</label>
78 </div>
78 </div>
79 <div class="select">
79 <div class="select">
80 text before
80 text before
81 <select id="example_select2" >
81 <select id="example_select2" >
82 <option value="#">${_('Templates...')}</option>
82 <option value="#">${_('Templates...')}</option>
83 <option value="ga">Google Analytics</option>
83 <option value="ga">Google Analytics</option>
84 <option value="clicky">Clicky</option>
84 <option value="clicky">Clicky</option>
85 <option value="server_announce">${_('Server Announcement')}</option>
85 <option value="server_announce">${_('Server Announcement')}</option>
86 </select>
86 </select>
87 text after
87 text after
88 </div>
88 </div>
89 </div>
89 </div>
90 <script>
90 <script>
91 $(document).ready(function() {
91 $(document).ready(function() {
92 $('#example_select2').select2({
92 $('#example_select2').select2({
93 containerCssClass: 'drop-menu',
93 containerCssClass: 'drop-menu',
94 dropdownCssClass: 'drop-menu-dropdown',
94 dropdownCssClass: 'drop-menu-dropdown',
95 dropdownAutoWidth: true,
95 dropdownAutoWidth: true,
96 minimumResultsForSearch: -1
96 minimumResultsForSearch: -1
97 });
97 });
98 });
98 });
99 </script>
99 </script>
100
100
101 <div class='field'>
101 <div class='field'>
102 <div class='label'>
102 <div class='label'>
103 <label for='example_select'>Example select input with submenus:</label>
103 <label for='example_select'>Example select input with submenus:</label>
104 </div>
104 </div>
105 <div class="select">
105 <div class="select">
106 <select id="example_select_sub" >
106 <select id="example_select_sub" >
107 <option value="#">${_('Default')}</option>
107 <option value="#">${_('Default')}</option>
108 <optgroup label="Group 1">
108 <optgroup label="Group 1">
109 <option>Option 1.1</option>
109 <option>Option 1.1</option>
110 </optgroup>
110 </optgroup>
111 <optgroup label="Group 2">
111 <optgroup label="Group 2">
112 <option>Option 2.1</option>
112 <option>Option 2.1</option>
113 <option>Option 2.2</option>
113 <option>Option 2.2</option>
114 </optgroup>
114 </optgroup>
115 <optgroup label="Group 3" disabled>
115 <optgroup label="Group 3" disabled>
116 <option>Option 3.1</option>
116 <option>Option 3.1</option>
117 <option>Option 3.2</option>
117 <option>Option 3.2</option>
118 <option>Option 3.3</option>
118 <option>Option 3.3</option>
119 </optgroup>
119 </optgroup>
120 </select>
120 </select>
121 </div>
121 </div>
122 </div>
122 </div>
123 <script>
123 <script>
124 $(document).ready(function() {
124 $(document).ready(function() {
125 $('#example_select_sub').select2({
125 $('#example_select_sub').select2({
126 containerCssClass: 'drop-menu',
126 containerCssClass: 'drop-menu',
127 dropdownCssClass: 'drop-menu-dropdown',
127 dropdownCssClass: 'drop-menu-dropdown',
128 dropdownAutoWidth: true,
128 dropdownAutoWidth: true,
129 minimumResultsForSearch: -1
129 minimumResultsForSearch: -1
130 });
130 });
131 });
131 });
132 </script>
132 </script>
133
133
134 <div class='field'>
134 <div class='field'>
135 <div class='label'>
135 <div class='label'>
136 <label for='example_checkbox'>Example checkbox:</label>
136 <label for='example_checkbox'>Example checkbox:</label>
137 </div>
137 </div>
138 <div class="checkboxes">
138 <div class="checkboxes">
139 <div class="checkbox">
139 <div class="checkbox">
140 <input id="example_checkbox" type="checkbox">
140 <input id="example_checkbox" type="checkbox">
141 <label for="example_checkbox">Label of the checkbox</label>
141 <label for="example_checkbox">Label of the checkbox</label>
142 </div>
142 </div>
143 </div>
143 </div>
144 </div>
144 </div>
145
145
146 <div class='field'>
146 <div class='field'>
147 <div class='label'>
147 <div class='label'>
148 <label for='example_checkboxes'>Example multiple checkboxes:</label>
148 <label for='example_checkboxes'>Example multiple checkboxes:</label>
149 </div>
149 </div>
150 <div class="checkboxes">
150 <div class="checkboxes">
151 <div class="checkbox">
151 <div class="checkbox">
152 <input id="example_checkboxes_01" type="checkbox">
152 <input id="example_checkboxes_01" type="checkbox">
153 <label for="example_checkboxes_01">Label of the first checkbox</label>
153 <label for="example_checkboxes_01">Label of the first checkbox</label>
154 </div>
154 </div>
155 <div class="checkbox">
155 <div class="checkbox">
156 <input id="example_checkboxes_02" type="checkbox">
156 <input id="example_checkboxes_02" type="checkbox">
157 <label for="example_checkboxes_02">Label of the first checkbox</label>
157 <label for="example_checkboxes_02">Label of the first checkbox</label>
158 </div>
158 </div>
159 <div class="checkbox">
159 <div class="checkbox">
160 <input id="example_checkboxes_03" type="checkbox">
160 <input id="example_checkboxes_03" type="checkbox">
161 <label for="example_checkboxes_03">Label of the first checkbox</label>
161 <label for="example_checkboxes_03">Label of the first checkbox</label>
162 </div>
162 </div>
163 </div>
163 </div>
164 </div>
164 </div>
165
165
166
166
167 <div class='field'>
167 <div class='field'>
168 <div class='label'>
168 <div class='label'>
169 <label for='example_checkboxes'>Example multiple checkboxes:</label>
169 <label for='example_checkboxes'>Example multiple checkboxes:</label>
170 </div>
170 </div>
171 ## TODO: johbo: This is off compared to the checkboxes
171 ## TODO: johbo: This is off compared to the checkboxes
172 <div class="radios">
172 <div class="radios">
173 <label><input type="radio" checked="checked" value="hg.create.repository" name="default_repo_create" id="default_repo_create_hgcreaterepository">Enabled</label>
173 <label><input type="radio" checked="checked" value="hg.create.repository" name="default_repo_create" id="default_repo_create_hgcreaterepository">Enabled</label>
174 <label><input type="radio" value="hg.create.none" name="default_repo_create" id="default_repo_create_hgcreatenone">Disabled</label>
174 <label><input type="radio" value="hg.create.none" name="default_repo_create" id="default_repo_create_hgcreatenone">Disabled</label>
175 <span class="help-block">
175 <span class="help-block">
176 Permission to allow repository creation. This includes ability to create
176 Permission to allow repository creation. This includes ability to create
177 repositories in root level. If this option is disabled admin of
177 repositories in root level. If this option is disabled admin of
178 repository group can still create repositories inside that
178 repository group can still create repositories inside that
179 repository group.
179 repository group.
180 </span>
180 </span>
181 </div>
181 </div>
182 </div>
182 </div>
183
183
184 <div class="buttons">
184 <div class="buttons">
185 <input type="submit" value="Save" id="example_save" class="btn">
185 <input type="submit" value="Save" id="example_save" class="btn">
186 <input type="reset" value="Reset" id="example_reset" class="btn">
186 <input type="reset" value="Reset" id="example_reset" class="btn">
187 </div>
187 </div>
188
188
189 </div>
189 </div>
190 </div>
190 </div>
191 </form>
191 </form>
192 </div>
192 </div>
193
193
194
194
195
195
196
196
197 <h2>Help text in form elements</h2>
197 <h2>Help text in form elements</h2>
198
198
199 <div class="bs-example">
199 <div class="bs-example">
200 <form method='post' action=''>
200 <form method='post' action=''>
201 <div class='form'>
201 <div class='form'>
202 <div class='fields'>
202 <div class='fields'>
203
203
204 <div class='field'>
204 <div class='field'>
205 <div class='label'>
205 <div class='label'>
206 <label for='02_example_input'>Example input label:</label>
206 <label for='02_example_input'>Example input label:</label>
207 </div>
207 </div>
208 <div class='input'>
208 <div class='input'>
209 <input id="02_example_input" type="text" placeholder="Placeholder text">
209 <input id="02_example_input" type="text" placeholder="Placeholder text">
210 <span class="help-block">
210 <span class="help-block">
211 Example help text for this input element. This help text
211 Example help text for this input element. This help text
212 will be shown under the input element itself. It can be
212 will be shown under the input element itself. It can be
213 so long that it will span multiple lines.
213 so long that it will span multiple lines.
214 </span>
214 </span>
215
215
216 </div>
216 </div>
217 </div>
217 </div>
218
218
219 <div class='field'>
219 <div class='field'>
220 <div class='label'>
220 <div class='label'>
221 <label for='example_select_help'>Example select input:</label>
221 <label for='example_select_help'>Example select input:</label>
222 </div>
222 </div>
223 <div class="select">
223 <div class="select">
224 <select id="example_select_help" >
224 <select id="example_select_help" >
225 <option value="#">${_('Templates...')}</option>
225 <option value="#">${_('Templates...')}</option>
226 <option value="ga">Google Analytics</option>
226 <option value="ga">Google Analytics</option>
227 <option value="clicky">Clicky</option>
227 <option value="clicky">Clicky</option>
228 <option value="server_announce">${_('Server Announcement')}</option>
228 <option value="server_announce">${_('Server Announcement')}</option>
229 </select>
229 </select>
230 <span class="help-block">
230 <span class="help-block">
231 Example help text for this input element. This help text
231 Example help text for this input element. This help text
232 will be shown under the input element itself. It can be
232 will be shown under the input element itself. It can be
233 so long that it will span multiple lines.
233 so long that it will span multiple lines.
234 </span>
234 </span>
235 </div>
235 </div>
236 </div>
236 </div>
237 <script>
237 <script>
238 $(document).ready(function() {
238 $(document).ready(function() {
239 $('#example_select_help').select2({
239 $('#example_select_help').select2({
240 containerCssClass: 'drop-menu',
240 containerCssClass: 'drop-menu',
241 dropdownCssClass: 'drop-menu-dropdown',
241 dropdownCssClass: 'drop-menu-dropdown',
242 dropdownAutoWidth: true,
242 dropdownAutoWidth: true,
243 minimumResultsForSearch: -1
243 minimumResultsForSearch: -1
244 });
244 });
245 });
245 });
246 </script>
246 </script>
247
247
248 <div class='field'>
248 <div class='field'>
249 <div class='label'>
249 <div class='label'>
250 <label for='02_example_checkbox'>Example checkbox with help block:</label>
250 <label for='02_example_checkbox'>Example checkbox with help block:</label>
251 </div>
251 </div>
252 <div class="checkboxes">
252 <div class="checkboxes">
253 <div class="checkbox">
253 <div class="checkbox">
254 <input id="02_example_checkbox" type="checkbox">
254 <input id="02_example_checkbox" type="checkbox">
255 <label for="02_example_checkbox">Label of the checkbox</label>
255 <label for="02_example_checkbox">Label of the checkbox</label>
256 </div>
256 </div>
257 <span class="help-block">
257 <span class="help-block">
258 Example help text for this checkbox element. This help text
258 Example help text for this checkbox element. This help text
259 will be shown under the checkbox element itself. It can be
259 will be shown under the checkbox element itself. It can be
260 so long that it will span multiple lines.
260 so long that it will span multiple lines.
261 </span>
261 </span>
262 </div>
262 </div>
263 </div>
263 </div>
264
264
265
265
266 <div class='field'>
266 <div class='field'>
267 <div class='label'>
267 <div class='label'>
268 <label>Multiple checkboxes:</label>
268 <label>Multiple checkboxes:</label>
269 </div>
269 </div>
270 <div class="checkboxes">
270 <div class="checkboxes">
271 <div class="checkbox">
271 <div class="checkbox">
272 <input id="02_example_checkboxes_01" type="checkbox">
272 <input id="02_example_checkboxes_01" type="checkbox">
273 <label for="02_example_checkboxes_01">Label of the first checkbox</label>
273 <label for="02_example_checkboxes_01">Label of the first checkbox</label>
274 </div>
274 </div>
275 <div class="checkbox">
275 <div class="checkbox">
276 <input id="02_example_checkboxes_02" type="checkbox">
276 <input id="02_example_checkboxes_02" type="checkbox">
277 <label for="02_example_checkboxes_02">Label of the first checkbox</label>
277 <label for="02_example_checkboxes_02">Label of the first checkbox</label>
278 </div>
278 </div>
279 <div class="checkbox">
279 <div class="checkbox">
280 <input id="02_example_checkboxes_03" type="checkbox">
280 <input id="02_example_checkboxes_03" type="checkbox">
281 <label for="02_example_checkboxes_03">Label of the first checkbox</label>
281 <label for="02_example_checkboxes_03">Label of the first checkbox</label>
282 </div>
282 </div>
283 <span class="help-block">
283 <span class="help-block">
284 Example help text for this checkbox element. This help text
284 Example help text for this checkbox element. This help text
285 will be shown under the checkbox element itself. It can be
285 will be shown under the checkbox element itself. It can be
286 so long that it will span multiple lines.
286 so long that it will span multiple lines.
287 </span>
287 </span>
288 </div>
288 </div>
289 </div>
289 </div>
290
290
291
291
292 </div>
292 </div>
293 </div>
293 </div>
294 </form>
294 </form>
295 </div>
295 </div>
296
296
297
297
298
298
299
299
300 <h2>Error messages</h2>
300 <h2>Error messages</h2>
301
301
302 <div class="bs-example">
302 <div class="bs-example">
303 <form method='post' action=''>
303 <form method='post' action=''>
304 <div class='form'>
304 <div class='form'>
305 <div class='fields'>
305 <div class='fields'>
306
306
307 <div class='field'>
307 <div class='field'>
308 <div class='label'>
308 <div class='label'>
309 <label for='04_example_input'>Example input label:</label>
309 <label for='04_example_input'>Example input label:</label>
310 </div>
310 </div>
311 <div class='input'>
311 <div class='input'>
312 <input id="04_example_input" type="text" placeholder="Example input"/>
312 <input id="04_example_input" type="text" placeholder="Example input"/>
313 <span class="error-message">
313 <span class="error-message">
314 If form validation fails, some input fields can show an
314 If form validation fails, some input fields can show an
315 error message close to the field.
315 error message close to the field.
316 </span>
316 </span>
317 </div>
317 </div>
318 </div>
318 </div>
319
319
320 </div>
320 </div>
321 </div>
321 </div>
322 </form>
322 </form>
323 </div>
323 </div>
324
324
325
325
326
326
327
327
328 <h2>Fields with buttons</h2>
328 <h2>Fields with buttons</h2>
329
329
330 <div class="bs-example">
330 <div class="bs-example">
331 <form method='post' action=''>
331 <form method='post' action=''>
332 <div class='form'>
332 <div class='form'>
333 <div class='fields'>
333 <div class='fields'>
334
334
335 <div class='field'>
335 <div class='field'>
336 <div class='label'>
336 <div class='label'>
337 <label for='05_example_input'>Example input label:</label>
337 <label for='05_example_input'>Example input label:</label>
338 </div>
338 </div>
339 <div class='input'>
339 <div class='input'>
340 <input id="05_example_input" type="text" readonly="readonly" placeholder="Example input">
340 <input id="05_example_input" type="text" readonly="readonly" placeholder="Example input">
341 <span class="btn btn-x">
341 <span class="btn btn-x">
342 <i class="icon-remove-sign"></i>
342 <i class="icon-remove-sign"></i>
343 delete
343 delete
344 </span>
344 </span>
345 <button class='btn btn-primary'>Action</button>
345 <button class='btn btn-primary'>Action</button>
346 <span class="help-block">
346 <span class="help-block">
347 Used if there is a list of values and the user can remove
347 Used if there is a list of values and the user can remove
348 single entries.
348 single entries.
349 </span>
349 </span>
350 </div>
350 </div>
351 </div>
351 </div>
352
352
353
353
354 <div class='field'>
354 <div class='field'>
355 <div class='label'>
355 <div class='label'>
356 <label for='05_example_input'>Example input label:</label>
356 <label for='05_example_input'>Example input label:</label>
357 </div>
357 </div>
358 <div class='input'>
358 <div class='input'>
359 <input id="05_example_input" type="text" readonly="readonly" placeholder="Example input">
359 <input id="05_example_input" type="text" readonly="readonly" placeholder="Example input">
360 <span title="Click to unlock. You must restart RhodeCode in order to make this setting take effect."
360 <span title="Click to unlock. You must restart RhodeCode in order to make this setting take effect."
361 class="tooltip" id="path_unlock"
361 class="tooltip" id="path_unlock"
362 tt_title="Click to unlock. You must restart RhodeCode in order to make this setting take effect.">
362 tt_title="Click to unlock. You must restart RhodeCode in order to make this setting take effect.">
363 <div class="btn btn-default">
363 <div class="btn btn-default">
364 <span><i class="icon-lock" id="path_unlock_icon"></i></span>
364 <span><i class="icon-lock" id="path_unlock_icon"></i></span>
365 </div>
365 </div>
366 <button class='btn btn-primary'>Action</button>
366 <button class='btn btn-primary'>Action</button>
367 </span>
367 </span>
368 <span class="help-block">
368 <span class="help-block">
369 Used together with locked fields, the user has to first
369 Used together with locked fields, the user has to first
370 unlock and afterwards it is possible to change the value.
370 unlock and afterwards it is possible to change the value.
371 </span>
371 </span>
372 </div>
372 </div>
373 </div>
373 </div>
374
374
375 <div class='field'>
375 <div class='field'>
376 <div class='label'>
376 <div class='label'>
377 <label for='05_example_select'>Example input label:</label>
377 <label for='05_example_select'>Example input label:</label>
378 </div>
378 </div>
379 <div class="select">
379 <div class="select">
380 <select id="05_example_select" >
380 <select id="05_example_select" >
381 <option value="#">${_('Templates...')}</option>
381 <option value="#">${_('Templates...')}</option>
382 <option value="ga">Google Analytics</option>
382 <option value="ga">Google Analytics</option>
383 <option value="clicky">Clicky</option>
383 <option value="clicky">Clicky</option>
384 <option value="server_announce">${_('Server Announcement')}</option>
384 <option value="server_announce">${_('Server Announcement')}</option>
385 </select>
385 </select>
386 <button class='btn btn-primary'>Action</button>
386 <button class='btn btn-primary'>Action</button>
387 </div>
387 </div>
388 </div>
388 </div>
389 <script>
389 <script>
390 $(document).ready(function() {
390 $(document).ready(function() {
391 $('#05_example_select').select2({
391 $('#05_example_select').select2({
392 containerCssClass: 'drop-menu',
392 containerCssClass: 'drop-menu',
393 dropdownCssClass: 'drop-menu-dropdown',
393 dropdownCssClass: 'drop-menu-dropdown',
394 dropdownAutoWidth: true
394 dropdownAutoWidth: true
395 });
395 });
396 });
396 });
397 </script>
397 </script>
398
398
399 <div class='field'>
399 <div class='field'>
400 <div class='label'>
400 <div class='label'>
401 <label for='05_example_select2'>Example input label:</label>
401 <label for='05_example_select2'>Example input label:</label>
402 </div>
402 </div>
403 <div class="select">
403 <div class="select">
404 <span>Some text</span>
404 <span>Some text</span>
405 before
405 before
406 <select id="05_example_select2" >
406 <select id="05_example_select2" >
407 <option value="#">${_('Templates...')}</option>
407 <option value="#">${_('Templates...')}</option>
408 <option value="ga">Google Analytics</option>
408 <option value="ga">Google Analytics</option>
409 <option value="clicky">Clicky</option>
409 <option value="clicky">Clicky</option>
410 <option value="server_announce">${_('Server Announcement')}</option>
410 <option value="server_announce">${_('Server Announcement')}</option>
411 </select>
411 </select>
412 after
412 after
413 <button class='btn btn-primary'>Action</button>
413 <button class='btn btn-primary'>Action</button>
414 Some text
414 Some text
415 </div>
415 </div>
416 </div>
416 </div>
417 <script>
417 <script>
418 $(document).ready(function() {
418 $(document).ready(function() {
419 $('#05_example_select2').select2({
419 $('#05_example_select2').select2({
420 containerCssClass: 'drop-menu',
420 containerCssClass: 'drop-menu',
421 dropdownCssClass: 'drop-menu-dropdown',
421 dropdownCssClass: 'drop-menu-dropdown',
422 dropdownAutoWidth: true
422 dropdownAutoWidth: true
423 });
423 });
424 });
424 });
425 </script>
425 </script>
426
426
427
427
428 </div>
428 </div>
429 </div>
429 </div>
430 </form>
430 </form>
431 </div>
431 </div>
432
432
433
433
434
434
435 <h2>Definition lists together with forms</h2>
435 <h2>Definition lists together with forms</h2>
436
436
437 <p>Some pages list values in a definition list. These lists align
437 <p>Some pages list values in a definition list. These lists align
438 properly with form elements on the same page.</p>
438 properly with form elements on the same page.</p>
439
439
440 <div class="bs-example">
440 <div class="bs-example">
441
441
442 <dl class="dl-horizontal">
442 <dl class="dl-horizontal">
443 <dt>RhodeCode version:</dt>
443 <dt>RhodeCode version:</dt>
444 <dd title="">3.0.0</dd>
444 <dd title="">3.0.0</dd>
445 <dt>License token:</dt>
445 <dt>License token:</dt>
446 <dd title=""><pre>abra-cada-bra1-rce3</pre></dd>
446 <dd title=""><pre>abra-cada-bra1-rce3</pre></dd>
447 <dt>License issued to:</dt>
447 <dt>License issued to:</dt>
448 <dd title="">RhodeCode Trial (RhodeCode GmbH)</dd>
448 <dd title="">RhodeCode Trial (RhodeCode GmbH)</dd>
449 <dt>License issued on:</dt>
449 <dt>License issued on:</dt>
450 <dd title="">Sun, 07 Dec 2014 16:34:10</dd>
450 <dd title="">Sun, 07 Dec 2014 16:34:10</dd>
451 <dt>License expires on:</dt>
451 <dt>License expires on:</dt>
452 <dd title="">Fri, 05 Jun 2015 17:34:10</dd>
452 <dd title="">Fri, 05 Jun 2015 17:34:10</dd>
453 <dt>License type:</dt>
453 <dt>License type:</dt>
454 <dd title="">trial</dd>
454 <dd title="">trial</dd>
455 <dt>License users limit:</dt>
455 <dt>License users limit:</dt>
456 <dd title="">20</dd>
456 <dd title="">20</dd>
457 </dl>
457 </dl>
458
458
459 <form method='post' action=''>
459 <form method='post' action=''>
460 <div class='form'>
460 <div class='form'>
461 <div class='fields'>
461 <div class='fields'>
462
462
463 <div class='field'>
463 <div class='field'>
464 <div class='label'>
464 <div class='label'>
465 <label for='07_example_input'>Example input label:</label>
465 <label for='07_example_input'>Example input label:</label>
466 </div>
466 </div>
467 <div class='input'>
467 <div class='input'>
468 <input id="07_example_input" type="text" placeholder="Example input">
468 <input id="07_example_input" type="text" placeholder="Example input">
469 </div>
469 </div>
470 </div>
470 </div>
471
471
472 <div class="buttons">
472 <div class="buttons">
473 <input type="submit" value="Save" id="07_example_save" class="btn">
473 <input type="submit" value="Save" id="07_example_save" class="btn">
474 <input type="reset" value="Reset" id="07_example_reset" class="btn">
474 <input type="reset" value="Reset" id="07_example_reset" class="btn">
475 </div>
475 </div>
476 </div>
476 </div>
477 </div>
477 </div>
478 </form>
478 </form>
479
479
480 </div>
480 </div>
481
481
482
482
483
483
484
484
485
485
486 <h2>Multi select widget</h2>
486 <h2>Multi select widget</h2>
487
487
488 <p>This example shows two multi select widgets, one having no selects
488 <p>This example shows two multi select widgets, one having no selects
489 currently. It is mixed up with other form elements to show the
489 currently. It is mixed up with other form elements to show the
490 magin effects.</p>
490 magin effects.</p>
491
491
492 <div class="bs-example">
492 <div class="bs-example">
493
493
494 <form method='post' action=''>
494 <form method='post' action=''>
495 <div class='form'>
495 <div class='form'>
496 <div class='fields'>
496 <div class='fields'>
497
497
498 <div class='field'>
498 <div class='field'>
499 <div class='label'>
499 <div class='label'>
500 <label for='example_input'>Example input label:</label>
500 <label for='example_input'>Example input label:</label>
501 </div>
501 </div>
502 <div class='input'>
502 <div class='input'>
503 <input id="example_input" type="text" placeholder="Example input">
503 <input id="example_input" type="text" placeholder="Example input">
504 </div>
504 </div>
505 </div>
505 </div>
506
506
507 <div class="field">
507 <div class="field">
508 <div class="label">
508 <div class="label">
509 <label for="users_group_active">${_('Members')}:</label>
509 <label for="users_group_active">${_('Members')}:</label>
510 </div>
510 </div>
511 <div class="select side-by-side-selector">
511 <div class="select side-by-side-selector">
512 <div class="left-group">
512 <div class="left-group">
513 <label class="text" >${_('Chosen group members')}</label>
513 <label class="text" >${_('Chosen group members')}</label>
514 <select id="users_group_members" multiple size='8'>
514 <select id="users_group_members" multiple size='8'>
515 <option value="#">${_('Templates...')}</option>
515 <option value="#">${_('Templates...')}</option>
516 <option value="ga">Google Analytics</option>
516 <option value="ga">Google Analytics</option>
517 <option value="clicky">Clicky</option>
517 <option value="clicky">Clicky</option>
518 <option value="server_announce">${_('Server Announcement')}</option>
518 <option value="server_announce">${_('Server Announcement')}</option>
519 <option value="#">${_('Templates...')}</option>
519 <option value="#">${_('Templates...')}</option>
520 <option value="ga">Google Analytics</option>
520 <option value="ga">Google Analytics</option>
521 <option value="clicky">Clicky</option>
521 <option value="clicky">Clicky</option>
522 <option value="server_announce">${_('Server Announcement')}</option>
522 <option value="server_announce">${_('Server Announcement')}</option>
523 </select>
523 </select>
524 <div class="btn" id="remove_all_elements" >
524 <div class="btn" id="remove_all_elements" >
525 ${_('Remove all elements')}
525 ${_('Remove all elements')}
526 <i class="icon-chevron-right"></i>
526 <i class="icon-chevron-right"></i>
527 </div>
527 </div>
528 </div>
528 </div>
529 <div class="middle-group">
529 <div class="middle-group">
530 <i id="add_element" class="icon-chevron-left"></i>
530 <i id="add_element" class="icon-chevron-left"></i>
531 <br />
531 <br />
532 <i id="remove_element" class="icon-chevron-right"></i>
532 <i id="remove_element" class="icon-chevron-right"></i>
533 </div>
533 </div>
534 <div class="right-group">
534 <div class="right-group">
535 <label class="text" >${_('Available members')}</label>
535 <label class="text" >${_('Available members')}</label>
536 <select id="available_members" multiple size='8'>
536 <select id="available_members" multiple size='8'>
537 <option value="#">${_('Templates...')}</option>
537 <option value="#">${_('Templates...')}</option>
538 <option value="ga">Google Analytics</option>
538 <option value="ga">Google Analytics</option>
539 <option value="clicky">Clicky</option>
539 <option value="clicky">Clicky</option>
540 <option value="server_announce">${_('Server Announcement')}</option>
540 <option value="server_announce">${_('Server Announcement')}</option>
541 </select>
541 </select>
542 <div class="btn" id="add_all_elements" >
542 <div class="btn" id="add_all_elements" >
543 <i class="icon-chevron-left"></i>${_('Add all elements')}
543 <i class="icon-chevron-left"></i>${_('Add all elements')}
544 </div>
544 </div>
545 </div>
545 </div>
546 </div>
546 </div>
547
547
548 </div>
548 </div>
549
549
550 <div class='field'>
550 <div class='field'>
551 <div class='label'>
551 <div class='label'>
552 <label for='example_input'>Example input label:</label>
552 <label for='example_input'>Example input label:</label>
553 </div>
553 </div>
554 <div class='input'>
554 <div class='input'>
555 <input id="example_input" type="text" placeholder="Example input">
555 <input id="example_input" type="text" placeholder="Example input">
556 </div>
556 </div>
557 </div>
557 </div>
558
558
559 <div class="field">
559 <div class="field">
560 <div class="label">
560 <div class="label">
561 <label for="users_group_active2">Members with one side empty:</label>
561 <label for="users_group_active2">Members with one side empty:</label>
562 </div>
562 </div>
563 <div class="select side-by-side-selector">
563 <div class="select side-by-side-selector">
564 <div class="left-group">
564 <div class="left-group">
565 <label class="text" >${_('Chosen group members')}</label>
565 <label class="text" >${_('Chosen group members')}</label>
566 <select id="users_group_members2" multiple size='8'>
566 <select id="users_group_members2" multiple size='8'>
567 </select>
567 </select>
568 <div class="btn" id="remove_all_elements2" >
568 <div class="btn" id="remove_all_elements2" >
569 ${_('Remove all elements')}
569 ${_('Remove all elements')}
570 <i class="icon-chevron-right"></i>
570 <i class="icon-chevron-right"></i>
571 </div>
571 </div>
572 </div>
572 </div>
573 <div class="middle-group">
573 <div class="middle-group">
574 <i id="add_element2" class="icon-chevron-left"></i>
574 <i id="add_element2" class="icon-chevron-left"></i>
575 <br />
575 <br />
576 <i id="remove_element2" class="icon-chevron-right"></i>
576 <i id="remove_element2" class="icon-chevron-right"></i>
577 </div>
577 </div>
578 <div class="right-group">
578 <div class="right-group">
579 <label class="text" >${_('Available members')}</label>
579 <label class="text" >${_('Available members')}</label>
580 <select id="available_members2" multiple size='8'>
580 <select id="available_members2" multiple size='8'>
581 <option value="#">${_('Templates...')}</option>
581 <option value="#">${_('Templates...')}</option>
582 <option value="ga">Google Analytics</option>
582 <option value="ga">Google Analytics</option>
583 <option value="clicky">Clicky</option>
583 <option value="clicky">Clicky</option>
584 <option value="server_announce">${_('Server Announcement')}</option>
584 <option value="server_announce">${_('Server Announcement')}</option>
585 </select>
585 </select>
586 <div class="btn" id="add_all_elements2" >
586 <div class="btn" id="add_all_elements2" >
587 <i class="icon-chevron-left"></i>${_('Add all elements')}
587 <i class="icon-chevron-left"></i>${_('Add all elements')}
588 </div>
588 </div>
589 </div>
589 </div>
590 </div>
590 </div>
591
591
592 </div>
592 </div>
593
593
594 <div class='field'>
594 <div class='field'>
595 <div class='label'>
595 <div class='label'>
596 <label for='example_input'>Example input label:</label>
596 <label for='example_input'>Example input label:</label>
597 </div>
597 </div>
598 <div class='input'>
598 <div class='input'>
599 <input id="example_input" type="text" placeholder="Example input">
599 <input id="example_input" type="text" placeholder="Example input">
600 </div>
600 </div>
601 </div>
601 </div>
602
602
603 <div class="buttons">
603 <div class="buttons">
604 <input type="submit" value="Save" id="07_example_save" class="btn">
604 <input type="submit" value="Save" id="07_example_save" class="btn">
605 <input type="reset" value="Reset" id="07_example_reset" class="btn">
605 <input type="reset" value="Reset" id="07_example_reset" class="btn">
606 </div>
606 </div>
607 </div>
607 </div>
608 </div>
608 </div>
609 </form>
609 </form>
610
610
611 </div>
611 </div>
612
612
613
613
614
614
615
615
616 </div>
616 </div>
617 </div> <!-- .main-content -->
617 </div> <!-- .main-content -->
618 </div> <!-- .box -->
618 </div> <!-- .box -->
619 </%def>
619 </%def>
@@ -1,174 +1,174 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2 <%inherit file="/debug_style/index.html"/>
2 <%inherit file="/debug_style/index.html"/>
3
3
4 <%def name="breadcrumbs_links()">
4 <%def name="breadcrumbs_links()">
5 ${h.link_to(_('Style'), h.url('debug_style_home'))}
5 ${h.link_to(_('Style'), h.route_path('debug_style_home'))}
6 &raquo;
6 &raquo;
7 ${c.active}
7 ${c.active}
8 </%def>
8 </%def>
9
9
10
10
11 <%def name="real_main()">
11 <%def name="real_main()">
12 <div class="box">
12 <div class="box">
13 <div class="title">
13 <div class="title">
14 ${self.breadcrumbs()}
14 ${self.breadcrumbs()}
15 </div>
15 </div>
16
16
17 <div class='sidebar-col-wrapper'>
17 <div class='sidebar-col-wrapper'>
18 ${self.sidebar()}
18 ${self.sidebar()}
19
19
20 <div class="main-content">
20 <div class="main-content">
21
21
22
22
23 <h2>Inline form elements</h2>
23 <h2>Inline form elements</h2>
24
24
25 <p>A few places have a button close to an input element or similar.</p>
25 <p>A few places have a button close to an input element or similar.</p>
26
26
27
27
28 <h3>Submit button after select element</h3>
28 <h3>Submit button after select element</h3>
29
29
30 <div class="bs-example">
30 <div class="bs-example">
31
31
32 ## TODO: johbo: not sure if we should add a class like .form-inline
32 ## TODO: johbo: not sure if we should add a class like .form-inline
33 ## here. Seems to work good enough right now.
33 ## here. Seems to work good enough right now.
34 <form method="post" action="">
34 <form method="post" action="">
35 <div class="form">
35 <div class="form">
36 <div class="fields">
36 <div class="fields">
37 <select id="example_select" >
37 <select id="example_select" >
38 <option value="#">${_('Templates...')}</option>
38 <option value="#">${_('Templates...')}</option>
39 <option value="ga">Google Analytics</option>
39 <option value="ga">Google Analytics</option>
40 <option value="clicky">Clicky</option>
40 <option value="clicky">Clicky</option>
41 <option value="server_announce">${_('Server Announcement')}</option>
41 <option value="server_announce">${_('Server Announcement')}</option>
42 </select>
42 </select>
43 <input type="submit" value="Set" id="example_save" class="btn">
43 <input type="submit" value="Set" id="example_save" class="btn">
44 </div>
44 </div>
45
45
46 <script>
46 <script>
47 $(document).ready(function() {
47 $(document).ready(function() {
48 $('#example_select').select2({
48 $('#example_select').select2({
49 containerCssClass: 'drop-menu',
49 containerCssClass: 'drop-menu',
50 dropdownCssClass: 'drop-menu-dropdown',
50 dropdownCssClass: 'drop-menu-dropdown',
51 dropdownAutoWidth: true,
51 dropdownAutoWidth: true,
52 minimumResultsForSearch: -1
52 minimumResultsForSearch: -1
53 });
53 });
54 });
54 });
55 </script>
55 </script>
56
56
57 </div>
57 </div>
58 </form>
58 </form>
59
59
60 </div>
60 </div>
61
61
62
62
63
63
64 <h3>Submit button after input element</h3>
64 <h3>Submit button after input element</h3>
65
65
66 <div class="bs-example">
66 <div class="bs-example">
67
67
68 ## TODO: johbo: not sure if we should add a class like .form-inline
68 ## TODO: johbo: not sure if we should add a class like .form-inline
69 ## here. Seems to work good enough right now.
69 ## here. Seems to work good enough right now.
70 <form method="post" action="">
70 <form method="post" action="">
71 <div class="form">
71 <div class="form">
72
72
73 <div class="fields">
73 <div class="fields">
74 <input type="text" id="example_input" placeholder="Placeholder...">
74 <input type="text" id="example_input" placeholder="Placeholder...">
75 <input type="submit" value="Set" id="example_save" class="btn">
75 <input type="submit" value="Set" id="example_save" class="btn">
76 </div>
76 </div>
77
77
78 </div>
78 </div>
79 </form>
79 </form>
80
80
81 </div>
81 </div>
82
82
83
83
84
84
85 <h3>Submit and Reset button after input element</h3>
85 <h3>Submit and Reset button after input element</h3>
86
86
87 <div class="bs-example">
87 <div class="bs-example">
88
88
89 ## TODO: johbo: not sure if we should add a class like .form-inline
89 ## TODO: johbo: not sure if we should add a class like .form-inline
90 ## here. Seems to work good enough right now.
90 ## here. Seems to work good enough right now.
91 <form method="post" action="">
91 <form method="post" action="">
92 <div class="form">
92 <div class="form">
93
93
94 <div class="fields">
94 <div class="fields">
95 <input type="text" id="example_input" placeholder="Placeholder...">
95 <input type="text" id="example_input" placeholder="Placeholder...">
96 <input type="submit" value="Set" id="example_save" class="btn">
96 <input type="submit" value="Set" id="example_save" class="btn">
97 <input type="reset" value="Reset" id="example_reset" class="btn">
97 <input type="reset" value="Reset" id="example_reset" class="btn">
98 </div>
98 </div>
99
99
100 </div>
100 </div>
101 </form>
101 </form>
102
102
103 </div>
103 </div>
104
104
105
105
106
106
107 <h3>Checkbox wrapped in the label itself</h3>
107 <h3>Checkbox wrapped in the label itself</h3>
108
108
109 <div class="bs-example">
109 <div class="bs-example">
110
110
111 <div class="field">
111 <div class="field">
112 <label><input id="example_label_checkbox" type="checkbox">Checkbox with label around it</label>
112 <label><input id="example_label_checkbox" type="checkbox">Checkbox with label around it</label>
113 </div>
113 </div>
114
114
115 <div class="field">
115 <div class="field">
116 <label><input id="example_label_checkbox" type="radio">Radio with label around it</label>
116 <label><input id="example_label_checkbox" type="radio">Radio with label around it</label>
117 </div>
117 </div>
118
118
119 </div>
119 </div>
120
120
121
121
122 <h3>Checkbox wrapped in the label itself</h3>
122 <h3>Checkbox wrapped in the label itself</h3>
123
123
124 <div class="bs-example">
124 <div class="bs-example">
125
125
126 <div class="form">
126 <div class="form">
127 <div class="fields">
127 <div class="fields">
128 <label>Label</label> <input type="text">
128 <label>Label</label> <input type="text">
129 </div>
129 </div>
130 </div>
130 </div>
131 </div>
131 </div>
132
132
133
133
134 <div class="bs-example">
134 <div class="bs-example">
135 <div class="form">
135 <div class="form">
136 <div class="fields">
136 <div class="fields">
137 <label>Label</label>
137 <label>Label</label>
138 <select id="02_example_select1" >
138 <select id="02_example_select1" >
139 <option value="#">${_('Templates...')}</option>
139 <option value="#">${_('Templates...')}</option>
140 <option value="ga">Google Analytics</option>
140 <option value="ga">Google Analytics</option>
141 <option value="clicky">Clicky</option>
141 <option value="clicky">Clicky</option>
142 <option value="server_announce">${_('Server Announcement')}</option>
142 <option value="server_announce">${_('Server Announcement')}</option>
143 </select>
143 </select>
144
144
145 <label>Label</label>
145 <label>Label</label>
146 <select id="02_example_select2" >
146 <select id="02_example_select2" >
147 <option value="#">${_('Templates...')}</option>
147 <option value="#">${_('Templates...')}</option>
148 <option value="ga">Google Analytics</option>
148 <option value="ga">Google Analytics</option>
149 <option value="clicky">Clicky</option>
149 <option value="clicky">Clicky</option>
150 <option value="server_announce">${_('Server Announcement')}</option>
150 <option value="server_announce">${_('Server Announcement')}</option>
151 </select>
151 </select>
152 </div>
152 </div>
153 </div>
153 </div>
154
154
155 <script>
155 <script>
156 $(document).ready(function() {
156 $(document).ready(function() {
157 $('#02_example_select1').select2({
157 $('#02_example_select1').select2({
158 containerCssClass: 'drop-menu',
158 containerCssClass: 'drop-menu',
159 dropdownCssClass: 'drop-menu-dropdown',
159 dropdownCssClass: 'drop-menu-dropdown',
160 dropdownAutoWidth: true,
160 dropdownAutoWidth: true,
161 minimumResultsForSearch: -1
161 minimumResultsForSearch: -1
162 });
162 });
163 $('#02_example_select2').select2({
163 $('#02_example_select2').select2({
164 containerCssClass: 'drop-menu',
164 containerCssClass: 'drop-menu',
165 dropdownCssClass: 'drop-menu-dropdown',
165 dropdownCssClass: 'drop-menu-dropdown',
166 dropdownAutoWidth: true,
166 dropdownAutoWidth: true,
167 minimumResultsForSearch: -1
167 minimumResultsForSearch: -1
168 });
168 });
169 });
169 });
170 </script>
170 </script>
171 </div>
171 </div>
172 </div>
172 </div>
173 </div>
173 </div>
174 </%def>
174 </%def>
@@ -1,144 +1,144 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2 <%inherit file="/debug_style/index.html"/>
2 <%inherit file="/debug_style/index.html"/>
3
3
4 <%def name="breadcrumbs_links()">
4 <%def name="breadcrumbs_links()">
5 ${h.link_to(_('Style'), h.url('debug_style_home'))}
5 ${h.link_to(_('Style'), h.route_path('debug_style_home'))}
6 &raquo;
6 &raquo;
7 ${c.active}
7 ${c.active}
8 </%def>
8 </%def>
9
9
10
10
11 <%def name="real_main()">
11 <%def name="real_main()">
12 <div class="box">
12 <div class="box">
13 <div class="title">
13 <div class="title">
14 ${self.breadcrumbs()}
14 ${self.breadcrumbs()}
15 </div>
15 </div>
16
16
17 ##main
17 ##main
18 <div class='sidebar-col-wrapper'>
18 <div class='sidebar-col-wrapper'>
19 ${self.sidebar()}
19 ${self.sidebar()}
20
20
21 <div class="main-content">
21 <div class="main-content">
22
22
23 <h2>Vertical forms</h2>
23 <h2>Vertical forms</h2>
24
24
25 <p>Adding the class <code>.form-vertical</code> will align the form
25 <p>Adding the class <code>.form-vertical</code> will align the form
26 elements differently. Otherwise it is the same structure of HTML
26 elements differently. Otherwise it is the same structure of HTML
27 elements.</p>
27 elements.</p>
28
28
29 <h2>Simple form elements</h2>
29 <h2>Simple form elements</h2>
30
30
31 <div class="bs-example">
31 <div class="bs-example">
32 <form method='post' action='none'>
32 <form method='post' action='none'>
33 <div class='form form-vertical'>
33 <div class='form form-vertical'>
34 <div class='fields'>
34 <div class='fields'>
35
35
36 <div class='field'>
36 <div class='field'>
37 <div class='label'>
37 <div class='label'>
38 <label for='example_input'>Example input label:</label>
38 <label for='example_input'>Example input label:</label>
39 </div>
39 </div>
40 <div class='input'>
40 <div class='input'>
41 <input id="example_input" type="text" placeholder="Example input">
41 <input id="example_input" type="text" placeholder="Example input">
42 </div>
42 </div>
43 </div>
43 </div>
44
44
45 <div class='field'>
45 <div class='field'>
46 <div class='label'>
46 <div class='label'>
47 <label for='example_input_ro'>Example input readonly:</label>
47 <label for='example_input_ro'>Example input readonly:</label>
48 </div>
48 </div>
49 <div class='input'>
49 <div class='input'>
50 <input id="example_input_ro" type="text" readonly="readonly" placeholder="Example input">
50 <input id="example_input_ro" type="text" readonly="readonly" placeholder="Example input">
51 </div>
51 </div>
52 </div>
52 </div>
53
53
54 <div class='field'>
54 <div class='field'>
55 <div class='label'>
55 <div class='label'>
56 <label for='example_select'>Example select input:</label>
56 <label for='example_select'>Example select input:</label>
57 </div>
57 </div>
58 <div class="select">
58 <div class="select">
59 <select id="example_select" >
59 <select id="example_select" >
60 <option value="#">${_('Templates...')}</option>
60 <option value="#">${_('Templates...')}</option>
61 <option value="ga">Google Analytics</option>
61 <option value="ga">Google Analytics</option>
62 <option value="clicky">Clicky</option>
62 <option value="clicky">Clicky</option>
63 <option value="server_announce">${_('Server Announcement')}</option>
63 <option value="server_announce">${_('Server Announcement')}</option>
64 </select>
64 </select>
65 </div>
65 </div>
66 </div>
66 </div>
67 <script>
67 <script>
68 $(document).ready(function() {
68 $(document).ready(function() {
69 $('#example_select').select2({
69 $('#example_select').select2({
70 containerCssClass: 'drop-menu',
70 containerCssClass: 'drop-menu',
71 dropdownCssClass: 'drop-menu-dropdown',
71 dropdownCssClass: 'drop-menu-dropdown',
72 dropdownAutoWidth: true,
72 dropdownAutoWidth: true,
73 minimumResultsForSearch: -1
73 minimumResultsForSearch: -1
74 });
74 });
75 });
75 });
76 </script>
76 </script>
77
77
78 <div class='field'>
78 <div class='field'>
79 <div class='label'>
79 <div class='label'>
80 <label for='example_checkbox'>Example checkbox:</label>
80 <label for='example_checkbox'>Example checkbox:</label>
81 </div>
81 </div>
82 <div class="checkboxes">
82 <div class="checkboxes">
83 <div class="checkbox">
83 <div class="checkbox">
84 <input id="example_checkbox" type="checkbox">
84 <input id="example_checkbox" type="checkbox">
85 <label for="example_checkbox">Label of the checkbox</label>
85 <label for="example_checkbox">Label of the checkbox</label>
86 </div>
86 </div>
87 </div>
87 </div>
88 </div>
88 </div>
89
89
90 <div class='field'>
90 <div class='field'>
91 <div class='label'>
91 <div class='label'>
92 <label for='example_checkboxes'>Example multiple checkboxes:</label>
92 <label for='example_checkboxes'>Example multiple checkboxes:</label>
93 </div>
93 </div>
94 <div class="checkboxes">
94 <div class="checkboxes">
95 <div class="checkbox">
95 <div class="checkbox">
96 <input id="example_checkboxes_01" type="checkbox">
96 <input id="example_checkboxes_01" type="checkbox">
97 <label for="example_checkboxes_01">Label of the first checkbox</label>
97 <label for="example_checkboxes_01">Label of the first checkbox</label>
98 </div>
98 </div>
99 <div class="checkbox">
99 <div class="checkbox">
100 <input id="example_checkboxes_02" type="checkbox">
100 <input id="example_checkboxes_02" type="checkbox">
101 <label for="example_checkboxes_02">Label of the first checkbox</label>
101 <label for="example_checkboxes_02">Label of the first checkbox</label>
102 </div>
102 </div>
103 <div class="checkbox">
103 <div class="checkbox">
104 <input id="example_checkboxes_03" type="checkbox">
104 <input id="example_checkboxes_03" type="checkbox">
105 <label for="example_checkboxes_03">Label of the first checkbox</label>
105 <label for="example_checkboxes_03">Label of the first checkbox</label>
106 </div>
106 </div>
107 </div>
107 </div>
108 </div>
108 </div>
109
109
110
110
111 <div class='field'>
111 <div class='field'>
112 <div class='label'>
112 <div class='label'>
113 <label for='example_checkboxes'>Example multiple checkboxes:</label>
113 <label for='example_checkboxes'>Example multiple checkboxes:</label>
114 </div>
114 </div>
115 ## TODO: johbo: This is off compared to the checkboxes
115 ## TODO: johbo: This is off compared to the checkboxes
116 <div class="radios">
116 <div class="radios">
117 <label><input type="radio" checked="checked" value="hg.create.repository" name="default_repo_create" id="default_repo_create_hgcreaterepository">Enabled</label>
117 <label><input type="radio" checked="checked" value="hg.create.repository" name="default_repo_create" id="default_repo_create_hgcreaterepository">Enabled</label>
118 <label><input type="radio" value="hg.create.none" name="default_repo_create" id="default_repo_create_hgcreatenone">Disabled</label>
118 <label><input type="radio" value="hg.create.none" name="default_repo_create" id="default_repo_create_hgcreatenone">Disabled</label>
119 <span class="help-block">
119 <span class="help-block">
120 Permission to allow repository creation. This includes ability
120 Permission to allow repository creation. This includes ability
121 to create repositories in root level. If this option is
121 to create repositories in root level. If this option is
122 disabled admin of repository group can still create
122 disabled admin of repository group can still create
123 repositories inside that repository group.
123 repositories inside that repository group.
124 </span>
124 </span>
125 </div>
125 </div>
126 </div>
126 </div>
127
127
128 <div class="buttons">
128 <div class="buttons">
129 <input type="submit" value="Save" id="example_save" class="btn">
129 <input type="submit" value="Save" id="example_save" class="btn">
130 <input type="reset" value="Reset" id="example_reset" class="btn">
130 <input type="reset" value="Reset" id="example_reset" class="btn">
131 </div>
131 </div>
132
132
133 </div>
133 </div>
134 </div>
134 </div>
135 </form>
135 </form>
136
136
137 </div>
137 </div>
138
138
139
139
140
140
141 </div>
141 </div>
142 </div>
142 </div>
143 </div>
143 </div>
144 </%def>
144 </%def>
@@ -1,279 +1,279 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2 <%inherit file="/debug_style/index.html"/>
2 <%inherit file="/debug_style/index.html"/>
3
3
4 <%def name="breadcrumbs_links()">
4 <%def name="breadcrumbs_links()">
5 ${h.link_to(_('Style'), h.url('debug_style_home'))}
5 ${h.link_to(_('Style'), h.route_path('debug_style_home'))}
6 &raquo;
6 &raquo;
7 ${c.active}
7 ${c.active}
8 </%def>
8 </%def>
9
9
10
10
11 <%def name="real_main()">
11 <%def name="real_main()">
12 <div class="box">
12 <div class="box">
13 <div class="title">
13 <div class="title">
14 ${self.breadcrumbs()}
14 ${self.breadcrumbs()}
15 </div>
15 </div>
16
16
17 <div class='sidebar-col-wrapper'>
17 <div class='sidebar-col-wrapper'>
18 ${self.sidebar()}
18 ${self.sidebar()}
19
19
20 <div class="main-content">
20 <div class="main-content">
21
21
22 <h2>Simple form elements</h2>
22 <h2>Simple form elements</h2>
23 <p>When working with forms, please upgrade to this new form layout. See the depreciated forms pages for the previous layout.</p>
23 <p>When working with forms, please upgrade to this new form layout. See the depreciated forms pages for the previous layout.</p>
24 <p>These forms are marked by the class <code>rcform</code>. See html for details on formatting.
24 <p>These forms are marked by the class <code>rcform</code>. See html for details on formatting.
25 </p>
25 </p>
26 <p>Some other notes: The customized checkboxes and radio buttons use the label for styling. This has been disabled for lower versions of IE using the <code>:not()</code> selector. Select2 dropdowns need to be redone, but this may be in a later iteration.
26 <p>Some other notes: The customized checkboxes and radio buttons use the label for styling. This has been disabled for lower versions of IE using the <code>:not()</code> selector. Select2 dropdowns need to be redone, but this may be in a later iteration.
27 </p>
27 </p>
28
28
29 <h2>Examples</h2>
29 <h2>Examples</h2>
30
30
31 <form method='post' action='none' class="rcform">
31 <form method='post' action='none' class="rcform">
32
32
33 <fieldset>
33 <fieldset>
34 <legend>Dropdown:</legend>
34 <legend>Dropdown:</legend>
35 <div class="fields">
35 <div class="fields">
36 <select id="example_select" >
36 <select id="example_select" >
37 <option value="#">${_('Templates...')}</option>
37 <option value="#">${_('Templates...')}</option>
38 <option value="ga">Google Analytics</option>
38 <option value="ga">Google Analytics</option>
39 <option value="clicky">Clicky</option>
39 <option value="clicky">Clicky</option>
40 <option value="server_announce">${_('Server Announcement')}</ option>
40 <option value="server_announce">${_('Server Announcement')}</ option>
41 </select>
41 </select>
42 <script>
42 <script>
43 $(document).ready(function() {
43 $(document).ready(function() {
44 $('#example_select').select2({
44 $('#example_select').select2({
45 containerCssClass: 'drop-menu',
45 containerCssClass: 'drop-menu',
46 dropdownCssClass: 'drop-menu-dropdown',
46 dropdownCssClass: 'drop-menu-dropdown',
47 dropdownAutoWidth: true,
47 dropdownAutoWidth: true,
48 minimumResultsForSearch: -1
48 minimumResultsForSearch: -1
49 });
49 });
50 });
50 });
51 </script>
51 </script>
52 </fields>
52 </fields>
53 </fieldset>
53 </fieldset>
54
54
55 <fieldset>
55 <fieldset>
56 <legend>Multiple Dropdowns in a list:</legend>
56 <legend>Multiple Dropdowns in a list:</legend>
57 <ul class="fields formlist">
57 <ul class="fields formlist">
58 <li>
58 <li>
59 <select id="example_select3" >
59 <select id="example_select3" >
60 <option value="#">${_('Templates...')}</option>
60 <option value="#">${_('Templates...')}</option>
61 <option value="ga">Google Analytics</option>
61 <option value="ga">Google Analytics</option>
62 <option value="clicky">Clicky</option>
62 <option value="clicky">Clicky</option>
63 <option value="server_announce">${_('Server Announcement')} </ option>
63 <option value="server_announce">${_('Server Announcement')} </ option>
64 </select>
64 </select>
65 <script>
65 <script>
66 $(document).ready(function() {
66 $(document).ready(function() {
67 $('#example_select3').select2({
67 $('#example_select3').select2({
68 containerCssClass: 'drop-menu',
68 containerCssClass: 'drop-menu',
69 dropdownCssClass: 'drop-menu-dropdown',
69 dropdownCssClass: 'drop-menu-dropdown',
70 dropdownAutoWidth: true,
70 dropdownAutoWidth: true,
71 minimumResultsForSearch: -1
71 minimumResultsForSearch: -1
72 });
72 });
73 });
73 });
74 </script>
74 </script>
75 </li>
75 </li>
76 <li>
76 <li>
77 <select id="example_select4" >
77 <select id="example_select4" >
78 <option value="#">${_('Templates...')}</option>
78 <option value="#">${_('Templates...')}</option>
79 <option value="ga">Google Analytics</option>
79 <option value="ga">Google Analytics</option>
80 <option value="clicky">Clicky</option>
80 <option value="clicky">Clicky</option>
81 <option value="server_announce">${_('Server Announcement')} </ option>
81 <option value="server_announce">${_('Server Announcement')} </ option>
82 </select>
82 </select>
83 <script>
83 <script>
84 $(document).ready(function() {
84 $(document).ready(function() {
85 $('#example_select4').select2({
85 $('#example_select4').select2({
86 containerCssClass: 'drop-menu',
86 containerCssClass: 'drop-menu',
87 dropdownCssClass: 'drop-menu-dropdown',
87 dropdownCssClass: 'drop-menu-dropdown',
88 dropdownAutoWidth: true,
88 dropdownAutoWidth: true,
89 minimumResultsForSearch: -1
89 minimumResultsForSearch: -1
90 });
90 });
91 });
91 });
92 </script>
92 </script>
93 </li>
93 </li>
94 <li>
94 <li>
95 <select id="example_select5" >
95 <select id="example_select5" >
96 <option value="#">${_('Templates...')}</option>
96 <option value="#">${_('Templates...')}</option>
97 <option value="ga">Google Analytics</option>
97 <option value="ga">Google Analytics</option>
98 <option value="clicky">Clicky</option>
98 <option value="clicky">Clicky</option>
99 <option value="server_announce">${_('Server Announcement')} </ option>
99 <option value="server_announce">${_('Server Announcement')} </ option>
100 </select>
100 </select>
101 <script>
101 <script>
102 $(document).ready(function() {
102 $(document).ready(function() {
103 $('#example_select5').select2({
103 $('#example_select5').select2({
104 containerCssClass: 'drop-menu',
104 containerCssClass: 'drop-menu',
105 dropdownCssClass: 'drop-menu-dropdown',
105 dropdownCssClass: 'drop-menu-dropdown',
106 dropdownAutoWidth: true,
106 dropdownAutoWidth: true,
107 minimumResultsForSearch: -1
107 minimumResultsForSearch: -1
108 });
108 });
109 });
109 });
110 </script>
110 </script>
111 </li>
111 </li>
112 </ul>
112 </ul>
113 </fieldset>
113 </fieldset>
114
114
115 <fieldset>
115 <fieldset>
116 <legend>Dropdown with checkbox:</legend>
116 <legend>Dropdown with checkbox:</legend>
117 <div class="fields">
117 <div class="fields">
118 <select id="example_select2" >
118 <select id="example_select2" >
119 <option value="#">${_('Some text...')}</option>
119 <option value="#">${_('Some text...')}</option>
120 <option value="ga">A really long thing</option>
120 <option value="ga">A really long thing</option>
121 <option value="clicky">Repo Name</option>
121 <option value="clicky">Repo Name</option>
122 <option value="server_announce">${_('Variable Item')}</option>
122 <option value="server_announce">${_('Variable Item')}</option>
123 </select>
123 </select>
124 <input type="checkbox" name="size" id="size_1" value="small"/>
124 <input type="checkbox" name="size" id="size_1" value="small"/>
125 <label for="size_1">Checkbox for something</label>\
125 <label for="size_1">Checkbox for something</label>\
126 <span class="label">Checkbox for something</span>
126 <span class="label">Checkbox for something</span>
127 <span class="help-block">
127 <span class="help-block">
128 Note: There is a very specific selector which centers the checkbox on the dropdown;
128 Note: There is a very specific selector which centers the checkbox on the dropdown;
129 it requires that the script NOT be between the two.
129 it requires that the script NOT be between the two.
130 </span>
130 </span>
131 </div>
131 </div>
132 <script>
132 <script>
133 $(document).ready(function() {
133 $(document).ready(function() {
134 $('#example_select2').select2({
134 $('#example_select2').select2({
135 containerCssClass: 'drop-menu',
135 containerCssClass: 'drop-menu',
136 dropdownCssClass: 'drop-menu-dropdown',
136 dropdownCssClass: 'drop-menu-dropdown',
137 dropdownAutoWidth: true,
137 dropdownAutoWidth: true,
138 minimumResultsForSearch: -1
138 minimumResultsForSearch: -1
139 });
139 });
140 });
140 });
141 </script>
141 </script>
142 </fieldset>
142 </fieldset>
143
143
144 <fieldset>
144 <fieldset>
145 <legend>Radio Buttons:</legend>
145 <legend>Radio Buttons:</legend>
146 <div class="fields">
146 <div class="fields">
147 <input type="radio" name="size" id="size_2" value="small"/>
147 <input type="radio" name="size" id="size_2" value="small"/>
148 <label for="size_2">Radio one</label>
148 <label for="size_2">Radio one</label>
149 <span class="label">Radio Button One</span>
149 <span class="label">Radio Button One</span>
150 <input type="radio" name="size" id="size_3" value="small"/>
150 <input type="radio" name="size" id="size_3" value="small"/>
151 <label for="size_3">Radio two</label>
151 <label for="size_3">Radio two</label>
152 <span class="label">Radio Button Two</span>
152 <span class="label">Radio Button Two</span>
153 <input type="radio" checked name="size" id="size_4" value="small"/>
153 <input type="radio" checked name="size" id="size_4" value="small"/>
154 <label for="size_4">Radio three</label>
154 <label for="size_4">Radio three</label>
155 <span class="label">Radio Button Three</span>
155 <span class="label">Radio Button Three</span>
156 </div>
156 </div>
157 </fieldset>
157 </fieldset>
158
158
159 <fieldset>
159 <fieldset>
160 <legend>Checkboxes with help text:</legend>
160 <legend>Checkboxes with help text:</legend>
161 <div class="fields">
161 <div class="fields">
162 <input type="checkbox" name="size" id="size_5" value="small"/>
162 <input type="checkbox" name="size" id="size_5" value="small"/>
163 <label for="size_5">Checkbox one</label>
163 <label for="size_5">Checkbox one</label>
164 <span class="label">Checkbox One</span>
164 <span class="label">Checkbox One</span>
165 <input type="checkbox" checked name="size" id="size_6" value="small"/>
165 <input type="checkbox" checked name="size" id="size_6" value="small"/>
166 <label for="size_6">Checkbox two</label>
166 <label for="size_6">Checkbox two</label>
167 <span class="label">Checkbox Two</span>
167 <span class="label">Checkbox Two</span>
168 <input type="checkbox" checked name="size" id="size_7" value="small"/>
168 <input type="checkbox" checked name="size" id="size_7" value="small"/>
169 <label for="size_7">Checkbox three</label>
169 <label for="size_7">Checkbox three</label>
170 <span class="label">Checkbox Three</span>
170 <span class="label">Checkbox Three</span>
171 <span class="help-block">
171 <span class="help-block">
172 Help text can be put wherever needed. Inside of .fields, it is confined to the width of the input sections.
172 Help text can be put wherever needed. Inside of .fields, it is confined to the width of the input sections.
173 </span>
173 </span>
174 </div>
174 </div>
175 </fieldset>
175 </fieldset>
176
176
177 <fieldset>
177 <fieldset>
178 <legend>Checkboxes as a list:</legend>
178 <legend>Checkboxes as a list:</legend>
179 <div class="fields">
179 <div class="fields">
180 <ul class="formlist">
180 <ul class="formlist">
181 <li>
181 <li>
182 <input type="checkbox" name="size" id="size_8" value="small "/>
182 <input type="checkbox" name="size" id="size_8" value="small "/>
183 <label for="size_8">Checkbox one</label>
183 <label for="size_8">Checkbox one</label>
184 <span class="label">Checkbox One</span>
184 <span class="label">Checkbox One</span>
185 </li>
185 </li>
186 <li>
186 <li>
187 <input type="checkbox" checked name="size" id="size_9" value=" small"/>
187 <input type="checkbox" checked name="size" id="size_9" value=" small"/>
188 <label for="size_9">Checkbox two</label>
188 <label for="size_9">Checkbox two</label>
189 <span class="label">Checkbox Two</span>
189 <span class="label">Checkbox Two</span>
190 </li>
190 </li>
191 <li>
191 <li>
192 <input type="checkbox" checked name="size" id="size_10" value=" small"/>
192 <input type="checkbox" checked name="size" id="size_10" value=" small"/>
193 <label for="size_10">Checkbox three</label>
193 <label for="size_10">Checkbox three</label>
194 <span class="label">Checkbox Three</span>
194 <span class="label">Checkbox Three</span>
195 </li>
195 </li>
196 </ul>
196 </ul>
197 <span class="help-block">
197 <span class="help-block">
198 In some instances, you may wish for dropdowns, checkboxes, or radio buttons to be in a list rather than inline. This is achieved using .formlist.
198 In some instances, you may wish for dropdowns, checkboxes, or radio buttons to be in a list rather than inline. This is achieved using .formlist.
199 </span>
199 </span>
200 </div>
200 </div>
201 </fieldset>
201 </fieldset>
202
202
203 <fieldset>
203 <fieldset>
204 <legend>Text Input:</legend>
204 <legend>Text Input:</legend>
205 <div class="fields">
205 <div class="fields">
206 <input id="example_input" type="text" placeholder="Example input">
206 <input id="example_input" type="text" placeholder="Example input">
207 <input id="example_input" type="text" placeholder="Example input">
207 <input id="example_input" type="text" placeholder="Example input">
208 </div>
208 </div>
209 </fieldset>
209 </fieldset>
210
210
211 <fieldset>
211 <fieldset>
212 <legend>Textarea:</legend>
212 <legend>Textarea:</legend>
213 <div class="fields">
213 <div class="fields">
214 <textarea placeholder="This is a textarea."></textarea>
214 <textarea placeholder="This is a textarea."></textarea>
215 </div>
215 </div>
216 </fieldset>
216 </fieldset>
217
217
218 <fieldset>
218 <fieldset>
219 <legend>Some Inputs with a button:</legend>
219 <legend>Some Inputs with a button:</legend>
220 <div class="fields">
220 <div class="fields">
221 <input class="disabled" id="paths_root_path" name="paths_root_path" readonly="readonly" size="59" type="text" value="Disabled input">
221 <input class="disabled" id="paths_root_path" name="paths_root_path" readonly="readonly" size="59" type="text" value="Disabled input">
222 <span id="path_unlock" class="tooltip" title="Click to unlock. You must restart RhodeCode in order to make this setting take effect.">
222 <span id="path_unlock" class="tooltip" title="Click to unlock. You must restart RhodeCode in order to make this setting take effect.">
223 <div class="btn btn-default">
223 <div class="btn btn-default">
224 <span><i id="path_unlock_icon" class="icon-lock"></i></span>
224 <span><i id="path_unlock_icon" class="icon-lock"></i></span>
225 </div>
225 </div>
226 </span>
226 </span>
227 <input id="paths_root_path" name="paths_root_path" size="59" type="text" placeholder="Input">
227 <input id="paths_root_path" name="paths_root_path" size="59" type="text" placeholder="Input">
228 <span class="btn btn-x" onclick="ajaxDeletePattern(11,'id11')">
228 <span class="btn btn-x" onclick="ajaxDeletePattern(11,'id11')">
229 Delete
229 Delete
230 </span>
230 </span>
231 </div>
231 </div>
232 </fieldset>
232 </fieldset>
233
233
234 <fieldset class="select side-by-side-selector">
234 <fieldset class="select side-by-side-selector">
235 <div class="left-group">
235 <div class="left-group">
236 <label class="text" >${_('Chosen group members')}</label>
236 <label class="text" >${_('Chosen group members')}</label>
237 <select id="users_group_members2" multiple size='8'>
237 <select id="users_group_members2" multiple size='8'>
238 </select>
238 </select>
239 <div class="btn" id="remove_all_elements2" >
239 <div class="btn" id="remove_all_elements2" >
240 ${_('Remove all elements')}
240 ${_('Remove all elements')}
241 <i class="icon-chevron-right"></i>
241 <i class="icon-chevron-right"></i>
242 </div>
242 </div>
243 </div>
243 </div>
244 <div class="middle-group">
244 <div class="middle-group">
245 <i id="add_element2" class="icon-chevron-left"></i>
245 <i id="add_element2" class="icon-chevron-left"></i>
246 <br />
246 <br />
247 <i id="remove_element2" class="icon-chevron-right"></i>
247 <i id="remove_element2" class="icon-chevron-right"></i>
248 </div>
248 </div>
249 <div class="right-group">
249 <div class="right-group">
250 <label class="text" >${_('Available members')}</label>
250 <label class="text" >${_('Available members')}</label>
251 <select id="available_members2" multiple size='8'>
251 <select id="available_members2" multiple size='8'>
252 <option value="#">${_('Some example text...')}</option>
252 <option value="#">${_('Some example text...')}</option>
253 <option value="ga">A really long thing</option>
253 <option value="ga">A really long thing</option>
254 <option value="clicky">Repo Name</option>
254 <option value="clicky">Repo Name</option>
255 <option value="server_announce">${_('Variable Item')}</option>
255 <option value="server_announce">${_('Variable Item')}</option>
256 </select>
256 </select>
257 <div class="btn" id="add_all_elements2" >
257 <div class="btn" id="add_all_elements2" >
258 <i class="icon-chevron-left"></i>${_('Add all elements')}
258 <i class="icon-chevron-left"></i>${_('Add all elements')}
259 </div>
259 </div>
260 </div>
260 </div>
261 </fieldset>
261 </fieldset>
262
262
263 <script>
263 <script>
264 $(document).ready(function(){
264 $(document).ready(function(){
265 MultiSelectWidget('users_group_members2','available_members', 'edit_users_group');
265 MultiSelectWidget('users_group_members2','available_members', 'edit_users_group');
266 })
266 })
267 </script>
267 </script>
268
268
269 <div class="buttons">
269 <div class="buttons">
270 <input type="submit" value="Save" id="example_save" class="btn">
270 <input type="submit" value="Save" id="example_save" class="btn">
271 <input type="reset" value="Reset" id="example_reset" class="btn">
271 <input type="reset" value="Reset" id="example_reset" class="btn">
272 </div>
272 </div>
273
273
274 </form>
274 </form>
275
275
276 </div> <!-- .main-content -->
276 </div> <!-- .main-content -->
277 </div> <!-- .sidebar-col-wrappe -->
277 </div> <!-- .sidebar-col-wrappe -->
278 </div> <!-- .box -->
278 </div> <!-- .box -->
279 </%def>
279 </%def>
@@ -1,102 +1,102 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2 <%inherit file="/debug_style/index.html"/>
2 <%inherit file="/debug_style/index.html"/>
3
3
4 <%def name="breadcrumbs_links()">
4 <%def name="breadcrumbs_links()">
5 ${h.link_to(_('Style'), h.url('debug_style_home'))}
5 ${h.link_to(_('Style'), h.route_path('debug_style_home'))}
6 &raquo;
6 &raquo;
7 ${c.active}
7 ${c.active}
8 </%def>
8 </%def>
9
9
10
10
11 <%def name="real_main()">
11 <%def name="real_main()">
12 <div class="box">
12 <div class="box">
13 <div class="title">
13 <div class="title">
14 ${self.breadcrumbs()}
14 ${self.breadcrumbs()}
15 </div>
15 </div>
16
16
17 <div class='sidebar-col-wrapper'>
17 <div class='sidebar-col-wrapper'>
18 ${self.sidebar()}
18 ${self.sidebar()}
19
19
20 <div class="main-content">
20 <div class="main-content">
21
21
22 <h2>Gravatars</h2>
22 <h2>Gravatars</h2>
23
23
24 <p>Usernames are always centered on an avatar to the left.
24 <p>Usernames are always centered on an avatar to the left.
25 Avatars are 16px square.
25 Avatars are 16px square.
26 For user settings/login, some exceptions may use a larger avatar.
26 For user settings/login, some exceptions may use a larger avatar.
27 Use base.gravatar for a gravatar only, and base.gravatar_with_user
27 Use base.gravatar for a gravatar only, and base.gravatar_with_user
28 for a gravatar with a username.
28 for a gravatar with a username.
29 Use the format below:
29 Use the format below:
30 </p>
30 </p>
31 <div class="bs-example template-example">
31 <div class="bs-example template-example">
32 <div class="gravatar_with_user">
32 <div class="gravatar_with_user">
33 <img class="gravatar" alt="gravatar" src="https://secure.gravatar.com/avatar/72706ebd30734451af9ff3fb59f05ff1?d=identicon&amp;s=16">
33 <img class="gravatar" alt="gravatar" src="https://secure.gravatar.com/avatar/72706ebd30734451af9ff3fb59f05ff1?d=identicon&amp;s=16">
34 <span title="Lolek Santos <lolek@rhodecode.com>" class="user">Lolek</span>
34 <span title="Lolek Santos <lolek@rhodecode.com>" class="user">Lolek</span>
35 </div>
35 </div>
36 </div>
36 </div>
37 <div class="bs-example template-example">
37 <div class="bs-example template-example">
38 <xmp>$</xmp><xmp>{base.gravatar_with_user(c.rhodecode_user.email, 16)}</xmp>
38 <xmp>$</xmp><xmp>{base.gravatar_with_user(c.rhodecode_user.email, 16)}</xmp>
39 </div>
39 </div>
40 <div class="bs-example template-example">
40 <div class="bs-example template-example">
41 <div class="gravatar_with_user">
41 <div class="gravatar_with_user">
42 <img class="gravatar gravatar-large" alt="gravatar" src="https://secure.gravatar.com/avatar/72706ebd30734451af9ff3fb59f05ff1?d=identicon&amp;s=30">
42 <img class="gravatar gravatar-large" alt="gravatar" src="https://secure.gravatar.com/avatar/72706ebd30734451af9ff3fb59f05ff1?d=identicon&amp;s=30">
43 <span title="Lolek Santos <lolek@rhodecode.com>" class="user">Lolek</span>
43 <span title="Lolek Santos <lolek@rhodecode.com>" class="user">Lolek</span>
44 </div>
44 </div>
45 </div>
45 </div>
46 <div class="bs-example template-example">
46 <div class="bs-example template-example">
47 <xmp>$</xmp><xmp>{base.gravatar_with_user(c.rhodecode_user.email, 30)}</xmp>
47 <xmp>$</xmp><xmp>{base.gravatar_with_user(c.rhodecode_user.email, 30)}</xmp>
48 </div>
48 </div>
49 <p class="help-block">Note: Actual template variables may be different.</p>
49 <p class="help-block">Note: Actual template variables may be different.</p>
50
50
51 <h2>Icon List</h2>
51 <h2>Icon List</h2>
52
52
53
53
54 <table id="icons-list">
54 <table id="icons-list">
55 <tr class="row">
55 <tr class="row">
56 <td title="Code: 0xe813" class="the-icons span3"><i class="icon-plus"></i> <span class="i-name">icon-plus</span> <span class="i-code">0xe813</span></td>
56 <td title="Code: 0xe813" class="the-icons span3"><i class="icon-plus"></i> <span class="i-name">icon-plus</span> <span class="i-code">0xe813</span></td>
57 <td title="Code: 0xe814" class="the-icons span3"><i class="icon-minus"></i> <span class="i-name">icon-minus</span> <span class="i-code">0xe814</span></td>
57 <td title="Code: 0xe814" class="the-icons span3"><i class="icon-minus"></i> <span class="i-name">icon-minus</span> <span class="i-code">0xe814</span></td>
58 <td title="Code: 0xe815" class="the-icons span3"><i class="icon-remove"></i> <span class="i-name">icon-remove</span> <span class="i-code">0xe815</span></td>
58 <td title="Code: 0xe815" class="the-icons span3"><i class="icon-remove"></i> <span class="i-name">icon-remove</span> <span class="i-code">0xe815</span></td>
59 <td title="Code: 0xe811" class="the-icons span3"><i class="icon-fork"></i> <span class="i-name">icon-fork</span> <span class="i-code">0xe811</span></td>
59 <td title="Code: 0xe811" class="the-icons span3"><i class="icon-fork"></i> <span class="i-name">icon-fork</span> <span class="i-code">0xe811</span></td>
60 <td title="Code: 0xe803" class="the-icons span3"><i class="icon-bookmark"></i> <span class="i-name">icon-bookmark</span> <span class="i-code">0xe803</span></td>
60 <td title="Code: 0xe803" class="the-icons span3"><i class="icon-bookmark"></i> <span class="i-name">icon-bookmark</span> <span class="i-code">0xe803</span></td>
61 </tr>
61 </tr>
62 <tr class="row">
62 <tr class="row">
63 <td title="Code: 0xe804" class="the-icons span3"><i class="icon-branch"></i> <span class="i-name">icon-branch</span> <span class="i-code">0xe804</span></td>
63 <td title="Code: 0xe804" class="the-icons span3"><i class="icon-branch"></i> <span class="i-name">icon-branch</span> <span class="i-code">0xe804</span></td>
64 <td title="Code: 0xe833" class="the-icons span3"><i class="icon-merge"></i> <span class="i-name">icon-merge</span> <span class="i-code">0xe833</span></td>
64 <td title="Code: 0xe833" class="the-icons span3"><i class="icon-merge"></i> <span class="i-name">icon-merge</span> <span class="i-code">0xe833</span></td>
65 <td title="Code: 0xe805" class="the-icons span3"><i class="icon-tag"></i> <span class="i-name">icon-tag</span> <span class="i-code">0xe805</span></td>
65 <td title="Code: 0xe805" class="the-icons span3"><i class="icon-tag"></i> <span class="i-name">icon-tag</span> <span class="i-code">0xe805</span></td>
66 <td title="Code: 0xe806" class="the-icons span3"><i class="icon-lock"></i> <span class="i-name">icon-lock</span> <span class="i-code">0xe806</span></td>
66 <td title="Code: 0xe806" class="the-icons span3"><i class="icon-lock"></i> <span class="i-name">icon-lock</span> <span class="i-code">0xe806</span></td>
67 <td title="Code: 0xe807" class="the-icons span3"><i class="icon-unlock"></i> <span class="i-name">icon-unlock</span> <span class="i-code">0xe807</span></td>
67 <td title="Code: 0xe807" class="the-icons span3"><i class="icon-unlock"></i> <span class="i-name">icon-unlock</span> <span class="i-code">0xe807</span></td>
68 </tr>
68 </tr>
69 <tr class="row">
69 <tr class="row">
70 <td title="Code: 0xe800" class="the-icons span3"><i class="icon-delete"></i> <span class="i-name">icon-delete</span> <span class="i-code">0xe800</span></td>
70 <td title="Code: 0xe800" class="the-icons span3"><i class="icon-delete"></i> <span class="i-name">icon-delete</span> <span class="i-code">0xe800</span></td>
71 <td title="Code: 0xe800" class="the-icons span3"><i class="icon-false"></i> <span class="i-name">icon-false</span> <span class="i-code">0xe800</span></td>
71 <td title="Code: 0xe800" class="the-icons span3"><i class="icon-false"></i> <span class="i-name">icon-false</span> <span class="i-code">0xe800</span></td>
72 <td title="Code: 0xe801" class="the-icons span3"><i class="icon-ok"></i> <span class="i-name">icon-ok</span> <span class="i-code">0xe801</span></td>
72 <td title="Code: 0xe801" class="the-icons span3"><i class="icon-ok"></i> <span class="i-name">icon-ok</span> <span class="i-code">0xe801</span></td>
73 <td title="Code: 0xe801" class="the-icons span3"><i class="icon-true"></i> <span class="i-name">icon-true</span> <span class="i-code">0xe801</span></td>
73 <td title="Code: 0xe801" class="the-icons span3"><i class="icon-true"></i> <span class="i-name">icon-true</span> <span class="i-code">0xe801</span></td>
74 <td title="Code: 0xe80f" class="the-icons span3"><i class="icon-group"></i> <span class="i-name">icon-group</span> <span class="i-code">0xe80f</span></td>
74 <td title="Code: 0xe80f" class="the-icons span3"><i class="icon-group"></i> <span class="i-name">icon-group</span> <span class="i-code">0xe80f</span></td>
75 </tr>
75 </tr>
76 <tr class="row">
76 <tr class="row">
77 <td title="Code: 0xe82d" class="the-icons span3"><i class="icon-hg"></i> <span class="i-name">icon-hg</span> <span class="i-code">0xe82d</span></td>
77 <td title="Code: 0xe82d" class="the-icons span3"><i class="icon-hg"></i> <span class="i-name">icon-hg</span> <span class="i-code">0xe82d</span></td>
78 <td title="Code: 0xe82a" class="the-icons span3"><i class="icon-git"></i> <span class="i-name">icon-git</span> <span class="i-code">0xe82a</span></td>
78 <td title="Code: 0xe82a" class="the-icons span3"><i class="icon-git"></i> <span class="i-name">icon-git</span> <span class="i-code">0xe82a</span></td>
79 <td title="Code: 0xe82e" class="the-icons span3"><i class="icon-svn"></i> <span class="i-name">icon-svn</span> <span class="i-code">0xe82e</span></td>
79 <td title="Code: 0xe82e" class="the-icons span3"><i class="icon-svn"></i> <span class="i-name">icon-svn</span> <span class="i-code">0xe82e</span></td>
80 <td title="Code: 0xe810" class="the-icons span3"><i class="icon-folder"></i> <span class="i-name">icon-folder</span> <span class="i-code">0xe810</span></td>
80 <td title="Code: 0xe810" class="the-icons span3"><i class="icon-folder"></i> <span class="i-name">icon-folder</span> <span class="i-code">0xe810</span></td>
81 <td title="Code: 0xe831" class="the-icons span3"><i class="icon-rhodecode"></i> <span class="i-name">icon-rhodecode</span> <span class="i-code">0xe831</span></td>
81 <td title="Code: 0xe831" class="the-icons span3"><i class="icon-rhodecode"></i> <span class="i-name">icon-rhodecode</span> <span class="i-code">0xe831</span></td>
82 </tr>
82 </tr>
83 <tr class="row">
83 <tr class="row">
84 <td title="Code: 0xe812" class="the-icons span3"><i class="icon-more"></i> <span class="i-name">icon-more</span> <span class="i-code">0xe812</span></td>
84 <td title="Code: 0xe812" class="the-icons span3"><i class="icon-more"></i> <span class="i-name">icon-more</span> <span class="i-code">0xe812</span></td>
85 <td title="Code: 0xe802" class="the-icons span3"><i class="icon-comment"></i> <span class="i-name">icon-comment</span> <span class="i-code">0xe802</span></td>
85 <td title="Code: 0xe802" class="the-icons span3"><i class="icon-comment"></i> <span class="i-name">icon-comment</span> <span class="i-code">0xe802</span></td>
86 <td title="Code: 0xe82f" class="the-icons span3"><i class="icon-comment-add"></i> <span class="i-name">icon-comment-add</span> <span class="i-code">0xe82f</span></td>
86 <td title="Code: 0xe82f" class="the-icons span3"><i class="icon-comment-add"></i> <span class="i-name">icon-comment-add</span> <span class="i-code">0xe82f</span></td>
87 <td title="Code: 0xe830" class="the-icons span3"><i class="icon-comment-toggle"></i> <span class="i-name">icon-comment-toggle</span> <span class="i-code">0xe830</span></td>
87 <td title="Code: 0xe830" class="the-icons span3"><i class="icon-comment-toggle"></i> <span class="i-name">icon-comment-toggle</span> <span class="i-code">0xe830</span></td>
88 <td title="Code: 0xe808" class="the-icons span3"><i class="icon-feed"></i> <span class="i-name">icon-feed</span> <span class="i-code">0xe808</span></td>
88 <td title="Code: 0xe808" class="the-icons span3"><i class="icon-feed"></i> <span class="i-name">icon-feed</span> <span class="i-code">0xe808</span></td>
89 </tr>
89 </tr>
90 <tr class="row">
90 <tr class="row">
91 <td title="Code: 0xe80a" class="the-icons span3"><i class="icon-right"></i> <span class="i-name">icon-right</span> <span class="i-code">0xe80a</span></td>
91 <td title="Code: 0xe80a" class="the-icons span3"><i class="icon-right"></i> <span class="i-name">icon-right</span> <span class="i-code">0xe80a</span></td>
92 <td title="Code: 0xe809" class="the-icons span3"><i class="icon-left"></i> <span class="i-name">icon-left</span> <span class="i-code">0xe809</span></td>
92 <td title="Code: 0xe809" class="the-icons span3"><i class="icon-left"></i> <span class="i-name">icon-left</span> <span class="i-code">0xe809</span></td>
93 <td title="Code: 0xe80b" class="the-icons span3"><i class="icon-arrow_down"></i> <span class="i-name">icon-arrow_down</span> <span class="i-code">0xe80b</span></td>
93 <td title="Code: 0xe80b" class="the-icons span3"><i class="icon-arrow_down"></i> <span class="i-name">icon-arrow_down</span> <span class="i-code">0xe80b</span></td>
94 <td title="Code: 0xe832" class="the-icons span3"><i class="icon-arrow_up"></i> <span class="i-name">icon-arrow_up</span> <span class="i-code">0xe832</span></td>
94 <td title="Code: 0xe832" class="the-icons span3"><i class="icon-arrow_up"></i> <span class="i-name">icon-arrow_up</span> <span class="i-code">0xe832</span></td>
95 <td></td>
95 <td></td>
96 </tr>
96 </tr>
97 </div>
97 </div>
98 </table>
98 </table>
99 </div>
99 </div>
100 </div>
100 </div>
101 </div>
101 </div>
102 </%def> No newline at end of file
102 </%def>
@@ -1,79 +1,79 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2 <%inherit file="/base/base.mako"/>
2 <%inherit file="/base/base.mako"/>
3
3
4 <%def name="title()">
4 <%def name="title()">
5 ${_('Debug Style')}
5 ${_('Debug Style')}
6 %if c.rhodecode_name:
6 %if c.rhodecode_name:
7 &middot; ${h.branding(c.rhodecode_name)}
7 &middot; ${h.branding(c.rhodecode_name)}
8 %endif
8 %endif
9 </%def>
9 </%def>
10
10
11 <%def name="breadcrumbs_links()">
11 <%def name="breadcrumbs_links()">
12 ${_('Style')}
12 ${_('Style')}
13 </%def>
13 </%def>
14
14
15 <%def name="menu_bar_nav()">
15 <%def name="menu_bar_nav()">
16 ${self.menu_items(active='debug_style')}
16 ${self.menu_items(active='debug_style')}
17 </%def>
17 </%def>
18
18
19
19
20 <%def name="main()">
20 <%def name="main()">
21 <div id="style-page">
21 <div id="style-page">
22 ${self.real_main()}
22 ${self.real_main()}
23 </div>
23 </div>
24 </%def>
24 </%def>
25
25
26 <%def name="real_main()">
26 <%def name="real_main()">
27 <div class="box">
27 <div class="box">
28 <div class="title">
28 <div class="title">
29 ${self.breadcrumbs()}
29 ${self.breadcrumbs()}
30 </div>
30 </div>
31
31
32 <div class='sidebar-col-wrapper'>
32 <div class='sidebar-col-wrapper'>
33 ##main
33 ##main
34 ${self.sidebar()}
34 ${self.sidebar()}
35
35
36 <div class="main-content">
36 <div class="main-content">
37 <h2>Examples of styled elements</h2>
37 <h2>Examples of styled elements</h2>
38 <p>Taken based on the examples from Bootstrap, form elements based
38 <p>Taken based on the examples from Bootstrap, form elements based
39 on our current markup.</p>
39 on our current markup.</p>
40 <p>
40 <p>
41 The objective of this section is to have a comprehensive style guide which out
41 The objective of this section is to have a comprehensive style guide which out
42 lines any and all elements used throughout the application, as a reference for
42 lines any and all elements used throughout the application, as a reference for
43 both existing developers and as a training tool for future hires.
43 both existing developers and as a training tool for future hires.
44 </p>
44 </p>
45 </div>
45 </div>
46 </div>
46 </div>
47 </div>
47 </div>
48 </%def>
48 </%def>
49
49
50
50
51 <%def name="sidebar()">
51 <%def name="sidebar()">
52 <div class="sidebar">
52 <div class="sidebar">
53 <ul class="nav nav-pills nav-stacked">
53 <ul class="nav nav-pills nav-stacked">
54 <li class="${'active' if c.active=='index' else ''}"><a href="${h.url('debug_style_home')}">${_('Index')}</a></li>
54 <li class="${'active' if c.active=='index' else ''}"><a href="${h.route_path('debug_style_home')}">${_('Index')}</a></li>
55 <li class="${'active' if c.active=='typography' else ''}"><a href="${h.url('debug_style_template', t_path='typography.html')}">${_('Typography')}</a></li>
55 <li class="${'active' if c.active=='typography' else ''}"><a href="${h.route_path('debug_style_template', t_path='typography.html')}">${_('Typography')}</a></li>
56 <li class="${'active' if c.active=='forms' else ''}"><a href="${h.url('debug_style_template', t_path='forms.html')}">${_('Forms')}</a></li>
56 <li class="${'active' if c.active=='forms' else ''}"><a href="${h.route_path('debug_style_template', t_path='forms.html')}">${_('Forms')}</a></li>
57 <li class="${'active' if c.active=='buttons' else ''}"><a href="${h.url('debug_style_template', t_path='buttons.html')}">${_('Buttons')}</a></li>
57 <li class="${'active' if c.active=='buttons' else ''}"><a href="${h.route_path('debug_style_template', t_path='buttons.html')}">${_('Buttons')}</a></li>
58 <li class="${'active' if c.active=='labels' else ''}"><a href="${h.url('debug_style_template', t_path='labels.html')}">${_('Labels')}</a></li>
58 <li class="${'active' if c.active=='labels' else ''}"><a href="${h.route_path('debug_style_template', t_path='labels.html')}">${_('Labels')}</a></li>
59 <li class="${'active' if c.active=='alerts' else ''}"><a href="${h.url('debug_style_template', t_path='alerts.html')}">${_('Alerts')}</a></li>
59 <li class="${'active' if c.active=='alerts' else ''}"><a href="${h.route_path('debug_style_template', t_path='alerts.html')}">${_('Alerts')}</a></li>
60 <li class="${'active' if c.active=='tables' else ''}"><a href="${h.url('debug_style_template', t_path='tables.html')}">${_('Tables')}</a></li>
60 <li class="${'active' if c.active=='tables' else ''}"><a href="${h.route_path('debug_style_template', t_path='tables.html')}">${_('Tables')}</a></li>
61 <li class="${'active' if c.active=='tables-wide' else ''}"><a href="${h.url('debug_style_template', t_path='tables-wide.html')}">${_('Tables wide')}</a></li>
61 <li class="${'active' if c.active=='tables-wide' else ''}"><a href="${h.route_path('debug_style_template', t_path='tables-wide.html')}">${_('Tables wide')}</a></li>
62 <li class="${'active' if c.active=='collapsable-content' else ''}"><a href="${h.url('debug_style_template', t_path='collapsable-content.html')}">${_('Collapsable Content')}</a></li>
62 <li class="${'active' if c.active=='collapsable-content' else ''}"><a href="${h.route_path('debug_style_template', t_path='collapsable-content.html')}">${_('Collapsable Content')}</a></li>
63 <li class="${'active' if c.active=='icons' else ''}"><a href="${h.url('debug_style_template', t_path='icons.html')}">${_('Icons')}</a></li>
63 <li class="${'active' if c.active=='icons' else ''}"><a href="${h.route_path('debug_style_template', t_path='icons.html')}">${_('Icons')}</a></li>
64 <li class="${'active' if c.active=='layout-form-sidebar' else ''}"><a href="${h.url('debug_style_template', t_path='layout-form-sidebar.html')}">${_('Layout form with sidebar')}</a></li>
64 <li class="${'active' if c.active=='layout-form-sidebar' else ''}"><a href="${h.route_path('debug_style_template', t_path='layout-form-sidebar.html')}">${_('Layout form with sidebar')}</a></li>
65 <li class="${'active' if c.active=='login' else ''}"><a href="${h.url('debug_style_template', t_path='login.html')}">${_('Login')}</a></li>
65 <li class="${'active' if c.active=='login' else ''}"><a href="${h.route_path('debug_style_template', t_path='login.html')}">${_('Login')}</a></li>
66 <li class="${'active' if c.active=='login2' else ''}"><a href="${h.url('debug_style_template', t_path='login2.html')}">${_('Login 2')}</a></li>
66 <li class="${'active' if c.active=='login2' else ''}"><a href="${h.route_path('debug_style_template', t_path='login2.html')}">${_('Login 2')}</a></li>
67 <li class="${'active' if c.active=='code-block' else ''}"><a href="${h.url('debug_style_template', t_path='code-block.html')}">${_('Code blocks')}</a></li>
67 <li class="${'active' if c.active=='code-block' else ''}"><a href="${h.route_path('debug_style_template', t_path='code-block.html')}">${_('Code blocks')}</a></li>
68
68
69 <li class="divider"><strong>Experimental</strong></li>
69 <li class="divider"><strong>Experimental</strong></li>
70 <li class="${'active' if c.active=='panels' else ''}"><a href="${h.url('debug_style_template', t_path='panels.html')}">${_('Panels')}</a></li>
70 <li class="${'active' if c.active=='panels' else ''}"><a href="${h.route_path('debug_style_template', t_path='panels.html')}">${_('Panels')}</a></li>
71
71
72 <li class="divider"><strong>Depreciated</strong></li>
72 <li class="divider"><strong>Depreciated</strong></li>
73 <li class="${'active' if c.active=='form-elements' else ''}"><a href="${h.url('debug_style_template', t_path='form-elements.html')}">${_('Form elements')}</a></li>
73 <li class="${'active' if c.active=='form-elements' else ''}"><a href="${h.route_path('debug_style_template', t_path='form-elements.html')}">${_('Form elements')}</a></li>
74 <li class="${'active' if c.active=='form-elements-small' else ''}"><a href="${h.url('debug_style_template', t_path='form-elements-small.html')}">${_('Form elements small')}</a></li>
74 <li class="${'active' if c.active=='form-elements-small' else ''}"><a href="${h.route_path('debug_style_template', t_path='form-elements-small.html')}">${_('Form elements small')}</a></li>
75 <li class="${'active' if c.active=='form-inline' else ''}"><a href="${h.url('debug_style_template', t_path='form-inline.html')}">${_('Form inline elements')}</a></li>
75 <li class="${'active' if c.active=='form-inline' else ''}"><a href="${h.route_path('debug_style_template', t_path='form-inline.html')}">${_('Form inline elements')}</a></li>
76 <li class="${'active' if c.active=='form-vertical' else ''}"><a href="${h.url('debug_style_template', t_path='form-vertical.html')}">${_('Form vertical')}</a></li>
76 <li class="${'active' if c.active=='form-vertical' else ''}"><a href="${h.route_path('debug_style_template', t_path='form-vertical.html')}">${_('Form vertical')}</a></li>
77 </ul>
77 </ul>
78 </div>
78 </div>
79 </%def> No newline at end of file
79 </%def>
@@ -1,64 +1,64 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2 <%inherit file="/debug_style/index.html"/>
2 <%inherit file="/debug_style/index.html"/>
3
3
4 <%def name="breadcrumbs_links()">
4 <%def name="breadcrumbs_links()">
5 ${h.link_to(_('Style'), h.url('debug_style_home'))}
5 ${h.link_to(_('Style'), h.route_path('debug_style_home'))}
6 &raquo;
6 &raquo;
7 ${c.active}
7 ${c.active}
8 </%def>
8 </%def>
9
9
10
10
11 <%def name="real_main()">
11 <%def name="real_main()">
12 <div class="box">
12 <div class="box">
13 <div class="title">
13 <div class="title">
14 ${self.breadcrumbs()}
14 ${self.breadcrumbs()}
15 </div>
15 </div>
16
16
17 <div class='sidebar-col-wrapper'>
17 <div class='sidebar-col-wrapper'>
18
18
19 ${self.sidebar()}
19 ${self.sidebar()}
20
20
21 <div class="main-content">
21 <div class="main-content">
22 <h2>Labels</h2>
22 <h2>Labels</h2>
23
23
24 <h3>Labels used for tags, branches and bookmarks</h3>
24 <h3>Labels used for tags, branches and bookmarks</h3>
25
25
26 <div class="bs-example">
26 <div class="bs-example">
27 <ul class="metatag-list">
27 <ul class="metatag-list">
28 <li>
28 <li>
29 <span class="tagtag tag" title="Tag tip">
29 <span class="tagtag tag" title="Tag tip">
30 <a href="/fake-link"><i class="icon-tag"></i>tip</a>
30 <a href="/fake-link"><i class="icon-tag"></i>tip</a>
31 </span>
31 </span>
32 </li>
32 </li>
33 <li>
33 <li>
34 <span class="branchtag tag" title="Branch default">
34 <span class="branchtag tag" title="Branch default">
35 <a href="/fake-link"><i class="icon-code-fork"></i>default</a>
35 <a href="/fake-link"><i class="icon-code-fork"></i>default</a>
36 </span>
36 </span>
37 </li>
37 </li>
38 <li>
38 <li>
39 <span class="bookmarktag tag" title="Bookmark example">
39 <span class="bookmarktag tag" title="Bookmark example">
40 <a href="/fake-link"><i class="icon-bookmark"></i>example</a>
40 <a href="/fake-link"><i class="icon-bookmark"></i>example</a>
41 </span>
41 </span>
42 </li>
42 </li>
43 </ul>
43 </ul>
44
44
45 </div>
45 </div>
46
46
47 <h3>Labels used in tables</h3>
47 <h3>Labels used in tables</h3>
48 <div class="bs-example">
48 <div class="bs-example">
49 <ul class="metatag-list">
49 <ul class="metatag-list">
50 <li>[default] <span class="metatag" tag="default">default</span></li>
50 <li>[default] <span class="metatag" tag="default">default</span></li>
51 <li>[featured] <span class="metatag" tag="featured">featured</span></li>
51 <li>[featured] <span class="metatag" tag="featured">featured</span></li>
52 <li>[stale] <span class="metatag" tag="stale">stale</span></li>
52 <li>[stale] <span class="metatag" tag="stale">stale</span></li>
53 <li>[dead] <span class="metatag" tag="dead">dead</span></li>
53 <li>[dead] <span class="metatag" tag="dead">dead</span></li>
54 <li>[lang =&gt; lang] <span class="metatag" tag="lang">lang</span></li>
54 <li>[lang =&gt; lang] <span class="metatag" tag="lang">lang</span></li>
55 <li>[license =&gt; License] <span class="metatag" tag="license"><a href="http://www.opensource.org/licenses/License">License</a></span></li>
55 <li>[license =&gt; License] <span class="metatag" tag="license"><a href="http://www.opensource.org/licenses/License">License</a></span></li>
56 <li>[requires =&gt; Repo] <span class="metatag" tag="requires">requires =&gt; <a href="#">Repo</a></span></li>
56 <li>[requires =&gt; Repo] <span class="metatag" tag="requires">requires =&gt; <a href="#">Repo</a></span></li>
57 <li>[recommends =&gt; Repo] <span class="metatag" tag="recommends">recommends =&gt; <a href="#">Repo</a></span></li>
57 <li>[recommends =&gt; Repo] <span class="metatag" tag="recommends">recommends =&gt; <a href="#">Repo</a></span></li>
58 <li>[see =&gt; URI] <span class="metatag" tag="see">see =&gt; <a href="#">URI</a></span></li>
58 <li>[see =&gt; URI] <span class="metatag" tag="see">see =&gt; <a href="#">URI</a></span></li>
59 </ul>
59 </ul>
60 </div>
60 </div>
61 </div> <!-- .main-content -->
61 </div> <!-- .main-content -->
62 </div>
62 </div>
63 </div> <!-- .box -->
63 </div> <!-- .box -->
64 </%def>
64 </%def>
@@ -1,106 +1,106 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2 <%inherit file="/debug_style/index.html"/>
2 <%inherit file="/debug_style/index.html"/>
3
3
4 <%def name="breadcrumbs_links()">
4 <%def name="breadcrumbs_links()">
5 ${h.link_to(_('Style'), h.url('debug_style_home'))}
5 ${h.link_to(_('Style'), h.route_path('debug_style_home'))}
6 &raquo;
6 &raquo;
7 ${c.active}
7 ${c.active}
8 </%def>
8 </%def>
9
9
10
10
11 <%def name="real_main()">
11 <%def name="real_main()">
12 <div class="box">
12 <div class="box">
13 <div class="title">
13 <div class="title">
14 ${self.breadcrumbs()}
14 ${self.breadcrumbs()}
15 </div>
15 </div>
16
16
17 <div class='sidebar-col-wrapper'>
17 <div class='sidebar-col-wrapper'>
18 ${self.sidebar()}
18 ${self.sidebar()}
19
19
20 <div class="main-content">
20 <div class="main-content">
21
21
22 <h2>Headline comes as a h2 element</h2>
22 <h2>Headline comes as a h2 element</h2>
23
23
24
24
25 <form method='post' action='none'>
25 <form method='post' action='none'>
26 <div class='form'>
26 <div class='form'>
27 <div class='fields'>
27 <div class='fields'>
28
28
29 <div class='field'>
29 <div class='field'>
30 <div class='label'>
30 <div class='label'>
31 <label for='example_input'>Example input label:</label>
31 <label for='example_input'>Example input label:</label>
32 </div>
32 </div>
33 <div class='input'>
33 <div class='input'>
34 <input id="example_input" type="text" placeholder="Example input">
34 <input id="example_input" type="text" placeholder="Example input">
35 </div>
35 </div>
36 </div>
36 </div>
37
37
38 <div class='field'>
38 <div class='field'>
39 <div class='label'>
39 <div class='label'>
40 <label for='example_select'>Example select input:</label>
40 <label for='example_select'>Example select input:</label>
41 </div>
41 </div>
42 <div class="select">
42 <div class="select">
43 <select id="example_select" >
43 <select id="example_select" >
44 <option value="#">${_('Templates...')}</option>
44 <option value="#">${_('Templates...')}</option>
45 <option value="ga">Google Analytics</option>
45 <option value="ga">Google Analytics</option>
46 <option value="clicky">Clicky</option>
46 <option value="clicky">Clicky</option>
47 <option value="server_announce">${_('Server Announcement')}</option>
47 <option value="server_announce">${_('Server Announcement')}</option>
48 </select>
48 </select>
49 </div>
49 </div>
50 </div>
50 </div>
51 <script>
51 <script>
52 $(document).ready(function() {
52 $(document).ready(function() {
53 $('#example_select').select2({
53 $('#example_select').select2({
54 containerCssClass: 'drop-menu',
54 containerCssClass: 'drop-menu',
55 dropdownCssClass: 'drop-menu-dropdown',
55 dropdownCssClass: 'drop-menu-dropdown',
56 dropdownAutoWidth: true,
56 dropdownAutoWidth: true,
57 minimumResultsForSearch: -1
57 minimumResultsForSearch: -1
58 });
58 });
59 });
59 });
60 </script>
60 </script>
61
61
62 <div class='field'>
62 <div class='field'>
63 <div class='label'>
63 <div class='label'>
64 <label for='example_checkbox'>Example checkbox:</label>
64 <label for='example_checkbox'>Example checkbox:</label>
65 </div>
65 </div>
66 <div class="checkboxes">
66 <div class="checkboxes">
67 <div class="checkbox">
67 <div class="checkbox">
68 <input id="example_checkbox" type="checkbox">
68 <input id="example_checkbox" type="checkbox">
69 <label for="example_checkbox">Label of the checkbox</label>
69 <label for="example_checkbox">Label of the checkbox</label>
70 </div>
70 </div>
71 </div>
71 </div>
72 </div>
72 </div>
73
73
74 <div class='field'>
74 <div class='field'>
75 <div class='label'>
75 <div class='label'>
76 <label for='example_checkboxes'>Example multiple radios:</label>
76 <label for='example_checkboxes'>Example multiple radios:</label>
77 </div>
77 </div>
78 ## TODO: johbo: This is off compared to the checkboxes
78 ## TODO: johbo: This is off compared to the checkboxes
79 <div class="radios">
79 <div class="radios">
80 <label><input type="radio" checked="checked" value="hg.create.repository" name="default_repo_create" id="default_repo_create_hgcreaterepository">Enabled</label>
80 <label><input type="radio" checked="checked" value="hg.create.repository" name="default_repo_create" id="default_repo_create_hgcreaterepository">Enabled</label>
81 <label><input type="radio" value="hg.create.none" name="default_repo_create" id="default_repo_create_hgcreatenone">Disabled</label>
81 <label><input type="radio" value="hg.create.none" name="default_repo_create" id="default_repo_create_hgcreatenone">Disabled</label>
82 <span class="help-block">
82 <span class="help-block">
83 Permission to allow repository creation. This includes ability
83 Permission to allow repository creation. This includes ability
84 to create repositories in root level. If this option is disabled
84 to create repositories in root level. If this option is disabled
85 admin of repository group can still create repositories
85 admin of repository group can still create repositories
86 inside that repository group.
86 inside that repository group.
87 </span>
87 </span>
88 </div>
88 </div>
89 </div>
89 </div>
90
90
91 <div class="buttons">
91 <div class="buttons">
92 <input type="submit" value="Save" id="example_save" class="btn">
92 <input type="submit" value="Save" id="example_save" class="btn">
93 <input type="reset" value="Reset" id="example_reset" class="btn">
93 <input type="reset" value="Reset" id="example_reset" class="btn">
94 </div>
94 </div>
95
95
96 </div>
96 </div>
97 </div>
97 </div>
98 </form>
98 </form>
99
99
100
100
101
101
102
102
103 </div>
103 </div>
104 </div>
104 </div>
105 </div>
105 </div>
106 </%def>
106 </%def>
@@ -1,74 +1,74 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2 <%inherit file="/debug_style/index.html"/>
2 <%inherit file="/debug_style/index.html"/>
3
3
4
4
5 <%def name="breadcrumbs_links()">
5 <%def name="breadcrumbs_links()">
6 ${h.link_to(_('Style'), h.url('debug_style_home'))}
6 ${h.link_to(_('Style'), h.route_path('debug_style_home'))}
7 &raquo;
7 &raquo;
8 ${c.active}
8 ${c.active}
9 </%def>
9 </%def>
10
10
11
11
12 <%def name="real_main()">
12 <%def name="real_main()">
13 <div class="box">
13 <div class="box">
14 <div class="title">
14 <div class="title">
15 ${self.breadcrumbs()}
15 ${self.breadcrumbs()}
16 </div>
16 </div>
17
17
18 ##main
18 ##main
19 <div class='sidebar-col-wrapper'>
19 <div class='sidebar-col-wrapper'>
20 ${self.sidebar()}
20 ${self.sidebar()}
21
21
22 <div class="main-content">
22 <div class="main-content">
23
23
24
24
25 <div class="bs-example pull-left">
25 <div class="bs-example pull-left">
26
26
27 <div id="quick_login">
27 <div id="quick_login">
28 <h4>${_('Sign in to your account')}</h4>
28 <h4>${_('Sign in to your account')}</h4>
29
29
30 ${h.form(h.url('login_home',came_from=h.url.current()), needs_csrf_token=False)}
30 ${h.form(h.url('login_home',came_from=h.url.current()), needs_csrf_token=False)}
31 <div class="form form-vertical">
31 <div class="form form-vertical">
32 <div class="fields">
32 <div class="fields">
33
33
34 <div class="field">
34 <div class="field">
35 <div class="label">
35 <div class="label">
36 <label for="username">${_('Username')}:</label>
36 <label for="username">${_('Username')}:</label>
37 </div>
37 </div>
38 <div class="input">
38 <div class="input">
39 ${h.text('username',class_='focus',tabindex=1)}
39 ${h.text('username',class_='focus',tabindex=1)}
40 </div>
40 </div>
41 </div>
41 </div>
42
42
43 <div class="field">
43 <div class="field">
44 <div class="label">
44 <div class="label">
45 <label for="password">${_('Password')}:</label>
45 <label for="password">${_('Password')}:</label>
46 <span class="forgot_password">${h.link_to(_('(Forgot password?)'),h.url('reset_password'))}</span>
46 <span class="forgot_password">${h.link_to(_('(Forgot password?)'),h.url('reset_password'))}</span>
47 </div>
47 </div>
48 <div class="input">
48 <div class="input">
49 ${h.password('password',class_='focus',tabindex=2)}
49 ${h.password('password',class_='focus',tabindex=2)}
50 </div>
50 </div>
51 </div>
51 </div>
52
52
53 <div class="buttons">
53 <div class="buttons">
54 <div class="register">
54 <div class="register">
55 %if h.HasPermissionAny('hg.admin', 'hg.register.auto_activate', 'hg.register.manual_activate')():
55 %if h.HasPermissionAny('hg.admin', 'hg.register.auto_activate', 'hg.register.manual_activate')():
56 ${h.link_to(_("Don't have an account ?"),h.url('register'))}
56 ${h.link_to(_("Don't have an account ?"),h.url('register'))}
57 %endif
57 %endif
58 </div>
58 </div>
59 <div class="submit">
59 <div class="submit">
60 ${h.submit('sign_in',_('Sign In'),class_="btn btn-small",tabindex=3)}
60 ${h.submit('sign_in',_('Sign In'),class_="btn btn-small",tabindex=3)}
61 </div>
61 </div>
62 </div>
62 </div>
63
63
64 </div>
64 </div>
65 </div>
65 </div>
66 ${h.end_form()}
66 ${h.end_form()}
67 </div>
67 </div>
68
68
69 </div>
69 </div>
70 </div>
70 </div>
71 </div>
71 </div>
72 </div>
72 </div>
73
73
74 </%def>
74 </%def>
@@ -1,152 +1,152 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2 <%inherit file="/debug_style/index.html"/>
2 <%inherit file="/debug_style/index.html"/>
3
3
4 <%def name="breadcrumbs_links()">
4 <%def name="breadcrumbs_links()">
5 ${h.link_to(_('Style'), h.url('debug_style_home'))}
5 ${h.link_to(_('Style'), h.route_path('debug_style_home'))}
6 &raquo;
6 &raquo;
7 ${c.active}
7 ${c.active}
8 </%def>
8 </%def>
9
9
10 <%def name="real_main()">
10 <%def name="real_main()">
11 <div class="box">
11 <div class="box">
12 <div class="title">
12 <div class="title">
13 ${self.breadcrumbs()}
13 ${self.breadcrumbs()}
14 </div>
14 </div>
15
15
16 <div class='sidebar-col-wrapper'>
16 <div class='sidebar-col-wrapper'>
17 ${self.sidebar()}
17 ${self.sidebar()}
18
18
19 <div class="main-content">
19 <div class="main-content">
20
20
21 <h2>Panels</h2>
21 <h2>Panels</h2>
22
22
23 <p>
23 <p>
24 Panels are based on
24 Panels are based on
25 <a href="http://getbootstrap.com/components/#panels">
25 <a href="http://getbootstrap.com/components/#panels">
26 Bootstrap panels</a>, with custom styles added.</p>
26 Bootstrap panels</a>, with custom styles added.</p>
27 <p>
27 <p>
28 Examples how to use it:
28 Examples how to use it:
29 </p>
29 </p>
30
30
31 <div class="panel panel-default">
31 <div class="panel panel-default">
32 <div class="panel-heading">
32 <div class="panel-heading">
33 Panel title
33 Panel title
34 </div>
34 </div>
35 <div class="panel-body">
35 <div class="panel-body">
36 Panel with a plain <code>.panel-heading</code>
36 Panel with a plain <code>.panel-heading</code>
37 and <code>.panel-footer</code>.
37 and <code>.panel-footer</code>.
38 </div>
38 </div>
39 <div class="panel-footer">
39 <div class="panel-footer">
40 Panel footer
40 Panel footer
41 </div>
41 </div>
42 </div>
42 </div>
43
43
44 <div class="panel panel-default">
44 <div class="panel panel-default">
45 <div class="panel-heading">
45 <div class="panel-heading">
46 Panel title
46 Panel title
47 </div>
47 </div>
48 <div class="panel-body">
48 <div class="panel-body">
49 Footers are optional.
49 Footers are optional.
50 </div>
50 </div>
51 </div>
51 </div>
52
52
53 <div class="panel panel-default">
53 <div class="panel panel-default">
54 <div class="panel-heading">
54 <div class="panel-heading">
55 <div class="panel-title">
55 <div class="panel-title">
56 Panel title
56 Panel title
57 </div>
57 </div>
58 </div>
58 </div>
59 <div class="panel-body">
59 <div class="panel-body">
60 A <code>div.panel-title</code>
60 A <code>div.panel-title</code>
61 </div>
61 </div>
62 <div class="panel-footer">
62 <div class="panel-footer">
63 Panel footer
63 Panel footer
64 </div>
64 </div>
65 </div>
65 </div>
66
66
67 <div class="panel panel-default">
67 <div class="panel panel-default">
68 <div class="panel-heading">
68 <div class="panel-heading">
69 <h3 class="panel-title">
69 <h3 class="panel-title">
70 Panel title
70 Panel title
71 </h3>
71 </h3>
72 </div>
72 </div>
73 <div class="panel-body">
73 <div class="panel-body">
74 A <code>h3.panel-title</code>
74 A <code>h3.panel-title</code>
75 </div>
75 </div>
76 <div class="panel-footer">
76 <div class="panel-footer">
77 Panel footer
77 Panel footer
78 </div>
78 </div>
79 </div>
79 </div>
80
80
81 <div class="panel panel-default">
81 <div class="panel panel-default">
82 <div class="panel-heading">
82 <div class="panel-heading">
83 Panel title
83 Panel title
84 Panel title
84 Panel title
85 Panel title
85 Panel title
86 Panel title
86 Panel title
87 Panel title
87 Panel title
88 Panel title
88 Panel title
89 Panel title
89 Panel title
90 Panel title
90 Panel title
91 Panel title
91 Panel title
92 Panel title
92 Panel title
93 Panel title
93 Panel title
94 Panel title
94 Panel title
95 Panel title
95 Panel title
96 Panel title
96 Panel title
97 Panel title
97 Panel title
98 Panel title
98 Panel title
99 Panel title
99 Panel title
100 Panel title
100 Panel title
101 </div>
101 </div>
102 <div class="panel-body">
102 <div class="panel-body">
103 Content, title and footer can be of arbritary length.
103 Content, title and footer can be of arbritary length.
104 Content, title and footer can be of arbritary length.
104 Content, title and footer can be of arbritary length.
105 Content, title and footer can be of arbritary length.
105 Content, title and footer can be of arbritary length.
106 Content, title and footer can be of arbritary length.
106 Content, title and footer can be of arbritary length.
107 Content, title and footer can be of arbritary length.
107 Content, title and footer can be of arbritary length.
108 Content, title and footer can be of arbritary length.
108 Content, title and footer can be of arbritary length.
109 Content, title and footer can be of arbritary length.
109 Content, title and footer can be of arbritary length.
110 Content, title and footer can be of arbritary length.
110 Content, title and footer can be of arbritary length.
111 Content, title and footer can be of arbritary length.
111 Content, title and footer can be of arbritary length.
112 </div>
112 </div>
113 <div class="panel-footer">
113 <div class="panel-footer">
114 Panel footer
114 Panel footer
115 Panel footer
115 Panel footer
116 Panel footer
116 Panel footer
117 Panel footer
117 Panel footer
118 Panel footer
118 Panel footer
119 Panel footer
119 Panel footer
120 Panel footer
120 Panel footer
121 Panel footer
121 Panel footer
122 Panel footer
122 Panel footer
123 Panel footer
123 Panel footer
124 Panel footer
124 Panel footer
125 Panel footer
125 Panel footer
126 Panel footer
126 Panel footer
127 Panel footer
127 Panel footer
128 Panel footer
128 Panel footer
129 Panel footer
129 Panel footer
130 </div>
130 </div>
131 </div>
131 </div>
132 <p>
132 <p>
133 Use the HTML format below:
133 Use the HTML format below:
134 </p>
134 </p>
135 <div class="bs-example template-example">
135 <div class="bs-example template-example">
136 <xmp><div class="panel panel-default">
136 <xmp><div class="panel panel-default">
137 <div class="panel-heading">
137 <div class="panel-heading">
138 <h3 class="panel-title">Panel title</h3>
138 <h3 class="panel-title">Panel title</h3>
139 </div>
139 </div>
140 <div class="panel-body">
140 <div class="panel-body">
141 Panel content
141 Panel content
142 </div>
142 </div>
143 <div class="panel-footer">
143 <div class="panel-footer">
144 Panel footer
144 Panel footer
145 </div>
145 </div>
146 </div></xmp>
146 </div></xmp>
147 </div>
147 </div>
148
148
149 </div>
149 </div>
150 </div>
150 </div>
151 </div>
151 </div>
152 </%def>
152 </%def>
@@ -1,130 +1,130 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2 <%inherit file="/debug_style/index.html"/>
2 <%inherit file="/debug_style/index.html"/>
3
3
4 <%def name="breadcrumbs_links()">
4 <%def name="breadcrumbs_links()">
5 ${h.link_to(_('Style'), h.url('debug_style_home'))}
5 ${h.link_to(_('Style'), h.route_path('debug_style_home'))}
6 &raquo;
6 &raquo;
7 ${c.active}
7 ${c.active}
8 </%def>
8 </%def>
9
9
10
10
11 <%def name="real_main()">
11 <%def name="real_main()">
12 <div class="box">
12 <div class="box">
13 <div class="title">
13 <div class="title">
14 ${self.breadcrumbs()}
14 ${self.breadcrumbs()}
15 </div>
15 </div>
16
16
17 ##main
17 ##main
18 <div class='sidebar-col-wrapper'>
18 <div class='sidebar-col-wrapper'>
19 ${self.sidebar()}
19 ${self.sidebar()}
20
20
21 <div class="main-content">
21 <div class="main-content">
22
22
23 <h2>Too wide tables handling</h2>
23 <h2>Too wide tables handling</h2>
24
24
25
25
26
26
27 <table class="issuetracker">
27 <table class="issuetracker">
28 <tbody><tr>
28 <tbody><tr>
29 <th>Description</th>
29 <th>Description</th>
30 <th>Pattern</th>
30 <th>Pattern</th>
31 <th>Url</th>
31 <th>Url</th>
32 <th>Prefix</th>
32 <th>Prefix</th>
33 <th></th>
33 <th></th>
34 </tr>
34 </tr>
35 <tr>
35 <tr>
36 <td class="issue-tracker-example">Example</td>
36 <td class="issue-tracker-example">Example</td>
37 <td class="issue-tracker-example">(?:#)(?P&lt;issue_id&gt;\d+)</td>
37 <td class="issue-tracker-example">(?:#)(?P&lt;issue_id&gt;\d+)</td>
38 <td class="issue-tracker-example">https://myissueserver.com/repo/issue/issue_id</td>
38 <td class="issue-tracker-example">https://myissueserver.com/repo/issue/issue_id</td>
39 <td class="issue-tracker-example">#</td>
39 <td class="issue-tracker-example">#</td>
40 <td class="issue-tracker-example"><a target="_blank" href="https://rhodecode.com/docs">Read more</a></td>
40 <td class="issue-tracker-example"><a target="_blank" href="https://rhodecode.com/docs">Read more</a></td>
41 </tr>
41 </tr>
42 <tr id="4980baa2985b361e6e91b932f4a897d5">
42 <tr id="4980baa2985b361e6e91b932f4a897d5">
43 <td class="issuetracker_desc">kjlakjlkjlkj;lkjl;kjl;kjl;kjl;kj;lkj</td>
43 <td class="issuetracker_desc">kjlakjlkjlkj;lkjl;kjl;kjl;kjl;kj;lkj</td>
44 <td class="issuetracker_pat">lkjhlkjhlkjhaslkdjfhalkdjsfhalksjdhf</td>
44 <td class="issuetracker_pat">lkjhlkjhlkjhaslkdjfhalkdjsfhalksjdhf</td>
45 <td class="issuetracker_url">alsdkjhfalskjdfhalskjdhf</td>
45 <td class="issuetracker_url">alsdkjhfalskjdfhalskjdhf</td>
46 <td class="issuetracker_pref">alskdjhfalksjdhfalksjdhf</td>
46 <td class="issuetracker_pref">alskdjhfalksjdhfalksjdhf</td>
47 <td>
47 <td>
48 <div class="grid_edit">
48 <div class="grid_edit">
49 <a class="edit_issuetracker_entry" uid="4980baa2985b361e6e91b932f4a897d5" title="edit" href="#">
49 <a class="edit_issuetracker_entry" uid="4980baa2985b361e6e91b932f4a897d5" title="edit" href="#">
50 <i class="icon-pencil"></i>
50 <i class="icon-pencil"></i>
51 <input type="submit" value="edit" class="btn btn-link">
51 <input type="submit" value="edit" class="btn btn-link">
52 </a>
52 </a>
53 </div>
53 </div>
54
54
55 <div class="grid_delete">
55 <div class="grid_delete">
56 <form method="post" action="/_admin/settings/issue-tracker/delete"><div style="display:none">
56 <form method="post" action="/_admin/settings/issue-tracker/delete"><div style="display:none">
57 <input type="hidden" value="delete" name="_method">
57 <input type="hidden" value="delete" name="_method">
58 </div>
58 </div>
59
59
60 <div style="display: none;"><input type="hidden" value="05adf5bfb9be3766186f25db19b545134c6b0077" name="csrf_token" id="csrf_token"></div>
60 <div style="display: none;"><input type="hidden" value="05adf5bfb9be3766186f25db19b545134c6b0077" name="csrf_token" id="csrf_token"></div>
61 <input type="hidden" value="4980baa2985b361e6e91b932f4a897d5" name="del_uid" id="del_uid">
61 <input type="hidden" value="4980baa2985b361e6e91b932f4a897d5" name="del_uid" id="del_uid">
62 <i class="icon-remove-sign"></i>
62 <i class="icon-remove-sign"></i>
63 <input type="submit" value="delete" onclick="return confirm('Confirm to remove this pattern: kjlakjlkjlkj;lkjl;kjl;kjl;kjl;kj;lkj');" id="remove_user_3" class="btn btn-link btn-danger">
63 <input type="submit" value="delete" onclick="return confirm('Confirm to remove this pattern: kjlakjlkjlkj;lkjl;kjl;kjl;kjl;kj;lkj');" id="remove_user_3" class="btn btn-link btn-danger">
64 </form>
64 </form>
65 </div>
65 </div>
66
66
67 </td>
67 </td>
68 </tr>
68 </tr>
69 <tr id="98ac51a4ab43bb36a4feceed15ac5b21">
69 <tr id="98ac51a4ab43bb36a4feceed15ac5b21">
70 <td class="issuetracker_desc">kajls;kdjfal;skdjflaskdjflksjdlfksjdlfksjdlfkjsldkfjslkdjflskdjflkdsjf</td>
70 <td class="issuetracker_desc">kajls;kdjfal;skdjflaskdjflksjdlfksjdlfksjdlfkjsldkfjslkdjflskdjflkdsjf</td>
71 <td class="issuetracker_pat">lksjdlfkjsldkfjsldkfjlskdjflskjdlfksjdlfksjdlfjslkdfjslkdjf</td>
71 <td class="issuetracker_pat">lksjdlfkjsldkfjsldkfjlskdjflskjdlfksjdlfksjdlfjslkdfjslkdjf</td>
72 <td class="issuetracker_url">lksdjflskdjflskjdf</td>
72 <td class="issuetracker_url">lksdjflskdjflskjdf</td>
73 <td class="issuetracker_pref">sdlfkjsldkfjslkdjf</td>
73 <td class="issuetracker_pref">sdlfkjsldkfjslkdjf</td>
74 <td>
74 <td>
75 <div class="grid_edit">
75 <div class="grid_edit">
76 <a class="edit_issuetracker_entry" uid="98ac51a4ab43bb36a4feceed15ac5b21" title="edit" href="#">
76 <a class="edit_issuetracker_entry" uid="98ac51a4ab43bb36a4feceed15ac5b21" title="edit" href="#">
77 <i class="icon-pencil"></i>
77 <i class="icon-pencil"></i>
78 <input type="submit" value="edit" class="btn btn-link">
78 <input type="submit" value="edit" class="btn btn-link">
79 </a>
79 </a>
80 </div>
80 </div>
81
81
82 <div class="grid_delete">
82 <div class="grid_delete">
83 <form method="post" action="/_admin/settings/issue-tracker/delete"><div style="display:none">
83 <form method="post" action="/_admin/settings/issue-tracker/delete"><div style="display:none">
84 <input type="hidden" value="delete" name="_method">
84 <input type="hidden" value="delete" name="_method">
85 </div>
85 </div>
86
86
87 <div style="display: none;"><input type="hidden" value="05adf5bfb9be3766186f25db19b545134c6b0077" name="csrf_token" id="csrf_token"></div>
87 <div style="display: none;"><input type="hidden" value="05adf5bfb9be3766186f25db19b545134c6b0077" name="csrf_token" id="csrf_token"></div>
88 <input type="hidden" value="98ac51a4ab43bb36a4feceed15ac5b21" name="del_uid" id="del_uid">
88 <input type="hidden" value="98ac51a4ab43bb36a4feceed15ac5b21" name="del_uid" id="del_uid">
89 <i class="icon-remove-sign"></i>
89 <i class="icon-remove-sign"></i>
90 <input type="submit" value="delete" onclick="return confirm('Confirm to remove this pattern: kajls;kdjfal;skdjflaskdjflksjdlfksjdlfksjdlfkjsldkfjslkdjflskdjflkdsjf');" id="remove_user_3" class="btn btn-link btn-danger">
90 <input type="submit" value="delete" onclick="return confirm('Confirm to remove this pattern: kajls;kdjfal;skdjflaskdjflksjdlfksjdlfksjdlfkjsldkfjslkdjflskdjflkdsjf');" id="remove_user_3" class="btn btn-link btn-danger">
91 </form>
91 </form>
92 </div>
92 </div>
93
93
94 </td>
94 </td>
95 </tr>
95 </tr>
96 <tr id="098f6bcd4621d373cade4e832627b4f6">
96 <tr id="098f6bcd4621d373cade4e832627b4f6">
97 <td class="issuetracker_desc">test</td>
97 <td class="issuetracker_desc">test</td>
98 <td class="issuetracker_pat">test</td>
98 <td class="issuetracker_pat">test</td>
99 <td class="issuetracker_url">test</td>
99 <td class="issuetracker_url">test</td>
100 <td class="issuetracker_pref">test</td>
100 <td class="issuetracker_pref">test</td>
101 <td>
101 <td>
102 <div class="grid_edit">
102 <div class="grid_edit">
103 <a class="edit_issuetracker_entry" uid="098f6bcd4621d373cade4e832627b4f6" title="edit" href="#">
103 <a class="edit_issuetracker_entry" uid="098f6bcd4621d373cade4e832627b4f6" title="edit" href="#">
104 <i class="icon-pencil"></i>
104 <i class="icon-pencil"></i>
105 <input type="submit" value="edit" class="btn btn-link">
105 <input type="submit" value="edit" class="btn btn-link">
106 </a>
106 </a>
107 </div>
107 </div>
108
108
109 <div class="grid_delete">
109 <div class="grid_delete">
110 <form method="post" action="/_admin/settings/issue-tracker/delete"><div style="display:none">
110 <form method="post" action="/_admin/settings/issue-tracker/delete"><div style="display:none">
111 <input type="hidden" value="delete" name="_method">
111 <input type="hidden" value="delete" name="_method">
112 </div>
112 </div>
113
113
114 <div style="display: none;"><input type="hidden" value="05adf5bfb9be3766186f25db19b545134c6b0077" name="csrf_token" id="csrf_token"></div>
114 <div style="display: none;"><input type="hidden" value="05adf5bfb9be3766186f25db19b545134c6b0077" name="csrf_token" id="csrf_token"></div>
115 <input type="hidden" value="098f6bcd4621d373cade4e832627b4f6" name="del_uid" id="del_uid">
115 <input type="hidden" value="098f6bcd4621d373cade4e832627b4f6" name="del_uid" id="del_uid">
116 <i class="icon-remove-sign"></i>
116 <i class="icon-remove-sign"></i>
117 <input type="submit" value="delete" onclick="return confirm('Confirm to remove this pattern: test');" id="remove_user_3" class="btn btn-link btn-danger">
117 <input type="submit" value="delete" onclick="return confirm('Confirm to remove this pattern: test');" id="remove_user_3" class="btn btn-link btn-danger">
118 </form>
118 </form>
119 </div>
119 </div>
120
120
121 </td>
121 </td>
122 </tr>
122 </tr>
123 </tbody></table>
123 </tbody></table>
124
124
125
125
126
126
127 </div>
127 </div>
128 </div>
128 </div>
129 </div>
129 </div>
130 </%def>
130 </%def>
@@ -1,545 +1,545 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2 <%inherit file="/debug_style/index.html"/>
2 <%inherit file="/debug_style/index.html"/>
3
3
4 <%def name="breadcrumbs_links()">
4 <%def name="breadcrumbs_links()">
5 ${h.link_to(_('Style'), h.url('debug_style_home'))}
5 ${h.link_to(_('Style'), h.route_path('debug_style_home'))}
6 &raquo;
6 &raquo;
7 ${c.active}
7 ${c.active}
8 </%def>
8 </%def>
9
9
10
10
11 <%def name="real_main()">
11 <%def name="real_main()">
12 <div class="box">
12 <div class="box">
13 <div class="title">
13 <div class="title">
14 ${self.breadcrumbs()}
14 ${self.breadcrumbs()}
15 </div>
15 </div>
16
16
17 <div class='sidebar-col-wrapper'>
17 <div class='sidebar-col-wrapper'>
18 ##main
18 ##main
19 ${self.sidebar()}
19 ${self.sidebar()}
20
20
21 <div class="main-content">
21 <div class="main-content">
22
22
23 <div style="opacity:.5">
23 <div style="opacity:.5">
24
24
25 <h2>Simple tables</h2>
25 <h2>Simple tables</h2>
26
26
27 <p>These styles will be adjusted later to provide a baseline style
27 <p>These styles will be adjusted later to provide a baseline style
28 for all tables without classes added, whether part of the
28 for all tables without classes added, whether part of the
29 application or not. Currently, some of the
29 application or not. Currently, some of the
30 application-specific styles are applied to this table.</p>
30 application-specific styles are applied to this table.</p>
31 <p>This is a baseline style for all tables, whether part of the
31 <p>This is a baseline style for all tables, whether part of the
32 application or not. It has no class applied for styling. Use
32 application or not. It has no class applied for styling. Use
33 the "rctable" class as outlined before for tables which are
33 the "rctable" class as outlined before for tables which are
34 part of the RhodeCode application.</p>
34 part of the RhodeCode application.</p>
35 <table>
35 <table>
36 <tbody>
36 <tbody>
37 <tr>
37 <tr>
38 <th>Header A</th>
38 <th>Header A</th>
39 <th>Header B</th>
39 <th>Header B</th>
40 <th>Header C</th>
40 <th>Header C</th>
41 <th>Header D</th>
41 <th>Header D</th>
42 </tr>
42 </tr>
43 <tr>
43 <tr>
44 <td>Content of col A</td>
44 <td>Content of col A</td>
45 <td>Content of col B</td>
45 <td>Content of col B</td>
46 <td>Content of col C</td>
46 <td>Content of col C</td>
47 <td>Content of col D</td>
47 <td>Content of col D</td>
48 </tr>
48 </tr>
49 <tr>
49 <tr>
50 <td>Content of col A</td>
50 <td>Content of col A</td>
51 <td>Content of col B</td>
51 <td>Content of col B</td>
52 <td>Content of col C</td>
52 <td>Content of col C</td>
53 <td>Content of col D</td>
53 <td>Content of col D</td>
54 </tr>
54 </tr>
55 <tr>
55 <tr>
56 <td>Content of col A</td>
56 <td>Content of col A</td>
57 <td>Content of col B</td>
57 <td>Content of col B</td>
58 <td>Content of col C</td>
58 <td>Content of col C</td>
59 <td>Content of col D</td>
59 <td>Content of col D</td>
60 </tr>
60 </tr>
61 <tr>
61 <tr>
62 <td>Content of col A</td>
62 <td>Content of col A</td>
63 <td>Content of col B</td>
63 <td>Content of col B</td>
64 <td>Content of col C</td>
64 <td>Content of col C</td>
65 <td>Content of col D</td>
65 <td>Content of col D</td>
66 </tr>
66 </tr>
67 </tbody>
67 </tbody>
68 </table>
68 </table>
69 </div>
69 </div>
70
70
71
71
72
72
73
73
74 <h2>RC application table with examples</h2>
74 <h2>RC application table with examples</h2>
75
75
76 <p>This is a standard table which applies the rhodecode-specific styling to be used
76 <p>This is a standard table which applies the rhodecode-specific styling to be used
77 throughout the application; it has <code>&lt;table class="rctable"&gt;</code>.
77 throughout the application; it has <code>&lt;table class="rctable"&gt;</code>.
78 <br/>
78 <br/>
79 By default, table data is not truncated, and wraps inside of the <code>&lt;td&gt
79 By default, table data is not truncated, and wraps inside of the <code>&lt;td&gt
80 ;</code>. To prevent wrapping and contain data on one line, use the <code>&lt;
80 ;</code>. To prevent wrapping and contain data on one line, use the <code>&lt;
81 class="truncate-wrap"&gt;</code> on the <code>&lt;td&gt;</code>, and <code>span
81 class="truncate-wrap"&gt;</code> on the <code>&lt;td&gt;</code>, and <code>span
82 class="truncate"</code> around the specific data to be truncated.
82 class="truncate"</code> around the specific data to be truncated.
83 </p>
83 </p>
84 <p>
84 <p>
85 Ellipsis is added via CSS. Please always add a row of headers using <code>&lt;th
85 Ellipsis is added via CSS. Please always add a row of headers using <code>&lt;th
86 &gt;</code> to the top of a table.
86 &gt;</code> to the top of a table.
87 </p>
87 </p>
88
88
89 ## TODO: johbo: in case we have more tables with examples, we should
89 ## TODO: johbo: in case we have more tables with examples, we should
90 ## create a generic class here.
90 ## create a generic class here.
91 <table class="rctable issuetracker">
91 <table class="rctable issuetracker">
92 <thead>
92 <thead>
93 <tr>
93 <tr>
94 <th>Header A</th>
94 <th>Header A</th>
95 <th>Header B</th>
95 <th>Header B</th>
96 <th>Header C</th>
96 <th>Header C</th>
97 <th>Header D</th>
97 <th>Header D</th>
98 </tr>
98 </tr>
99 </thead>
99 </thead>
100 <tbody>
100 <tbody>
101 <tr>
101 <tr>
102 <td class="issue-tracker-example">
102 <td class="issue-tracker-example">
103 Example of col A
103 Example of col A
104 </td>
104 </td>
105 <td class="issue-tracker-example">
105 <td class="issue-tracker-example">
106 Example of col B
106 Example of col B
107 </td>
107 </td>
108 <td class="issue-tracker-example">
108 <td class="issue-tracker-example">
109 Example of col C
109 Example of col C
110 </td>
110 </td>
111 <td class="issue-tracker-example">
111 <td class="issue-tracker-example">
112 Example of col D
112 Example of col D
113 </td>
113 </td>
114 </tr>
114 </tr>
115 <tr>
115 <tr>
116 <td>Content of col A</td>
116 <td>Content of col A</td>
117 <td>Content of col B</td>
117 <td>Content of col B</td>
118 <td>Content of col C which is very long and will not be
118 <td>Content of col C which is very long and will not be
119 truncated because sometimes people just want to write
119 truncated because sometimes people just want to write
120 really, really long commit messages which explain what
120 really, really long commit messages which explain what
121 they did in excruciating detail and you really, really
121 they did in excruciating detail and you really, really
122 want to read them.</td>
122 want to read them.</td>
123 <td>Content of col D</td>
123 <td>Content of col D</td>
124 </tr>
124 </tr>
125 <tr>
125 <tr>
126 <td>Content of col A</td>
126 <td>Content of col A</td>
127 <td>Content of col B</td>
127 <td>Content of col B</td>
128 <td>Content of col C</td>
128 <td>Content of col C</td>
129 <td class="truncate-wrap"><span class="truncate">Truncated
129 <td class="truncate-wrap"><span class="truncate">Truncated
130 content of column D truncate truncate truncatetruncate
130 content of column D truncate truncate truncatetruncate
131 truncate truncate</span></td>
131 truncate truncate</span></td>
132 </tr>
132 </tr>
133 </tbody>
133 </tbody>
134 </table>
134 </table>
135
135
136 <h2>RC application table data classes</h2>
136 <h2>RC application table data classes</h2>
137
137
138 <p>The following tables contain documentation of all existing table data classes.
138 <p>The following tables contain documentation of all existing table data classes.
139 Please update when new classes are made.
139 Please update when new classes are made.
140 </p>
140 </p>
141 <table class="rctable examples">
141 <table class="rctable examples">
142 <thead>
142 <thead>
143 <tr>
143 <tr>
144 <th>Class</th>
144 <th>Class</th>
145 <th>Description</th>
145 <th>Description</th>
146 <th>Example</th>
146 <th>Example</th>
147 </tr>
147 </tr>
148 </thead>
148 </thead>
149 <tbody>
149 <tbody>
150 <td>td-user</td>
150 <td>td-user</td>
151 <td>Any username/gravatar combination (see also Icons style).</td>
151 <td>Any username/gravatar combination (see also Icons style).</td>
152 <td class="td-user author">
152 <td class="td-user author">
153 <img class="gravatar" alt="gravatar" src="https://secure.gravatar.com/avatar/0c9a7e6674b6f0b35d98dbe073e3f0ab?d=identicon&amp;s=32" height="16" width="16">
153 <img class="gravatar" alt="gravatar" src="https://secure.gravatar.com/avatar/0c9a7e6674b6f0b35d98dbe073e3f0ab?d=identicon&amp;s=32" height="16" width="16">
154 <span title="Oliver Strobel <oliver@rhodecode.com>" class="user">ostrobel (Oliver Strobel)</span>
154 <span title="Oliver Strobel <oliver@rhodecode.com>" class="user">ostrobel (Oliver Strobel)</span>
155 </td>
155 </td>
156 </tr>
156 </tr>
157 <tr>
157 <tr>
158 <td>td-hash</td>
158 <td>td-hash</td>
159 <td>Any hash; a commit, revision, etc. Use <code>&lt;pre&gt;</code> and header 'Commit'</td>
159 <td>Any hash; a commit, revision, etc. Use <code>&lt;pre&gt;</code> and header 'Commit'</td>
160 <td class="td-commit">
160 <td class="td-commit">
161 <pre><a href="/anothercpythonforkkkk/files/8d6b27837c6979983b037693fe975cdbb761b500/">r93699:8d6b27837c69</a></pre>
161 <pre><a href="/anothercpythonforkkkk/files/8d6b27837c6979983b037693fe975cdbb761b500/">r93699:8d6b27837c69</a></pre>
162 </td>
162 </td>
163 </tr>
163 </tr>
164 <tr>
164 <tr>
165 <td>td-rss</td>
165 <td>td-rss</td>
166 <td>RSS feed link icon</td>
166 <td>RSS feed link icon</td>
167 <td class="td-rss">
167 <td class="td-rss">
168 <a title="Subscribe to rss feed" href="/feed/rss"><i class="icon-rss-sign"></i></a>
168 <a title="Subscribe to rss feed" href="/feed/rss"><i class="icon-rss-sign"></i></a>
169 </td>
169 </td>
170 </tr>
170 </tr>
171 <tr>
171 <tr>
172 <td>td-componentname</td>
172 <td>td-componentname</td>
173 <td>Any group, file, gist, or directory name.</td>
173 <td>Any group, file, gist, or directory name.</td>
174 <td class="td-componentname">
174 <td class="td-componentname">
175 <a href="/cpythonfork">
175 <a href="/cpythonfork">
176 <span title="Mercurial repository"><i class="icon-hg"></i></span>
176 <span title="Mercurial repository"><i class="icon-hg"></i></span>
177 <i class="icon-unlock-alt" title="Public repository"></i>
177 <i class="icon-unlock-alt" title="Public repository"></i>
178 rhodecode-dev-restyle-fork
178 rhodecode-dev-restyle-fork
179 </a>
179 </a>
180 </td>
180 </td>
181 </tr>
181 </tr>
182 <tr>
182 <tr>
183 <td>td-tags</td>
183 <td>td-tags</td>
184 <td>Any cell containing tags, including branches and bookmarks.</td>
184 <td>Any cell containing tags, including branches and bookmarks.</td>
185 <td class="td-tags">
185 <td class="td-tags">
186 <span class="branchtag tag" title="Branch default">
186 <span class="branchtag tag" title="Branch default">
187 <a href="/rhodecode-dev-restyle- fork/changelog?branch=default"><i class="icon-code-fork"></i>default</a>
187 <a href="/rhodecode-dev-restyle- fork/changelog?branch=default"><i class="icon-code-fork"></i>default</a>
188 </span>
188 </span>
189 </td>
189 </td>
190 </tr>
190 </tr>
191 <tr>
191 <tr>
192 <td>tags-truncate</td>
192 <td>tags-truncate</td>
193 <td>Used to truncate a cell containing tags; avoid if possible.</td>
193 <td>Used to truncate a cell containing tags; avoid if possible.</td>
194 <td class="td-tags truncate-wrap">
194 <td class="td-tags truncate-wrap">
195 <div class="truncate tags-truncate">
195 <div class="truncate tags-truncate">
196 <div class="autoexpand">
196 <div class="autoexpand">
197 <span class="tagtag tag" title="Tag tip">
197 <span class="tagtag tag" title="Tag tip">
198 <a href="/rhodecode-dev-restyle-fork/files/e519d5a0e71466d27257ddff921c4a13c540408e/"><i class="icon-tag"></i>tip</a>
198 <a href="/rhodecode-dev-restyle-fork/files/e519d5a0e71466d27257ddff921c4a13c540408e/"><i class="icon-tag"></i>tip</a>
199 </span>
199 </span>
200 <span class="branchtag tag" title="Branch default">
200 <span class="branchtag tag" title="Branch default">
201 <a href="/rhodecode-dev-restyle-fork/changelog?branch=default"><i class="icon-code-fork"></i>default</a>
201 <a href="/rhodecode-dev-restyle-fork/changelog?branch=default"><i class="icon-code-fork"></i>default</a>
202 </span>
202 </span>
203 <span class="branchtag tag" title="Branch default">
203 <span class="branchtag tag" title="Branch default">
204 <a href="/rhodecode-dev-restyle-fork/changelog?branch=default"><i class="icon-code-fork"></i>default</a>
204 <a href="/rhodecode-dev-restyle-fork/changelog?branch=default"><i class="icon-code-fork"></i>default</a>
205 </span>
205 </span>
206 </div>
206 </div>
207 </div>
207 </div>
208 </td>
208 </td>
209 </tr>
209 </tr>
210 <tr>
210 <tr>
211 <td>td-ip</td>
211 <td>td-ip</td>
212 <td>Any ip address.</td>
212 <td>Any ip address.</td>
213 <td class="td-ip">
213 <td class="td-ip">
214 172.16.115.168
214 172.16.115.168
215 </td>
215 </td>
216 </tr>
216 </tr>
217 <tr>
217 <tr>
218 <td>td-type</td>
218 <td>td-type</td>
219 <td>A state or an auth type.</td>
219 <td>A state or an auth type.</td>
220 <td class="td-type">
220 <td class="td-type">
221 rhodecode
221 rhodecode
222 </td>
222 </td>
223 </tr>
223 </tr>
224 <tr>
224 <tr>
225 <td>td-authtoken</td>
225 <td>td-authtoken</td>
226 <td>For auth tokens. Use truncate classes for hover expand; see html.</td>
226 <td>For auth tokens. Use truncate classes for hover expand; see html.</td>
227 <td class="truncate-wrap td-authtoken">
227 <td class="truncate-wrap td-authtoken">
228 <div class="truncate autoexpand">
228 <div class="truncate autoexpand">
229 <code>688df65b87d3ad16ae9f8fc6338a551d40f41c7a</code>
229 <code>688df65b87d3ad16ae9f8fc6338a551d40f41c7a</code>
230 </div>
230 </div>
231 </td>
231 </td>
232 </tr>
232 </tr>
233 <tr>
233 <tr>
234 <td>td-action</td>
234 <td>td-action</td>
235 <td>Buttons which perform an action.</td>
235 <td>Buttons which perform an action.</td>
236 <td class="td-action">
236 <td class="td-action">
237 <div class="grid_edit">
237 <div class="grid_edit">
238 <a href="/_admin/users/2/edit" title="edit">
238 <a href="/_admin/users/2/edit" title="edit">
239 <i class="icon-pencil"></i>Edit</a>
239 <i class="icon-pencil"></i>Edit</a>
240 </div>
240 </div>
241 <div class="grid_delete">
241 <div class="grid_delete">
242 <form action="/_admin/users/2" method="post">
242 <form action="/_admin/users/2" method="post">
243 <i class="icon-remove-sign"></i>
243 <i class="icon-remove-sign"></i>
244 <input class="btn btn-danger btn-link" id="remove_user_2" name="remove_" type="submit" value="delete">
244 <input class="btn btn-danger btn-link" id="remove_user_2" name="remove_" type="submit" value="delete">
245 </form>
245 </form>
246 </div>
246 </div>
247 </td>
247 </td>
248 </tr>
248 </tr>
249 <tr>
249 <tr>
250 <td>td-radio</td>
250 <td>td-radio</td>
251 <td>Radio buttons for a form. Centers element.</td>
251 <td>Radio buttons for a form. Centers element.</td>
252 <td class="td-radio">
252 <td class="td-radio">
253 <input type="radio" checked="checked" value="" name="1" id="read"></td>
253 <input type="radio" checked="checked" value="" name="1" id="read"></td>
254 </tr>
254 </tr>
255 <tr>
255 <tr>
256 <td>td-checkbox</td>
256 <td>td-checkbox</td>
257 <td>Checkbox for a form. Centers element.</td>
257 <td>Checkbox for a form. Centers element.</td>
258 <td class="td-checkbox">
258 <td class="td-checkbox">
259 <input type="checkbox" checked="checked" value="" name="1" id="read"></td>
259 <input type="checkbox" checked="checked" value="" name="1" id="read"></td>
260 </tr>
260 </tr>
261 <tr>
261 <tr>
262 <tr>
262 <tr>
263 <td>td-buttons</td>
263 <td>td-buttons</td>
264 <td>Buttons.</td>
264 <td>Buttons.</td>
265 <td class="td-buttons">
265 <td class="td-buttons">
266 <span class="btn btn-mini btn-primary">feed access</span>
266 <span class="btn btn-mini btn-primary">feed access</span>
267 </td>
267 </td>
268 </tr>
268 </tr>
269 <tr>
269 <tr>
270 <td>td-compare</td>
270 <td>td-compare</td>
271 <td>Radio buttons to compare commits.</td>
271 <td>Radio buttons to compare commits.</td>
272 <td class=" td-compare">
272 <td class=" td-compare">
273 <input class="compare-radio-button" type="radio" name="compare_source" value="2.0">
273 <input class="compare-radio-button" type="radio" name="compare_source" value="2.0">
274 <input class="compare-radio-button" type="radio" name="compare_target" value="2.0">
274 <input class="compare-radio-button" type="radio" name="compare_target" value="2.0">
275 </td>
275 </td>
276 </tr>
276 </tr>
277 <tr>
277 <tr>
278 <td>td-comments</td>
278 <td>td-comments</td>
279 <td>Comments indicator icon.</td>
279 <td>Comments indicator icon.</td>
280 <td>
280 <td>
281 <i class="icon-comment"></i> 0
281 <i class="icon-comment"></i> 0
282 </td>
282 </td>
283 </tr>
283 </tr>
284 <tr>
284 <tr>
285 <td>td-status</td>
285 <td>td-status</td>
286 <td>Status indicator icon.</td>
286 <td>Status indicator icon.</td>
287 <td class="td-description">
287 <td class="td-description">
288 <div class="flag_status under_review pull-left"></div>
288 <div class="flag_status under_review pull-left"></div>
289 </td>
289 </td>
290 </tr>
290 </tr>
291 </tbody>
291 </tbody>
292 </table>
292 </table>
293 <table class="dataTable rctable examples">
293 <table class="dataTable rctable examples">
294 <tbody>
294 <tbody>
295 <tr>
295 <tr>
296 <td>quick_repo_menu</td>
296 <td>quick_repo_menu</td>
297 <td>Hidden menu generated by dataTable.</td>
297 <td>Hidden menu generated by dataTable.</td>
298 <td class="quick_repo_menu">
298 <td class="quick_repo_menu">
299 <i class="pointer icon-more"></i>
299 <i class="pointer icon-more"></i>
300 <div class="menu_items_container" style="display: none;">
300 <div class="menu_items_container" style="display: none;">
301 <ul class="menu_items">
301 <ul class="menu_items">
302 <li>
302 <li>
303 <a title="Summary" href="/anothercpythonforkkkk-fork">
303 <a title="Summary" href="/anothercpythonforkkkk-fork">
304 <span>Summary</span>
304 <span>Summary</span>
305 </a>
305 </a>
306 </li>
306 </li>
307 <li>
307 <li>
308 <a title="Changelog" href="/anothercpythonforkkkk-fork/changelog">
308 <a title="Changelog" href="/anothercpythonforkkkk-fork/changelog">
309 <span>Changelog</span>
309 <span>Changelog</span>
310 </a>
310 </a>
311 </li>
311 </li>
312 <li>
312 <li>
313 <a title="Files" href="/anothercpythonforkkkk-fork/files/tip/">
313 <a title="Files" href="/anothercpythonforkkkk-fork/files/tip/">
314 <span>Files</span>
314 <span>Files</span>
315 </a>
315 </a>
316 </li>
316 </li>
317 <li>
317 <li>
318 <a title="Fork" href="/anothercpythonforkkkk-fork/fork">
318 <a title="Fork" href="/anothercpythonforkkkk-fork/fork">
319 <span>Fork</span>
319 <span>Fork</span>
320 </a>
320 </a>
321 </li>
321 </li>
322 </ul>
322 </ul>
323 </div>
323 </div>
324 </td>
324 </td>
325 <td></td>
325 <td></td>
326 </tr>
326 </tr>
327 </tbody>
327 </tbody>
328 </table>
328 </table>
329 <script>quick_repo_menu();</script>
329 <script>quick_repo_menu();</script>
330 <table class="rctable examples">
330 <table class="rctable examples">
331 <tbody>
331 <tbody>
332 <tr>
332 <tr>
333 <td>td-description</td>
333 <td>td-description</td>
334 <td>Any description. They may be rather long, and using the expand_commit outlined below is recommended.</td>
334 <td>Any description. They may be rather long, and using the expand_commit outlined below is recommended.</td>
335 <td class="td-description">
335 <td class="td-description">
336 Ultrices mattis! Enim pellentesque lacus, sit magna natoque risus turpis ut, auctor ultrices facilisis dapibus odio? Parturient! Porta egestas nascetur, quis, elementum dolor, in magna ac dis sit etiam turpis, scelerisque! Integer tristique aliquam.
336 Ultrices mattis! Enim pellentesque lacus, sit magna natoque risus turpis ut, auctor ultrices facilisis dapibus odio? Parturient! Porta egestas nascetur, quis, elementum dolor, in magna ac dis sit etiam turpis, scelerisque! Integer tristique aliquam.
337 </td>
337 </td>
338 </tr>
338 </tr>
339 </tbody>
339 </tbody>
340 </table>
340 </table>
341 <table id="changesets" class="rctable examples end">
341 <table id="changesets" class="rctable examples end">
342 <tbody>
342 <tbody>
343 <tr>
343 <tr>
344 <td>expand_commit</td>
344 <td>expand_commit</td>
345 <td>Expands a long message; see html+js.</td>
345 <td>Expands a long message; see html+js.</td>
346 <td class="expand_commit" data-commit-id="2ffc6faabc7a9c790b1b452943a3f0c047b8b436" title="Expand commit message">
346 <td class="expand_commit" data-commit-id="2ffc6faabc7a9c790b1b452943a3f0c047b8b436" title="Expand commit message">
347 <div class="show_more_col">
347 <div class="show_more_col">
348 <i class="show_more"></i>
348 <i class="show_more"></i>
349 </div>
349 </div>
350 </td>
350 </td>
351 <td class="mid td-description">
351 <td class="mid td-description">
352 <div class="log-container truncate-wrap">
352 <div class="log-container truncate-wrap">
353 <div id="c-2ffc6faabc7a9c790b1b452943a3f0c047b8b436" class="message truncate" data-message-raw="tests: Test echo method on the server object
353 <div id="c-2ffc6faabc7a9c790b1b452943a3f0c047b8b436" class="message truncate" data-message-raw="tests: Test echo method on the server object
354
354
355 This only works for Pyro4 so far, have to extend it still for HTTP to work.">tests: Test echo method on the server object
355 This only works for Pyro4 so far, have to extend it still for HTTP to work.">tests: Test echo method on the server object
356
356
357 This only works for Pyro4 so far, have to extend it still for HTTP to work.</div>
357 This only works for Pyro4 so far, have to extend it still for HTTP to work.</div>
358 </div>
358 </div>
359 </td>
359 </td>
360 </tr>
360 </tr>
361 </tbody>
361 </tbody>
362 </table>
362 </table>
363 <script type="text/javascript">
363 <script type="text/javascript">
364 var cache = {};
364 var cache = {};
365 $('.expand_commit').on('click',function(e){
365 $('.expand_commit').on('click',function(e){
366 var target_expand = $(this);
366 var target_expand = $(this);
367 var cid = target_expand.data('commitId');
367 var cid = target_expand.data('commitId');
368
368
369 if (target_expand.hasClass('open')){
369 if (target_expand.hasClass('open')){
370 $('#c-'+cid).css({'height': '1.5em', 'white-space': 'nowrap', 'text-overflow': 'ellipsis', 'overflow':'hidden'});
370 $('#c-'+cid).css({'height': '1.5em', 'white-space': 'nowrap', 'text-overflow': 'ellipsis', 'overflow':'hidden'});
371 $('#t-'+cid).css({'height': '1.5em', 'max-height': '1.5em', 'text-overflow': 'ellipsis', 'overflow':'hidden', 'white-space':'nowrap'});
371 $('#t-'+cid).css({'height': '1.5em', 'max-height': '1.5em', 'text-overflow': 'ellipsis', 'overflow':'hidden', 'white-space':'nowrap'});
372 target_expand.removeClass('open');
372 target_expand.removeClass('open');
373 }
373 }
374 else {
374 else {
375 $('#c-'+cid).css({'height': 'auto', 'white-space': 'pre-line', 'text-overflow': 'initial', 'overflow':'visible'});
375 $('#c-'+cid).css({'height': 'auto', 'white-space': 'pre-line', 'text-overflow': 'initial', 'overflow':'visible'});
376 $('#t-'+cid).css({'height': 'auto', 'max-height': 'none', 'text-overflow': 'initial', 'overflow':'visible', 'white-space':'normal'});
376 $('#t-'+cid).css({'height': 'auto', 'max-height': 'none', 'text-overflow': 'initial', 'overflow':'visible', 'white-space':'normal'});
377 target_expand.addClass('open');
377 target_expand.addClass('open');
378 }
378 }
379 });
379 });
380
380
381 </script>
381 </script>
382 <p>The following classes currently do not have unique styles applied.</p>
382 <p>The following classes currently do not have unique styles applied.</p>
383 <table class="rctable examples end">
383 <table class="rctable examples end">
384 <tbody>
384 <tbody>
385 <tr>
385 <tr>
386 <td>td-regex</td>
386 <td>td-regex</td>
387 <td>Regex patterns</td>
387 <td>Regex patterns</td>
388 <td class="td-regex">(?:#)(?P<issue_id>\d+)</td>
388 <td class="td-regex">(?:#)(?P<issue_id>\d+)</td>
389 </tr>
389 </tr>
390 <tr>
390 <tr>
391 <td>td-url</td>
391 <td>td-url</td>
392 <td>Any URL.</td>
392 <td>Any URL.</td>
393 <td class="td-url">https://rhodecode.com</td>
393 <td class="td-url">https://rhodecode.com</td>
394 </tr>
394 </tr>
395 <tr>
395 <tr>
396 <td>td-journalaction</td>
396 <td>td-journalaction</td>
397 <td>Action listed in a journal</td>
397 <td>Action listed in a journal</td>
398 <td class="td-journalaction">started following repository supervisor-fork-4</td>
398 <td class="td-journalaction">started following repository supervisor-fork-4</td>
399 </tr>
399 </tr>
400 <tr>
400 <tr>
401 <td>td-iprange</td>
401 <td>td-iprange</td>
402 <td>Any ip address.</td>
402 <td>Any ip address.</td>
403 <td class="td-ip">127.0.0.1-127.0.0.10</td>
403 <td class="td-ip">127.0.0.1-127.0.0.10</td>
404 </tr>
404 </tr>
405 <tr>
405 <tr>
406 <td>td-exp</td>
406 <td>td-exp</td>
407 <td>Expiration time.</td>
407 <td>Expiration time.</td>
408 <td class="td-exp">never</td>
408 <td class="td-exp">never</td>
409 </tr>
409 </tr>
410 <tr>
410 <tr>
411 <td>td-prefix</td>
411 <td>td-prefix</td>
412 <td>Prefixes outlined in settings.</td>
412 <td>Prefixes outlined in settings.</td>
413 <td class="td-prefix">ubuntu-92539</td>
413 <td class="td-prefix">ubuntu-92539</td>
414 </tr>
414 </tr>
415 <tr>
415 <tr>
416 <td>td-cachekey</td>
416 <td>td-cachekey</td>
417 <td>Cache key value.</td>
417 <td>Cache key value.</td>
418 <td class="td-cachekey">ubuntu-92539supervisor</td>
418 <td class="td-cachekey">ubuntu-92539supervisor</td>
419 </tr>
419 </tr>
420 <tr>
420 <tr>
421 <td>td-email</td>
421 <td>td-email</td>
422 <td>Any email address.</td>
422 <td>Any email address.</td>
423 <td class="td-email">example@rhodecode.com</td>
423 <td class="td-email">example@rhodecode.com</td>
424 </tr>
424 </tr>
425 <tr>
425 <tr>
426 <td>td-active</td>
426 <td>td-active</td>
427 <td>Shows active state with icon-true/icon-false.</td>
427 <td>Shows active state with icon-true/icon-false.</td>
428 <td class="td-active"><i class="icon-false"></i></td>
428 <td class="td-active"><i class="icon-false"></i></td>
429 </tr>
429 </tr>
430 <tr>
430 <tr>
431 <td>td-size</td>
431 <td>td-size</td>
432 <td>File, repo, or directory size.</td>
432 <td>File, repo, or directory size.</td>
433 <td class="td-size">89 MB</td>
433 <td class="td-size">89 MB</td>
434 </tr>
434 </tr>
435 <tr>
435 <tr>
436 <td>td-number</td>
436 <td>td-number</td>
437 <td>Any numerical data.</td>
437 <td>Any numerical data.</td>
438 <td class="td-number">42</td>
438 <td class="td-number">42</td>
439 </tr>
439 </tr>
440 <tr>
440 <tr>
441 <td>td-message</td>
441 <td>td-message</td>
442 <td>Any commit message. Often treated with the truncate class used for descriptions as well.</td>
442 <td>Any commit message. Often treated with the truncate class used for descriptions as well.</td>
443 <td class="td-message">Updated the files</td>
443 <td class="td-message">Updated the files</td>
444 </tr>
444 </tr>
445 </tbody>
445 </tbody>
446 </table>
446 </table>
447
447
448
448
449 <h2>Permissions table</h2>
449 <h2>Permissions table</h2>
450
450
451 <p>
451 <p>
452 This is a special-case table; it has
452 This is a special-case table; it has
453 <code>table class="rctable permissions"</code>
453 <code>table class="rctable permissions"</code>
454 where "rctable" applies the rhodecode styling as above, and
454 where "rctable" applies the rhodecode styling as above, and
455 "permissions" adds an extra layer of customization specific to
455 "permissions" adds an extra layer of customization specific to
456 permissions tables. Other special-case tables may exist or be
456 permissions tables. Other special-case tables may exist or be
457 created if necessary.
457 created if necessary.
458 </p>
458 </p>
459
459
460 <table class="rctable permissions">
460 <table class="rctable permissions">
461 <tr>
461 <tr>
462 <th class="td-radio">none</th>
462 <th class="td-radio">none</th>
463 <th class="td-radio">read</th>
463 <th class="td-radio">read</th>
464 <th class="td-radio">write</th>
464 <th class="td-radio">write</th>
465 <th class="td-radio">admin</th>
465 <th class="td-radio">admin</th>
466 <th>user/user group</th>
466 <th>user/user group</th>
467 <th></th>
467 <th></th>
468 </tr>
468 </tr>
469 <tr class="perm_admin_row">
469 <tr class="perm_admin_row">
470 <td class="td-radio"><input type="radio" value="repository.none"
470 <td class="td-radio"><input type="radio" value="repository.none"
471 name="admin_perm_2" id="admin_perm_2_repositorynone"
471 name="admin_perm_2" id="admin_perm_2_repositorynone"
472 disabled="disabled"></td>
472 disabled="disabled"></td>
473 <td class="td-radio"><input type="radio" value="repository.read"
473 <td class="td-radio"><input type="radio" value="repository.read"
474 name="admin_perm_2" id="admin_perm_2_repositoryread"
474 name="admin_perm_2" id="admin_perm_2_repositoryread"
475 disabled="disabled"></td>
475 disabled="disabled"></td>
476 <td class="td-radio"><input type="radio" value="repository.write"
476 <td class="td-radio"><input type="radio" value="repository.write"
477 name="admin_perm_2" id="admin_perm_2_repositorywrite"
477 name="admin_perm_2" id="admin_perm_2_repositorywrite"
478 disabled="disabled"></td>
478 disabled="disabled"></td>
479 <td class="td-radio"><input type="radio" value="repository.admin"
479 <td class="td-radio"><input type="radio" value="repository.admin"
480 name="admin_perm_2" id="admin_perm_2_repositoryadmin"
480 name="admin_perm_2" id="admin_perm_2_repositoryadmin"
481 disabled="disabled" checked="checked"></td>
481 disabled="disabled" checked="checked"></td>
482 <td>
482 <td>
483 <img class="gravatar" src="https://secure.gravatar.com/avatar/be9d18f611892a738e54f2a3a171e2f9?d=identicon&amp;s=32" height="16" width="16">
483 <img class="gravatar" src="https://secure.gravatar.com/avatar/be9d18f611892a738e54f2a3a171e2f9?d=identicon&amp;s=32" height="16" width="16">
484 <span class="user">dev (super admin) (owner)</span>
484 <span class="user">dev (super admin) (owner)</span>
485 </td>
485 </td>
486 <td></td>
486 <td></td>
487 </tr>
487 </tr>
488 <tr>
488 <tr>
489 <td colspan="4">
489 <td colspan="4">
490 <span class="private_repo_msg">
490 <span class="private_repo_msg">
491 private repository
491 private repository
492 </span>
492 </span>
493 </td>
493 </td>
494 <td class="private_repo_msg">
494 <td class="private_repo_msg">
495 <i class="icon-user"></i>
495 <i class="icon-user"></i>
496 default - only people explicitly added here will have access</td>
496 default - only people explicitly added here will have access</td>
497 <td></td>
497 <td></td>
498 </tr>
498 </tr>
499 <tr>
499 <tr>
500 <td class="td-radio"><input type="radio" value="repository.none"
500 <td class="td-radio"><input type="radio" value="repository.none"
501 name="u_perm_1" id="u_perm_1_repositorynone"></td>
501 name="u_perm_1" id="u_perm_1_repositorynone"></td>
502 <td class="td-radio"><input type="radio" checked="checked"
502 <td class="td-radio"><input type="radio" checked="checked"
503 value="repository.read" name="u_perm_1"
503 value="repository.read" name="u_perm_1"
504 id="u_perm_1_repositoryread"></td>
504 id="u_perm_1_repositoryread"></td>
505 <td class="td-radio"><input type="radio" value="repository.write"
505 <td class="td-radio"><input type="radio" value="repository.write"
506 name="u_perm_1" id="u_perm_1_repositorywrite"></td>
506 name="u_perm_1" id="u_perm_1_repositorywrite"></td>
507 <td class="td-radio"><input type="radio" value="repository.admin"
507 <td class="td-radio"><input type="radio" value="repository.admin"
508 name="u_perm_1" id="u_perm_1_repositoryadmin"></td>
508 name="u_perm_1" id="u_perm_1_repositoryadmin"></td>
509 <td>
509 <td>
510 <img class="gravatar" src="/_static/rhodecode/images/user30.png" height="16" width="16">
510 <img class="gravatar" src="/_static/rhodecode/images/user30.png" height="16" width="16">
511 <span class="user">default</span>
511 <span class="user">default</span>
512 </td>
512 </td>
513 <td></td>
513 <td></td>
514 </tr>
514 </tr>
515 <tr>
515 <tr>
516 <td class="td-radio"><input type="radio" value="repository.none"
516 <td class="td-radio"><input type="radio" value="repository.none"
517 name="u_perm_2" id="u_perm_2_repositorynone"></td>
517 name="u_perm_2" id="u_perm_2_repositorynone"></td>
518 <td class="td-radio"><input type="radio" checked="checked"
518 <td class="td-radio"><input type="radio" checked="checked"
519 value="repository.read" name="u_perm_2"
519 value="repository.read" name="u_perm_2"
520 id="u_perm_2_repositoryread"></td>
520 id="u_perm_2_repositoryread"></td>
521 <td class="td-radio"><input type="radio" value="repository.write"
521 <td class="td-radio"><input type="radio" value="repository.write"
522 name="u_perm_2" id="u_perm_2_repositorywrite"></td>
522 name="u_perm_2" id="u_perm_2_repositorywrite"></td>
523 <td class="td-radio"><input type="radio" value="repository.admin"
523 <td class="td-radio"><input type="radio" value="repository.admin"
524 name="u_perm_2" id="u_perm_2_repositoryadmin"></td>
524 name="u_perm_2" id="u_perm_2_repositoryadmin"></td>
525 <td>
525 <td>
526 <img class="gravatar" src="https://secure.gravatar.com/avatar/be9d18f611892a738e54f2a3a171e2f9?d=identicon&amp;s=32" height="16" width="16">
526 <img class="gravatar" src="https://secure.gravatar.com/avatar/be9d18f611892a738e54f2a3a171e2f9?d=identicon&amp;s=32" height="16" width="16">
527 <a class="user" href="/_admin/users/2/edit">dev</a>
527 <a class="user" href="/_admin/users/2/edit">dev</a>
528 </td>
528 </td>
529 <td>
529 <td>
530 <span member_type="user" member="2"
530 <span member_type="user" member="2"
531 class="btn action_button btn-link btn-danger">revoke</span>
531 class="btn action_button btn-link btn-danger">revoke</span>
532 </td>
532 </td>
533 </tr>
533 </tr>
534 </tbody>
534 </tbody>
535 </table>
535 </table>
536 <div class="link" id="add_perm">
536 <div class="link" id="add_perm">
537 Add new
537 Add new
538 </div>
538 </div>
539
539
540
540
541
541
542 </div>
542 </div>
543 </div>
543 </div>
544 </div>
544 </div>
545 </%def>
545 </%def>
@@ -1,507 +1,507 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2 <%inherit file="/debug_style/index.html"/>
2 <%inherit file="/debug_style/index.html"/>
3
3
4 <%def name="breadcrumbs_links()">
4 <%def name="breadcrumbs_links()">
5 ${h.link_to(_('Style'), h.url('debug_style_home'))}
5 ${h.link_to(_('Style'), h.route_path('debug_style_home'))}
6 &raquo;
6 &raquo;
7 ${c.active}
7 ${c.active}
8 </%def>
8 </%def>
9
9
10 <%def name="real_main()">
10 <%def name="real_main()">
11 <div class="box">
11 <div class="box">
12 <div class="title">
12 <div class="title">
13 ${self.breadcrumbs()}
13 ${self.breadcrumbs()}
14 </div>
14 </div>
15 </div>
15 </div>
16
16
17 ##main
17 ##main
18 <div class='sidebar-col-wrapper'>
18 <div class='sidebar-col-wrapper'>
19 ${self.sidebar()}
19 ${self.sidebar()}
20
20
21 <div class="main-content">
21 <div class="main-content">
22
22
23 <div class="bs-docs-section">
23 <div class="bs-docs-section">
24 <h1 id="type" class="page-header">Typography</h1>
24 <h1 id="type" class="page-header">Typography</h1>
25
25
26 <!-- Headings -->
26 <!-- Headings -->
27 <h2 id="type-headings">Headings</h2>
27 <h2 id="type-headings">Headings</h2>
28 <p>All HTML headings, <code>&lt;h1&gt;</code> through <code>&lt;h6&gt;</code>, are available. <code>.h1</code> through <code>.h6</code> classes are also available, for when you want to match the font styling of a heading but still want your text to be displayed inline.
28 <p>All HTML headings, <code>&lt;h1&gt;</code> through <code>&lt;h6&gt;</code>, are available. <code>.h1</code> through <code>.h6</code> classes are also available, for when you want to match the font styling of a heading but still want your text to be displayed inline.
29 </p>
29 </p>
30 <p>All headings have no top/side margins and a bottom margin which corresponds to variable <code>@textmargin</code>, a color corresponding to <code>@text-color</code>, and a line-height of 1.8em.
30 <p>All headings have no top/side margins and a bottom margin which corresponds to variable <code>@textmargin</code>, a color corresponding to <code>@text-color</code>, and a line-height of 1.8em.
31 <div class="bs-example bs-example-type" data-example-id="simple-headings">
31 <div class="bs-example bs-example-type" data-example-id="simple-headings">
32 <table class="table">
32 <table class="table">
33 <tbody>
33 <tbody>
34 <tr>
34 <tr>
35 <td><h1>h1. RhodeCode heading</h1></td>
35 <td><h1>h1. RhodeCode heading</h1></td>
36 <td class="type-info">Bold</td>
36 <td class="type-info">Bold</td>
37 <td class="type-info">1.54em</td>
37 <td class="type-info">1.54em</td>
38 </tr>
38 </tr>
39 <tr>
39 <tr>
40 <td><h2>h2. RhodeCode heading</h2></td>
40 <td><h2>h2. RhodeCode heading</h2></td>
41 <td class="type-info">Semi-Bold</td>
41 <td class="type-info">Semi-Bold</td>
42 <td class="type-info">1.23em</td>
42 <td class="type-info">1.23em</td>
43 </tr>
43 </tr>
44 <tr>
44 <tr>
45 <td><h3>h3. RhodeCode heading</h3></td>
45 <td><h3>h3. RhodeCode heading</h3></td>
46 <td class="type-info">Regular</td>
46 <td class="type-info">Regular</td>
47 <td class="type-info">1.23em</td>
47 <td class="type-info">1.23em</td>
48 </tr>
48 </tr>
49 <tr>
49 <tr>
50 <td><h4>h4. RhodeCode heading</h4></td>
50 <td><h4>h4. RhodeCode heading</h4></td>
51 <td class="type-info">Bold</td>
51 <td class="type-info">Bold</td>
52 <td class="type-info">1em</td>
52 <td class="type-info">1em</td>
53 </tr>
53 </tr>
54 <tr>
54 <tr>
55 <td><h5>h5. RhodeCode heading</h5></td>
55 <td><h5>h5. RhodeCode heading</h5></td>
56 <td class="type-info">Bold Italic</td>
56 <td class="type-info">Bold Italic</td>
57 <td class="type-info">1em</td>
57 <td class="type-info">1em</td>
58 </tr>
58 </tr>
59 <tr>
59 <tr>
60 <td><h6>h6. RhodeCode heading</h6></td>
60 <td><h6>h6. RhodeCode heading</h6></td>
61 <td class="type-info">Bold Italic</td>
61 <td class="type-info">Bold Italic</td>
62 <td class="type-info">1em</td>
62 <td class="type-info">1em</td>
63 </tr>
63 </tr>
64 </tbody>
64 </tbody>
65 </table>
65 </table>
66 </div>
66 </div>
67 <div class="highlight-html"><xmp>
67 <div class="highlight-html"><xmp>
68 <h1>h1. RhodeCode heading</h1>
68 <h1>h1. RhodeCode heading</h1>
69 <h2>h2. RhodeCode heading</h2>
69 <h2>h2. RhodeCode heading</h2>
70 <h3>h3. RhodeCode heading</h3>
70 <h3>h3. RhodeCode heading</h3>
71 <h4>h4. RhodeCode heading</h4>
71 <h4>h4. RhodeCode heading</h4>
72 <h5>h5. RhodeCode heading</h5>
72 <h5>h5. RhodeCode heading</h5>
73 <h6>h6. RhodeCode heading</h6>
73 <h6>h6. RhodeCode heading</h6>
74 </xmp></div> <!-- end highlight -->
74 </xmp></div> <!-- end highlight -->
75
75
76 <p>Create lighter, secondary text in any heading with a generic <code>&lt;small&gt;</code> tag or the <code>.small</code> class.</p>
76 <p>Create lighter, secondary text in any heading with a generic <code>&lt;small&gt;</code> tag or the <code>.small</code> class.</p>
77 <div class="bs-example bs-example-type" data-example-id="small- headings">
77 <div class="bs-example bs-example-type" data-example-id="small- headings">
78 <table class="table">
78 <table class="table">
79 <tbody>
79 <tbody>
80 <tr>
80 <tr>
81 <td><h1>h1. RhodeCode heading <small>Secondary text</small></h1></td>
81 <td><h1>h1. RhodeCode heading <small>Secondary text</small></h1></td>
82 </tr>
82 </tr>
83 <tr>
83 <tr>
84 <td><h2>h2. RhodeCode heading <small>Secondary text</small></h2></td>
84 <td><h2>h2. RhodeCode heading <small>Secondary text</small></h2></td>
85 </tr>
85 </tr>
86 <tr>
86 <tr>
87 <td><h3>h3. RhodeCode heading <small>Secondary text</small></h3></td>
87 <td><h3>h3. RhodeCode heading <small>Secondary text</small></h3></td>
88 </tr>
88 </tr>
89 <tr>
89 <tr>
90 <td><h4>h4. RhodeCode heading <small>Secondary text</small></h4></td>
90 <td><h4>h4. RhodeCode heading <small>Secondary text</small></h4></td>
91 </tr>
91 </tr>
92 <tr>
92 <tr>
93 <td><h5>h5. RhodeCode heading <small>Secondary text</small></h5></td>
93 <td><h5>h5. RhodeCode heading <small>Secondary text</small></h5></td>
94 </tr>
94 </tr>
95 <tr>
95 <tr>
96 <td><h6>h6. RhodeCode heading <small>Secondary text</small></h6></td>
96 <td><h6>h6. RhodeCode heading <small>Secondary text</small></h6></td>
97 </tr>
97 </tr>
98 </tbody>
98 </tbody>
99 </table>
99 </table>
100 </div>
100 </div>
101 <div class="highlight-html"><xmp>
101 <div class="highlight-html"><xmp>
102 <h1>h1. RhodeCode heading <small>Secondary text</small></h1>
102 <h1>h1. RhodeCode heading <small>Secondary text</small></h1>
103 <h2>h2. RhodeCode heading <small>Secondary text</small></h2>
103 <h2>h2. RhodeCode heading <small>Secondary text</small></h2>
104 <h3>h3. RhodeCode heading <small>Secondary text</small></h3>
104 <h3>h3. RhodeCode heading <small>Secondary text</small></h3>
105 <h4>h4. RhodeCode heading <small>Secondary text</small></h4>
105 <h4>h4. RhodeCode heading <small>Secondary text</small></h4>
106 <h5>h5. RhodeCode heading <small>Secondary text</small></h5>
106 <h5>h5. RhodeCode heading <small>Secondary text</small></h5>
107 <h6>h6. RhodeCode heading <small>Secondary text</small></h6>
107 <h6>h6. RhodeCode heading <small>Secondary text</small></h6>
108 </xmp></div> <!-- end highlight -->
108 </xmp></div> <!-- end highlight -->
109
109
110
110
111 <!-- Body copy -->
111 <!-- Body copy -->
112 <h2 id="type-body-copy">Body copy</h2>
112 <h2 id="type-body-copy">Body copy</h2>
113 <p>RhodeCode's global default <code>font-size</code> is <strong>13px</strong>, with a <code>line-height</code> of <strong>2em</strong>. This is applied to the <code>&lt;body&gt;</code> and all paragraphs. In addition, <code>&lt;p&gt;</code> (paragraphs) receive a bottom margin of designated by @textmargin (20px).</p>
113 <p>RhodeCode's global default <code>font-size</code> is <strong>13px</strong>, with a <code>line-height</code> of <strong>2em</strong>. This is applied to the <code>&lt;body&gt;</code> and all paragraphs. In addition, <code>&lt;p&gt;</code> (paragraphs) receive a bottom margin of designated by @textmargin (20px).</p>
114 <div class="bs-example" data-example-id="body-copy">
114 <div class="bs-example" data-example-id="body-copy">
115 <p>Nullam quis risus eget urna mollis ornare vel eu leo. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam id dolor id nibh ultricies vehicula.</p>
115 <p>Nullam quis risus eget urna mollis ornare vel eu leo. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam id dolor id nibh ultricies vehicula.</p>
116 <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec ullamcorper nulla non metus auctor fringilla. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Donec ullamcorper nulla non metus auctor fringilla.</p>
116 <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec ullamcorper nulla non metus auctor fringilla. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Donec ullamcorper nulla non metus auctor fringilla.</p>
117 <p>Maecenas sed diam eget risus varius blandit sit amet non magna. Donec id elit non mi porta gravida at eget metus. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit.</p>
117 <p>Maecenas sed diam eget risus varius blandit sit amet non magna. Donec id elit non mi porta gravida at eget metus. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit.</p>
118 </div>
118 </div>
119 <div class="highlight-html"><xmp>
119 <div class="highlight-html"><xmp>
120 <p>...</p>
120 <p>...</p>
121 </xmp></div> <!-- end highlight -->
121 </xmp></div> <!-- end highlight -->
122
122
123 <!-- Body copy .lead -->
123 <!-- Body copy .lead -->
124 <h3>Lead body copy</h3>
124 <h3>Lead body copy</h3>
125 <p>Make a paragraph stand out by adding <code>.lead</code>.</p>
125 <p>Make a paragraph stand out by adding <code>.lead</code>.</p>
126 <div class="bs-example" data-example-id="lead-copy">
126 <div class="bs-example" data-example-id="lead-copy">
127 <p class="lead">Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Duis mollis, est non commodo luctus.</p>
127 <p class="lead">Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Duis mollis, est non commodo luctus.</p>
128 </div>
128 </div>
129 <div class="highlight-html"><xmp>
129 <div class="highlight-html"><xmp>
130 <p class="lead">...</p>
130 <p class="lead">...</p>
131 </xmp></div> <!-- end highlight -->
131 </xmp></div> <!-- end highlight -->
132
132
133 <!-- Using Less -->
133 <!-- Using Less -->
134 <h3>Built with Less</h3>
134 <h3>Built with Less</h3>
135 <p>The typographic scale is based on Less variables in <strong>variables.less</strong>. Font sizes are calculated from <code>@basefontsize</code>, line-heights are calculated with em, and font families are handled by:
135 <p>The typographic scale is based on Less variables in <strong>variables.less</strong>. Font sizes are calculated from <code>@basefontsize</code>, line-heights are calculated with em, and font families are handled by:
136 <ul class="list-unstyled">
136 <ul class="list-unstyled">
137 <li><code>@text-regular</code></li>
137 <li><code>@text-regular</code></li>
138 <li><code>@text-italic</code></li>
138 <li><code>@text-italic</code></li>
139 <li><code>@text-bold</code></li>
139 <li><code>@text-bold</code></li>
140 <li><code>@text-semibold</code></li>
140 <li><code>@text-semibold</code></li>
141 <li><code>@text-bold-italic</code></li>
141 <li><code>@text-bold-italic</code></li>
142 <li><code>@text-light</code></li>
142 <li><code>@text-light</code></li>
143 <li><code>@text-light-italic</code></li>
143 <li><code>@text-light-italic</code></li>
144 </ul>
144 </ul>
145 </p>
145 </p>
146
146
147 <!-- Inline text elements -->
147 <!-- Inline text elements -->
148 <h2 id="type-inline-text">Inline text elements</h2>
148 <h2 id="type-inline-text">Inline text elements</h2>
149 <h3>Marked text</h3>
149 <h3>Marked text</h3>
150 <p>For highlighting a run of text due to its relevance in another context, use the <code>&lt;mark&gt;</code> tag.</p>
150 <p>For highlighting a run of text due to its relevance in another context, use the <code>&lt;mark&gt;</code> tag.</p>
151 <div class="bs-example" data-example-id="simple-mark">
151 <div class="bs-example" data-example-id="simple-mark">
152 <p>You can use the mark tag to <mark>highlight</mark> text.</p>
152 <p>You can use the mark tag to <mark>highlight</mark> text.</p>
153 </div>
153 </div>
154 <div class="highlight-html"><xmp>
154 <div class="highlight-html"><xmp>
155 You can use the mark tag to <mark>highlight</mark> text.
155 You can use the mark tag to <mark>highlight</mark> text.
156 </xmp></div> <!-- end highlight -->
156 </xmp></div> <!-- end highlight -->
157
157
158
158
159 <h3>Deleted text</h3>
159 <h3>Deleted text</h3>
160 <p>For indicating blocks of text that have been deleted use the <code>&lt;del&gt;</code> tag.</p>
160 <p>For indicating blocks of text that have been deleted use the <code>&lt;del&gt;</code> tag.</p>
161 <div class="bs-example" data-example-id="simple-del">
161 <div class="bs-example" data-example-id="simple-del">
162 <p><del>This line of text is meant to be treated as deleted text.</del></p>
162 <p><del>This line of text is meant to be treated as deleted text.</del></p>
163 </div>
163 </div>
164 <div class="highlight-html"><xmp>
164 <div class="highlight-html"><xmp>
165 <del>This line of text is meant to be treated as deleted text.</del>
165 <del>This line of text is meant to be treated as deleted text.</del>
166 </xmp></div> <!-- end highlight -->
166 </xmp></div> <!-- end highlight -->
167
167
168 <h3>Strikethrough text</h3>
168 <h3>Strikethrough text</h3>
169 <p>For indicating blocks of text that are no longer relevant use the <code>&lt;s&gt;</code> tag.</p>
169 <p>For indicating blocks of text that are no longer relevant use the <code>&lt;s&gt;</code> tag.</p>
170 <div class="bs-example" data-example-id="simple-s">
170 <div class="bs-example" data-example-id="simple-s">
171 <p><s>This line of text is meant to be treated as no longer accurate.</s></p>
171 <p><s>This line of text is meant to be treated as no longer accurate.</s></p>
172 </div>
172 </div>
173 <div class="highlight-html"><xmp>
173 <div class="highlight-html"><xmp>
174 <s>This line of text is meant to be treated as no longer accurate.</s>
174 <s>This line of text is meant to be treated as no longer accurate.</s>
175 </xmp></div> <!-- end highlight -->
175 </xmp></div> <!-- end highlight -->
176
176
177 <h3>Inserted text</h3>
177 <h3>Inserted text</h3>
178 <p>For indicating additions to the document use the <code>&lt;ins&gt;</code> tag.</p>
178 <p>For indicating additions to the document use the <code>&lt;ins&gt;</code> tag.</p>
179 <div class="bs-example" data-example-id="simple-ins">
179 <div class="bs-example" data-example-id="simple-ins">
180 <p><ins>This line of text is meant to be treated as an addition to the document.</ins></p>
180 <p><ins>This line of text is meant to be treated as an addition to the document.</ins></p>
181 </div>
181 </div>
182 <div class="highlight-html"><xmp>
182 <div class="highlight-html"><xmp>
183 <ins>This line of text is meant to be treated as an addition to the document.</ins>
183 <ins>This line of text is meant to be treated as an addition to the document.</ins>
184 </xmp></div> <!-- end highlight -->
184 </xmp></div> <!-- end highlight -->
185
185
186 <h3>Underlined text</h3>
186 <h3>Underlined text</h3>
187 <p>To underline text use the <code>&lt;u&gt;</code> tag.</p>
187 <p>To underline text use the <code>&lt;u&gt;</code> tag.</p>
188 <div class="bs-example" data-example-id="simple-u">
188 <div class="bs-example" data-example-id="simple-u">
189 <p><u>This line of text will render as underlined</u></p>
189 <p><u>This line of text will render as underlined</u></p>
190 </div>
190 </div>
191 <div class="highlight-html"><xmp>
191 <div class="highlight-html"><xmp>
192 <u>This line of text will render as underlined</u>
192 <u>This line of text will render as underlined</u>
193 </xmp></div> <!-- end highlight -->
193 </xmp></div> <!-- end highlight -->
194
194
195 <p>Make use of HTML's default emphasis tags with lightweight styles.</p>
195 <p>Make use of HTML's default emphasis tags with lightweight styles.</p>
196
196
197 <h3>Small text</h3>
197 <h3>Small text</h3>
198 <p>For de-emphasizing inline or blocks of text, use the <code>&lt;small&gt;</code> tag to set text at 85% the size of the parent. Heading elements receive their own <code>font-size</code> for nested <code>&lt;small&gt;</code> elements.</p>
198 <p>For de-emphasizing inline or blocks of text, use the <code>&lt;small&gt;</code> tag to set text at 85% the size of the parent. Heading elements receive their own <code>font-size</code> for nested <code>&lt;small&gt;</code> elements.</p>
199 <p>You may alternatively use an inline element with <code>.small</code> in place of any <code>&lt;small&gt;</code>.</p>
199 <p>You may alternatively use an inline element with <code>.small</code> in place of any <code>&lt;small&gt;</code>.</p>
200 <div class="bs-example" data-example-id="simple-small">
200 <div class="bs-example" data-example-id="simple-small">
201 <p><small>This line of text is meant to be treated as fine print.</small></p>
201 <p><small>This line of text is meant to be treated as fine print.</small></p>
202 </div>
202 </div>
203 <div class="highlight-html"><xmp>
203 <div class="highlight-html"><xmp>
204 <small>This line of text is meant to be treated as fine print.</small>
204 <small>This line of text is meant to be treated as fine print.</small>
205 </xmp></div> <!-- end highlight -->
205 </xmp></div> <!-- end highlight -->
206
206
207
207
208 <h3>Bold</h3>
208 <h3>Bold</h3>
209 <p>For emphasizing a snippet of text with a heavier font-weight.</p>
209 <p>For emphasizing a snippet of text with a heavier font-weight.</p>
210 <div class="bs-example" data-example-id="simple-strong">
210 <div class="bs-example" data-example-id="simple-strong">
211 <p>The following snippet of text is <strong>rendered as bold text</strong>.</p>
211 <p>The following snippet of text is <strong>rendered as bold text</strong>.</p>
212 </div>
212 </div>
213 <div class="highlight-html"><xmp>
213 <div class="highlight-html"><xmp>
214 <strong>rendered as bold text</strong>
214 <strong>rendered as bold text</strong>
215 </xmp></div> <!-- end highlight -->
215 </xmp></div> <!-- end highlight -->
216
216
217 <h3>Italics</h3>
217 <h3>Italics</h3>
218 <p>For emphasizing a snippet of text with italics.</p>
218 <p>For emphasizing a snippet of text with italics.</p>
219 <div class="bs-example" data-example-id="simple-em">
219 <div class="bs-example" data-example-id="simple-em">
220 <p>The following snippet of text is <em>rendered as italicized text</em>.</p>
220 <p>The following snippet of text is <em>rendered as italicized text</em>.</p>
221 </div>
221 </div>
222 <div class="highlight-html"><xmp>
222 <div class="highlight-html"><xmp>
223 <em>rendered as italicized text</em>
223 <em>rendered as italicized text</em>
224 </xmp></div> <!-- end highlight -->
224 </xmp></div> <!-- end highlight -->
225
225
226 <div class="bs-callout bs-callout-info" id="callout-type-b-i-elems">
226 <div class="bs-callout bs-callout-info" id="callout-type-b-i-elems">
227 <h4>Alternate elements</h4>
227 <h4>Alternate elements</h4>
228 <p>Feel free to use <code>&lt;b&gt;</code> and <code>&lt;i&gt;</code> in HTML5. <code>&lt;b&gt;</code> is meant to highlight words or phrases without conveying additional importance while <code>&lt;i&gt;</code> is mostly for voice, technical terms, etc.</p>
228 <p>Feel free to use <code>&lt;b&gt;</code> and <code>&lt;i&gt;</code> in HTML5. <code>&lt;b&gt;</code> is meant to highlight words or phrases without conveying additional importance while <code>&lt;i&gt;</code> is mostly for voice, technical terms, etc.</p>
229 </div>
229 </div>
230
230
231 <h2 id="type-alignment">Alignment classes</h2>
231 <h2 id="type-alignment">Alignment classes</h2>
232 <p>Easily realign text to components with text alignment classes.</p>
232 <p>Easily realign text to components with text alignment classes.</p>
233 <div class="bs-example" data-example-id="text-alignment">
233 <div class="bs-example" data-example-id="text-alignment">
234 <p class="text-left">Left aligned text.</p>
234 <p class="text-left">Left aligned text.</p>
235 <p class="text-center">Center aligned text.</p>
235 <p class="text-center">Center aligned text.</p>
236 <p class="text-right">Right aligned text.</p>
236 <p class="text-right">Right aligned text.</p>
237 <p class="text-justify">Justified text.</p>
237 <p class="text-justify">Justified text.</p>
238 <p class="text-nowrap">No wrap text.</p>
238 <p class="text-nowrap">No wrap text.</p>
239 </div>
239 </div>
240 <div class="highlight-html"><xmp>
240 <div class="highlight-html"><xmp>
241 <p class="text-left">Left aligned text.</p>
241 <p class="text-left">Left aligned text.</p>
242 <p class="text-center">Center aligned text.</p>
242 <p class="text-center">Center aligned text.</p>
243 <p class="text-right">Right aligned text.</p>
243 <p class="text-right">Right aligned text.</p>
244 <p class="text-justify">Justified text.</p>
244 <p class="text-justify">Justified text.</p>
245 <p class="text-nowrap">No wrap text.</p>
245 <p class="text-nowrap">No wrap text.</p>
246 </xmp></div> <!-- end highlight -->
246 </xmp></div> <!-- end highlight -->
247
247
248 <h2 id="type-transformation">Transformation classes</h2>
248 <h2 id="type-transformation">Transformation classes</h2>
249 <p>Transform text in components with text capitalization classes.</p>
249 <p>Transform text in components with text capitalization classes.</p>
250 <div class="bs-example" data-example-id="text-capitalization">
250 <div class="bs-example" data-example-id="text-capitalization">
251 <p class="text-lowercase">Lowercased text.</p>
251 <p class="text-lowercase">Lowercased text.</p>
252 <p class="text-uppercase">Uppercased text.</p>
252 <p class="text-uppercase">Uppercased text.</p>
253 <p class="text-capitalize">Capitalized text.</p>
253 <p class="text-capitalize">Capitalized text.</p>
254 </div>
254 </div>
255 <div class="highlight-html"><xmp>
255 <div class="highlight-html"><xmp>
256 <p class="text-lowercase">Lowercased text.</p>
256 <p class="text-lowercase">Lowercased text.</p>
257 <p class="text-uppercase">Uppercased text.</p>
257 <p class="text-uppercase">Uppercased text.</p>
258 <p class="text-capitalize">Capitalized text.</p>
258 <p class="text-capitalize">Capitalized text.</p>
259 </xmp></div> <!-- end highlight -->
259 </xmp></div> <!-- end highlight -->
260
260
261 <!-- Abbreviations -->
261 <!-- Abbreviations -->
262 <h2 id="type-abbreviations">Abbreviations</h2>
262 <h2 id="type-abbreviations">Abbreviations</h2>
263 <p>Stylized implementation of HTML's <code>&lt;abbr&gt;</code> element for abbreviations and acronyms to show the expanded version on hover. Abbreviations with a <code>title</code> attribute have a light dotted bottom border and a help cursor on hover, providing additional context on hover and to users of assistive technologies.</p>
263 <p>Stylized implementation of HTML's <code>&lt;abbr&gt;</code> element for abbreviations and acronyms to show the expanded version on hover. Abbreviations with a <code>title</code> attribute have a light dotted bottom border and a help cursor on hover, providing additional context on hover and to users of assistive technologies.</p>
264
264
265 <h3>Basic abbreviation</h3>
265 <h3>Basic abbreviation</h3>
266 <div class="bs-example" data-example-id="simple-abbr">
266 <div class="bs-example" data-example-id="simple-abbr">
267 <p>An abbreviation of the word attribute is <abbr title="attribute">attr</abbr>.</p>
267 <p>An abbreviation of the word attribute is <abbr title="attribute">attr</abbr>.</p>
268 </div>
268 </div>
269 <div class="highlight-html"><xmp>
269 <div class="highlight-html"><xmp>
270 <abbr title="attribute">attr</abbr>
270 <abbr title="attribute">attr</abbr>
271 </xmp></div> <!-- end highlight -->
271 </xmp></div> <!-- end highlight -->
272
272
273 <h3>Initialism</h3>
273 <h3>Initialism</h3>
274 <p>Add <code>.initialism</code> to an abbreviation for a slightly smaller font-size.</p>
274 <p>Add <code>.initialism</code> to an abbreviation for a slightly smaller font-size.</p>
275 <div class="bs-example" data-example-id="simple-initialism">
275 <div class="bs-example" data-example-id="simple-initialism">
276 <p><abbr title="HyperText Markup Language" class="initialism">HTML</abbr> is the best thing since sliced bread.</p>
276 <p><abbr title="HyperText Markup Language" class="initialism">HTML</abbr> is the best thing since sliced bread.</p>
277 </div>
277 </div>
278 <div class="highlight-html"><xmp>
278 <div class="highlight-html"><xmp>
279 <abbr title="HyperText Markup Language" class="initialism">HTML</abbr>
279 <abbr title="HyperText Markup Language" class="initialism">HTML</abbr>
280 </xmp></div> <!-- end highlight -->
280 </xmp></div> <!-- end highlight -->
281
281
282
282
283 <!-- Addresses -->
283 <!-- Addresses -->
284 <h2 id="type-addresses">Addresses</h2>
284 <h2 id="type-addresses">Addresses</h2>
285 <p>Present contact information for the nearest ancestor or the entire body of work. Preserve formatting by ending all lines with <code>&lt;br&gt;</code>.</p>
285 <p>Present contact information for the nearest ancestor or the entire body of work. Preserve formatting by ending all lines with <code>&lt;br&gt;</code>.</p>
286 <div class="bs-example" data-example-id="simple-address">
286 <div class="bs-example" data-example-id="simple-address">
287 <address>
287 <address>
288 <strong>Twitter, Inc.</strong><br>
288 <strong>Twitter, Inc.</strong><br>
289 795 Folsom Ave, Suite 600<br>
289 795 Folsom Ave, Suite 600<br>
290 San Francisco, CA 94107<br>
290 San Francisco, CA 94107<br>
291 <abbr title="Phone">P:</abbr> (123) 456-7890
291 <abbr title="Phone">P:</abbr> (123) 456-7890
292 </address>
292 </address>
293 <address>
293 <address>
294 <strong>Full Name</strong><br>
294 <strong>Full Name</strong><br>
295 <a href="mailto:#">first.last@example.com</a>
295 <a href="mailto:#">first.last@example.com</a>
296 </address>
296 </address>
297 </div>
297 </div>
298 <div class="highlight-html"><xmp>
298 <div class="highlight-html"><xmp>
299 <address>
299 <address>
300 <strong>Twitter, Inc.</strong><br>
300 <strong>Twitter, Inc.</strong><br>
301 795 Folsom Ave, Suite 600<br>
301 795 Folsom Ave, Suite 600<br>
302 San Francisco, CA 94107<br>
302 San Francisco, CA 94107<br>
303 <abbr title="Phone">P:</abbr> (123) 456-7890
303 <abbr title="Phone">P:</abbr> (123) 456-7890
304 </address>
304 </address>
305
305
306 <address>
306 <address>
307 <strong>Full Name</strong><br>
307 <strong>Full Name</strong><br>
308 <a href="mailto:#">first.last@example.com</a>
308 <a href="mailto:#">first.last@example.com</a>
309 </address>
309 </address>
310 </xmp></div> <!-- end highlight -->
310 </xmp></div> <!-- end highlight -->
311
311
312
312
313 <!-- Blockquotes -->
313 <!-- Blockquotes -->
314 <h2 id="type-blockquotes">Blockquotes</h2>
314 <h2 id="type-blockquotes">Blockquotes</h2>
315 <p>For quoting blocks of content from another source within your document.</p>
315 <p>For quoting blocks of content from another source within your document.</p>
316
316
317 <h3>Default blockquote</h3>
317 <h3>Default blockquote</h3>
318 <p>Wrap <code>&lt;blockquote&gt;</code> around any <abbr title="HyperText Markup Language">HTML</abbr> as the quote. For straight quotes, we recommend a <code>&lt;p&gt;</code>.</p>
318 <p>Wrap <code>&lt;blockquote&gt;</code> around any <abbr title="HyperText Markup Language">HTML</abbr> as the quote. For straight quotes, we recommend a <code>&lt;p&gt;</code>.</p>
319 <div class="bs-example" data-example-id="simple-blockquote">
319 <div class="bs-example" data-example-id="simple-blockquote">
320 <blockquote>
320 <blockquote>
321 <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p>
321 <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p>
322 </blockquote>
322 </blockquote>
323 </div>
323 </div>
324 <div class="highlight-html"><xmp>
324 <div class="highlight-html"><xmp>
325 <blockquote>
325 <blockquote>
326 <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p>
326 <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p>
327 </blockquote>
327 </blockquote>
328 </xmp></div> <!-- end highlight -->
328 </xmp></div> <!-- end highlight -->
329
329
330 <h3>Blockquote options</h3>
330 <h3>Blockquote options</h3>
331 <p>Style and content changes for simple variations on a standard <code>&lt;blockquote&gt;</code>.</p>
331 <p>Style and content changes for simple variations on a standard <code>&lt;blockquote&gt;</code>.</p>
332
332
333 <h4>Naming a source</h4>
333 <h4>Naming a source</h4>
334 <p>Add a <code>&lt;footer&gt;</code> for identifying the source. Wrap the name of the source work in <code>&lt;cite&gt;</code>.</p>
334 <p>Add a <code>&lt;footer&gt;</code> for identifying the source. Wrap the name of the source work in <code>&lt;cite&gt;</code>.</p>
335 <div class="bs-example" data-example-id="blockquote-cite">
335 <div class="bs-example" data-example-id="blockquote-cite">
336 <blockquote>
336 <blockquote>
337 <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p>
337 <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p>
338 <footer>Someone famous in <cite title="Source Title">Source Title</cite></footer>
338 <footer>Someone famous in <cite title="Source Title">Source Title</cite></footer>
339 </blockquote>
339 </blockquote>
340 </div>
340 </div>
341 <div class="highlight-html"><xmp>
341 <div class="highlight-html"><xmp>
342 <blockquote>
342 <blockquote>
343 <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p>
343 <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p>
344 <footer>Someone famous in <cite title="Source Title">Source Title</cite></footer>
344 <footer>Someone famous in <cite title="Source Title">Source Title</cite></footer>
345 </blockquote>
345 </blockquote>
346 </xmp></div> <!-- end highlight -->
346 </xmp></div> <!-- end highlight -->
347
347
348 <h4>Alternate displays</h4>
348 <h4>Alternate displays</h4>
349 <p>Add <code>.blockquote-reverse</code> for a blockquote with right-aligned content.</p>
349 <p>Add <code>.blockquote-reverse</code> for a blockquote with right-aligned content.</p>
350 <div class="bs-example" style="overflow: hidden;" data-example-id="blockquote-reverse">
350 <div class="bs-example" style="overflow: hidden;" data-example-id="blockquote-reverse">
351 <blockquote class="blockquote-reverse">
351 <blockquote class="blockquote-reverse">
352 <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p>
352 <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p>
353 <footer>Someone famous in <cite title="Source Title">Source Title</cite></footer>
353 <footer>Someone famous in <cite title="Source Title">Source Title</cite></footer>
354 </blockquote>
354 </blockquote>
355 </div>
355 </div>
356 <div class="highlight-html"><xmp>
356 <div class="highlight-html"><xmp>
357 <blockquote class="blockquote-reverse">
357 <blockquote class="blockquote-reverse">
358 ...
358 ...
359 </blockquote>
359 </blockquote>
360 </xmp></div> <!-- end highlight -->
360 </xmp></div> <!-- end highlight -->
361
361
362 <h2>Tooltip</h2>
362 <h2>Tooltip</h2>
363 <p>Any element with a class <code>tooltip</code> and a <code>title</code> attribute will replaced with the custom tooltip via Javascript. <br />Tooltips should be used with care as touch devices won't activate them.
363 <p>Any element with a class <code>tooltip</code> and a <code>title</code> attribute will replaced with the custom tooltip via Javascript. <br />Tooltips should be used with care as touch devices won't activate them.
364 </p>
364 </p>
365 <div class="bs-example">
365 <div class="bs-example">
366 <p class="tooltip" title="I am a tooltip in a `p`">Hover me, please!</p>
366 <p class="tooltip" title="I am a tooltip in a `p`">Hover me, please!</p>
367 </div>
367 </div>
368
368
369 <!-- Lists -->
369 <!-- Lists -->
370 <h2 id="type-lists">Lists</h2>
370 <h2 id="type-lists">Lists</h2>
371
371
372 <h3>Unordered</h3>
372 <h3>Unordered</h3>
373 <p>A list of items in which the order does <em>not</em> explicitly matter.</p>
373 <p>A list of items in which the order does <em>not</em> explicitly matter.</p>
374 <div class="bs-example" data-example-id="simple-ul">
374 <div class="bs-example" data-example-id="simple-ul">
375 <ul>
375 <ul>
376 <li>Lorem ipsum dolor sit amet</li>
376 <li>Lorem ipsum dolor sit amet</li>
377 <li>Consectetur adipiscing elit</li>
377 <li>Consectetur adipiscing elit</li>
378 <li>Integer molestie lorem at massa</li>
378 <li>Integer molestie lorem at massa</li>
379 <li>Facilisis in pretium nisl aliquet</li>
379 <li>Facilisis in pretium nisl aliquet</li>
380 <li>Nulla volutpat aliquam velit
380 <li>Nulla volutpat aliquam velit
381 <ul>
381 <ul>
382 <li>Phasellus iaculis neque</li>
382 <li>Phasellus iaculis neque</li>
383 <li>Purus sodales ultricies</li>
383 <li>Purus sodales ultricies</li>
384 <li>Vestibulum laoreet porttitor sem</li>
384 <li>Vestibulum laoreet porttitor sem</li>
385 <li>Ac tristique libero volutpat at</li>
385 <li>Ac tristique libero volutpat at</li>
386 </ul>
386 </ul>
387 </li>
387 </li>
388 <li>Faucibus porta lacus fringilla vel</li>
388 <li>Faucibus porta lacus fringilla vel</li>
389 <li>Aenean sit amet erat nunc</li>
389 <li>Aenean sit amet erat nunc</li>
390 <li>Eget porttitor lorem</li>
390 <li>Eget porttitor lorem</li>
391 </ul>
391 </ul>
392 </div>
392 </div>
393 <div class="highlight-html"><xmp>
393 <div class="highlight-html"><xmp>
394 <ul>
394 <ul>
395 <li>...</li>
395 <li>...</li>
396 </ul>
396 </ul>
397 </xmp></div> <!-- end highlight -->
397 </xmp></div> <!-- end highlight -->
398
398
399 <h3>Ordered</h3>
399 <h3>Ordered</h3>
400 <p>A list of items in which the order <em>does</em> explicitly matter.</p>
400 <p>A list of items in which the order <em>does</em> explicitly matter.</p>
401 <div class="bs-example" data-example-id="simple-ol">
401 <div class="bs-example" data-example-id="simple-ol">
402 <ol>
402 <ol>
403 <li>Lorem ipsum dolor sit amet</li>
403 <li>Lorem ipsum dolor sit amet</li>
404 <li>Consectetur adipiscing elit</li>
404 <li>Consectetur adipiscing elit</li>
405 <li>Integer molestie lorem at massa</li>
405 <li>Integer molestie lorem at massa</li>
406 <li>Facilisis in pretium nisl aliquet</li>
406 <li>Facilisis in pretium nisl aliquet</li>
407 <li>Nulla volutpat aliquam velit</li>
407 <li>Nulla volutpat aliquam velit</li>
408 <li>Faucibus porta lacus fringilla vel</li>
408 <li>Faucibus porta lacus fringilla vel</li>
409 <li>Aenean sit amet erat nunc</li>
409 <li>Aenean sit amet erat nunc</li>
410 <li>Eget porttitor lorem</li>
410 <li>Eget porttitor lorem</li>
411 </ol>
411 </ol>
412 </div>
412 </div>
413 <div class="highlight-html"><xmp>
413 <div class="highlight-html"><xmp>
414 <ol>
414 <ol>
415 <li>...</li>
415 <li>...</li>
416 </ol>
416 </ol>
417 </xmp></div> <!-- end highlight -->
417 </xmp></div> <!-- end highlight -->
418
418
419 <h3>Unstyled</h3>
419 <h3>Unstyled</h3>
420 <p>Remove the default <code>list-style</code> and left margin on list items (immediate children only). <strong>This only applies to immediate children list items</strong>, meaning you will need to add the class for any nested lists as well.< /p>
420 <p>Remove the default <code>list-style</code> and left margin on list items (immediate children only). <strong>This only applies to immediate children list items</strong>, meaning you will need to add the class for any nested lists as well.< /p>
421 <div class="bs-example" data-example-id="unstyled-list">
421 <div class="bs-example" data-example-id="unstyled-list">
422 <ul class="list-unstyled">
422 <ul class="list-unstyled">
423 <li>Lorem ipsum dolor sit amet</li>
423 <li>Lorem ipsum dolor sit amet</li>
424 <li>Consectetur adipiscing elit</li>
424 <li>Consectetur adipiscing elit</li>
425 <li>Integer molestie lorem at massa</li>
425 <li>Integer molestie lorem at massa</li>
426 <li>Facilisis in pretium nisl aliquet</li>
426 <li>Facilisis in pretium nisl aliquet</li>
427 <li>Nulla volutpat aliquam velit
427 <li>Nulla volutpat aliquam velit
428 <ul>
428 <ul>
429 <li>Phasellus iaculis neque</li>
429 <li>Phasellus iaculis neque</li>
430 <li>Purus sodales ultricies</li>
430 <li>Purus sodales ultricies</li>
431 <li>Vestibulum laoreet porttitor sem</li>
431 <li>Vestibulum laoreet porttitor sem</li>
432 <li>Ac tristique libero volutpat at</li>
432 <li>Ac tristique libero volutpat at</li>
433 </ul>
433 </ul>
434 </li>
434 </li>
435 <li>Faucibus porta lacus fringilla vel</li>
435 <li>Faucibus porta lacus fringilla vel</li>
436 <li>Aenean sit amet erat nunc</li>
436 <li>Aenean sit amet erat nunc</li>
437 <li>Eget porttitor lorem</li>
437 <li>Eget porttitor lorem</li>
438 </ul>
438 </ul>
439 </div>
439 </div>
440 <div class="highlight-html"><xmp>
440 <div class="highlight-html"><xmp>
441 <ul class="list-unstyled">
441 <ul class="list-unstyled">
442 <li>...</li>
442 <li>...</li>
443 </ul>
443 </ul>
444 </xmp></div> <!-- end highlight -->
444 </xmp></div> <!-- end highlight -->
445
445
446 <h3>Inline</h3>
446 <h3>Inline</h3>
447 <p>Place all list items on a single line with <code>display: inline-block;</code> and some light padding.</p>
447 <p>Place all list items on a single line with <code>display: inline-block;</code> and some light padding.</p>
448 <div class="bs-example" data-example-id="list-inline">
448 <div class="bs-example" data-example-id="list-inline">
449 <ul class="list-inline">
449 <ul class="list-inline">
450 <li>Lorem ipsum</li>
450 <li>Lorem ipsum</li>
451 <li>Phasellus iaculis</li>
451 <li>Phasellus iaculis</li>
452 <li>Nulla volutpat</li>
452 <li>Nulla volutpat</li>
453 </ul>
453 </ul>
454 </div>
454 </div>
455 <div class="highlight-html"><xmp>
455 <div class="highlight-html"><xmp>
456 <ul class="list-inline">
456 <ul class="list-inline">
457 <li>...</li>
457 <li>...</li>
458 </ul>
458 </ul>
459 </xmp></div> <!-- end highlight -->
459 </xmp></div> <!-- end highlight -->
460
460
461 <h3>Description</h3>
461 <h3>Description</h3>
462 <p>A list of terms with their associated descriptions.</p>
462 <p>A list of terms with their associated descriptions.</p>
463 <div class="bs-example" data-example-id="simple-dl">
463 <div class="bs-example" data-example-id="simple-dl">
464 <dl>
464 <dl>
465 <dt>Description lists</dt>
465 <dt>Description lists</dt>
466 <dd>A description list is perfect for defining terms.</dd>
466 <dd>A description list is perfect for defining terms.</dd>
467 <dt>Euismod</dt>
467 <dt>Euismod</dt>
468 <dd>Vestibulum id ligula porta felis euismod semper eget lacinia odio sem nec elit.</dd>
468 <dd>Vestibulum id ligula porta felis euismod semper eget lacinia odio sem nec elit.</dd>
469 <dd>Donec id elit non mi porta gravida at eget metus.</dd>
469 <dd>Donec id elit non mi porta gravida at eget metus.</dd>
470 <dt>Malesuada porta</dt>
470 <dt>Malesuada porta</dt>
471 <dd>Etiam porta sem malesuada magna mollis euismod.</dd>
471 <dd>Etiam porta sem malesuada magna mollis euismod.</dd>
472 </dl>
472 </dl>
473 </div>
473 </div>
474 <div class="highlight-html"><xmp>
474 <div class="highlight-html"><xmp>
475 <dl>
475 <dl>
476 <dt>...</dt>
476 <dt>...</dt>
477 <dd>...</dd>
477 <dd>...</dd>
478 </dl>
478 </dl>
479 </xmp></div> <!-- end highlight -->
479 </xmp></div> <!-- end highlight -->
480
480
481 <h4>Horizontal description</h4>
481 <h4>Horizontal description</h4>
482 <p>Make terms and descriptions in <code>&lt;dl&gt;</code> line up side-by-side. Starts off stacked like default <code>&lt;dl&gt;</code>s, but when the navbar expands, so do these. This really only looks good if there is one line for the definition and one for the term.</p>
482 <p>Make terms and descriptions in <code>&lt;dl&gt;</code> line up side-by-side. Starts off stacked like default <code>&lt;dl&gt;</code>s, but when the navbar expands, so do these. This really only looks good if there is one line for the definition and one for the term.</p>
483 <div class="bs-example" data-example-id="horizontal-dl">
483 <div class="bs-example" data-example-id="horizontal-dl">
484 <dl class="dl-horizontal">
484 <dl class="dl-horizontal">
485 <dt>Description lists</dt>
485 <dt>Description lists</dt>
486 <dd>A description list is perfect for defining terms.</dd>
486 <dd>A description list is perfect for defining terms.</dd>
487 <dt>Donec id elit non mi porta gravida at eget metus.</dt>
487 <dt>Donec id elit non mi porta gravida at eget metus.</dt>
488 <dd>Vestibulum id ligula porta felis euismod semper eget lacinia odio sem nec elit.</dd>
488 <dd>Vestibulum id ligula porta felis euismod semper eget lacinia odio sem nec elit.</dd>
489 <dd>Donec id elit non mi porta gravida at eget metus.</dd>
489 <dd>Donec id elit non mi porta gravida at eget metus.</dd>
490 <dt>Malesuada porta</dt>
490 <dt>Malesuada porta</dt>
491 <dd>Etiam porta sem malesuada magna mollis euismod.</dd>
491 <dd>Etiam porta sem malesuada magna mollis euismod.</dd>
492 <dt>Felis euismod semper eget lacinia</dt>
492 <dt>Felis euismod semper eget lacinia</dt>
493 <dd>Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</dd>
493 <dd>Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</dd>
494 </dl>
494 </dl>
495 </div>
495 </div>
496 <div class="highlight-html"><xmp>
496 <div class="highlight-html"><xmp>
497 <dl class="dl-horizontal">
497 <dl class="dl-horizontal">
498 <dt>...</dt>
498 <dt>...</dt>
499 <dd>...</dd>
499 <dd>...</dd>
500 </dl>
500 </dl>
501 </xmp></div> <!-- end highlight -->
501 </xmp></div> <!-- end highlight -->
502
502
503 </div>
503 </div>
504
504
505 </div>
505 </div>
506 </div>
506 </div>
507 </%def>
507 </%def>
1 NO CONTENT: file was removed
NO CONTENT: file was removed
General Comments 0
You need to be logged in to leave comments. Login now