##// END OF EJS Templates
ui: new commits page....
marcink -
r3882:74da9073 default
parent child Browse files
Show More
@@ -1,60 +1,60 b''
1 {
1 {
2 "name": "rhodecode-enterprise",
2 "name": "rhodecode-enterprise",
3 "version": "2.0.0",
3 "version": "2.0.0",
4 "private": true,
4 "private": true,
5 "description" : "RhodeCode JS packaged",
5 "description" : "RhodeCode JS packaged",
6 "license": "SEE LICENSE IN LICENSE.txt",
6 "license": "SEE LICENSE IN LICENSE.txt",
7 "repository" : {
7 "repository" : {
8 "type" : "hg",
8 "type" : "hg",
9 "url" : "https://code.rhodecode.com/rhodecode-enterprise-ce"
9 "url" : "https://code.rhodecode.com/rhodecode-enterprise-ce"
10 },
10 },
11 "devDependencies": {
11 "devDependencies": {
12 "appenlight-client": "git+https://git@github.com/AppEnlight/appenlight-client-js.git#0.5.1",
12 "appenlight-client": "git+https://git@github.com/AppEnlight/appenlight-client-js.git#0.5.1",
13 "clipboard": "^2.0.1",
13 "clipboard": "^2.0.1",
14 "exports-loader": "^0.6.4",
14 "exports-loader": "^0.6.4",
15 "favico.js": "^0.3.10",
15 "favico.js": "^0.3.10",
16 "dropzone": "^5.5.0",
16 "dropzone": "^5.5.0",
17 "grunt": "^0.4.5",
17 "grunt": "^0.4.5",
18 "grunt-cli": "^1.3.1",
18 "grunt-cli": "^1.3.1",
19 "grunt-contrib-concat": "^0.5.1",
19 "grunt-contrib-concat": "^0.5.1",
20 "grunt-contrib-copy": "^1.0.0",
20 "grunt-contrib-copy": "^1.0.0",
21 "grunt-contrib-jshint": "^0.12.0",
21 "grunt-contrib-jshint": "^0.12.0",
22 "grunt-contrib-less": "^1.1.0",
22 "grunt-contrib-less": "^1.1.0",
23 "grunt-contrib-watch": "^0.6.1",
23 "grunt-contrib-watch": "^0.6.1",
24 "grunt-webpack": "^3.1.3",
24 "grunt-webpack": "^3.1.3",
25 "jquery": "1.11.3",
25 "jquery": "1.11.3",
26 "mark.js": "8.11.1",
26 "mark.js": "8.11.1",
27 "jshint": "^2.9.1-rc3",
27 "jshint": "^2.9.1-rc3",
28 "moment": "^2.18.1",
28 "moment": "^2.18.1",
29 "mousetrap": "^1.6.1",
29 "mousetrap": "^1.6.1",
30 "qrious": "^4.0.2",
30 "qrious": "^4.0.2",
31 "sticky-sidebar": "3.3.1",
31 "sticky-sidebar": "3.3.4",
32 "waypoints": "4.0.1",
32 "waypoints": "4.0.1",
33 "webpack": "4.23.1",
33 "webpack": "4.23.1",
34 "webpack-cli": "3.1.2",
34 "webpack-cli": "3.1.2",
35 "babel-core": "^6.26.3",
35 "babel-core": "^6.26.3",
36 "babel-loader": "^7.1.2",
36 "babel-loader": "^7.1.2",
37 "babel-plugin-transform-object-rest-spread": "^6.26.0",
37 "babel-plugin-transform-object-rest-spread": "^6.26.0",
38 "babel-preset-env": "^1.6.0",
38 "babel-preset-env": "^1.6.0",
39 "copy-webpack-plugin": "^4.4.2",
39 "copy-webpack-plugin": "^4.4.2",
40 "css-loader": "^0.28.11",
40 "css-loader": "^0.28.11",
41 "html-loader": "^0.4.4",
41 "html-loader": "^0.4.4",
42 "html-webpack-plugin": "^3.2.0",
42 "html-webpack-plugin": "^3.2.0",
43 "imports-loader": "^0.7.1",
43 "imports-loader": "^0.7.1",
44 "polymer-webpack-loader": "^2.0.1",
44 "polymer-webpack-loader": "^2.0.1",
45 "style-loader": "^0.21.0",
45 "style-loader": "^0.21.0",
46 "webpack-uglify-js-plugin": "^1.1.9",
46 "webpack-uglify-js-plugin": "^1.1.9",
47 "raw-loader": "1.0.0-beta.0",
47 "raw-loader": "1.0.0-beta.0",
48 "ts-loader": "^1.3.3",
48 "ts-loader": "^1.3.3",
49 "@webcomponents/webcomponentsjs": "^2.0.0",
49 "@webcomponents/webcomponentsjs": "^2.0.0",
50 "@polymer/polymer": "^3.0.0",
50 "@polymer/polymer": "^3.0.0",
51 "@polymer/paper-button": "^3.0.0",
51 "@polymer/paper-button": "^3.0.0",
52 "@polymer/paper-spinner": "^3.0.0",
52 "@polymer/paper-spinner": "^3.0.0",
53 "@polymer/paper-tooltip": "^3.0.0",
53 "@polymer/paper-tooltip": "^3.0.0",
54 "@polymer/paper-toast": "^3.0.0",
54 "@polymer/paper-toast": "^3.0.0",
55 "@polymer/paper-toggle-button": "^3.0.0",
55 "@polymer/paper-toggle-button": "^3.0.0",
56 "@polymer/iron-ajax": "^3.0.0",
56 "@polymer/iron-ajax": "^3.0.0",
57 "@polymer/iron-autogrow-textarea": "^3.0.0",
57 "@polymer/iron-autogrow-textarea": "^3.0.0",
58 "@polymer/iron-a11y-keys": "^3.0.0"
58 "@polymer/iron-a11y-keys": "^3.0.0"
59 }
59 }
60 }
60 }
@@ -1,500 +1,503 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2
2
3 # Copyright (C) 2010-2019 RhodeCode GmbH
3 # Copyright (C) 2010-2019 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 import logging
22 import logging
23 import collections
23 import collections
24
24
25 from pyramid.httpexceptions import HTTPNotFound, HTTPBadRequest, HTTPFound
25 from pyramid.httpexceptions import HTTPNotFound, HTTPBadRequest, HTTPFound
26 from pyramid.view import view_config
26 from pyramid.view import view_config
27 from pyramid.renderers import render
27 from pyramid.renderers import render
28 from pyramid.response import Response
28 from pyramid.response import Response
29
29
30 from rhodecode.apps._base import RepoAppView
30 from rhodecode.apps._base import RepoAppView
31
31
32 from rhodecode.lib import diffs, codeblocks
32 from rhodecode.lib import diffs, codeblocks
33 from rhodecode.lib.auth import (
33 from rhodecode.lib.auth import (
34 LoginRequired, HasRepoPermissionAnyDecorator, NotAnonymous, CSRFRequired)
34 LoginRequired, HasRepoPermissionAnyDecorator, NotAnonymous, CSRFRequired)
35
35
36 from rhodecode.lib.compat import OrderedDict
36 from rhodecode.lib.compat import OrderedDict
37 from rhodecode.lib.diffs import (
37 from rhodecode.lib.diffs import (
38 cache_diff, load_cached_diff, diff_cache_exist, get_diff_context,
38 cache_diff, load_cached_diff, diff_cache_exist, get_diff_context,
39 get_diff_whitespace_flag)
39 get_diff_whitespace_flag)
40 from rhodecode.lib.exceptions import StatusChangeOnClosedPullRequestError
40 from rhodecode.lib.exceptions import StatusChangeOnClosedPullRequestError
41 import rhodecode.lib.helpers as h
41 import rhodecode.lib.helpers as h
42 from rhodecode.lib.utils2 import safe_unicode, str2bool
42 from rhodecode.lib.utils2 import safe_unicode, str2bool
43 from rhodecode.lib.vcs.backends.base import EmptyCommit
43 from rhodecode.lib.vcs.backends.base import EmptyCommit
44 from rhodecode.lib.vcs.exceptions import (
44 from rhodecode.lib.vcs.exceptions import (
45 RepositoryError, CommitDoesNotExistError)
45 RepositoryError, CommitDoesNotExistError)
46 from rhodecode.model.db import ChangesetComment, ChangesetStatus
46 from rhodecode.model.db import ChangesetComment, ChangesetStatus
47 from rhodecode.model.changeset_status import ChangesetStatusModel
47 from rhodecode.model.changeset_status import ChangesetStatusModel
48 from rhodecode.model.comment import CommentsModel
48 from rhodecode.model.comment import CommentsModel
49 from rhodecode.model.meta import Session
49 from rhodecode.model.meta import Session
50 from rhodecode.model.settings import VcsSettingsModel
50 from rhodecode.model.settings import VcsSettingsModel
51
51
52 log = logging.getLogger(__name__)
52 log = logging.getLogger(__name__)
53
53
54
54
55 def _update_with_GET(params, request):
55 def _update_with_GET(params, request):
56 for k in ['diff1', 'diff2', 'diff']:
56 for k in ['diff1', 'diff2', 'diff']:
57 params[k] += request.GET.getall(k)
57 params[k] += request.GET.getall(k)
58
58
59
59
60 class RepoCommitsView(RepoAppView):
60 class RepoCommitsView(RepoAppView):
61 def load_default_context(self):
61 def load_default_context(self):
62 c = self._get_local_tmpl_context(include_app_defaults=True)
62 c = self._get_local_tmpl_context(include_app_defaults=True)
63 c.rhodecode_repo = self.rhodecode_vcs_repo
63 c.rhodecode_repo = self.rhodecode_vcs_repo
64
64
65 return c
65 return c
66
66
67 def _is_diff_cache_enabled(self, target_repo):
67 def _is_diff_cache_enabled(self, target_repo):
68 caching_enabled = self._get_general_setting(
68 caching_enabled = self._get_general_setting(
69 target_repo, 'rhodecode_diff_cache')
69 target_repo, 'rhodecode_diff_cache')
70 log.debug('Diff caching enabled: %s', caching_enabled)
70 log.debug('Diff caching enabled: %s', caching_enabled)
71 return caching_enabled
71 return caching_enabled
72
72
73 def _commit(self, commit_id_range, method):
73 def _commit(self, commit_id_range, method):
74 _ = self.request.translate
74 _ = self.request.translate
75 c = self.load_default_context()
75 c = self.load_default_context()
76 c.fulldiff = self.request.GET.get('fulldiff')
76 c.fulldiff = self.request.GET.get('fulldiff')
77
77
78 # fetch global flags of ignore ws or context lines
78 # fetch global flags of ignore ws or context lines
79 diff_context = get_diff_context(self.request)
79 diff_context = get_diff_context(self.request)
80 hide_whitespace_changes = get_diff_whitespace_flag(self.request)
80 hide_whitespace_changes = get_diff_whitespace_flag(self.request)
81
81
82 # diff_limit will cut off the whole diff if the limit is applied
82 # diff_limit will cut off the whole diff if the limit is applied
83 # otherwise it will just hide the big files from the front-end
83 # otherwise it will just hide the big files from the front-end
84 diff_limit = c.visual.cut_off_limit_diff
84 diff_limit = c.visual.cut_off_limit_diff
85 file_limit = c.visual.cut_off_limit_file
85 file_limit = c.visual.cut_off_limit_file
86
86
87 # get ranges of commit ids if preset
87 # get ranges of commit ids if preset
88 commit_range = commit_id_range.split('...')[:2]
88 commit_range = commit_id_range.split('...')[:2]
89
89
90 try:
90 try:
91 pre_load = ['affected_files', 'author', 'branch', 'date',
91 pre_load = ['affected_files', 'author', 'branch', 'date',
92 'message', 'parents']
92 'message', 'parents']
93 if self.rhodecode_vcs_repo.alias == 'hg':
93 if self.rhodecode_vcs_repo.alias == 'hg':
94 pre_load += ['hidden', 'obsolete', 'phase']
94 pre_load += ['hidden', 'obsolete', 'phase']
95
95
96 if len(commit_range) == 2:
96 if len(commit_range) == 2:
97 commits = self.rhodecode_vcs_repo.get_commits(
97 commits = self.rhodecode_vcs_repo.get_commits(
98 start_id=commit_range[0], end_id=commit_range[1],
98 start_id=commit_range[0], end_id=commit_range[1],
99 pre_load=pre_load, translate_tags=False)
99 pre_load=pre_load, translate_tags=False)
100 commits = list(commits)
100 commits = list(commits)
101 else:
101 else:
102 commits = [self.rhodecode_vcs_repo.get_commit(
102 commits = [self.rhodecode_vcs_repo.get_commit(
103 commit_id=commit_id_range, pre_load=pre_load)]
103 commit_id=commit_id_range, pre_load=pre_load)]
104
104
105 c.commit_ranges = commits
105 c.commit_ranges = commits
106 if not c.commit_ranges:
106 if not c.commit_ranges:
107 raise RepositoryError('The commit range returned an empty result')
107 raise RepositoryError('The commit range returned an empty result')
108 except CommitDoesNotExistError as e:
108 except CommitDoesNotExistError as e:
109 msg = _('No such commit exists. Org exception: `{}`').format(e)
109 msg = _('No such commit exists. Org exception: `{}`').format(e)
110 h.flash(msg, category='error')
110 h.flash(msg, category='error')
111 raise HTTPNotFound()
111 raise HTTPNotFound()
112 except Exception:
112 except Exception:
113 log.exception("General failure")
113 log.exception("General failure")
114 raise HTTPNotFound()
114 raise HTTPNotFound()
115
115
116 c.changes = OrderedDict()
116 c.changes = OrderedDict()
117 c.lines_added = 0
117 c.lines_added = 0
118 c.lines_deleted = 0
118 c.lines_deleted = 0
119
119
120 # auto collapse if we have more than limit
120 # auto collapse if we have more than limit
121 collapse_limit = diffs.DiffProcessor._collapse_commits_over
121 collapse_limit = diffs.DiffProcessor._collapse_commits_over
122 c.collapse_all_commits = len(c.commit_ranges) > collapse_limit
122 c.collapse_all_commits = len(c.commit_ranges) > collapse_limit
123
123
124 c.commit_statuses = ChangesetStatus.STATUSES
124 c.commit_statuses = ChangesetStatus.STATUSES
125 c.inline_comments = []
125 c.inline_comments = []
126 c.files = []
126 c.files = []
127
127
128 c.statuses = []
128 c.statuses = []
129 c.comments = []
129 c.comments = []
130 c.unresolved_comments = []
130 c.unresolved_comments = []
131 c.resolved_comments = []
131 if len(c.commit_ranges) == 1:
132 if len(c.commit_ranges) == 1:
132 commit = c.commit_ranges[0]
133 commit = c.commit_ranges[0]
133 c.comments = CommentsModel().get_comments(
134 c.comments = CommentsModel().get_comments(
134 self.db_repo.repo_id,
135 self.db_repo.repo_id,
135 revision=commit.raw_id)
136 revision=commit.raw_id)
136 c.statuses.append(ChangesetStatusModel().get_status(
137 c.statuses.append(ChangesetStatusModel().get_status(
137 self.db_repo.repo_id, commit.raw_id))
138 self.db_repo.repo_id, commit.raw_id))
138 # comments from PR
139 # comments from PR
139 statuses = ChangesetStatusModel().get_statuses(
140 statuses = ChangesetStatusModel().get_statuses(
140 self.db_repo.repo_id, commit.raw_id,
141 self.db_repo.repo_id, commit.raw_id,
141 with_revisions=True)
142 with_revisions=True)
142 prs = set(st.pull_request for st in statuses
143 prs = set(st.pull_request for st in statuses
143 if st.pull_request is not None)
144 if st.pull_request is not None)
144 # from associated statuses, check the pull requests, and
145 # from associated statuses, check the pull requests, and
145 # show comments from them
146 # show comments from them
146 for pr in prs:
147 for pr in prs:
147 c.comments.extend(pr.comments)
148 c.comments.extend(pr.comments)
148
149
149 c.unresolved_comments = CommentsModel()\
150 c.unresolved_comments = CommentsModel()\
150 .get_commit_unresolved_todos(commit.raw_id)
151 .get_commit_unresolved_todos(commit.raw_id)
152 c.resolved_comments = CommentsModel()\
153 .get_commit_resolved_todos(commit.raw_id)
151
154
152 diff = None
155 diff = None
153 # Iterate over ranges (default commit view is always one commit)
156 # Iterate over ranges (default commit view is always one commit)
154 for commit in c.commit_ranges:
157 for commit in c.commit_ranges:
155 c.changes[commit.raw_id] = []
158 c.changes[commit.raw_id] = []
156
159
157 commit2 = commit
160 commit2 = commit
158 commit1 = commit.first_parent
161 commit1 = commit.first_parent
159
162
160 if method == 'show':
163 if method == 'show':
161 inline_comments = CommentsModel().get_inline_comments(
164 inline_comments = CommentsModel().get_inline_comments(
162 self.db_repo.repo_id, revision=commit.raw_id)
165 self.db_repo.repo_id, revision=commit.raw_id)
163 c.inline_cnt = CommentsModel().get_inline_comments_count(
166 c.inline_cnt = CommentsModel().get_inline_comments_count(
164 inline_comments)
167 inline_comments)
165 c.inline_comments = inline_comments
168 c.inline_comments = inline_comments
166
169
167 cache_path = self.rhodecode_vcs_repo.get_create_shadow_cache_pr_path(
170 cache_path = self.rhodecode_vcs_repo.get_create_shadow_cache_pr_path(
168 self.db_repo)
171 self.db_repo)
169 cache_file_path = diff_cache_exist(
172 cache_file_path = diff_cache_exist(
170 cache_path, 'diff', commit.raw_id,
173 cache_path, 'diff', commit.raw_id,
171 hide_whitespace_changes, diff_context, c.fulldiff)
174 hide_whitespace_changes, diff_context, c.fulldiff)
172
175
173 caching_enabled = self._is_diff_cache_enabled(self.db_repo)
176 caching_enabled = self._is_diff_cache_enabled(self.db_repo)
174 force_recache = str2bool(self.request.GET.get('force_recache'))
177 force_recache = str2bool(self.request.GET.get('force_recache'))
175
178
176 cached_diff = None
179 cached_diff = None
177 if caching_enabled:
180 if caching_enabled:
178 cached_diff = load_cached_diff(cache_file_path)
181 cached_diff = load_cached_diff(cache_file_path)
179
182
180 has_proper_diff_cache = cached_diff and cached_diff.get('diff')
183 has_proper_diff_cache = cached_diff and cached_diff.get('diff')
181 if not force_recache and has_proper_diff_cache:
184 if not force_recache and has_proper_diff_cache:
182 diffset = cached_diff['diff']
185 diffset = cached_diff['diff']
183 else:
186 else:
184 vcs_diff = self.rhodecode_vcs_repo.get_diff(
187 vcs_diff = self.rhodecode_vcs_repo.get_diff(
185 commit1, commit2,
188 commit1, commit2,
186 ignore_whitespace=hide_whitespace_changes,
189 ignore_whitespace=hide_whitespace_changes,
187 context=diff_context)
190 context=diff_context)
188
191
189 diff_processor = diffs.DiffProcessor(
192 diff_processor = diffs.DiffProcessor(
190 vcs_diff, format='newdiff', diff_limit=diff_limit,
193 vcs_diff, format='newdiff', diff_limit=diff_limit,
191 file_limit=file_limit, show_full_diff=c.fulldiff)
194 file_limit=file_limit, show_full_diff=c.fulldiff)
192
195
193 _parsed = diff_processor.prepare()
196 _parsed = diff_processor.prepare()
194
197
195 diffset = codeblocks.DiffSet(
198 diffset = codeblocks.DiffSet(
196 repo_name=self.db_repo_name,
199 repo_name=self.db_repo_name,
197 source_node_getter=codeblocks.diffset_node_getter(commit1),
200 source_node_getter=codeblocks.diffset_node_getter(commit1),
198 target_node_getter=codeblocks.diffset_node_getter(commit2))
201 target_node_getter=codeblocks.diffset_node_getter(commit2))
199
202
200 diffset = self.path_filter.render_patchset_filtered(
203 diffset = self.path_filter.render_patchset_filtered(
201 diffset, _parsed, commit1.raw_id, commit2.raw_id)
204 diffset, _parsed, commit1.raw_id, commit2.raw_id)
202
205
203 # save cached diff
206 # save cached diff
204 if caching_enabled:
207 if caching_enabled:
205 cache_diff(cache_file_path, diffset, None)
208 cache_diff(cache_file_path, diffset, None)
206
209
207 c.limited_diff = diffset.limited_diff
210 c.limited_diff = diffset.limited_diff
208 c.changes[commit.raw_id] = diffset
211 c.changes[commit.raw_id] = diffset
209 else:
212 else:
210 # TODO(marcink): no cache usage here...
213 # TODO(marcink): no cache usage here...
211 _diff = self.rhodecode_vcs_repo.get_diff(
214 _diff = self.rhodecode_vcs_repo.get_diff(
212 commit1, commit2,
215 commit1, commit2,
213 ignore_whitespace=hide_whitespace_changes, context=diff_context)
216 ignore_whitespace=hide_whitespace_changes, context=diff_context)
214 diff_processor = diffs.DiffProcessor(
217 diff_processor = diffs.DiffProcessor(
215 _diff, format='newdiff', diff_limit=diff_limit,
218 _diff, format='newdiff', diff_limit=diff_limit,
216 file_limit=file_limit, show_full_diff=c.fulldiff)
219 file_limit=file_limit, show_full_diff=c.fulldiff)
217 # downloads/raw we only need RAW diff nothing else
220 # downloads/raw we only need RAW diff nothing else
218 diff = self.path_filter.get_raw_patch(diff_processor)
221 diff = self.path_filter.get_raw_patch(diff_processor)
219 c.changes[commit.raw_id] = [None, None, None, None, diff, None, None]
222 c.changes[commit.raw_id] = [None, None, None, None, diff, None, None]
220
223
221 # sort comments by how they were generated
224 # sort comments by how they were generated
222 c.comments = sorted(c.comments, key=lambda x: x.comment_id)
225 c.comments = sorted(c.comments, key=lambda x: x.comment_id)
223
226
224 if len(c.commit_ranges) == 1:
227 if len(c.commit_ranges) == 1:
225 c.commit = c.commit_ranges[0]
228 c.commit = c.commit_ranges[0]
226 c.parent_tmpl = ''.join(
229 c.parent_tmpl = ''.join(
227 '# Parent %s\n' % x.raw_id for x in c.commit.parents)
230 '# Parent %s\n' % x.raw_id for x in c.commit.parents)
228
231
229 if method == 'download':
232 if method == 'download':
230 response = Response(diff)
233 response = Response(diff)
231 response.content_type = 'text/plain'
234 response.content_type = 'text/plain'
232 response.content_disposition = (
235 response.content_disposition = (
233 'attachment; filename=%s.diff' % commit_id_range[:12])
236 'attachment; filename=%s.diff' % commit_id_range[:12])
234 return response
237 return response
235 elif method == 'patch':
238 elif method == 'patch':
236 c.diff = safe_unicode(diff)
239 c.diff = safe_unicode(diff)
237 patch = render(
240 patch = render(
238 'rhodecode:templates/changeset/patch_changeset.mako',
241 'rhodecode:templates/changeset/patch_changeset.mako',
239 self._get_template_context(c), self.request)
242 self._get_template_context(c), self.request)
240 response = Response(patch)
243 response = Response(patch)
241 response.content_type = 'text/plain'
244 response.content_type = 'text/plain'
242 return response
245 return response
243 elif method == 'raw':
246 elif method == 'raw':
244 response = Response(diff)
247 response = Response(diff)
245 response.content_type = 'text/plain'
248 response.content_type = 'text/plain'
246 return response
249 return response
247 elif method == 'show':
250 elif method == 'show':
248 if len(c.commit_ranges) == 1:
251 if len(c.commit_ranges) == 1:
249 html = render(
252 html = render(
250 'rhodecode:templates/changeset/changeset.mako',
253 'rhodecode:templates/changeset/changeset.mako',
251 self._get_template_context(c), self.request)
254 self._get_template_context(c), self.request)
252 return Response(html)
255 return Response(html)
253 else:
256 else:
254 c.ancestor = None
257 c.ancestor = None
255 c.target_repo = self.db_repo
258 c.target_repo = self.db_repo
256 html = render(
259 html = render(
257 'rhodecode:templates/changeset/changeset_range.mako',
260 'rhodecode:templates/changeset/changeset_range.mako',
258 self._get_template_context(c), self.request)
261 self._get_template_context(c), self.request)
259 return Response(html)
262 return Response(html)
260
263
261 raise HTTPBadRequest()
264 raise HTTPBadRequest()
262
265
263 @LoginRequired()
266 @LoginRequired()
264 @HasRepoPermissionAnyDecorator(
267 @HasRepoPermissionAnyDecorator(
265 'repository.read', 'repository.write', 'repository.admin')
268 'repository.read', 'repository.write', 'repository.admin')
266 @view_config(
269 @view_config(
267 route_name='repo_commit', request_method='GET',
270 route_name='repo_commit', request_method='GET',
268 renderer=None)
271 renderer=None)
269 def repo_commit_show(self):
272 def repo_commit_show(self):
270 commit_id = self.request.matchdict['commit_id']
273 commit_id = self.request.matchdict['commit_id']
271 return self._commit(commit_id, method='show')
274 return self._commit(commit_id, method='show')
272
275
273 @LoginRequired()
276 @LoginRequired()
274 @HasRepoPermissionAnyDecorator(
277 @HasRepoPermissionAnyDecorator(
275 'repository.read', 'repository.write', 'repository.admin')
278 'repository.read', 'repository.write', 'repository.admin')
276 @view_config(
279 @view_config(
277 route_name='repo_commit_raw', request_method='GET',
280 route_name='repo_commit_raw', request_method='GET',
278 renderer=None)
281 renderer=None)
279 @view_config(
282 @view_config(
280 route_name='repo_commit_raw_deprecated', request_method='GET',
283 route_name='repo_commit_raw_deprecated', request_method='GET',
281 renderer=None)
284 renderer=None)
282 def repo_commit_raw(self):
285 def repo_commit_raw(self):
283 commit_id = self.request.matchdict['commit_id']
286 commit_id = self.request.matchdict['commit_id']
284 return self._commit(commit_id, method='raw')
287 return self._commit(commit_id, method='raw')
285
288
286 @LoginRequired()
289 @LoginRequired()
287 @HasRepoPermissionAnyDecorator(
290 @HasRepoPermissionAnyDecorator(
288 'repository.read', 'repository.write', 'repository.admin')
291 'repository.read', 'repository.write', 'repository.admin')
289 @view_config(
292 @view_config(
290 route_name='repo_commit_patch', request_method='GET',
293 route_name='repo_commit_patch', request_method='GET',
291 renderer=None)
294 renderer=None)
292 def repo_commit_patch(self):
295 def repo_commit_patch(self):
293 commit_id = self.request.matchdict['commit_id']
296 commit_id = self.request.matchdict['commit_id']
294 return self._commit(commit_id, method='patch')
297 return self._commit(commit_id, method='patch')
295
298
296 @LoginRequired()
299 @LoginRequired()
297 @HasRepoPermissionAnyDecorator(
300 @HasRepoPermissionAnyDecorator(
298 'repository.read', 'repository.write', 'repository.admin')
301 'repository.read', 'repository.write', 'repository.admin')
299 @view_config(
302 @view_config(
300 route_name='repo_commit_download', request_method='GET',
303 route_name='repo_commit_download', request_method='GET',
301 renderer=None)
304 renderer=None)
302 def repo_commit_download(self):
305 def repo_commit_download(self):
303 commit_id = self.request.matchdict['commit_id']
306 commit_id = self.request.matchdict['commit_id']
304 return self._commit(commit_id, method='download')
307 return self._commit(commit_id, method='download')
305
308
306 @LoginRequired()
309 @LoginRequired()
307 @NotAnonymous()
310 @NotAnonymous()
308 @HasRepoPermissionAnyDecorator(
311 @HasRepoPermissionAnyDecorator(
309 'repository.read', 'repository.write', 'repository.admin')
312 'repository.read', 'repository.write', 'repository.admin')
310 @CSRFRequired()
313 @CSRFRequired()
311 @view_config(
314 @view_config(
312 route_name='repo_commit_comment_create', request_method='POST',
315 route_name='repo_commit_comment_create', request_method='POST',
313 renderer='json_ext')
316 renderer='json_ext')
314 def repo_commit_comment_create(self):
317 def repo_commit_comment_create(self):
315 _ = self.request.translate
318 _ = self.request.translate
316 commit_id = self.request.matchdict['commit_id']
319 commit_id = self.request.matchdict['commit_id']
317
320
318 c = self.load_default_context()
321 c = self.load_default_context()
319 status = self.request.POST.get('changeset_status', None)
322 status = self.request.POST.get('changeset_status', None)
320 text = self.request.POST.get('text')
323 text = self.request.POST.get('text')
321 comment_type = self.request.POST.get('comment_type')
324 comment_type = self.request.POST.get('comment_type')
322 resolves_comment_id = self.request.POST.get('resolves_comment_id', None)
325 resolves_comment_id = self.request.POST.get('resolves_comment_id', None)
323
326
324 if status:
327 if status:
325 text = text or (_('Status change %(transition_icon)s %(status)s')
328 text = text or (_('Status change %(transition_icon)s %(status)s')
326 % {'transition_icon': '>',
329 % {'transition_icon': '>',
327 'status': ChangesetStatus.get_status_lbl(status)})
330 'status': ChangesetStatus.get_status_lbl(status)})
328
331
329 multi_commit_ids = []
332 multi_commit_ids = []
330 for _commit_id in self.request.POST.get('commit_ids', '').split(','):
333 for _commit_id in self.request.POST.get('commit_ids', '').split(','):
331 if _commit_id not in ['', None, EmptyCommit.raw_id]:
334 if _commit_id not in ['', None, EmptyCommit.raw_id]:
332 if _commit_id not in multi_commit_ids:
335 if _commit_id not in multi_commit_ids:
333 multi_commit_ids.append(_commit_id)
336 multi_commit_ids.append(_commit_id)
334
337
335 commit_ids = multi_commit_ids or [commit_id]
338 commit_ids = multi_commit_ids or [commit_id]
336
339
337 comment = None
340 comment = None
338 for current_id in filter(None, commit_ids):
341 for current_id in filter(None, commit_ids):
339 comment = CommentsModel().create(
342 comment = CommentsModel().create(
340 text=text,
343 text=text,
341 repo=self.db_repo.repo_id,
344 repo=self.db_repo.repo_id,
342 user=self._rhodecode_db_user.user_id,
345 user=self._rhodecode_db_user.user_id,
343 commit_id=current_id,
346 commit_id=current_id,
344 f_path=self.request.POST.get('f_path'),
347 f_path=self.request.POST.get('f_path'),
345 line_no=self.request.POST.get('line'),
348 line_no=self.request.POST.get('line'),
346 status_change=(ChangesetStatus.get_status_lbl(status)
349 status_change=(ChangesetStatus.get_status_lbl(status)
347 if status else None),
350 if status else None),
348 status_change_type=status,
351 status_change_type=status,
349 comment_type=comment_type,
352 comment_type=comment_type,
350 resolves_comment_id=resolves_comment_id,
353 resolves_comment_id=resolves_comment_id,
351 auth_user=self._rhodecode_user
354 auth_user=self._rhodecode_user
352 )
355 )
353
356
354 # get status if set !
357 # get status if set !
355 if status:
358 if status:
356 # if latest status was from pull request and it's closed
359 # if latest status was from pull request and it's closed
357 # disallow changing status !
360 # disallow changing status !
358 # dont_allow_on_closed_pull_request = True !
361 # dont_allow_on_closed_pull_request = True !
359
362
360 try:
363 try:
361 ChangesetStatusModel().set_status(
364 ChangesetStatusModel().set_status(
362 self.db_repo.repo_id,
365 self.db_repo.repo_id,
363 status,
366 status,
364 self._rhodecode_db_user.user_id,
367 self._rhodecode_db_user.user_id,
365 comment,
368 comment,
366 revision=current_id,
369 revision=current_id,
367 dont_allow_on_closed_pull_request=True
370 dont_allow_on_closed_pull_request=True
368 )
371 )
369 except StatusChangeOnClosedPullRequestError:
372 except StatusChangeOnClosedPullRequestError:
370 msg = _('Changing the status of a commit associated with '
373 msg = _('Changing the status of a commit associated with '
371 'a closed pull request is not allowed')
374 'a closed pull request is not allowed')
372 log.exception(msg)
375 log.exception(msg)
373 h.flash(msg, category='warning')
376 h.flash(msg, category='warning')
374 raise HTTPFound(h.route_path(
377 raise HTTPFound(h.route_path(
375 'repo_commit', repo_name=self.db_repo_name,
378 'repo_commit', repo_name=self.db_repo_name,
376 commit_id=current_id))
379 commit_id=current_id))
377
380
378 # finalize, commit and redirect
381 # finalize, commit and redirect
379 Session().commit()
382 Session().commit()
380
383
381 data = {
384 data = {
382 'target_id': h.safeid(h.safe_unicode(
385 'target_id': h.safeid(h.safe_unicode(
383 self.request.POST.get('f_path'))),
386 self.request.POST.get('f_path'))),
384 }
387 }
385 if comment:
388 if comment:
386 c.co = comment
389 c.co = comment
387 rendered_comment = render(
390 rendered_comment = render(
388 'rhodecode:templates/changeset/changeset_comment_block.mako',
391 'rhodecode:templates/changeset/changeset_comment_block.mako',
389 self._get_template_context(c), self.request)
392 self._get_template_context(c), self.request)
390
393
391 data.update(comment.get_dict())
394 data.update(comment.get_dict())
392 data.update({'rendered_text': rendered_comment})
395 data.update({'rendered_text': rendered_comment})
393
396
394 return data
397 return data
395
398
396 @LoginRequired()
399 @LoginRequired()
397 @NotAnonymous()
400 @NotAnonymous()
398 @HasRepoPermissionAnyDecorator(
401 @HasRepoPermissionAnyDecorator(
399 'repository.read', 'repository.write', 'repository.admin')
402 'repository.read', 'repository.write', 'repository.admin')
400 @CSRFRequired()
403 @CSRFRequired()
401 @view_config(
404 @view_config(
402 route_name='repo_commit_comment_preview', request_method='POST',
405 route_name='repo_commit_comment_preview', request_method='POST',
403 renderer='string', xhr=True)
406 renderer='string', xhr=True)
404 def repo_commit_comment_preview(self):
407 def repo_commit_comment_preview(self):
405 # Technically a CSRF token is not needed as no state changes with this
408 # Technically a CSRF token is not needed as no state changes with this
406 # call. However, as this is a POST is better to have it, so automated
409 # call. However, as this is a POST is better to have it, so automated
407 # tools don't flag it as potential CSRF.
410 # tools don't flag it as potential CSRF.
408 # Post is required because the payload could be bigger than the maximum
411 # Post is required because the payload could be bigger than the maximum
409 # allowed by GET.
412 # allowed by GET.
410
413
411 text = self.request.POST.get('text')
414 text = self.request.POST.get('text')
412 renderer = self.request.POST.get('renderer') or 'rst'
415 renderer = self.request.POST.get('renderer') or 'rst'
413 if text:
416 if text:
414 return h.render(text, renderer=renderer, mentions=True)
417 return h.render(text, renderer=renderer, mentions=True)
415 return ''
418 return ''
416
419
417 @LoginRequired()
420 @LoginRequired()
418 @NotAnonymous()
421 @NotAnonymous()
419 @HasRepoPermissionAnyDecorator(
422 @HasRepoPermissionAnyDecorator(
420 'repository.read', 'repository.write', 'repository.admin')
423 'repository.read', 'repository.write', 'repository.admin')
421 @CSRFRequired()
424 @CSRFRequired()
422 @view_config(
425 @view_config(
423 route_name='repo_commit_comment_delete', request_method='POST',
426 route_name='repo_commit_comment_delete', request_method='POST',
424 renderer='json_ext')
427 renderer='json_ext')
425 def repo_commit_comment_delete(self):
428 def repo_commit_comment_delete(self):
426 commit_id = self.request.matchdict['commit_id']
429 commit_id = self.request.matchdict['commit_id']
427 comment_id = self.request.matchdict['comment_id']
430 comment_id = self.request.matchdict['comment_id']
428
431
429 comment = ChangesetComment.get_or_404(comment_id)
432 comment = ChangesetComment.get_or_404(comment_id)
430 if not comment:
433 if not comment:
431 log.debug('Comment with id:%s not found, skipping', comment_id)
434 log.debug('Comment with id:%s not found, skipping', comment_id)
432 # comment already deleted in another call probably
435 # comment already deleted in another call probably
433 return True
436 return True
434
437
435 is_repo_admin = h.HasRepoPermissionAny('repository.admin')(self.db_repo_name)
438 is_repo_admin = h.HasRepoPermissionAny('repository.admin')(self.db_repo_name)
436 super_admin = h.HasPermissionAny('hg.admin')()
439 super_admin = h.HasPermissionAny('hg.admin')()
437 comment_owner = (comment.author.user_id == self._rhodecode_db_user.user_id)
440 comment_owner = (comment.author.user_id == self._rhodecode_db_user.user_id)
438 is_repo_comment = comment.repo.repo_name == self.db_repo_name
441 is_repo_comment = comment.repo.repo_name == self.db_repo_name
439 comment_repo_admin = is_repo_admin and is_repo_comment
442 comment_repo_admin = is_repo_admin and is_repo_comment
440
443
441 if super_admin or comment_owner or comment_repo_admin:
444 if super_admin or comment_owner or comment_repo_admin:
442 CommentsModel().delete(comment=comment, auth_user=self._rhodecode_user)
445 CommentsModel().delete(comment=comment, auth_user=self._rhodecode_user)
443 Session().commit()
446 Session().commit()
444 return True
447 return True
445 else:
448 else:
446 log.warning('No permissions for user %s to delete comment_id: %s',
449 log.warning('No permissions for user %s to delete comment_id: %s',
447 self._rhodecode_db_user, comment_id)
450 self._rhodecode_db_user, comment_id)
448 raise HTTPNotFound()
451 raise HTTPNotFound()
449
452
450 @LoginRequired()
453 @LoginRequired()
451 @HasRepoPermissionAnyDecorator(
454 @HasRepoPermissionAnyDecorator(
452 'repository.read', 'repository.write', 'repository.admin')
455 'repository.read', 'repository.write', 'repository.admin')
453 @view_config(
456 @view_config(
454 route_name='repo_commit_data', request_method='GET',
457 route_name='repo_commit_data', request_method='GET',
455 renderer='json_ext', xhr=True)
458 renderer='json_ext', xhr=True)
456 def repo_commit_data(self):
459 def repo_commit_data(self):
457 commit_id = self.request.matchdict['commit_id']
460 commit_id = self.request.matchdict['commit_id']
458 self.load_default_context()
461 self.load_default_context()
459
462
460 try:
463 try:
461 return self.rhodecode_vcs_repo.get_commit(commit_id=commit_id)
464 return self.rhodecode_vcs_repo.get_commit(commit_id=commit_id)
462 except CommitDoesNotExistError as e:
465 except CommitDoesNotExistError as e:
463 return EmptyCommit(message=str(e))
466 return EmptyCommit(message=str(e))
464
467
465 @LoginRequired()
468 @LoginRequired()
466 @HasRepoPermissionAnyDecorator(
469 @HasRepoPermissionAnyDecorator(
467 'repository.read', 'repository.write', 'repository.admin')
470 'repository.read', 'repository.write', 'repository.admin')
468 @view_config(
471 @view_config(
469 route_name='repo_commit_children', request_method='GET',
472 route_name='repo_commit_children', request_method='GET',
470 renderer='json_ext', xhr=True)
473 renderer='json_ext', xhr=True)
471 def repo_commit_children(self):
474 def repo_commit_children(self):
472 commit_id = self.request.matchdict['commit_id']
475 commit_id = self.request.matchdict['commit_id']
473 self.load_default_context()
476 self.load_default_context()
474
477
475 try:
478 try:
476 commit = self.rhodecode_vcs_repo.get_commit(commit_id=commit_id)
479 commit = self.rhodecode_vcs_repo.get_commit(commit_id=commit_id)
477 children = commit.children
480 children = commit.children
478 except CommitDoesNotExistError:
481 except CommitDoesNotExistError:
479 children = []
482 children = []
480
483
481 result = {"results": children}
484 result = {"results": children}
482 return result
485 return result
483
486
484 @LoginRequired()
487 @LoginRequired()
485 @HasRepoPermissionAnyDecorator(
488 @HasRepoPermissionAnyDecorator(
486 'repository.read', 'repository.write', 'repository.admin')
489 'repository.read', 'repository.write', 'repository.admin')
487 @view_config(
490 @view_config(
488 route_name='repo_commit_parents', request_method='GET',
491 route_name='repo_commit_parents', request_method='GET',
489 renderer='json_ext')
492 renderer='json_ext')
490 def repo_commit_parents(self):
493 def repo_commit_parents(self):
491 commit_id = self.request.matchdict['commit_id']
494 commit_id = self.request.matchdict['commit_id']
492 self.load_default_context()
495 self.load_default_context()
493
496
494 try:
497 try:
495 commit = self.rhodecode_vcs_repo.get_commit(commit_id=commit_id)
498 commit = self.rhodecode_vcs_repo.get_commit(commit_id=commit_id)
496 parents = commit.parents
499 parents = commit.parents
497 except CommitDoesNotExistError:
500 except CommitDoesNotExistError:
498 parents = []
501 parents = []
499 result = {"results": parents}
502 result = {"results": parents}
500 return result
503 return result
@@ -1,700 +1,717 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2
2
3 # Copyright (C) 2011-2019 RhodeCode GmbH
3 # Copyright (C) 2011-2019 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 comments model for RhodeCode
22 comments model for RhodeCode
23 """
23 """
24
24
25 import logging
25 import logging
26 import traceback
26 import traceback
27 import collections
27 import collections
28
28
29 from pyramid.threadlocal import get_current_registry, get_current_request
29 from pyramid.threadlocal import get_current_registry, get_current_request
30 from sqlalchemy.sql.expression import null
30 from sqlalchemy.sql.expression import null
31 from sqlalchemy.sql.functions import coalesce
31 from sqlalchemy.sql.functions import coalesce
32
32
33 from rhodecode.lib import helpers as h, diffs, channelstream
33 from rhodecode.lib import helpers as h, diffs, channelstream
34 from rhodecode.lib import audit_logger
34 from rhodecode.lib import audit_logger
35 from rhodecode.lib.utils2 import extract_mentioned_users, safe_str
35 from rhodecode.lib.utils2 import extract_mentioned_users, safe_str
36 from rhodecode.model import BaseModel
36 from rhodecode.model import BaseModel
37 from rhodecode.model.db import (
37 from rhodecode.model.db import (
38 ChangesetComment, User, Notification, PullRequest, AttributeDict)
38 ChangesetComment, User, Notification, PullRequest, AttributeDict)
39 from rhodecode.model.notification import NotificationModel
39 from rhodecode.model.notification import NotificationModel
40 from rhodecode.model.meta import Session
40 from rhodecode.model.meta import Session
41 from rhodecode.model.settings import VcsSettingsModel
41 from rhodecode.model.settings import VcsSettingsModel
42 from rhodecode.model.notification import EmailNotificationModel
42 from rhodecode.model.notification import EmailNotificationModel
43 from rhodecode.model.validation_schema.schemas import comment_schema
43 from rhodecode.model.validation_schema.schemas import comment_schema
44
44
45
45
46 log = logging.getLogger(__name__)
46 log = logging.getLogger(__name__)
47
47
48
48
49 class CommentsModel(BaseModel):
49 class CommentsModel(BaseModel):
50
50
51 cls = ChangesetComment
51 cls = ChangesetComment
52
52
53 DIFF_CONTEXT_BEFORE = 3
53 DIFF_CONTEXT_BEFORE = 3
54 DIFF_CONTEXT_AFTER = 3
54 DIFF_CONTEXT_AFTER = 3
55
55
56 def __get_commit_comment(self, changeset_comment):
56 def __get_commit_comment(self, changeset_comment):
57 return self._get_instance(ChangesetComment, changeset_comment)
57 return self._get_instance(ChangesetComment, changeset_comment)
58
58
59 def __get_pull_request(self, pull_request):
59 def __get_pull_request(self, pull_request):
60 return self._get_instance(PullRequest, pull_request)
60 return self._get_instance(PullRequest, pull_request)
61
61
62 def _extract_mentions(self, s):
62 def _extract_mentions(self, s):
63 user_objects = []
63 user_objects = []
64 for username in extract_mentioned_users(s):
64 for username in extract_mentioned_users(s):
65 user_obj = User.get_by_username(username, case_insensitive=True)
65 user_obj = User.get_by_username(username, case_insensitive=True)
66 if user_obj:
66 if user_obj:
67 user_objects.append(user_obj)
67 user_objects.append(user_obj)
68 return user_objects
68 return user_objects
69
69
70 def _get_renderer(self, global_renderer='rst', request=None):
70 def _get_renderer(self, global_renderer='rst', request=None):
71 request = request or get_current_request()
71 request = request or get_current_request()
72
72
73 try:
73 try:
74 global_renderer = request.call_context.visual.default_renderer
74 global_renderer = request.call_context.visual.default_renderer
75 except AttributeError:
75 except AttributeError:
76 log.debug("Renderer not set, falling back "
76 log.debug("Renderer not set, falling back "
77 "to default renderer '%s'", global_renderer)
77 "to default renderer '%s'", global_renderer)
78 except Exception:
78 except Exception:
79 log.error(traceback.format_exc())
79 log.error(traceback.format_exc())
80 return global_renderer
80 return global_renderer
81
81
82 def aggregate_comments(self, comments, versions, show_version, inline=False):
82 def aggregate_comments(self, comments, versions, show_version, inline=False):
83 # group by versions, and count until, and display objects
83 # group by versions, and count until, and display objects
84
84
85 comment_groups = collections.defaultdict(list)
85 comment_groups = collections.defaultdict(list)
86 [comment_groups[
86 [comment_groups[
87 _co.pull_request_version_id].append(_co) for _co in comments]
87 _co.pull_request_version_id].append(_co) for _co in comments]
88
88
89 def yield_comments(pos):
89 def yield_comments(pos):
90 for co in comment_groups[pos]:
90 for co in comment_groups[pos]:
91 yield co
91 yield co
92
92
93 comment_versions = collections.defaultdict(
93 comment_versions = collections.defaultdict(
94 lambda: collections.defaultdict(list))
94 lambda: collections.defaultdict(list))
95 prev_prvid = -1
95 prev_prvid = -1
96 # fake last entry with None, to aggregate on "latest" version which
96 # fake last entry with None, to aggregate on "latest" version which
97 # doesn't have an pull_request_version_id
97 # doesn't have an pull_request_version_id
98 for ver in versions + [AttributeDict({'pull_request_version_id': None})]:
98 for ver in versions + [AttributeDict({'pull_request_version_id': None})]:
99 prvid = ver.pull_request_version_id
99 prvid = ver.pull_request_version_id
100 if prev_prvid == -1:
100 if prev_prvid == -1:
101 prev_prvid = prvid
101 prev_prvid = prvid
102
102
103 for co in yield_comments(prvid):
103 for co in yield_comments(prvid):
104 comment_versions[prvid]['at'].append(co)
104 comment_versions[prvid]['at'].append(co)
105
105
106 # save until
106 # save until
107 current = comment_versions[prvid]['at']
107 current = comment_versions[prvid]['at']
108 prev_until = comment_versions[prev_prvid]['until']
108 prev_until = comment_versions[prev_prvid]['until']
109 cur_until = prev_until + current
109 cur_until = prev_until + current
110 comment_versions[prvid]['until'].extend(cur_until)
110 comment_versions[prvid]['until'].extend(cur_until)
111
111
112 # save outdated
112 # save outdated
113 if inline:
113 if inline:
114 outdated = [x for x in cur_until
114 outdated = [x for x in cur_until
115 if x.outdated_at_version(show_version)]
115 if x.outdated_at_version(show_version)]
116 else:
116 else:
117 outdated = [x for x in cur_until
117 outdated = [x for x in cur_until
118 if x.older_than_version(show_version)]
118 if x.older_than_version(show_version)]
119 display = [x for x in cur_until if x not in outdated]
119 display = [x for x in cur_until if x not in outdated]
120
120
121 comment_versions[prvid]['outdated'] = outdated
121 comment_versions[prvid]['outdated'] = outdated
122 comment_versions[prvid]['display'] = display
122 comment_versions[prvid]['display'] = display
123
123
124 prev_prvid = prvid
124 prev_prvid = prvid
125
125
126 return comment_versions
126 return comment_versions
127
127
128 def get_repository_comments(self, repo, comment_type=None, user=None, commit_id=None):
128 def get_repository_comments(self, repo, comment_type=None, user=None, commit_id=None):
129 qry = Session().query(ChangesetComment) \
129 qry = Session().query(ChangesetComment) \
130 .filter(ChangesetComment.repo == repo)
130 .filter(ChangesetComment.repo == repo)
131
131
132 if comment_type and comment_type in ChangesetComment.COMMENT_TYPES:
132 if comment_type and comment_type in ChangesetComment.COMMENT_TYPES:
133 qry = qry.filter(ChangesetComment.comment_type == comment_type)
133 qry = qry.filter(ChangesetComment.comment_type == comment_type)
134
134
135 if user:
135 if user:
136 user = self._get_user(user)
136 user = self._get_user(user)
137 if user:
137 if user:
138 qry = qry.filter(ChangesetComment.user_id == user.user_id)
138 qry = qry.filter(ChangesetComment.user_id == user.user_id)
139
139
140 if commit_id:
140 if commit_id:
141 qry = qry.filter(ChangesetComment.revision == commit_id)
141 qry = qry.filter(ChangesetComment.revision == commit_id)
142
142
143 qry = qry.order_by(ChangesetComment.created_on)
143 qry = qry.order_by(ChangesetComment.created_on)
144 return qry.all()
144 return qry.all()
145
145
146 def get_repository_unresolved_todos(self, repo):
146 def get_repository_unresolved_todos(self, repo):
147 todos = Session().query(ChangesetComment) \
147 todos = Session().query(ChangesetComment) \
148 .filter(ChangesetComment.repo == repo) \
148 .filter(ChangesetComment.repo == repo) \
149 .filter(ChangesetComment.resolved_by == None) \
149 .filter(ChangesetComment.resolved_by == None) \
150 .filter(ChangesetComment.comment_type
150 .filter(ChangesetComment.comment_type
151 == ChangesetComment.COMMENT_TYPE_TODO)
151 == ChangesetComment.COMMENT_TYPE_TODO)
152 todos = todos.all()
152 todos = todos.all()
153
153
154 return todos
154 return todos
155
155
156 def get_pull_request_unresolved_todos(self, pull_request, show_outdated=True):
156 def get_pull_request_unresolved_todos(self, pull_request, show_outdated=True):
157
157
158 todos = Session().query(ChangesetComment) \
158 todos = Session().query(ChangesetComment) \
159 .filter(ChangesetComment.pull_request == pull_request) \
159 .filter(ChangesetComment.pull_request == pull_request) \
160 .filter(ChangesetComment.resolved_by == None) \
160 .filter(ChangesetComment.resolved_by == None) \
161 .filter(ChangesetComment.comment_type
161 .filter(ChangesetComment.comment_type
162 == ChangesetComment.COMMENT_TYPE_TODO)
162 == ChangesetComment.COMMENT_TYPE_TODO)
163
163
164 if not show_outdated:
164 if not show_outdated:
165 todos = todos.filter(
165 todos = todos.filter(
166 coalesce(ChangesetComment.display_state, '') !=
166 coalesce(ChangesetComment.display_state, '') !=
167 ChangesetComment.COMMENT_OUTDATED)
167 ChangesetComment.COMMENT_OUTDATED)
168
168
169 todos = todos.all()
169 todos = todos.all()
170
170
171 return todos
171 return todos
172
172
173 def get_commit_unresolved_todos(self, commit_id, show_outdated=True):
173 def get_commit_unresolved_todos(self, commit_id, show_outdated=True):
174
174
175 todos = Session().query(ChangesetComment) \
175 todos = Session().query(ChangesetComment) \
176 .filter(ChangesetComment.revision == commit_id) \
176 .filter(ChangesetComment.revision == commit_id) \
177 .filter(ChangesetComment.resolved_by == None) \
177 .filter(ChangesetComment.resolved_by == None) \
178 .filter(ChangesetComment.comment_type
178 .filter(ChangesetComment.comment_type
179 == ChangesetComment.COMMENT_TYPE_TODO)
179 == ChangesetComment.COMMENT_TYPE_TODO)
180
180
181 if not show_outdated:
181 if not show_outdated:
182 todos = todos.filter(
182 todos = todos.filter(
183 coalesce(ChangesetComment.display_state, '') !=
183 coalesce(ChangesetComment.display_state, '') !=
184 ChangesetComment.COMMENT_OUTDATED)
184 ChangesetComment.COMMENT_OUTDATED)
185
185
186 todos = todos.all()
186 todos = todos.all()
187
187
188 return todos
188 return todos
189
189
190 def get_commit_resolved_todos(self, commit_id, show_outdated=True):
191
192 todos = Session().query(ChangesetComment) \
193 .filter(ChangesetComment.revision == commit_id) \
194 .filter(ChangesetComment.resolved_by != None) \
195 .filter(ChangesetComment.comment_type
196 == ChangesetComment.COMMENT_TYPE_TODO)
197
198 if not show_outdated:
199 todos = todos.filter(
200 coalesce(ChangesetComment.display_state, '') !=
201 ChangesetComment.COMMENT_OUTDATED)
202
203 todos = todos.all()
204
205 return todos
206
190 def _log_audit_action(self, action, action_data, auth_user, comment):
207 def _log_audit_action(self, action, action_data, auth_user, comment):
191 audit_logger.store(
208 audit_logger.store(
192 action=action,
209 action=action,
193 action_data=action_data,
210 action_data=action_data,
194 user=auth_user,
211 user=auth_user,
195 repo=comment.repo)
212 repo=comment.repo)
196
213
197 def create(self, text, repo, user, commit_id=None, pull_request=None,
214 def create(self, text, repo, user, commit_id=None, pull_request=None,
198 f_path=None, line_no=None, status_change=None,
215 f_path=None, line_no=None, status_change=None,
199 status_change_type=None, comment_type=None,
216 status_change_type=None, comment_type=None,
200 resolves_comment_id=None, closing_pr=False, send_email=True,
217 resolves_comment_id=None, closing_pr=False, send_email=True,
201 renderer=None, auth_user=None):
218 renderer=None, auth_user=None):
202 """
219 """
203 Creates new comment for commit or pull request.
220 Creates new comment for commit or pull request.
204 IF status_change is not none this comment is associated with a
221 IF status_change is not none this comment is associated with a
205 status change of commit or commit associated with pull request
222 status change of commit or commit associated with pull request
206
223
207 :param text:
224 :param text:
208 :param repo:
225 :param repo:
209 :param user:
226 :param user:
210 :param commit_id:
227 :param commit_id:
211 :param pull_request:
228 :param pull_request:
212 :param f_path:
229 :param f_path:
213 :param line_no:
230 :param line_no:
214 :param status_change: Label for status change
231 :param status_change: Label for status change
215 :param comment_type: Type of comment
232 :param comment_type: Type of comment
216 :param status_change_type: type of status change
233 :param status_change_type: type of status change
217 :param closing_pr:
234 :param closing_pr:
218 :param send_email:
235 :param send_email:
219 :param renderer: pick renderer for this comment
236 :param renderer: pick renderer for this comment
220 """
237 """
221
238
222 if not text:
239 if not text:
223 log.warning('Missing text for comment, skipping...')
240 log.warning('Missing text for comment, skipping...')
224 return
241 return
225 request = get_current_request()
242 request = get_current_request()
226 _ = request.translate
243 _ = request.translate
227
244
228 if not renderer:
245 if not renderer:
229 renderer = self._get_renderer(request=request)
246 renderer = self._get_renderer(request=request)
230
247
231 repo = self._get_repo(repo)
248 repo = self._get_repo(repo)
232 user = self._get_user(user)
249 user = self._get_user(user)
233 auth_user = auth_user or user
250 auth_user = auth_user or user
234
251
235 schema = comment_schema.CommentSchema()
252 schema = comment_schema.CommentSchema()
236 validated_kwargs = schema.deserialize(dict(
253 validated_kwargs = schema.deserialize(dict(
237 comment_body=text,
254 comment_body=text,
238 comment_type=comment_type,
255 comment_type=comment_type,
239 comment_file=f_path,
256 comment_file=f_path,
240 comment_line=line_no,
257 comment_line=line_no,
241 renderer_type=renderer,
258 renderer_type=renderer,
242 status_change=status_change_type,
259 status_change=status_change_type,
243 resolves_comment_id=resolves_comment_id,
260 resolves_comment_id=resolves_comment_id,
244 repo=repo.repo_id,
261 repo=repo.repo_id,
245 user=user.user_id,
262 user=user.user_id,
246 ))
263 ))
247
264
248 comment = ChangesetComment()
265 comment = ChangesetComment()
249 comment.renderer = validated_kwargs['renderer_type']
266 comment.renderer = validated_kwargs['renderer_type']
250 comment.text = validated_kwargs['comment_body']
267 comment.text = validated_kwargs['comment_body']
251 comment.f_path = validated_kwargs['comment_file']
268 comment.f_path = validated_kwargs['comment_file']
252 comment.line_no = validated_kwargs['comment_line']
269 comment.line_no = validated_kwargs['comment_line']
253 comment.comment_type = validated_kwargs['comment_type']
270 comment.comment_type = validated_kwargs['comment_type']
254
271
255 comment.repo = repo
272 comment.repo = repo
256 comment.author = user
273 comment.author = user
257 resolved_comment = self.__get_commit_comment(
274 resolved_comment = self.__get_commit_comment(
258 validated_kwargs['resolves_comment_id'])
275 validated_kwargs['resolves_comment_id'])
259 # check if the comment actually belongs to this PR
276 # check if the comment actually belongs to this PR
260 if resolved_comment and resolved_comment.pull_request and \
277 if resolved_comment and resolved_comment.pull_request and \
261 resolved_comment.pull_request != pull_request:
278 resolved_comment.pull_request != pull_request:
262 log.warning('Comment tried to resolved unrelated todo comment: %s',
279 log.warning('Comment tried to resolved unrelated todo comment: %s',
263 resolved_comment)
280 resolved_comment)
264 # comment not bound to this pull request, forbid
281 # comment not bound to this pull request, forbid
265 resolved_comment = None
282 resolved_comment = None
266
283
267 elif resolved_comment and resolved_comment.repo and \
284 elif resolved_comment and resolved_comment.repo and \
268 resolved_comment.repo != repo:
285 resolved_comment.repo != repo:
269 log.warning('Comment tried to resolved unrelated todo comment: %s',
286 log.warning('Comment tried to resolved unrelated todo comment: %s',
270 resolved_comment)
287 resolved_comment)
271 # comment not bound to this repo, forbid
288 # comment not bound to this repo, forbid
272 resolved_comment = None
289 resolved_comment = None
273
290
274 comment.resolved_comment = resolved_comment
291 comment.resolved_comment = resolved_comment
275
292
276 pull_request_id = pull_request
293 pull_request_id = pull_request
277
294
278 commit_obj = None
295 commit_obj = None
279 pull_request_obj = None
296 pull_request_obj = None
280
297
281 if commit_id:
298 if commit_id:
282 notification_type = EmailNotificationModel.TYPE_COMMIT_COMMENT
299 notification_type = EmailNotificationModel.TYPE_COMMIT_COMMENT
283 # do a lookup, so we don't pass something bad here
300 # do a lookup, so we don't pass something bad here
284 commit_obj = repo.scm_instance().get_commit(commit_id=commit_id)
301 commit_obj = repo.scm_instance().get_commit(commit_id=commit_id)
285 comment.revision = commit_obj.raw_id
302 comment.revision = commit_obj.raw_id
286
303
287 elif pull_request_id:
304 elif pull_request_id:
288 notification_type = EmailNotificationModel.TYPE_PULL_REQUEST_COMMENT
305 notification_type = EmailNotificationModel.TYPE_PULL_REQUEST_COMMENT
289 pull_request_obj = self.__get_pull_request(pull_request_id)
306 pull_request_obj = self.__get_pull_request(pull_request_id)
290 comment.pull_request = pull_request_obj
307 comment.pull_request = pull_request_obj
291 else:
308 else:
292 raise Exception('Please specify commit or pull_request_id')
309 raise Exception('Please specify commit or pull_request_id')
293
310
294 Session().add(comment)
311 Session().add(comment)
295 Session().flush()
312 Session().flush()
296 kwargs = {
313 kwargs = {
297 'user': user,
314 'user': user,
298 'renderer_type': renderer,
315 'renderer_type': renderer,
299 'repo_name': repo.repo_name,
316 'repo_name': repo.repo_name,
300 'status_change': status_change,
317 'status_change': status_change,
301 'status_change_type': status_change_type,
318 'status_change_type': status_change_type,
302 'comment_body': text,
319 'comment_body': text,
303 'comment_file': f_path,
320 'comment_file': f_path,
304 'comment_line': line_no,
321 'comment_line': line_no,
305 'comment_type': comment_type or 'note'
322 'comment_type': comment_type or 'note'
306 }
323 }
307
324
308 if commit_obj:
325 if commit_obj:
309 recipients = ChangesetComment.get_users(
326 recipients = ChangesetComment.get_users(
310 revision=commit_obj.raw_id)
327 revision=commit_obj.raw_id)
311 # add commit author if it's in RhodeCode system
328 # add commit author if it's in RhodeCode system
312 cs_author = User.get_from_cs_author(commit_obj.author)
329 cs_author = User.get_from_cs_author(commit_obj.author)
313 if not cs_author:
330 if not cs_author:
314 # use repo owner if we cannot extract the author correctly
331 # use repo owner if we cannot extract the author correctly
315 cs_author = repo.user
332 cs_author = repo.user
316 recipients += [cs_author]
333 recipients += [cs_author]
317
334
318 commit_comment_url = self.get_url(comment, request=request)
335 commit_comment_url = self.get_url(comment, request=request)
319
336
320 target_repo_url = h.link_to(
337 target_repo_url = h.link_to(
321 repo.repo_name,
338 repo.repo_name,
322 h.route_url('repo_summary', repo_name=repo.repo_name))
339 h.route_url('repo_summary', repo_name=repo.repo_name))
323
340
324 # commit specifics
341 # commit specifics
325 kwargs.update({
342 kwargs.update({
326 'commit': commit_obj,
343 'commit': commit_obj,
327 'commit_message': commit_obj.message,
344 'commit_message': commit_obj.message,
328 'commit_target_repo': target_repo_url,
345 'commit_target_repo': target_repo_url,
329 'commit_comment_url': commit_comment_url,
346 'commit_comment_url': commit_comment_url,
330 })
347 })
331
348
332 elif pull_request_obj:
349 elif pull_request_obj:
333 # get the current participants of this pull request
350 # get the current participants of this pull request
334 recipients = ChangesetComment.get_users(
351 recipients = ChangesetComment.get_users(
335 pull_request_id=pull_request_obj.pull_request_id)
352 pull_request_id=pull_request_obj.pull_request_id)
336 # add pull request author
353 # add pull request author
337 recipients += [pull_request_obj.author]
354 recipients += [pull_request_obj.author]
338
355
339 # add the reviewers to notification
356 # add the reviewers to notification
340 recipients += [x.user for x in pull_request_obj.reviewers]
357 recipients += [x.user for x in pull_request_obj.reviewers]
341
358
342 pr_target_repo = pull_request_obj.target_repo
359 pr_target_repo = pull_request_obj.target_repo
343 pr_source_repo = pull_request_obj.source_repo
360 pr_source_repo = pull_request_obj.source_repo
344
361
345 pr_comment_url = h.route_url(
362 pr_comment_url = h.route_url(
346 'pullrequest_show',
363 'pullrequest_show',
347 repo_name=pr_target_repo.repo_name,
364 repo_name=pr_target_repo.repo_name,
348 pull_request_id=pull_request_obj.pull_request_id,
365 pull_request_id=pull_request_obj.pull_request_id,
349 _anchor='comment-%s' % comment.comment_id)
366 _anchor='comment-%s' % comment.comment_id)
350
367
351 # set some variables for email notification
368 # set some variables for email notification
352 pr_target_repo_url = h.route_url(
369 pr_target_repo_url = h.route_url(
353 'repo_summary', repo_name=pr_target_repo.repo_name)
370 'repo_summary', repo_name=pr_target_repo.repo_name)
354
371
355 pr_source_repo_url = h.route_url(
372 pr_source_repo_url = h.route_url(
356 'repo_summary', repo_name=pr_source_repo.repo_name)
373 'repo_summary', repo_name=pr_source_repo.repo_name)
357
374
358 # pull request specifics
375 # pull request specifics
359 kwargs.update({
376 kwargs.update({
360 'pull_request': pull_request_obj,
377 'pull_request': pull_request_obj,
361 'pr_id': pull_request_obj.pull_request_id,
378 'pr_id': pull_request_obj.pull_request_id,
362 'pr_target_repo': pr_target_repo,
379 'pr_target_repo': pr_target_repo,
363 'pr_target_repo_url': pr_target_repo_url,
380 'pr_target_repo_url': pr_target_repo_url,
364 'pr_source_repo': pr_source_repo,
381 'pr_source_repo': pr_source_repo,
365 'pr_source_repo_url': pr_source_repo_url,
382 'pr_source_repo_url': pr_source_repo_url,
366 'pr_comment_url': pr_comment_url,
383 'pr_comment_url': pr_comment_url,
367 'pr_closing': closing_pr,
384 'pr_closing': closing_pr,
368 })
385 })
369 if send_email:
386 if send_email:
370 # pre-generate the subject for notification itself
387 # pre-generate the subject for notification itself
371 (subject,
388 (subject,
372 _h, _e, # we don't care about those
389 _h, _e, # we don't care about those
373 body_plaintext) = EmailNotificationModel().render_email(
390 body_plaintext) = EmailNotificationModel().render_email(
374 notification_type, **kwargs)
391 notification_type, **kwargs)
375
392
376 mention_recipients = set(
393 mention_recipients = set(
377 self._extract_mentions(text)).difference(recipients)
394 self._extract_mentions(text)).difference(recipients)
378
395
379 # create notification objects, and emails
396 # create notification objects, and emails
380 NotificationModel().create(
397 NotificationModel().create(
381 created_by=user,
398 created_by=user,
382 notification_subject=subject,
399 notification_subject=subject,
383 notification_body=body_plaintext,
400 notification_body=body_plaintext,
384 notification_type=notification_type,
401 notification_type=notification_type,
385 recipients=recipients,
402 recipients=recipients,
386 mention_recipients=mention_recipients,
403 mention_recipients=mention_recipients,
387 email_kwargs=kwargs,
404 email_kwargs=kwargs,
388 )
405 )
389
406
390 Session().flush()
407 Session().flush()
391 if comment.pull_request:
408 if comment.pull_request:
392 action = 'repo.pull_request.comment.create'
409 action = 'repo.pull_request.comment.create'
393 else:
410 else:
394 action = 'repo.commit.comment.create'
411 action = 'repo.commit.comment.create'
395
412
396 comment_data = comment.get_api_data()
413 comment_data = comment.get_api_data()
397 self._log_audit_action(
414 self._log_audit_action(
398 action, {'data': comment_data}, auth_user, comment)
415 action, {'data': comment_data}, auth_user, comment)
399
416
400 msg_url = ''
417 msg_url = ''
401 channel = None
418 channel = None
402 if commit_obj:
419 if commit_obj:
403 msg_url = commit_comment_url
420 msg_url = commit_comment_url
404 repo_name = repo.repo_name
421 repo_name = repo.repo_name
405 channel = u'/repo${}$/commit/{}'.format(
422 channel = u'/repo${}$/commit/{}'.format(
406 repo_name,
423 repo_name,
407 commit_obj.raw_id
424 commit_obj.raw_id
408 )
425 )
409 elif pull_request_obj:
426 elif pull_request_obj:
410 msg_url = pr_comment_url
427 msg_url = pr_comment_url
411 repo_name = pr_target_repo.repo_name
428 repo_name = pr_target_repo.repo_name
412 channel = u'/repo${}$/pr/{}'.format(
429 channel = u'/repo${}$/pr/{}'.format(
413 repo_name,
430 repo_name,
414 pull_request_id
431 pull_request_id
415 )
432 )
416
433
417 message = '<strong>{}</strong> {} - ' \
434 message = '<strong>{}</strong> {} - ' \
418 '<a onclick="window.location=\'{}\';' \
435 '<a onclick="window.location=\'{}\';' \
419 'window.location.reload()">' \
436 'window.location.reload()">' \
420 '<strong>{}</strong></a>'
437 '<strong>{}</strong></a>'
421 message = message.format(
438 message = message.format(
422 user.username, _('made a comment'), msg_url,
439 user.username, _('made a comment'), msg_url,
423 _('Show it now'))
440 _('Show it now'))
424
441
425 channelstream.post_message(
442 channelstream.post_message(
426 channel, message, user.username,
443 channel, message, user.username,
427 registry=get_current_registry())
444 registry=get_current_registry())
428
445
429 return comment
446 return comment
430
447
431 def delete(self, comment, auth_user):
448 def delete(self, comment, auth_user):
432 """
449 """
433 Deletes given comment
450 Deletes given comment
434 """
451 """
435 comment = self.__get_commit_comment(comment)
452 comment = self.__get_commit_comment(comment)
436 old_data = comment.get_api_data()
453 old_data = comment.get_api_data()
437 Session().delete(comment)
454 Session().delete(comment)
438
455
439 if comment.pull_request:
456 if comment.pull_request:
440 action = 'repo.pull_request.comment.delete'
457 action = 'repo.pull_request.comment.delete'
441 else:
458 else:
442 action = 'repo.commit.comment.delete'
459 action = 'repo.commit.comment.delete'
443
460
444 self._log_audit_action(
461 self._log_audit_action(
445 action, {'old_data': old_data}, auth_user, comment)
462 action, {'old_data': old_data}, auth_user, comment)
446
463
447 return comment
464 return comment
448
465
449 def get_all_comments(self, repo_id, revision=None, pull_request=None):
466 def get_all_comments(self, repo_id, revision=None, pull_request=None):
450 q = ChangesetComment.query()\
467 q = ChangesetComment.query()\
451 .filter(ChangesetComment.repo_id == repo_id)
468 .filter(ChangesetComment.repo_id == repo_id)
452 if revision:
469 if revision:
453 q = q.filter(ChangesetComment.revision == revision)
470 q = q.filter(ChangesetComment.revision == revision)
454 elif pull_request:
471 elif pull_request:
455 pull_request = self.__get_pull_request(pull_request)
472 pull_request = self.__get_pull_request(pull_request)
456 q = q.filter(ChangesetComment.pull_request == pull_request)
473 q = q.filter(ChangesetComment.pull_request == pull_request)
457 else:
474 else:
458 raise Exception('Please specify commit or pull_request')
475 raise Exception('Please specify commit or pull_request')
459 q = q.order_by(ChangesetComment.created_on)
476 q = q.order_by(ChangesetComment.created_on)
460 return q.all()
477 return q.all()
461
478
462 def get_url(self, comment, request=None, permalink=False):
479 def get_url(self, comment, request=None, permalink=False):
463 if not request:
480 if not request:
464 request = get_current_request()
481 request = get_current_request()
465
482
466 comment = self.__get_commit_comment(comment)
483 comment = self.__get_commit_comment(comment)
467 if comment.pull_request:
484 if comment.pull_request:
468 pull_request = comment.pull_request
485 pull_request = comment.pull_request
469 if permalink:
486 if permalink:
470 return request.route_url(
487 return request.route_url(
471 'pull_requests_global',
488 'pull_requests_global',
472 pull_request_id=pull_request.pull_request_id,
489 pull_request_id=pull_request.pull_request_id,
473 _anchor='comment-%s' % comment.comment_id)
490 _anchor='comment-%s' % comment.comment_id)
474 else:
491 else:
475 return request.route_url(
492 return request.route_url(
476 'pullrequest_show',
493 'pullrequest_show',
477 repo_name=safe_str(pull_request.target_repo.repo_name),
494 repo_name=safe_str(pull_request.target_repo.repo_name),
478 pull_request_id=pull_request.pull_request_id,
495 pull_request_id=pull_request.pull_request_id,
479 _anchor='comment-%s' % comment.comment_id)
496 _anchor='comment-%s' % comment.comment_id)
480
497
481 else:
498 else:
482 repo = comment.repo
499 repo = comment.repo
483 commit_id = comment.revision
500 commit_id = comment.revision
484
501
485 if permalink:
502 if permalink:
486 return request.route_url(
503 return request.route_url(
487 'repo_commit', repo_name=safe_str(repo.repo_id),
504 'repo_commit', repo_name=safe_str(repo.repo_id),
488 commit_id=commit_id,
505 commit_id=commit_id,
489 _anchor='comment-%s' % comment.comment_id)
506 _anchor='comment-%s' % comment.comment_id)
490
507
491 else:
508 else:
492 return request.route_url(
509 return request.route_url(
493 'repo_commit', repo_name=safe_str(repo.repo_name),
510 'repo_commit', repo_name=safe_str(repo.repo_name),
494 commit_id=commit_id,
511 commit_id=commit_id,
495 _anchor='comment-%s' % comment.comment_id)
512 _anchor='comment-%s' % comment.comment_id)
496
513
497 def get_comments(self, repo_id, revision=None, pull_request=None):
514 def get_comments(self, repo_id, revision=None, pull_request=None):
498 """
515 """
499 Gets main comments based on revision or pull_request_id
516 Gets main comments based on revision or pull_request_id
500
517
501 :param repo_id:
518 :param repo_id:
502 :param revision:
519 :param revision:
503 :param pull_request:
520 :param pull_request:
504 """
521 """
505
522
506 q = ChangesetComment.query()\
523 q = ChangesetComment.query()\
507 .filter(ChangesetComment.repo_id == repo_id)\
524 .filter(ChangesetComment.repo_id == repo_id)\
508 .filter(ChangesetComment.line_no == None)\
525 .filter(ChangesetComment.line_no == None)\
509 .filter(ChangesetComment.f_path == None)
526 .filter(ChangesetComment.f_path == None)
510 if revision:
527 if revision:
511 q = q.filter(ChangesetComment.revision == revision)
528 q = q.filter(ChangesetComment.revision == revision)
512 elif pull_request:
529 elif pull_request:
513 pull_request = self.__get_pull_request(pull_request)
530 pull_request = self.__get_pull_request(pull_request)
514 q = q.filter(ChangesetComment.pull_request == pull_request)
531 q = q.filter(ChangesetComment.pull_request == pull_request)
515 else:
532 else:
516 raise Exception('Please specify commit or pull_request')
533 raise Exception('Please specify commit or pull_request')
517 q = q.order_by(ChangesetComment.created_on)
534 q = q.order_by(ChangesetComment.created_on)
518 return q.all()
535 return q.all()
519
536
520 def get_inline_comments(self, repo_id, revision=None, pull_request=None):
537 def get_inline_comments(self, repo_id, revision=None, pull_request=None):
521 q = self._get_inline_comments_query(repo_id, revision, pull_request)
538 q = self._get_inline_comments_query(repo_id, revision, pull_request)
522 return self._group_comments_by_path_and_line_number(q)
539 return self._group_comments_by_path_and_line_number(q)
523
540
524 def get_inline_comments_count(self, inline_comments, skip_outdated=True,
541 def get_inline_comments_count(self, inline_comments, skip_outdated=True,
525 version=None):
542 version=None):
526 inline_cnt = 0
543 inline_cnt = 0
527 for fname, per_line_comments in inline_comments.iteritems():
544 for fname, per_line_comments in inline_comments.iteritems():
528 for lno, comments in per_line_comments.iteritems():
545 for lno, comments in per_line_comments.iteritems():
529 for comm in comments:
546 for comm in comments:
530 if not comm.outdated_at_version(version) and skip_outdated:
547 if not comm.outdated_at_version(version) and skip_outdated:
531 inline_cnt += 1
548 inline_cnt += 1
532
549
533 return inline_cnt
550 return inline_cnt
534
551
535 def get_outdated_comments(self, repo_id, pull_request):
552 def get_outdated_comments(self, repo_id, pull_request):
536 # TODO: johbo: Remove `repo_id`, it is not needed to find the comments
553 # TODO: johbo: Remove `repo_id`, it is not needed to find the comments
537 # of a pull request.
554 # of a pull request.
538 q = self._all_inline_comments_of_pull_request(pull_request)
555 q = self._all_inline_comments_of_pull_request(pull_request)
539 q = q.filter(
556 q = q.filter(
540 ChangesetComment.display_state ==
557 ChangesetComment.display_state ==
541 ChangesetComment.COMMENT_OUTDATED
558 ChangesetComment.COMMENT_OUTDATED
542 ).order_by(ChangesetComment.comment_id.asc())
559 ).order_by(ChangesetComment.comment_id.asc())
543
560
544 return self._group_comments_by_path_and_line_number(q)
561 return self._group_comments_by_path_and_line_number(q)
545
562
546 def _get_inline_comments_query(self, repo_id, revision, pull_request):
563 def _get_inline_comments_query(self, repo_id, revision, pull_request):
547 # TODO: johbo: Split this into two methods: One for PR and one for
564 # TODO: johbo: Split this into two methods: One for PR and one for
548 # commit.
565 # commit.
549 if revision:
566 if revision:
550 q = Session().query(ChangesetComment).filter(
567 q = Session().query(ChangesetComment).filter(
551 ChangesetComment.repo_id == repo_id,
568 ChangesetComment.repo_id == repo_id,
552 ChangesetComment.line_no != null(),
569 ChangesetComment.line_no != null(),
553 ChangesetComment.f_path != null(),
570 ChangesetComment.f_path != null(),
554 ChangesetComment.revision == revision)
571 ChangesetComment.revision == revision)
555
572
556 elif pull_request:
573 elif pull_request:
557 pull_request = self.__get_pull_request(pull_request)
574 pull_request = self.__get_pull_request(pull_request)
558 if not CommentsModel.use_outdated_comments(pull_request):
575 if not CommentsModel.use_outdated_comments(pull_request):
559 q = self._visible_inline_comments_of_pull_request(pull_request)
576 q = self._visible_inline_comments_of_pull_request(pull_request)
560 else:
577 else:
561 q = self._all_inline_comments_of_pull_request(pull_request)
578 q = self._all_inline_comments_of_pull_request(pull_request)
562
579
563 else:
580 else:
564 raise Exception('Please specify commit or pull_request_id')
581 raise Exception('Please specify commit or pull_request_id')
565 q = q.order_by(ChangesetComment.comment_id.asc())
582 q = q.order_by(ChangesetComment.comment_id.asc())
566 return q
583 return q
567
584
568 def _group_comments_by_path_and_line_number(self, q):
585 def _group_comments_by_path_and_line_number(self, q):
569 comments = q.all()
586 comments = q.all()
570 paths = collections.defaultdict(lambda: collections.defaultdict(list))
587 paths = collections.defaultdict(lambda: collections.defaultdict(list))
571 for co in comments:
588 for co in comments:
572 paths[co.f_path][co.line_no].append(co)
589 paths[co.f_path][co.line_no].append(co)
573 return paths
590 return paths
574
591
575 @classmethod
592 @classmethod
576 def needed_extra_diff_context(cls):
593 def needed_extra_diff_context(cls):
577 return max(cls.DIFF_CONTEXT_BEFORE, cls.DIFF_CONTEXT_AFTER)
594 return max(cls.DIFF_CONTEXT_BEFORE, cls.DIFF_CONTEXT_AFTER)
578
595
579 def outdate_comments(self, pull_request, old_diff_data, new_diff_data):
596 def outdate_comments(self, pull_request, old_diff_data, new_diff_data):
580 if not CommentsModel.use_outdated_comments(pull_request):
597 if not CommentsModel.use_outdated_comments(pull_request):
581 return
598 return
582
599
583 comments = self._visible_inline_comments_of_pull_request(pull_request)
600 comments = self._visible_inline_comments_of_pull_request(pull_request)
584 comments_to_outdate = comments.all()
601 comments_to_outdate = comments.all()
585
602
586 for comment in comments_to_outdate:
603 for comment in comments_to_outdate:
587 self._outdate_one_comment(comment, old_diff_data, new_diff_data)
604 self._outdate_one_comment(comment, old_diff_data, new_diff_data)
588
605
589 def _outdate_one_comment(self, comment, old_diff_proc, new_diff_proc):
606 def _outdate_one_comment(self, comment, old_diff_proc, new_diff_proc):
590 diff_line = _parse_comment_line_number(comment.line_no)
607 diff_line = _parse_comment_line_number(comment.line_no)
591
608
592 try:
609 try:
593 old_context = old_diff_proc.get_context_of_line(
610 old_context = old_diff_proc.get_context_of_line(
594 path=comment.f_path, diff_line=diff_line)
611 path=comment.f_path, diff_line=diff_line)
595 new_context = new_diff_proc.get_context_of_line(
612 new_context = new_diff_proc.get_context_of_line(
596 path=comment.f_path, diff_line=diff_line)
613 path=comment.f_path, diff_line=diff_line)
597 except (diffs.LineNotInDiffException,
614 except (diffs.LineNotInDiffException,
598 diffs.FileNotInDiffException):
615 diffs.FileNotInDiffException):
599 comment.display_state = ChangesetComment.COMMENT_OUTDATED
616 comment.display_state = ChangesetComment.COMMENT_OUTDATED
600 return
617 return
601
618
602 if old_context == new_context:
619 if old_context == new_context:
603 return
620 return
604
621
605 if self._should_relocate_diff_line(diff_line):
622 if self._should_relocate_diff_line(diff_line):
606 new_diff_lines = new_diff_proc.find_context(
623 new_diff_lines = new_diff_proc.find_context(
607 path=comment.f_path, context=old_context,
624 path=comment.f_path, context=old_context,
608 offset=self.DIFF_CONTEXT_BEFORE)
625 offset=self.DIFF_CONTEXT_BEFORE)
609 if not new_diff_lines:
626 if not new_diff_lines:
610 comment.display_state = ChangesetComment.COMMENT_OUTDATED
627 comment.display_state = ChangesetComment.COMMENT_OUTDATED
611 else:
628 else:
612 new_diff_line = self._choose_closest_diff_line(
629 new_diff_line = self._choose_closest_diff_line(
613 diff_line, new_diff_lines)
630 diff_line, new_diff_lines)
614 comment.line_no = _diff_to_comment_line_number(new_diff_line)
631 comment.line_no = _diff_to_comment_line_number(new_diff_line)
615 else:
632 else:
616 comment.display_state = ChangesetComment.COMMENT_OUTDATED
633 comment.display_state = ChangesetComment.COMMENT_OUTDATED
617
634
618 def _should_relocate_diff_line(self, diff_line):
635 def _should_relocate_diff_line(self, diff_line):
619 """
636 """
620 Checks if relocation shall be tried for the given `diff_line`.
637 Checks if relocation shall be tried for the given `diff_line`.
621
638
622 If a comment points into the first lines, then we can have a situation
639 If a comment points into the first lines, then we can have a situation
623 that after an update another line has been added on top. In this case
640 that after an update another line has been added on top. In this case
624 we would find the context still and move the comment around. This
641 we would find the context still and move the comment around. This
625 would be wrong.
642 would be wrong.
626 """
643 """
627 should_relocate = (
644 should_relocate = (
628 (diff_line.new and diff_line.new > self.DIFF_CONTEXT_BEFORE) or
645 (diff_line.new and diff_line.new > self.DIFF_CONTEXT_BEFORE) or
629 (diff_line.old and diff_line.old > self.DIFF_CONTEXT_BEFORE))
646 (diff_line.old and diff_line.old > self.DIFF_CONTEXT_BEFORE))
630 return should_relocate
647 return should_relocate
631
648
632 def _choose_closest_diff_line(self, diff_line, new_diff_lines):
649 def _choose_closest_diff_line(self, diff_line, new_diff_lines):
633 candidate = new_diff_lines[0]
650 candidate = new_diff_lines[0]
634 best_delta = _diff_line_delta(diff_line, candidate)
651 best_delta = _diff_line_delta(diff_line, candidate)
635 for new_diff_line in new_diff_lines[1:]:
652 for new_diff_line in new_diff_lines[1:]:
636 delta = _diff_line_delta(diff_line, new_diff_line)
653 delta = _diff_line_delta(diff_line, new_diff_line)
637 if delta < best_delta:
654 if delta < best_delta:
638 candidate = new_diff_line
655 candidate = new_diff_line
639 best_delta = delta
656 best_delta = delta
640 return candidate
657 return candidate
641
658
642 def _visible_inline_comments_of_pull_request(self, pull_request):
659 def _visible_inline_comments_of_pull_request(self, pull_request):
643 comments = self._all_inline_comments_of_pull_request(pull_request)
660 comments = self._all_inline_comments_of_pull_request(pull_request)
644 comments = comments.filter(
661 comments = comments.filter(
645 coalesce(ChangesetComment.display_state, '') !=
662 coalesce(ChangesetComment.display_state, '') !=
646 ChangesetComment.COMMENT_OUTDATED)
663 ChangesetComment.COMMENT_OUTDATED)
647 return comments
664 return comments
648
665
649 def _all_inline_comments_of_pull_request(self, pull_request):
666 def _all_inline_comments_of_pull_request(self, pull_request):
650 comments = Session().query(ChangesetComment)\
667 comments = Session().query(ChangesetComment)\
651 .filter(ChangesetComment.line_no != None)\
668 .filter(ChangesetComment.line_no != None)\
652 .filter(ChangesetComment.f_path != None)\
669 .filter(ChangesetComment.f_path != None)\
653 .filter(ChangesetComment.pull_request == pull_request)
670 .filter(ChangesetComment.pull_request == pull_request)
654 return comments
671 return comments
655
672
656 def _all_general_comments_of_pull_request(self, pull_request):
673 def _all_general_comments_of_pull_request(self, pull_request):
657 comments = Session().query(ChangesetComment)\
674 comments = Session().query(ChangesetComment)\
658 .filter(ChangesetComment.line_no == None)\
675 .filter(ChangesetComment.line_no == None)\
659 .filter(ChangesetComment.f_path == None)\
676 .filter(ChangesetComment.f_path == None)\
660 .filter(ChangesetComment.pull_request == pull_request)
677 .filter(ChangesetComment.pull_request == pull_request)
661 return comments
678 return comments
662
679
663 @staticmethod
680 @staticmethod
664 def use_outdated_comments(pull_request):
681 def use_outdated_comments(pull_request):
665 settings_model = VcsSettingsModel(repo=pull_request.target_repo)
682 settings_model = VcsSettingsModel(repo=pull_request.target_repo)
666 settings = settings_model.get_general_settings()
683 settings = settings_model.get_general_settings()
667 return settings.get('rhodecode_use_outdated_comments', False)
684 return settings.get('rhodecode_use_outdated_comments', False)
668
685
669
686
670 def _parse_comment_line_number(line_no):
687 def _parse_comment_line_number(line_no):
671 """
688 """
672 Parses line numbers of the form "(o|n)\d+" and returns them in a tuple.
689 Parses line numbers of the form "(o|n)\d+" and returns them in a tuple.
673 """
690 """
674 old_line = None
691 old_line = None
675 new_line = None
692 new_line = None
676 if line_no.startswith('o'):
693 if line_no.startswith('o'):
677 old_line = int(line_no[1:])
694 old_line = int(line_no[1:])
678 elif line_no.startswith('n'):
695 elif line_no.startswith('n'):
679 new_line = int(line_no[1:])
696 new_line = int(line_no[1:])
680 else:
697 else:
681 raise ValueError("Comment lines have to start with either 'o' or 'n'.")
698 raise ValueError("Comment lines have to start with either 'o' or 'n'.")
682 return diffs.DiffLineNumber(old_line, new_line)
699 return diffs.DiffLineNumber(old_line, new_line)
683
700
684
701
685 def _diff_to_comment_line_number(diff_line):
702 def _diff_to_comment_line_number(diff_line):
686 if diff_line.new is not None:
703 if diff_line.new is not None:
687 return u'n{}'.format(diff_line.new)
704 return u'n{}'.format(diff_line.new)
688 elif diff_line.old is not None:
705 elif diff_line.old is not None:
689 return u'o{}'.format(diff_line.old)
706 return u'o{}'.format(diff_line.old)
690 return u''
707 return u''
691
708
692
709
693 def _diff_line_delta(a, b):
710 def _diff_line_delta(a, b):
694 if None not in (a.new, b.new):
711 if None not in (a.new, b.new):
695 return abs(a.new - b.new)
712 return abs(a.new - b.new)
696 elif None not in (a.old, b.old):
713 elif None not in (a.old, b.old):
697 return abs(a.old - b.old)
714 return abs(a.old - b.old)
698 else:
715 else:
699 raise ValueError(
716 raise ValueError(
700 "Cannot compute delta between {} and {}".format(a, b))
717 "Cannot compute delta between {} and {}".format(a, b))
@@ -1,444 +1,475 b''
1
1
2
2
3 //BUTTONS
3 //BUTTONS
4 button,
4 button,
5 .btn,
5 .btn,
6 input[type="button"] {
6 input[type="button"] {
7 -webkit-appearance: none;
7 -webkit-appearance: none;
8 display: inline-block;
8 display: inline-block;
9 margin: 0 @padding/3 0 0;
9 margin: 0 @padding/3 0 0;
10 padding: @button-padding;
10 padding: @button-padding;
11 text-align: center;
11 text-align: center;
12 font-size: @basefontsize;
12 font-size: @basefontsize;
13 line-height: 1em;
13 line-height: 1em;
14 font-family: @text-light;
14 font-family: @text-light;
15 text-decoration: none;
15 text-decoration: none;
16 text-shadow: none;
16 text-shadow: none;
17 color: @grey2;
17 color: @grey2;
18 background-color: white;
18 background-color: white;
19 background-image: none;
19 background-image: none;
20 border: none;
20 border: none;
21 .border ( @border-thickness-buttons, @grey5 );
21 .border ( @border-thickness-buttons, @grey5 );
22 .border-radius (@border-radius);
22 .border-radius (@border-radius);
23 cursor: pointer;
23 cursor: pointer;
24 white-space: nowrap;
24 white-space: nowrap;
25 -webkit-transition: background .3s,color .3s;
25 -webkit-transition: background .3s,color .3s;
26 -moz-transition: background .3s,color .3s;
26 -moz-transition: background .3s,color .3s;
27 -o-transition: background .3s,color .3s;
27 -o-transition: background .3s,color .3s;
28 transition: background .3s,color .3s;
28 transition: background .3s,color .3s;
29 box-shadow: @button-shadow;
29 box-shadow: @button-shadow;
30 -webkit-box-shadow: @button-shadow;
30 -webkit-box-shadow: @button-shadow;
31
31
32
32
33
33
34 a {
34 a {
35 display: block;
35 display: block;
36 margin: 0;
36 margin: 0;
37 padding: 0;
37 padding: 0;
38 color: inherit;
38 color: inherit;
39 text-decoration: none;
39 text-decoration: none;
40
40
41 &:hover {
41 &:hover {
42 text-decoration: none;
42 text-decoration: none;
43 }
43 }
44 }
44 }
45
45
46 &:focus,
46 &:focus,
47 &:active {
47 &:active {
48 outline:none;
48 outline:none;
49 }
49 }
50 &:hover {
50 &:hover {
51 color: @rcdarkblue;
51 color: @rcdarkblue;
52 background-color: @white;
52 background-color: @white;
53 .border ( @border-thickness, @grey4 );
53 .border ( @border-thickness, @grey4 );
54 }
54 }
55
55
56 .icon-remove {
56 .icon-remove {
57 display: none;
57 display: none;
58 }
58 }
59
59
60 //disabled buttons
60 //disabled buttons
61 //last; overrides any other styles
61 //last; overrides any other styles
62 &:disabled {
62 &:disabled {
63 opacity: .7;
63 opacity: .7;
64 cursor: auto;
64 cursor: auto;
65 background-color: white;
65 background-color: white;
66 color: @grey4;
66 color: @grey4;
67 text-shadow: none;
67 text-shadow: none;
68 }
68 }
69
69
70 &.no-margin {
70 &.no-margin {
71 margin: 0 0 0 0;
71 margin: 0 0 0 0;
72 }
72 }
73
73
74 &.btn-active {
75 color: @rcdarkblue;
76 background-color: @white;
77 .border ( @border-thickness, @rcdarkblue );
78 }
79
74 }
80 }
75
81
76
82
77 .btn-default {
83 .btn-default {
78 border: @border-thickness solid @grey5;
84 border: @border-thickness solid @grey5;
79 background-image: none;
85 background-image: none;
80 color: @grey2;
86 color: @grey2;
81
87
82 a {
88 a {
83 color: @grey2;
89 color: @grey2;
84 }
90 }
85
91
86 &:hover,
92 &:hover,
87 &.active {
93 &.active {
88 color: @rcdarkblue;
94 color: @rcdarkblue;
89 background-color: @white;
95 background-color: @white;
90 .border ( @border-thickness, @grey4 );
96 .border ( @border-thickness, @grey4 );
91
97
92 a {
98 a {
93 color: @grey2;
99 color: @grey2;
94 }
100 }
95 }
101 }
96 &:disabled {
102 &:disabled {
97 .border ( @border-thickness-buttons, @grey5 );
103 .border ( @border-thickness-buttons, @grey5 );
98 background-color: transparent;
104 background-color: transparent;
99 }
105 }
106 &.btn-active {
107 color: @rcdarkblue;
108 background-color: @white;
109 .border ( @border-thickness, @rcdarkblue );
110 }
100 }
111 }
101
112
102 .btn-primary,
113 .btn-primary,
103 .btn-small, /* TODO: anderson: remove .btn-small to not mix with the new btn-sm */
114 .btn-small, /* TODO: anderson: remove .btn-small to not mix with the new btn-sm */
104 .btn-success {
115 .btn-success {
105 .border ( @border-thickness, @rcblue );
116 .border ( @border-thickness, @rcblue );
106 background-color: @rcblue;
117 background-color: @rcblue;
107 color: white;
118 color: white;
108
119
109 a {
120 a {
110 color: white;
121 color: white;
111 }
122 }
112
123
113 &:hover,
124 &:hover,
114 &.active {
125 &.active {
115 .border ( @border-thickness, @rcdarkblue );
126 .border ( @border-thickness, @rcdarkblue );
116 color: white;
127 color: white;
117 background-color: @rcdarkblue;
128 background-color: @rcdarkblue;
118
129
119 a {
130 a {
120 color: white;
131 color: white;
121 }
132 }
122 }
133 }
123 &:disabled {
134 &:disabled {
124 background-color: @rcblue;
135 background-color: @rcblue;
125 }
136 }
126 }
137 }
127
138
128 .btn-secondary {
139 .btn-secondary {
129 &:extend(.btn-default);
140 &:extend(.btn-default);
130
141
131 background-color: white;
142 background-color: white;
132
143
133 &:focus {
144 &:focus {
134 outline: 0;
145 outline: 0;
135 }
146 }
136
147
137 &:hover {
148 &:hover {
138 &:extend(.btn-default:hover);
149 &:extend(.btn-default:hover);
139 }
150 }
140
151
141 &.btn-link {
152 &.btn-link {
142 &:extend(.btn-link);
153 &:extend(.btn-link);
143 color: @rcblue;
154 color: @rcblue;
144 }
155 }
145
156
146 &:disabled {
157 &:disabled {
147 color: @rcblue;
158 color: @rcblue;
148 background-color: white;
159 background-color: white;
149 }
160 }
150 }
161 }
151
162
152 .btn-warning,
163 .btn-warning,
153 .btn-danger,
164 .btn-danger,
154 .revoke_perm,
165 .revoke_perm,
155 .btn-x,
166 .btn-x,
156 .form .action_button.btn-x {
167 .form .action_button.btn-x {
157 .border ( @border-thickness, @alert2 );
168 .border ( @border-thickness, @alert2 );
158 background-color: white;
169 background-color: white;
159 color: @alert2;
170 color: @alert2;
160
171
161 a {
172 a {
162 color: @alert2;
173 color: @alert2;
163 }
174 }
164
175
165 &:hover,
176 &:hover,
166 &.active {
177 &.active {
167 .border ( @border-thickness, @alert2 );
178 .border ( @border-thickness, @alert2 );
168 color: white;
179 color: white;
169 background-color: @alert2;
180 background-color: @alert2;
170
181
171 a {
182 a {
172 color: white;
183 color: white;
173 }
184 }
174 }
185 }
175
186
176 i {
187 i {
177 display:none;
188 display:none;
178 }
189 }
179
190
180 &:disabled {
191 &:disabled {
181 background-color: white;
192 background-color: white;
182 color: @alert2;
193 color: @alert2;
183 }
194 }
184 }
195 }
185
196
186 .btn-approved-status {
197 .btn-approved-status {
187 .border ( @border-thickness, @alert1 );
198 .border ( @border-thickness, @alert1 );
188 background-color: white;
199 background-color: white;
189 color: @alert1;
200 color: @alert1;
190
201
191 }
202 }
192
203
193 .btn-rejected-status {
204 .btn-rejected-status {
194 .border ( @border-thickness, @alert2 );
205 .border ( @border-thickness, @alert2 );
195 background-color: white;
206 background-color: white;
196 color: @alert2;
207 color: @alert2;
197 }
208 }
198
209
199 .btn-sm,
210 .btn-sm,
200 .btn-mini,
211 .btn-mini,
201 .field-sm .btn {
212 .field-sm .btn {
202 padding: @padding/3;
213 padding: @padding/3;
203 }
214 }
204
215
205 .btn-xs {
216 .btn-xs {
206 padding: @padding/4;
217 padding: @padding/4;
207 }
218 }
208
219
209 .btn-lg {
220 .btn-lg {
210 padding: @padding * 1.2;
221 padding: @padding * 1.2;
211 }
222 }
212
223
213 .btn-group {
224 .btn-group {
214 display: inline-block;
225 display: inline-block;
215 .btn {
226 .btn {
216 float: left;
227 float: left;
217 margin: 0 0 0 -1px;
228 margin: 0 0 0 0;
229 // first item
230 &:first-of-type:not(:last-of-type) {
231 border-radius: @border-radius 0 0 @border-radius;
232
233 }
234 // middle elements
235 &:not(:first-of-type):not(:last-of-type) {
236 border-radius: 0;
237 border-left-width: 0;
238 border-right-width: 0;
239 }
240 // last item
241 &:last-of-type:not(:first-of-type) {
242 border-radius: 0 @border-radius @border-radius 0;
243 }
244
245 &:only-child {
246 border-radius: @border-radius;
247 }
218 }
248 }
249
219 }
250 }
220
251
221 .btn-link {
252 .btn-link {
222 background: transparent;
253 background: transparent;
223 border: none;
254 border: none;
224 padding: 0;
255 padding: 0;
225 color: @rcblue;
256 color: @rcblue;
226
257
227 &:hover {
258 &:hover {
228 background: transparent;
259 background: transparent;
229 border: none;
260 border: none;
230 color: @rcdarkblue;
261 color: @rcdarkblue;
231 }
262 }
232
263
233 //disabled buttons
264 //disabled buttons
234 //last; overrides any other styles
265 //last; overrides any other styles
235 &:disabled {
266 &:disabled {
236 opacity: .7;
267 opacity: .7;
237 cursor: auto;
268 cursor: auto;
238 background-color: white;
269 background-color: white;
239 color: @grey4;
270 color: @grey4;
240 text-shadow: none;
271 text-shadow: none;
241 }
272 }
242
273
243 // TODO: johbo: Check if we can avoid this, indicates that the structure
274 // TODO: johbo: Check if we can avoid this, indicates that the structure
244 // is not yet good.
275 // is not yet good.
245 // lisa: The button CSS reflects the button HTML; both need a cleanup.
276 // lisa: The button CSS reflects the button HTML; both need a cleanup.
246 &.btn-danger {
277 &.btn-danger {
247 color: @alert2;
278 color: @alert2;
248
279
249 &:hover {
280 &:hover {
250 color: darken(@alert2,30%);
281 color: darken(@alert2,30%);
251 }
282 }
252
283
253 &:disabled {
284 &:disabled {
254 color: @alert2;
285 color: @alert2;
255 }
286 }
256 }
287 }
257 }
288 }
258
289
259 .btn-social {
290 .btn-social {
260 &:extend(.btn-default);
291 &:extend(.btn-default);
261 margin: 5px 5px 5px 0px;
292 margin: 5px 5px 5px 0px;
262 min-width: 160px;
293 min-width: 160px;
263 }
294 }
264
295
265 // TODO: johbo: check these exceptions
296 // TODO: johbo: check these exceptions
266
297
267 .links {
298 .links {
268
299
269 .btn + .btn {
300 .btn + .btn {
270 margin-top: @padding;
301 margin-top: @padding;
271 }
302 }
272 }
303 }
273
304
274
305
275 .action_button {
306 .action_button {
276 display:inline;
307 display:inline;
277 margin: 0;
308 margin: 0;
278 padding: 0 1em 0 0;
309 padding: 0 1em 0 0;
279 font-size: inherit;
310 font-size: inherit;
280 color: @rcblue;
311 color: @rcblue;
281 border: none;
312 border: none;
282 border-radius: 0;
313 border-radius: 0;
283 background-color: transparent;
314 background-color: transparent;
284
315
285 &.last-item {
316 &.last-item {
286 border: none;
317 border: none;
287 padding: 0 0 0 0;
318 padding: 0 0 0 0;
288 }
319 }
289
320
290 &:last-child {
321 &:last-child {
291 border: none;
322 border: none;
292 padding: 0 0 0 0;
323 padding: 0 0 0 0;
293 }
324 }
294
325
295 &:hover {
326 &:hover {
296 color: @rcdarkblue;
327 color: @rcdarkblue;
297 background-color: transparent;
328 background-color: transparent;
298 border: none;
329 border: none;
299 }
330 }
300 }
331 }
301 .grid_delete {
332 .grid_delete {
302 .action_button {
333 .action_button {
303 border: none;
334 border: none;
304 }
335 }
305 }
336 }
306
337
307
338
308 // TODO: johbo: Form button tweaks, check if we can use the classes instead
339 // TODO: johbo: Form button tweaks, check if we can use the classes instead
309 input[type="submit"] {
340 input[type="submit"] {
310 &:extend(.btn-primary);
341 &:extend(.btn-primary);
311
342
312 &:focus {
343 &:focus {
313 outline: 0;
344 outline: 0;
314 }
345 }
315
346
316 &:hover {
347 &:hover {
317 &:extend(.btn-primary:hover);
348 &:extend(.btn-primary:hover);
318 }
349 }
319
350
320 &.btn-link {
351 &.btn-link {
321 &:extend(.btn-link);
352 &:extend(.btn-link);
322 color: @rcblue;
353 color: @rcblue;
323
354
324 &:disabled {
355 &:disabled {
325 color: @rcblue;
356 color: @rcblue;
326 background-color: transparent;
357 background-color: transparent;
327 }
358 }
328 }
359 }
329
360
330 &:disabled {
361 &:disabled {
331 .border ( @border-thickness-buttons, @rcblue );
362 .border ( @border-thickness-buttons, @rcblue );
332 background-color: @rcblue;
363 background-color: @rcblue;
333 color: white;
364 color: white;
334 opacity: 0.5;
365 opacity: 0.5;
335 }
366 }
336 }
367 }
337
368
338 input[type="reset"] {
369 input[type="reset"] {
339 &:extend(.btn-default);
370 &:extend(.btn-default);
340
371
341 // TODO: johbo: Check if this tweak can be avoided.
372 // TODO: johbo: Check if this tweak can be avoided.
342 background: transparent;
373 background: transparent;
343
374
344 &:focus {
375 &:focus {
345 outline: 0;
376 outline: 0;
346 }
377 }
347
378
348 &:hover {
379 &:hover {
349 &:extend(.btn-default:hover);
380 &:extend(.btn-default:hover);
350 }
381 }
351
382
352 &.btn-link {
383 &.btn-link {
353 &:extend(.btn-link);
384 &:extend(.btn-link);
354 color: @rcblue;
385 color: @rcblue;
355
386
356 &:disabled {
387 &:disabled {
357 border: none;
388 border: none;
358 }
389 }
359 }
390 }
360
391
361 &:disabled {
392 &:disabled {
362 .border ( @border-thickness-buttons, @rcblue );
393 .border ( @border-thickness-buttons, @rcblue );
363 background-color: white;
394 background-color: white;
364 color: @rcblue;
395 color: @rcblue;
365 }
396 }
366 }
397 }
367
398
368 input[type="submit"],
399 input[type="submit"],
369 input[type="reset"] {
400 input[type="reset"] {
370 &.btn-danger {
401 &.btn-danger {
371 &:extend(.btn-danger);
402 &:extend(.btn-danger);
372
403
373 &:focus {
404 &:focus {
374 outline: 0;
405 outline: 0;
375 }
406 }
376
407
377 &:hover {
408 &:hover {
378 &:extend(.btn-danger:hover);
409 &:extend(.btn-danger:hover);
379 }
410 }
380
411
381 &.btn-link {
412 &.btn-link {
382 &:extend(.btn-link);
413 &:extend(.btn-link);
383 color: @alert2;
414 color: @alert2;
384
415
385 &:hover {
416 &:hover {
386 color: darken(@alert2,30%);
417 color: darken(@alert2,30%);
387 }
418 }
388 }
419 }
389
420
390 &:disabled {
421 &:disabled {
391 color: @alert2;
422 color: @alert2;
392 background-color: white;
423 background-color: white;
393 }
424 }
394 }
425 }
395 &.btn-danger-action {
426 &.btn-danger-action {
396 .border ( @border-thickness, @alert2 );
427 .border ( @border-thickness, @alert2 );
397 background-color: @alert2;
428 background-color: @alert2;
398 color: white;
429 color: white;
399
430
400 a {
431 a {
401 color: white;
432 color: white;
402 }
433 }
403
434
404 &:hover {
435 &:hover {
405 background-color: darken(@alert2,20%);
436 background-color: darken(@alert2,20%);
406 }
437 }
407
438
408 &.active {
439 &.active {
409 .border ( @border-thickness, @alert2 );
440 .border ( @border-thickness, @alert2 );
410 color: white;
441 color: white;
411 background-color: @alert2;
442 background-color: @alert2;
412
443
413 a {
444 a {
414 color: white;
445 color: white;
415 }
446 }
416 }
447 }
417
448
418 &:disabled {
449 &:disabled {
419 background-color: white;
450 background-color: white;
420 color: @alert2;
451 color: @alert2;
421 }
452 }
422 }
453 }
423 }
454 }
424
455
425
456
426 .button-links {
457 .button-links {
427 float: left;
458 float: left;
428 display: inline;
459 display: inline;
429 margin: 0;
460 margin: 0;
430 padding-left: 0;
461 padding-left: 0;
431 list-style: none;
462 list-style: none;
432 text-align: right;
463 text-align: right;
433
464
434 li {
465 li {
435
466
436
467
437 }
468 }
438
469
439 li.active {
470 li.active {
440 background-color: @grey6;
471 background-color: @grey6;
441 .border ( @border-thickness, @grey4 );
472 .border ( @border-thickness, @grey4 );
442 }
473 }
443
474
444 }
475 }
@@ -1,1271 +1,1284 b''
1 // Default styles
1 // Default styles
2
2
3 .diff-collapse {
3 .diff-collapse {
4 margin: @padding 0;
4 margin: @padding 0;
5 text-align: right;
5 text-align: right;
6 }
6 }
7
7
8 .diff-container {
8 .diff-container {
9 margin-bottom: @space;
9 margin-bottom: @space;
10
10
11 .diffblock {
11 .diffblock {
12 margin-bottom: @space;
12 margin-bottom: @space;
13 }
13 }
14
14
15 &.hidden {
15 &.hidden {
16 display: none;
16 display: none;
17 overflow: hidden;
17 overflow: hidden;
18 }
18 }
19 }
19 }
20
20
21
21
22 div.diffblock .sidebyside {
22 div.diffblock .sidebyside {
23 background: #ffffff;
23 background: #ffffff;
24 }
24 }
25
25
26 div.diffblock {
26 div.diffblock {
27 overflow-x: auto;
27 overflow-x: auto;
28 overflow-y: hidden;
28 overflow-y: hidden;
29 clear: both;
29 clear: both;
30 padding: 0px;
30 padding: 0px;
31 background: @grey6;
31 background: @grey6;
32 border: @border-thickness solid @grey5;
32 border: @border-thickness solid @grey5;
33 -webkit-border-radius: @border-radius @border-radius 0px 0px;
33 -webkit-border-radius: @border-radius @border-radius 0px 0px;
34 border-radius: @border-radius @border-radius 0px 0px;
34 border-radius: @border-radius @border-radius 0px 0px;
35
35
36
36
37 .comments-number {
37 .comments-number {
38 float: right;
38 float: right;
39 }
39 }
40
40
41 // BEGIN CODE-HEADER STYLES
41 // BEGIN CODE-HEADER STYLES
42
42
43 .code-header {
43 .code-header {
44 background: @grey6;
44 background: @grey6;
45 padding: 10px 0 10px 0;
45 padding: 10px 0 10px 0;
46 height: auto;
46 height: auto;
47 width: 100%;
47 width: 100%;
48
48
49 .hash {
49 .hash {
50 float: left;
50 float: left;
51 padding: 2px 0 0 2px;
51 padding: 2px 0 0 2px;
52 }
52 }
53
53
54 .date {
54 .date {
55 float: left;
55 float: left;
56 text-transform: uppercase;
56 text-transform: uppercase;
57 padding: 4px 0px 0px 2px;
57 padding: 4px 0px 0px 2px;
58 }
58 }
59
59
60 div {
60 div {
61 margin-left: 4px;
61 margin-left: 4px;
62 }
62 }
63
63
64 div.compare_header {
64 div.compare_header {
65 min-height: 40px;
65 min-height: 40px;
66 margin: 0;
66 margin: 0;
67 padding: 0 @padding;
67 padding: 0 @padding;
68
68
69 .drop-menu {
69 .drop-menu {
70 float:left;
70 float:left;
71 display: block;
71 display: block;
72 margin:0 0 @padding 0;
72 margin:0 0 @padding 0;
73 }
73 }
74
74
75 .compare-label {
75 .compare-label {
76 float: left;
76 float: left;
77 clear: both;
77 clear: both;
78 display: inline-block;
78 display: inline-block;
79 min-width: 5em;
79 min-width: 5em;
80 margin: 0;
80 margin: 0;
81 padding: @button-padding @button-padding @button-padding 0;
81 padding: @button-padding @button-padding @button-padding 0;
82 font-weight: @text-semibold-weight;
82 font-weight: @text-semibold-weight;
83 font-family: @text-semibold;
83 font-family: @text-semibold;
84 }
84 }
85
85
86 .compare-buttons {
86 .compare-buttons {
87 float: left;
87 float: left;
88 margin: 0;
88 margin: 0;
89 padding: 0 0 @padding;
89 padding: 0 0 @padding;
90
90
91 .btn {
91 .btn {
92 margin: 0 @padding 0 0;
92 margin: 0 @padding 0 0;
93 }
93 }
94 }
94 }
95 }
95 }
96
96
97 }
97 }
98
98
99 .parents {
99 .parents {
100 float: left;
100 float: left;
101 width: 100px;
101 width: 100px;
102 font-weight: 400;
102 font-weight: 400;
103 vertical-align: middle;
103 vertical-align: middle;
104 padding: 0px 2px 0px 2px;
104 padding: 0px 2px 0px 2px;
105 background-color: @grey6;
105 background-color: @grey6;
106
106
107 #parent_link {
107 #parent_link {
108 margin: 00px 2px;
108 margin: 00px 2px;
109
109
110 &.double {
110 &.double {
111 margin: 0px 2px;
111 margin: 0px 2px;
112 }
112 }
113
113
114 &.disabled{
114 &.disabled{
115 margin-right: @padding;
115 margin-right: @padding;
116 }
116 }
117 }
117 }
118 }
118 }
119
119
120 .children {
120 .children {
121 float: right;
121 float: right;
122 width: 100px;
122 width: 100px;
123 font-weight: 400;
123 font-weight: 400;
124 vertical-align: middle;
124 vertical-align: middle;
125 text-align: right;
125 text-align: right;
126 padding: 0px 2px 0px 2px;
126 padding: 0px 2px 0px 2px;
127 background-color: @grey6;
127 background-color: @grey6;
128
128
129 #child_link {
129 #child_link {
130 margin: 0px 2px;
130 margin: 0px 2px;
131
131
132 &.double {
132 &.double {
133 margin: 0px 2px;
133 margin: 0px 2px;
134 }
134 }
135
135
136 &.disabled{
136 &.disabled{
137 margin-right: @padding;
137 margin-right: @padding;
138 }
138 }
139 }
139 }
140 }
140 }
141
141
142 .changeset_header {
142 .changeset_header {
143 height: 16px;
143 height: 16px;
144
144
145 & > div{
145 & > div{
146 margin-right: @padding;
146 margin-right: @padding;
147 }
147 }
148 }
148 }
149
149
150 .changeset_file {
150 .changeset_file {
151 text-align: left;
151 text-align: left;
152 float: left;
152 float: left;
153 padding: 0;
153 padding: 0;
154
154
155 a{
155 a{
156 display: inline-block;
156 display: inline-block;
157 margin-right: 0.5em;
157 margin-right: 0.5em;
158 }
158 }
159
159
160 #selected_mode{
160 #selected_mode{
161 margin-left: 0;
161 margin-left: 0;
162 }
162 }
163 }
163 }
164
164
165 .diff-menu-wrapper {
165 .diff-menu-wrapper {
166 float: left;
166 float: left;
167 }
167 }
168
168
169 .diff-menu {
169 .diff-menu {
170 position: absolute;
170 position: absolute;
171 background: none repeat scroll 0 0 #FFFFFF;
171 background: none repeat scroll 0 0 #FFFFFF;
172 border-color: #003367 @grey3 @grey3;
172 border-color: #003367 @grey3 @grey3;
173 border-right: 1px solid @grey3;
173 border-right: 1px solid @grey3;
174 border-style: solid solid solid;
174 border-style: solid solid solid;
175 border-width: @border-thickness;
175 border-width: @border-thickness;
176 box-shadow: 2px 8px 4px rgba(0, 0, 0, 0.2);
176 box-shadow: 2px 8px 4px rgba(0, 0, 0, 0.2);
177 margin-top: 5px;
177 margin-top: 5px;
178 margin-left: 1px;
178 margin-left: 1px;
179 }
179 }
180
180
181 .diff-actions, .editor-actions {
181 .diff-actions, .editor-actions {
182 float: left;
182 float: left;
183
183
184 input{
184 input{
185 margin: 0 0.5em 0 0;
185 margin: 0 0.5em 0 0;
186 }
186 }
187 }
187 }
188
188
189 // END CODE-HEADER STYLES
189 // END CODE-HEADER STYLES
190
190
191 // BEGIN CODE-BODY STYLES
191 // BEGIN CODE-BODY STYLES
192
192
193 .code-body {
193 .code-body {
194 padding: 0;
194 padding: 0;
195 background-color: #ffffff;
195 background-color: #ffffff;
196 position: relative;
196 position: relative;
197 max-width: none;
197 max-width: none;
198 box-sizing: border-box;
198 box-sizing: border-box;
199 // TODO: johbo: Parent has overflow: auto, this forces the child here
199 // TODO: johbo: Parent has overflow: auto, this forces the child here
200 // to have the intended size and to scroll. Should be simplified.
200 // to have the intended size and to scroll. Should be simplified.
201 width: 100%;
201 width: 100%;
202 overflow-x: auto;
202 overflow-x: auto;
203 }
203 }
204
204
205 pre.raw {
205 pre.raw {
206 background: white;
206 background: white;
207 color: @grey1;
207 color: @grey1;
208 }
208 }
209 // END CODE-BODY STYLES
209 // END CODE-BODY STYLES
210
210
211 }
211 }
212
212
213
213
214 table.code-difftable {
214 table.code-difftable {
215 border-collapse: collapse;
215 border-collapse: collapse;
216 width: 99%;
216 width: 99%;
217 border-radius: 0px !important;
217 border-radius: 0px !important;
218
218
219 td {
219 td {
220 padding: 0 !important;
220 padding: 0 !important;
221 background: none !important;
221 background: none !important;
222 border: 0 !important;
222 border: 0 !important;
223 }
223 }
224
224
225 .context {
225 .context {
226 background: none repeat scroll 0 0 #DDE7EF;
226 background: none repeat scroll 0 0 #DDE7EF;
227 }
227 }
228
228
229 .add {
229 .add {
230 background: none repeat scroll 0 0 #DDFFDD;
230 background: none repeat scroll 0 0 #DDFFDD;
231
231
232 ins {
232 ins {
233 background: none repeat scroll 0 0 #AAFFAA;
233 background: none repeat scroll 0 0 #AAFFAA;
234 text-decoration: none;
234 text-decoration: none;
235 }
235 }
236 }
236 }
237
237
238 .del {
238 .del {
239 background: none repeat scroll 0 0 #FFDDDD;
239 background: none repeat scroll 0 0 #FFDDDD;
240
240
241 del {
241 del {
242 background: none repeat scroll 0 0 #FFAAAA;
242 background: none repeat scroll 0 0 #FFAAAA;
243 text-decoration: none;
243 text-decoration: none;
244 }
244 }
245 }
245 }
246
246
247 /** LINE NUMBERS **/
247 /** LINE NUMBERS **/
248 .lineno {
248 .lineno {
249 padding-left: 2px !important;
249 padding-left: 2px !important;
250 padding-right: 2px;
250 padding-right: 2px;
251 text-align: right;
251 text-align: right;
252 width: 32px;
252 width: 32px;
253 -moz-user-select: none;
253 -moz-user-select: none;
254 -webkit-user-select: none;
254 -webkit-user-select: none;
255 border-right: @border-thickness solid @grey5 !important;
255 border-right: @border-thickness solid @grey5 !important;
256 border-left: 0px solid #CCC !important;
256 border-left: 0px solid #CCC !important;
257 border-top: 0px solid #CCC !important;
257 border-top: 0px solid #CCC !important;
258 border-bottom: none !important;
258 border-bottom: none !important;
259
259
260 a {
260 a {
261 &:extend(pre);
261 &:extend(pre);
262 text-align: right;
262 text-align: right;
263 padding-right: 2px;
263 padding-right: 2px;
264 cursor: pointer;
264 cursor: pointer;
265 display: block;
265 display: block;
266 width: 32px;
266 width: 32px;
267 }
267 }
268 }
268 }
269
269
270 .context {
270 .context {
271 cursor: auto;
271 cursor: auto;
272 &:extend(pre);
272 &:extend(pre);
273 }
273 }
274
274
275 .lineno-inline {
275 .lineno-inline {
276 background: none repeat scroll 0 0 #FFF !important;
276 background: none repeat scroll 0 0 #FFF !important;
277 padding-left: 2px;
277 padding-left: 2px;
278 padding-right: 2px;
278 padding-right: 2px;
279 text-align: right;
279 text-align: right;
280 width: 30px;
280 width: 30px;
281 -moz-user-select: none;
281 -moz-user-select: none;
282 -webkit-user-select: none;
282 -webkit-user-select: none;
283 }
283 }
284
284
285 /** CODE **/
285 /** CODE **/
286 .code {
286 .code {
287 display: block;
287 display: block;
288 width: 100%;
288 width: 100%;
289
289
290 td {
290 td {
291 margin: 0;
291 margin: 0;
292 padding: 0;
292 padding: 0;
293 }
293 }
294
294
295 pre {
295 pre {
296 margin: 0;
296 margin: 0;
297 padding: 0;
297 padding: 0;
298 margin-left: .5em;
298 margin-left: .5em;
299 }
299 }
300 }
300 }
301 }
301 }
302
302
303
303
304 // Comments
304 // Comments
305
305
306 div.comment:target {
306 div.comment:target {
307 border-left: 6px solid @comment-highlight-color !important;
307 border-left: 6px solid @comment-highlight-color !important;
308 padding-left: 3px;
308 padding-left: 3px;
309 margin-left: -9px;
309 margin-left: -9px;
310 }
310 }
311
311
312 //TODO: anderson: can't get an absolute number out of anything, so had to put the
312 //TODO: anderson: can't get an absolute number out of anything, so had to put the
313 //current values that might change. But to make it clear I put as a calculation
313 //current values that might change. But to make it clear I put as a calculation
314 @comment-max-width: 1065px;
314 @comment-max-width: 1065px;
315 @pr-extra-margin: 34px;
315 @pr-extra-margin: 34px;
316 @pr-border-spacing: 4px;
316 @pr-border-spacing: 4px;
317 @pr-comment-width: @comment-max-width - @pr-extra-margin - @pr-border-spacing;
317 @pr-comment-width: @comment-max-width - @pr-extra-margin - @pr-border-spacing;
318
318
319 // Pull Request
319 // Pull Request
320 .cs_files .code-difftable {
320 .cs_files .code-difftable {
321 border: @border-thickness solid @grey5; //borders only on PRs
321 border: @border-thickness solid @grey5; //borders only on PRs
322
322
323 .comment-inline-form,
323 .comment-inline-form,
324 div.comment {
324 div.comment {
325 width: @pr-comment-width;
325 width: @pr-comment-width;
326 }
326 }
327 }
327 }
328
328
329 // Changeset
329 // Changeset
330 .code-difftable {
330 .code-difftable {
331 .comment-inline-form,
331 .comment-inline-form,
332 div.comment {
332 div.comment {
333 width: @comment-max-width;
333 width: @comment-max-width;
334 }
334 }
335 }
335 }
336
336
337 //Style page
337 //Style page
338 @style-extra-margin: @sidebar-width + (@sidebarpadding * 3) + @padding;
338 @style-extra-margin: @sidebar-width + (@sidebarpadding * 3) + @padding;
339 #style-page .code-difftable{
339 #style-page .code-difftable{
340 .comment-inline-form,
340 .comment-inline-form,
341 div.comment {
341 div.comment {
342 width: @comment-max-width - @style-extra-margin;
342 width: @comment-max-width - @style-extra-margin;
343 }
343 }
344 }
344 }
345
345
346 #context-bar > h2 {
346 #context-bar > h2 {
347 font-size: 20px;
347 font-size: 20px;
348 }
348 }
349
349
350 #context-bar > h2> a {
350 #context-bar > h2> a {
351 font-size: 20px;
351 font-size: 20px;
352 }
352 }
353 // end of defaults
353 // end of defaults
354
354
355 .file_diff_buttons {
355 .file_diff_buttons {
356 padding: 0 0 @padding;
356 padding: 0 0 @padding;
357
357
358 .drop-menu {
358 .drop-menu {
359 float: left;
359 float: left;
360 margin: 0 @padding 0 0;
360 margin: 0 @padding 0 0;
361 }
361 }
362 .btn {
362 .btn {
363 margin: 0 @padding 0 0;
363 margin: 0 @padding 0 0;
364 }
364 }
365 }
365 }
366
366
367 .code-body.textarea.editor {
367 .code-body.textarea.editor {
368 max-width: none;
368 max-width: none;
369 padding: 15px;
369 padding: 15px;
370 }
370 }
371
371
372 td.injected_diff{
372 td.injected_diff{
373 max-width: 1178px;
373 max-width: 1178px;
374 overflow-x: auto;
374 overflow-x: auto;
375 overflow-y: hidden;
375 overflow-y: hidden;
376
376
377 div.diff-container,
377 div.diff-container,
378 div.diffblock{
378 div.diffblock{
379 max-width: 100%;
379 max-width: 100%;
380 }
380 }
381
381
382 div.code-body {
382 div.code-body {
383 max-width: 1124px;
383 max-width: 1124px;
384 overflow-x: auto;
384 overflow-x: auto;
385 overflow-y: hidden;
385 overflow-y: hidden;
386 padding: 0;
386 padding: 0;
387 }
387 }
388 div.diffblock {
388 div.diffblock {
389 border: none;
389 border: none;
390 }
390 }
391
391
392 &.inline-form {
392 &.inline-form {
393 width: 99%
393 width: 99%
394 }
394 }
395 }
395 }
396
396
397
397
398 table.code-difftable {
398 table.code-difftable {
399 width: 100%;
399 width: 100%;
400 }
400 }
401
401
402 /** PYGMENTS COLORING **/
402 /** PYGMENTS COLORING **/
403 div.codeblock {
403 div.codeblock {
404
404
405 // TODO: johbo: Added interim to get rid of the margin around
405 // TODO: johbo: Added interim to get rid of the margin around
406 // Select2 widgets. This needs further cleanup.
406 // Select2 widgets. This needs further cleanup.
407 overflow: auto;
407 overflow: auto;
408 padding: 0px;
408 padding: 0px;
409 border: @border-thickness solid @grey6;
409 border: @border-thickness solid @grey6;
410 .border-radius(@border-radius);
410 .border-radius(@border-radius);
411
411
412 #remove_gist {
412 #remove_gist {
413 float: right;
413 float: right;
414 }
414 }
415
415
416 .gist_url {
416 .gist_url {
417 padding: 0px 0px 10px 0px;
417 padding: 0px 0px 10px 0px;
418 }
418 }
419
419
420 .author {
420 .author {
421 clear: both;
421 clear: both;
422 vertical-align: middle;
422 vertical-align: middle;
423 font-weight: @text-bold-weight;
423 font-weight: @text-bold-weight;
424 font-family: @text-bold;
424 font-family: @text-bold;
425 }
425 }
426
426
427 .btn-mini {
427 .btn-mini {
428 float: left;
428 float: left;
429 margin: 0 5px 0 0;
429 margin: 0 5px 0 0;
430 }
430 }
431
431
432 .code-header {
432 .code-header {
433 padding: @padding;
433 padding: @padding;
434 border-bottom: @border-thickness solid @grey5;
434 border-bottom: @border-thickness solid @grey5;
435
435
436 .rc-user {
436 .rc-user {
437 min-width: 0;
437 min-width: 0;
438 margin-right: .5em;
438 margin-right: .5em;
439 }
439 }
440
440
441 .stats {
441 .stats {
442 clear: both;
442 clear: both;
443 margin: 0 0 @padding 0;
443 margin: 0 0 @padding 0;
444 padding: 0;
444 padding: 0;
445 .left {
445 .left {
446 float: left;
446 float: left;
447 clear: left;
447 clear: left;
448 max-width: 75%;
448 max-width: 75%;
449 margin: 0 0 @padding 0;
449 margin: 0 0 @padding 0;
450
450
451 &.item {
451 &.item {
452 margin-right: @padding;
452 margin-right: @padding;
453 &.last { border-right: none; }
453 &.last { border-right: none; }
454 }
454 }
455 }
455 }
456 .buttons { float: right; }
456 .buttons { float: right; }
457 .author {
457 .author {
458 height: 25px; margin-left: 15px; font-weight: bold;
458 height: 25px; margin-left: 15px; font-weight: bold;
459 }
459 }
460 }
460 }
461
461
462 .commit {
462 .commit {
463 margin: 5px 0 0 26px;
463 margin: 5px 0 0 26px;
464 font-weight: normal;
464 font-weight: normal;
465 white-space: pre-wrap;
465 white-space: pre-wrap;
466 }
466 }
467 }
467 }
468
468
469 .message {
469 .message {
470 position: relative;
470 position: relative;
471 margin: @padding;
471 margin: @padding;
472
472
473 .codeblock-label {
473 .codeblock-label {
474 margin: 0 0 1em 0;
474 margin: 0 0 1em 0;
475 }
475 }
476 }
476 }
477
477
478 .code-body {
478 .code-body {
479 padding: 0.8em 1em;
479 padding: 0.8em 1em;
480 background-color: #ffffff;
480 background-color: #ffffff;
481 min-width: 100%;
481 min-width: 100%;
482 box-sizing: border-box;
482 box-sizing: border-box;
483 // TODO: johbo: Parent has overflow: auto, this forces the child here
483 // TODO: johbo: Parent has overflow: auto, this forces the child here
484 // to have the intended size and to scroll. Should be simplified.
484 // to have the intended size and to scroll. Should be simplified.
485 width: 100%;
485 width: 100%;
486 overflow-x: auto;
486 overflow-x: auto;
487
487
488 img.rendered-binary {
488 img.rendered-binary {
489 height: auto;
489 height: auto;
490 width: 100%;
490 width: 100%;
491 }
491 }
492
492
493 .markdown-block {
493 .markdown-block {
494 padding: 1em 0;
494 padding: 1em 0;
495 }
495 }
496 }
496 }
497
497
498 .codeblock-header {
498 .codeblock-header {
499 background: @grey7;
499 background: @grey7;
500 height: 36px;
500 height: 36px;
501 }
501 }
502
502
503 .path {
503 .path {
504 border-bottom: 1px solid @grey6;
504 border-bottom: 1px solid @grey6;
505 padding: .65em 1em;
505 padding: .65em 1em;
506 height: 18px;
506 height: 18px;
507 }
507 }
508 }
508 }
509
509
510 .code-highlighttable,
510 .code-highlighttable,
511 div.codeblock {
511 div.codeblock {
512
512
513 &.readme {
513 &.readme {
514 background-color: white;
514 background-color: white;
515 }
515 }
516
516
517 .markdown-block table {
517 .markdown-block table {
518 border-collapse: collapse;
518 border-collapse: collapse;
519
519
520 th,
520 th,
521 td {
521 td {
522 padding: .5em;
522 padding: .5em;
523 border: @border-thickness solid @border-default-color;
523 border: @border-thickness solid @border-default-color;
524 }
524 }
525 }
525 }
526
526
527 table {
527 table {
528 border: 0px;
528 border: 0px;
529 margin: 0;
529 margin: 0;
530 letter-spacing: normal;
530 letter-spacing: normal;
531
531
532
532
533 td {
533 td {
534 border: 0px;
534 border: 0px;
535 vertical-align: top;
535 vertical-align: top;
536 }
536 }
537 }
537 }
538 }
538 }
539
539
540 div.codeblock .code-header .search-path { padding: 0 0 0 10px; }
540 div.codeblock .code-header .search-path { padding: 0 0 0 10px; }
541 div.search-code-body {
541 div.search-code-body {
542 background-color: #ffffff; padding: 5px 0 5px 10px;
542 background-color: #ffffff; padding: 5px 0 5px 10px;
543 pre {
543 pre {
544 .match { background-color: #faffa6;}
544 .match { background-color: #faffa6;}
545 .break { display: block; width: 100%; background-color: #DDE7EF; color: #747474; }
545 .break { display: block; width: 100%; background-color: #DDE7EF; color: #747474; }
546 }
546 }
547 .code-highlighttable {
547 .code-highlighttable {
548 border-collapse: collapse;
548 border-collapse: collapse;
549
549
550 tr:hover {
550 tr:hover {
551 background: #fafafa;
551 background: #fafafa;
552 }
552 }
553 td.code {
553 td.code {
554 padding-left: 10px;
554 padding-left: 10px;
555 }
555 }
556 td.line {
556 td.line {
557 border-right: 1px solid #ccc !important;
557 border-right: 1px solid #ccc !important;
558 padding-right: 10px;
558 padding-right: 10px;
559 text-align: right;
559 text-align: right;
560 font-family: @text-monospace;
560 font-family: @text-monospace;
561 span {
561 span {
562 white-space: pre-wrap;
562 white-space: pre-wrap;
563 color: #666666;
563 color: #666666;
564 }
564 }
565 }
565 }
566 }
566 }
567 }
567 }
568
568
569 div.annotatediv { margin-left: 2px; margin-right: 4px; }
569 div.annotatediv { margin-left: 2px; margin-right: 4px; }
570 .code-highlight {
570 .code-highlight {
571 margin: 0; padding: 0; border-left: @border-thickness solid @grey5;
571 margin: 0; padding: 0; border-left: @border-thickness solid @grey5;
572 pre, .linenodiv pre { padding: 0 5px; margin: 0; }
572 pre, .linenodiv pre { padding: 0 5px; margin: 0; }
573 pre div:target {background-color: @comment-highlight-color !important;}
573 pre div:target {background-color: @comment-highlight-color !important;}
574 }
574 }
575
575
576 .linenos a { text-decoration: none; }
576 .linenos a { text-decoration: none; }
577
577
578 .CodeMirror-selected { background: @rchighlightblue; }
578 .CodeMirror-selected { background: @rchighlightblue; }
579 .CodeMirror-focused .CodeMirror-selected { background: @rchighlightblue; }
579 .CodeMirror-focused .CodeMirror-selected { background: @rchighlightblue; }
580 .CodeMirror ::selection { background: @rchighlightblue; }
580 .CodeMirror ::selection { background: @rchighlightblue; }
581 .CodeMirror ::-moz-selection { background: @rchighlightblue; }
581 .CodeMirror ::-moz-selection { background: @rchighlightblue; }
582
582
583 .code { display: block; border:0px !important; }
583 .code { display: block; border:0px !important; }
584 .code-highlight, /* TODO: dan: merge codehilite into code-highlight */
584 .code-highlight, /* TODO: dan: merge codehilite into code-highlight */
585 /* This can be generated with `pygmentize -S default -f html` */
585 /* This can be generated with `pygmentize -S default -f html` */
586 .codehilite {
586 .codehilite {
587 .c-ElasticMatch { background-color: #faffa6; padding: 0.2em;}
587 .c-ElasticMatch { background-color: #faffa6; padding: 0.2em;}
588 .hll { background-color: #ffffcc }
588 .hll { background-color: #ffffcc }
589 .c { color: #408080; font-style: italic } /* Comment */
589 .c { color: #408080; font-style: italic } /* Comment */
590 .err, .codehilite .err { border: none } /* Error */
590 .err, .codehilite .err { border: none } /* Error */
591 .k { color: #008000; font-weight: bold } /* Keyword */
591 .k { color: #008000; font-weight: bold } /* Keyword */
592 .o { color: #666666 } /* Operator */
592 .o { color: #666666 } /* Operator */
593 .ch { color: #408080; font-style: italic } /* Comment.Hashbang */
593 .ch { color: #408080; font-style: italic } /* Comment.Hashbang */
594 .cm { color: #408080; font-style: italic } /* Comment.Multiline */
594 .cm { color: #408080; font-style: italic } /* Comment.Multiline */
595 .cp { color: #BC7A00 } /* Comment.Preproc */
595 .cp { color: #BC7A00 } /* Comment.Preproc */
596 .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
596 .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
597 .c1 { color: #408080; font-style: italic } /* Comment.Single */
597 .c1 { color: #408080; font-style: italic } /* Comment.Single */
598 .cs { color: #408080; font-style: italic } /* Comment.Special */
598 .cs { color: #408080; font-style: italic } /* Comment.Special */
599 .gd { color: #A00000 } /* Generic.Deleted */
599 .gd { color: #A00000 } /* Generic.Deleted */
600 .ge { font-style: italic } /* Generic.Emph */
600 .ge { font-style: italic } /* Generic.Emph */
601 .gr { color: #FF0000 } /* Generic.Error */
601 .gr { color: #FF0000 } /* Generic.Error */
602 .gh { color: #000080; font-weight: bold } /* Generic.Heading */
602 .gh { color: #000080; font-weight: bold } /* Generic.Heading */
603 .gi { color: #00A000 } /* Generic.Inserted */
603 .gi { color: #00A000 } /* Generic.Inserted */
604 .go { color: #888888 } /* Generic.Output */
604 .go { color: #888888 } /* Generic.Output */
605 .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
605 .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
606 .gs { font-weight: bold } /* Generic.Strong */
606 .gs { font-weight: bold } /* Generic.Strong */
607 .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
607 .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
608 .gt { color: #0044DD } /* Generic.Traceback */
608 .gt { color: #0044DD } /* Generic.Traceback */
609 .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
609 .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
610 .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
610 .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
611 .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
611 .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
612 .kp { color: #008000 } /* Keyword.Pseudo */
612 .kp { color: #008000 } /* Keyword.Pseudo */
613 .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
613 .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
614 .kt { color: #B00040 } /* Keyword.Type */
614 .kt { color: #B00040 } /* Keyword.Type */
615 .m { color: #666666 } /* Literal.Number */
615 .m { color: #666666 } /* Literal.Number */
616 .s { color: #BA2121 } /* Literal.String */
616 .s { color: #BA2121 } /* Literal.String */
617 .na { color: #7D9029 } /* Name.Attribute */
617 .na { color: #7D9029 } /* Name.Attribute */
618 .nb { color: #008000 } /* Name.Builtin */
618 .nb { color: #008000 } /* Name.Builtin */
619 .nc { color: #0000FF; font-weight: bold } /* Name.Class */
619 .nc { color: #0000FF; font-weight: bold } /* Name.Class */
620 .no { color: #880000 } /* Name.Constant */
620 .no { color: #880000 } /* Name.Constant */
621 .nd { color: #AA22FF } /* Name.Decorator */
621 .nd { color: #AA22FF } /* Name.Decorator */
622 .ni { color: #999999; font-weight: bold } /* Name.Entity */
622 .ni { color: #999999; font-weight: bold } /* Name.Entity */
623 .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
623 .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
624 .nf { color: #0000FF } /* Name.Function */
624 .nf { color: #0000FF } /* Name.Function */
625 .nl { color: #A0A000 } /* Name.Label */
625 .nl { color: #A0A000 } /* Name.Label */
626 .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
626 .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
627 .nt { color: #008000; font-weight: bold } /* Name.Tag */
627 .nt { color: #008000; font-weight: bold } /* Name.Tag */
628 .nv { color: #19177C } /* Name.Variable */
628 .nv { color: #19177C } /* Name.Variable */
629 .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
629 .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
630 .w { color: #bbbbbb } /* Text.Whitespace */
630 .w { color: #bbbbbb } /* Text.Whitespace */
631 .mb { color: #666666 } /* Literal.Number.Bin */
631 .mb { color: #666666 } /* Literal.Number.Bin */
632 .mf { color: #666666 } /* Literal.Number.Float */
632 .mf { color: #666666 } /* Literal.Number.Float */
633 .mh { color: #666666 } /* Literal.Number.Hex */
633 .mh { color: #666666 } /* Literal.Number.Hex */
634 .mi { color: #666666 } /* Literal.Number.Integer */
634 .mi { color: #666666 } /* Literal.Number.Integer */
635 .mo { color: #666666 } /* Literal.Number.Oct */
635 .mo { color: #666666 } /* Literal.Number.Oct */
636 .sa { color: #BA2121 } /* Literal.String.Affix */
636 .sa { color: #BA2121 } /* Literal.String.Affix */
637 .sb { color: #BA2121 } /* Literal.String.Backtick */
637 .sb { color: #BA2121 } /* Literal.String.Backtick */
638 .sc { color: #BA2121 } /* Literal.String.Char */
638 .sc { color: #BA2121 } /* Literal.String.Char */
639 .dl { color: #BA2121 } /* Literal.String.Delimiter */
639 .dl { color: #BA2121 } /* Literal.String.Delimiter */
640 .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
640 .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
641 .s2 { color: #BA2121 } /* Literal.String.Double */
641 .s2 { color: #BA2121 } /* Literal.String.Double */
642 .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
642 .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
643 .sh { color: #BA2121 } /* Literal.String.Heredoc */
643 .sh { color: #BA2121 } /* Literal.String.Heredoc */
644 .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
644 .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
645 .sx { color: #008000 } /* Literal.String.Other */
645 .sx { color: #008000 } /* Literal.String.Other */
646 .sr { color: #BB6688 } /* Literal.String.Regex */
646 .sr { color: #BB6688 } /* Literal.String.Regex */
647 .s1 { color: #BA2121 } /* Literal.String.Single */
647 .s1 { color: #BA2121 } /* Literal.String.Single */
648 .ss { color: #19177C } /* Literal.String.Symbol */
648 .ss { color: #19177C } /* Literal.String.Symbol */
649 .bp { color: #008000 } /* Name.Builtin.Pseudo */
649 .bp { color: #008000 } /* Name.Builtin.Pseudo */
650 .fm { color: #0000FF } /* Name.Function.Magic */
650 .fm { color: #0000FF } /* Name.Function.Magic */
651 .vc { color: #19177C } /* Name.Variable.Class */
651 .vc { color: #19177C } /* Name.Variable.Class */
652 .vg { color: #19177C } /* Name.Variable.Global */
652 .vg { color: #19177C } /* Name.Variable.Global */
653 .vi { color: #19177C } /* Name.Variable.Instance */
653 .vi { color: #19177C } /* Name.Variable.Instance */
654 .vm { color: #19177C } /* Name.Variable.Magic */
654 .vm { color: #19177C } /* Name.Variable.Magic */
655 .il { color: #666666 } /* Literal.Number.Integer.Long */
655 .il { color: #666666 } /* Literal.Number.Integer.Long */
656
656
657 }
657 }
658
658
659 /* customized pre blocks for markdown/rst */
659 /* customized pre blocks for markdown/rst */
660 pre.literal-block, .codehilite pre{
660 pre.literal-block, .codehilite pre{
661 padding: @padding;
661 padding: @padding;
662 border: 1px solid @grey6;
662 border: 1px solid @grey6;
663 .border-radius(@border-radius);
663 .border-radius(@border-radius);
664 background-color: @grey7;
664 background-color: @grey7;
665 }
665 }
666
666
667
667
668 /* START NEW CODE BLOCK CSS */
668 /* START NEW CODE BLOCK CSS */
669
669
670 @cb-line-height: 18px;
670 @cb-line-height: 18px;
671 @cb-line-code-padding: 10px;
671 @cb-line-code-padding: 10px;
672 @cb-text-padding: 5px;
672 @cb-text-padding: 5px;
673
673
674 @pill-padding: 2px 7px;
674 @pill-padding: 2px 7px;
675 @pill-padding-small: 2px 2px 1px 2px;
675 @pill-padding-small: 2px 2px 1px 2px;
676
676
677 input.filediff-collapse-state {
677 input.filediff-collapse-state {
678 display: none;
678 display: none;
679
679
680 &:checked + .filediff { /* file diff is collapsed */
680 &:checked + .filediff { /* file diff is collapsed */
681 .cb {
681 .cb {
682 display: none
682 display: none
683 }
683 }
684 .filediff-collapse-indicator {
684 .filediff-collapse-indicator {
685 width: 0;
685 float: left;
686 height: 0;
686 cursor: pointer;
687 border-style: solid;
687 margin: 1px -5px;
688 border-width: 4.5px 0 4.5px 9.3px;
689 border-color: transparent transparent transparent #aaa;
690 margin: 6px 0px;
691 }
688 }
689 .filediff-collapse-indicator:before {
690 content: '\f105';
691 }
692
692 .filediff-menu {
693 .filediff-menu {
693 display: none;
694 display: none;
694 }
695 }
695
696
696 }
697 }
697
698
698 &+ .filediff { /* file diff is expanded */
699 &+ .filediff { /* file diff is expanded */
700
699 .filediff-collapse-indicator {
701 .filediff-collapse-indicator {
700 width: 0;
702 float: left;
701 height: 0;
703 cursor: pointer;
702 border-style: solid;
704 margin: 1px -5px;
703 border-width: 9.3px 4.5px 0 4.5px;
705 }
704 border-color: #aaa transparent transparent transparent;
706 .filediff-collapse-indicator:before {
705 margin: 6px 0px;
707 content: '\f107';
708 }
706
709
707 }
708 .filediff-menu {
710 .filediff-menu {
709 display: block;
711 display: block;
710 }
712 }
713
711 margin: 10px 0;
714 margin: 10px 0;
712 &:nth-child(2) {
715 &:nth-child(2) {
713 margin: 0;
716 margin: 0;
714 }
717 }
715 }
718 }
716 }
719 }
717
720
718 .filediffs .anchor {
721 .filediffs .anchor {
719 display: block;
722 display: block;
720 height: 40px;
723 height: 40px;
721 margin-top: -40px;
724 margin-top: -40px;
722 visibility: hidden;
725 visibility: hidden;
723 }
726 }
724
727
725 .filediffs .anchor:nth-of-type(1) {
728 .filediffs .anchor:nth-of-type(1) {
726 display: block;
729 display: block;
727 height: 80px;
730 height: 80px;
728 margin-top: -80px;
731 margin-top: -80px;
729 visibility: hidden;
732 visibility: hidden;
730 }
733 }
731
734
732 .cs_files {
735 .cs_files {
733 clear: both;
736 clear: both;
734 }
737 }
735
738
736 #diff-file-sticky{
739 #diff-file-sticky{
737 will-change: min-height;
740 will-change: min-height;
741 height: 80px;
738 }
742 }
739
743
740 .sidebar__inner{
744 .sidebar__inner{
741 transform: translate(0, 0); /* For browsers don't support translate3d. */
745 transform: translate(0, 0); /* For browsers don't support translate3d. */
742 transform: translate3d(0, 0, 0);
746 transform: translate3d(0, 0, 0);
743 will-change: position, transform;
747 will-change: position, transform;
744 height: 70px;
748 height: 65px;
745 z-index: 30;
749 z-index: 30;
746 background-color: #fff;
750 background-color: #fff;
747 padding: 5px 0px;
751 padding: 5px 0px;
748 }
752 }
749
753
750 .sidebar__bar {
754 .sidebar__bar {
751 padding: 5px 0px 0px 0px
755 padding: 5px 0px 0px 0px
752 }
756 }
753
757
754 .fpath-placeholder {
758 .fpath-placeholder {
755 clear: both;
759 clear: both;
756 visibility: hidden
760 visibility: hidden
757 }
761 }
758
762
759 .is-affixed {
763 .is-affixed {
760 .sidebar_inner_shadow {
764 .sidebar_inner_shadow {
761 position: fixed;
765 position: fixed;
762 top: 75px;
766 top: 75px;
763 right: -100%;
767 right: -100%;
764 left: -100%;
768 left: -100%;
765 z-index: 28;
769 z-index: 28;
766 display: block;
770 display: block;
767 height: 5px;
771 height: 5px;
768 content: "";
772 content: "";
769 background: linear-gradient(rgba(0, 0, 0, 0.075), rgba(0, 0, 0, 0.001)) repeat-x 0 0;
773 background: linear-gradient(rgba(0, 0, 0, 0.075), rgba(0, 0, 0, 0.001)) repeat-x 0 0;
770 border-top: 1px solid rgba(0, 0, 0, 0.15);
774 border-top: 1px solid rgba(0, 0, 0, 0.15);
771 }
775 }
772 .fpath-placeholder {
776 .fpath-placeholder {
773 visibility: visible !important;
777 visibility: visible !important;
774 }
778 }
775 }
779 }
776
780
777 .diffset-menu {
781 .diffset-menu {
778 margin-bottom: 20px;
782
779 }
783 }
784
785 #todo-box {
786 clear:both;
787 display: none;
788 text-align: right
789 }
790
780 .diffset {
791 .diffset {
781 margin: 20px auto;
792 margin: 0px auto;
782 .diffset-heading {
793 .diffset-heading {
783 border: 1px solid @grey5;
794 border: 1px solid @grey5;
784 margin-bottom: -1px;
795 margin-bottom: -1px;
785 // margin-top: 20px;
796 // margin-top: 20px;
786 h2 {
797 h2 {
787 margin: 0;
798 margin: 0;
788 line-height: 38px;
799 line-height: 38px;
789 padding-left: 10px;
800 padding-left: 10px;
790 }
801 }
791 .btn {
802 .btn {
792 margin: 0;
803 margin: 0;
793 }
804 }
794 background: @grey6;
805 background: @grey6;
795 display: block;
806 display: block;
796 padding: 5px;
807 padding: 5px;
797 }
808 }
798 .diffset-heading-warning {
809 .diffset-heading-warning {
799 background: @alert3-inner;
810 background: @alert3-inner;
800 border: 1px solid @alert3;
811 border: 1px solid @alert3;
801 }
812 }
802 &.diffset-comments-disabled {
813 &.diffset-comments-disabled {
803 .cb-comment-box-opener, .comment-inline-form, .cb-comment-add-button {
814 .cb-comment-box-opener, .comment-inline-form, .cb-comment-add-button {
804 display: none !important;
815 display: none !important;
805 }
816 }
806 }
817 }
807 }
818 }
808
819
809 .filelist {
820 .filelist {
810 .pill {
821 .pill {
811 display: block;
822 display: block;
812 float: left;
823 float: left;
813 padding: @pill-padding-small;
824 padding: @pill-padding-small;
814 }
825 }
815 }
826 }
816
827
817 .pill {
828 .pill {
818 display: block;
829 display: block;
819 float: left;
830 float: left;
820 padding: @pill-padding;
831 padding: @pill-padding;
821 }
832 }
822
833
823 .pill-group {
834 .pill-group {
824 .pill {
835 .pill {
825 opacity: .8;
836 opacity: .8;
826 margin-right: 3px;
837 margin-right: 3px;
827 font-size: 12px;
838 font-size: 12px;
828 font-weight: normal;
839 font-weight: normal;
840 min-width: 30px;
841 text-align: center;
829
842
830 &:first-child {
843 &:first-child {
831 border-radius: @border-radius 0 0 @border-radius;
844 border-radius: @border-radius 0 0 @border-radius;
832 }
845 }
833 &:last-child {
846 &:last-child {
834 border-radius: 0 @border-radius @border-radius 0;
847 border-radius: 0 @border-radius @border-radius 0;
835 }
848 }
836 &:only-child {
849 &:only-child {
837 border-radius: @border-radius;
850 border-radius: @border-radius;
838 margin-right: 0;
851 margin-right: 0;
839 }
852 }
840 }
853 }
841 }
854 }
842
855
843 /* Main comments*/
856 /* Main comments*/
844 #comments {
857 #comments {
845 .comment-selected {
858 .comment-selected {
846 border-left: 6px solid @comment-highlight-color;
859 border-left: 6px solid @comment-highlight-color;
847 padding-left: 3px;
860 padding-left: 3px;
848 margin-left: -9px;
861 margin-left: -9px;
849 }
862 }
850 }
863 }
851
864
852 .filediff {
865 .filediff {
853 border: 1px solid @grey5;
866 border: 1px solid @grey5;
854
867
855 /* START OVERRIDES */
868 /* START OVERRIDES */
856 .code-highlight {
869 .code-highlight {
857 border: none; // TODO: remove this border from the global
870 border: none; // TODO: remove this border from the global
858 // .code-highlight, it doesn't belong there
871 // .code-highlight, it doesn't belong there
859 }
872 }
860 label {
873 label {
861 margin: 0; // TODO: remove this margin definition from global label
874 margin: 0; // TODO: remove this margin definition from global label
862 // it doesn't belong there - if margin on labels
875 // it doesn't belong there - if margin on labels
863 // are needed for a form they should be defined
876 // are needed for a form they should be defined
864 // in the form's class
877 // in the form's class
865 }
878 }
866 /* END OVERRIDES */
879 /* END OVERRIDES */
867
880
868 * {
881 * {
869 box-sizing: border-box;
882 box-sizing: border-box;
870 }
883 }
871 .filediff-anchor {
884 .filediff-anchor {
872 visibility: hidden;
885 visibility: hidden;
873 }
886 }
874 &:hover {
887 &:hover {
875 .filediff-anchor {
888 .filediff-anchor {
876 visibility: visible;
889 visibility: visible;
877 }
890 }
878 }
891 }
879
892
880 .filediff-collapse-indicator {
881 border-style: solid;
882 float: left;
883 margin: 4px 0px 0 0;
884 cursor: pointer;
885 }
886
887 .filediff-heading {
893 .filediff-heading {
888 background: @grey7;
889 cursor: pointer;
894 cursor: pointer;
890 display: block;
895 display: block;
891 padding: 5px 10px;
896 padding: 10px 10px;
892 }
897 }
893 .filediff-heading:after {
898 .filediff-heading:after {
894 content: "";
899 content: "";
895 display: table;
900 display: table;
896 clear: both;
901 clear: both;
897 }
902 }
898 .filediff-heading:hover {
903 .filediff-heading:hover {
899 background: #e1e9f4 !important;
904 background: #e1e9f4 !important;
900 }
905 }
901
906
902 .filediff-menu {
907 .filediff-menu {
903 float: right;
904 text-align: right;
908 text-align: right;
905 padding: 5px 5px 5px 0px;
909 padding: 5px 5px 5px 0px;
910 background: @grey7;
906
911
907 &> a,
912 &> a,
908 &> span {
913 &> span {
909 padding: 1px;
914 padding: 1px;
910 }
915 }
911 }
916 }
912
917
913 .filediff-collapse-button, .filediff-expand-button {
918 .filediff-collapse-button, .filediff-expand-button {
914 cursor: pointer;
919 cursor: pointer;
915 }
920 }
916 .filediff-collapse-button {
921 .filediff-collapse-button {
917 display: inline;
922 display: inline;
918 }
923 }
919 .filediff-expand-button {
924 .filediff-expand-button {
920 display: none;
925 display: none;
921 }
926 }
922 .filediff-collapsed .filediff-collapse-button {
927 .filediff-collapsed .filediff-collapse-button {
923 display: none;
928 display: none;
924 }
929 }
925 .filediff-collapsed .filediff-expand-button {
930 .filediff-collapsed .filediff-expand-button {
926 display: inline;
931 display: inline;
927 }
932 }
928
933
929 /**** COMMENTS ****/
934 /**** COMMENTS ****/
930
935
931 .filediff-menu {
936 .filediff-menu {
932 .show-comment-button {
937 .show-comment-button {
933 display: none;
938 display: none;
934 }
939 }
935 }
940 }
936 &.hide-comments {
941 &.hide-comments {
937 .inline-comments {
942 .inline-comments {
938 display: none;
943 display: none;
939 }
944 }
940 .filediff-menu {
945 .filediff-menu {
941 .show-comment-button {
946 .show-comment-button {
942 display: inline;
947 display: inline;
943 }
948 }
944 .hide-comment-button {
949 .hide-comment-button {
945 display: none;
950 display: none;
946 }
951 }
947 }
952 }
948 }
953 }
949
954
950 .hide-line-comments {
955 .hide-line-comments {
951 .inline-comments {
956 .inline-comments {
952 display: none;
957 display: none;
953 }
958 }
954 }
959 }
955
960
956 /**** END COMMENTS ****/
961 /**** END COMMENTS ****/
957
962
958 }
963 }
959
964
960
965
966 .op-added {
967 color: @alert1;
968 }
969
970 .op-deleted {
971 color: @alert2;
972 }
961
973
962 .filediff, .filelist {
974 .filediff, .filelist {
975
963 .pill {
976 .pill {
964 &[op="name"] {
977 &[op="name"] {
965 background: none;
978 background: none;
966 opacity: 1;
979 opacity: 1;
967 color: white;
980 color: white;
968 }
981 }
969 &[op="limited"] {
982 &[op="limited"] {
970 background: @grey2;
983 background: @grey2;
971 color: white;
984 color: white;
972 }
985 }
973 &[op="binary"] {
986 &[op="binary"] {
974 background: @color7;
987 background: @color7;
975 color: white;
988 color: white;
976 }
989 }
977 &[op="modified"] {
990 &[op="modified"] {
978 background: @alert1;
991 background: @alert1;
979 color: white;
992 color: white;
980 }
993 }
981 &[op="renamed"] {
994 &[op="renamed"] {
982 background: @color4;
995 background: @color4;
983 color: white;
996 color: white;
984 }
997 }
985 &[op="copied"] {
998 &[op="copied"] {
986 background: @color4;
999 background: @color4;
987 color: white;
1000 color: white;
988 }
1001 }
989 &[op="mode"] {
1002 &[op="mode"] {
990 background: @grey3;
1003 background: @grey3;
991 color: white;
1004 color: white;
992 }
1005 }
993 &[op="symlink"] {
1006 &[op="symlink"] {
994 background: @color8;
1007 background: @color8;
995 color: white;
1008 color: white;
996 }
1009 }
997
1010
998 &[op="added"] { /* added lines */
1011 &[op="added"] { /* added lines */
999 background: @alert1;
1012 background: @alert1;
1000 color: white;
1013 color: white;
1001 }
1014 }
1002 &[op="deleted"] { /* deleted lines */
1015 &[op="deleted"] { /* deleted lines */
1003 background: @alert2;
1016 background: @alert2;
1004 color: white;
1017 color: white;
1005 }
1018 }
1006
1019
1007 &[op="created"] { /* created file */
1020 &[op="created"] { /* created file */
1008 background: @alert1;
1021 background: @alert1;
1009 color: white;
1022 color: white;
1010 }
1023 }
1011 &[op="removed"] { /* deleted file */
1024 &[op="removed"] { /* deleted file */
1012 background: @color5;
1025 background: @color5;
1013 color: white;
1026 color: white;
1014 }
1027 }
1015 }
1028 }
1016 }
1029 }
1017
1030
1018
1031
1019 .filediff-outdated {
1032 .filediff-outdated {
1020 padding: 8px 0;
1033 padding: 8px 0;
1021
1034
1022 .filediff-heading {
1035 .filediff-heading {
1023 opacity: .5;
1036 opacity: .5;
1024 }
1037 }
1025 }
1038 }
1026
1039
1027 table.cb {
1040 table.cb {
1028 width: 100%;
1041 width: 100%;
1029 border-collapse: collapse;
1042 border-collapse: collapse;
1030
1043
1031 .cb-text {
1044 .cb-text {
1032 padding: @cb-text-padding;
1045 padding: @cb-text-padding;
1033 }
1046 }
1034 .cb-hunk {
1047 .cb-hunk {
1035 padding: @cb-text-padding;
1048 padding: @cb-text-padding;
1036 }
1049 }
1037 .cb-expand {
1050 .cb-expand {
1038 display: none;
1051 display: none;
1039 }
1052 }
1040 .cb-collapse {
1053 .cb-collapse {
1041 display: inline;
1054 display: inline;
1042 }
1055 }
1043 &.cb-collapsed {
1056 &.cb-collapsed {
1044 .cb-line {
1057 .cb-line {
1045 display: none;
1058 display: none;
1046 }
1059 }
1047 .cb-expand {
1060 .cb-expand {
1048 display: inline;
1061 display: inline;
1049 }
1062 }
1050 .cb-collapse {
1063 .cb-collapse {
1051 display: none;
1064 display: none;
1052 }
1065 }
1053 .cb-hunk {
1066 .cb-hunk {
1054 display: none;
1067 display: none;
1055 }
1068 }
1056 }
1069 }
1057
1070
1058 /* intentionally general selector since .cb-line-selected must override it
1071 /* intentionally general selector since .cb-line-selected must override it
1059 and they both use !important since the td itself may have a random color
1072 and they both use !important since the td itself may have a random color
1060 generated by annotation blocks. TLDR: if you change it, make sure
1073 generated by annotation blocks. TLDR: if you change it, make sure
1061 annotated block selection and line selection in file view still work */
1074 annotated block selection and line selection in file view still work */
1062 .cb-line-fresh .cb-content {
1075 .cb-line-fresh .cb-content {
1063 background: white !important;
1076 background: white !important;
1064 }
1077 }
1065 .cb-warning {
1078 .cb-warning {
1066 background: #fff4dd;
1079 background: #fff4dd;
1067 }
1080 }
1068
1081
1069 &.cb-diff-sideside {
1082 &.cb-diff-sideside {
1070 td {
1083 td {
1071 &.cb-content {
1084 &.cb-content {
1072 width: 50%;
1085 width: 50%;
1073 }
1086 }
1074 }
1087 }
1075 }
1088 }
1076
1089
1077 tr {
1090 tr {
1078 &.cb-annotate {
1091 &.cb-annotate {
1079 border-top: 1px solid #eee;
1092 border-top: 1px solid #eee;
1080 }
1093 }
1081
1094
1082 &.cb-comment-info {
1095 &.cb-comment-info {
1083 border-top: 1px solid #eee;
1096 border-top: 1px solid #eee;
1084 color: rgba(0, 0, 0, 0.3);
1097 color: rgba(0, 0, 0, 0.3);
1085 background: #edf2f9;
1098 background: #edf2f9;
1086
1099
1087 td {
1100 td {
1088
1101
1089 }
1102 }
1090 }
1103 }
1091
1104
1092 &.cb-hunk {
1105 &.cb-hunk {
1093 font-family: @text-monospace;
1106 font-family: @text-monospace;
1094 color: rgba(0, 0, 0, 0.3);
1107 color: rgba(0, 0, 0, 0.3);
1095
1108
1096 td {
1109 td {
1097 &:first-child {
1110 &:first-child {
1098 background: #edf2f9;
1111 background: #edf2f9;
1099 }
1112 }
1100 &:last-child {
1113 &:last-child {
1101 background: #f4f7fb;
1114 background: #f4f7fb;
1102 }
1115 }
1103 }
1116 }
1104 }
1117 }
1105 }
1118 }
1106
1119
1107
1120
1108 td {
1121 td {
1109 vertical-align: top;
1122 vertical-align: top;
1110 padding: 0;
1123 padding: 0;
1111
1124
1112 &.cb-content {
1125 &.cb-content {
1113 font-size: 12.35px;
1126 font-size: 12.35px;
1114
1127
1115 &.cb-line-selected .cb-code {
1128 &.cb-line-selected .cb-code {
1116 background: @comment-highlight-color !important;
1129 background: @comment-highlight-color !important;
1117 }
1130 }
1118
1131
1119 span.cb-code {
1132 span.cb-code {
1120 line-height: @cb-line-height;
1133 line-height: @cb-line-height;
1121 padding-left: @cb-line-code-padding;
1134 padding-left: @cb-line-code-padding;
1122 padding-right: @cb-line-code-padding;
1135 padding-right: @cb-line-code-padding;
1123 display: block;
1136 display: block;
1124 white-space: pre-wrap;
1137 white-space: pre-wrap;
1125 font-family: @text-monospace;
1138 font-family: @text-monospace;
1126 word-break: break-all;
1139 word-break: break-all;
1127 .nonl {
1140 .nonl {
1128 color: @color5;
1141 color: @color5;
1129 }
1142 }
1130 .cb-action {
1143 .cb-action {
1131 &:before {
1144 &:before {
1132 content: " ";
1145 content: " ";
1133 }
1146 }
1134 &.cb-deletion:before {
1147 &.cb-deletion:before {
1135 content: "- ";
1148 content: "- ";
1136 }
1149 }
1137 &.cb-addition:before {
1150 &.cb-addition:before {
1138 content: "+ ";
1151 content: "+ ";
1139 }
1152 }
1140 }
1153 }
1141 }
1154 }
1142
1155
1143 &> button.cb-comment-box-opener {
1156 &> button.cb-comment-box-opener {
1144
1157
1145 padding: 2px 2px 1px 3px;
1158 padding: 2px 2px 1px 3px;
1146 margin-left: -6px;
1159 margin-left: -6px;
1147 margin-top: -1px;
1160 margin-top: -1px;
1148
1161
1149 border-radius: @border-radius;
1162 border-radius: @border-radius;
1150 position: absolute;
1163 position: absolute;
1151 display: none;
1164 display: none;
1152 }
1165 }
1153 .cb-comment {
1166 .cb-comment {
1154 margin-top: 10px;
1167 margin-top: 10px;
1155 white-space: normal;
1168 white-space: normal;
1156 }
1169 }
1157 }
1170 }
1158 &:hover {
1171 &:hover {
1159 button.cb-comment-box-opener {
1172 button.cb-comment-box-opener {
1160 display: block;
1173 display: block;
1161 }
1174 }
1162 &+ td button.cb-comment-box-opener {
1175 &+ td button.cb-comment-box-opener {
1163 display: block
1176 display: block
1164 }
1177 }
1165 }
1178 }
1166
1179
1167 &.cb-data {
1180 &.cb-data {
1168 text-align: right;
1181 text-align: right;
1169 width: 30px;
1182 width: 30px;
1170 font-family: @text-monospace;
1183 font-family: @text-monospace;
1171
1184
1172 .icon-comment {
1185 .icon-comment {
1173 cursor: pointer;
1186 cursor: pointer;
1174 }
1187 }
1175 &.cb-line-selected {
1188 &.cb-line-selected {
1176 background: @comment-highlight-color !important;
1189 background: @comment-highlight-color !important;
1177 }
1190 }
1178 &.cb-line-selected > div {
1191 &.cb-line-selected > div {
1179 display: block;
1192 display: block;
1180 background: @comment-highlight-color !important;
1193 background: @comment-highlight-color !important;
1181 line-height: @cb-line-height;
1194 line-height: @cb-line-height;
1182 color: rgba(0, 0, 0, 0.3);
1195 color: rgba(0, 0, 0, 0.3);
1183 }
1196 }
1184 }
1197 }
1185
1198
1186 &.cb-lineno {
1199 &.cb-lineno {
1187 padding: 0;
1200 padding: 0;
1188 width: 50px;
1201 width: 50px;
1189 color: rgba(0, 0, 0, 0.3);
1202 color: rgba(0, 0, 0, 0.3);
1190 text-align: right;
1203 text-align: right;
1191 border-right: 1px solid #eee;
1204 border-right: 1px solid #eee;
1192 font-family: @text-monospace;
1205 font-family: @text-monospace;
1193 -webkit-user-select: none;
1206 -webkit-user-select: none;
1194 -moz-user-select: none;
1207 -moz-user-select: none;
1195 user-select: none;
1208 user-select: none;
1196
1209
1197 a::before {
1210 a::before {
1198 content: attr(data-line-no);
1211 content: attr(data-line-no);
1199 }
1212 }
1200 &.cb-line-selected {
1213 &.cb-line-selected {
1201 background: @comment-highlight-color !important;
1214 background: @comment-highlight-color !important;
1202 }
1215 }
1203
1216
1204 a {
1217 a {
1205 display: block;
1218 display: block;
1206 padding-right: @cb-line-code-padding;
1219 padding-right: @cb-line-code-padding;
1207 padding-left: @cb-line-code-padding;
1220 padding-left: @cb-line-code-padding;
1208 line-height: @cb-line-height;
1221 line-height: @cb-line-height;
1209 color: rgba(0, 0, 0, 0.3);
1222 color: rgba(0, 0, 0, 0.3);
1210 }
1223 }
1211 }
1224 }
1212
1225
1213 &.cb-empty {
1226 &.cb-empty {
1214 background: @grey7;
1227 background: @grey7;
1215 }
1228 }
1216
1229
1217 ins {
1230 ins {
1218 color: black;
1231 color: black;
1219 background: #a6f3a6;
1232 background: #a6f3a6;
1220 text-decoration: none;
1233 text-decoration: none;
1221 }
1234 }
1222 del {
1235 del {
1223 color: black;
1236 color: black;
1224 background: #f8cbcb;
1237 background: #f8cbcb;
1225 text-decoration: none;
1238 text-decoration: none;
1226 }
1239 }
1227 &.cb-addition {
1240 &.cb-addition {
1228 background: #ecffec;
1241 background: #ecffec;
1229
1242
1230 &.blob-lineno {
1243 &.blob-lineno {
1231 background: #ddffdd;
1244 background: #ddffdd;
1232 }
1245 }
1233 }
1246 }
1234 &.cb-deletion {
1247 &.cb-deletion {
1235 background: #ffecec;
1248 background: #ffecec;
1236
1249
1237 &.blob-lineno {
1250 &.blob-lineno {
1238 background: #ffdddd;
1251 background: #ffdddd;
1239 }
1252 }
1240 }
1253 }
1241 &.cb-annotate-message-spacer {
1254 &.cb-annotate-message-spacer {
1242 width:8px;
1255 width:8px;
1243 padding: 1px 0px 0px 3px;
1256 padding: 1px 0px 0px 3px;
1244 }
1257 }
1245 &.cb-annotate-info {
1258 &.cb-annotate-info {
1246 width: 320px;
1259 width: 320px;
1247 min-width: 320px;
1260 min-width: 320px;
1248 max-width: 320px;
1261 max-width: 320px;
1249 padding: 5px 2px;
1262 padding: 5px 2px;
1250 font-size: 13px;
1263 font-size: 13px;
1251
1264
1252 .cb-annotate-message {
1265 .cb-annotate-message {
1253 padding: 2px 0px 0px 0px;
1266 padding: 2px 0px 0px 0px;
1254 white-space: pre-line;
1267 white-space: pre-line;
1255 overflow: hidden;
1268 overflow: hidden;
1256 }
1269 }
1257 .rc-user {
1270 .rc-user {
1258 float: none;
1271 float: none;
1259 padding: 0 6px 0 17px;
1272 padding: 0 6px 0 17px;
1260 min-width: unset;
1273 min-width: unset;
1261 min-height: unset;
1274 min-height: unset;
1262 }
1275 }
1263 }
1276 }
1264
1277
1265 &.cb-annotate-revision {
1278 &.cb-annotate-revision {
1266 cursor: pointer;
1279 cursor: pointer;
1267 text-align: right;
1280 text-align: right;
1268 padding: 1px 3px 0px 3px;
1281 padding: 1px 3px 0px 3px;
1269 }
1282 }
1270 }
1283 }
1271 }
1284 }
@@ -1,578 +1,586 b''
1 // comments.less
1 // comments.less
2 // For use in RhodeCode applications;
2 // For use in RhodeCode applications;
3 // see style guide documentation for guidelines.
3 // see style guide documentation for guidelines.
4
4
5
5
6 // Comments
6 // Comments
7 @comment-outdated-opacity: 0.6;
7 @comment-outdated-opacity: 0.6;
8
8
9 .comments {
9 .comments {
10 width: 100%;
10 width: 100%;
11 }
11 }
12
12
13 .comments-heading {
14 margin-bottom: -1px;
15 background: @grey6;
16 display: block;
17 padding: 10px 0px;
18 font-size: 18px
19 }
20
13 tr.inline-comments div {
21 tr.inline-comments div {
14 max-width: 100%;
22 max-width: 100%;
15
23
16 p {
24 p {
17 white-space: normal;
25 white-space: normal;
18 }
26 }
19
27
20 code, pre, .code, dd {
28 code, pre, .code, dd {
21 overflow-x: auto;
29 overflow-x: auto;
22 width: 1062px;
30 width: 1062px;
23 }
31 }
24
32
25 dd {
33 dd {
26 width: auto;
34 width: auto;
27 }
35 }
28 }
36 }
29
37
30 #injected_page_comments {
38 #injected_page_comments {
31 .comment-previous-link,
39 .comment-previous-link,
32 .comment-next-link,
40 .comment-next-link,
33 .comment-links-divider {
41 .comment-links-divider {
34 display: none;
42 display: none;
35 }
43 }
36 }
44 }
37
45
38 .add-comment {
46 .add-comment {
39 margin-bottom: 10px;
47 margin-bottom: 10px;
40 }
48 }
41 .hide-comment-button .add-comment {
49 .hide-comment-button .add-comment {
42 display: none;
50 display: none;
43 }
51 }
44
52
45 .comment-bubble {
53 .comment-bubble {
46 color: @grey4;
54 color: @grey4;
47 margin-top: 4px;
55 margin-top: 4px;
48 margin-right: 30px;
56 margin-right: 30px;
49 visibility: hidden;
57 visibility: hidden;
50 }
58 }
51
59
52 .comment-label {
60 .comment-label {
53 float: left;
61 float: left;
54
62
55 padding: 0.4em 0.4em;
63 padding: 0.4em 0.4em;
56 margin: 3px 5px 0px -10px;
64 margin: 3px 5px 0px -10px;
57 display: inline-block;
65 display: inline-block;
58 min-height: 0;
66 min-height: 0;
59
67
60 text-align: center;
68 text-align: center;
61 font-size: 10px;
69 font-size: 10px;
62 line-height: .8em;
70 line-height: .8em;
63
71
64 font-family: @text-italic;
72 font-family: @text-italic;
65 font-style: italic;
73 font-style: italic;
66 background: #fff none;
74 background: #fff none;
67 color: @grey4;
75 color: @grey4;
68 border: 1px solid @grey4;
76 border: 1px solid @grey4;
69 white-space: nowrap;
77 white-space: nowrap;
70
78
71 text-transform: uppercase;
79 text-transform: uppercase;
72 min-width: 40px;
80 min-width: 40px;
73
81
74 &.todo {
82 &.todo {
75 color: @color5;
83 color: @color5;
76 font-style: italic;
84 font-style: italic;
77 font-weight: @text-bold-italic-weight;
85 font-weight: @text-bold-italic-weight;
78 font-family: @text-bold-italic;
86 font-family: @text-bold-italic;
79 }
87 }
80
88
81 .resolve {
89 .resolve {
82 cursor: pointer;
90 cursor: pointer;
83 text-decoration: underline;
91 text-decoration: underline;
84 }
92 }
85
93
86 .resolved {
94 .resolved {
87 text-decoration: line-through;
95 text-decoration: line-through;
88 color: @color1;
96 color: @color1;
89 }
97 }
90 .resolved a {
98 .resolved a {
91 text-decoration: line-through;
99 text-decoration: line-through;
92 color: @color1;
100 color: @color1;
93 }
101 }
94 .resolve-text {
102 .resolve-text {
95 color: @color1;
103 color: @color1;
96 margin: 2px 8px;
104 margin: 2px 8px;
97 font-family: @text-italic;
105 font-family: @text-italic;
98 font-style: italic;
106 font-style: italic;
99 }
107 }
100 }
108 }
101
109
102 .has-spacer-after {
110 .has-spacer-after {
103 &:after {
111 &:after {
104 content: ' | ';
112 content: ' | ';
105 color: @grey5;
113 color: @grey5;
106 }
114 }
107 }
115 }
108
116
109 .has-spacer-before {
117 .has-spacer-before {
110 &:before {
118 &:before {
111 content: ' | ';
119 content: ' | ';
112 color: @grey5;
120 color: @grey5;
113 }
121 }
114 }
122 }
115
123
116 .comment {
124 .comment {
117
125
118 &.comment-general {
126 &.comment-general {
119 border: 1px solid @grey5;
127 border: 1px solid @grey5;
120 padding: 5px 5px 5px 5px;
128 padding: 5px 5px 5px 5px;
121 }
129 }
122
130
123 margin: @padding 0;
131 margin: @padding 0;
124 padding: 4px 0 0 0;
132 padding: 4px 0 0 0;
125 line-height: 1em;
133 line-height: 1em;
126
134
127 .rc-user {
135 .rc-user {
128 min-width: 0;
136 min-width: 0;
129 margin: 0px .5em 0 0;
137 margin: 0px .5em 0 0;
130
138
131 .user {
139 .user {
132 display: inline;
140 display: inline;
133 }
141 }
134 }
142 }
135
143
136 .meta {
144 .meta {
137 position: relative;
145 position: relative;
138 width: 100%;
146 width: 100%;
139 border-bottom: 1px solid @grey5;
147 border-bottom: 1px solid @grey5;
140 margin: -5px 0px;
148 margin: -5px 0px;
141 line-height: 24px;
149 line-height: 24px;
142
150
143 &:hover .permalink {
151 &:hover .permalink {
144 visibility: visible;
152 visibility: visible;
145 color: @rcblue;
153 color: @rcblue;
146 }
154 }
147 }
155 }
148
156
149 .author,
157 .author,
150 .date {
158 .date {
151 display: inline;
159 display: inline;
152
160
153 &:after {
161 &:after {
154 content: ' | ';
162 content: ' | ';
155 color: @grey5;
163 color: @grey5;
156 }
164 }
157 }
165 }
158
166
159 .author-general img {
167 .author-general img {
160 top: 3px;
168 top: 3px;
161 }
169 }
162 .author-inline img {
170 .author-inline img {
163 top: 3px;
171 top: 3px;
164 }
172 }
165
173
166 .status-change,
174 .status-change,
167 .permalink,
175 .permalink,
168 .changeset-status-lbl {
176 .changeset-status-lbl {
169 display: inline;
177 display: inline;
170 }
178 }
171
179
172 .permalink {
180 .permalink {
173 visibility: hidden;
181 visibility: hidden;
174 }
182 }
175
183
176 .comment-links-divider {
184 .comment-links-divider {
177 display: inline;
185 display: inline;
178 }
186 }
179
187
180 .comment-links-block {
188 .comment-links-block {
181 float:right;
189 float:right;
182 text-align: right;
190 text-align: right;
183 min-width: 85px;
191 min-width: 85px;
184
192
185 [class^="icon-"]:before,
193 [class^="icon-"]:before,
186 [class*=" icon-"]:before {
194 [class*=" icon-"]:before {
187 margin-left: 0;
195 margin-left: 0;
188 margin-right: 0;
196 margin-right: 0;
189 }
197 }
190 }
198 }
191
199
192 .comment-previous-link {
200 .comment-previous-link {
193 display: inline-block;
201 display: inline-block;
194
202
195 .arrow_comment_link{
203 .arrow_comment_link{
196 cursor: pointer;
204 cursor: pointer;
197 i {
205 i {
198 font-size:10px;
206 font-size:10px;
199 }
207 }
200 }
208 }
201 .arrow_comment_link.disabled {
209 .arrow_comment_link.disabled {
202 cursor: default;
210 cursor: default;
203 color: @grey5;
211 color: @grey5;
204 }
212 }
205 }
213 }
206
214
207 .comment-next-link {
215 .comment-next-link {
208 display: inline-block;
216 display: inline-block;
209
217
210 .arrow_comment_link{
218 .arrow_comment_link{
211 cursor: pointer;
219 cursor: pointer;
212 i {
220 i {
213 font-size:10px;
221 font-size:10px;
214 }
222 }
215 }
223 }
216 .arrow_comment_link.disabled {
224 .arrow_comment_link.disabled {
217 cursor: default;
225 cursor: default;
218 color: @grey5;
226 color: @grey5;
219 }
227 }
220 }
228 }
221
229
222 .flag_status {
230 .flag_status {
223 display: inline-block;
231 display: inline-block;
224 margin: -2px .5em 0 .25em
232 margin: -2px .5em 0 .25em
225 }
233 }
226
234
227 .delete-comment {
235 .delete-comment {
228 display: inline-block;
236 display: inline-block;
229 color: @rcblue;
237 color: @rcblue;
230
238
231 &:hover {
239 &:hover {
232 cursor: pointer;
240 cursor: pointer;
233 }
241 }
234 }
242 }
235
243
236 .text {
244 .text {
237 clear: both;
245 clear: both;
238 .border-radius(@border-radius);
246 .border-radius(@border-radius);
239 .box-sizing(border-box);
247 .box-sizing(border-box);
240
248
241 .markdown-block p,
249 .markdown-block p,
242 .rst-block p {
250 .rst-block p {
243 margin: .5em 0 !important;
251 margin: .5em 0 !important;
244 // TODO: lisa: This is needed because of other rst !important rules :[
252 // TODO: lisa: This is needed because of other rst !important rules :[
245 }
253 }
246 }
254 }
247
255
248 .pr-version {
256 .pr-version {
249 float: left;
257 float: left;
250 margin: 0px 4px;
258 margin: 0px 4px;
251 }
259 }
252 .pr-version-inline {
260 .pr-version-inline {
253 float: left;
261 float: left;
254 margin: 0px 4px;
262 margin: 0px 4px;
255 }
263 }
256 .pr-version-num {
264 .pr-version-num {
257 font-size: 10px;
265 font-size: 10px;
258 }
266 }
259 }
267 }
260
268
261 @comment-padding: 5px;
269 @comment-padding: 5px;
262
270
263 .general-comments {
271 .general-comments {
264 .comment-outdated {
272 .comment-outdated {
265 opacity: @comment-outdated-opacity;
273 opacity: @comment-outdated-opacity;
266 }
274 }
267 }
275 }
268
276
269 .inline-comments {
277 .inline-comments {
270 border-radius: @border-radius;
278 border-radius: @border-radius;
271 .comment {
279 .comment {
272 margin: 0;
280 margin: 0;
273 border-radius: @border-radius;
281 border-radius: @border-radius;
274 }
282 }
275 .comment-outdated {
283 .comment-outdated {
276 opacity: @comment-outdated-opacity;
284 opacity: @comment-outdated-opacity;
277 }
285 }
278
286
279 .comment-inline {
287 .comment-inline {
280 background: white;
288 background: white;
281 padding: @comment-padding @comment-padding;
289 padding: @comment-padding @comment-padding;
282 border: @comment-padding solid @grey6;
290 border: @comment-padding solid @grey6;
283
291
284 .text {
292 .text {
285 border: none;
293 border: none;
286 }
294 }
287 .meta {
295 .meta {
288 border-bottom: 1px solid @grey6;
296 border-bottom: 1px solid @grey6;
289 margin: -5px 0px;
297 margin: -5px 0px;
290 line-height: 24px;
298 line-height: 24px;
291 }
299 }
292 }
300 }
293 .comment-selected {
301 .comment-selected {
294 border-left: 6px solid @comment-highlight-color;
302 border-left: 6px solid @comment-highlight-color;
295 }
303 }
296 .comment-inline-form {
304 .comment-inline-form {
297 padding: @comment-padding;
305 padding: @comment-padding;
298 display: none;
306 display: none;
299 }
307 }
300 .cb-comment-add-button {
308 .cb-comment-add-button {
301 margin: @comment-padding;
309 margin: @comment-padding;
302 }
310 }
303 /* hide add comment button when form is open */
311 /* hide add comment button when form is open */
304 .comment-inline-form-open ~ .cb-comment-add-button {
312 .comment-inline-form-open ~ .cb-comment-add-button {
305 display: none;
313 display: none;
306 }
314 }
307 .comment-inline-form-open {
315 .comment-inline-form-open {
308 display: block;
316 display: block;
309 }
317 }
310 /* hide add comment button when form but no comments */
318 /* hide add comment button when form but no comments */
311 .comment-inline-form:first-child + .cb-comment-add-button {
319 .comment-inline-form:first-child + .cb-comment-add-button {
312 display: none;
320 display: none;
313 }
321 }
314 /* hide add comment button when no comments or form */
322 /* hide add comment button when no comments or form */
315 .cb-comment-add-button:first-child {
323 .cb-comment-add-button:first-child {
316 display: none;
324 display: none;
317 }
325 }
318 /* hide add comment button when only comment is being deleted */
326 /* hide add comment button when only comment is being deleted */
319 .comment-deleting:first-child + .cb-comment-add-button {
327 .comment-deleting:first-child + .cb-comment-add-button {
320 display: none;
328 display: none;
321 }
329 }
322 }
330 }
323
331
324
332
325 .show-outdated-comments {
333 .show-outdated-comments {
326 display: inline;
334 display: inline;
327 color: @rcblue;
335 color: @rcblue;
328 }
336 }
329
337
330 // Comment Form
338 // Comment Form
331 div.comment-form {
339 div.comment-form {
332 margin-top: 20px;
340 margin-top: 20px;
333 }
341 }
334
342
335 .comment-form strong {
343 .comment-form strong {
336 display: block;
344 display: block;
337 margin-bottom: 15px;
345 margin-bottom: 15px;
338 }
346 }
339
347
340 .comment-form textarea {
348 .comment-form textarea {
341 width: 100%;
349 width: 100%;
342 height: 100px;
350 height: 100px;
343 font-family: @text-monospace;
351 font-family: @text-monospace;
344 }
352 }
345
353
346 form.comment-form {
354 form.comment-form {
347 margin-top: 10px;
355 margin-top: 10px;
348 margin-left: 10px;
356 margin-left: 10px;
349 }
357 }
350
358
351 .comment-inline-form .comment-block-ta,
359 .comment-inline-form .comment-block-ta,
352 .comment-form .comment-block-ta,
360 .comment-form .comment-block-ta,
353 .comment-form .preview-box {
361 .comment-form .preview-box {
354 .border-radius(@border-radius);
362 .border-radius(@border-radius);
355 .box-sizing(border-box);
363 .box-sizing(border-box);
356 background-color: white;
364 background-color: white;
357 }
365 }
358
366
359 .comment-form-submit {
367 .comment-form-submit {
360 margin-top: 5px;
368 margin-top: 5px;
361 margin-left: 525px;
369 margin-left: 525px;
362 }
370 }
363
371
364 .file-comments {
372 .file-comments {
365 display: none;
373 display: none;
366 }
374 }
367
375
368 .comment-form .preview-box.unloaded,
376 .comment-form .preview-box.unloaded,
369 .comment-inline-form .preview-box.unloaded {
377 .comment-inline-form .preview-box.unloaded {
370 height: 50px;
378 height: 50px;
371 text-align: center;
379 text-align: center;
372 padding: 20px;
380 padding: 20px;
373 background-color: white;
381 background-color: white;
374 }
382 }
375
383
376 .comment-footer {
384 .comment-footer {
377 position: relative;
385 position: relative;
378 width: 100%;
386 width: 100%;
379 min-height: 42px;
387 min-height: 42px;
380
388
381 .status_box,
389 .status_box,
382 .cancel-button {
390 .cancel-button {
383 float: left;
391 float: left;
384 display: inline-block;
392 display: inline-block;
385 }
393 }
386
394
387 .action-buttons {
395 .action-buttons {
388 float: right;
396 float: right;
389 display: inline-block;
397 display: inline-block;
390 }
398 }
391
399
392 .action-buttons-extra {
400 .action-buttons-extra {
393 display: inline-block;
401 display: inline-block;
394 }
402 }
395 }
403 }
396
404
397 .comment-form {
405 .comment-form {
398
406
399 .comment {
407 .comment {
400 margin-left: 10px;
408 margin-left: 10px;
401 }
409 }
402
410
403 .comment-help {
411 .comment-help {
404 color: @grey4;
412 color: @grey4;
405 padding: 5px 0 5px 0;
413 padding: 5px 0 5px 0;
406 }
414 }
407
415
408 .comment-title {
416 .comment-title {
409 padding: 5px 0 5px 0;
417 padding: 5px 0 5px 0;
410 }
418 }
411
419
412 .comment-button {
420 .comment-button {
413 display: inline-block;
421 display: inline-block;
414 }
422 }
415
423
416 .comment-button-input {
424 .comment-button-input {
417 margin-right: 0;
425 margin-right: 0;
418 }
426 }
419
427
420 .comment-footer {
428 .comment-footer {
421 margin-bottom: 110px;
429 margin-bottom: 110px;
422 margin-top: 10px;
430 margin-top: 10px;
423 }
431 }
424 }
432 }
425
433
426
434
427 .comment-form-login {
435 .comment-form-login {
428 .comment-help {
436 .comment-help {
429 padding: 0.7em; //same as the button
437 padding: 0.7em; //same as the button
430 }
438 }
431
439
432 div.clearfix {
440 div.clearfix {
433 clear: both;
441 clear: both;
434 width: 100%;
442 width: 100%;
435 display: block;
443 display: block;
436 }
444 }
437 }
445 }
438
446
439 .comment-type {
447 .comment-type {
440 margin: 0px;
448 margin: 0px;
441 border-radius: inherit;
449 border-radius: inherit;
442 border-color: @grey6;
450 border-color: @grey6;
443 }
451 }
444
452
445 .preview-box {
453 .preview-box {
446 min-height: 105px;
454 min-height: 105px;
447 margin-bottom: 15px;
455 margin-bottom: 15px;
448 background-color: white;
456 background-color: white;
449 .border-radius(@border-radius);
457 .border-radius(@border-radius);
450 .box-sizing(border-box);
458 .box-sizing(border-box);
451 }
459 }
452
460
453 .add-another-button {
461 .add-another-button {
454 margin-left: 10px;
462 margin-left: 10px;
455 margin-top: 10px;
463 margin-top: 10px;
456 margin-bottom: 10px;
464 margin-bottom: 10px;
457 }
465 }
458
466
459 .comment .buttons {
467 .comment .buttons {
460 float: right;
468 float: right;
461 margin: -1px 0px 0px 0px;
469 margin: -1px 0px 0px 0px;
462 }
470 }
463
471
464 // Inline Comment Form
472 // Inline Comment Form
465 .injected_diff .comment-inline-form,
473 .injected_diff .comment-inline-form,
466 .comment-inline-form {
474 .comment-inline-form {
467 background-color: white;
475 background-color: white;
468 margin-top: 10px;
476 margin-top: 10px;
469 margin-bottom: 20px;
477 margin-bottom: 20px;
470 }
478 }
471
479
472 .inline-form {
480 .inline-form {
473 padding: 10px 7px;
481 padding: 10px 7px;
474 }
482 }
475
483
476 .inline-form div {
484 .inline-form div {
477 max-width: 100%;
485 max-width: 100%;
478 }
486 }
479
487
480 .overlay {
488 .overlay {
481 display: none;
489 display: none;
482 position: absolute;
490 position: absolute;
483 width: 100%;
491 width: 100%;
484 text-align: center;
492 text-align: center;
485 vertical-align: middle;
493 vertical-align: middle;
486 font-size: 16px;
494 font-size: 16px;
487 background: none repeat scroll 0 0 white;
495 background: none repeat scroll 0 0 white;
488
496
489 &.submitting {
497 &.submitting {
490 display: block;
498 display: block;
491 opacity: 0.5;
499 opacity: 0.5;
492 z-index: 100;
500 z-index: 100;
493 }
501 }
494 }
502 }
495 .comment-inline-form .overlay.submitting .overlay-text {
503 .comment-inline-form .overlay.submitting .overlay-text {
496 margin-top: 5%;
504 margin-top: 5%;
497 }
505 }
498
506
499 .comment-inline-form .clearfix,
507 .comment-inline-form .clearfix,
500 .comment-form .clearfix {
508 .comment-form .clearfix {
501 .border-radius(@border-radius);
509 .border-radius(@border-radius);
502 margin: 0px;
510 margin: 0px;
503 }
511 }
504
512
505 .comment-inline-form .comment-footer {
513 .comment-inline-form .comment-footer {
506 margin: 10px 0px 0px 0px;
514 margin: 10px 0px 0px 0px;
507 }
515 }
508
516
509 .hide-inline-form-button {
517 .hide-inline-form-button {
510 margin-left: 5px;
518 margin-left: 5px;
511 }
519 }
512 .comment-button .hide-inline-form {
520 .comment-button .hide-inline-form {
513 background: white;
521 background: white;
514 }
522 }
515
523
516 .comment-area {
524 .comment-area {
517 padding: 8px 12px;
525 padding: 8px 12px;
518 border: 1px solid @grey5;
526 border: 1px solid @grey5;
519 .border-radius(@border-radius);
527 .border-radius(@border-radius);
520
528
521 .resolve-action {
529 .resolve-action {
522 padding: 1px 0px 0px 6px;
530 padding: 1px 0px 0px 6px;
523 }
531 }
524
532
525 }
533 }
526
534
527 .comment-area-header .nav-links {
535 .comment-area-header .nav-links {
528 display: flex;
536 display: flex;
529 flex-flow: row wrap;
537 flex-flow: row wrap;
530 -webkit-flex-flow: row wrap;
538 -webkit-flex-flow: row wrap;
531 width: 100%;
539 width: 100%;
532 }
540 }
533
541
534 .comment-area-footer {
542 .comment-area-footer {
535 display: flex;
543 display: flex;
536 }
544 }
537
545
538 .comment-footer .toolbar {
546 .comment-footer .toolbar {
539
547
540 }
548 }
541
549
542 .nav-links {
550 .nav-links {
543 padding: 0;
551 padding: 0;
544 margin: 0;
552 margin: 0;
545 list-style: none;
553 list-style: none;
546 height: auto;
554 height: auto;
547 border-bottom: 1px solid @grey5;
555 border-bottom: 1px solid @grey5;
548 }
556 }
549 .nav-links li {
557 .nav-links li {
550 display: inline-block;
558 display: inline-block;
551 list-style-type: none;
559 list-style-type: none;
552 }
560 }
553
561
554 .nav-links li a.disabled {
562 .nav-links li a.disabled {
555 cursor: not-allowed;
563 cursor: not-allowed;
556 }
564 }
557
565
558 .nav-links li.active a {
566 .nav-links li.active a {
559 border-bottom: 2px solid @rcblue;
567 border-bottom: 2px solid @rcblue;
560 color: #000;
568 color: #000;
561 font-weight: 600;
569 font-weight: 600;
562 }
570 }
563 .nav-links li a {
571 .nav-links li a {
564 display: inline-block;
572 display: inline-block;
565 padding: 0px 10px 5px 10px;
573 padding: 0px 10px 5px 10px;
566 margin-bottom: -1px;
574 margin-bottom: -1px;
567 font-size: 14px;
575 font-size: 14px;
568 line-height: 28px;
576 line-height: 28px;
569 color: #8f8f8f;
577 color: #8f8f8f;
570 border-bottom: 2px solid transparent;
578 border-bottom: 2px solid transparent;
571 }
579 }
572
580
573 .toolbar-text {
581 .toolbar-text {
574 float: left;
582 float: left;
575 margin: -5px 0px 0px 0px;
583 margin: -5px 0px 0px 0px;
576 font-size: 12px;
584 font-size: 12px;
577 }
585 }
578
586
@@ -1,2808 +1,2854 b''
1 //Primary CSS
1 //Primary CSS
2
2
3 //--- IMPORTS ------------------//
3 //--- IMPORTS ------------------//
4
4
5 @import 'helpers';
5 @import 'helpers';
6 @import 'mixins';
6 @import 'mixins';
7 @import 'rcicons';
7 @import 'rcicons';
8 @import 'variables';
8 @import 'variables';
9 @import 'bootstrap-variables';
9 @import 'bootstrap-variables';
10 @import 'form-bootstrap';
10 @import 'form-bootstrap';
11 @import 'codemirror';
11 @import 'codemirror';
12 @import 'legacy_code_styles';
12 @import 'legacy_code_styles';
13 @import 'readme-box';
13 @import 'readme-box';
14 @import 'progress-bar';
14 @import 'progress-bar';
15
15
16 @import 'type';
16 @import 'type';
17 @import 'alerts';
17 @import 'alerts';
18 @import 'buttons';
18 @import 'buttons';
19 @import 'tags';
19 @import 'tags';
20 @import 'code-block';
20 @import 'code-block';
21 @import 'examples';
21 @import 'examples';
22 @import 'login';
22 @import 'login';
23 @import 'main-content';
23 @import 'main-content';
24 @import 'select2';
24 @import 'select2';
25 @import 'comments';
25 @import 'comments';
26 @import 'panels-bootstrap';
26 @import 'panels-bootstrap';
27 @import 'panels';
27 @import 'panels';
28 @import 'deform';
28 @import 'deform';
29
29
30 //--- BASE ------------------//
30 //--- BASE ------------------//
31 .noscript-error {
31 .noscript-error {
32 top: 0;
32 top: 0;
33 left: 0;
33 left: 0;
34 width: 100%;
34 width: 100%;
35 z-index: 101;
35 z-index: 101;
36 text-align: center;
36 text-align: center;
37 font-size: 120%;
37 font-size: 120%;
38 color: white;
38 color: white;
39 background-color: @alert2;
39 background-color: @alert2;
40 padding: 5px 0 5px 0;
40 padding: 5px 0 5px 0;
41 font-weight: @text-semibold-weight;
41 font-weight: @text-semibold-weight;
42 font-family: @text-semibold;
42 font-family: @text-semibold;
43 }
43 }
44
44
45 html {
45 html {
46 display: table;
46 display: table;
47 height: 100%;
47 height: 100%;
48 width: 100%;
48 width: 100%;
49 }
49 }
50
50
51 body {
51 body {
52 display: table-cell;
52 display: table-cell;
53 width: 100%;
53 width: 100%;
54 }
54 }
55
55
56 //--- LAYOUT ------------------//
56 //--- LAYOUT ------------------//
57
57
58 .hidden{
58 .hidden{
59 display: none !important;
59 display: none !important;
60 }
60 }
61
61
62 .box{
62 .box{
63 float: left;
63 float: left;
64 width: 100%;
64 width: 100%;
65 }
65 }
66
66
67 .browser-header {
67 .browser-header {
68 clear: both;
68 clear: both;
69 }
69 }
70 .main {
70 .main {
71 clear: both;
71 clear: both;
72 padding:0 0 @pagepadding;
72 padding:0 0 @pagepadding;
73 height: auto;
73 height: auto;
74
74
75 &:after { //clearfix
75 &:after { //clearfix
76 content:"";
76 content:"";
77 clear:both;
77 clear:both;
78 width:100%;
78 width:100%;
79 display:block;
79 display:block;
80 }
80 }
81 }
81 }
82
82
83 .action-link{
83 .action-link{
84 margin-left: @padding;
84 margin-left: @padding;
85 padding-left: @padding;
85 padding-left: @padding;
86 border-left: @border-thickness solid @border-default-color;
86 border-left: @border-thickness solid @border-default-color;
87 }
87 }
88
88
89 input + .action-link, .action-link.first{
89 input + .action-link, .action-link.first{
90 border-left: none;
90 border-left: none;
91 }
91 }
92
92
93 .action-link.last{
93 .action-link.last{
94 margin-right: @padding;
94 margin-right: @padding;
95 padding-right: @padding;
95 padding-right: @padding;
96 }
96 }
97
97
98 .action-link.active,
98 .action-link.active,
99 .action-link.active a{
99 .action-link.active a{
100 color: @grey4;
100 color: @grey4;
101 }
101 }
102
102
103 .action-link.disabled {
103 .action-link.disabled {
104 color: @grey4;
104 color: @grey4;
105 cursor: inherit;
105 cursor: inherit;
106 }
106 }
107
107
108 .clipboard-action {
108 .clipboard-action {
109 cursor: pointer;
109 cursor: pointer;
110 color: @grey4;
110 color: @grey4;
111 margin-left: 5px;
111 margin-left: 5px;
112
112
113 &:hover {
113 &:hover {
114 color: @grey2;
114 color: @grey2;
115 }
115 }
116 }
116 }
117
117
118 ul.simple-list{
118 ul.simple-list{
119 list-style: none;
119 list-style: none;
120 margin: 0;
120 margin: 0;
121 padding: 0;
121 padding: 0;
122 }
122 }
123
123
124 .main-content {
124 .main-content {
125 padding-bottom: @pagepadding;
125 padding-bottom: @pagepadding;
126 }
126 }
127
127
128 .wide-mode-wrapper {
128 .wide-mode-wrapper {
129 max-width:4000px !important;
129 max-width:4000px !important;
130 }
130 }
131
131
132 .wrapper {
132 .wrapper {
133 position: relative;
133 position: relative;
134 max-width: @wrapper-maxwidth;
134 max-width: @wrapper-maxwidth;
135 margin: 0 auto;
135 margin: 0 auto;
136 }
136 }
137
137
138 #content {
138 #content {
139 clear: both;
139 clear: both;
140 padding: 0 @contentpadding;
140 padding: 0 @contentpadding;
141 }
141 }
142
142
143 .advanced-settings-fields{
143 .advanced-settings-fields{
144 input{
144 input{
145 margin-left: @textmargin;
145 margin-left: @textmargin;
146 margin-right: @padding/2;
146 margin-right: @padding/2;
147 }
147 }
148 }
148 }
149
149
150 .cs_files_title {
150 .cs_files_title {
151 margin: @pagepadding 0 0;
151 margin: @pagepadding 0 0;
152 }
152 }
153
153
154 input.inline[type="file"] {
154 input.inline[type="file"] {
155 display: inline;
155 display: inline;
156 }
156 }
157
157
158 .error_page {
158 .error_page {
159 margin: 10% auto;
159 margin: 10% auto;
160
160
161 h1 {
161 h1 {
162 color: @grey2;
162 color: @grey2;
163 }
163 }
164
164
165 .alert {
165 .alert {
166 margin: @padding 0;
166 margin: @padding 0;
167 }
167 }
168
168
169 .error-branding {
169 .error-branding {
170 color: @grey4;
170 color: @grey4;
171 font-weight: @text-semibold-weight;
171 font-weight: @text-semibold-weight;
172 font-family: @text-semibold;
172 font-family: @text-semibold;
173 }
173 }
174
174
175 .error_message {
175 .error_message {
176 font-family: @text-regular;
176 font-family: @text-regular;
177 }
177 }
178
178
179 .sidebar {
179 .sidebar {
180 min-height: 275px;
180 min-height: 275px;
181 margin: 0;
181 margin: 0;
182 padding: 0 0 @sidebarpadding @sidebarpadding;
182 padding: 0 0 @sidebarpadding @sidebarpadding;
183 border: none;
183 border: none;
184 }
184 }
185
185
186 .main-content {
186 .main-content {
187 position: relative;
187 position: relative;
188 margin: 0 @sidebarpadding @sidebarpadding;
188 margin: 0 @sidebarpadding @sidebarpadding;
189 padding: 0 0 0 @sidebarpadding;
189 padding: 0 0 0 @sidebarpadding;
190 border-left: @border-thickness solid @grey5;
190 border-left: @border-thickness solid @grey5;
191
191
192 @media (max-width:767px) {
192 @media (max-width:767px) {
193 clear: both;
193 clear: both;
194 width: 100%;
194 width: 100%;
195 margin: 0;
195 margin: 0;
196 border: none;
196 border: none;
197 }
197 }
198 }
198 }
199
199
200 .inner-column {
200 .inner-column {
201 float: left;
201 float: left;
202 width: 29.75%;
202 width: 29.75%;
203 min-height: 150px;
203 min-height: 150px;
204 margin: @sidebarpadding 2% 0 0;
204 margin: @sidebarpadding 2% 0 0;
205 padding: 0 2% 0 0;
205 padding: 0 2% 0 0;
206 border-right: @border-thickness solid @grey5;
206 border-right: @border-thickness solid @grey5;
207
207
208 @media (max-width:767px) {
208 @media (max-width:767px) {
209 clear: both;
209 clear: both;
210 width: 100%;
210 width: 100%;
211 border: none;
211 border: none;
212 }
212 }
213
213
214 ul {
214 ul {
215 padding-left: 1.25em;
215 padding-left: 1.25em;
216 }
216 }
217
217
218 &:last-child {
218 &:last-child {
219 margin: @sidebarpadding 0 0;
219 margin: @sidebarpadding 0 0;
220 border: none;
220 border: none;
221 }
221 }
222
222
223 h4 {
223 h4 {
224 margin: 0 0 @padding;
224 margin: 0 0 @padding;
225 font-weight: @text-semibold-weight;
225 font-weight: @text-semibold-weight;
226 font-family: @text-semibold;
226 font-family: @text-semibold;
227 }
227 }
228 }
228 }
229 }
229 }
230 .error-page-logo {
230 .error-page-logo {
231 width: 130px;
231 width: 130px;
232 height: 160px;
232 height: 160px;
233 }
233 }
234
234
235 // HEADER
235 // HEADER
236 .header {
236 .header {
237
237
238 // TODO: johbo: Fix login pages, so that they work without a min-height
238 // TODO: johbo: Fix login pages, so that they work without a min-height
239 // for the header and then remove the min-height. I chose a smaller value
239 // for the header and then remove the min-height. I chose a smaller value
240 // intentionally here to avoid rendering issues in the main navigation.
240 // intentionally here to avoid rendering issues in the main navigation.
241 min-height: 49px;
241 min-height: 49px;
242 min-width: 1024px;
242 min-width: 1024px;
243
243
244 position: relative;
244 position: relative;
245 vertical-align: bottom;
245 vertical-align: bottom;
246 padding: 0 @header-padding;
246 padding: 0 @header-padding;
247 background-color: @grey1;
247 background-color: @grey1;
248 color: @grey5;
248 color: @grey5;
249
249
250 .title {
250 .title {
251 overflow: visible;
251 overflow: visible;
252 }
252 }
253
253
254 &:before,
254 &:before,
255 &:after {
255 &:after {
256 content: "";
256 content: "";
257 clear: both;
257 clear: both;
258 width: 100%;
258 width: 100%;
259 }
259 }
260
260
261 // TODO: johbo: Avoids breaking "Repositories" chooser
261 // TODO: johbo: Avoids breaking "Repositories" chooser
262 .select2-container .select2-choice .select2-arrow {
262 .select2-container .select2-choice .select2-arrow {
263 display: none;
263 display: none;
264 }
264 }
265 }
265 }
266
266
267 #header-inner {
267 #header-inner {
268 &.title {
268 &.title {
269 margin: 0;
269 margin: 0;
270 }
270 }
271 &:before,
271 &:before,
272 &:after {
272 &:after {
273 content: "";
273 content: "";
274 clear: both;
274 clear: both;
275 }
275 }
276 }
276 }
277
277
278 // Gists
278 // Gists
279 #files_data {
279 #files_data {
280 clear: both; //for firefox
280 clear: both; //for firefox
281 padding-top: 10px;
281 padding-top: 10px;
282 }
282 }
283
283
284 #gistid {
284 #gistid {
285 margin-right: @padding;
285 margin-right: @padding;
286 }
286 }
287
287
288 // Global Settings Editor
288 // Global Settings Editor
289 .textarea.editor {
289 .textarea.editor {
290 float: left;
290 float: left;
291 position: relative;
291 position: relative;
292 max-width: @texteditor-width;
292 max-width: @texteditor-width;
293
293
294 select {
294 select {
295 position: absolute;
295 position: absolute;
296 top:10px;
296 top:10px;
297 right:0;
297 right:0;
298 }
298 }
299
299
300 .CodeMirror {
300 .CodeMirror {
301 margin: 0;
301 margin: 0;
302 }
302 }
303
303
304 .help-block {
304 .help-block {
305 margin: 0 0 @padding;
305 margin: 0 0 @padding;
306 padding:.5em;
306 padding:.5em;
307 background-color: @grey6;
307 background-color: @grey6;
308 &.pre-formatting {
308 &.pre-formatting {
309 white-space: pre;
309 white-space: pre;
310 }
310 }
311 }
311 }
312 }
312 }
313
313
314 ul.auth_plugins {
314 ul.auth_plugins {
315 margin: @padding 0 @padding @legend-width;
315 margin: @padding 0 @padding @legend-width;
316 padding: 0;
316 padding: 0;
317
317
318 li {
318 li {
319 margin-bottom: @padding;
319 margin-bottom: @padding;
320 line-height: 1em;
320 line-height: 1em;
321 list-style-type: none;
321 list-style-type: none;
322
322
323 .auth_buttons .btn {
323 .auth_buttons .btn {
324 margin-right: @padding;
324 margin-right: @padding;
325 }
325 }
326
326
327 }
327 }
328 }
328 }
329
329
330
330
331 // My Account PR list
331 // My Account PR list
332
332
333 #show_closed {
333 #show_closed {
334 margin: 0 1em 0 0;
334 margin: 0 1em 0 0;
335 }
335 }
336
336
337 #pull_request_list_table {
337 #pull_request_list_table {
338 .closed {
338 .closed {
339 background-color: @grey6;
339 background-color: @grey6;
340 }
340 }
341
341
342 .state-creating,
342 .state-creating,
343 .state-updating,
343 .state-updating,
344 .state-merging
344 .state-merging
345 {
345 {
346 background-color: @grey6;
346 background-color: @grey6;
347 }
347 }
348
348
349 .td-status {
349 .td-status {
350 padding-left: .5em;
350 padding-left: .5em;
351 }
351 }
352 .log-container .truncate {
352 .log-container .truncate {
353 height: 2.75em;
353 height: 2.75em;
354 white-space: pre-line;
354 white-space: pre-line;
355 }
355 }
356 table.rctable .user {
356 table.rctable .user {
357 padding-left: 0;
357 padding-left: 0;
358 }
358 }
359 table.rctable {
359 table.rctable {
360 td.td-description,
360 td.td-description,
361 .rc-user {
361 .rc-user {
362 min-width: auto;
362 min-width: auto;
363 }
363 }
364 }
364 }
365 }
365 }
366
366
367 // Pull Requests
367 // Pull Requests
368
368
369 .pullrequests_section_head {
369 .pullrequests_section_head {
370 display: block;
370 display: block;
371 clear: both;
371 clear: both;
372 margin: @padding 0;
372 margin: @padding 0;
373 font-weight: @text-bold-weight;
373 font-weight: @text-bold-weight;
374 font-family: @text-bold;
374 font-family: @text-bold;
375 }
375 }
376
376
377 .pr-origininfo, .pr-targetinfo {
377 .pr-origininfo, .pr-targetinfo {
378 position: relative;
378 position: relative;
379
379
380 .tag {
380 .tag {
381 display: inline-block;
381 display: inline-block;
382 margin: 0 1em .5em 0;
382 margin: 0 1em .5em 0;
383 }
383 }
384
384
385 .clone-url {
385 .clone-url {
386 display: inline-block;
386 display: inline-block;
387 margin: 0 0 .5em 0;
387 margin: 0 0 .5em 0;
388 padding: 0;
388 padding: 0;
389 line-height: 1.2em;
389 line-height: 1.2em;
390 }
390 }
391 }
391 }
392
392
393 .pr-mergeinfo {
393 .pr-mergeinfo {
394 min-width: 95% !important;
394 min-width: 95% !important;
395 padding: 0 !important;
395 padding: 0 !important;
396 border: 0;
396 border: 0;
397 }
397 }
398 .pr-mergeinfo-copy {
398 .pr-mergeinfo-copy {
399 padding: 0 0;
399 padding: 0 0;
400 }
400 }
401
401
402 .pr-pullinfo {
402 .pr-pullinfo {
403 min-width: 95% !important;
403 min-width: 95% !important;
404 padding: 0 !important;
404 padding: 0 !important;
405 border: 0;
405 border: 0;
406 }
406 }
407 .pr-pullinfo-copy {
407 .pr-pullinfo-copy {
408 padding: 0 0;
408 padding: 0 0;
409 }
409 }
410
410
411
411
412 #pr-title-input {
412 #pr-title-input {
413 width: 72%;
413 width: 72%;
414 font-size: 1em;
414 font-size: 1em;
415 margin: 0;
415 margin: 0;
416 padding: 0 0 0 @padding/4;
416 padding: 0 0 0 @padding/4;
417 line-height: 1.7em;
417 line-height: 1.7em;
418 color: @text-color;
418 color: @text-color;
419 letter-spacing: .02em;
419 letter-spacing: .02em;
420 font-weight: @text-bold-weight;
420 font-weight: @text-bold-weight;
421 font-family: @text-bold;
421 font-family: @text-bold;
422 }
422 }
423
423
424 #pullrequest_title {
424 #pullrequest_title {
425 width: 100%;
425 width: 100%;
426 box-sizing: border-box;
426 box-sizing: border-box;
427 }
427 }
428
428
429 #pr_open_message {
429 #pr_open_message {
430 border: @border-thickness solid #fff;
430 border: @border-thickness solid #fff;
431 border-radius: @border-radius;
431 border-radius: @border-radius;
432 padding: @padding-large-vertical @padding-large-vertical @padding-large-vertical 0;
432 padding: @padding-large-vertical @padding-large-vertical @padding-large-vertical 0;
433 text-align: left;
433 text-align: left;
434 overflow: hidden;
434 overflow: hidden;
435 }
435 }
436
436
437 .pr-submit-button {
437 .pr-submit-button {
438 float: right;
438 float: right;
439 margin: 0 0 0 5px;
439 margin: 0 0 0 5px;
440 }
440 }
441
441
442 .pr-spacing-container {
442 .pr-spacing-container {
443 padding: 20px;
443 padding: 20px;
444 clear: both
444 clear: both
445 }
445 }
446
446
447 #pr-description-input {
447 #pr-description-input {
448 margin-bottom: 0;
448 margin-bottom: 0;
449 }
449 }
450
450
451 .pr-description-label {
451 .pr-description-label {
452 vertical-align: top;
452 vertical-align: top;
453 }
453 }
454
454
455 .perms_section_head {
455 .perms_section_head {
456 min-width: 625px;
456 min-width: 625px;
457
457
458 h2 {
458 h2 {
459 margin-bottom: 0;
459 margin-bottom: 0;
460 }
460 }
461
461
462 .label-checkbox {
462 .label-checkbox {
463 float: left;
463 float: left;
464 }
464 }
465
465
466 &.field {
466 &.field {
467 margin: @space 0 @padding;
467 margin: @space 0 @padding;
468 }
468 }
469
469
470 &:first-child.field {
470 &:first-child.field {
471 margin-top: 0;
471 margin-top: 0;
472
472
473 .label {
473 .label {
474 margin-top: 0;
474 margin-top: 0;
475 padding-top: 0;
475 padding-top: 0;
476 }
476 }
477
477
478 .radios {
478 .radios {
479 padding-top: 0;
479 padding-top: 0;
480 }
480 }
481 }
481 }
482
482
483 .radios {
483 .radios {
484 position: relative;
484 position: relative;
485 width: 505px;
485 width: 505px;
486 }
486 }
487 }
487 }
488
488
489 //--- MODULES ------------------//
489 //--- MODULES ------------------//
490
490
491
491
492 // Server Announcement
492 // Server Announcement
493 #server-announcement {
493 #server-announcement {
494 width: 95%;
494 width: 95%;
495 margin: @padding auto;
495 margin: @padding auto;
496 padding: @padding;
496 padding: @padding;
497 border-width: 2px;
497 border-width: 2px;
498 border-style: solid;
498 border-style: solid;
499 .border-radius(2px);
499 .border-radius(2px);
500 font-weight: @text-bold-weight;
500 font-weight: @text-bold-weight;
501 font-family: @text-bold;
501 font-family: @text-bold;
502
502
503 &.info { border-color: @alert4; background-color: @alert4-inner; }
503 &.info { border-color: @alert4; background-color: @alert4-inner; }
504 &.warning { border-color: @alert3; background-color: @alert3-inner; }
504 &.warning { border-color: @alert3; background-color: @alert3-inner; }
505 &.error { border-color: @alert2; background-color: @alert2-inner; }
505 &.error { border-color: @alert2; background-color: @alert2-inner; }
506 &.success { border-color: @alert1; background-color: @alert1-inner; }
506 &.success { border-color: @alert1; background-color: @alert1-inner; }
507 &.neutral { border-color: @grey3; background-color: @grey6; }
507 &.neutral { border-color: @grey3; background-color: @grey6; }
508 }
508 }
509
509
510 // Fixed Sidebar Column
510 // Fixed Sidebar Column
511 .sidebar-col-wrapper {
511 .sidebar-col-wrapper {
512 padding-left: @sidebar-all-width;
512 padding-left: @sidebar-all-width;
513
513
514 .sidebar {
514 .sidebar {
515 width: @sidebar-width;
515 width: @sidebar-width;
516 margin-left: -@sidebar-all-width;
516 margin-left: -@sidebar-all-width;
517 }
517 }
518 }
518 }
519
519
520 .sidebar-col-wrapper.scw-small {
520 .sidebar-col-wrapper.scw-small {
521 padding-left: @sidebar-small-all-width;
521 padding-left: @sidebar-small-all-width;
522
522
523 .sidebar {
523 .sidebar {
524 width: @sidebar-small-width;
524 width: @sidebar-small-width;
525 margin-left: -@sidebar-small-all-width;
525 margin-left: -@sidebar-small-all-width;
526 }
526 }
527 }
527 }
528
528
529
529
530 // FOOTER
530 // FOOTER
531 #footer {
531 #footer {
532 padding: 0;
532 padding: 0;
533 text-align: center;
533 text-align: center;
534 vertical-align: middle;
534 vertical-align: middle;
535 color: @grey2;
535 color: @grey2;
536 font-size: 11px;
536 font-size: 11px;
537
537
538 p {
538 p {
539 margin: 0;
539 margin: 0;
540 padding: 1em;
540 padding: 1em;
541 line-height: 1em;
541 line-height: 1em;
542 }
542 }
543
543
544 .server-instance { //server instance
544 .server-instance { //server instance
545 display: none;
545 display: none;
546 }
546 }
547
547
548 .title {
548 .title {
549 float: none;
549 float: none;
550 margin: 0 auto;
550 margin: 0 auto;
551 }
551 }
552 }
552 }
553
553
554 button.close {
554 button.close {
555 padding: 0;
555 padding: 0;
556 cursor: pointer;
556 cursor: pointer;
557 background: transparent;
557 background: transparent;
558 border: 0;
558 border: 0;
559 .box-shadow(none);
559 .box-shadow(none);
560 -webkit-appearance: none;
560 -webkit-appearance: none;
561 }
561 }
562
562
563 .close {
563 .close {
564 float: right;
564 float: right;
565 font-size: 21px;
565 font-size: 21px;
566 font-family: @text-bootstrap;
566 font-family: @text-bootstrap;
567 line-height: 1em;
567 line-height: 1em;
568 font-weight: bold;
568 font-weight: bold;
569 color: @grey2;
569 color: @grey2;
570
570
571 &:hover,
571 &:hover,
572 &:focus {
572 &:focus {
573 color: @grey1;
573 color: @grey1;
574 text-decoration: none;
574 text-decoration: none;
575 cursor: pointer;
575 cursor: pointer;
576 }
576 }
577 }
577 }
578
578
579 // GRID
579 // GRID
580 .sorting,
580 .sorting,
581 .sorting_desc,
581 .sorting_desc,
582 .sorting_asc {
582 .sorting_asc {
583 cursor: pointer;
583 cursor: pointer;
584 }
584 }
585 .sorting_desc:after {
585 .sorting_desc:after {
586 content: "\00A0\25B2";
586 content: "\00A0\25B2";
587 font-size: .75em;
587 font-size: .75em;
588 }
588 }
589 .sorting_asc:after {
589 .sorting_asc:after {
590 content: "\00A0\25BC";
590 content: "\00A0\25BC";
591 font-size: .68em;
591 font-size: .68em;
592 }
592 }
593
593
594
594
595 .user_auth_tokens {
595 .user_auth_tokens {
596
596
597 &.truncate {
597 &.truncate {
598 white-space: nowrap;
598 white-space: nowrap;
599 overflow: hidden;
599 overflow: hidden;
600 text-overflow: ellipsis;
600 text-overflow: ellipsis;
601 }
601 }
602
602
603 .fields .field .input {
603 .fields .field .input {
604 margin: 0;
604 margin: 0;
605 }
605 }
606
606
607 input#description {
607 input#description {
608 width: 100px;
608 width: 100px;
609 margin: 0;
609 margin: 0;
610 }
610 }
611
611
612 .drop-menu {
612 .drop-menu {
613 // TODO: johbo: Remove this, should work out of the box when
613 // TODO: johbo: Remove this, should work out of the box when
614 // having multiple inputs inline
614 // having multiple inputs inline
615 margin: 0 0 0 5px;
615 margin: 0 0 0 5px;
616 }
616 }
617 }
617 }
618 #user_list_table {
618 #user_list_table {
619 .closed {
619 .closed {
620 background-color: @grey6;
620 background-color: @grey6;
621 }
621 }
622 }
622 }
623
623
624
624
625 input, textarea {
625 input, textarea {
626 &.disabled {
626 &.disabled {
627 opacity: .5;
627 opacity: .5;
628 }
628 }
629
629
630 &:hover {
630 &:hover {
631 border-color: @grey3;
631 border-color: @grey3;
632 box-shadow: @button-shadow;
632 box-shadow: @button-shadow;
633 }
633 }
634
634
635 &:focus {
635 &:focus {
636 border-color: @rcblue;
636 border-color: @rcblue;
637 box-shadow: @button-shadow;
637 box-shadow: @button-shadow;
638 }
638 }
639 }
639 }
640
640
641 // remove extra padding in firefox
641 // remove extra padding in firefox
642 input::-moz-focus-inner { border:0; padding:0 }
642 input::-moz-focus-inner { border:0; padding:0 }
643
643
644 .adjacent input {
644 .adjacent input {
645 margin-bottom: @padding;
645 margin-bottom: @padding;
646 }
646 }
647
647
648 .permissions_boxes {
648 .permissions_boxes {
649 display: block;
649 display: block;
650 }
650 }
651
651
652 //FORMS
652 //FORMS
653
653
654 .medium-inline,
654 .medium-inline,
655 input#description.medium-inline {
655 input#description.medium-inline {
656 display: inline;
656 display: inline;
657 width: @medium-inline-input-width;
657 width: @medium-inline-input-width;
658 min-width: 100px;
658 min-width: 100px;
659 }
659 }
660
660
661 select {
661 select {
662 //reset
662 //reset
663 -webkit-appearance: none;
663 -webkit-appearance: none;
664 -moz-appearance: none;
664 -moz-appearance: none;
665
665
666 display: inline-block;
666 display: inline-block;
667 height: 28px;
667 height: 28px;
668 width: auto;
668 width: auto;
669 margin: 0 @padding @padding 0;
669 margin: 0 @padding @padding 0;
670 padding: 0 18px 0 8px;
670 padding: 0 18px 0 8px;
671 line-height:1em;
671 line-height:1em;
672 font-size: @basefontsize;
672 font-size: @basefontsize;
673 border: @border-thickness solid @grey5;
673 border: @border-thickness solid @grey5;
674 border-radius: @border-radius;
674 border-radius: @border-radius;
675 background:white url("../images/dt-arrow-dn.png") no-repeat 100% 50%;
675 background:white url("../images/dt-arrow-dn.png") no-repeat 100% 50%;
676 color: @grey4;
676 color: @grey4;
677 box-shadow: @button-shadow;
677 box-shadow: @button-shadow;
678
678
679 &:after {
679 &:after {
680 content: "\00A0\25BE";
680 content: "\00A0\25BE";
681 }
681 }
682
682
683 &:focus, &:hover {
683 &:focus, &:hover {
684 outline: none;
684 outline: none;
685 border-color: @grey4;
685 border-color: @grey4;
686 color: @rcdarkblue;
686 color: @rcdarkblue;
687 }
687 }
688 }
688 }
689
689
690 option {
690 option {
691 &:focus {
691 &:focus {
692 outline: none;
692 outline: none;
693 }
693 }
694 }
694 }
695
695
696 input,
696 input,
697 textarea {
697 textarea {
698 padding: @input-padding;
698 padding: @input-padding;
699 border: @input-border-thickness solid @border-highlight-color;
699 border: @input-border-thickness solid @border-highlight-color;
700 .border-radius (@border-radius);
700 .border-radius (@border-radius);
701 font-family: @text-light;
701 font-family: @text-light;
702 font-size: @basefontsize;
702 font-size: @basefontsize;
703
703
704 &.input-sm {
704 &.input-sm {
705 padding: 5px;
705 padding: 5px;
706 }
706 }
707
707
708 &#description {
708 &#description {
709 min-width: @input-description-minwidth;
709 min-width: @input-description-minwidth;
710 min-height: 1em;
710 min-height: 1em;
711 padding: 10px;
711 padding: 10px;
712 }
712 }
713 }
713 }
714
714
715 .field-sm {
715 .field-sm {
716 input,
716 input,
717 textarea {
717 textarea {
718 padding: 5px;
718 padding: 5px;
719 }
719 }
720 }
720 }
721
721
722 textarea {
722 textarea {
723 display: block;
723 display: block;
724 clear: both;
724 clear: both;
725 width: 100%;
725 width: 100%;
726 min-height: 100px;
726 min-height: 100px;
727 margin-bottom: @padding;
727 margin-bottom: @padding;
728 .box-sizing(border-box);
728 .box-sizing(border-box);
729 overflow: auto;
729 overflow: auto;
730 }
730 }
731
731
732 label {
732 label {
733 font-family: @text-light;
733 font-family: @text-light;
734 }
734 }
735
735
736 // GRAVATARS
736 // GRAVATARS
737 // centers gravatar on username to the right
737 // centers gravatar on username to the right
738
738
739 .gravatar {
739 .gravatar {
740 display: inline;
740 display: inline;
741 min-width: 16px;
741 min-width: 16px;
742 min-height: 16px;
742 min-height: 16px;
743 margin: -5px 0;
743 margin: -5px 0;
744 padding: 0;
744 padding: 0;
745 line-height: 1em;
745 line-height: 1em;
746 box-sizing: content-box;
746 box-sizing: content-box;
747 border-radius: 50%;
747 border-radius: 50%;
748
748
749 &.gravatar-large {
749 &.gravatar-large {
750 margin: -0.5em .25em -0.5em 0;
750 margin: -0.5em .25em -0.5em 0;
751 }
751 }
752
752
753 & + .user {
753 & + .user {
754 display: inline;
754 display: inline;
755 margin: 0;
755 margin: 0;
756 padding: 0 0 0 .17em;
756 padding: 0 0 0 .17em;
757 line-height: 1em;
757 line-height: 1em;
758 }
758 }
759 }
759 }
760
760
761 .user-inline-data {
761 .user-inline-data {
762 display: inline-block;
762 display: inline-block;
763 float: left;
763 float: left;
764 padding-left: .5em;
764 padding-left: .5em;
765 line-height: 1.3em;
765 line-height: 1.3em;
766 }
766 }
767
767
768 .rc-user { // gravatar + user wrapper
768 .rc-user { // gravatar + user wrapper
769 float: left;
769 float: left;
770 position: relative;
770 position: relative;
771 min-width: 100px;
771 min-width: 100px;
772 max-width: 200px;
772 max-width: 200px;
773 min-height: (@gravatar-size + @border-thickness * 2); // account for border
773 min-height: (@gravatar-size + @border-thickness * 2); // account for border
774 display: block;
774 display: block;
775 padding: 0 0 0 (@gravatar-size + @basefontsize/2 + @border-thickness * 2);
775 padding: 0 0 0 (@gravatar-size + @basefontsize/2 + @border-thickness * 2);
776
776
777
777
778 .gravatar {
778 .gravatar {
779 display: block;
779 display: block;
780 position: absolute;
780 position: absolute;
781 top: 0;
781 top: 0;
782 left: 0;
782 left: 0;
783 min-width: @gravatar-size;
783 min-width: @gravatar-size;
784 min-height: @gravatar-size;
784 min-height: @gravatar-size;
785 margin: 0;
785 margin: 0;
786 }
786 }
787
787
788 .user {
788 .user {
789 display: block;
789 display: block;
790 max-width: 175px;
790 max-width: 175px;
791 padding-top: 2px;
791 padding-top: 2px;
792 overflow: hidden;
792 overflow: hidden;
793 text-overflow: ellipsis;
793 text-overflow: ellipsis;
794 }
794 }
795 }
795 }
796
796
797 .gist-gravatar,
797 .gist-gravatar,
798 .journal_container {
798 .journal_container {
799 .gravatar-large {
799 .gravatar-large {
800 margin: 0 .5em -10px 0;
800 margin: 0 .5em -10px 0;
801 }
801 }
802 }
802 }
803
803
804
804
805 // ADMIN SETTINGS
805 // ADMIN SETTINGS
806
806
807 // Tag Patterns
807 // Tag Patterns
808 .tag_patterns {
808 .tag_patterns {
809 .tag_input {
809 .tag_input {
810 margin-bottom: @padding;
810 margin-bottom: @padding;
811 }
811 }
812 }
812 }
813
813
814 .locked_input {
814 .locked_input {
815 position: relative;
815 position: relative;
816
816
817 input {
817 input {
818 display: inline;
818 display: inline;
819 margin: 3px 5px 0px 0px;
819 margin: 3px 5px 0px 0px;
820 }
820 }
821
821
822 br {
822 br {
823 display: none;
823 display: none;
824 }
824 }
825
825
826 .error-message {
826 .error-message {
827 float: left;
827 float: left;
828 width: 100%;
828 width: 100%;
829 }
829 }
830
830
831 .lock_input_button {
831 .lock_input_button {
832 display: inline;
832 display: inline;
833 }
833 }
834
834
835 .help-block {
835 .help-block {
836 clear: both;
836 clear: both;
837 }
837 }
838 }
838 }
839
839
840 // Notifications
840 // Notifications
841
841
842 .notifications_buttons {
842 .notifications_buttons {
843 margin: 0 0 @space 0;
843 margin: 0 0 @space 0;
844 padding: 0;
844 padding: 0;
845
845
846 .btn {
846 .btn {
847 display: inline-block;
847 display: inline-block;
848 }
848 }
849 }
849 }
850
850
851 .notification-list {
851 .notification-list {
852
852
853 div {
853 div {
854 display: inline-block;
854 display: inline-block;
855 vertical-align: middle;
855 vertical-align: middle;
856 }
856 }
857
857
858 .container {
858 .container {
859 display: block;
859 display: block;
860 margin: 0 0 @padding 0;
860 margin: 0 0 @padding 0;
861 }
861 }
862
862
863 .delete-notifications {
863 .delete-notifications {
864 margin-left: @padding;
864 margin-left: @padding;
865 text-align: right;
865 text-align: right;
866 cursor: pointer;
866 cursor: pointer;
867 }
867 }
868
868
869 .read-notifications {
869 .read-notifications {
870 margin-left: @padding/2;
870 margin-left: @padding/2;
871 text-align: right;
871 text-align: right;
872 width: 35px;
872 width: 35px;
873 cursor: pointer;
873 cursor: pointer;
874 }
874 }
875
875
876 .icon-minus-sign {
876 .icon-minus-sign {
877 color: @alert2;
877 color: @alert2;
878 }
878 }
879
879
880 .icon-ok-sign {
880 .icon-ok-sign {
881 color: @alert1;
881 color: @alert1;
882 }
882 }
883 }
883 }
884
884
885 .user_settings {
885 .user_settings {
886 float: left;
886 float: left;
887 clear: both;
887 clear: both;
888 display: block;
888 display: block;
889 width: 100%;
889 width: 100%;
890
890
891 .gravatar_box {
891 .gravatar_box {
892 margin-bottom: @padding;
892 margin-bottom: @padding;
893
893
894 &:after {
894 &:after {
895 content: " ";
895 content: " ";
896 clear: both;
896 clear: both;
897 width: 100%;
897 width: 100%;
898 }
898 }
899 }
899 }
900
900
901 .fields .field {
901 .fields .field {
902 clear: both;
902 clear: both;
903 }
903 }
904 }
904 }
905
905
906 .advanced_settings {
906 .advanced_settings {
907 margin-bottom: @space;
907 margin-bottom: @space;
908
908
909 .help-block {
909 .help-block {
910 margin-left: 0;
910 margin-left: 0;
911 }
911 }
912
912
913 button + .help-block {
913 button + .help-block {
914 margin-top: @padding;
914 margin-top: @padding;
915 }
915 }
916 }
916 }
917
917
918 // admin settings radio buttons and labels
918 // admin settings radio buttons and labels
919 .label-2 {
919 .label-2 {
920 float: left;
920 float: left;
921 width: @label2-width;
921 width: @label2-width;
922
922
923 label {
923 label {
924 color: @grey1;
924 color: @grey1;
925 }
925 }
926 }
926 }
927 .checkboxes {
927 .checkboxes {
928 float: left;
928 float: left;
929 width: @checkboxes-width;
929 width: @checkboxes-width;
930 margin-bottom: @padding;
930 margin-bottom: @padding;
931
931
932 .checkbox {
932 .checkbox {
933 width: 100%;
933 width: 100%;
934
934
935 label {
935 label {
936 margin: 0;
936 margin: 0;
937 padding: 0;
937 padding: 0;
938 }
938 }
939 }
939 }
940
940
941 .checkbox + .checkbox {
941 .checkbox + .checkbox {
942 display: inline-block;
942 display: inline-block;
943 }
943 }
944
944
945 label {
945 label {
946 margin-right: 1em;
946 margin-right: 1em;
947 }
947 }
948 }
948 }
949
949
950 // CHANGELOG
950 // CHANGELOG
951 .container_header {
951 .container_header {
952 float: left;
952 float: left;
953 display: block;
953 display: block;
954 width: 100%;
954 width: 100%;
955 margin: @padding 0 @padding;
955 margin: @padding 0 @padding;
956
956
957 #filter_changelog {
957 #filter_changelog {
958 float: left;
958 float: left;
959 margin-right: @padding;
959 margin-right: @padding;
960 }
960 }
961
961
962 .breadcrumbs_light {
962 .breadcrumbs_light {
963 display: inline-block;
963 display: inline-block;
964 }
964 }
965 }
965 }
966
966
967 .info_box {
967 .info_box {
968 float: right;
968 float: right;
969 }
969 }
970
970
971
971
972
972
973 #graph_content{
973 #graph_content{
974
974
975 // adjust for table headers so that graph renders properly
975 // adjust for table headers so that graph renders properly
976 // #graph_nodes padding - table cell padding
976 // #graph_nodes padding - table cell padding
977 padding-top: (@space - (@basefontsize * 2.4));
977 padding-top: (@space - (@basefontsize * 2.4));
978
978
979 &.graph_full_width {
979 &.graph_full_width {
980 width: 100%;
980 width: 100%;
981 max-width: 100%;
981 max-width: 100%;
982 }
982 }
983 }
983 }
984
984
985 #graph {
985 #graph {
986 .flag_status {
986 .flag_status {
987 margin: 0;
987 margin: 0;
988 }
988 }
989
989
990 .pagination-left {
990 .pagination-left {
991 float: left;
991 float: left;
992 clear: both;
992 clear: both;
993 }
993 }
994
994
995 .log-container {
995 .log-container {
996 max-width: 345px;
996 max-width: 345px;
997
997
998 .message{
998 .message{
999 max-width: 340px;
999 max-width: 340px;
1000 }
1000 }
1001 }
1001 }
1002
1002
1003 .graph-col-wrapper {
1003 .graph-col-wrapper {
1004
1004
1005 #graph_nodes {
1005 #graph_nodes {
1006 width: 100px;
1006 width: 100px;
1007 position: absolute;
1007 position: absolute;
1008 left: 70px;
1008 left: 70px;
1009 z-index: -1;
1009 z-index: -1;
1010 }
1010 }
1011 }
1011 }
1012
1012
1013 .load-more-commits {
1013 .load-more-commits {
1014 text-align: center;
1014 text-align: center;
1015 }
1015 }
1016 .load-more-commits:hover {
1016 .load-more-commits:hover {
1017 background-color: @grey7;
1017 background-color: @grey7;
1018 }
1018 }
1019 .load-more-commits {
1019 .load-more-commits {
1020 a {
1020 a {
1021 display: block;
1021 display: block;
1022 }
1022 }
1023 }
1023 }
1024 }
1024 }
1025
1025
1026 .obsolete-toggle {
1026 .obsolete-toggle {
1027 line-height: 30px;
1027 line-height: 30px;
1028 margin-left: -15px;
1028 margin-left: -15px;
1029 }
1029 }
1030
1030
1031 #rev_range_container, #rev_range_clear, #rev_range_more {
1031 #rev_range_container, #rev_range_clear, #rev_range_more {
1032 margin-top: -5px;
1032 margin-top: -5px;
1033 margin-bottom: -5px;
1033 margin-bottom: -5px;
1034 }
1034 }
1035
1035
1036 #filter_changelog {
1036 #filter_changelog {
1037 float: left;
1037 float: left;
1038 }
1038 }
1039
1039
1040
1040
1041 //--- THEME ------------------//
1041 //--- THEME ------------------//
1042
1042
1043 #logo {
1043 #logo {
1044 float: left;
1044 float: left;
1045 margin: 9px 0 0 0;
1045 margin: 9px 0 0 0;
1046
1046
1047 .header {
1047 .header {
1048 background-color: transparent;
1048 background-color: transparent;
1049 }
1049 }
1050
1050
1051 a {
1051 a {
1052 display: inline-block;
1052 display: inline-block;
1053 }
1053 }
1054
1054
1055 img {
1055 img {
1056 height:30px;
1056 height:30px;
1057 }
1057 }
1058 }
1058 }
1059
1059
1060 .logo-wrapper {
1060 .logo-wrapper {
1061 float:left;
1061 float:left;
1062 }
1062 }
1063
1063
1064 .branding {
1064 .branding {
1065 float: left;
1065 float: left;
1066 padding: 9px 2px;
1066 padding: 9px 2px;
1067 line-height: 1em;
1067 line-height: 1em;
1068 font-size: @navigation-fontsize;
1068 font-size: @navigation-fontsize;
1069
1069
1070 a {
1070 a {
1071 color: @grey5
1071 color: @grey5
1072 }
1072 }
1073 @media screen and (max-width: 1200px) {
1073 @media screen and (max-width: 1200px) {
1074 display: none;
1074 display: none;
1075 }
1075 }
1076 }
1076 }
1077
1077
1078 img {
1078 img {
1079 border: none;
1079 border: none;
1080 outline: none;
1080 outline: none;
1081 }
1081 }
1082 user-profile-header
1082 user-profile-header
1083 label {
1083 label {
1084
1084
1085 input[type="checkbox"] {
1085 input[type="checkbox"] {
1086 margin-right: 1em;
1086 margin-right: 1em;
1087 }
1087 }
1088 input[type="radio"] {
1088 input[type="radio"] {
1089 margin-right: 1em;
1089 margin-right: 1em;
1090 }
1090 }
1091 }
1091 }
1092
1092
1093 .flag_status {
1093 .flag_status {
1094 margin: 2px;
1094 margin: 2px;
1095 &.under_review {
1095 &.under_review {
1096 .circle(5px, @alert3);
1096 .circle(5px, @alert3);
1097 }
1097 }
1098 &.approved {
1098 &.approved {
1099 .circle(5px, @alert1);
1099 .circle(5px, @alert1);
1100 }
1100 }
1101 &.rejected,
1101 &.rejected,
1102 &.forced_closed{
1102 &.forced_closed{
1103 .circle(5px, @alert2);
1103 .circle(5px, @alert2);
1104 }
1104 }
1105 &.not_reviewed {
1105 &.not_reviewed {
1106 .circle(5px, @grey5);
1106 .circle(5px, @grey5);
1107 }
1107 }
1108 }
1108 }
1109
1109
1110 .review-status {
1111 &.under_review {
1112 color: @alert3;
1113 }
1114 &.approved {
1115 color: @alert1;
1116 }
1117 &.rejected,
1118 &.forced_closed{
1119 color: @alert2;
1120 }
1121 &.not_reviewed {
1122 color: @grey5;
1123 }
1124 }
1125
1126 .review-status-under_review {
1127 color: @alert3;
1128 }
1129 .status-tag-under_review {
1130 border-color: @alert3;
1131 }
1132
1133 .review-status-approved {
1134 color: @alert1;
1135 }
1136 .status-tag-approved {
1137 border-color: @alert1;
1138 }
1139
1140 .review-status-rejected,
1141 .review-status-forced_closed {
1142 color: @alert2;
1143 }
1144 .status-tag-rejected,
1145 .status-tag-forced_closed {
1146 border-color: @alert2;
1147 }
1148
1149 .review-status-not_reviewed {
1150 color: @grey5;
1151 }
1152 .status-tag-not_reviewed {
1153 border-color: @grey5;
1154 }
1155
1110 .flag_status_comment_box {
1156 .flag_status_comment_box {
1111 margin: 5px 6px 0px 2px;
1157 margin: 5px 6px 0px 2px;
1112 }
1158 }
1113 .test_pattern_preview {
1159 .test_pattern_preview {
1114 margin: @space 0;
1160 margin: @space 0;
1115
1161
1116 p {
1162 p {
1117 margin-bottom: 0;
1163 margin-bottom: 0;
1118 border-bottom: @border-thickness solid @border-default-color;
1164 border-bottom: @border-thickness solid @border-default-color;
1119 color: @grey3;
1165 color: @grey3;
1120 }
1166 }
1121
1167
1122 .btn {
1168 .btn {
1123 margin-bottom: @padding;
1169 margin-bottom: @padding;
1124 }
1170 }
1125 }
1171 }
1126 #test_pattern_result {
1172 #test_pattern_result {
1127 display: none;
1173 display: none;
1128 &:extend(pre);
1174 &:extend(pre);
1129 padding: .9em;
1175 padding: .9em;
1130 color: @grey3;
1176 color: @grey3;
1131 background-color: @grey7;
1177 background-color: @grey7;
1132 border-right: @border-thickness solid @border-default-color;
1178 border-right: @border-thickness solid @border-default-color;
1133 border-bottom: @border-thickness solid @border-default-color;
1179 border-bottom: @border-thickness solid @border-default-color;
1134 border-left: @border-thickness solid @border-default-color;
1180 border-left: @border-thickness solid @border-default-color;
1135 }
1181 }
1136
1182
1137 #repo_vcs_settings {
1183 #repo_vcs_settings {
1138 #inherit_overlay_vcs_default {
1184 #inherit_overlay_vcs_default {
1139 display: none;
1185 display: none;
1140 }
1186 }
1141 #inherit_overlay_vcs_custom {
1187 #inherit_overlay_vcs_custom {
1142 display: custom;
1188 display: custom;
1143 }
1189 }
1144 &.inherited {
1190 &.inherited {
1145 #inherit_overlay_vcs_default {
1191 #inherit_overlay_vcs_default {
1146 display: block;
1192 display: block;
1147 }
1193 }
1148 #inherit_overlay_vcs_custom {
1194 #inherit_overlay_vcs_custom {
1149 display: none;
1195 display: none;
1150 }
1196 }
1151 }
1197 }
1152 }
1198 }
1153
1199
1154 .issue-tracker-link {
1200 .issue-tracker-link {
1155 color: @rcblue;
1201 color: @rcblue;
1156 }
1202 }
1157
1203
1158 // Issue Tracker Table Show/Hide
1204 // Issue Tracker Table Show/Hide
1159 #repo_issue_tracker {
1205 #repo_issue_tracker {
1160 #inherit_overlay {
1206 #inherit_overlay {
1161 display: none;
1207 display: none;
1162 }
1208 }
1163 #custom_overlay {
1209 #custom_overlay {
1164 display: custom;
1210 display: custom;
1165 }
1211 }
1166 &.inherited {
1212 &.inherited {
1167 #inherit_overlay {
1213 #inherit_overlay {
1168 display: block;
1214 display: block;
1169 }
1215 }
1170 #custom_overlay {
1216 #custom_overlay {
1171 display: none;
1217 display: none;
1172 }
1218 }
1173 }
1219 }
1174 }
1220 }
1175 table.issuetracker {
1221 table.issuetracker {
1176 &.readonly {
1222 &.readonly {
1177 tr, td {
1223 tr, td {
1178 color: @grey3;
1224 color: @grey3;
1179 }
1225 }
1180 }
1226 }
1181 .edit {
1227 .edit {
1182 display: none;
1228 display: none;
1183 }
1229 }
1184 .editopen {
1230 .editopen {
1185 .edit {
1231 .edit {
1186 display: inline;
1232 display: inline;
1187 }
1233 }
1188 .entry {
1234 .entry {
1189 display: none;
1235 display: none;
1190 }
1236 }
1191 }
1237 }
1192 tr td.td-action {
1238 tr td.td-action {
1193 min-width: 117px;
1239 min-width: 117px;
1194 }
1240 }
1195 td input {
1241 td input {
1196 max-width: none;
1242 max-width: none;
1197 min-width: 30px;
1243 min-width: 30px;
1198 width: 80%;
1244 width: 80%;
1199 }
1245 }
1200 .issuetracker_pref input {
1246 .issuetracker_pref input {
1201 width: 40%;
1247 width: 40%;
1202 }
1248 }
1203 input.edit_issuetracker_update {
1249 input.edit_issuetracker_update {
1204 margin-right: 0;
1250 margin-right: 0;
1205 width: auto;
1251 width: auto;
1206 }
1252 }
1207 }
1253 }
1208
1254
1209 table.integrations {
1255 table.integrations {
1210 .td-icon {
1256 .td-icon {
1211 width: 20px;
1257 width: 20px;
1212 .integration-icon {
1258 .integration-icon {
1213 height: 20px;
1259 height: 20px;
1214 width: 20px;
1260 width: 20px;
1215 }
1261 }
1216 }
1262 }
1217 }
1263 }
1218
1264
1219 .integrations {
1265 .integrations {
1220 a.integration-box {
1266 a.integration-box {
1221 color: @text-color;
1267 color: @text-color;
1222 &:hover {
1268 &:hover {
1223 .panel {
1269 .panel {
1224 background: #fbfbfb;
1270 background: #fbfbfb;
1225 }
1271 }
1226 }
1272 }
1227 .integration-icon {
1273 .integration-icon {
1228 width: 30px;
1274 width: 30px;
1229 height: 30px;
1275 height: 30px;
1230 margin-right: 20px;
1276 margin-right: 20px;
1231 float: left;
1277 float: left;
1232 }
1278 }
1233
1279
1234 .panel-body {
1280 .panel-body {
1235 padding: 10px;
1281 padding: 10px;
1236 }
1282 }
1237 .panel {
1283 .panel {
1238 margin-bottom: 10px;
1284 margin-bottom: 10px;
1239 }
1285 }
1240 h2 {
1286 h2 {
1241 display: inline-block;
1287 display: inline-block;
1242 margin: 0;
1288 margin: 0;
1243 min-width: 140px;
1289 min-width: 140px;
1244 }
1290 }
1245 }
1291 }
1246 a.integration-box.dummy-integration {
1292 a.integration-box.dummy-integration {
1247 color: @grey4
1293 color: @grey4
1248 }
1294 }
1249 }
1295 }
1250
1296
1251 //Permissions Settings
1297 //Permissions Settings
1252 #add_perm {
1298 #add_perm {
1253 margin: 0 0 @padding;
1299 margin: 0 0 @padding;
1254 cursor: pointer;
1300 cursor: pointer;
1255 }
1301 }
1256
1302
1257 .perm_ac {
1303 .perm_ac {
1258 input {
1304 input {
1259 width: 95%;
1305 width: 95%;
1260 }
1306 }
1261 }
1307 }
1262
1308
1263 .autocomplete-suggestions {
1309 .autocomplete-suggestions {
1264 width: auto !important; // overrides autocomplete.js
1310 width: auto !important; // overrides autocomplete.js
1265 min-width: 278px;
1311 min-width: 278px;
1266 margin: 0;
1312 margin: 0;
1267 border: @border-thickness solid @grey5;
1313 border: @border-thickness solid @grey5;
1268 border-radius: @border-radius;
1314 border-radius: @border-radius;
1269 color: @grey2;
1315 color: @grey2;
1270 background-color: white;
1316 background-color: white;
1271 }
1317 }
1272
1318
1273 .autocomplete-qfilter-suggestions {
1319 .autocomplete-qfilter-suggestions {
1274 width: auto !important; // overrides autocomplete.js
1320 width: auto !important; // overrides autocomplete.js
1275 max-height: 100% !important;
1321 max-height: 100% !important;
1276 min-width: 376px;
1322 min-width: 376px;
1277 margin: 0;
1323 margin: 0;
1278 border: @border-thickness solid @grey5;
1324 border: @border-thickness solid @grey5;
1279 color: @grey2;
1325 color: @grey2;
1280 background-color: white;
1326 background-color: white;
1281 }
1327 }
1282
1328
1283 .autocomplete-selected {
1329 .autocomplete-selected {
1284 background: #F0F0F0;
1330 background: #F0F0F0;
1285 }
1331 }
1286
1332
1287 .ac-container-wrap {
1333 .ac-container-wrap {
1288 margin: 0;
1334 margin: 0;
1289 padding: 8px;
1335 padding: 8px;
1290 border-bottom: @border-thickness solid @grey5;
1336 border-bottom: @border-thickness solid @grey5;
1291 list-style-type: none;
1337 list-style-type: none;
1292 cursor: pointer;
1338 cursor: pointer;
1293
1339
1294 &:hover {
1340 &:hover {
1295 background-color: @grey7;
1341 background-color: @grey7;
1296 }
1342 }
1297
1343
1298 img {
1344 img {
1299 height: @gravatar-size;
1345 height: @gravatar-size;
1300 width: @gravatar-size;
1346 width: @gravatar-size;
1301 margin-right: 1em;
1347 margin-right: 1em;
1302 }
1348 }
1303
1349
1304 strong {
1350 strong {
1305 font-weight: normal;
1351 font-weight: normal;
1306 }
1352 }
1307 }
1353 }
1308
1354
1309 // Settings Dropdown
1355 // Settings Dropdown
1310 .user-menu .container {
1356 .user-menu .container {
1311 padding: 0 4px;
1357 padding: 0 4px;
1312 margin: 0;
1358 margin: 0;
1313 }
1359 }
1314
1360
1315 .user-menu .gravatar {
1361 .user-menu .gravatar {
1316 cursor: pointer;
1362 cursor: pointer;
1317 }
1363 }
1318
1364
1319 .codeblock {
1365 .codeblock {
1320 margin-bottom: @padding;
1366 margin-bottom: @padding;
1321 clear: both;
1367 clear: both;
1322
1368
1323 .stats {
1369 .stats {
1324 overflow: hidden;
1370 overflow: hidden;
1325 }
1371 }
1326
1372
1327 .message{
1373 .message{
1328 textarea{
1374 textarea{
1329 margin: 0;
1375 margin: 0;
1330 }
1376 }
1331 }
1377 }
1332
1378
1333 .code-header {
1379 .code-header {
1334 .stats {
1380 .stats {
1335 line-height: 2em;
1381 line-height: 2em;
1336
1382
1337 .revision_id {
1383 .revision_id {
1338 margin-left: 0;
1384 margin-left: 0;
1339 }
1385 }
1340 .buttons {
1386 .buttons {
1341 padding-right: 0;
1387 padding-right: 0;
1342 }
1388 }
1343 }
1389 }
1344
1390
1345 .item{
1391 .item{
1346 margin-right: 0.5em;
1392 margin-right: 0.5em;
1347 }
1393 }
1348 }
1394 }
1349
1395
1350 #editor_container {
1396 #editor_container {
1351 position: relative;
1397 position: relative;
1352 margin: @padding 10px;
1398 margin: @padding 10px;
1353 }
1399 }
1354 }
1400 }
1355
1401
1356 #file_history_container {
1402 #file_history_container {
1357 display: none;
1403 display: none;
1358 }
1404 }
1359
1405
1360 .file-history-inner {
1406 .file-history-inner {
1361 margin-bottom: 10px;
1407 margin-bottom: 10px;
1362 }
1408 }
1363
1409
1364 // Pull Requests
1410 // Pull Requests
1365 .summary-details {
1411 .summary-details {
1366 width: 72%;
1412 width: 72%;
1367 }
1413 }
1368 .pr-summary {
1414 .pr-summary {
1369 border-bottom: @border-thickness solid @grey5;
1415 border-bottom: @border-thickness solid @grey5;
1370 margin-bottom: @space;
1416 margin-bottom: @space;
1371 }
1417 }
1372 .reviewers-title {
1418 .reviewers-title {
1373 width: 25%;
1419 width: 25%;
1374 min-width: 200px;
1420 min-width: 200px;
1375 }
1421 }
1376 .reviewers {
1422 .reviewers {
1377 width: 25%;
1423 width: 25%;
1378 min-width: 200px;
1424 min-width: 200px;
1379 }
1425 }
1380 .reviewers ul li {
1426 .reviewers ul li {
1381 position: relative;
1427 position: relative;
1382 width: 100%;
1428 width: 100%;
1383 padding-bottom: 8px;
1429 padding-bottom: 8px;
1384 list-style-type: none;
1430 list-style-type: none;
1385 }
1431 }
1386
1432
1387 .reviewer_entry {
1433 .reviewer_entry {
1388 min-height: 55px;
1434 min-height: 55px;
1389 }
1435 }
1390
1436
1391 .reviewers_member {
1437 .reviewers_member {
1392 width: 100%;
1438 width: 100%;
1393 overflow: auto;
1439 overflow: auto;
1394 }
1440 }
1395 .reviewer_reason {
1441 .reviewer_reason {
1396 padding-left: 20px;
1442 padding-left: 20px;
1397 line-height: 1.5em;
1443 line-height: 1.5em;
1398 }
1444 }
1399 .reviewer_status {
1445 .reviewer_status {
1400 display: inline-block;
1446 display: inline-block;
1401 vertical-align: top;
1447 vertical-align: top;
1402 width: 25px;
1448 width: 25px;
1403 min-width: 25px;
1449 min-width: 25px;
1404 height: 1.2em;
1450 height: 1.2em;
1405 margin-top: 3px;
1451 margin-top: 3px;
1406 line-height: 1em;
1452 line-height: 1em;
1407 }
1453 }
1408
1454
1409 .reviewer_name {
1455 .reviewer_name {
1410 display: inline-block;
1456 display: inline-block;
1411 max-width: 83%;
1457 max-width: 83%;
1412 padding-right: 20px;
1458 padding-right: 20px;
1413 vertical-align: middle;
1459 vertical-align: middle;
1414 line-height: 1;
1460 line-height: 1;
1415
1461
1416 .rc-user {
1462 .rc-user {
1417 min-width: 0;
1463 min-width: 0;
1418 margin: -2px 1em 0 0;
1464 margin: -2px 1em 0 0;
1419 }
1465 }
1420
1466
1421 .reviewer {
1467 .reviewer {
1422 float: left;
1468 float: left;
1423 }
1469 }
1424 }
1470 }
1425
1471
1426 .reviewer_member_mandatory {
1472 .reviewer_member_mandatory {
1427 position: absolute;
1473 position: absolute;
1428 left: 15px;
1474 left: 15px;
1429 top: 8px;
1475 top: 8px;
1430 width: 16px;
1476 width: 16px;
1431 font-size: 11px;
1477 font-size: 11px;
1432 margin: 0;
1478 margin: 0;
1433 padding: 0;
1479 padding: 0;
1434 color: black;
1480 color: black;
1435 }
1481 }
1436
1482
1437 .reviewer_member_mandatory_remove,
1483 .reviewer_member_mandatory_remove,
1438 .reviewer_member_remove {
1484 .reviewer_member_remove {
1439 position: absolute;
1485 position: absolute;
1440 right: 0;
1486 right: 0;
1441 top: 0;
1487 top: 0;
1442 width: 16px;
1488 width: 16px;
1443 margin-bottom: 10px;
1489 margin-bottom: 10px;
1444 padding: 0;
1490 padding: 0;
1445 color: black;
1491 color: black;
1446 }
1492 }
1447
1493
1448 .reviewer_member_mandatory_remove {
1494 .reviewer_member_mandatory_remove {
1449 color: @grey4;
1495 color: @grey4;
1450 }
1496 }
1451
1497
1452 .reviewer_member_status {
1498 .reviewer_member_status {
1453 margin-top: 5px;
1499 margin-top: 5px;
1454 }
1500 }
1455 .pr-summary #summary{
1501 .pr-summary #summary{
1456 width: 100%;
1502 width: 100%;
1457 }
1503 }
1458 .pr-summary .action_button:hover {
1504 .pr-summary .action_button:hover {
1459 border: 0;
1505 border: 0;
1460 cursor: pointer;
1506 cursor: pointer;
1461 }
1507 }
1462 .pr-details-title {
1508 .pr-details-title {
1463 padding-bottom: 8px;
1509 padding-bottom: 8px;
1464 border-bottom: @border-thickness solid @grey5;
1510 border-bottom: @border-thickness solid @grey5;
1465
1511
1466 .action_button.disabled {
1512 .action_button.disabled {
1467 color: @grey4;
1513 color: @grey4;
1468 cursor: inherit;
1514 cursor: inherit;
1469 }
1515 }
1470 .action_button {
1516 .action_button {
1471 color: @rcblue;
1517 color: @rcblue;
1472 }
1518 }
1473 }
1519 }
1474 .pr-details-content {
1520 .pr-details-content {
1475 margin-top: @textmargin;
1521 margin-top: @textmargin;
1476 margin-bottom: @textmargin;
1522 margin-bottom: @textmargin;
1477 }
1523 }
1478
1524
1479 .pr-reviewer-rules {
1525 .pr-reviewer-rules {
1480 padding: 10px 0px 20px 0px;
1526 padding: 10px 0px 20px 0px;
1481 }
1527 }
1482
1528
1483 .group_members {
1529 .group_members {
1484 margin-top: 0;
1530 margin-top: 0;
1485 padding: 0;
1531 padding: 0;
1486 list-style: outside none none;
1532 list-style: outside none none;
1487
1533
1488 img {
1534 img {
1489 height: @gravatar-size;
1535 height: @gravatar-size;
1490 width: @gravatar-size;
1536 width: @gravatar-size;
1491 margin-right: .5em;
1537 margin-right: .5em;
1492 margin-left: 3px;
1538 margin-left: 3px;
1493 }
1539 }
1494
1540
1495 .to-delete {
1541 .to-delete {
1496 .user {
1542 .user {
1497 text-decoration: line-through;
1543 text-decoration: line-through;
1498 }
1544 }
1499 }
1545 }
1500 }
1546 }
1501
1547
1502 .compare_view_commits_title {
1548 .compare_view_commits_title {
1503 .disabled {
1549 .disabled {
1504 cursor: inherit;
1550 cursor: inherit;
1505 &:hover{
1551 &:hover{
1506 background-color: inherit;
1552 background-color: inherit;
1507 color: inherit;
1553 color: inherit;
1508 }
1554 }
1509 }
1555 }
1510 }
1556 }
1511
1557
1512 .subtitle-compare {
1558 .subtitle-compare {
1513 margin: -15px 0px 0px 0px;
1559 margin: -15px 0px 0px 0px;
1514 }
1560 }
1515
1561
1516 .comments-summary-td {
1562 .comments-summary-td {
1517 border-top: 1px dashed @grey5;
1563 border-top: 1px dashed @grey5;
1518 }
1564 }
1519
1565
1520 // new entry in group_members
1566 // new entry in group_members
1521 .td-author-new-entry {
1567 .td-author-new-entry {
1522 background-color: rgba(red(@alert1), green(@alert1), blue(@alert1), 0.3);
1568 background-color: rgba(red(@alert1), green(@alert1), blue(@alert1), 0.3);
1523 }
1569 }
1524
1570
1525 .usergroup_member_remove {
1571 .usergroup_member_remove {
1526 width: 16px;
1572 width: 16px;
1527 margin-bottom: 10px;
1573 margin-bottom: 10px;
1528 padding: 0;
1574 padding: 0;
1529 color: black !important;
1575 color: black !important;
1530 cursor: pointer;
1576 cursor: pointer;
1531 }
1577 }
1532
1578
1533 .reviewer_ac .ac-input {
1579 .reviewer_ac .ac-input {
1534 width: 92%;
1580 width: 92%;
1535 margin-bottom: 1em;
1581 margin-bottom: 1em;
1536 }
1582 }
1537
1583
1538 .compare_view_commits tr{
1584 .compare_view_commits tr{
1539 height: 20px;
1585 height: 20px;
1540 }
1586 }
1541 .compare_view_commits td {
1587 .compare_view_commits td {
1542 vertical-align: top;
1588 vertical-align: top;
1543 padding-top: 10px;
1589 padding-top: 10px;
1544 }
1590 }
1545 .compare_view_commits .author {
1591 .compare_view_commits .author {
1546 margin-left: 5px;
1592 margin-left: 5px;
1547 }
1593 }
1548
1594
1549 .compare_view_commits {
1595 .compare_view_commits {
1550 .color-a {
1596 .color-a {
1551 color: @alert1;
1597 color: @alert1;
1552 }
1598 }
1553
1599
1554 .color-c {
1600 .color-c {
1555 color: @color3;
1601 color: @color3;
1556 }
1602 }
1557
1603
1558 .color-r {
1604 .color-r {
1559 color: @color5;
1605 color: @color5;
1560 }
1606 }
1561
1607
1562 .color-a-bg {
1608 .color-a-bg {
1563 background-color: @alert1;
1609 background-color: @alert1;
1564 }
1610 }
1565
1611
1566 .color-c-bg {
1612 .color-c-bg {
1567 background-color: @alert3;
1613 background-color: @alert3;
1568 }
1614 }
1569
1615
1570 .color-r-bg {
1616 .color-r-bg {
1571 background-color: @alert2;
1617 background-color: @alert2;
1572 }
1618 }
1573
1619
1574 .color-a-border {
1620 .color-a-border {
1575 border: 1px solid @alert1;
1621 border: 1px solid @alert1;
1576 }
1622 }
1577
1623
1578 .color-c-border {
1624 .color-c-border {
1579 border: 1px solid @alert3;
1625 border: 1px solid @alert3;
1580 }
1626 }
1581
1627
1582 .color-r-border {
1628 .color-r-border {
1583 border: 1px solid @alert2;
1629 border: 1px solid @alert2;
1584 }
1630 }
1585
1631
1586 .commit-change-indicator {
1632 .commit-change-indicator {
1587 width: 15px;
1633 width: 15px;
1588 height: 15px;
1634 height: 15px;
1589 position: relative;
1635 position: relative;
1590 left: 15px;
1636 left: 15px;
1591 }
1637 }
1592
1638
1593 .commit-change-content {
1639 .commit-change-content {
1594 text-align: center;
1640 text-align: center;
1595 vertical-align: middle;
1641 vertical-align: middle;
1596 line-height: 15px;
1642 line-height: 15px;
1597 }
1643 }
1598 }
1644 }
1599
1645
1600 .compare_view_filepath {
1646 .compare_view_filepath {
1601 color: @grey1;
1647 color: @grey1;
1602 }
1648 }
1603
1649
1604 .show_more {
1650 .show_more {
1605 display: inline-block;
1651 display: inline-block;
1606 width: 0;
1652 width: 0;
1607 height: 0;
1653 height: 0;
1608 vertical-align: middle;
1654 vertical-align: middle;
1609 content: "";
1655 content: "";
1610 border: 4px solid;
1656 border: 4px solid;
1611 border-right-color: transparent;
1657 border-right-color: transparent;
1612 border-bottom-color: transparent;
1658 border-bottom-color: transparent;
1613 border-left-color: transparent;
1659 border-left-color: transparent;
1614 font-size: 0;
1660 font-size: 0;
1615 }
1661 }
1616
1662
1617 .journal_more .show_more {
1663 .journal_more .show_more {
1618 display: inline;
1664 display: inline;
1619
1665
1620 &:after {
1666 &:after {
1621 content: none;
1667 content: none;
1622 }
1668 }
1623 }
1669 }
1624
1670
1625 .compare_view_commits .collapse_commit:after {
1671 .compare_view_commits .collapse_commit:after {
1626 cursor: pointer;
1672 cursor: pointer;
1627 content: "\00A0\25B4";
1673 content: "\00A0\25B4";
1628 margin-left: -3px;
1674 margin-left: -3px;
1629 font-size: 17px;
1675 font-size: 17px;
1630 color: @grey4;
1676 color: @grey4;
1631 }
1677 }
1632
1678
1633 .diff_links {
1679 .diff_links {
1634 margin-left: 8px;
1680 margin-left: 8px;
1635 }
1681 }
1636
1682
1637 #pull_request_overview {
1683 #pull_request_overview {
1638 div.ancestor {
1684 div.ancestor {
1639 margin: -33px 0;
1685 margin: -33px 0;
1640 }
1686 }
1641 }
1687 }
1642
1688
1643 div.ancestor {
1689 div.ancestor {
1644 line-height: 33px;
1690 line-height: 33px;
1645 }
1691 }
1646
1692
1647 .cs_icon_td input[type="checkbox"] {
1693 .cs_icon_td input[type="checkbox"] {
1648 display: none;
1694 display: none;
1649 }
1695 }
1650
1696
1651 .cs_icon_td .expand_file_icon:after {
1697 .cs_icon_td .expand_file_icon:after {
1652 cursor: pointer;
1698 cursor: pointer;
1653 content: "\00A0\25B6";
1699 content: "\00A0\25B6";
1654 font-size: 12px;
1700 font-size: 12px;
1655 color: @grey4;
1701 color: @grey4;
1656 }
1702 }
1657
1703
1658 .cs_icon_td .collapse_file_icon:after {
1704 .cs_icon_td .collapse_file_icon:after {
1659 cursor: pointer;
1705 cursor: pointer;
1660 content: "\00A0\25BC";
1706 content: "\00A0\25BC";
1661 font-size: 12px;
1707 font-size: 12px;
1662 color: @grey4;
1708 color: @grey4;
1663 }
1709 }
1664
1710
1665 /*new binary
1711 /*new binary
1666 NEW_FILENODE = 1
1712 NEW_FILENODE = 1
1667 DEL_FILENODE = 2
1713 DEL_FILENODE = 2
1668 MOD_FILENODE = 3
1714 MOD_FILENODE = 3
1669 RENAMED_FILENODE = 4
1715 RENAMED_FILENODE = 4
1670 COPIED_FILENODE = 5
1716 COPIED_FILENODE = 5
1671 CHMOD_FILENODE = 6
1717 CHMOD_FILENODE = 6
1672 BIN_FILENODE = 7
1718 BIN_FILENODE = 7
1673 */
1719 */
1674 .cs_files_expand {
1720 .cs_files_expand {
1675 font-size: @basefontsize + 5px;
1721 font-size: @basefontsize + 5px;
1676 line-height: 1.8em;
1722 line-height: 1.8em;
1677 float: right;
1723 float: right;
1678 }
1724 }
1679
1725
1680 .cs_files_expand span{
1726 .cs_files_expand span{
1681 color: @rcblue;
1727 color: @rcblue;
1682 cursor: pointer;
1728 cursor: pointer;
1683 }
1729 }
1684 .cs_files {
1730 .cs_files {
1685 clear: both;
1731 clear: both;
1686 padding-bottom: @padding;
1732 padding-bottom: @padding;
1687
1733
1688 .cur_cs {
1734 .cur_cs {
1689 margin: 10px 2px;
1735 margin: 10px 2px;
1690 font-weight: bold;
1736 font-weight: bold;
1691 }
1737 }
1692
1738
1693 .node {
1739 .node {
1694 float: left;
1740 float: left;
1695 }
1741 }
1696
1742
1697 .changes {
1743 .changes {
1698 float: right;
1744 float: right;
1699 color: white;
1745 color: white;
1700 font-size: @basefontsize - 4px;
1746 font-size: @basefontsize - 4px;
1701 margin-top: 4px;
1747 margin-top: 4px;
1702 opacity: 0.6;
1748 opacity: 0.6;
1703 filter: Alpha(opacity=60); /* IE8 and earlier */
1749 filter: Alpha(opacity=60); /* IE8 and earlier */
1704
1750
1705 .added {
1751 .added {
1706 background-color: @alert1;
1752 background-color: @alert1;
1707 float: left;
1753 float: left;
1708 text-align: center;
1754 text-align: center;
1709 }
1755 }
1710
1756
1711 .deleted {
1757 .deleted {
1712 background-color: @alert2;
1758 background-color: @alert2;
1713 float: left;
1759 float: left;
1714 text-align: center;
1760 text-align: center;
1715 }
1761 }
1716
1762
1717 .bin {
1763 .bin {
1718 background-color: @alert1;
1764 background-color: @alert1;
1719 text-align: center;
1765 text-align: center;
1720 }
1766 }
1721
1767
1722 /*new binary*/
1768 /*new binary*/
1723 .bin.bin1 {
1769 .bin.bin1 {
1724 background-color: @alert1;
1770 background-color: @alert1;
1725 text-align: center;
1771 text-align: center;
1726 }
1772 }
1727
1773
1728 /*deleted binary*/
1774 /*deleted binary*/
1729 .bin.bin2 {
1775 .bin.bin2 {
1730 background-color: @alert2;
1776 background-color: @alert2;
1731 text-align: center;
1777 text-align: center;
1732 }
1778 }
1733
1779
1734 /*mod binary*/
1780 /*mod binary*/
1735 .bin.bin3 {
1781 .bin.bin3 {
1736 background-color: @grey2;
1782 background-color: @grey2;
1737 text-align: center;
1783 text-align: center;
1738 }
1784 }
1739
1785
1740 /*rename file*/
1786 /*rename file*/
1741 .bin.bin4 {
1787 .bin.bin4 {
1742 background-color: @alert4;
1788 background-color: @alert4;
1743 text-align: center;
1789 text-align: center;
1744 }
1790 }
1745
1791
1746 /*copied file*/
1792 /*copied file*/
1747 .bin.bin5 {
1793 .bin.bin5 {
1748 background-color: @alert4;
1794 background-color: @alert4;
1749 text-align: center;
1795 text-align: center;
1750 }
1796 }
1751
1797
1752 /*chmod file*/
1798 /*chmod file*/
1753 .bin.bin6 {
1799 .bin.bin6 {
1754 background-color: @grey2;
1800 background-color: @grey2;
1755 text-align: center;
1801 text-align: center;
1756 }
1802 }
1757 }
1803 }
1758 }
1804 }
1759
1805
1760 .cs_files .cs_added, .cs_files .cs_A,
1806 .cs_files .cs_added, .cs_files .cs_A,
1761 .cs_files .cs_added, .cs_files .cs_M,
1807 .cs_files .cs_added, .cs_files .cs_M,
1762 .cs_files .cs_added, .cs_files .cs_D {
1808 .cs_files .cs_added, .cs_files .cs_D {
1763 height: 16px;
1809 height: 16px;
1764 padding-right: 10px;
1810 padding-right: 10px;
1765 margin-top: 7px;
1811 margin-top: 7px;
1766 text-align: left;
1812 text-align: left;
1767 }
1813 }
1768
1814
1769 .cs_icon_td {
1815 .cs_icon_td {
1770 min-width: 16px;
1816 min-width: 16px;
1771 width: 16px;
1817 width: 16px;
1772 }
1818 }
1773
1819
1774 .pull-request-merge {
1820 .pull-request-merge {
1775 border: 1px solid @grey5;
1821 border: 1px solid @grey5;
1776 padding: 10px 0px 20px;
1822 padding: 10px 0px 20px;
1777 margin-top: 10px;
1823 margin-top: 10px;
1778 margin-bottom: 20px;
1824 margin-bottom: 20px;
1779 }
1825 }
1780
1826
1781 .pull-request-merge ul {
1827 .pull-request-merge ul {
1782 padding: 0px 0px;
1828 padding: 0px 0px;
1783 }
1829 }
1784
1830
1785 .pull-request-merge li {
1831 .pull-request-merge li {
1786 list-style-type: none;
1832 list-style-type: none;
1787 }
1833 }
1788
1834
1789 .pull-request-merge .pull-request-wrap {
1835 .pull-request-merge .pull-request-wrap {
1790 height: auto;
1836 height: auto;
1791 padding: 0px 0px;
1837 padding: 0px 0px;
1792 text-align: right;
1838 text-align: right;
1793 }
1839 }
1794
1840
1795 .pull-request-merge span {
1841 .pull-request-merge span {
1796 margin-right: 5px;
1842 margin-right: 5px;
1797 }
1843 }
1798
1844
1799 .pull-request-merge-actions {
1845 .pull-request-merge-actions {
1800 min-height: 30px;
1846 min-height: 30px;
1801 padding: 0px 0px;
1847 padding: 0px 0px;
1802 }
1848 }
1803
1849
1804 .pull-request-merge-info {
1850 .pull-request-merge-info {
1805 padding: 0px 5px 5px 0px;
1851 padding: 0px 5px 5px 0px;
1806 }
1852 }
1807
1853
1808 .merge-status {
1854 .merge-status {
1809 margin-right: 5px;
1855 margin-right: 5px;
1810 }
1856 }
1811
1857
1812 .merge-message {
1858 .merge-message {
1813 font-size: 1.2em
1859 font-size: 1.2em
1814 }
1860 }
1815
1861
1816 .merge-message.success i,
1862 .merge-message.success i,
1817 .merge-icon.success i {
1863 .merge-icon.success i {
1818 color:@alert1;
1864 color:@alert1;
1819 }
1865 }
1820
1866
1821 .merge-message.warning i,
1867 .merge-message.warning i,
1822 .merge-icon.warning i {
1868 .merge-icon.warning i {
1823 color: @alert3;
1869 color: @alert3;
1824 }
1870 }
1825
1871
1826 .merge-message.error i,
1872 .merge-message.error i,
1827 .merge-icon.error i {
1873 .merge-icon.error i {
1828 color:@alert2;
1874 color:@alert2;
1829 }
1875 }
1830
1876
1831 .pr-versions {
1877 .pr-versions {
1832 font-size: 1.1em;
1878 font-size: 1.1em;
1833
1879
1834 table {
1880 table {
1835 padding: 0px 5px;
1881 padding: 0px 5px;
1836 }
1882 }
1837
1883
1838 td {
1884 td {
1839 line-height: 15px;
1885 line-height: 15px;
1840 }
1886 }
1841
1887
1842 .flag_status {
1888 .flag_status {
1843 margin: 0;
1889 margin: 0;
1844 }
1890 }
1845
1891
1846 .compare-radio-button {
1892 .compare-radio-button {
1847 position: relative;
1893 position: relative;
1848 top: -3px;
1894 top: -3px;
1849 }
1895 }
1850 }
1896 }
1851
1897
1852
1898
1853 #close_pull_request {
1899 #close_pull_request {
1854 margin-right: 0px;
1900 margin-right: 0px;
1855 }
1901 }
1856
1902
1857 .empty_data {
1903 .empty_data {
1858 color: @grey4;
1904 color: @grey4;
1859 }
1905 }
1860
1906
1861 #changeset_compare_view_content {
1907 #changeset_compare_view_content {
1862 clear: both;
1908 clear: both;
1863 width: 100%;
1909 width: 100%;
1864 box-sizing: border-box;
1910 box-sizing: border-box;
1865 .border-radius(@border-radius);
1911 .border-radius(@border-radius);
1866
1912
1867 .help-block {
1913 .help-block {
1868 margin: @padding 0;
1914 margin: @padding 0;
1869 color: @text-color;
1915 color: @text-color;
1870 &.pre-formatting {
1916 &.pre-formatting {
1871 white-space: pre;
1917 white-space: pre;
1872 }
1918 }
1873 }
1919 }
1874
1920
1875 .empty_data {
1921 .empty_data {
1876 margin: @padding 0;
1922 margin: @padding 0;
1877 }
1923 }
1878
1924
1879 .alert {
1925 .alert {
1880 margin-bottom: @space;
1926 margin-bottom: @space;
1881 }
1927 }
1882 }
1928 }
1883
1929
1884 .table_disp {
1930 .table_disp {
1885 .status {
1931 .status {
1886 width: auto;
1932 width: auto;
1887
1933
1888 .flag_status {
1934 .flag_status {
1889 float: left;
1935 float: left;
1890 }
1936 }
1891 }
1937 }
1892 }
1938 }
1893
1939
1894
1940
1895 .creation_in_progress {
1941 .creation_in_progress {
1896 color: @grey4
1942 color: @grey4
1897 }
1943 }
1898
1944
1899 .status_box_menu {
1945 .status_box_menu {
1900 margin: 0;
1946 margin: 0;
1901 }
1947 }
1902
1948
1903 .notification-table{
1949 .notification-table{
1904 margin-bottom: @space;
1950 margin-bottom: @space;
1905 display: table;
1951 display: table;
1906 width: 100%;
1952 width: 100%;
1907
1953
1908 .container{
1954 .container{
1909 display: table-row;
1955 display: table-row;
1910
1956
1911 .notification-header{
1957 .notification-header{
1912 border-bottom: @border-thickness solid @border-default-color;
1958 border-bottom: @border-thickness solid @border-default-color;
1913 }
1959 }
1914
1960
1915 .notification-subject{
1961 .notification-subject{
1916 display: table-cell;
1962 display: table-cell;
1917 }
1963 }
1918 }
1964 }
1919 }
1965 }
1920
1966
1921 // Notifications
1967 // Notifications
1922 .notification-header{
1968 .notification-header{
1923 display: table;
1969 display: table;
1924 width: 100%;
1970 width: 100%;
1925 padding: floor(@basefontsize/2) 0;
1971 padding: floor(@basefontsize/2) 0;
1926 line-height: 1em;
1972 line-height: 1em;
1927
1973
1928 .desc, .delete-notifications, .read-notifications{
1974 .desc, .delete-notifications, .read-notifications{
1929 display: table-cell;
1975 display: table-cell;
1930 text-align: left;
1976 text-align: left;
1931 }
1977 }
1932
1978
1933 .desc{
1979 .desc{
1934 width: 1163px;
1980 width: 1163px;
1935 }
1981 }
1936
1982
1937 .delete-notifications, .read-notifications{
1983 .delete-notifications, .read-notifications{
1938 width: 35px;
1984 width: 35px;
1939 min-width: 35px; //fixes when only one button is displayed
1985 min-width: 35px; //fixes when only one button is displayed
1940 }
1986 }
1941 }
1987 }
1942
1988
1943 .notification-body {
1989 .notification-body {
1944 .markdown-block,
1990 .markdown-block,
1945 .rst-block {
1991 .rst-block {
1946 padding: @padding 0;
1992 padding: @padding 0;
1947 }
1993 }
1948
1994
1949 .notification-subject {
1995 .notification-subject {
1950 padding: @textmargin 0;
1996 padding: @textmargin 0;
1951 border-bottom: @border-thickness solid @border-default-color;
1997 border-bottom: @border-thickness solid @border-default-color;
1952 }
1998 }
1953 }
1999 }
1954
2000
1955
2001
1956 .notifications_buttons{
2002 .notifications_buttons{
1957 float: right;
2003 float: right;
1958 }
2004 }
1959
2005
1960 #notification-status{
2006 #notification-status{
1961 display: inline;
2007 display: inline;
1962 }
2008 }
1963
2009
1964 // Repositories
2010 // Repositories
1965
2011
1966 #summary.fields{
2012 #summary.fields{
1967 display: table;
2013 display: table;
1968
2014
1969 .field{
2015 .field{
1970 display: table-row;
2016 display: table-row;
1971
2017
1972 .label-summary{
2018 .label-summary{
1973 display: table-cell;
2019 display: table-cell;
1974 min-width: @label-summary-minwidth;
2020 min-width: @label-summary-minwidth;
1975 padding-top: @padding/2;
2021 padding-top: @padding/2;
1976 padding-bottom: @padding/2;
2022 padding-bottom: @padding/2;
1977 padding-right: @padding/2;
2023 padding-right: @padding/2;
1978 }
2024 }
1979
2025
1980 .input{
2026 .input{
1981 display: table-cell;
2027 display: table-cell;
1982 padding: @padding/2;
2028 padding: @padding/2;
1983
2029
1984 input{
2030 input{
1985 min-width: 29em;
2031 min-width: 29em;
1986 padding: @padding/4;
2032 padding: @padding/4;
1987 }
2033 }
1988 }
2034 }
1989 .statistics, .downloads{
2035 .statistics, .downloads{
1990 .disabled{
2036 .disabled{
1991 color: @grey4;
2037 color: @grey4;
1992 }
2038 }
1993 }
2039 }
1994 }
2040 }
1995 }
2041 }
1996
2042
1997 #summary{
2043 #summary{
1998 width: 70%;
2044 width: 70%;
1999 }
2045 }
2000
2046
2001
2047
2002 // Journal
2048 // Journal
2003 .journal.title {
2049 .journal.title {
2004 h5 {
2050 h5 {
2005 float: left;
2051 float: left;
2006 margin: 0;
2052 margin: 0;
2007 width: 70%;
2053 width: 70%;
2008 }
2054 }
2009
2055
2010 ul {
2056 ul {
2011 float: right;
2057 float: right;
2012 display: inline-block;
2058 display: inline-block;
2013 margin: 0;
2059 margin: 0;
2014 width: 30%;
2060 width: 30%;
2015 text-align: right;
2061 text-align: right;
2016
2062
2017 li {
2063 li {
2018 display: inline;
2064 display: inline;
2019 font-size: @journal-fontsize;
2065 font-size: @journal-fontsize;
2020 line-height: 1em;
2066 line-height: 1em;
2021
2067
2022 list-style-type: none;
2068 list-style-type: none;
2023 }
2069 }
2024 }
2070 }
2025 }
2071 }
2026
2072
2027 .filterexample {
2073 .filterexample {
2028 position: absolute;
2074 position: absolute;
2029 top: 95px;
2075 top: 95px;
2030 left: @contentpadding;
2076 left: @contentpadding;
2031 color: @rcblue;
2077 color: @rcblue;
2032 font-size: 11px;
2078 font-size: 11px;
2033 font-family: @text-regular;
2079 font-family: @text-regular;
2034 cursor: help;
2080 cursor: help;
2035
2081
2036 &:hover {
2082 &:hover {
2037 color: @rcdarkblue;
2083 color: @rcdarkblue;
2038 }
2084 }
2039
2085
2040 @media (max-width:768px) {
2086 @media (max-width:768px) {
2041 position: relative;
2087 position: relative;
2042 top: auto;
2088 top: auto;
2043 left: auto;
2089 left: auto;
2044 display: block;
2090 display: block;
2045 }
2091 }
2046 }
2092 }
2047
2093
2048
2094
2049 #journal{
2095 #journal{
2050 margin-bottom: @space;
2096 margin-bottom: @space;
2051
2097
2052 .journal_day{
2098 .journal_day{
2053 margin-bottom: @textmargin/2;
2099 margin-bottom: @textmargin/2;
2054 padding-bottom: @textmargin/2;
2100 padding-bottom: @textmargin/2;
2055 font-size: @journal-fontsize;
2101 font-size: @journal-fontsize;
2056 border-bottom: @border-thickness solid @border-default-color;
2102 border-bottom: @border-thickness solid @border-default-color;
2057 }
2103 }
2058
2104
2059 .journal_container{
2105 .journal_container{
2060 margin-bottom: @space;
2106 margin-bottom: @space;
2061
2107
2062 .journal_user{
2108 .journal_user{
2063 display: inline-block;
2109 display: inline-block;
2064 }
2110 }
2065 .journal_action_container{
2111 .journal_action_container{
2066 display: block;
2112 display: block;
2067 margin-top: @textmargin;
2113 margin-top: @textmargin;
2068
2114
2069 div{
2115 div{
2070 display: inline;
2116 display: inline;
2071 }
2117 }
2072
2118
2073 div.journal_action_params{
2119 div.journal_action_params{
2074 display: block;
2120 display: block;
2075 }
2121 }
2076
2122
2077 div.journal_repo:after{
2123 div.journal_repo:after{
2078 content: "\A";
2124 content: "\A";
2079 white-space: pre;
2125 white-space: pre;
2080 }
2126 }
2081
2127
2082 div.date{
2128 div.date{
2083 display: block;
2129 display: block;
2084 margin-bottom: @textmargin;
2130 margin-bottom: @textmargin;
2085 }
2131 }
2086 }
2132 }
2087 }
2133 }
2088 }
2134 }
2089
2135
2090 // Files
2136 // Files
2091 .edit-file-title {
2137 .edit-file-title {
2092 font-size: 16px;
2138 font-size: 16px;
2093
2139
2094 .title-heading {
2140 .title-heading {
2095 padding: 2px;
2141 padding: 2px;
2096 }
2142 }
2097 }
2143 }
2098
2144
2099 .edit-file-fieldset {
2145 .edit-file-fieldset {
2100 margin: @sidebarpadding 0;
2146 margin: @sidebarpadding 0;
2101
2147
2102 .fieldset {
2148 .fieldset {
2103 .left-label {
2149 .left-label {
2104 width: 13%;
2150 width: 13%;
2105 }
2151 }
2106 .right-content {
2152 .right-content {
2107 width: 87%;
2153 width: 87%;
2108 max-width: 100%;
2154 max-width: 100%;
2109 }
2155 }
2110 .filename-label {
2156 .filename-label {
2111 margin-top: 13px;
2157 margin-top: 13px;
2112 }
2158 }
2113 .commit-message-label {
2159 .commit-message-label {
2114 margin-top: 4px;
2160 margin-top: 4px;
2115 }
2161 }
2116 .file-upload-input {
2162 .file-upload-input {
2117 input {
2163 input {
2118 display: none;
2164 display: none;
2119 }
2165 }
2120 margin-top: 10px;
2166 margin-top: 10px;
2121 }
2167 }
2122 .file-upload-label {
2168 .file-upload-label {
2123 margin-top: 10px;
2169 margin-top: 10px;
2124 }
2170 }
2125 p {
2171 p {
2126 margin-top: 5px;
2172 margin-top: 5px;
2127 }
2173 }
2128
2174
2129 }
2175 }
2130 .custom-path-link {
2176 .custom-path-link {
2131 margin-left: 5px;
2177 margin-left: 5px;
2132 }
2178 }
2133 #commit {
2179 #commit {
2134 resize: vertical;
2180 resize: vertical;
2135 }
2181 }
2136 }
2182 }
2137
2183
2138 .delete-file-preview {
2184 .delete-file-preview {
2139 max-height: 250px;
2185 max-height: 250px;
2140 }
2186 }
2141
2187
2142 .new-file,
2188 .new-file,
2143 #filter_activate,
2189 #filter_activate,
2144 #filter_deactivate {
2190 #filter_deactivate {
2145 float: right;
2191 float: right;
2146 margin: 0 0 0 10px;
2192 margin: 0 0 0 10px;
2147 }
2193 }
2148
2194
2149 .file-upload-transaction-wrapper {
2195 .file-upload-transaction-wrapper {
2150 margin-top: 57px;
2196 margin-top: 57px;
2151 clear: both;
2197 clear: both;
2152 }
2198 }
2153
2199
2154 .file-upload-transaction-wrapper .error {
2200 .file-upload-transaction-wrapper .error {
2155 color: @color5;
2201 color: @color5;
2156 }
2202 }
2157
2203
2158 .file-upload-transaction {
2204 .file-upload-transaction {
2159 min-height: 200px;
2205 min-height: 200px;
2160 padding: 54px;
2206 padding: 54px;
2161 border: 1px solid @grey5;
2207 border: 1px solid @grey5;
2162 text-align: center;
2208 text-align: center;
2163 clear: both;
2209 clear: both;
2164 }
2210 }
2165
2211
2166 .file-upload-transaction i {
2212 .file-upload-transaction i {
2167 font-size: 48px
2213 font-size: 48px
2168 }
2214 }
2169
2215
2170 h3.files_location{
2216 h3.files_location{
2171 line-height: 2.4em;
2217 line-height: 2.4em;
2172 }
2218 }
2173
2219
2174 .browser-nav {
2220 .browser-nav {
2175 width: 100%;
2221 width: 100%;
2176 display: table;
2222 display: table;
2177 margin-bottom: 20px;
2223 margin-bottom: 20px;
2178
2224
2179 .info_box {
2225 .info_box {
2180 float: left;
2226 float: left;
2181 display: inline-table;
2227 display: inline-table;
2182 height: 2.5em;
2228 height: 2.5em;
2183
2229
2184 .browser-cur-rev, .info_box_elem {
2230 .browser-cur-rev, .info_box_elem {
2185 display: table-cell;
2231 display: table-cell;
2186 vertical-align: middle;
2232 vertical-align: middle;
2187 }
2233 }
2188
2234
2189 .drop-menu {
2235 .drop-menu {
2190 margin: 0 10px;
2236 margin: 0 10px;
2191 }
2237 }
2192
2238
2193 .info_box_elem {
2239 .info_box_elem {
2194 border-top: @border-thickness solid @grey5;
2240 border-top: @border-thickness solid @grey5;
2195 border-bottom: @border-thickness solid @grey5;
2241 border-bottom: @border-thickness solid @grey5;
2196 box-shadow: @button-shadow;
2242 box-shadow: @button-shadow;
2197
2243
2198 #at_rev, a {
2244 #at_rev, a {
2199 padding: 0.6em 0.4em;
2245 padding: 0.6em 0.4em;
2200 margin: 0;
2246 margin: 0;
2201 .box-shadow(none);
2247 .box-shadow(none);
2202 border: 0;
2248 border: 0;
2203 height: 12px;
2249 height: 12px;
2204 color: @grey2;
2250 color: @grey2;
2205 }
2251 }
2206
2252
2207 input#at_rev {
2253 input#at_rev {
2208 max-width: 50px;
2254 max-width: 50px;
2209 text-align: center;
2255 text-align: center;
2210 }
2256 }
2211
2257
2212 &.previous {
2258 &.previous {
2213 border: @border-thickness solid @grey5;
2259 border: @border-thickness solid @grey5;
2214 border-top-left-radius: @border-radius;
2260 border-top-left-radius: @border-radius;
2215 border-bottom-left-radius: @border-radius;
2261 border-bottom-left-radius: @border-radius;
2216
2262
2217 &:hover {
2263 &:hover {
2218 border-color: @grey4;
2264 border-color: @grey4;
2219 }
2265 }
2220
2266
2221 .disabled {
2267 .disabled {
2222 color: @grey5;
2268 color: @grey5;
2223 cursor: not-allowed;
2269 cursor: not-allowed;
2224 opacity: 0.5;
2270 opacity: 0.5;
2225 }
2271 }
2226 }
2272 }
2227
2273
2228 &.next {
2274 &.next {
2229 border: @border-thickness solid @grey5;
2275 border: @border-thickness solid @grey5;
2230 border-top-right-radius: @border-radius;
2276 border-top-right-radius: @border-radius;
2231 border-bottom-right-radius: @border-radius;
2277 border-bottom-right-radius: @border-radius;
2232
2278
2233 &:hover {
2279 &:hover {
2234 border-color: @grey4;
2280 border-color: @grey4;
2235 }
2281 }
2236
2282
2237 .disabled {
2283 .disabled {
2238 color: @grey5;
2284 color: @grey5;
2239 cursor: not-allowed;
2285 cursor: not-allowed;
2240 opacity: 0.5;
2286 opacity: 0.5;
2241 }
2287 }
2242 }
2288 }
2243 }
2289 }
2244
2290
2245 .browser-cur-rev {
2291 .browser-cur-rev {
2246
2292
2247 span{
2293 span{
2248 margin: 0;
2294 margin: 0;
2249 color: @rcblue;
2295 color: @rcblue;
2250 height: 12px;
2296 height: 12px;
2251 display: inline-block;
2297 display: inline-block;
2252 padding: 0.7em 1em ;
2298 padding: 0.7em 1em ;
2253 border: @border-thickness solid @rcblue;
2299 border: @border-thickness solid @rcblue;
2254 margin-right: @padding;
2300 margin-right: @padding;
2255 }
2301 }
2256 }
2302 }
2257
2303
2258 }
2304 }
2259
2305
2260 .select-index-number {
2306 .select-index-number {
2261 margin: 0 0 0 20px;
2307 margin: 0 0 0 20px;
2262 color: @grey3;
2308 color: @grey3;
2263 }
2309 }
2264
2310
2265 .search_activate {
2311 .search_activate {
2266 display: table-cell;
2312 display: table-cell;
2267 vertical-align: middle;
2313 vertical-align: middle;
2268
2314
2269 input, label{
2315 input, label{
2270 margin: 0;
2316 margin: 0;
2271 padding: 0;
2317 padding: 0;
2272 }
2318 }
2273
2319
2274 input{
2320 input{
2275 margin-left: @textmargin;
2321 margin-left: @textmargin;
2276 }
2322 }
2277
2323
2278 }
2324 }
2279 }
2325 }
2280
2326
2281 .browser-cur-rev{
2327 .browser-cur-rev{
2282 margin-bottom: @textmargin;
2328 margin-bottom: @textmargin;
2283 }
2329 }
2284
2330
2285 #node_filter_box_loading{
2331 #node_filter_box_loading{
2286 .info_text;
2332 .info_text;
2287 }
2333 }
2288
2334
2289 .browser-search {
2335 .browser-search {
2290 margin: -25px 0px 5px 0px;
2336 margin: -25px 0px 5px 0px;
2291 }
2337 }
2292
2338
2293 .files-quick-filter {
2339 .files-quick-filter {
2294 float: right;
2340 float: right;
2295 width: 180px;
2341 width: 180px;
2296 position: relative;
2342 position: relative;
2297 }
2343 }
2298
2344
2299 .files-filter-box {
2345 .files-filter-box {
2300 display: flex;
2346 display: flex;
2301 padding: 0px;
2347 padding: 0px;
2302 border-radius: 3px;
2348 border-radius: 3px;
2303 margin-bottom: 0;
2349 margin-bottom: 0;
2304
2350
2305 a {
2351 a {
2306 border: none !important;
2352 border: none !important;
2307 }
2353 }
2308
2354
2309 li {
2355 li {
2310 list-style-type: none
2356 list-style-type: none
2311 }
2357 }
2312 }
2358 }
2313
2359
2314 .files-filter-box-path {
2360 .files-filter-box-path {
2315 line-height: 33px;
2361 line-height: 33px;
2316 padding: 0;
2362 padding: 0;
2317 width: 20px;
2363 width: 20px;
2318 position: absolute;
2364 position: absolute;
2319 z-index: 11;
2365 z-index: 11;
2320 left: 5px;
2366 left: 5px;
2321 }
2367 }
2322
2368
2323 .files-filter-box-input {
2369 .files-filter-box-input {
2324 margin-right: 0;
2370 margin-right: 0;
2325
2371
2326 input {
2372 input {
2327 border: 1px solid @white;
2373 border: 1px solid @white;
2328 padding-left: 25px;
2374 padding-left: 25px;
2329 width: 145px;
2375 width: 145px;
2330
2376
2331 &:hover {
2377 &:hover {
2332 border-color: @grey6;
2378 border-color: @grey6;
2333 }
2379 }
2334
2380
2335 &:focus {
2381 &:focus {
2336 border-color: @grey5;
2382 border-color: @grey5;
2337 }
2383 }
2338 }
2384 }
2339 }
2385 }
2340
2386
2341 .browser-result{
2387 .browser-result{
2342 td a{
2388 td a{
2343 margin-left: 0.5em;
2389 margin-left: 0.5em;
2344 display: inline-block;
2390 display: inline-block;
2345
2391
2346 em {
2392 em {
2347 font-weight: @text-bold-weight;
2393 font-weight: @text-bold-weight;
2348 font-family: @text-bold;
2394 font-family: @text-bold;
2349 }
2395 }
2350 }
2396 }
2351 }
2397 }
2352
2398
2353 .browser-highlight{
2399 .browser-highlight{
2354 background-color: @grey5-alpha;
2400 background-color: @grey5-alpha;
2355 }
2401 }
2356
2402
2357
2403
2358 .edit-file-fieldset #location,
2404 .edit-file-fieldset #location,
2359 .edit-file-fieldset #filename {
2405 .edit-file-fieldset #filename {
2360 display: flex;
2406 display: flex;
2361 width: -moz-available; /* WebKit-based browsers will ignore this. */
2407 width: -moz-available; /* WebKit-based browsers will ignore this. */
2362 width: -webkit-fill-available; /* Mozilla-based browsers will ignore this. */
2408 width: -webkit-fill-available; /* Mozilla-based browsers will ignore this. */
2363 width: fill-available;
2409 width: fill-available;
2364 border: 0;
2410 border: 0;
2365 }
2411 }
2366
2412
2367 .path-items {
2413 .path-items {
2368 display: flex;
2414 display: flex;
2369 padding: 0;
2415 padding: 0;
2370 border: 1px solid #eeeeee;
2416 border: 1px solid #eeeeee;
2371 width: 100%;
2417 width: 100%;
2372 float: left;
2418 float: left;
2373
2419
2374 .breadcrumb-path {
2420 .breadcrumb-path {
2375 line-height: 30px;
2421 line-height: 30px;
2376 padding: 0 4px;
2422 padding: 0 4px;
2377 white-space: nowrap;
2423 white-space: nowrap;
2378 }
2424 }
2379
2425
2380 .location-path {
2426 .location-path {
2381 width: -moz-available; /* WebKit-based browsers will ignore this. */
2427 width: -moz-available; /* WebKit-based browsers will ignore this. */
2382 width: -webkit-fill-available; /* Mozilla-based browsers will ignore this. */
2428 width: -webkit-fill-available; /* Mozilla-based browsers will ignore this. */
2383 width: fill-available;
2429 width: fill-available;
2384
2430
2385 .file-name-input {
2431 .file-name-input {
2386 padding: 0.5em 0;
2432 padding: 0.5em 0;
2387 }
2433 }
2388
2434
2389 }
2435 }
2390
2436
2391 ul {
2437 ul {
2392 display: flex;
2438 display: flex;
2393 margin: 0;
2439 margin: 0;
2394 padding: 0;
2440 padding: 0;
2395 width: 100%;
2441 width: 100%;
2396 }
2442 }
2397
2443
2398 li {
2444 li {
2399 list-style-type: none;
2445 list-style-type: none;
2400 }
2446 }
2401
2447
2402 }
2448 }
2403
2449
2404 .editor-items {
2450 .editor-items {
2405 height: 40px;
2451 height: 40px;
2406 margin: 10px 0 -17px 10px;
2452 margin: 10px 0 -17px 10px;
2407
2453
2408 .editor-action {
2454 .editor-action {
2409 cursor: pointer;
2455 cursor: pointer;
2410 }
2456 }
2411
2457
2412 .editor-action.active {
2458 .editor-action.active {
2413 border-bottom: 2px solid #5C5C5C;
2459 border-bottom: 2px solid #5C5C5C;
2414 }
2460 }
2415
2461
2416 li {
2462 li {
2417 list-style-type: none;
2463 list-style-type: none;
2418 }
2464 }
2419 }
2465 }
2420
2466
2421 .edit-file-fieldset .message textarea {
2467 .edit-file-fieldset .message textarea {
2422 border: 1px solid #eeeeee;
2468 border: 1px solid #eeeeee;
2423 }
2469 }
2424
2470
2425 #files_data .codeblock {
2471 #files_data .codeblock {
2426 background-color: #F5F5F5;
2472 background-color: #F5F5F5;
2427 }
2473 }
2428
2474
2429 #editor_preview {
2475 #editor_preview {
2430 background: white;
2476 background: white;
2431 }
2477 }
2432
2478
2433 .show-editor {
2479 .show-editor {
2434 padding: 10px;
2480 padding: 10px;
2435 background-color: white;
2481 background-color: white;
2436
2482
2437 }
2483 }
2438
2484
2439 .show-preview {
2485 .show-preview {
2440 padding: 10px;
2486 padding: 10px;
2441 background-color: white;
2487 background-color: white;
2442 border-left: 1px solid #eeeeee;
2488 border-left: 1px solid #eeeeee;
2443 }
2489 }
2444 // quick filter
2490 // quick filter
2445 .grid-quick-filter {
2491 .grid-quick-filter {
2446 float: right;
2492 float: right;
2447 position: relative;
2493 position: relative;
2448 }
2494 }
2449
2495
2450 .grid-filter-box {
2496 .grid-filter-box {
2451 display: flex;
2497 display: flex;
2452 padding: 0px;
2498 padding: 0px;
2453 border-radius: 3px;
2499 border-radius: 3px;
2454 margin-bottom: 0;
2500 margin-bottom: 0;
2455
2501
2456 a {
2502 a {
2457 border: none !important;
2503 border: none !important;
2458 }
2504 }
2459
2505
2460 li {
2506 li {
2461 list-style-type: none
2507 list-style-type: none
2462 }
2508 }
2463 }
2509 }
2464
2510
2465 .grid-filter-box-icon {
2511 .grid-filter-box-icon {
2466 line-height: 33px;
2512 line-height: 33px;
2467 padding: 0;
2513 padding: 0;
2468 width: 20px;
2514 width: 20px;
2469 position: absolute;
2515 position: absolute;
2470 z-index: 11;
2516 z-index: 11;
2471 left: 5px;
2517 left: 5px;
2472 }
2518 }
2473
2519
2474 .grid-filter-box-input {
2520 .grid-filter-box-input {
2475 margin-right: 0;
2521 margin-right: 0;
2476
2522
2477 input {
2523 input {
2478 border: 1px solid @white;
2524 border: 1px solid @white;
2479 padding-left: 25px;
2525 padding-left: 25px;
2480 width: 145px;
2526 width: 145px;
2481
2527
2482 &:hover {
2528 &:hover {
2483 border-color: @grey6;
2529 border-color: @grey6;
2484 }
2530 }
2485
2531
2486 &:focus {
2532 &:focus {
2487 border-color: @grey5;
2533 border-color: @grey5;
2488 }
2534 }
2489 }
2535 }
2490 }
2536 }
2491
2537
2492
2538
2493
2539
2494 // Search
2540 // Search
2495
2541
2496 .search-form{
2542 .search-form{
2497 #q {
2543 #q {
2498 width: @search-form-width;
2544 width: @search-form-width;
2499 }
2545 }
2500 .fields{
2546 .fields{
2501 margin: 0 0 @space;
2547 margin: 0 0 @space;
2502 }
2548 }
2503
2549
2504 label{
2550 label{
2505 display: inline-block;
2551 display: inline-block;
2506 margin-right: @textmargin;
2552 margin-right: @textmargin;
2507 padding-top: 0.25em;
2553 padding-top: 0.25em;
2508 }
2554 }
2509
2555
2510
2556
2511 .results{
2557 .results{
2512 clear: both;
2558 clear: both;
2513 margin: 0 0 @padding;
2559 margin: 0 0 @padding;
2514 }
2560 }
2515
2561
2516 .search-tags {
2562 .search-tags {
2517 padding: 5px 0;
2563 padding: 5px 0;
2518 }
2564 }
2519 }
2565 }
2520
2566
2521 div.search-feedback-items {
2567 div.search-feedback-items {
2522 display: inline-block;
2568 display: inline-block;
2523 }
2569 }
2524
2570
2525 div.search-code-body {
2571 div.search-code-body {
2526 background-color: #ffffff; padding: 5px 0 5px 10px;
2572 background-color: #ffffff; padding: 5px 0 5px 10px;
2527 pre {
2573 pre {
2528 .match { background-color: #faffa6;}
2574 .match { background-color: #faffa6;}
2529 .break { display: block; width: 100%; background-color: #DDE7EF; color: #747474; }
2575 .break { display: block; width: 100%; background-color: #DDE7EF; color: #747474; }
2530 }
2576 }
2531 }
2577 }
2532
2578
2533 .expand_commit.search {
2579 .expand_commit.search {
2534 .show_more.open {
2580 .show_more.open {
2535 height: auto;
2581 height: auto;
2536 max-height: none;
2582 max-height: none;
2537 }
2583 }
2538 }
2584 }
2539
2585
2540 .search-results {
2586 .search-results {
2541
2587
2542 h2 {
2588 h2 {
2543 margin-bottom: 0;
2589 margin-bottom: 0;
2544 }
2590 }
2545 .codeblock {
2591 .codeblock {
2546 border: none;
2592 border: none;
2547 background: transparent;
2593 background: transparent;
2548 }
2594 }
2549
2595
2550 .codeblock-header {
2596 .codeblock-header {
2551 border: none;
2597 border: none;
2552 background: transparent;
2598 background: transparent;
2553 }
2599 }
2554
2600
2555 .code-body {
2601 .code-body {
2556 border: @border-thickness solid @grey6;
2602 border: @border-thickness solid @grey6;
2557 .border-radius(@border-radius);
2603 .border-radius(@border-radius);
2558 }
2604 }
2559
2605
2560 .td-commit {
2606 .td-commit {
2561 &:extend(pre);
2607 &:extend(pre);
2562 border-bottom: @border-thickness solid @border-default-color;
2608 border-bottom: @border-thickness solid @border-default-color;
2563 }
2609 }
2564
2610
2565 .message {
2611 .message {
2566 height: auto;
2612 height: auto;
2567 max-width: 350px;
2613 max-width: 350px;
2568 white-space: normal;
2614 white-space: normal;
2569 text-overflow: initial;
2615 text-overflow: initial;
2570 overflow: visible;
2616 overflow: visible;
2571
2617
2572 .match { background-color: #faffa6;}
2618 .match { background-color: #faffa6;}
2573 .break { background-color: #DDE7EF; width: 100%; color: #747474; display: block; }
2619 .break { background-color: #DDE7EF; width: 100%; color: #747474; display: block; }
2574 }
2620 }
2575
2621
2576 .path {
2622 .path {
2577 border-bottom: none !important;
2623 border-bottom: none !important;
2578 border-left: 1px solid @grey6 !important;
2624 border-left: 1px solid @grey6 !important;
2579 border-right: 1px solid @grey6 !important;
2625 border-right: 1px solid @grey6 !important;
2580 }
2626 }
2581 }
2627 }
2582
2628
2583 table.rctable td.td-search-results div {
2629 table.rctable td.td-search-results div {
2584 max-width: 100%;
2630 max-width: 100%;
2585 }
2631 }
2586
2632
2587 #tip-box, .tip-box{
2633 #tip-box, .tip-box{
2588 padding: @menupadding/2;
2634 padding: @menupadding/2;
2589 display: block;
2635 display: block;
2590 border: @border-thickness solid @border-highlight-color;
2636 border: @border-thickness solid @border-highlight-color;
2591 .border-radius(@border-radius);
2637 .border-radius(@border-radius);
2592 background-color: white;
2638 background-color: white;
2593 z-index: 99;
2639 z-index: 99;
2594 white-space: pre-wrap;
2640 white-space: pre-wrap;
2595 }
2641 }
2596
2642
2597 #linktt {
2643 #linktt {
2598 width: 79px;
2644 width: 79px;
2599 }
2645 }
2600
2646
2601 #help_kb .modal-content{
2647 #help_kb .modal-content{
2602 max-width: 750px;
2648 max-width: 750px;
2603 margin: 10% auto;
2649 margin: 10% auto;
2604
2650
2605 table{
2651 table{
2606 td,th{
2652 td,th{
2607 border-bottom: none;
2653 border-bottom: none;
2608 line-height: 2.5em;
2654 line-height: 2.5em;
2609 }
2655 }
2610 th{
2656 th{
2611 padding-bottom: @textmargin/2;
2657 padding-bottom: @textmargin/2;
2612 }
2658 }
2613 td.keys{
2659 td.keys{
2614 text-align: center;
2660 text-align: center;
2615 }
2661 }
2616 }
2662 }
2617
2663
2618 .block-left{
2664 .block-left{
2619 width: 45%;
2665 width: 45%;
2620 margin-right: 5%;
2666 margin-right: 5%;
2621 }
2667 }
2622 .modal-footer{
2668 .modal-footer{
2623 clear: both;
2669 clear: both;
2624 }
2670 }
2625 .key.tag{
2671 .key.tag{
2626 padding: 0.5em;
2672 padding: 0.5em;
2627 background-color: @rcblue;
2673 background-color: @rcblue;
2628 color: white;
2674 color: white;
2629 border-color: @rcblue;
2675 border-color: @rcblue;
2630 .box-shadow(none);
2676 .box-shadow(none);
2631 }
2677 }
2632 }
2678 }
2633
2679
2634
2680
2635
2681
2636 //--- IMPORTS FOR REFACTORED STYLES ------------------//
2682 //--- IMPORTS FOR REFACTORED STYLES ------------------//
2637
2683
2638 @import 'statistics-graph';
2684 @import 'statistics-graph';
2639 @import 'tables';
2685 @import 'tables';
2640 @import 'forms';
2686 @import 'forms';
2641 @import 'diff';
2687 @import 'diff';
2642 @import 'summary';
2688 @import 'summary';
2643 @import 'navigation';
2689 @import 'navigation';
2644
2690
2645 //--- SHOW/HIDE SECTIONS --//
2691 //--- SHOW/HIDE SECTIONS --//
2646
2692
2647 .btn-collapse {
2693 .btn-collapse {
2648 float: right;
2694 float: right;
2649 text-align: right;
2695 text-align: right;
2650 font-family: @text-light;
2696 font-family: @text-light;
2651 font-size: @basefontsize;
2697 font-size: @basefontsize;
2652 cursor: pointer;
2698 cursor: pointer;
2653 border: none;
2699 border: none;
2654 color: @rcblue;
2700 color: @rcblue;
2655 }
2701 }
2656
2702
2657 table.rctable,
2703 table.rctable,
2658 table.dataTable {
2704 table.dataTable {
2659 .btn-collapse {
2705 .btn-collapse {
2660 float: right;
2706 float: right;
2661 text-align: right;
2707 text-align: right;
2662 }
2708 }
2663 }
2709 }
2664
2710
2665 table.rctable {
2711 table.rctable {
2666 &.permissions {
2712 &.permissions {
2667
2713
2668 th.td-owner {
2714 th.td-owner {
2669 padding: 0;
2715 padding: 0;
2670 }
2716 }
2671
2717
2672 th {
2718 th {
2673 font-weight: normal;
2719 font-weight: normal;
2674 padding: 0 5px;
2720 padding: 0 5px;
2675 }
2721 }
2676
2722
2677 }
2723 }
2678 }
2724 }
2679
2725
2680
2726
2681 // TODO: johbo: Fix for IE10, this avoids that we see a border
2727 // TODO: johbo: Fix for IE10, this avoids that we see a border
2682 // and padding around checkboxes and radio boxes. Move to the right place,
2728 // and padding around checkboxes and radio boxes. Move to the right place,
2683 // or better: Remove this once we did the form refactoring.
2729 // or better: Remove this once we did the form refactoring.
2684 input[type=checkbox],
2730 input[type=checkbox],
2685 input[type=radio] {
2731 input[type=radio] {
2686 padding: 0;
2732 padding: 0;
2687 border: none;
2733 border: none;
2688 }
2734 }
2689
2735
2690 .toggle-ajax-spinner{
2736 .toggle-ajax-spinner{
2691 height: 16px;
2737 height: 16px;
2692 width: 16px;
2738 width: 16px;
2693 }
2739 }
2694
2740
2695
2741
2696 .markup-form .clearfix {
2742 .markup-form .clearfix {
2697 .border-radius(@border-radius);
2743 .border-radius(@border-radius);
2698 margin: 0px;
2744 margin: 0px;
2699 }
2745 }
2700
2746
2701 .markup-form-area {
2747 .markup-form-area {
2702 padding: 8px 12px;
2748 padding: 8px 12px;
2703 border: 1px solid @grey4;
2749 border: 1px solid @grey4;
2704 .border-radius(@border-radius);
2750 .border-radius(@border-radius);
2705 }
2751 }
2706
2752
2707 .markup-form-area-header .nav-links {
2753 .markup-form-area-header .nav-links {
2708 display: flex;
2754 display: flex;
2709 flex-flow: row wrap;
2755 flex-flow: row wrap;
2710 -webkit-flex-flow: row wrap;
2756 -webkit-flex-flow: row wrap;
2711 width: 100%;
2757 width: 100%;
2712 }
2758 }
2713
2759
2714 .markup-form-area-footer {
2760 .markup-form-area-footer {
2715 display: flex;
2761 display: flex;
2716 }
2762 }
2717
2763
2718 .markup-form-area-footer .toolbar {
2764 .markup-form-area-footer .toolbar {
2719
2765
2720 }
2766 }
2721
2767
2722 // markup Form
2768 // markup Form
2723 div.markup-form {
2769 div.markup-form {
2724 margin-top: 20px;
2770 margin-top: 20px;
2725 }
2771 }
2726
2772
2727 .markup-form strong {
2773 .markup-form strong {
2728 display: block;
2774 display: block;
2729 margin-bottom: 15px;
2775 margin-bottom: 15px;
2730 }
2776 }
2731
2777
2732 .markup-form textarea {
2778 .markup-form textarea {
2733 width: 100%;
2779 width: 100%;
2734 height: 100px;
2780 height: 100px;
2735 font-family: @text-monospace;
2781 font-family: @text-monospace;
2736 }
2782 }
2737
2783
2738 form.markup-form {
2784 form.markup-form {
2739 margin-top: 10px;
2785 margin-top: 10px;
2740 margin-left: 10px;
2786 margin-left: 10px;
2741 }
2787 }
2742
2788
2743 .markup-form .comment-block-ta,
2789 .markup-form .comment-block-ta,
2744 .markup-form .preview-box {
2790 .markup-form .preview-box {
2745 .border-radius(@border-radius);
2791 .border-radius(@border-radius);
2746 .box-sizing(border-box);
2792 .box-sizing(border-box);
2747 background-color: white;
2793 background-color: white;
2748 }
2794 }
2749
2795
2750 .markup-form .preview-box.unloaded {
2796 .markup-form .preview-box.unloaded {
2751 height: 50px;
2797 height: 50px;
2752 text-align: center;
2798 text-align: center;
2753 padding: 20px;
2799 padding: 20px;
2754 background-color: white;
2800 background-color: white;
2755 }
2801 }
2756
2802
2757
2803
2758 .dropzone-wrapper {
2804 .dropzone-wrapper {
2759 border: 1px solid @grey5;
2805 border: 1px solid @grey5;
2760 padding: 20px;
2806 padding: 20px;
2761 }
2807 }
2762
2808
2763 .dropzone,
2809 .dropzone,
2764 .dropzone-pure {
2810 .dropzone-pure {
2765 border: 2px dashed @grey5;
2811 border: 2px dashed @grey5;
2766 border-radius: 5px;
2812 border-radius: 5px;
2767 background: white;
2813 background: white;
2768 min-height: 200px;
2814 min-height: 200px;
2769 padding: 54px;
2815 padding: 54px;
2770
2816
2771 .dz-message {
2817 .dz-message {
2772 font-weight: 700;
2818 font-weight: 700;
2773 text-align: center;
2819 text-align: center;
2774 margin: 2em 0;
2820 margin: 2em 0;
2775 }
2821 }
2776
2822
2777 }
2823 }
2778
2824
2779 .dz-preview {
2825 .dz-preview {
2780 margin: 10px 0 !important;
2826 margin: 10px 0 !important;
2781 position: relative;
2827 position: relative;
2782 vertical-align: top;
2828 vertical-align: top;
2783 padding: 10px;
2829 padding: 10px;
2784 border-bottom: 1px solid @grey5;
2830 border-bottom: 1px solid @grey5;
2785 }
2831 }
2786
2832
2787 .dz-filename {
2833 .dz-filename {
2788 font-weight: 700;
2834 font-weight: 700;
2789 float:left;
2835 float:left;
2790 }
2836 }
2791
2837
2792 .dz-sending {
2838 .dz-sending {
2793 float: right;
2839 float: right;
2794 }
2840 }
2795
2841
2796 .dz-response {
2842 .dz-response {
2797 clear:both
2843 clear:both
2798 }
2844 }
2799
2845
2800 .dz-filename-size {
2846 .dz-filename-size {
2801 float:right
2847 float:right
2802 }
2848 }
2803
2849
2804 .dz-error-message {
2850 .dz-error-message {
2805 color: @alert2;
2851 color: @alert2;
2806 padding-top: 10px;
2852 padding-top: 10px;
2807 clear: both;
2853 clear: both;
2808 }
2854 }
@@ -1,275 +1,289 b''
1 @font-face {
1 @font-face {
2 font-family: 'rcicons';
2 font-family: 'rcicons';
3
3
4 src: url('../fonts/RCIcons/rcicons.eot?92789106');
4 src: url('../fonts/RCIcons/rcicons.eot?44705679');
5 src: url('../fonts/RCIcons/rcicons.eot?92789106#iefix') format('embedded-opentype'),
5 src: url('../fonts/RCIcons/rcicons.eot?44705679#iefix') format('embedded-opentype'),
6 url('../fonts/RCIcons/rcicons.woff2?92789106') format('woff2'),
6 url('../fonts/RCIcons/rcicons.woff2?44705679') format('woff2'),
7 url('../fonts/RCIcons/rcicons.woff?92789106') format('woff'),
7 url('../fonts/RCIcons/rcicons.woff?44705679') format('woff'),
8 url('../fonts/RCIcons/rcicons.ttf?92789106') format('truetype'),
8 url('../fonts/RCIcons/rcicons.ttf?44705679') format('truetype'),
9 url('../fonts/RCIcons/rcicons.svg?92789106#rcicons') format('svg');
9 url('../fonts/RCIcons/rcicons.svg?44705679#rcicons') format('svg');
10
10
11 font-weight: normal;
11 font-weight: normal;
12 font-style: normal;
12 font-style: normal;
13 }
13 }
14 /* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */
14 /* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */
15 /* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */
15 /* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */
16 /*
16 /*
17 @media screen and (-webkit-min-device-pixel-ratio:0) {
17 @media screen and (-webkit-min-device-pixel-ratio:0) {
18 @font-face {
18 @font-face {
19 font-family: 'rcicons';
19 font-family: 'rcicons';
20 src: url('../fonts/RCIcons/rcicons.svg?74666722#rcicons') format('svg');
20 src: url('../fonts/RCIcons/rcicons.svg?74666722#rcicons') format('svg');
21 }
21 }
22 }
22 }
23 */
23 */
24
24
25 [class^="icon-"]:before, [class*=" icon-"]:before {
25 [class^="icon-"]:before, [class*=" icon-"]:before {
26 font-family: "rcicons";
26 font-family: "rcicons";
27 font-style: normal;
27 font-style: normal;
28 font-weight: normal;
28 font-weight: normal;
29 speak: none;
29 speak: none;
30
30
31 display: inline-block;
31 display: inline-block;
32 text-decoration: inherit;
32 text-decoration: inherit;
33 width: 1em;
33 width: 1em;
34 margin-right: .2em;
34 margin-right: .2em;
35 text-align: center;
35 text-align: center;
36 /* opacity: .8; */
36 /* opacity: .8; */
37
37
38 /* For safety - reset parent styles, that can break glyph codes*/
38 /* For safety - reset parent styles, that can break glyph codes*/
39 font-variant: normal;
39 font-variant: normal;
40 text-transform: none;
40 text-transform: none;
41
41
42 /* fix buttons height, for twitter bootstrap */
42 /* fix buttons height, for twitter bootstrap */
43 line-height: 1em;
43 line-height: 1em;
44
44
45 /* Animation center compensation - margins should be symmetric */
45 /* Animation center compensation - margins should be symmetric */
46 /* remove if not needed */
46 /* remove if not needed */
47 margin-left: .2em;
47 margin-left: .2em;
48
48
49 /* you can be more comfortable with increased icons size */
49 /* you can be more comfortable with increased icons size */
50 /* font-size: 120%; */
50 /* font-size: 120%; */
51
51
52 /* Font smoothing. That was taken from TWBS */
52 /* Font smoothing. That was taken from TWBS */
53 -webkit-font-smoothing: antialiased;
53 -webkit-font-smoothing: antialiased;
54 -moz-osx-font-smoothing: grayscale;
54 -moz-osx-font-smoothing: grayscale;
55
55
56 /* Uncomment for 3D effect */
56 /* Uncomment for 3D effect */
57 /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */
57 /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */
58 }
58 }
59
59
60 .animate-spin {
60 .animate-spin {
61 -moz-animation: spin 2s infinite linear;
61 -moz-animation: spin 2s infinite linear;
62 -o-animation: spin 2s infinite linear;
62 -o-animation: spin 2s infinite linear;
63 -webkit-animation: spin 2s infinite linear;
63 -webkit-animation: spin 2s infinite linear;
64 animation: spin 2s infinite linear;
64 animation: spin 2s infinite linear;
65 display: inline-block;
65 display: inline-block;
66 }
66 }
67 @-moz-keyframes spin {
67 @-moz-keyframes spin {
68 0% {
68 0% {
69 -moz-transform: rotate(0deg);
69 -moz-transform: rotate(0deg);
70 -o-transform: rotate(0deg);
70 -o-transform: rotate(0deg);
71 -webkit-transform: rotate(0deg);
71 -webkit-transform: rotate(0deg);
72 transform: rotate(0deg);
72 transform: rotate(0deg);
73 }
73 }
74
74
75 100% {
75 100% {
76 -moz-transform: rotate(359deg);
76 -moz-transform: rotate(359deg);
77 -o-transform: rotate(359deg);
77 -o-transform: rotate(359deg);
78 -webkit-transform: rotate(359deg);
78 -webkit-transform: rotate(359deg);
79 transform: rotate(359deg);
79 transform: rotate(359deg);
80 }
80 }
81 }
81 }
82 @-webkit-keyframes spin {
82 @-webkit-keyframes spin {
83 0% {
83 0% {
84 -moz-transform: rotate(0deg);
84 -moz-transform: rotate(0deg);
85 -o-transform: rotate(0deg);
85 -o-transform: rotate(0deg);
86 -webkit-transform: rotate(0deg);
86 -webkit-transform: rotate(0deg);
87 transform: rotate(0deg);
87 transform: rotate(0deg);
88 }
88 }
89
89
90 100% {
90 100% {
91 -moz-transform: rotate(359deg);
91 -moz-transform: rotate(359deg);
92 -o-transform: rotate(359deg);
92 -o-transform: rotate(359deg);
93 -webkit-transform: rotate(359deg);
93 -webkit-transform: rotate(359deg);
94 transform: rotate(359deg);
94 transform: rotate(359deg);
95 }
95 }
96 }
96 }
97 @-o-keyframes spin {
97 @-o-keyframes spin {
98 0% {
98 0% {
99 -moz-transform: rotate(0deg);
99 -moz-transform: rotate(0deg);
100 -o-transform: rotate(0deg);
100 -o-transform: rotate(0deg);
101 -webkit-transform: rotate(0deg);
101 -webkit-transform: rotate(0deg);
102 transform: rotate(0deg);
102 transform: rotate(0deg);
103 }
103 }
104
104
105 100% {
105 100% {
106 -moz-transform: rotate(359deg);
106 -moz-transform: rotate(359deg);
107 -o-transform: rotate(359deg);
107 -o-transform: rotate(359deg);
108 -webkit-transform: rotate(359deg);
108 -webkit-transform: rotate(359deg);
109 transform: rotate(359deg);
109 transform: rotate(359deg);
110 }
110 }
111 }
111 }
112 @-ms-keyframes spin {
112 @-ms-keyframes spin {
113 0% {
113 0% {
114 -moz-transform: rotate(0deg);
114 -moz-transform: rotate(0deg);
115 -o-transform: rotate(0deg);
115 -o-transform: rotate(0deg);
116 -webkit-transform: rotate(0deg);
116 -webkit-transform: rotate(0deg);
117 transform: rotate(0deg);
117 transform: rotate(0deg);
118 }
118 }
119
119
120 100% {
120 100% {
121 -moz-transform: rotate(359deg);
121 -moz-transform: rotate(359deg);
122 -o-transform: rotate(359deg);
122 -o-transform: rotate(359deg);
123 -webkit-transform: rotate(359deg);
123 -webkit-transform: rotate(359deg);
124 transform: rotate(359deg);
124 transform: rotate(359deg);
125 }
125 }
126 }
126 }
127 @keyframes spin {
127 @keyframes spin {
128 0% {
128 0% {
129 -moz-transform: rotate(0deg);
129 -moz-transform: rotate(0deg);
130 -o-transform: rotate(0deg);
130 -o-transform: rotate(0deg);
131 -webkit-transform: rotate(0deg);
131 -webkit-transform: rotate(0deg);
132 transform: rotate(0deg);
132 transform: rotate(0deg);
133 }
133 }
134
134
135 100% {
135 100% {
136 -moz-transform: rotate(359deg);
136 -moz-transform: rotate(359deg);
137 -o-transform: rotate(359deg);
137 -o-transform: rotate(359deg);
138 -webkit-transform: rotate(359deg);
138 -webkit-transform: rotate(359deg);
139 transform: rotate(359deg);
139 transform: rotate(359deg);
140 }
140 }
141 }
141 }
142
142
143
143
144
144
145 .icon-no-margin::before {
145 .icon-no-margin::before {
146 margin: 0;
146 margin: 0;
147
147
148 }
148 }
149 // -- ICON CLASSES -- //
149 // -- ICON CLASSES -- //
150 // sorter = lambda s: '\n'.join(sorted(s.splitlines()))
150 // sorter = lambda s: '\n'.join(sorted(s.splitlines()))
151
151
152 .icon-delete:before { content: '\e800'; } /* '' */
152 .icon-delete:before { content: '\e800'; } /* '' */
153 .icon-ok:before { content: '\e801'; } /* '' */
153 .icon-ok:before { content: '\e801'; } /* '' */
154 .icon-comment:before { content: '\e802'; } /* '' */
154 .icon-comment:before { content: '\e802'; } /* '' */
155 .icon-bookmark:before { content: '\e803'; } /* '' */
155 .icon-bookmark:before { content: '\e803'; } /* '' */
156 .icon-branch:before { content: '\e804'; } /* '' */
156 .icon-branch:before { content: '\e804'; } /* '' */
157 .icon-tag:before { content: '\e805'; } /* '' */
157 .icon-tag:before { content: '\e805'; } /* '' */
158 .icon-lock:before { content: '\e806'; } /* '' */
158 .icon-lock:before { content: '\e806'; } /* '' */
159 .icon-unlock:before { content: '\e807'; } /* '' */
159 .icon-unlock:before { content: '\e807'; } /* '' */
160 .icon-feed:before { content: '\e808'; } /* '' */
160 .icon-feed:before { content: '\e808'; } /* '' */
161 .icon-left:before { content: '\e809'; } /* '' */
161 .icon-left:before { content: '\e809'; } /* '' */
162 .icon-right:before { content: '\e80a'; } /* '' */
162 .icon-right:before { content: '\e80a'; } /* '' */
163 .icon-down:before { content: '\e80b'; } /* '' */
163 .icon-down:before { content: '\e80b'; } /* '' */
164 .icon-folder:before { content: '\e80c'; } /* '' */
164 .icon-folder:before { content: '\e80c'; } /* '' */
165 .icon-folder-open:before { content: '\e80d'; } /* '' */
165 .icon-folder-open:before { content: '\e80d'; } /* '' */
166 .icon-folder-empty:before { content: '\f114'; } /* '' */
167 .icon-folder-open-empty:before { content: '\f115'; } /* '' */
168 .icon-trash-empty:before { content: '\e80e'; } /* '' */
166 .icon-trash-empty:before { content: '\e80e'; } /* '' */
169 .icon-group:before { content: '\e80f'; } /* '' */
167 .icon-group:before { content: '\e80f'; } /* '' */
170 .icon-remove:before { content: '\e810'; } /* '' */
168 .icon-remove:before { content: '\e810'; } /* '' */
171 .icon-fork:before { content: '\e811'; } /* '' */
169 .icon-fork:before { content: '\e811'; } /* '' */
172 .icon-more:before { content: '\e812'; } /* '' */
170 .icon-more:before { content: '\e812'; } /* '' */
173 .icon-search:before { content: '\e813'; } /* '' */
171 .icon-search:before { content: '\e813'; } /* '' */
174 .icon-scissors:before { content: '\e814'; } /* '' */
172 .icon-scissors:before { content: '\e814'; } /* '' */
175 .icon-download:before { content: '\e815'; } /* '' */
173 .icon-download:before { content: '\e815'; } /* '' */
176 .icon-doc:before { content: '\e816'; } /* '' */
174 .icon-doc:before { content: '\e816'; } /* '' */
177 .icon-cog:before { content: '\e817'; } /* '' */
175 .icon-cog:before { content: '\e817'; } /* '' */
178 .icon-cog-alt:before { content: '\e818'; } /* '' */
176 .icon-cog-alt:before { content: '\e818'; } /* '' */
179 .icon-eye:before { content: '\e819'; } /* '' */
177 .icon-eye:before { content: '\e819'; } /* '' */
180 .icon-eye-off:before { content: '\e81a'; } /* '' */
178 .icon-eye-off:before { content: '\e81a'; } /* '' */
181 .icon-cancel-circled2:before { content: '\e81b'; } /* '' */
179 .icon-cancel-circled2:before { content: '\e81b'; } /* '' */
182 .icon-cancel-circled:before { content: '\e81c'; } /* '' */
180 .icon-cancel-circled:before { content: '\e81c'; } /* '' */
183 .icon-plus:before { content: '\e81d'; } /* '' */
181 .icon-plus:before { content: '\e81d'; } /* '' */
184 .icon-plus-circled:before { content: '\e81e'; } /* '' */
182 .icon-plus-circled:before { content: '\e81e'; } /* '' */
185 .icon-minus-circled:before { content: '\e81f'; } /* '' */
183 .icon-minus-circled:before { content: '\e81f'; } /* '' */
186 .icon-minus:before { content: '\e820'; } /* '' */
184 .icon-minus:before { content: '\e820'; } /* '' */
187 .icon-info-circled:before { content: '\e821'; } /* '' */
185 .icon-info-circled:before { content: '\e821'; } /* '' */
188 .icon-upload:before { content: '\e822'; } /* '' */
186 .icon-upload:before { content: '\e822'; } /* '' */
189 .icon-home:before { content: '\e823'; } /* '' */
187 .icon-home:before { content: '\e823'; } /* '' */
188 .icon-flag-filled:before { content: '\e824'; } /* '' */
190 .icon-git:before { content: '\e82a'; } /* '' */
189 .icon-git:before { content: '\e82a'; } /* '' */
191 .icon-hg:before { content: '\e82d'; } /* '' */
190 .icon-hg:before { content: '\e82d'; } /* '' */
192 .icon-svn:before { content: '\e82e'; } /* '' */
191 .icon-svn:before { content: '\e82e'; } /* '' */
193 .icon-comment-add:before { content: '\e82f'; } /* '' */
192 .icon-comment-add:before { content: '\e82f'; } /* '' */
194 .icon-comment-toggle:before { content: '\e830'; } /* '' */
193 .icon-comment-toggle:before { content: '\e830'; } /* '' */
195 .icon-rhodecode:before { content: '\e831'; } /* '' */
194 .icon-rhodecode:before { content: '\e831'; } /* '' */
196 .icon-up:before { content: '\e832'; } /* '' */
195 .icon-up:before { content: '\e832'; } /* '' */
197 .icon-merge:before { content: '\e833'; } /* '' */
196 .icon-merge:before { content: '\e833'; } /* '' */
197 .icon-spin-alt:before { content: '\e834'; } /* '' */
198 .icon-spin:before { content: '\e838'; } /* '' */
198 .icon-docs:before { content: '\f0c5'; } /* '' */
199 .icon-docs:before { content: '\f0c5'; } /* '' */
199 .icon-menu:before { content: '\f0c9'; } /* '' */
200 .icon-menu:before { content: '\f0c9'; } /* '' */
201 .icon-sort:before { content: '\f0dc'; } /* '' */
200 .icon-paste:before { content: '\f0ea'; } /* '' */
202 .icon-paste:before { content: '\f0ea'; } /* '' */
201 .icon-doc-text:before { content: '\f0f6'; } /* '' */
203 .icon-doc-text:before { content: '\f0f6'; } /* '' */
202 .icon-plus-squared:before { content: '\f0fe'; } /* '' */
204 .icon-plus-squared:before { content: '\f0fe'; } /* '' */
205 .icon-angle-left:before { content: '\f104'; } /* '' */
206 .icon-angle-right:before { content: '\f105'; } /* '' */
207 .icon-angle-up:before { content: '\f106'; } /* '' */
208 .icon-angle-down:before { content: '\f107'; } /* '' */
209 .icon-circle-empty:before { content: '\f10c'; } /* '' */
210 .icon-circle:before { content: '\f111'; } /* '' */
211 .icon-folder-empty:before { content: '\f114'; } /* '' */
212 .icon-folder-open-empty:before { content: '\f115'; } /* '' */
213 .icon-code:before { content: '\f121'; } /* '' */
214 .icon-info:before { content: '\f129'; } /* '' */
203 .icon-minus-squared:before { content: '\f146'; } /* '' */
215 .icon-minus-squared:before { content: '\f146'; } /* '' */
204 .icon-minus-squared-alt:before { content: '\f147'; } /* '' */
216 .icon-minus-squared-alt:before { content: '\f147'; } /* '' */
205 .icon-doc-inv:before { content: '\f15b'; } /* '' */
217 .icon-doc-inv:before { content: '\f15b'; } /* '' */
206 .icon-doc-text-inv:before { content: '\f15c'; } /* '' */
218 .icon-doc-text-inv:before { content: '\f15c'; } /* '' */
207 .icon-plus-squared-alt:before { content: '\f196'; } /* '' */
219 .icon-plus-squared-alt:before { content: '\f196'; } /* '' */
208 .icon-file-code:before { content: '\f1c9'; } /* '' */
220 .icon-file-code:before { content: '\f1c9'; } /* '' */
209 .icon-history:before { content: '\f1da'; } /* '' */
221 .icon-history:before { content: '\f1da'; } /* '' */
222 .icon-circle-thin:before { content: '\f1db'; } /* '' */
210 .icon-sliders:before { content: '\f1de'; } /* '' */
223 .icon-sliders:before { content: '\f1de'; } /* '' */
211 .icon-trash:before { content: '\f1f8'; } /* '' */
224 .icon-trash:before { content: '\f1f8'; } /* '' */
212 .icon-spin-alt:before { content: '\e834'; } /* '' */
213 .icon-spin:before { content: '\e838'; } /* '' */
214
225
215
226
216 // MERGED ICONS BASED ON CURRENT ONES
227 // MERGED ICONS BASED ON CURRENT ONES
217 .icon-repo-group:before { &:extend(.icon-folder-open:before); }
228 .icon-repo-group:before { &:extend(.icon-folder-open:before); }
218 .icon-repo-private:before { &:extend(.icon-lock:before); }
229 .icon-repo-private:before { &:extend(.icon-lock:before); }
219 .icon-repo-lock:before { &:extend(.icon-lock:before); }
230 .icon-repo-lock:before { &:extend(.icon-lock:before); }
220 .icon-unlock-alt:before { &:extend(.icon-unlock:before); }
231 .icon-unlock-alt:before { &:extend(.icon-unlock:before); }
221 .icon-repo-unlock:before { &:extend(.icon-unlock:before); }
232 .icon-repo-unlock:before { &:extend(.icon-unlock:before); }
222 .icon-repo-public:before { &:extend(.icon-unlock:before); }
233 .icon-repo-public:before { &:extend(.icon-unlock:before); }
223 .icon-rss-sign:before { &:extend(.icon-feed:before); }
234 .icon-rss-sign:before { &:extend(.icon-feed:before); }
224 .icon-code-fork:before { &:extend(.icon-fork:before); }
235 .icon-code-fork:before { &:extend(.icon-fork:before); }
225 .icon-arrow_up:before { &:extend(.icon-up:before); }
236 .icon-arrow_up:before { &:extend(.icon-up:before); }
226 .icon-file:before { &:extend(.icon-file-code:before); }
237 .icon-file:before { &:extend(.icon-file-code:before); }
227 .icon-file-text:before { &:extend(.icon-file-code:before); }
238 .icon-file-text:before { &:extend(.icon-file-code:before); }
228 .icon-directory:before { &:extend(.icon-folder:before); }
239 .icon-directory:before { &:extend(.icon-folder:before); }
229 .icon-more-linked:before { &:extend(.icon-more:before); }
240 .icon-more-linked:before { &:extend(.icon-more:before); }
230 .icon-clipboard:before { &:extend(.icon-docs:before); }
241 .icon-clipboard:before { &:extend(.icon-docs:before); }
231 .icon-copy:before { &:extend(.icon-docs:before); }
242 .icon-copy:before { &:extend(.icon-docs:before); }
232 .icon-true:before { &:extend(.icon-ok:before); }
243 .icon-true:before { &:extend(.icon-ok:before); }
233 .icon-false:before { &:extend(.icon-delete:before); }
244 .icon-false:before { &:extend(.icon-delete:before); }
234 .icon-expand-linked:before { &:extend(.icon-down:before); }
245 .icon-expand-linked:before { &:extend(.icon-down:before); }
235 .icon-pr-merge-fail:before { &:extend(.icon-delete:before); }
246 .icon-pr-merge-fail:before { &:extend(.icon-delete:before); }
247 .icon-wide-mode:before { &:extend(.icon-sort:before); }
248 .icon-flag-filled-red:before { &:extend(.icon-flag-filled:before); }
236
249
237 // TRANSFORM
250 // TRANSFORM
238
239 .icon-merge:before {transform: rotate(180deg);}
251 .icon-merge:before {transform: rotate(180deg);}
252 .icon-wide-mode:before {transform: rotate(90deg);}
240
253
241 // -- END ICON CLASSES -- //
254 // -- END ICON CLASSES -- //
242
255
243
256
244 //--- ICONS STYLING ------------------//
257 //--- ICONS STYLING ------------------//
245
258
246 .icon-git { color: @color4 !important; }
259 .icon-git { color: @color4 !important; }
247 .icon-hg { color: @color8 !important; }
260 .icon-hg { color: @color8 !important; }
248 .icon-svn { color: @color1 !important; }
261 .icon-svn { color: @color1 !important; }
249 .icon-git-inv { color: @color4 !important; }
262 .icon-git-inv { color: @color4 !important; }
250 .icon-hg-inv { color: @color8 !important; }
263 .icon-hg-inv { color: @color8 !important; }
251 .icon-svn-inv { color: @color1 !important; }
264 .icon-svn-inv { color: @color1 !important; }
252 .icon-repo-lock { color: #FF0000; }
265 .icon-repo-lock { color: #FF0000; }
253 .icon-repo-unlock { color: #FF0000; }
266 .icon-repo-unlock { color: #FF0000; }
254 .icon-false { color: @grey5 }
267 .icon-false { color: @grey5 }
255 .icon-expand-linked { cursor: pointer; color: @grey3; font-size: 14px }
268 .icon-expand-linked { cursor: pointer; color: @grey3; font-size: 14px }
256 .icon-more-linked { cursor: pointer; color: @grey3 }
269 .icon-more-linked { cursor: pointer; color: @grey3 }
270 .icon-flag-filled-red { color: @color5 !important; }
257
271
258 .repo-switcher-dropdown .select2-result-label {
272 .repo-switcher-dropdown .select2-result-label {
259 .icon-git:before {
273 .icon-git:before {
260 &:extend(.icon-git-transparent:before);
274 &:extend(.icon-git-transparent:before);
261 }
275 }
262 .icon-hg:before {
276 .icon-hg:before {
263 &:extend(.icon-hg-transparent:before);
277 &:extend(.icon-hg-transparent:before);
264 color: @alert4;
278 color: @alert4;
265 }
279 }
266 .icon-svn:before {
280 .icon-svn:before {
267 &:extend(.icon-svn-transparent:before);
281 &:extend(.icon-svn-transparent:before);
268 }
282 }
269 }
283 }
270
284
271 .icon-user-group:before {
285 .icon-user-group:before {
272 &:extend(.icon-group:before);
286 &:extend(.icon-group:before);
273 margin: 0;
287 margin: 0;
274 font-size: 16px;
288 font-size: 16px;
275 }
289 }
@@ -1,240 +1,242 b''
1 // select2.less
1 // select2.less
2 // For use in RhodeCode application drop down select boxes;
2 // For use in RhodeCode application drop down select boxes;
3 // see style guide documentation for guidelines.
3 // see style guide documentation for guidelines.
4
4
5
5
6 // SELECT2 DROPDOWN MENUS
6 // SELECT2 DROPDOWN MENUS
7
7
8 //Select2 Dropdown
8 //Select2 Dropdown
9 .select2-results{
9 .select2-results{
10 .box-sizing(border-box);
10 .box-sizing(border-box);
11 overflow-y: scroll;
11 overflow-y: scroll;
12 }
12 }
13
13
14 .select2-container{margin: 0; position: relative; display: inline-block; zoom: 1;}
14 .select2-container{margin: 0; position: relative; display: inline-block; zoom: 1;}
15 .select2-container,
15 .select2-container,
16 .select2-drop,
16 .select2-drop,
17 .select2-search,
17 .select2-search,
18 .select2-search input {.box-sizing(border-box);}
18 .select2-search input {.box-sizing(border-box);}
19 .select2-container .select2-choice{display:block; line-height:1em; -webkit-touch-callout:none;-moz-user-select:none;-ms-user-select:none;user-select:none; }
19 .select2-container .select2-choice{display:block; line-height:1em; -webkit-touch-callout:none;-moz-user-select:none;-ms-user-select:none;user-select:none; }
20 .main .select2-container .select2-choice { background-color: white; box-shadow: @button-shadow;}
20 .main .select2-container .select2-choice { background-color: white; box-shadow: @button-shadow;}
21 .select2-container .select2-choice abbr { display: none; width: 12px; height: 12px; position: absolute; right: 24px; top: 8px; font-size: 1px; text-decoration: none; border: 0; background: url('../images/select2.png') right top no-repeat; cursor: pointer; outline: 0; }
21 .select2-container .select2-choice abbr { display: none; width: 12px; height: 12px; position: absolute; right: 24px; top: 8px; font-size: 1px; text-decoration: none; border: 0; background: url('../images/select2.png') right top no-repeat; cursor: pointer; outline: 0; }
22 .select2-container.select2-allowclear .select2-choice abbr {display: inline-block;}
22 .select2-container.select2-allowclear .select2-choice abbr {display: inline-block;}
23 .select2-container .select2-choice abbr:hover { background-position: right -11px; cursor: pointer; }
23 .select2-container .select2-choice abbr:hover { background-position: right -11px; cursor: pointer; }
24 .select2-drop-mask { border: 0; margin: 0; padding: 0; position: fixed; left: 0; top: 0; min-height: 100%; min-width: 100%; height: auto; width: auto; opacity: 0; z-index: 998; background-color: #fff; filter: alpha(opacity=0); }
24 .select2-drop-mask { border: 0; margin: 0; padding: 0; position: fixed; left: 0; top: 0; min-height: 100%; min-width: 100%; height: auto; width: auto; opacity: 0; z-index: 998; background-color: #fff; filter: alpha(opacity=0); }
25 .select2-drop { width: 100%; margin-top: -1px; position: absolute; z-index: 999; top: 100%; background: #fff; color: #000; border: @border-thickness solid @rcblue; border-top: 0; border-radius: 0 0 @border-radius @border-radius; }
25 .select2-drop { width: 100%; margin-top: -1px; position: absolute; z-index: 999; top: 100%; background: #fff; color: #000; border: @border-thickness solid @rcblue; border-top: 0; border-radius: 0 0 @border-radius @border-radius; }
26 .select2-drop.select2-drop-above { margin-top: 1px; border-top: @border-thickness solid @rclightblue; border-bottom: 0; border-radius: @border-radius @border-radius 0 0; }
26 .select2-drop.select2-drop-above { margin-top: 1px; border-top: @border-thickness solid @rclightblue; border-bottom: 0; border-radius: @border-radius @border-radius 0 0; }
27 .select2-drop-active { border: @border-thickness solid #5897fb; border-top: none; }
27 .select2-drop-active { border: @border-thickness solid #5897fb; border-top: none; }
28 .select2-drop.select2-drop-above.select2-drop-active {border-top: @border-thickness solid #5897fb;}
28 .select2-drop.select2-drop-above.select2-drop-active {border-top: @border-thickness solid #5897fb;}
29 .select2-drop-auto-width { border-top: @border-thickness solid #aaa; width: auto; }
29 .select2-drop-auto-width { border-top: @border-thickness solid #aaa; width: auto; }
30 .select2-drop-auto-width .select2-search {padding-top: 4px;}
30 .select2-drop-auto-width .select2-search {padding-top: 4px;}
31 html[dir="rtl"] .select2-container .select2-choice .select2-arrow { left: 0; right: auto; border-left: none; border-right: @border-thickness solid @grey5; border-radius: @border-radius 0 0 @border-radius; }
31 html[dir="rtl"] .select2-container .select2-choice .select2-arrow { left: 0; right: auto; border-left: none; border-right: @border-thickness solid @grey5; border-radius: @border-radius 0 0 @border-radius; }
32 html[dir="rtl"] .select2-container .select2-choice .select2-arrow b {background-position: 2px 1px;}
32 html[dir="rtl"] .select2-container .select2-choice .select2-arrow b {background-position: 2px 1px;}
33 .select2-search { display: inline-block; width: 100%; min-height: 26px; margin: 0; padding-left: 4px; padding-right: 4px; position: relative; z-index: 1000; white-space: nowrap; }
33 .select2-search { display: inline-block; width: 100%; min-height: 26px; margin: 0; padding-left: 4px; padding-right: 4px; position: relative; z-index: 1000; white-space: nowrap; }
34 .select2-search input { width: 100%; height: auto !important; min-height: 26px; padding: 4px 20px 4px 5px; margin: 0; outline: 0; }
34 .select2-search input { width: 100%; height: auto !important; min-height: 26px; padding: 4px 20px 4px 5px; margin: 0; outline: 0; }
35 html[dir="rtl"] .select2-search input { padding: 4px 5px 4px 20px; background: #fff url('../images/select2.png') no-repeat -37px -22px; }
35 html[dir="rtl"] .select2-search input { padding: 4px 5px 4px 20px; background: #fff url('../images/select2.png') no-repeat -37px -22px; }
36 .select2-drop.select2-drop-above .select2-search input {margin-top: 4px;}
36 .select2-drop.select2-drop-above .select2-search input {margin-top: 4px;}
37 .select2-dropdown-open .select2-choice .select2-arrow { background: transparent; border-left: none; filter: none; }
37 .select2-dropdown-open .select2-choice .select2-arrow { background: transparent; border-left: none; filter: none; }
38 html[dir="rtl"] .select2-dropdown-open .select2-choice .select2-arrow {border-right: none;}
38 html[dir="rtl"] .select2-dropdown-open .select2-choice .select2-arrow {border-right: none;}
39 .select2-hidden-accessible { border: 0; clip: rect(0 0 0 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; }
39 .select2-hidden-accessible { border: 0; clip: rect(0 0 0 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; }
40 /* results */
40 /* results */
41 .select2-results { max-height: 200px; padding: 0 0 0 4px; margin: 4px 4px 4px 0; position: relative; overflow-x: hidden; overflow-y: auto; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); }
41 .select2-results { max-height: 200px; padding: 0 0 0 4px; margin: 4px 4px 4px 0; position: relative; overflow-x: hidden; overflow-y: auto; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); }
42 html[dir="rtl"] .select2-results { padding: 0 4px 0 0; margin: 4px 0 4px 4px; }
42 html[dir="rtl"] .select2-results { padding: 0 4px 0 0; margin: 4px 0 4px 4px; }
43 .select2-results .select2-disabled{background:@grey6;display:list-item;cursor:default}
43 .select2-results .select2-disabled{background:@grey6;display:list-item;cursor:default}
44 .select2-results .select2-selected{display:none}
44 .select2-results .select2-selected{display:none}
45 .select2-more-results.select2-active{background:#f4f4f4 url('../images/select2-spinner.gif') no-repeat 100%}
45 .select2-more-results.select2-active{background:#f4f4f4 url('../images/select2-spinner.gif') no-repeat 100%}
46 .select2-container.select2-container-disabled .select2-choice abbr{display:none}
46 .select2-container.select2-container-disabled .select2-choice abbr{display:none}
47 .select2-container.select2-container-disabled {background:@grey6;cursor:default}
47 .select2-container.select2-container-disabled {background:@grey6;cursor:default}
48 .select2-container.select2-container-disabled .select2-choice {background:@grey6;cursor:default}
48 .select2-container.select2-container-disabled .select2-choice {background:@grey6;cursor:default}
49 .select2-container-multi .select2-choices li{float:left;list-style:none}
49 .select2-container-multi .select2-choices li{float:left;list-style:none}
50 .select2-container-multi .select2-choices .select2-search-field{margin:0;padding:0;white-space:nowrap}
50 .select2-container-multi .select2-choices .select2-search-field{margin:0;padding:0;white-space:nowrap}
51 .select2-container-multi .select2-choices .select2-search-choice .select2-chosen{cursor:default}
51 .select2-container-multi .select2-choices .select2-search-choice .select2-chosen{cursor:default}
52 .select2-search-choice-close{display:block;width:12px;height:13px;position:absolute;right:3px;top:4px;font-size:1px;outline:none;background:url('../images/select2.png') right top no-repeat}
52 .select2-search-choice-close{display:block;width:12px;height:13px;position:absolute;right:3px;top:4px;font-size:1px;outline:none;background:url('../images/select2.png') right top no-repeat}
53 .select2-container-multi .select2-search-choice-close{left:3px}
53 .select2-container-multi .select2-search-choice-close{left:3px}
54 .select2-container-multi .select2-choices .select2-search-choice .select2-search-choice-close:hover{background-position:right -11px}
54 .select2-container-multi .select2-choices .select2-search-choice .select2-search-choice-close:hover{background-position:right -11px}
55 .select2-container-multi .select2-choices .select2-search-choice-focus .select2-search-choice-close{background-position:right -11px}
55 .select2-container-multi .select2-choices .select2-search-choice-focus .select2-search-choice-close{background-position:right -11px}
56 .select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice .select2-search-choice-close{display:none;background:none}
56 .select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice .select2-search-choice-close{display:none;background:none}
57 .select2-offscreen,.select2-offscreen:focus{clip:rect(0 0 0 0) !important;width:1px !important;height:1px !important;
57 .select2-offscreen,.select2-offscreen:focus{clip:rect(0 0 0 0) !important;width:1px !important;height:1px !important;
58 border:0 !important;margin:0 !important;padding:0 !important;overflow:hidden !important;
58 border:0 !important;margin:0 !important;padding:0 !important;overflow:hidden !important;
59 position: absolute !important;outline:0 !important;left:0 !important;top:0 !important}
59 position: absolute !important;outline:0 !important;left:0 !important;top:0 !important}
60 .select2-display-none,
60 .select2-display-none,
61 .select2-search-hidden {display:none}
61 .select2-search-hidden {display:none}
62 .select2-search input { border-color: @rclightblue; }
62 .select2-search input { border-color: @rclightblue; }
63
63
64 .select2-measure-scrollbar{position:absolute;top:-10000px;left:-10000px;width:100px;height:100px;overflow:scroll}
64 .select2-measure-scrollbar{position:absolute;top:-10000px;left:-10000px;width:100px;height:100px;overflow:scroll}
65 @media only screen and (-webkit-min-device-pixel-ratio:1.5),
65 @media only screen and (-webkit-min-device-pixel-ratio:1.5),
66 only screen and (min-resolution:144dpi){
66 only screen and (min-resolution:144dpi){
67 .select2-search input,
67 .select2-search input,
68 .select2-search-choice-close,
68 .select2-search-choice-close,
69 .select2-container .select2-choice abbr,
69 .select2-container .select2-choice abbr,
70 .select2-container .select2-choice .select2-arrow b{background-image:url('../images/select2x2.png');background-repeat:no-repeat;background-size:60px 40px;}
70 .select2-container .select2-choice .select2-arrow b{background-image:url('../images/select2x2.png');background-repeat:no-repeat;background-size:60px 40px;}
71 .select2-search input{background-position:100% -21px}
71 .select2-search input{background-position:100% -21px}
72 }
72 }
73 [class^="input-"] [class^="select2-choice"]>div{display:none}
73 [class^="input-"] [class^="select2-choice"]>div{display:none}
74 [class^="input-"] .select2-offscreen{position:absolute}
74 [class^="input-"] .select2-offscreen{position:absolute}
75 select.select2{height:28px;visibility:hidden}
75 select.select2{height:28px;visibility:hidden}
76 .autocomplete-suggestions{overflow:auto}
76 .autocomplete-suggestions{overflow:auto}
77 .autocomplete-suggestion{white-space:nowrap;overflow:hidden}
77 .autocomplete-suggestion{white-space:nowrap;overflow:hidden}
78
78
79 /* Retina-ize icons */
79 /* Retina-ize icons */
80 @media only screen and (-webkit-min-device-pixel-ratio:1.5),
80 @media only screen and (-webkit-min-device-pixel-ratio:1.5),
81 only screen and (min-resolution:144dpi){
81 only screen and (min-resolution:144dpi){
82 .select2-search input,
82 .select2-search input,
83 .select2-search-choice-close,
83 .select2-search-choice-close,
84 .select2-container .select2-choice abbr,
84 .select2-container .select2-choice abbr,
85 .select2-container .select2-choice .select2-arrow b{background-image:url('../images/select2x2.png');background-repeat:no-repeat;background-size:60px 40px;}
85 .select2-container .select2-choice .select2-arrow b{background-image:url('../images/select2x2.png');background-repeat:no-repeat;background-size:60px 40px;}
86 .select2-search input{background-position:100% -21px}
86 .select2-search input{background-position:100% -21px}
87 }
87 }
88
88
89 //Internal Select2 Dropdown Menus
89 //Internal Select2 Dropdown Menus
90
90
91 .drop-menu-core {
91 .drop-menu-core {
92 min-width: 160px;
92 min-width: 160px;
93 margin: 0 @padding 0 0;
93 margin: 0 @padding 0 0;
94 padding: 0;
94 padding: 0;
95 border: @border-thickness solid @grey5;
95 border: @border-thickness solid @grey5;
96 border-radius: @border-radius;
96 border-radius: @border-radius;
97 color: @grey2;
97 color: @grey2;
98 background-color: white;
98 background-color: white;
99
99
100 a {
100 a {
101 color: @grey2;
101 color: @grey2;
102
102
103 &:hover {
103 &:hover {
104 color: @rcdarkblue;
104 color: @rcdarkblue;
105 }
105 }
106 }
106 }
107 }
107 }
108
108
109 .drop-menu-dropdown {
109 .drop-menu-dropdown {
110 .drop-menu-core;
110 .drop-menu-core;
111
111
112 .flag_status {
112 .flag_status {
113 margin-top: 0;
113 margin-top: 0;
114 }
114 }
115 }
115 }
116
116
117 .drop-menu-base {
117 .drop-menu-base {
118 .drop-menu-core;
118 .drop-menu-core;
119 position: relative;
119 position: relative;
120 display: inline-block;
120 display: inline-block;
121 line-height: 1em;
121 line-height: 1em;
122 z-index: 2;
122 z-index: 2;
123 cursor: pointer;
123 cursor: pointer;
124
124
125 .flag_status {
125 .flag_status {
126 margin-top: 0;
126 margin-top: 0;
127 }
127 }
128
128
129 a {
129 a {
130 display:block;
130 display:block;
131 padding: .7em;
131 padding: .7em;
132 padding-right: 2em;
132 padding-right: 2em;
133 position: relative;
133 position: relative;
134
134
135 &:after {
135 &:after {
136 position: absolute;
136 position: absolute;
137 content: "\00A0\25BE";
137 content: "\00A0\25BE";
138 right: .1em;
138 right: .1em;
139 line-height: 1em;
139 line-height: 1em;
140 top: 0.2em;
140 top: 0.2em;
141 width: 1em;
141 width: 1em;
142 font-size: 20px;
142 font-size: 20px;
143 }
143 }
144 }
144 }
145 }
145 }
146
146
147 .drop-menu {
147 .drop-menu {
148 .drop-menu-base;
148 .drop-menu-base;
149 width: auto !important;
149 width: auto !important;
150 }
150 }
151
151
152 .drop-menu-no-width {
152 .drop-menu-no-width {
153 .drop-menu-base;
153 .drop-menu-base;
154 width: auto;
154 width: auto;
155 min-width: 0;
156 margin: 0;
155 }
157 }
156
158
157 .field-sm .drop-menu {
159 .field-sm .drop-menu {
158 padding: 1px 0 0 0;
160 padding: 1px 0 0 0;
159 a {
161 a {
160 padding: 6px;
162 padding: 6px;
161 };
163 };
162 }
164 }
163
165
164 .select2-search input {
166 .select2-search input {
165 width: 100%;
167 width: 100%;
166 margin: .5em 0;
168 margin: .5em 0;
167 padding: .5em;
169 padding: .5em;
168 border-color: @grey4;
170 border-color: @grey4;
169
171
170 &:focus, &:hover {
172 &:focus, &:hover {
171 border-color: @rcblue;
173 border-color: @rcblue;
172 box-shadow: @button-shadow;
174 box-shadow: @button-shadow;
173 }
175 }
174 }
176 }
175
177
176 .select2-no-results {
178 .select2-no-results {
177 padding: .5em;
179 padding: .5em;
178 }
180 }
179
181
180 .drop-menu-dropdown ul {
182 .drop-menu-dropdown ul {
181 width: auto;
183 width: auto;
182 margin: 0;
184 margin: 0;
183 padding: 0;
185 padding: 0;
184 z-index: 50;
186 z-index: 50;
185
187
186 li {
188 li {
187 margin: 0;
189 margin: 0;
188 line-height: 1em;
190 line-height: 1em;
189 list-style-type: none;
191 list-style-type: none;
190
192
191 &:hover,
193 &:hover,
192 &.select2-highlighted {
194 &.select2-highlighted {
193 background-color: @grey7;
195 background-color: @grey7;
194
196
195 .select2-result-label {
197 .select2-result-label {
196 &:hover {
198 &:hover {
197 color: @grey1!important;
199 color: @grey1!important;
198 }
200 }
199 }
201 }
200 }
202 }
201
203
202 &.select2-result-with-children {
204 &.select2-result-with-children {
203 &:hover {
205 &:hover {
204 background-color: white;
206 background-color: white;
205 }
207 }
206 }
208 }
207
209
208 .select2-result-label {
210 .select2-result-label {
209 display:block;
211 display:block;
210 padding: 8px;
212 padding: 8px;
211 font-family: @text-regular;
213 font-family: @text-regular;
212 color: @grey2;
214 color: @grey2;
213 cursor: pointer;
215 cursor: pointer;
214 }
216 }
215 &.select2-result-with-children {
217 &.select2-result-with-children {
216
218
217 .select2-result-label {
219 .select2-result-label {
218 color: @rcdarkblue;
220 color: @rcdarkblue;
219 cursor: default;
221 cursor: default;
220 font-weight: @text-semibold-weight;
222 font-weight: @text-semibold-weight;
221 font-family: @text-semibold;
223 font-family: @text-semibold;
222 }
224 }
223
225
224 ul.select2-result-sub li .select2-result-label {
226 ul.select2-result-sub li .select2-result-label {
225 padding-left: 16px;
227 padding-left: 16px;
226 font-family: @text-regular;
228 font-family: @text-regular;
227 color: @grey2;
229 color: @grey2;
228 cursor: pointer;
230 cursor: pointer;
229 }
231 }
230 }
232 }
231 }
233 }
232 }
234 }
233
235
234 .side-by-side-selector {
236 .side-by-side-selector {
235 .left-group,
237 .left-group,
236 .middle-group,
238 .middle-group,
237 .right-group {
239 .right-group {
238 margin-bottom: @padding;
240 margin-bottom: @padding;
239 }
241 }
240 }
242 }
@@ -1,492 +1,497 b''
1 // summary.less
1 // summary.less
2 // For use in RhodeCode applications;
2 // For use in RhodeCode applications;
3 // Used for headers and file detail summary screens.
3 // Used for headers and file detail summary screens.
4
4
5 .summary {
5 .summary {
6 clear: both;
6 clear: both;
7 float: none;
7 float: none;
8 position: relative;
8 position: relative;
9 width: 100%;
9 width: 100%;
10 margin: 0;
10 margin: 0;
11 padding: 0;
11 padding: 0;
12 background: #FCFCFC;
12 background: #FCFCFC;
13 border: 1px solid #EAEAEA;
13 border: 1px solid #EAEAEA;
14 border-radius: @border-radius;
14 border-radius: @border-radius;
15 margin-bottom: 20px;
15 margin-bottom: 20px;
16
16
17 .summary-detail-header {
17 .summary-detail-header {
18 display: block;
18 display: block;
19 width: 100%;
19 width: 100%;
20 margin-bottom: 10px;
20 margin-bottom: 10px;
21 padding: 0 0 .5em 0;
21 padding: 0 0 .5em 0;
22 border-bottom: @border-thickness solid @border-default-color;
22 border-bottom: @border-thickness solid @border-default-color;
23
23
24 .breadcrumbs {
24 .breadcrumbs {
25 display: inline;
25 display: inline;
26 margin: 0;
26 margin: 0;
27 padding: 0;
27 padding: 0;
28 }
28 }
29
29
30 h4 {
30 h4 {
31 margin: 0 1em 0 0;
31 margin: 0 1em 0 0;
32 padding: 10px 0 5px 20px;
32 padding: 10px 0 5px 20px;
33 line-height: 1.2em;
33 line-height: 1.2em;
34 font-size: @basefontsize;
34 font-size: @basefontsize;
35 }
35 }
36
36
37 .action_link {
37 .action_link {
38 float: right;
38 float: right;
39 }
39 }
40
40
41 .new-file {
41 .new-file {
42 float: right;
42 float: right;
43 margin-top: -1.5em;
43 margin-top: -1.5em;
44 }
44 }
45 }
45 }
46
46
47 .summary-detail {
47 .summary-detail {
48 float: none;
48 float: none;
49 position: relative;
49 position: relative;
50 width: 100%;
50 width: 100%;
51 margin: 0;
51 margin: 0;
52 padding: 0 0 20px 0;
52 padding: 0 0 20px 0;
53
53
54 .file_diff_buttons {
54 .file_diff_buttons {
55 margin-top: @space;
55 margin-top: @space;
56 }
56 }
57
57
58 // commit message
58 // commit message
59 .commit {
59 .commit {
60 white-space: pre-wrap;
60 white-space: pre-wrap;
61 }
61 }
62
62
63 .left-clone {
63 .left-clone {
64 float: left;
64 float: left;
65 height: 30px;
65 height: 30px;
66 margin: 0;
66 margin: 0;
67 padding: 0;
67 padding: 0;
68 width: 130px;
68 width: 130px;
69 font-weight: @text-semibold-weight;
69 font-weight: @text-semibold-weight;
70 font-family: @text-semibold;
70 font-family: @text-semibold;
71 }
71 }
72 .left-clone select {
72 .left-clone select {
73 width: 130px;
73 width: 130px;
74 margin-right: 0;
74 margin-right: 0;
75 background-color: @grey7;
75 background-color: @grey7;
76 border-color: @grey4;
76 border-color: @grey4;
77 color: #5C5C5C;
77 color: #5C5C5C;
78 border-top-right-radius: 0;
78 border-top-right-radius: 0;
79 border-bottom-right-radius: 0;
79 border-bottom-right-radius: 0;
80 }
80 }
81
81
82 .right-clone {
82 .right-clone {
83 float: left;
83 float: left;
84 width: ~"calc(100% - 170px)";
84 width: ~"calc(100% - 170px)";
85
85
86 .clipboard-action {
86 .clipboard-action {
87 margin-left: -30px;
87 margin-left: -30px;
88 }
88 }
89 }
89 }
90
90
91 .clone_url_input {
91 .clone_url_input {
92 width: ~"calc(100% - 90px)";
92 width: ~"calc(100% - 90px)";
93 padding: 6px 30px 6px 10px;
93 padding: 6px 30px 6px 10px;
94 height: 14px;
94 height: 14px;
95 box-shadow: 0 1px 1px 0 rgba(0,0,0,0.07);
95 box-shadow: 0 1px 1px 0 rgba(0,0,0,0.07);
96 border-top-left-radius: 0;
96 border-top-left-radius: 0;
97 border-bottom-left-radius: 0;
97 border-bottom-left-radius: 0;
98 margin-left: -1px;
98 margin-left: -1px;
99 }
99 }
100
100
101 &.directory {
101 &.directory {
102 margin-bottom: 0;
102 margin-bottom: 0;
103 }
103 }
104
104
105 .desc {
105 .desc {
106 white-space: pre-wrap;
106 white-space: pre-wrap;
107 }
107 }
108 .disabled {
108 .disabled {
109 opacity: .5;
109 opacity: .5;
110 cursor: inherit;
110 cursor: inherit;
111 }
111 }
112 .help-block {
112 .help-block {
113 color: inherit;
113 color: inherit;
114 margin: 0;
114 margin: 0;
115 }
115 }
116 }
116 }
117
117
118 .sidebar-right {
118 .sidebar-right {
119 float: left;
119 float: left;
120 width: 24%;
120 width: 24%;
121 margin: 0;
121 margin: 0;
122 padding: 0;
122 padding: 0;
123
123
124 ul {
124 ul {
125 margin-left: 0;
125 margin-left: 0;
126 padding-left: 0;
126 padding-left: 0;
127
127
128 li {
128 li {
129 list-style-type: none;
129 list-style-type: none;
130 }
130 }
131 }
131 }
132 }
132 }
133
133
134 #clone_by_name, #clone_by_id{
134 #clone_by_name, #clone_by_id{
135 display: inline-block;
135 display: inline-block;
136 margin-left: 0px;
136 margin-left: 0px;
137 }
137 }
138
138
139 .codeblock {
139 .codeblock {
140 border: none;
140 border: none;
141 background-color: transparent;
141 background-color: transparent;
142 }
142 }
143
143
144 .code-body {
144 .code-body {
145 border: @border-thickness solid @border-default-color;
145 border: @border-thickness solid @border-default-color;
146 .border-radius(@border-radius);
146 .border-radius(@border-radius);
147 }
147 }
148
148
149 .btn-collapse {
149 .btn-collapse {
150 clear: both;
150 clear: both;
151 float: none;
151 float: none;
152 background: #F7F7F7;
152 background: #F7F7F7;
153 text-align: center;
153 text-align: center;
154 color: #949494;
154 color: #949494;
155 font-size: 11px;
155 font-size: 11px;
156 line-height: 1.3em;
156
157
157 &:hover {
158 &:hover {
158 background: #f1f1f1;
159 background: #f1f1f1;
159 color: #2B2B2D;
160 color: #2B2B2D;
160 }
161 }
161 }
162 }
162 }
163 }
163
164
164 // this is used outside of just the summary
165 // this is used outside of just the summary
165 .fieldset, // similar to form fieldset
166 .fieldset, // similar to form fieldset
166 .summary .sidebar-right-content { // these have to match
167 .summary .sidebar-right-content { // these have to match
167 clear: both;
168 clear: both;
168 float: none;
169 float: none;
169 position: relative;
170 position: relative;
170 display:block;
171 display:block;
171 width: 100%;
172 width: 100%;
172 min-height: 20px;
173 min-height: 20px;
173 margin-bottom: 10px;
174 margin-bottom: 10px;
174 padding: 0;
175 padding: 0;
175 line-height: 1.2em;
176 line-height: 1.2em;
176
177
177 &:after { // clearfix
178 &:after { // clearfix
178 content: "";
179 content: "";
179 clear: both;
180 clear: both;
180 width: 100%;
181 width: 100%;
181 height: 1em;
182 height: 1em;
182 }
183 }
183 }
184 }
184
185
185 .summary .sidebar-right-content {
186 .summary .sidebar-right-content {
186 margin-bottom: 0;
187 margin-bottom: 0;
187
188
188 .rc-user {
189 .rc-user {
189 min-width: 0;
190 min-width: 0;
190 }
191 }
191
192
192 li {
193 li {
193 list-style: none;
194 list-style: none;
194 line-height: normal;
195 line-height: normal;
195 }
196 }
196 }
197 }
197
198
198 .summary {
199 .summary {
199 .fieldset {
200 .fieldset {
200 margin-bottom: 0;
201 margin-bottom: 0;
201 }
202 }
203
204 .tags-main {
205 margin-bottom: 5px;
206 }
202 }
207 }
203
208
204 .fieldset {
209 .fieldset {
205
210
206 .left-label { // similar to form legend
211 .left-label { // similar to form legend
207 display: block;
212 display: block;
208 margin: 0;
213 margin: 0;
209 padding: 0;
214 padding: 0;
210 font-weight: @text-semibold-weight;
215 font-weight: @text-semibold-weight;
211 font-family: @text-semibold;
216 font-family: @text-semibold;
212 }
217 }
213
218
214 .left-label-summary {
219 .left-label-summary {
215 padding-left: 20px;
220 padding-left: 20px;
216 margin-bottom: 5px;
221 margin-bottom: 5px;
217
222
218 p {
223 p {
219 margin-bottom: 5px;
224 margin-bottom: 5px;
220 color: @grey1;
225 color: @grey1;
221 float: left;
226 float: left;
222 width: 130px;
227 width: 130px;
223
228
224 &.spacing {
229 &.spacing {
225 margin-top: 10px;
230 margin-top: 10px;
226 }
231 }
227 }
232 }
228
233
229 .right-label-summary {
234 .right-label-summary {
230 float: left;
235 float: left;
231 margin-top: 7px;
236 margin-top: 7px;
232 width: ~"calc(100% - 160px)";
237 width: ~"calc(100% - 160px)";
233 }
238 }
234 }
239 }
235
240
236 .left-label-summary-files {
241 .left-label-summary-files {
237 padding-left: 45px;
242 padding-left: 45px;
238 margin-top: 5px;
243 margin-top: 5px;
239
244
240 p {
245 p {
241 margin-bottom: 5px;
246 margin-bottom: 5px;
242 color: @grey1;
247 color: @grey1;
243 float: left;
248 float: left;
244 width: 130px;
249 width: 130px;
245
250
246 &.spacing {
251 &.spacing {
247 margin-top: 10px;
252 margin-top: 10px;
248 }
253 }
249 }
254 }
250
255
251 .right-label-summary {
256 .right-label-summary {
252 float: left;
257 float: left;
253 margin-top: 7px;
258 margin-top: 7px;
254 }
259 }
255 }
260 }
256
261
257 .left-content {
262 .left-content {
258 width: ~"calc(60% - 20px)";
263 width: ~"calc(60% - 20px)";
259 float: left;
264 float: left;
260 margin: 15px 0 15px 20px;
265 margin: 15px 0 15px 20px;
261
266
262 .rc-user {
267 .rc-user {
263 min-width: auto;
268 min-width: auto;
264 max-width: none;
269 max-width: none;
265 min-height: auto;
270 min-height: auto;
266 padding-right: 5px;
271 padding-right: 5px;
267 }
272 }
268
273
269 .left-content-avatar {
274 .left-content-avatar {
270 width: 45px;
275 width: 45px;
271 float: left;
276 float: left;
272 margin-top: 8px;
277 margin-top: 8px;
273 }
278 }
274
279
275 .left-content-message {
280 .left-content-message {
276 float: left;
281 float: left;
277 width: ~"calc(100% - 45px)";
282 width: ~"calc(100% - 45px)";
278 }
283 }
279 }
284 }
280
285
281 .right-content { // similar to form fields
286 .right-content { // similar to form fields
282 float: left;
287 float: left;
283 display: block;
288 display: block;
284 width: ~"calc(40% - 20px)";
289 width: ~"calc(40% - 20px)";
285 text-align: right;
290 text-align: right;
286 margin: 15px 20px 15px 0;
291 margin: 15px 20px 15px 0;
287
292
288 .truncate-wrap,
293 .truncate-wrap,
289 .truncate {
294 .truncate {
290 max-width: 100%;
295 max-width: 100%;
291 width: 100%;
296 width: 100%;
292 }
297 }
293
298
294 .commit-long {
299 .commit-long {
295 overflow-x: auto;
300 overflow-x: auto;
296 }
301 }
297
302
298 .commit-info {
303 .commit-info {
299 margin-top: 7px;
304 margin-top: 7px;
300 }
305 }
301
306
302 .summary-tag,
307 .summary-tag,
303 .summary-tagtag,
308 .summary-tagtag,
304 .summary-branchtag,
309 .summary-branchtag,
305 .summary-booktag,
310 .summary-booktag,
306 .summary-metatag,
311 .summary-metatag,
307 .summary-perm_tag {
312 .summary-perm_tag {
308 background:transparent;
313 background:transparent;
309 border: none;
314 border: none;
310 box-shadow: none;
315 box-shadow: none;
311 margin-left: 10px;
316 margin-left: 10px;
312 font-size: 13px;
317 font-size: 13px;
313 }
318 }
314
319
315 .summary-tag span,
320 .summary-tag span,
316 .summary-tag i,
321 .summary-tag i,
317 .summary-tag a {
322 .summary-tag a {
318 color: @grey1;
323 color: @grey1;
319 }
324 }
320
325
321 }
326 }
322 .commit {
327 .commit {
323 color: @grey1;
328 color: @grey1;
324 margin-bottom: 5px;
329 margin-bottom: 5px;
325 white-space: pre;
330 white-space: pre;
326 }
331 }
327 .commit.truncate-wrap {
332 .commit.truncate-wrap {
328 overflow:hidden;
333 overflow:hidden;
329 text-overflow: ellipsis;
334 text-overflow: ellipsis;
330 }
335 }
331 .commit-author {
336 .commit-author {
332 color: @grey1;
337 color: @grey1;
333 }
338 }
334 .commit-date {
339 .commit-date {
335 color: @grey4;
340 color: @grey4;
336 }
341 }
337 .fieldset-text-line {
342 .fieldset-text-line {
338 line-height: 36px;
343 line-height: 36px;
339 }
344 }
340 }
345 }
341
346
342 // expand commit message
347 // expand commit message
343 #message_expand {
348 #message_expand {
344 clear: both;
349 clear: both;
345 display: block;
350 display: block;
346 color: @rcblue;
351 color: @rcblue;
347 cursor: pointer;
352 cursor: pointer;
348 }
353 }
349
354
350 #trimmed_message_box {
355 #trimmed_message_box {
351 max-height: floor(2 * @basefontsize * 1.2); // 2 lines * line-height
356 max-height: floor(2 * @basefontsize * 1.2); // 2 lines * line-height
352 overflow: hidden;
357 overflow: hidden;
353 }
358 }
354
359
355 // show/hide comments button
360 // show/hide comments button
356 .show-inline-comments {
361 .show-inline-comments {
357 display: inline;
362 display: inline;
358 cursor: pointer;
363 cursor: pointer;
359
364
360 .comments-show { display: inline; }
365 .comments-show { display: inline; }
361 .comments-hide { display: none; }
366 .comments-hide { display: none; }
362
367
363 &.comments-visible {
368 &.comments-visible {
364 .comments-show { display: none; }
369 .comments-show { display: none; }
365 .comments-hide { display: inline; }
370 .comments-hide { display: inline; }
366 }
371 }
367 }
372 }
368
373
369 // Quick Start section
374 // Quick Start section
370
375
371 .empty-repo {
376 .empty-repo {
372 border: 1px solid #EAEAEA;
377 border: 1px solid #EAEAEA;
373 border-bottom: 0;
378 border-bottom: 0;
374 border-radius: @border-radius;
379 border-radius: @border-radius;
375 padding: 0 20px;
380 padding: 0 20px;
376 }
381 }
377
382
378 .empty-repo h3, .quick_start p {
383 .empty-repo h3, .quick_start p {
379 margin-bottom: 10px;
384 margin-bottom: 10px;
380 }
385 }
381
386
382 .quick_start pre {
387 .quick_start pre {
383 background: #FCFEFF;
388 background: #FCFEFF;
384 border: 1px solid #CBDBEB;
389 border: 1px solid #CBDBEB;
385 box-shadow: @button-shadow;
390 box-shadow: @button-shadow;
386 padding: 10px 15px;
391 padding: 10px 15px;
387 border-radius: 4px;
392 border-radius: 4px;
388 color: @grey2;
393 color: @grey2;
389 }
394 }
390
395
391 .clear-fix {
396 .clear-fix {
392 clear: both;
397 clear: both;
393 }
398 }
394
399
395 .quick_start {
400 .quick_start {
396 display: block;
401 display: block;
397 position: relative;
402 position: relative;
398 border: 1px solid #EAEAEA;
403 border: 1px solid #EAEAEA;
399 border-top: 0;
404 border-top: 0;
400 border-radius: @border-radius;
405 border-radius: @border-radius;
401 padding: 0 20px;
406 padding: 0 20px;
402
407
403 // adds some space to make copy and paste easier
408 // adds some space to make copy and paste easier
404 .left-label,
409 .left-label,
405 .right-content {
410 .right-content {
406 line-height: 1.6em;
411 line-height: 1.6em;
407 }
412 }
408 }
413 }
409
414
410
415
411 .submodule {
416 .submodule {
412 .summary-detail {
417 .summary-detail {
413 width: 100%;
418 width: 100%;
414
419
415 .btn-collapse {
420 .btn-collapse {
416 display: none;
421 display: none;
417 }
422 }
418 }
423 }
419 }
424 }
420
425
421 .codeblock-header {
426 .codeblock-header {
422 float: left;
427 float: left;
423 display: block;
428 display: block;
424 width: 100%;
429 width: 100%;
425 margin: 0;
430 margin: 0;
426
431
427 .file-filename {
432 .file-filename {
428 float:left;
433 float:left;
429 padding: 10px;
434 padding: 10px;
430 }
435 }
431
436
432 .file-stats {
437 .file-stats {
433 padding: 10px;
438 padding: 10px;
434 float:right;
439 float:right;
435 }
440 }
436
441
437
442
438 .stats-first-item {
443 .stats-first-item {
439 padding: 0px 0px 0px 3px;
444 padding: 0px 0px 0px 3px;
440 }
445 }
441
446
442 .stats-info {
447 .stats-info {
443 font-size: 11px;
448 font-size: 11px;
444 color: @grey4;
449 color: @grey4;
445 }
450 }
446
451
447 .buttons {
452 .buttons {
448 float: right;
453 float: right;
449 text-align: right;
454 text-align: right;
450 color: @grey4;
455 color: @grey4;
451 padding: 10px;
456 padding: 10px;
452 }
457 }
453
458
454 .file-container {
459 .file-container {
455 display: inline-block;
460 display: inline-block;
456 width: 100%;
461 width: 100%;
457 }
462 }
458
463
459 }
464 }
460
465
461 #summary-menu-stats {
466 #summary-menu-stats {
462
467
463 .stats-bullet {
468 .stats-bullet {
464 color: @grey3;
469 color: @grey3;
465 min-width: 3em;
470 min-width: 3em;
466 }
471 }
467
472
468 .repo-size {
473 .repo-size {
469 margin-bottom: .5em;
474 margin-bottom: .5em;
470 }
475 }
471
476
472 }
477 }
473
478
474 .rctable.repo_summary {
479 .rctable.repo_summary {
475 border: 1px solid #eaeaea;
480 border: 1px solid #eaeaea;
476 border-radius: 2px;
481 border-radius: 2px;
477 border-collapse: inherit;
482 border-collapse: inherit;
478 border-bottom: 0;
483 border-bottom: 0;
479
484
480 th {
485 th {
481 background: @grey7;
486 background: @grey7;
482 border-bottom: 0;
487 border-bottom: 0;
483 }
488 }
484
489
485 td {
490 td {
486 border-color: #eaeaea;
491 border-color: #eaeaea;
487 }
492 }
488
493
489 td.td-status {
494 td.td-status {
490 padding: 0 0 0 10px;
495 padding: 0 0 0 10px;
491 }
496 }
492 }
497 }
@@ -1,623 +1,689 b''
1 {
1 {
2 "name": "rcicons",
2 "name": "rcicons",
3 "css_prefix_text": "icon-",
3 "css_prefix_text": "icon-",
4 "css_use_suffix": false,
4 "css_use_suffix": false,
5 "hinting": true,
5 "hinting": true,
6 "units_per_em": 1000,
6 "units_per_em": 1000,
7 "ascent": 850,
7 "ascent": 850,
8 "copyright": "RhodeCode GmbH",
8 "copyright": "RhodeCode GmbH",
9 "glyphs": [
9 "glyphs": [
10 {
10 {
11 "uid": "a5f9b6d4d795603e6e29a5b8007cc139",
11 "uid": "a5f9b6d4d795603e6e29a5b8007cc139",
12 "css": "bookmark",
12 "css": "bookmark",
13 "code": 59395,
13 "code": 59395,
14 "src": "custom_icons",
14 "src": "custom_icons",
15 "selected": true,
15 "selected": true,
16 "svg": {
16 "svg": {
17 "path": "M780 990L520 700C510 690 495 690 485 700L225 995C205 1015 180 1000 180 965V35C175 15 190 0 205 0H795C810 0 825 15 825 35V960C825 995 795 1010 780 990Z",
17 "path": "M780 990L520 700C510 690 495 690 485 700L225 995C205 1015 180 1000 180 965V35C175 15 190 0 205 0H795C810 0 825 15 825 35V960C825 995 795 1010 780 990Z",
18 "width": 1000
18 "width": 1000
19 },
19 },
20 "search": [
20 "search": [
21 "bookmark"
21 "bookmark"
22 ]
22 ]
23 },
23 },
24 {
24 {
25 "uid": "fbc028d3a6a0df72f8f508ff5dfbab72",
25 "uid": "fbc028d3a6a0df72f8f508ff5dfbab72",
26 "css": "tag",
26 "css": "tag",
27 "code": 59397,
27 "code": 59397,
28 "src": "custom_icons",
28 "src": "custom_icons",
29 "selected": true,
29 "selected": true,
30 "svg": {
30 "svg": {
31 "path": "M459.8 62.5L93.8 53.6C75.9 53.6 62.5 67 62.5 84.8L75.9 450.9C75.9 459.8 80.4 464.3 84.8 473.2L549.1 937.5C562.5 950.9 580.4 950.9 593.8 937.5L946.4 584.8C959.8 571.4 959.8 553.6 946.4 540.2L477.7 71.4C473.2 67 464.3 62.5 459.8 62.5ZM357.1 285.7C357.1 321.4 325.9 352.7 290.2 352.7 254.5 352.7 223.2 321.4 223.2 285.7 223.2 250 254.5 218.8 290.2 218.8S357.1 245.5 357.1 285.7Z",
31 "path": "M459.8 62.5L93.8 53.6C75.9 53.6 62.5 67 62.5 84.8L75.9 450.9C75.9 459.8 80.4 464.3 84.8 473.2L549.1 937.5C562.5 950.9 580.4 950.9 593.8 937.5L946.4 584.8C959.8 571.4 959.8 553.6 946.4 540.2L477.7 71.4C473.2 67 464.3 62.5 459.8 62.5ZM357.1 285.7C357.1 321.4 325.9 352.7 290.2 352.7 254.5 352.7 223.2 321.4 223.2 285.7 223.2 250 254.5 218.8 290.2 218.8S357.1 245.5 357.1 285.7Z",
32 "width": 1000
32 "width": 1000
33 },
33 },
34 "search": [
34 "search": [
35 "tag"
35 "tag"
36 ]
36 ]
37 },
37 },
38 {
38 {
39 "uid": "1c67c02366438b324c184ff9e356dca1",
39 "uid": "1c67c02366438b324c184ff9e356dca1",
40 "css": "branch",
40 "css": "branch",
41 "code": 59396,
41 "code": 59396,
42 "src": "custom_icons",
42 "src": "custom_icons",
43 "selected": true,
43 "selected": true,
44 "svg": {
44 "svg": {
45 "path": "M875 250C875 174.1 817 116.1 741.1 116.1S607.1 174.1 607.1 250C607.1 299.1 633.9 339.3 669.6 361.6 651.8 504.5 531.3 544.6 459.8 558V245.5C504.5 223.2 531.3 183 531.3 133.9 531.3 58 473.2 0 397.3 0S263.4 58 263.4 133.9C263.4 183 290.2 227.7 330.4 250V750C290.2 772.3 263.4 817 263.4 866.1 263.4 942 321.4 1000 397.3 1000S531.3 942 531.3 866.1C531.3 817 504.5 772.3 464.3 750V692C526.8 683 629.5 660.7 709.8 580.4 767.9 522.3 799.1 450.9 808 366.1 848.2 343.8 875 299.1 875 250ZM397.3 89.3C424.1 89.3 442 107.1 442 133.9S424.1 178.6 397.3 178.6 352.7 160.7 352.7 133.9 370.5 89.3 397.3 89.3ZM397.3 910.7C370.5 910.7 352.7 892.9 352.7 866.1S370.5 821.4 397.3 821.4 442 839.3 442 866.1 419.6 910.7 397.3 910.7ZM741.1 205.4C767.9 205.4 785.7 223.2 785.7 250S767.9 294.6 741.1 294.6 696.4 276.8 696.4 250 718.8 205.4 741.1 205.4Z",
45 "path": "M875 250C875 174.1 817 116.1 741.1 116.1S607.1 174.1 607.1 250C607.1 299.1 633.9 339.3 669.6 361.6 651.8 504.5 531.3 544.6 459.8 558V245.5C504.5 223.2 531.3 183 531.3 133.9 531.3 58 473.2 0 397.3 0S263.4 58 263.4 133.9C263.4 183 290.2 227.7 330.4 250V750C290.2 772.3 263.4 817 263.4 866.1 263.4 942 321.4 1000 397.3 1000S531.3 942 531.3 866.1C531.3 817 504.5 772.3 464.3 750V692C526.8 683 629.5 660.7 709.8 580.4 767.9 522.3 799.1 450.9 808 366.1 848.2 343.8 875 299.1 875 250ZM397.3 89.3C424.1 89.3 442 107.1 442 133.9S424.1 178.6 397.3 178.6 352.7 160.7 352.7 133.9 370.5 89.3 397.3 89.3ZM397.3 910.7C370.5 910.7 352.7 892.9 352.7 866.1S370.5 821.4 397.3 821.4 442 839.3 442 866.1 419.6 910.7 397.3 910.7ZM741.1 205.4C767.9 205.4 785.7 223.2 785.7 250S767.9 294.6 741.1 294.6 696.4 276.8 696.4 250 718.8 205.4 741.1 205.4Z",
46 "width": 1000
46 "width": 1000
47 },
47 },
48 "search": [
48 "search": [
49 "branch"
49 "branch"
50 ]
50 ]
51 },
51 },
52 {
52 {
53 "uid": "b75f7b47706aebd803ef370082e8e334",
53 "uid": "b75f7b47706aebd803ef370082e8e334",
54 "css": "group",
54 "css": "group",
55 "code": 59407,
55 "code": 59407,
56 "src": "custom_icons",
56 "src": "custom_icons",
57 "selected": true,
57 "selected": true,
58 "svg": {
58 "svg": {
59 "path": "M961.5 630.8V646.2C961.5 650 957.7 657.7 950 657.7H788.5 784.6C769.2 638.5 746.2 619.2 707.7 615.4 673.1 607.7 653.8 600 638.5 592.3 646.2 584.6 657.7 580.8 669.2 576.9 715.4 569.2 726.9 553.8 734.6 542.3 742.3 530.8 742.3 519.2 734.6 503.8 726.9 488.5 703.8 461.5 703.8 423.1 703.8 384.6 703.8 319.2 776.9 319.2H784.6 792.3C865.4 323.1 869.2 384.6 865.4 423.1 865.4 461.5 842.3 492.3 834.6 503.8 826.9 519.2 826.9 530.8 834.6 542.3 842.3 553.8 857.7 569.2 900 576.9 953.8 580.8 961.5 623.1 961.5 630.8 961.5 630.8 961.5 630.8 961.5 630.8ZM253.8 646.2C269.2 630.8 292.3 615.4 323.1 611.5 361.5 603.8 384.6 596.2 396.2 584.6 388.5 576.9 376.9 569.2 361.5 565.4 315.4 557.7 303.8 542.3 296.2 530.8 288.5 519.2 288.5 507.7 296.2 492.3 303.8 476.9 326.9 450 326.9 411.5 326.9 373.1 326.9 307.7 253.8 307.7H246.2 234.6C161.5 311.5 157.7 373.1 161.5 411.5 161.5 450 184.6 480.8 192.3 492.3 200 507.7 200 519.2 192.3 530.8 184.6 542.3 169.2 557.7 126.9 565.4 80.8 573.1 73.1 615.4 73.1 619.2 73.1 619.2 73.1 619.2 73.1 619.2V634.6C73.1 638.5 76.9 646.2 84.6 646.2H246.2 253.8ZM707.7 634.6C634.6 623.1 611.5 600 600 580.8 588.5 561.5 588.5 542.3 600 519.2 611.5 496.2 650 450 653.8 388.5 657.7 326.9 653.8 223.1 534.6 219.2H519.2 503.8C384.6 223.1 380.8 323.1 384.6 384.6 388.5 446.2 423.1 492.3 438.5 515.4 450 538.5 450 557.7 438.5 576.9 426.9 596.2 403.8 619.2 330.8 630.8 257.7 642.3 246.2 711.5 246.2 719.2 246.2 719.2 246.2 719.2 246.2 719.2V742.3C246.2 750 253.8 757.7 261.5 757.7H519.2 776.9C784.6 757.7 792.3 750 792.3 742.3V719.2C792.3 719.2 792.3 719.2 792.3 719.2 788.5 715.4 780.8 646.2 707.7 634.6Z",
59 "path": "M961.5 630.8V646.2C961.5 650 957.7 657.7 950 657.7H788.5 784.6C769.2 638.5 746.2 619.2 707.7 615.4 673.1 607.7 653.8 600 638.5 592.3 646.2 584.6 657.7 580.8 669.2 576.9 715.4 569.2 726.9 553.8 734.6 542.3 742.3 530.8 742.3 519.2 734.6 503.8 726.9 488.5 703.8 461.5 703.8 423.1 703.8 384.6 703.8 319.2 776.9 319.2H784.6 792.3C865.4 323.1 869.2 384.6 865.4 423.1 865.4 461.5 842.3 492.3 834.6 503.8 826.9 519.2 826.9 530.8 834.6 542.3 842.3 553.8 857.7 569.2 900 576.9 953.8 580.8 961.5 623.1 961.5 630.8 961.5 630.8 961.5 630.8 961.5 630.8ZM253.8 646.2C269.2 630.8 292.3 615.4 323.1 611.5 361.5 603.8 384.6 596.2 396.2 584.6 388.5 576.9 376.9 569.2 361.5 565.4 315.4 557.7 303.8 542.3 296.2 530.8 288.5 519.2 288.5 507.7 296.2 492.3 303.8 476.9 326.9 450 326.9 411.5 326.9 373.1 326.9 307.7 253.8 307.7H246.2 234.6C161.5 311.5 157.7 373.1 161.5 411.5 161.5 450 184.6 480.8 192.3 492.3 200 507.7 200 519.2 192.3 530.8 184.6 542.3 169.2 557.7 126.9 565.4 80.8 573.1 73.1 615.4 73.1 619.2 73.1 619.2 73.1 619.2 73.1 619.2V634.6C73.1 638.5 76.9 646.2 84.6 646.2H246.2 253.8ZM707.7 634.6C634.6 623.1 611.5 600 600 580.8 588.5 561.5 588.5 542.3 600 519.2 611.5 496.2 650 450 653.8 388.5 657.7 326.9 653.8 223.1 534.6 219.2H519.2 503.8C384.6 223.1 380.8 323.1 384.6 384.6 388.5 446.2 423.1 492.3 438.5 515.4 450 538.5 450 557.7 438.5 576.9 426.9 596.2 403.8 619.2 330.8 630.8 257.7 642.3 246.2 711.5 246.2 719.2 246.2 719.2 246.2 719.2 246.2 719.2V742.3C246.2 750 253.8 757.7 261.5 757.7H519.2 776.9C784.6 757.7 792.3 750 792.3 742.3V719.2C792.3 719.2 792.3 719.2 792.3 719.2 788.5 715.4 780.8 646.2 707.7 634.6Z",
60 "width": 1000
60 "width": 1000
61 },
61 },
62 "search": [
62 "search": [
63 "group"
63 "group"
64 ]
64 ]
65 },
65 },
66 {
66 {
67 "uid": "7ae0ef039bb0217d9581e44b09448905",
67 "uid": "7ae0ef039bb0217d9581e44b09448905",
68 "css": "fork",
68 "css": "fork",
69 "code": 59409,
69 "code": 59409,
70 "src": "custom_icons",
70 "src": "custom_icons",
71 "selected": true,
71 "selected": true,
72 "svg": {
72 "svg": {
73 "path": "M792.3 196.2C792.3 138.5 746.2 96.2 692.3 96.2 634.6 96.2 592.3 142.3 592.3 196.2 592.3 230.8 611.5 261.5 638.5 280.8 626.9 365.4 569.2 403.8 511.5 423.1 453.8 407.7 396.2 369.2 384.6 280.8 411.5 261.5 430.8 230.8 430.8 196.2 430.8 138.5 384.6 96.2 330.8 96.2S223.1 138.5 223.1 196.2C223.1 234.6 246.2 269.2 276.9 284.6 288.5 392.3 353.8 473.1 457.7 511.5V673.1C426.9 692.3 407.7 723.1 407.7 761.5 407.7 819.2 453.8 861.5 507.7 861.5S607.7 815.4 607.7 761.5C607.7 723.1 588.5 692.3 557.7 673.1V511.5C661.5 473.1 726.9 392.3 738.5 284.6 769.2 265.4 792.3 234.6 792.3 196.2ZM326.9 161.5C346.2 161.5 361.5 176.9 361.5 196.2S346.2 226.9 326.9 226.9 292.3 215.4 292.3 196.2 307.7 161.5 326.9 161.5ZM507.7 796.2C488.5 796.2 473.1 780.8 473.1 761.5S488.5 726.9 507.7 726.9C526.9 726.9 542.3 742.3 542.3 761.5S526.9 796.2 507.7 796.2ZM692.3 161.5C711.5 161.5 726.9 176.9 726.9 196.2S711.5 226.9 692.3 226.9 657.7 211.5 657.7 192.3 673.1 161.5 692.3 161.5Z",
73 "path": "M792.3 196.2C792.3 138.5 746.2 96.2 692.3 96.2 634.6 96.2 592.3 142.3 592.3 196.2 592.3 230.8 611.5 261.5 638.5 280.8 626.9 365.4 569.2 403.8 511.5 423.1 453.8 407.7 396.2 369.2 384.6 280.8 411.5 261.5 430.8 230.8 430.8 196.2 430.8 138.5 384.6 96.2 330.8 96.2S223.1 138.5 223.1 196.2C223.1 234.6 246.2 269.2 276.9 284.6 288.5 392.3 353.8 473.1 457.7 511.5V673.1C426.9 692.3 407.7 723.1 407.7 761.5 407.7 819.2 453.8 861.5 507.7 861.5S607.7 815.4 607.7 761.5C607.7 723.1 588.5 692.3 557.7 673.1V511.5C661.5 473.1 726.9 392.3 738.5 284.6 769.2 265.4 792.3 234.6 792.3 196.2ZM326.9 161.5C346.2 161.5 361.5 176.9 361.5 196.2S346.2 226.9 326.9 226.9 292.3 215.4 292.3 196.2 307.7 161.5 326.9 161.5ZM507.7 796.2C488.5 796.2 473.1 780.8 473.1 761.5S488.5 726.9 507.7 726.9C526.9 726.9 542.3 742.3 542.3 761.5S526.9 796.2 507.7 796.2ZM692.3 161.5C711.5 161.5 726.9 176.9 726.9 196.2S711.5 226.9 692.3 226.9 657.7 211.5 657.7 192.3 673.1 161.5 692.3 161.5Z",
74 "width": 1000
74 "width": 1000
75 },
75 },
76 "search": [
76 "search": [
77 "fork"
77 "fork"
78 ]
78 ]
79 },
79 },
80 {
80 {
81 "uid": "65e66c3e7d74e2c345fb78fadd400d3f",
81 "uid": "65e66c3e7d74e2c345fb78fadd400d3f",
82 "css": "rhodecode",
82 "css": "rhodecode",
83 "code": 59441,
83 "code": 59441,
84 "src": "custom_icons",
84 "src": "custom_icons",
85 "selected": true,
85 "selected": true,
86 "svg": {
86 "svg": {
87 "path": "M174.6 216.8C173.4 220.9 172.2 225 171 229.1 168.1 239.1 165.2 249.1 162.3 259.1 158.7 271.6 155 284.2 151.4 296.7 148 308.4 144.6 320.1 141.2 331.8 139 339.3 136.8 346.8 134.7 354.3 134.4 355.4 134.1 356.5 133.7 357.6 133.7 357.7 133.9 358.2 134 358.3 134.3 359 134.5 359.7 134.8 360.5 137.2 367.3 139.7 374.1 142.1 381 146 392 149.9 403 153.9 414.1 158.3 426.5 162.8 439 167.2 451.4 171.1 462.5 175.1 473.6 179 484.7 181.5 491.7 184 498.6 186.4 505.6 186.8 506.7 187.2 507.7 187.5 508.8 187.8 509.6 188.6 510.4 189 511.1 192.8 516.9 196.5 522.6 200.3 528.4 206.5 537.9 212.7 547.4 219 556.9 226.2 567.9 233.4 578.9 240.6 590 247.3 600.3 254.1 610.6 260.8 620.9 265.6 628.2 270.4 635.6 275.2 642.9 276.4 644.8 277.6 646.6 278.9 648.5 279.2 649 279.5 649.5 279.8 649.8 282.7 652.6 285.5 655.4 288.4 658.2 294.6 664.3 300.9 670.5 307.1 676.6 315.5 684.9 323.9 693.2 332.4 701.4 341.8 710.6 351.2 719.9 360.6 729.1 369.8 738.1 378.9 747.1 388.1 756.1 395.8 763.7 403.6 771.3 411.3 778.9 416.4 783.9 421.5 788.9 426.6 793.9 428.2 795.5 429.8 797.3 431.6 798.6 438.9 803.9 446.1 809.2 453.4 814.5 463.7 822 473.9 829.5 484.2 837 487.6 839.5 491.1 842 494.5 844.5 495.3 845.1 496.1 845.7 496.9 846.3 497.2 846.5 497.2 846.6 497.6 846.4 504.7 842.7 511.8 839.1 518.9 835.4 530.3 829.5 541.7 823.6 553.1 817.7 559.2 814.5 565.4 811.4 571.5 808.2 571.9 808 572.3 807.1 572.6 806.8 573.7 805.4 574.8 804 576 802.5 580.2 797.2 584.3 791.9 588.5 786.7 594.7 778.9 600.8 771.1 607 763.3 614.5 753.8 622 744.3 629.5 734.8 637.7 724.5 645.8 714.1 654 703.8 662.1 693.5 670.3 683.2 678.4 672.9 685.9 663.5 693.3 654 700.8 644.6 706.9 636.9 713 629.2 719.1 621.5 723.2 616.4 727.2 611.2 731.3 606.1 732.7 604.4 734 602.6 735.4 600.9 735.2 600.8 734.8 600.8 734.6 600.7 733.8 600.5 733 600.4 732.2 600.2 729.1 599.6 726 598.9 722.9 598.2 718 597.1 713 596 708.1 594.8 701.5 593.2 694.9 591.5 688.3 589.7 680.2 587.5 672.2 585.2 664.1 582.9 654.7 580.1 645.4 577.2 636.1 574.1 625.6 570.6 615.2 567 604.8 563.3 593.4 559.1 582 554.8 570.8 550.2 558.6 545.3 546.6 540.1 534.6 534.8 521.9 529.1 509.3 523.1 496.8 516.8 483.7 510.2 470.7 503.4 457.9 496.2 444.6 488.7 431.4 480.9 418.5 472.8 405.1 464.4 392 455.6 379.1 446.4 365.9 437 352.9 427.1 340.3 416.9 327.4 406.4 314.8 395.5 302.7 384.2 290.3 372.6 278.3 360.6 266.8 348.1 255.1 335.3 243.8 322.1 233.2 308.4 222.3 294.4 212 279.9 202.4 265 192.5 249.7 183.4 233.9 175 217.8 175 217.4 174.8 217.1 174.6 216.8ZM172.1 214.2C170.7 218.7 169.3 223.3 167.8 227.8 164.5 238.5 161.1 249.2 157.8 259.9 153.9 272.4 150 285 146.1 297.5 143 307.5 139.9 317.4 136.7 327.4 135.9 330.1 135 332.7 134.2 335.4 134 336.1 133.6 336.7 133.8 337.4 135.4 342.2 137 347.1 138.6 351.9 141.9 361.9 145.2 371.8 148.6 381.8 152.7 394.1 156.8 406.5 160.9 418.8 164.9 430.8 168.9 442.8 172.9 454.8 175.9 463.7 178.8 472.6 181.8 481.4 182.6 483.8 183.4 486.2 184.2 488.7 184.4 489.4 184.6 490.1 184.9 490.8 187.2 495 189.5 499.2 191.8 503.4 196.8 512.6 201.9 521.8 206.9 531 213.2 542.4 219.4 553.9 225.7 565.3 231.7 576.2 237.6 587.1 243.6 598 247.8 605.6 251.9 613.2 256.1 620.8 257.3 623 258.2 625.4 259.9 627.2 264.1 631.7 268.3 636.2 272.5 640.7 280.2 648.9 287.9 657.2 295.5 665.4 304.5 675 313.5 684.7 322.4 694.3 330.5 703 338.6 711.7 346.7 720.4 351.8 725.8 356.8 731.3 361.9 736.7 363.5 738.4 365 740 366.6 741.6 372.3 747.3 378 753 383.7 758.7 392.5 767.5 401.2 776.2 410 785 419.1 794.1 428.3 803.3 437.4 812.4 444.2 819.2 451.1 826.1 457.9 832.9 459.6 834.6 461.3 836.3 463 838 463.3 838.3 463.6 838.6 463.8 838.8 463.9 838.9 465.1 838.7 465.3 838.6 475.9 837.2 486.5 835.8 497 834.5 505.6 833.4 514.1 832.3 522.7 831.2 523 831.2 523.7 830.1 523.9 829.9 525.1 828.6 526.3 827.2 527.6 825.9 532.1 820.9 536.7 815.9 541.2 810.9 547.9 803.5 554.6 796.1 561.4 788.7 569.6 779.7 577.7 770.7 585.9 761.8 594.8 752 603.6 742.3 612.5 732.5 621.3 722.8 630.1 713.1 639 703.4 647 694.5 655.1 685.7 663.1 676.8 669.6 669.6 676.2 662.4 682.7 655.2 687 650.5 691.3 645.8 695.6 641 696.6 639.9 697.7 638.7 698.7 637.6 698.9 637.4 699.6 636.9 699.6 636.6 699.6 636.5 696.6 635.7 696.5 635.7 693.5 634.8 690.4 633.9 687.4 633 682.6 631.5 677.8 630 673 628.4 666.6 626.3 660.1 624.1 653.8 621.8 645.9 619 638.1 616.1 630.3 613.1 621.2 609.6 612.1 606 603.1 602.2 592.9 598 582.8 593.6 572.8 589 561.8 584 550.8 578.8 540 573.4 528.3 567.6 516.7 561.6 505.2 555.3 493 548.7 480.9 541.8 469 534.6 456.5 527.1 444.1 519.3 431.9 511.2 419.2 502.8 406.7 494 394.5 484.9 381.8 475.5 369.5 465.8 357.4 455.7 345 445.3 332.8 434.6 321.1 423.4 309.1 412 297.4 400.2 286.2 388 274.7 375.5 263.7 362.6 253.2 349.3 242.5 335.7 232.3 321.7 222.8 307.2 213 292.4 203.9 277.2 195.5 261.7 186.8 246.5 179 230.5 172.1 214.2ZM169.5 204C168.8 207.8 168.1 211.6 167.3 215.4 165.5 224.9 163.7 234.5 161.9 244 159.5 256.5 157.1 269 154.7 281.5 152.3 294.2 149.8 307 147.4 319.7 145.5 329.9 143.5 340.1 141.6 350.3 140.7 355.2 139.7 360.1 138.8 365 138.7 365.7 139.1 366.4 139.3 367 140.2 369.6 141.1 372.2 142 374.8 145.4 384.5 148.7 394.3 152.1 404 156.4 416.4 160.7 428.7 165 441.1 168.8 452.1 172.6 463 176.4 474 178.3 479.5 180.2 485 182.1 490.5 182.3 491.2 182.7 491.8 183 492.4 184.2 494.8 185.4 497.1 186.5 499.5 190.9 508.4 195.4 517.2 199.8 526.1 205.6 537.7 211.4 549.3 217.2 560.9 222.7 571.9 228.2 583 233.8 594 237.4 601.2 241 608.3 244.6 615.5 245.2 616.6 245.7 617.7 246.3 618.8 246.7 619.6 247.6 620.4 248.2 621.1 252.8 626.6 257.4 632.1 262 637.7 269.5 646.7 276.9 655.6 284.4 664.6 292.8 674.7 301.3 684.9 309.7 695 317.2 704 324.8 713.1 332.3 722.1 337 727.8 341.8 733.5 346.5 739.1 347.2 740 347.9 740.8 348.7 741.7 348.9 741.9 349.2 742 349.4 742.2 350.2 742.7 350.9 743.2 351.7 743.7 358.7 748.5 365.8 753.3 372.8 758.1 383.3 765.3 393.9 772.5 404.4 779.7 414.6 786.6 424.7 793.6 434.9 800.5 440.8 804.5 446.7 808.6 452.7 812.6 456.3 815.1 459.5 818.1 462.9 820.8 472.5 828.7 482.1 836.7 491.7 844.6 498.5 850.2 505.4 855.9 512.2 861.5 512.8 862 512.7 861.9 513.3 861.3 514.2 860.3 515.2 859.2 516.1 858.2 520 853.9 524 849.6 527.9 845.3 534 838.6 540.2 831.9 546.3 825.2 554 816.8 561.7 808.3 569.4 799.9 578.1 790.4 586.7 781 595.4 771.5 604.4 761.7 613.3 751.9 622.3 742.1 630.9 732.6 639.6 723.2 648.2 713.7 655.9 705.3 663.6 696.9 671.3 688.5 677.4 681.8 683.5 675.1 689.6 668.4 693.5 664.1 697.4 659.9 701.3 655.6 702.4 654.4 703.5 653.2 704.6 652 704.6 652 704.6 652 704.6 652 704.6 652 704.6 652 704.6 652 704.6 652.1 701.6 651.3 701.5 651.3 698.5 650.5 695.5 649.5 692.6 648.6 687.9 647.1 683.1 645.5 678.4 643.8 672.1 641.6 665.8 639.2 659.5 636.9 651.8 634 644.1 630.9 636.4 627.8 627.5 624.1 618.6 620.3 609.7 616.4 599.7 612 589.8 607.4 580 602.7 569.2 597.5 558.4 592.1 547.7 586.6 536.2 580.6 524.8 574.4 513.4 568 501.4 561.2 489.5 554.2 477.7 546.9 465.3 539.3 453.1 531.4 441.1 523.3 428.6 514.8 416.3 506.1 404.2 497 391.7 487.7 379.5 478 367.5 468 355.2 457.8 343.2 447.2 331.5 436.3 319.6 425.2 308 413.6 296.8 401.7 285.4 389.6 274.5 377.1 264 364.3 253.3 351.2 243.2 337.8 233.6 323.9 223.8 309.8 214.6 295.4 206.1 280.5 197.4 265.4 189.4 249.9 182.1 234 177.7 224.2 173.5 214.2 169.5 204ZM866 183.5C863.9 179.4 861.1 176.2 857.1 174 851.9 171.1 846.2 168.9 840.7 166.5 829.5 161.7 818.2 157.4 806.7 153.4 783.6 145.4 760 138.9 736.3 132.9 711.7 126.7 687.1 120.9 662.3 115.7 637.1 110.4 611.7 105.6 586.3 101.4 561.2 97.2 536 93.1 510.5 91.1 497.8 90.1 485 89.9 472.4 91.3 465.9 92 459.4 93.2 453 94.2 446.6 95.2 440.1 96.2 433.7 97.3 408.2 101.5 382.8 106 357.4 111 332.2 115.9 307.1 121.2 282.1 126.9 257.2 132.5 232.6 139.2 208.4 147.3 196.3 151.4 184.2 155.8 172.3 160.5 166.4 162.8 160.5 165.2 154.6 167.7 151.7 168.9 148.8 170.2 145.8 171.4 143.2 172.5 140.6 173.5 138.1 174.7 134 176.7 130.6 179.7 128.3 183.6 127 185.8 126.2 188.2 125.3 190.6 124.2 193.6 123.1 196.6 122.1 199.6 118.1 211.5 114.9 223.7 112.5 236 107.7 260.4 106 285.4 106.8 310.2 107.2 322.7 108.2 335.3 109.7 347.7 111.2 360.2 112.7 372.8 115.1 385.2 119.8 410.4 126.7 435.1 134.8 459.3 138.9 471.4 143.3 483.5 147.9 495.4 152.2 506.5 157.5 517.3 162.7 528 173 549.2 184.4 569.8 196.6 589.9 208.8 609.9 221.9 629.3 235.7 648.1 249.5 666.8 264.1 685 279.3 702.6 295.3 721.1 311.7 739.2 328.6 756.9 345.6 774.8 363 792.2 381 809 398.9 825.9 417.4 842.2 436.4 857.8 445.6 865.4 454.9 872.8 464.2 880.2 473.6 887.7 483.1 895.1 492 903.2 494.3 905.2 496.5 907.3 498.7 909.5 498.9 909.7 499.7 910.8 500 910.8 500.2 910.8 500.5 910.8 500.7 910.8 501.2 910.8 502 911 502.5 910.8 507.3 907.1 512 903.3 516.8 899.6 526.2 892.1 535.6 884.6 544.9 876.9 563.3 861.7 581.4 846.2 599.2 830.3 616.9 814.5 634.1 798.2 651 781.5 667.9 764.7 684.4 747.5 700.3 729.7 716.3 711.8 731.8 693.4 746.5 674.4 761 655.7 774.8 636.5 787.8 616.8 800.7 597.2 812.8 577 823.8 556.2 835 535.1 845.2 513.5 854.3 491.4 863.4 469.1 871.2 446.3 877.3 423 883.4 399.9 887.8 376.4 890.3 352.7 892.9 328.6 893.4 304.3 892 280 891.8 276.9 891 273.8 890.3 270.7 889.7 267.7 889 264.6 888.4 261.6 887.2 255.7 886 249.9 884.7 244 882.3 233 879.7 222 876.5 211.1 873.4 201.8 870.1 192.5 866 183.5 863.5 178.4 878.8 211.7 866 183.5ZM814.8 393.5C808.1 418.2 799.5 442.5 789.4 466 780 487.9 770 509.6 758.5 530.5 747.4 550.7 735.1 570.3 722 589.3 708.8 608.4 694.7 626.8 680 644.8 664.8 663.4 649 681.5 632.7 699.1 615.9 717.3 598.5 734.9 580.5 752 562.5 769.1 544.1 785.7 525.1 801.6 515.7 809.5 506.1 817.3 496.5 824.9 496.1 825.2 495.2 826.3 494.7 826.3 494 826.3 493.3 826.3 492.6 826.3 492 826.3 491.4 825.5 491 825.1 490.5 824.6 490 824.1 489.5 823.6 488.4 822.6 487.2 821.5 486.1 820.5 481.6 816.6 476.9 813.1 472.2 809.4 469.9 807.6 467.6 805.7 465.3 803.8 463.1 801.9 461 799.8 458.8 797.8 454.2 793.7 449.7 789.6 445.2 785.5 435.9 777 426.6 768.5 417.5 759.8 408.4 751.1 399.5 742.3 390.9 733.2 386.7 728.8 382.7 724.3 378.4 720 374.2 715.8 370 711.5 365.8 707.2 349.1 690 332.9 672.5 317.4 654.3 301.8 636 286.9 617 273.1 597.3 259.2 577.5 246.4 556.9 234.5 535.8 222.8 515 212.1 493.7 202.6 471.8 193.1 449.9 184.8 427.4 177.9 404.6 176.1 398.6 174.4 392.6 173.1 386.5 171.7 380.1 170.6 373.6 169.6 367.1 167.6 354.2 166.3 341.2 165.5 328.2 164.7 315.3 164.3 302.3 164.5 289.3 164.7 276.7 165.9 264.2 167.5 251.7 167.9 248.5 168.3 245.4 168.7 242.2 168.9 240.6 169.1 239.1 169.3 237.5 169.5 235.9 169.6 234.3 169.8 232.7 170.1 230.3 171.1 228.1 171.7 225.7 172 224.5 172.2 223.2 172.2 221.9 172.2 220.8 172.8 220.1 173.6 219.5 174.6 218.8 175.6 218.3 176.5 217.5 177.1 217 177.6 216.6 178.4 216.3 179.2 216 180.1 215.7 180.9 215.3 183.9 214.2 186.8 213 189.8 211.9 195.7 209.7 201.6 207.5 207.6 205.3 231.3 196.7 255.3 189 279.7 182.4 292 179.1 304.3 176.1 316.7 173.5 322.9 172.2 329.1 170.6 335.4 169.3 341.7 167.9 348 166.6 354.3 165.4 379.8 160.4 405.4 156.3 431.1 152.5 444 150.6 457 148.8 470 147 473.2 146.6 476.5 146.1 479.7 145.7 481.3 145.5 482.8 145.3 484.4 145.1 485.7 144.9 487.1 145 488.4 145.1 493.9 145.1 499.5 145.3 504.9 146.3 506.2 146.5 507.4 146.8 508.6 147.1 510.1 147.5 511.5 147.8 513 148 516.1 148.4 519.2 148.9 522.3 149.3 528.6 150.2 534.8 151.1 541.1 152 553.7 153.8 566.4 155.7 579 157.7 604.4 161.7 629.7 166 654.8 171.4 680 176.8 705 183.2 729.7 190.3 742.1 193.9 754.4 197.7 766.6 201.7 772.7 203.7 778.7 205.8 784.7 207.9 787.7 209 790.7 210 793.7 211.1 795.1 211.6 796.6 212.1 798 212.7 798.7 213 799.4 213.2 800.1 213.5 800.8 213.8 801.9 214 802.4 214.5 803.6 215.7 805.3 216.5 806.3 217.9 806.8 218.7 807.1 219.5 807.2 220.5 807.3 221.2 807.2 221.8 807.4 222.5 807.7 223.4 807.9 224.3 808.1 225.2 809.8 231.5 811.2 237.9 812.3 244.4 813.4 250.8 814.1 257.2 814.5 263.6 814.7 266.8 814.8 270 814.9 273.2 814.9 274 814.9 274.7 814.9 275.5 814.9 276.3 815.2 277.1 815.3 277.8 815.7 279.5 816 281.1 816.4 282.8 821.3 306.5 822.7 330.7 820.7 354.8 819.6 367.7 817.6 380.7 814.8 393.5 807.1 421.7 822.5 357.6 814.8 393.5ZM617.6 393.5C616.1 389 614.6 384.5 613.1 379.9 612.9 379.3 612.7 378.7 612.5 378.1 612.4 377.7 612.5 377.1 612.4 376.7 612.3 376.1 612.2 375.5 612.1 374.9 611.8 373.8 611.4 372.8 610.8 371.9 609.7 370.1 608.1 368.5 606.5 367 604.7 365.2 602.4 362.7 599.6 362.7 601.6 360.7 604.3 360 606.5 358.3 607.6 357.4 608.5 356.5 609.7 355.7 610.5 355.2 611.6 354.7 612.1 353.8 612.3 353.4 612.4 352.9 612.4 352.5 612.9 352 613.3 351.5 613.7 350.9 614.4 349.8 614.7 348.6 614.9 347.3 615.1 345.1 615 342.9 615 340.7 615 338.4 615 336.1 615 333.8 615 331.4 615 329 614.4 326.6 613.1 321.5 610 316.8 606.4 313.1 604.7 311.4 603 309.9 601 308.6 598.3 306.9 595.5 305.5 592.7 304.1 589.9 302.7 586.9 301.8 583.8 301.4 581.4 301.1 579 301.1 576.6 301.1 573.9 301.1 571.2 301.1 568.5 301.1 556.2 301.1 543.8 301.1 531.5 301.1 526.9 301.1 522.3 301.1 517.7 301.1 516.9 301.1 516.1 301.1 515.2 301.1 515.1 301.1 515.2 305.3 515.2 305.6 515.2 308.8 515.2 311.9 515.2 315.1 515.2 316.2 515.2 317.3 515.2 318.4 515.2 318.9 515 319.1 515.5 319.1 516.7 319.1 528 319 528 319.2 528 327.2 528 335.2 528 343.2 528 355.8 528 368.3 528 380.9 528 384.6 528 388.3 528 392 528 392.2 528.1 393.4 527.9 393.4 525.4 393.4 522.8 393.4 520.3 393.4 518.9 393.4 517.6 393.4 516.2 393.4 515.9 393.4 515.2 393.2 515.2 393.6 515.2 395.7 515.2 397.8 515.2 400 515.2 401 515.2 414 515.2 414 524.7 414 534.3 414 543.8 414 549.3 414 554.8 414 560.2 414 561.4 414 562.5 414 563.7 414 564 414 563.8 411.1 563.8 410.7 563.8 405.1 563.8 399.6 563.8 394 563.8 393.4 563.9 393.5 563.3 393.5 562 393.5 560.7 393.5 559.3 393.5 557.8 393.5 556.3 393.5 554.8 393.5 554.6 393.5 553.5 393.7 553.5 393.4 553.5 388.4 553.5 383.4 553.5 378.4 553.5 375.6 553.5 372.9 553.5 370.1 553.5 369.4 553.5 368.8 553.5 368.1 553.5 367.7 554.2 367.9 554.5 367.9 557.4 367.9 560.2 367.9 563.1 367.9 565 367.9 566.9 367.9 568.8 367.9 570.1 367.9 571.6 367.7 572.8 368.1 573.9 368.4 574.8 369 575.7 369.7 576.8 370.6 578.3 371.8 578.9 373.1 579.2 373.8 579.2 374.5 579.2 375.3 579.2 376.6 579.6 377.7 580.2 378.9 580.7 380 581.3 381 581.6 382.2 581.7 382.6 581.7 383 581.8 383.4 581.9 384 582 384.6 582.1 385.1 583.1 390.9 584.2 396.6 585.2 402.4 585.6 404.9 586.1 407.3 586.5 409.8 586.6 410.3 586.7 410.8 586.8 411.3 586.8 411.4 587.2 411.4 587.4 411.4 597.8 411.4 608.3 411.4 618.7 411.4 619.2 411.4 619.6 411.4 620.1 411.4 620.2 411.4 620.2 410.7 620.2 410.6 620.2 408.2 620.2 405.7 620.2 403.3 620.2 398.3 620.2 393.3 620.2 388.4 620.2 388.4 620.2 388.4 620.2 388.4 619.3 390.1 618.5 391.8 617.6 393.5ZM592 339.7C592 342 589.2 342.8 587.7 344.1 587.4 344.3 587.1 344.6 586.9 344.8 586.7 344.8 586.4 344.8 586.2 344.9 585.8 345 585.4 345.2 585.1 345.4 584.4 345.9 583.9 346.6 583.2 347 582.1 347.5 580.7 347.3 579.6 347.3 577.9 347.3 576.3 347.3 574.6 347.3 573.9 347.3 573.2 347.3 572.5 347.3 569.5 347.3 566.4 347.3 563.4 347.3 563 347.3 558.8 347.4 558.8 347.2 558.8 337.9 558.8 328.5 558.8 319.2 558.8 319.1 571.7 319.2 573 319.2 577 319.2 581 319.1 584.9 320.1 586.4 320.5 587.8 321 589.2 321.6 590.1 322.1 591 323.2 591.6 324 593.1 325.7 594.1 327.8 594.5 330 594.6 330.7 594.6 331.3 594.6 332 594.3 332.6 594 333.2 593.7 333.9 593.3 334.7 592.9 335.5 592.6 336.3 592.1 337.4 592 338.5 592 339.7ZM722.6 393.5C722.6 384.2 722.6 374.9 722.6 365.6 722.6 357.1 720.9 348 714.6 341.9 707.5 335.1 696.4 333.9 687 334.7 685.1 334.9 683.2 335.3 681.4 336.1 680.4 336.5 679.5 336.9 678.6 337.6 678 338.1 677.3 338.5 676.7 338.8 673.6 340.4 670.5 341.6 668.8 344.9 668.8 335.9 668.8 326.8 668.8 317.8 668.8 311.9 668.8 306 668.8 300.1 668.8 298.4 668.8 296.6 668.8 294.9 668.8 294.4 669.1 293.7 668.5 293.7 657.9 293.7 647.3 293.7 636.7 293.7 635.5 293.7 634.2 293.7 633 293.7 633 293.7 633 297.8 633 298.1 633 303.4 633 308.7 633 314 633 314.3 633.8 314.2 634 314.2 635.4 314.2 636.7 314.2 638.1 314.2 640.6 314.2 643.2 314.2 645.7 314.2 645.9 314.2 645.8 319.4 645.8 319.8 645.8 331.2 645.8 342.6 645.8 353.9 645.8 364.9 645.8 375.8 645.8 386.8 645.8 388 645.8 389.2 645.8 390.3 645.8 391.2 645.7 391 644.6 391 641.6 391 638.7 391 635.7 391 634.8 391 633.9 391 633 391 632.9 391 632.9 391.9 632.9 392 632.9 397.7 632.9 403.4 632.9 409 632.9 409.8 632.9 410.5 632.9 411.3 632.9 411.5 633 411.5 633.2 411.5 634.5 411.5 635.9 411.5 637.2 411.5 649.1 411.5 661 411.5 672.9 411.5 673.4 411.5 681.5 411.5 681.5 411.5 681.5 406.5 681.5 401.5 681.5 396.5 681.5 394.7 681.5 392.9 681.5 391.1 681.5 391.1 675.6 391.1 675.2 391.1 674.8 391.1 668.7 391.1 668.7 391.1 668.7 389.8 668.7 388.5 668.7 387.3 668.7 381.2 668.7 375 668.7 368.9 668.7 366.5 668.7 364.2 668.7 361.8 668.7 361.3 668.7 360.9 668.7 360.4 668.7 360 670.3 358.8 670.6 358.5 671.7 357.5 672.8 356.5 674.2 355.8 674.7 355.5 675.3 355.3 675.8 355.3 676.5 355.2 676.8 354.8 677.4 354.3 678.5 353.5 679.7 353 681 352.8 683.6 352.4 685.8 352.7 687.9 354.2 689.1 355.1 690.1 356.1 691.2 357.2 692 358 692.7 358.8 693.3 359.8 694.2 361.6 694.3 363.7 694.3 365.7 694.4 369.3 694.3 372.9 694.3 376.6 694.3 387.8 694.3 399 694.3 410.3 694.3 410.9 694 411.6 694.7 411.6 696.4 411.6 698.1 411.6 699.8 411.6 706 411.6 712.3 411.6 718.5 411.6 722.4 411.6 726.3 411.6 730.2 411.6 730.2 411.6 730.2 398.5 730.2 397.5 730.2 395.4 730.2 393.3 730.2 391.2 727.8 391.8 725.2 392.6 722.6 393.5ZM730.3 270.6C727.9 270.6 725.4 270.6 723 270.6 722 270.6 721.1 270.6 720.1 270.6 720 270.6 719.6 271.3 719.6 271.4 716.5 276 713.4 280.6 710.4 285.3 708.9 287.5 707.4 289.7 706 292 705.6 292.5 705.3 293.1 704.9 293.6 704.6 294.1 704.8 294.9 704.8 295.4 704.8 295.6 704.8 298.8 704.8 298.8 705.4 298.8 706 298.8 706.5 298.8 709.5 298.8 712.4 298.8 715.4 298.8 717.8 298.8 720.1 298.8 722.5 298.8 723 298.8 722.7 299.6 722.7 299.9 722.7 301.4 722.7 302.9 722.7 304.4 722.7 305.8 722.7 307.1 722.7 308.5 722.7 309.3 723 309.1 723.8 309.1 725.3 309.1 726.9 309.1 728.4 309.1 728.7 309.1 730.3 309.3 730.3 308.9 730.3 306.2 730.3 303.4 730.3 300.7 730.3 300.4 730.1 298.8 730.5 298.8 731.9 298.8 733.3 298.8 734.6 298.8 734.7 298.8 735.4 298.8 735.4 298.8 735.4 298.2 735.4 297.7 735.4 297.1 735.4 296.9 735.4 293.7 735.4 293.7 734.1 293.7 732.9 293.7 731.6 293.7 731.1 293.7 730.3 294 730.3 293.4 730.3 285.7 730.3 278.1 730.3 270.6ZM722.6 285.9C722.6 287.2 722.6 288.5 722.6 289.7 722.6 290.6 722.6 291.4 722.6 292.3 722.6 292.5 722.7 293.4 722.6 293.6 722.5 293.7 721.6 293.6 721.5 293.6 720.6 293.6 719.7 293.6 718.8 293.6 717.5 293.6 716.2 293.6 715 293.6 716.3 291.6 717.7 289.6 719 287.6 719.6 286.7 720.2 285.9 720.8 285.1 722.4 283.1 722.6 280.7 722.6 278.2 722.6 280.8 722.6 283.4 722.6 285.9ZM763.6 288.5C760.9 285.8 756.2 285.9 752.6 285.9 752 285.9 751.4 285.9 750.8 285.9 750.8 285.9 750.8 284.8 750.8 284.7 750.8 283.4 750.8 282.1 750.8 280.8 750.8 280.7 763.9 280.8 765.2 280.8 765.7 280.8 766.2 281 766.2 280.5 766.2 279.1 766.2 277.7 766.2 276.4 766.2 275.3 766.2 274.2 766.2 273.2 766.2 273.2 764.9 273.2 764.9 273.2 759.2 273.2 753.5 273.2 747.8 273.2 747.2 273.2 746.5 273.2 745.9 273.2 745.7 273.2 745.7 273.6 745.7 273.8 745.4 276 745.1 278.2 744.9 280.4 744.3 284.8 743.8 289.3 743.2 293.7 747 293.7 751.5 293.1 755.1 294.8 757.9 296.2 759 299.4 758.5 302.4 758 305.8 754.4 306.5 751.5 306.5 749.6 306.5 743.2 307 743.2 303.9 742.3 306.5 741.5 309 740.6 311.6 742.3 311.6 744 312.6 745.6 313.2 748 314.1 750.5 314.3 753 314.1 756.9 313.8 761 312.5 763.6 309.4 766.3 306.1 766.2 301.9 766.2 297.8 766.2 295.6 766.2 293.3 765.7 291.1 765.5 290.1 765 288.6 763.7 288.5 763.7 288.5 763.6 288.5 763.6 288.5 761 285.9 766.2 288.5 763.6 288.5Z",
87 "path": "M174.6 216.8C173.4 220.9 172.2 225 171 229.1 168.1 239.1 165.2 249.1 162.3 259.1 158.7 271.6 155 284.2 151.4 296.7 148 308.4 144.6 320.1 141.2 331.8 139 339.3 136.8 346.8 134.7 354.3 134.4 355.4 134.1 356.5 133.7 357.6 133.7 357.7 133.9 358.2 134 358.3 134.3 359 134.5 359.7 134.8 360.5 137.2 367.3 139.7 374.1 142.1 381 146 392 149.9 403 153.9 414.1 158.3 426.5 162.8 439 167.2 451.4 171.1 462.5 175.1 473.6 179 484.7 181.5 491.7 184 498.6 186.4 505.6 186.8 506.7 187.2 507.7 187.5 508.8 187.8 509.6 188.6 510.4 189 511.1 192.8 516.9 196.5 522.6 200.3 528.4 206.5 537.9 212.7 547.4 219 556.9 226.2 567.9 233.4 578.9 240.6 590 247.3 600.3 254.1 610.6 260.8 620.9 265.6 628.2 270.4 635.6 275.2 642.9 276.4 644.8 277.6 646.6 278.9 648.5 279.2 649 279.5 649.5 279.8 649.8 282.7 652.6 285.5 655.4 288.4 658.2 294.6 664.3 300.9 670.5 307.1 676.6 315.5 684.9 323.9 693.2 332.4 701.4 341.8 710.6 351.2 719.9 360.6 729.1 369.8 738.1 378.9 747.1 388.1 756.1 395.8 763.7 403.6 771.3 411.3 778.9 416.4 783.9 421.5 788.9 426.6 793.9 428.2 795.5 429.8 797.3 431.6 798.6 438.9 803.9 446.1 809.2 453.4 814.5 463.7 822 473.9 829.5 484.2 837 487.6 839.5 491.1 842 494.5 844.5 495.3 845.1 496.1 845.7 496.9 846.3 497.2 846.5 497.2 846.6 497.6 846.4 504.7 842.7 511.8 839.1 518.9 835.4 530.3 829.5 541.7 823.6 553.1 817.7 559.2 814.5 565.4 811.4 571.5 808.2 571.9 808 572.3 807.1 572.6 806.8 573.7 805.4 574.8 804 576 802.5 580.2 797.2 584.3 791.9 588.5 786.7 594.7 778.9 600.8 771.1 607 763.3 614.5 753.8 622 744.3 629.5 734.8 637.7 724.5 645.8 714.1 654 703.8 662.1 693.5 670.3 683.2 678.4 672.9 685.9 663.5 693.3 654 700.8 644.6 706.9 636.9 713 629.2 719.1 621.5 723.2 616.4 727.2 611.2 731.3 606.1 732.7 604.4 734 602.6 735.4 600.9 735.2 600.8 734.8 600.8 734.6 600.7 733.8 600.5 733 600.4 732.2 600.2 729.1 599.6 726 598.9 722.9 598.2 718 597.1 713 596 708.1 594.8 701.5 593.2 694.9 591.5 688.3 589.7 680.2 587.5 672.2 585.2 664.1 582.9 654.7 580.1 645.4 577.2 636.1 574.1 625.6 570.6 615.2 567 604.8 563.3 593.4 559.1 582 554.8 570.8 550.2 558.6 545.3 546.6 540.1 534.6 534.8 521.9 529.1 509.3 523.1 496.8 516.8 483.7 510.2 470.7 503.4 457.9 496.2 444.6 488.7 431.4 480.9 418.5 472.8 405.1 464.4 392 455.6 379.1 446.4 365.9 437 352.9 427.1 340.3 416.9 327.4 406.4 314.8 395.5 302.7 384.2 290.3 372.6 278.3 360.6 266.8 348.1 255.1 335.3 243.8 322.1 233.2 308.4 222.3 294.4 212 279.9 202.4 265 192.5 249.7 183.4 233.9 175 217.8 175 217.4 174.8 217.1 174.6 216.8ZM172.1 214.2C170.7 218.7 169.3 223.3 167.8 227.8 164.5 238.5 161.1 249.2 157.8 259.9 153.9 272.4 150 285 146.1 297.5 143 307.5 139.9 317.4 136.7 327.4 135.9 330.1 135 332.7 134.2 335.4 134 336.1 133.6 336.7 133.8 337.4 135.4 342.2 137 347.1 138.6 351.9 141.9 361.9 145.2 371.8 148.6 381.8 152.7 394.1 156.8 406.5 160.9 418.8 164.9 430.8 168.9 442.8 172.9 454.8 175.9 463.7 178.8 472.6 181.8 481.4 182.6 483.8 183.4 486.2 184.2 488.7 184.4 489.4 184.6 490.1 184.9 490.8 187.2 495 189.5 499.2 191.8 503.4 196.8 512.6 201.9 521.8 206.9 531 213.2 542.4 219.4 553.9 225.7 565.3 231.7 576.2 237.6 587.1 243.6 598 247.8 605.6 251.9 613.2 256.1 620.8 257.3 623 258.2 625.4 259.9 627.2 264.1 631.7 268.3 636.2 272.5 640.7 280.2 648.9 287.9 657.2 295.5 665.4 304.5 675 313.5 684.7 322.4 694.3 330.5 703 338.6 711.7 346.7 720.4 351.8 725.8 356.8 731.3 361.9 736.7 363.5 738.4 365 740 366.6 741.6 372.3 747.3 378 753 383.7 758.7 392.5 767.5 401.2 776.2 410 785 419.1 794.1 428.3 803.3 437.4 812.4 444.2 819.2 451.1 826.1 457.9 832.9 459.6 834.6 461.3 836.3 463 838 463.3 838.3 463.6 838.6 463.8 838.8 463.9 838.9 465.1 838.7 465.3 838.6 475.9 837.2 486.5 835.8 497 834.5 505.6 833.4 514.1 832.3 522.7 831.2 523 831.2 523.7 830.1 523.9 829.9 525.1 828.6 526.3 827.2 527.6 825.9 532.1 820.9 536.7 815.9 541.2 810.9 547.9 803.5 554.6 796.1 561.4 788.7 569.6 779.7 577.7 770.7 585.9 761.8 594.8 752 603.6 742.3 612.5 732.5 621.3 722.8 630.1 713.1 639 703.4 647 694.5 655.1 685.7 663.1 676.8 669.6 669.6 676.2 662.4 682.7 655.2 687 650.5 691.3 645.8 695.6 641 696.6 639.9 697.7 638.7 698.7 637.6 698.9 637.4 699.6 636.9 699.6 636.6 699.6 636.5 696.6 635.7 696.5 635.7 693.5 634.8 690.4 633.9 687.4 633 682.6 631.5 677.8 630 673 628.4 666.6 626.3 660.1 624.1 653.8 621.8 645.9 619 638.1 616.1 630.3 613.1 621.2 609.6 612.1 606 603.1 602.2 592.9 598 582.8 593.6 572.8 589 561.8 584 550.8 578.8 540 573.4 528.3 567.6 516.7 561.6 505.2 555.3 493 548.7 480.9 541.8 469 534.6 456.5 527.1 444.1 519.3 431.9 511.2 419.2 502.8 406.7 494 394.5 484.9 381.8 475.5 369.5 465.8 357.4 455.7 345 445.3 332.8 434.6 321.1 423.4 309.1 412 297.4 400.2 286.2 388 274.7 375.5 263.7 362.6 253.2 349.3 242.5 335.7 232.3 321.7 222.8 307.2 213 292.4 203.9 277.2 195.5 261.7 186.8 246.5 179 230.5 172.1 214.2ZM169.5 204C168.8 207.8 168.1 211.6 167.3 215.4 165.5 224.9 163.7 234.5 161.9 244 159.5 256.5 157.1 269 154.7 281.5 152.3 294.2 149.8 307 147.4 319.7 145.5 329.9 143.5 340.1 141.6 350.3 140.7 355.2 139.7 360.1 138.8 365 138.7 365.7 139.1 366.4 139.3 367 140.2 369.6 141.1 372.2 142 374.8 145.4 384.5 148.7 394.3 152.1 404 156.4 416.4 160.7 428.7 165 441.1 168.8 452.1 172.6 463 176.4 474 178.3 479.5 180.2 485 182.1 490.5 182.3 491.2 182.7 491.8 183 492.4 184.2 494.8 185.4 497.1 186.5 499.5 190.9 508.4 195.4 517.2 199.8 526.1 205.6 537.7 211.4 549.3 217.2 560.9 222.7 571.9 228.2 583 233.8 594 237.4 601.2 241 608.3 244.6 615.5 245.2 616.6 245.7 617.7 246.3 618.8 246.7 619.6 247.6 620.4 248.2 621.1 252.8 626.6 257.4 632.1 262 637.7 269.5 646.7 276.9 655.6 284.4 664.6 292.8 674.7 301.3 684.9 309.7 695 317.2 704 324.8 713.1 332.3 722.1 337 727.8 341.8 733.5 346.5 739.1 347.2 740 347.9 740.8 348.7 741.7 348.9 741.9 349.2 742 349.4 742.2 350.2 742.7 350.9 743.2 351.7 743.7 358.7 748.5 365.8 753.3 372.8 758.1 383.3 765.3 393.9 772.5 404.4 779.7 414.6 786.6 424.7 793.6 434.9 800.5 440.8 804.5 446.7 808.6 452.7 812.6 456.3 815.1 459.5 818.1 462.9 820.8 472.5 828.7 482.1 836.7 491.7 844.6 498.5 850.2 505.4 855.9 512.2 861.5 512.8 862 512.7 861.9 513.3 861.3 514.2 860.3 515.2 859.2 516.1 858.2 520 853.9 524 849.6 527.9 845.3 534 838.6 540.2 831.9 546.3 825.2 554 816.8 561.7 808.3 569.4 799.9 578.1 790.4 586.7 781 595.4 771.5 604.4 761.7 613.3 751.9 622.3 742.1 630.9 732.6 639.6 723.2 648.2 713.7 655.9 705.3 663.6 696.9 671.3 688.5 677.4 681.8 683.5 675.1 689.6 668.4 693.5 664.1 697.4 659.9 701.3 655.6 702.4 654.4 703.5 653.2 704.6 652 704.6 652 704.6 652 704.6 652 704.6 652 704.6 652 704.6 652 704.6 652.1 701.6 651.3 701.5 651.3 698.5 650.5 695.5 649.5 692.6 648.6 687.9 647.1 683.1 645.5 678.4 643.8 672.1 641.6 665.8 639.2 659.5 636.9 651.8 634 644.1 630.9 636.4 627.8 627.5 624.1 618.6 620.3 609.7 616.4 599.7 612 589.8 607.4 580 602.7 569.2 597.5 558.4 592.1 547.7 586.6 536.2 580.6 524.8 574.4 513.4 568 501.4 561.2 489.5 554.2 477.7 546.9 465.3 539.3 453.1 531.4 441.1 523.3 428.6 514.8 416.3 506.1 404.2 497 391.7 487.7 379.5 478 367.5 468 355.2 457.8 343.2 447.2 331.5 436.3 319.6 425.2 308 413.6 296.8 401.7 285.4 389.6 274.5 377.1 264 364.3 253.3 351.2 243.2 337.8 233.6 323.9 223.8 309.8 214.6 295.4 206.1 280.5 197.4 265.4 189.4 249.9 182.1 234 177.7 224.2 173.5 214.2 169.5 204ZM866 183.5C863.9 179.4 861.1 176.2 857.1 174 851.9 171.1 846.2 168.9 840.7 166.5 829.5 161.7 818.2 157.4 806.7 153.4 783.6 145.4 760 138.9 736.3 132.9 711.7 126.7 687.1 120.9 662.3 115.7 637.1 110.4 611.7 105.6 586.3 101.4 561.2 97.2 536 93.1 510.5 91.1 497.8 90.1 485 89.9 472.4 91.3 465.9 92 459.4 93.2 453 94.2 446.6 95.2 440.1 96.2 433.7 97.3 408.2 101.5 382.8 106 357.4 111 332.2 115.9 307.1 121.2 282.1 126.9 257.2 132.5 232.6 139.2 208.4 147.3 196.3 151.4 184.2 155.8 172.3 160.5 166.4 162.8 160.5 165.2 154.6 167.7 151.7 168.9 148.8 170.2 145.8 171.4 143.2 172.5 140.6 173.5 138.1 174.7 134 176.7 130.6 179.7 128.3 183.6 127 185.8 126.2 188.2 125.3 190.6 124.2 193.6 123.1 196.6 122.1 199.6 118.1 211.5 114.9 223.7 112.5 236 107.7 260.4 106 285.4 106.8 310.2 107.2 322.7 108.2 335.3 109.7 347.7 111.2 360.2 112.7 372.8 115.1 385.2 119.8 410.4 126.7 435.1 134.8 459.3 138.9 471.4 143.3 483.5 147.9 495.4 152.2 506.5 157.5 517.3 162.7 528 173 549.2 184.4 569.8 196.6 589.9 208.8 609.9 221.9 629.3 235.7 648.1 249.5 666.8 264.1 685 279.3 702.6 295.3 721.1 311.7 739.2 328.6 756.9 345.6 774.8 363 792.2 381 809 398.9 825.9 417.4 842.2 436.4 857.8 445.6 865.4 454.9 872.8 464.2 880.2 473.6 887.7 483.1 895.1 492 903.2 494.3 905.2 496.5 907.3 498.7 909.5 498.9 909.7 499.7 910.8 500 910.8 500.2 910.8 500.5 910.8 500.7 910.8 501.2 910.8 502 911 502.5 910.8 507.3 907.1 512 903.3 516.8 899.6 526.2 892.1 535.6 884.6 544.9 876.9 563.3 861.7 581.4 846.2 599.2 830.3 616.9 814.5 634.1 798.2 651 781.5 667.9 764.7 684.4 747.5 700.3 729.7 716.3 711.8 731.8 693.4 746.5 674.4 761 655.7 774.8 636.5 787.8 616.8 800.7 597.2 812.8 577 823.8 556.2 835 535.1 845.2 513.5 854.3 491.4 863.4 469.1 871.2 446.3 877.3 423 883.4 399.9 887.8 376.4 890.3 352.7 892.9 328.6 893.4 304.3 892 280 891.8 276.9 891 273.8 890.3 270.7 889.7 267.7 889 264.6 888.4 261.6 887.2 255.7 886 249.9 884.7 244 882.3 233 879.7 222 876.5 211.1 873.4 201.8 870.1 192.5 866 183.5 863.5 178.4 878.8 211.7 866 183.5ZM814.8 393.5C808.1 418.2 799.5 442.5 789.4 466 780 487.9 770 509.6 758.5 530.5 747.4 550.7 735.1 570.3 722 589.3 708.8 608.4 694.7 626.8 680 644.8 664.8 663.4 649 681.5 632.7 699.1 615.9 717.3 598.5 734.9 580.5 752 562.5 769.1 544.1 785.7 525.1 801.6 515.7 809.5 506.1 817.3 496.5 824.9 496.1 825.2 495.2 826.3 494.7 826.3 494 826.3 493.3 826.3 492.6 826.3 492 826.3 491.4 825.5 491 825.1 490.5 824.6 490 824.1 489.5 823.6 488.4 822.6 487.2 821.5 486.1 820.5 481.6 816.6 476.9 813.1 472.2 809.4 469.9 807.6 467.6 805.7 465.3 803.8 463.1 801.9 461 799.8 458.8 797.8 454.2 793.7 449.7 789.6 445.2 785.5 435.9 777 426.6 768.5 417.5 759.8 408.4 751.1 399.5 742.3 390.9 733.2 386.7 728.8 382.7 724.3 378.4 720 374.2 715.8 370 711.5 365.8 707.2 349.1 690 332.9 672.5 317.4 654.3 301.8 636 286.9 617 273.1 597.3 259.2 577.5 246.4 556.9 234.5 535.8 222.8 515 212.1 493.7 202.6 471.8 193.1 449.9 184.8 427.4 177.9 404.6 176.1 398.6 174.4 392.6 173.1 386.5 171.7 380.1 170.6 373.6 169.6 367.1 167.6 354.2 166.3 341.2 165.5 328.2 164.7 315.3 164.3 302.3 164.5 289.3 164.7 276.7 165.9 264.2 167.5 251.7 167.9 248.5 168.3 245.4 168.7 242.2 168.9 240.6 169.1 239.1 169.3 237.5 169.5 235.9 169.6 234.3 169.8 232.7 170.1 230.3 171.1 228.1 171.7 225.7 172 224.5 172.2 223.2 172.2 221.9 172.2 220.8 172.8 220.1 173.6 219.5 174.6 218.8 175.6 218.3 176.5 217.5 177.1 217 177.6 216.6 178.4 216.3 179.2 216 180.1 215.7 180.9 215.3 183.9 214.2 186.8 213 189.8 211.9 195.7 209.7 201.6 207.5 207.6 205.3 231.3 196.7 255.3 189 279.7 182.4 292 179.1 304.3 176.1 316.7 173.5 322.9 172.2 329.1 170.6 335.4 169.3 341.7 167.9 348 166.6 354.3 165.4 379.8 160.4 405.4 156.3 431.1 152.5 444 150.6 457 148.8 470 147 473.2 146.6 476.5 146.1 479.7 145.7 481.3 145.5 482.8 145.3 484.4 145.1 485.7 144.9 487.1 145 488.4 145.1 493.9 145.1 499.5 145.3 504.9 146.3 506.2 146.5 507.4 146.8 508.6 147.1 510.1 147.5 511.5 147.8 513 148 516.1 148.4 519.2 148.9 522.3 149.3 528.6 150.2 534.8 151.1 541.1 152 553.7 153.8 566.4 155.7 579 157.7 604.4 161.7 629.7 166 654.8 171.4 680 176.8 705 183.2 729.7 190.3 742.1 193.9 754.4 197.7 766.6 201.7 772.7 203.7 778.7 205.8 784.7 207.9 787.7 209 790.7 210 793.7 211.1 795.1 211.6 796.6 212.1 798 212.7 798.7 213 799.4 213.2 800.1 213.5 800.8 213.8 801.9 214 802.4 214.5 803.6 215.7 805.3 216.5 806.3 217.9 806.8 218.7 807.1 219.5 807.2 220.5 807.3 221.2 807.2 221.8 807.4 222.5 807.7 223.4 807.9 224.3 808.1 225.2 809.8 231.5 811.2 237.9 812.3 244.4 813.4 250.8 814.1 257.2 814.5 263.6 814.7 266.8 814.8 270 814.9 273.2 814.9 274 814.9 274.7 814.9 275.5 814.9 276.3 815.2 277.1 815.3 277.8 815.7 279.5 816 281.1 816.4 282.8 821.3 306.5 822.7 330.7 820.7 354.8 819.6 367.7 817.6 380.7 814.8 393.5 807.1 421.7 822.5 357.6 814.8 393.5ZM617.6 393.5C616.1 389 614.6 384.5 613.1 379.9 612.9 379.3 612.7 378.7 612.5 378.1 612.4 377.7 612.5 377.1 612.4 376.7 612.3 376.1 612.2 375.5 612.1 374.9 611.8 373.8 611.4 372.8 610.8 371.9 609.7 370.1 608.1 368.5 606.5 367 604.7 365.2 602.4 362.7 599.6 362.7 601.6 360.7 604.3 360 606.5 358.3 607.6 357.4 608.5 356.5 609.7 355.7 610.5 355.2 611.6 354.7 612.1 353.8 612.3 353.4 612.4 352.9 612.4 352.5 612.9 352 613.3 351.5 613.7 350.9 614.4 349.8 614.7 348.6 614.9 347.3 615.1 345.1 615 342.9 615 340.7 615 338.4 615 336.1 615 333.8 615 331.4 615 329 614.4 326.6 613.1 321.5 610 316.8 606.4 313.1 604.7 311.4 603 309.9 601 308.6 598.3 306.9 595.5 305.5 592.7 304.1 589.9 302.7 586.9 301.8 583.8 301.4 581.4 301.1 579 301.1 576.6 301.1 573.9 301.1 571.2 301.1 568.5 301.1 556.2 301.1 543.8 301.1 531.5 301.1 526.9 301.1 522.3 301.1 517.7 301.1 516.9 301.1 516.1 301.1 515.2 301.1 515.1 301.1 515.2 305.3 515.2 305.6 515.2 308.8 515.2 311.9 515.2 315.1 515.2 316.2 515.2 317.3 515.2 318.4 515.2 318.9 515 319.1 515.5 319.1 516.7 319.1 528 319 528 319.2 528 327.2 528 335.2 528 343.2 528 355.8 528 368.3 528 380.9 528 384.6 528 388.3 528 392 528 392.2 528.1 393.4 527.9 393.4 525.4 393.4 522.8 393.4 520.3 393.4 518.9 393.4 517.6 393.4 516.2 393.4 515.9 393.4 515.2 393.2 515.2 393.6 515.2 395.7 515.2 397.8 515.2 400 515.2 401 515.2 414 515.2 414 524.7 414 534.3 414 543.8 414 549.3 414 554.8 414 560.2 414 561.4 414 562.5 414 563.7 414 564 414 563.8 411.1 563.8 410.7 563.8 405.1 563.8 399.6 563.8 394 563.8 393.4 563.9 393.5 563.3 393.5 562 393.5 560.7 393.5 559.3 393.5 557.8 393.5 556.3 393.5 554.8 393.5 554.6 393.5 553.5 393.7 553.5 393.4 553.5 388.4 553.5 383.4 553.5 378.4 553.5 375.6 553.5 372.9 553.5 370.1 553.5 369.4 553.5 368.8 553.5 368.1 553.5 367.7 554.2 367.9 554.5 367.9 557.4 367.9 560.2 367.9 563.1 367.9 565 367.9 566.9 367.9 568.8 367.9 570.1 367.9 571.6 367.7 572.8 368.1 573.9 368.4 574.8 369 575.7 369.7 576.8 370.6 578.3 371.8 578.9 373.1 579.2 373.8 579.2 374.5 579.2 375.3 579.2 376.6 579.6 377.7 580.2 378.9 580.7 380 581.3 381 581.6 382.2 581.7 382.6 581.7 383 581.8 383.4 581.9 384 582 384.6 582.1 385.1 583.1 390.9 584.2 396.6 585.2 402.4 585.6 404.9 586.1 407.3 586.5 409.8 586.6 410.3 586.7 410.8 586.8 411.3 586.8 411.4 587.2 411.4 587.4 411.4 597.8 411.4 608.3 411.4 618.7 411.4 619.2 411.4 619.6 411.4 620.1 411.4 620.2 411.4 620.2 410.7 620.2 410.6 620.2 408.2 620.2 405.7 620.2 403.3 620.2 398.3 620.2 393.3 620.2 388.4 620.2 388.4 620.2 388.4 620.2 388.4 619.3 390.1 618.5 391.8 617.6 393.5ZM592 339.7C592 342 589.2 342.8 587.7 344.1 587.4 344.3 587.1 344.6 586.9 344.8 586.7 344.8 586.4 344.8 586.2 344.9 585.8 345 585.4 345.2 585.1 345.4 584.4 345.9 583.9 346.6 583.2 347 582.1 347.5 580.7 347.3 579.6 347.3 577.9 347.3 576.3 347.3 574.6 347.3 573.9 347.3 573.2 347.3 572.5 347.3 569.5 347.3 566.4 347.3 563.4 347.3 563 347.3 558.8 347.4 558.8 347.2 558.8 337.9 558.8 328.5 558.8 319.2 558.8 319.1 571.7 319.2 573 319.2 577 319.2 581 319.1 584.9 320.1 586.4 320.5 587.8 321 589.2 321.6 590.1 322.1 591 323.2 591.6 324 593.1 325.7 594.1 327.8 594.5 330 594.6 330.7 594.6 331.3 594.6 332 594.3 332.6 594 333.2 593.7 333.9 593.3 334.7 592.9 335.5 592.6 336.3 592.1 337.4 592 338.5 592 339.7ZM722.6 393.5C722.6 384.2 722.6 374.9 722.6 365.6 722.6 357.1 720.9 348 714.6 341.9 707.5 335.1 696.4 333.9 687 334.7 685.1 334.9 683.2 335.3 681.4 336.1 680.4 336.5 679.5 336.9 678.6 337.6 678 338.1 677.3 338.5 676.7 338.8 673.6 340.4 670.5 341.6 668.8 344.9 668.8 335.9 668.8 326.8 668.8 317.8 668.8 311.9 668.8 306 668.8 300.1 668.8 298.4 668.8 296.6 668.8 294.9 668.8 294.4 669.1 293.7 668.5 293.7 657.9 293.7 647.3 293.7 636.7 293.7 635.5 293.7 634.2 293.7 633 293.7 633 293.7 633 297.8 633 298.1 633 303.4 633 308.7 633 314 633 314.3 633.8 314.2 634 314.2 635.4 314.2 636.7 314.2 638.1 314.2 640.6 314.2 643.2 314.2 645.7 314.2 645.9 314.2 645.8 319.4 645.8 319.8 645.8 331.2 645.8 342.6 645.8 353.9 645.8 364.9 645.8 375.8 645.8 386.8 645.8 388 645.8 389.2 645.8 390.3 645.8 391.2 645.7 391 644.6 391 641.6 391 638.7 391 635.7 391 634.8 391 633.9 391 633 391 632.9 391 632.9 391.9 632.9 392 632.9 397.7 632.9 403.4 632.9 409 632.9 409.8 632.9 410.5 632.9 411.3 632.9 411.5 633 411.5 633.2 411.5 634.5 411.5 635.9 411.5 637.2 411.5 649.1 411.5 661 411.5 672.9 411.5 673.4 411.5 681.5 411.5 681.5 411.5 681.5 406.5 681.5 401.5 681.5 396.5 681.5 394.7 681.5 392.9 681.5 391.1 681.5 391.1 675.6 391.1 675.2 391.1 674.8 391.1 668.7 391.1 668.7 391.1 668.7 389.8 668.7 388.5 668.7 387.3 668.7 381.2 668.7 375 668.7 368.9 668.7 366.5 668.7 364.2 668.7 361.8 668.7 361.3 668.7 360.9 668.7 360.4 668.7 360 670.3 358.8 670.6 358.5 671.7 357.5 672.8 356.5 674.2 355.8 674.7 355.5 675.3 355.3 675.8 355.3 676.5 355.2 676.8 354.8 677.4 354.3 678.5 353.5 679.7 353 681 352.8 683.6 352.4 685.8 352.7 687.9 354.2 689.1 355.1 690.1 356.1 691.2 357.2 692 358 692.7 358.8 693.3 359.8 694.2 361.6 694.3 363.7 694.3 365.7 694.4 369.3 694.3 372.9 694.3 376.6 694.3 387.8 694.3 399 694.3 410.3 694.3 410.9 694 411.6 694.7 411.6 696.4 411.6 698.1 411.6 699.8 411.6 706 411.6 712.3 411.6 718.5 411.6 722.4 411.6 726.3 411.6 730.2 411.6 730.2 411.6 730.2 398.5 730.2 397.5 730.2 395.4 730.2 393.3 730.2 391.2 727.8 391.8 725.2 392.6 722.6 393.5ZM730.3 270.6C727.9 270.6 725.4 270.6 723 270.6 722 270.6 721.1 270.6 720.1 270.6 720 270.6 719.6 271.3 719.6 271.4 716.5 276 713.4 280.6 710.4 285.3 708.9 287.5 707.4 289.7 706 292 705.6 292.5 705.3 293.1 704.9 293.6 704.6 294.1 704.8 294.9 704.8 295.4 704.8 295.6 704.8 298.8 704.8 298.8 705.4 298.8 706 298.8 706.5 298.8 709.5 298.8 712.4 298.8 715.4 298.8 717.8 298.8 720.1 298.8 722.5 298.8 723 298.8 722.7 299.6 722.7 299.9 722.7 301.4 722.7 302.9 722.7 304.4 722.7 305.8 722.7 307.1 722.7 308.5 722.7 309.3 723 309.1 723.8 309.1 725.3 309.1 726.9 309.1 728.4 309.1 728.7 309.1 730.3 309.3 730.3 308.9 730.3 306.2 730.3 303.4 730.3 300.7 730.3 300.4 730.1 298.8 730.5 298.8 731.9 298.8 733.3 298.8 734.6 298.8 734.7 298.8 735.4 298.8 735.4 298.8 735.4 298.2 735.4 297.7 735.4 297.1 735.4 296.9 735.4 293.7 735.4 293.7 734.1 293.7 732.9 293.7 731.6 293.7 731.1 293.7 730.3 294 730.3 293.4 730.3 285.7 730.3 278.1 730.3 270.6ZM722.6 285.9C722.6 287.2 722.6 288.5 722.6 289.7 722.6 290.6 722.6 291.4 722.6 292.3 722.6 292.5 722.7 293.4 722.6 293.6 722.5 293.7 721.6 293.6 721.5 293.6 720.6 293.6 719.7 293.6 718.8 293.6 717.5 293.6 716.2 293.6 715 293.6 716.3 291.6 717.7 289.6 719 287.6 719.6 286.7 720.2 285.9 720.8 285.1 722.4 283.1 722.6 280.7 722.6 278.2 722.6 280.8 722.6 283.4 722.6 285.9ZM763.6 288.5C760.9 285.8 756.2 285.9 752.6 285.9 752 285.9 751.4 285.9 750.8 285.9 750.8 285.9 750.8 284.8 750.8 284.7 750.8 283.4 750.8 282.1 750.8 280.8 750.8 280.7 763.9 280.8 765.2 280.8 765.7 280.8 766.2 281 766.2 280.5 766.2 279.1 766.2 277.7 766.2 276.4 766.2 275.3 766.2 274.2 766.2 273.2 766.2 273.2 764.9 273.2 764.9 273.2 759.2 273.2 753.5 273.2 747.8 273.2 747.2 273.2 746.5 273.2 745.9 273.2 745.7 273.2 745.7 273.6 745.7 273.8 745.4 276 745.1 278.2 744.9 280.4 744.3 284.8 743.8 289.3 743.2 293.7 747 293.7 751.5 293.1 755.1 294.8 757.9 296.2 759 299.4 758.5 302.4 758 305.8 754.4 306.5 751.5 306.5 749.6 306.5 743.2 307 743.2 303.9 742.3 306.5 741.5 309 740.6 311.6 742.3 311.6 744 312.6 745.6 313.2 748 314.1 750.5 314.3 753 314.1 756.9 313.8 761 312.5 763.6 309.4 766.3 306.1 766.2 301.9 766.2 297.8 766.2 295.6 766.2 293.3 765.7 291.1 765.5 290.1 765 288.6 763.7 288.5 763.7 288.5 763.6 288.5 763.6 288.5 761 285.9 766.2 288.5 763.6 288.5Z",
88 "width": 1000
88 "width": 1000
89 },
89 },
90 "search": [
90 "search": [
91 "rhodecode"
91 "rhodecode"
92 ]
92 ]
93 },
93 },
94 {
94 {
95 "uid": "e5ad8728e6d6290aff4b6ffcfcaa9167",
95 "uid": "e5ad8728e6d6290aff4b6ffcfcaa9167",
96 "css": "up",
96 "css": "up",
97 "code": 59442,
97 "code": 59442,
98 "src": "custom_icons",
98 "src": "custom_icons",
99 "selected": true,
99 "selected": true,
100 "svg": {
100 "svg": {
101 "path": "M686.5 595.8L513.6 379.1C506.3 369.9 492.4 369.9 485.1 379.1L312.2 595.8C302.7 607.8 311.2 625.4 326.5 625.4H672.2C687.5 625.4 696 607.8 686.5 595.8Z",
101 "path": "M686.5 595.8L513.6 379.1C506.3 369.9 492.4 369.9 485.1 379.1L312.2 595.8C302.7 607.8 311.2 625.4 326.5 625.4H672.2C687.5 625.4 696 607.8 686.5 595.8Z",
102 "width": 1000
102 "width": 1000
103 },
103 },
104 "search": [
104 "search": [
105 "up"
105 "up"
106 ]
106 ]
107 },
107 },
108 {
108 {
109 "uid": "6e459e39444c93a2c017f258186765d6",
109 "uid": "6e459e39444c93a2c017f258186765d6",
110 "css": "unlock",
110 "css": "unlock",
111 "code": 59399,
111 "code": 59399,
112 "src": "custom_icons",
112 "src": "custom_icons",
113 "selected": true,
113 "selected": true,
114 "svg": {
114 "svg": {
115 "path": "M780.8 434.6H396.2V342.3C396.2 284.6 438.5 238.5 492.3 226.9 492.3 226.9 492.3 226.9 496.2 226.9 503.8 226.9 507.7 226.9 515.4 226.9 515.4 226.9 519.2 226.9 519.2 226.9 519.2 226.9 519.2 226.9 523.1 226.9 530.8 226.9 538.5 226.9 546.2 230.8 546.2 230.8 546.2 230.8 546.2 230.8 553.8 230.8 557.7 234.6 565.4 238.5 565.4 238.5 569.2 238.5 569.2 242.3 573.1 246.2 580.8 246.2 584.6 250 584.6 250 584.6 250 584.6 250 588.5 253.8 596.2 257.7 600 261.5 600 261.5 603.8 265.4 603.8 265.4 607.7 269.2 611.5 273.1 615.4 276.9 615.4 276.9 615.4 276.9 619.2 280.8 623.1 284.6 626.9 292.3 630.8 300 630.8 300 630.8 303.8 630.8 303.8 634.6 307.7 634.6 315.4 634.6 319.2 634.6 319.2 634.6 323.1 634.6 323.1 634.6 323.1 634.6 323.1 634.6 326.9 638.5 338.5 646.2 346.2 657.7 346.2H715.4C730.8 346.2 742.3 334.6 738.5 319.2 738.5 319.2 738.5 319.2 738.5 319.2 738.5 319.2 738.5 315.4 738.5 315.4 738.5 307.7 734.6 303.8 734.6 296.2 734.6 292.3 734.6 292.3 730.8 288.5 730.8 273.1 730.8 269.2 726.9 261.5 726.9 261.5 726.9 257.7 723.1 257.7 719.2 250 715.4 242.3 711.5 234.6 711.5 234.6 707.7 230.8 707.7 230.8 703.8 223.1 700 219.2 696.2 215.4 696.2 211.5 692.3 211.5 692.3 207.7 688.5 203.8 684.6 196.2 680.8 192.3 680.8 192.3 676.9 188.5 676.9 188.5 669.2 180.8 665.4 176.9 657.7 169.2 657.7 169.2 653.8 169.2 653.8 165.4 650 161.5 642.3 157.7 634.6 153.8 630.8 153.8 630.8 150 626.9 150 623.1 146.2 615.4 142.3 611.5 142.3 607.7 142.3 607.7 138.5 603.8 138.5 596.2 134.6 588.5 130.8 580.8 130.8 580.8 130.8 580.8 130.8 580.8 130.8 573.1 126.9 565.4 126.9 553.8 123.1 550 123.1 550 123.1 546.2 123.1 538.5 123.1 534.6 123.1 526.9 119.2 523.1 119.2 519.2 119.2 519.2 119.2 511.5 119.2 503.8 119.2 496.2 119.2 496.2 119.2 492.3 119.2 492.3 119.2 484.6 119.2 476.9 123.1 465.4 123.1 461.5 123.1 453.8 126.9 450 126.9 450 126.9 446.2 126.9 446.2 126.9 353.8 153.8 288.5 242.3 288.5 342.3V434.6H246.2C230.8 434.6 223.1 446.2 223.1 457.7V857.7C223.1 873.1 234.6 880.8 246.2 880.8H780.8C796.2 880.8 803.8 869.2 803.8 857.7V457.7C807.7 446.2 796.2 434.6 780.8 434.6Z",
115 "path": "M780.8 434.6H396.2V342.3C396.2 284.6 438.5 238.5 492.3 226.9 492.3 226.9 492.3 226.9 496.2 226.9 503.8 226.9 507.7 226.9 515.4 226.9 515.4 226.9 519.2 226.9 519.2 226.9 519.2 226.9 519.2 226.9 523.1 226.9 530.8 226.9 538.5 226.9 546.2 230.8 546.2 230.8 546.2 230.8 546.2 230.8 553.8 230.8 557.7 234.6 565.4 238.5 565.4 238.5 569.2 238.5 569.2 242.3 573.1 246.2 580.8 246.2 584.6 250 584.6 250 584.6 250 584.6 250 588.5 253.8 596.2 257.7 600 261.5 600 261.5 603.8 265.4 603.8 265.4 607.7 269.2 611.5 273.1 615.4 276.9 615.4 276.9 615.4 276.9 619.2 280.8 623.1 284.6 626.9 292.3 630.8 300 630.8 300 630.8 303.8 630.8 303.8 634.6 307.7 634.6 315.4 634.6 319.2 634.6 319.2 634.6 323.1 634.6 323.1 634.6 323.1 634.6 323.1 634.6 326.9 638.5 338.5 646.2 346.2 657.7 346.2H715.4C730.8 346.2 742.3 334.6 738.5 319.2 738.5 319.2 738.5 319.2 738.5 319.2 738.5 319.2 738.5 315.4 738.5 315.4 738.5 307.7 734.6 303.8 734.6 296.2 734.6 292.3 734.6 292.3 730.8 288.5 730.8 273.1 730.8 269.2 726.9 261.5 726.9 261.5 726.9 257.7 723.1 257.7 719.2 250 715.4 242.3 711.5 234.6 711.5 234.6 707.7 230.8 707.7 230.8 703.8 223.1 700 219.2 696.2 215.4 696.2 211.5 692.3 211.5 692.3 207.7 688.5 203.8 684.6 196.2 680.8 192.3 680.8 192.3 676.9 188.5 676.9 188.5 669.2 180.8 665.4 176.9 657.7 169.2 657.7 169.2 653.8 169.2 653.8 165.4 650 161.5 642.3 157.7 634.6 153.8 630.8 153.8 630.8 150 626.9 150 623.1 146.2 615.4 142.3 611.5 142.3 607.7 142.3 607.7 138.5 603.8 138.5 596.2 134.6 588.5 130.8 580.8 130.8 580.8 130.8 580.8 130.8 580.8 130.8 573.1 126.9 565.4 126.9 553.8 123.1 550 123.1 550 123.1 546.2 123.1 538.5 123.1 534.6 123.1 526.9 119.2 523.1 119.2 519.2 119.2 519.2 119.2 511.5 119.2 503.8 119.2 496.2 119.2 496.2 119.2 492.3 119.2 492.3 119.2 484.6 119.2 476.9 123.1 465.4 123.1 461.5 123.1 453.8 126.9 450 126.9 450 126.9 446.2 126.9 446.2 126.9 353.8 153.8 288.5 242.3 288.5 342.3V434.6H246.2C230.8 434.6 223.1 446.2 223.1 457.7V857.7C223.1 873.1 234.6 880.8 246.2 880.8H780.8C796.2 880.8 803.8 869.2 803.8 857.7V457.7C807.7 446.2 796.2 434.6 780.8 434.6Z",
116 "width": 1000
116 "width": 1000
117 },
117 },
118 "search": [
118 "search": [
119 "unlock"
119 "unlock"
120 ]
120 ]
121 },
121 },
122 {
122 {
123 "uid": "b077586592b9b69166b981325446c836",
123 "uid": "b077586592b9b69166b981325446c836",
124 "css": "delete",
124 "css": "delete",
125 "code": 59392,
125 "code": 59392,
126 "src": "custom_icons",
126 "src": "custom_icons",
127 "selected": true,
127 "selected": true,
128 "svg": {
128 "svg": {
129 "path": "M515.4 92.3C303.8 92.3 130.8 265.4 130.8 476.9 130.8 688.5 303.8 861.5 515.4 861.5S900 688.5 900 476.9C900 265.4 726.9 92.3 515.4 92.3ZM742.3 507.7C742.3 523.1 730.8 534.6 711.5 534.6H315.4C300 534.6 284.6 523.1 284.6 507.7V446.2C284.6 430.8 296.2 419.2 315.4 419.2H711.5C726.9 419.2 742.3 430.8 742.3 446.2V507.7Z",
129 "path": "M515.4 92.3C303.8 92.3 130.8 265.4 130.8 476.9 130.8 688.5 303.8 861.5 515.4 861.5S900 688.5 900 476.9C900 265.4 726.9 92.3 515.4 92.3ZM742.3 507.7C742.3 523.1 730.8 534.6 711.5 534.6H315.4C300 534.6 284.6 523.1 284.6 507.7V446.2C284.6 430.8 296.2 419.2 315.4 419.2H711.5C726.9 419.2 742.3 430.8 742.3 446.2V507.7Z",
130 "width": 1000
130 "width": 1000
131 },
131 },
132 "search": [
132 "search": [
133 "delete"
133 "delete"
134 ]
134 ]
135 },
135 },
136 {
136 {
137 "uid": "dca63ad885c0d6f1780a8d1d55bc2380",
137 "uid": "dca63ad885c0d6f1780a8d1d55bc2380",
138 "css": "ok",
138 "css": "ok",
139 "code": 59393,
139 "code": 59393,
140 "src": "custom_icons",
140 "src": "custom_icons",
141 "selected": true,
141 "selected": true,
142 "svg": {
142 "svg": {
143 "path": "M515.4 115.4C303.8 115.4 130.8 288.5 130.8 500 130.8 711.5 303.8 884.6 515.4 884.6S900 711.5 900 500C900 288.5 726.9 115.4 515.4 115.4ZM753.8 411.5L450 715.4C438.5 726.9 423.1 726.9 411.5 715.4L273.1 576.9C261.5 565.4 261.5 550 273.1 538.5L315.4 496.2C326.9 484.6 342.3 484.6 353.8 496.2L411.5 553.8C423.1 565.4 438.5 565.4 450 553.8L669.2 334.6C680.8 323.1 696.2 323.1 707.7 334.6L750 376.9C765.4 384.6 765.4 400 753.8 411.5Z",
143 "path": "M515.4 115.4C303.8 115.4 130.8 288.5 130.8 500 130.8 711.5 303.8 884.6 515.4 884.6S900 711.5 900 500C900 288.5 726.9 115.4 515.4 115.4ZM753.8 411.5L450 715.4C438.5 726.9 423.1 726.9 411.5 715.4L273.1 576.9C261.5 565.4 261.5 550 273.1 538.5L315.4 496.2C326.9 484.6 342.3 484.6 353.8 496.2L411.5 553.8C423.1 565.4 438.5 565.4 450 553.8L669.2 334.6C680.8 323.1 696.2 323.1 707.7 334.6L750 376.9C765.4 384.6 765.4 400 753.8 411.5Z",
144 "width": 1000
144 "width": 1000
145 },
145 },
146 "search": [
146 "search": [
147 "ok"
147 "ok"
148 ]
148 ]
149 },
149 },
150 {
150 {
151 "uid": "c158b3a004c055c6ad1471cd98932268",
151 "uid": "c158b3a004c055c6ad1471cd98932268",
152 "css": "down",
152 "css": "down",
153 "code": 59403,
153 "code": 59403,
154 "src": "custom_icons",
154 "src": "custom_icons",
155 "selected": true,
155 "selected": true,
156 "svg": {
156 "svg": {
157 "path": "M703.8 396.2L530.8 615.4C523.1 623.1 507.7 623.1 503.8 615.4L330.8 396.2C323.1 384.6 330.8 365.4 346.2 365.4H692.3C703.8 365.4 711.5 384.6 703.8 396.2Z",
157 "path": "M703.8 396.2L530.8 615.4C523.1 623.1 507.7 623.1 503.8 615.4L330.8 396.2C323.1 384.6 330.8 365.4 346.2 365.4H692.3C703.8 365.4 711.5 384.6 703.8 396.2Z",
158 "width": 1000
158 "width": 1000
159 },
159 },
160 "search": [
160 "search": [
161 "arrow_down"
161 "arrow_down"
162 ]
162 ]
163 },
163 },
164 {
164 {
165 "uid": "02f59f392ad28056845cfc04cb121f13",
165 "uid": "02f59f392ad28056845cfc04cb121f13",
166 "css": "comment",
166 "css": "comment",
167 "code": 59394,
167 "code": 59394,
168 "src": "custom_icons",
168 "src": "custom_icons",
169 "selected": true,
169 "selected": true,
170 "svg": {
170 "svg": {
171 "path": "M130.8 784.6V280.8C130.8 207.7 188.5 150 261.5 150H769.2C842.3 150 900 207.7 900 280.8V569.2C900 642.3 842.3 700 769.2 700H273.1C269.2 700 261.5 703.8 257.7 707.7L165.4 800C153.8 815.4 130.8 803.8 130.8 784.6ZM261.5 211.5C223.1 211.5 188.5 242.3 188.5 284.6V696.2L234.6 650C238.5 646.2 242.3 642.3 250 642.3H769.2C807.7 642.3 842.3 611.5 842.3 569.2V280.8C842.3 242.3 811.5 207.7 769.2 207.7H261.5Z",
171 "path": "M130.8 784.6V280.8C130.8 207.7 188.5 150 261.5 150H769.2C842.3 150 900 207.7 900 280.8V569.2C900 642.3 842.3 700 769.2 700H273.1C269.2 700 261.5 703.8 257.7 707.7L165.4 800C153.8 815.4 130.8 803.8 130.8 784.6ZM261.5 211.5C223.1 211.5 188.5 242.3 188.5 284.6V696.2L234.6 650C238.5 646.2 242.3 642.3 250 642.3H769.2C807.7 642.3 842.3 611.5 842.3 569.2V280.8C842.3 242.3 811.5 207.7 769.2 207.7H261.5Z",
172 "width": 1000
172 "width": 1000
173 },
173 },
174 "search": [
174 "search": [
175 "comment"
175 "comment"
176 ]
176 ]
177 },
177 },
178 {
178 {
179 "uid": "9a44b838872ca62b8aba7bbbbf67cc59",
179 "uid": "9a44b838872ca62b8aba7bbbbf67cc59",
180 "css": "feed",
180 "css": "feed",
181 "code": 59400,
181 "code": 59400,
182 "src": "custom_icons",
182 "src": "custom_icons",
183 "selected": true,
183 "selected": true,
184 "svg": {
184 "svg": {
185 "path": "M842.3 111.5H188.5C153.8 111.5 130.8 138.5 130.8 169.2V826.9C130.8 857.7 157.7 884.6 188.5 884.6H846.2C876.9 884.6 903.8 857.7 903.8 826.9V169.2C900 138.5 873.1 111.5 842.3 111.5ZM307.7 776.9C269.2 776.9 234.6 746.2 234.6 703.8S265.4 630.8 307.7 630.8C346.2 630.8 380.8 661.5 380.8 703.8S346.2 776.9 307.7 776.9ZM553.8 788.5C519.2 788.5 496.2 761.5 496.2 730.8 496.2 619.2 407.7 530.8 296.2 530.8 265.4 530.8 230.8 503.8 230.8 473.1 230.8 438.5 253.8 411.5 284.6 411.5L296.2 411.5C473.1 411.5 615.4 553.8 615.4 730.8 611.5 761.5 584.6 788.5 553.8 788.5ZM750 788.5C715.4 788.5 692.3 761.5 692.3 730.8 692.3 511.5 511.5 330.8 292.3 330.8 261.5 330.8 226.9 303.8 226.9 269.2 226.9 234.6 250 207.7 280.8 207.7L292.3 207.7C576.9 207.7 811.5 438.5 811.5 726.9 811.5 761.5 784.6 788.5 750 788.5Z",
185 "path": "M842.3 111.5H188.5C153.8 111.5 130.8 138.5 130.8 169.2V826.9C130.8 857.7 157.7 884.6 188.5 884.6H846.2C876.9 884.6 903.8 857.7 903.8 826.9V169.2C900 138.5 873.1 111.5 842.3 111.5ZM307.7 776.9C269.2 776.9 234.6 746.2 234.6 703.8S265.4 630.8 307.7 630.8C346.2 630.8 380.8 661.5 380.8 703.8S346.2 776.9 307.7 776.9ZM553.8 788.5C519.2 788.5 496.2 761.5 496.2 730.8 496.2 619.2 407.7 530.8 296.2 530.8 265.4 530.8 230.8 503.8 230.8 473.1 230.8 438.5 253.8 411.5 284.6 411.5L296.2 411.5C473.1 411.5 615.4 553.8 615.4 730.8 611.5 761.5 584.6 788.5 553.8 788.5ZM750 788.5C715.4 788.5 692.3 761.5 692.3 730.8 692.3 511.5 511.5 330.8 292.3 330.8 261.5 330.8 226.9 303.8 226.9 269.2 226.9 234.6 250 207.7 280.8 207.7L292.3 207.7C576.9 207.7 811.5 438.5 811.5 726.9 811.5 761.5 784.6 788.5 750 788.5Z",
186 "width": 1000
186 "width": 1000
187 },
187 },
188 "search": [
188 "search": [
189 "feed"
189 "feed"
190 ]
190 ]
191 },
191 },
192 {
192 {
193 "uid": "e0118d6f20b76d77317977ae8dc849d7",
193 "uid": "e0118d6f20b76d77317977ae8dc849d7",
194 "css": "left",
194 "css": "left",
195 "code": 59401,
195 "code": 59401,
196 "src": "custom_icons",
196 "src": "custom_icons",
197 "selected": true,
197 "selected": true,
198 "svg": {
198 "svg": {
199 "path": "M692.3 76.9L761.5 146.2C773.1 157.7 773.1 173.1 761.5 184.6L473.1 473.1C461.5 484.6 461.5 500 473.1 511.5L769.2 807.7C780.8 819.2 780.8 834.6 769.2 846.2L700 915.4C688.5 926.9 673.1 926.9 661.5 915.4L257.7 511.5C246.2 500 246.2 484.6 257.7 473.1L653.8 76.9C665.4 65.4 680.8 65.4 692.3 76.9Z",
199 "path": "M692.3 76.9L761.5 146.2C773.1 157.7 773.1 173.1 761.5 184.6L473.1 473.1C461.5 484.6 461.5 500 473.1 511.5L769.2 807.7C780.8 819.2 780.8 834.6 769.2 846.2L700 915.4C688.5 926.9 673.1 926.9 661.5 915.4L257.7 511.5C246.2 500 246.2 484.6 257.7 473.1L653.8 76.9C665.4 65.4 680.8 65.4 692.3 76.9Z",
200 "width": 1000
200 "width": 1000
201 },
201 },
202 "search": [
202 "search": [
203 "left"
203 "left"
204 ]
204 ]
205 },
205 },
206 {
206 {
207 "uid": "3cea97f90c8f2b0a90833855434f58de",
207 "uid": "3cea97f90c8f2b0a90833855434f58de",
208 "css": "right",
208 "css": "right",
209 "code": 59402,
209 "code": 59402,
210 "src": "custom_icons",
210 "src": "custom_icons",
211 "selected": true,
211 "selected": true,
212 "svg": {
212 "svg": {
213 "path": "M338.5 915.4L265.4 846.2C253.8 834.6 253.8 819.2 265.4 807.7L553.8 519.2C565.4 507.7 565.4 492.3 553.8 480.8L257.7 184.6C246.2 173.1 246.2 157.7 257.7 146.2L326.9 76.9C338.5 65.4 353.8 65.4 365.4 76.9L769.2 480.8C780.8 492.3 780.8 507.7 769.2 519.2L376.9 915.4C365.4 926.9 346.2 926.9 338.5 915.4Z",
213 "path": "M338.5 915.4L265.4 846.2C253.8 834.6 253.8 819.2 265.4 807.7L553.8 519.2C565.4 507.7 565.4 492.3 553.8 480.8L257.7 184.6C246.2 173.1 246.2 157.7 257.7 146.2L326.9 76.9C338.5 65.4 353.8 65.4 365.4 76.9L769.2 480.8C780.8 492.3 780.8 507.7 769.2 519.2L376.9 915.4C365.4 926.9 346.2 926.9 338.5 915.4Z",
214 "width": 1000
214 "width": 1000
215 },
215 },
216 "search": [
216 "search": [
217 "right"
217 "right"
218 ]
218 ]
219 },
219 },
220 {
220 {
221 "uid": "820a44cb2e7fc1d0e28b1d2a8cd44cb9",
221 "uid": "820a44cb2e7fc1d0e28b1d2a8cd44cb9",
222 "css": "git",
222 "css": "git",
223 "code": 59434,
223 "code": 59434,
224 "src": "custom_icons",
224 "src": "custom_icons",
225 "selected": true,
225 "selected": true,
226 "svg": {
226 "svg": {
227 "path": "M928.8 6.3H71.3C35 6.3 6.3 36.3 6.3 71.3V927.5C6.3 963.8 36.3 992.5 71.3 992.5H927.5C963.8 992.5 992.5 962.5 992.5 927.5V71.3C993.8 36.3 963.7 6.3 928.8 6.3ZM200 555C203.8 566.3 208.8 575 213.8 582.5 220 590 227.5 596.3 236.3 600 245 603.8 255 606.3 265 606.3 273.8 606.3 281.3 605 288.8 603.8 296.3 602.5 302.5 600 308.8 597.5L315 546.3H287.5C283.8 546.3 280 545 277.5 542.5 276.3 541.3 275 537.5 275 535L280 496.2H385L368.7 627.5C361.2 633.8 352.5 638.7 343.7 642.5 335 646.3 326.3 650 316.2 652.5 306.2 655 297.5 657.5 286.3 658.8 276.3 660 265 661.3 252.5 661.3 232.5 661.3 215 657.5 198.7 650 182.5 642.5 168.7 632.5 157.5 620 146.2 607.5 137.5 592.5 131.2 575 125 557.5 121.2 538.8 121.2 518.8 121.2 501.3 123.7 485 127.5 468.8 131.2 452.5 137.5 438.8 145 425 152.5 411.3 161.2 400 171.2 388.8 181.2 377.5 192.5 368.8 205 361.3 217.5 353.8 231.3 347.5 246.3 343.8 261.3 340 276.3 337.5 292.5 337.5 306.3 337.5 317.5 338.8 328.7 341.3 340 343.8 350 347.5 357.5 351.3 366.2 355 373.8 360 380 365 386.3 370 392.5 376.3 397.5 381.3L377.5 412.5C373.8 417.5 368.8 420 363.8 421.3 358.8 422.5 353.7 421.3 347.5 417.5 342.5 413.8 337.5 411.3 333.7 408.8 328.7 406.3 325 403.8 320 402.5 315 401.3 310 400 305 398.8 300 397.5 293.7 397.5 287.5 397.5 273.7 397.5 261.2 400 250 406.3 238.7 412.5 228.7 420 221.2 431.3 212.5 441.2 206.2 455 202.5 468.8 197.5 483.8 196.2 500 196.2 517.5 195 531.3 197.5 543.8 200 555ZM536.3 657.5H465L503.7 342.5H575L536.3 657.5ZM878.8 398.8H798.8L766.3 657.5H696.3L727.5 398.7H647.5L655 342.5H886.3L878.8 398.8Z",
227 "path": "M928.8 6.3H71.3C35 6.3 6.3 36.3 6.3 71.3V927.5C6.3 963.8 36.3 992.5 71.3 992.5H927.5C963.8 992.5 992.5 962.5 992.5 927.5V71.3C993.8 36.3 963.7 6.3 928.8 6.3ZM200 555C203.8 566.3 208.8 575 213.8 582.5 220 590 227.5 596.3 236.3 600 245 603.8 255 606.3 265 606.3 273.8 606.3 281.3 605 288.8 603.8 296.3 602.5 302.5 600 308.8 597.5L315 546.3H287.5C283.8 546.3 280 545 277.5 542.5 276.3 541.3 275 537.5 275 535L280 496.2H385L368.7 627.5C361.2 633.8 352.5 638.7 343.7 642.5 335 646.3 326.3 650 316.2 652.5 306.2 655 297.5 657.5 286.3 658.8 276.3 660 265 661.3 252.5 661.3 232.5 661.3 215 657.5 198.7 650 182.5 642.5 168.7 632.5 157.5 620 146.2 607.5 137.5 592.5 131.2 575 125 557.5 121.2 538.8 121.2 518.8 121.2 501.3 123.7 485 127.5 468.8 131.2 452.5 137.5 438.8 145 425 152.5 411.3 161.2 400 171.2 388.8 181.2 377.5 192.5 368.8 205 361.3 217.5 353.8 231.3 347.5 246.3 343.8 261.3 340 276.3 337.5 292.5 337.5 306.3 337.5 317.5 338.8 328.7 341.3 340 343.8 350 347.5 357.5 351.3 366.2 355 373.8 360 380 365 386.3 370 392.5 376.3 397.5 381.3L377.5 412.5C373.8 417.5 368.8 420 363.8 421.3 358.8 422.5 353.7 421.3 347.5 417.5 342.5 413.8 337.5 411.3 333.7 408.8 328.7 406.3 325 403.8 320 402.5 315 401.3 310 400 305 398.8 300 397.5 293.7 397.5 287.5 397.5 273.7 397.5 261.2 400 250 406.3 238.7 412.5 228.7 420 221.2 431.3 212.5 441.2 206.2 455 202.5 468.8 197.5 483.8 196.2 500 196.2 517.5 195 531.3 197.5 543.8 200 555ZM536.3 657.5H465L503.7 342.5H575L536.3 657.5ZM878.8 398.8H798.8L766.3 657.5H696.3L727.5 398.7H647.5L655 342.5H886.3L878.8 398.8Z",
228 "width": 1000
228 "width": 1000
229 },
229 },
230 "search": [
230 "search": [
231 "git"
231 "git"
232 ]
232 ]
233 },
233 },
234 {
234 {
235 "uid": "ea152b092f5ad7d610de2c388553e188",
235 "uid": "ea152b092f5ad7d610de2c388553e188",
236 "css": "hg",
236 "css": "hg",
237 "code": 59437,
237 "code": 59437,
238 "src": "custom_icons",
238 "src": "custom_icons",
239 "selected": true,
239 "selected": true,
240 "svg": {
240 "svg": {
241 "path": "M926.6 9.2H73.9C37.9 9.2 8.7 38.5 8.7 74.4V927.1C8.7 963.1 38 992.3 73.9 992.3H926.6C962.6 992.3 991.8 963 991.8 927.1V74.4C991.8 38.4 962.6 9.2 926.6 9.2ZM444 657.4H373.5L389.8 524.1H276.7L260.4 657.4H189.9L228.6 344.2H299.1L282.8 476.4H395.9L412.2 344.2H482.7L444 657.4ZM621 555.8C624.3 566.8 629.1 576 635.3 583.5 641.5 591 648.8 596.8 657.5 600.8 666.1 604.8 675.6 606.8 686.1 606.8 694.7 606.8 702.4 606 709.3 604.5 716.2 603 722.8 600.8 729.1 598.1L735.1 546.9H708.4C704.1 546.9 700.8 545.8 698.6 543.6 696.4 541.4 695.5 538.5 695.9 534.9L700.6 496.2H805.1L788.8 627.1C780.8 633 772.5 638.1 763.9 642.3 755.3 646.6 746.3 650 736.9 652.7 727.5 655.5 717.6 657.5 707.2 658.7 696.8 660 685.7 660.6 674 660.6 654.6 660.6 637 657 621 650 605 642.9 591.3 633.1 579.9 620.7 568.5 608.2 559.7 593.5 553.5 576.4 547.2 559.3 544.1 540.9 544.1 520.9 544.1 503.6 546.1 487.1 550 471.3 554 455.6 559.6 441.1 566.9 427.8 574.2 414.5 583 402.4 593.2 391.7 603.4 381 614.9 371.8 627.4 364.2 639.9 356.6 653.5 350.7 667.9 346.6 682.4 342.6 697.6 340.5 713.5 340.5 726.8 340.5 738.9 341.7 749.7 344.2 760.5 346.6 770.2 349.9 778.8 353.9 787.4 358 795.1 362.8 801.8 368.1 808.6 373.5 814.5 379 819.7 384.8L797 413.2C793.3 418.2 788.8 421.3 783.7 422.3 778.6 423.4 773.2 422.2 767.8 418.8 762.8 415.4 758.1 412.4 753.6 409.9 749.2 407.4 744.7 405.3 740.1 403.7 735.5 402 730.7 400.8 725.6 400 720.5 399.2 714.8 398.8 708.5 398.8 694.9 398.8 682.4 401.7 671.1 407.5 659.8 413.3 650 421.5 641.9 432 633.7 442.5 627.4 455.2 622.9 469.9 618.4 484.7 616.1 501 616.1 518.7 615.9 532.5 617.6 544.8 621 555.8Z",
241 "path": "M926.6 9.2H73.9C37.9 9.2 8.7 38.5 8.7 74.4V927.1C8.7 963.1 38 992.3 73.9 992.3H926.6C962.6 992.3 991.8 963 991.8 927.1V74.4C991.8 38.4 962.6 9.2 926.6 9.2ZM444 657.4H373.5L389.8 524.1H276.7L260.4 657.4H189.9L228.6 344.2H299.1L282.8 476.4H395.9L412.2 344.2H482.7L444 657.4ZM621 555.8C624.3 566.8 629.1 576 635.3 583.5 641.5 591 648.8 596.8 657.5 600.8 666.1 604.8 675.6 606.8 686.1 606.8 694.7 606.8 702.4 606 709.3 604.5 716.2 603 722.8 600.8 729.1 598.1L735.1 546.9H708.4C704.1 546.9 700.8 545.8 698.6 543.6 696.4 541.4 695.5 538.5 695.9 534.9L700.6 496.2H805.1L788.8 627.1C780.8 633 772.5 638.1 763.9 642.3 755.3 646.6 746.3 650 736.9 652.7 727.5 655.5 717.6 657.5 707.2 658.7 696.8 660 685.7 660.6 674 660.6 654.6 660.6 637 657 621 650 605 642.9 591.3 633.1 579.9 620.7 568.5 608.2 559.7 593.5 553.5 576.4 547.2 559.3 544.1 540.9 544.1 520.9 544.1 503.6 546.1 487.1 550 471.3 554 455.6 559.6 441.1 566.9 427.8 574.2 414.5 583 402.4 593.2 391.7 603.4 381 614.9 371.8 627.4 364.2 639.9 356.6 653.5 350.7 667.9 346.6 682.4 342.6 697.6 340.5 713.5 340.5 726.8 340.5 738.9 341.7 749.7 344.2 760.5 346.6 770.2 349.9 778.8 353.9 787.4 358 795.1 362.8 801.8 368.1 808.6 373.5 814.5 379 819.7 384.8L797 413.2C793.3 418.2 788.8 421.3 783.7 422.3 778.6 423.4 773.2 422.2 767.8 418.8 762.8 415.4 758.1 412.4 753.6 409.9 749.2 407.4 744.7 405.3 740.1 403.7 735.5 402 730.7 400.8 725.6 400 720.5 399.2 714.8 398.8 708.5 398.8 694.9 398.8 682.4 401.7 671.1 407.5 659.8 413.3 650 421.5 641.9 432 633.7 442.5 627.4 455.2 622.9 469.9 618.4 484.7 616.1 501 616.1 518.7 615.9 532.5 617.6 544.8 621 555.8Z",
242 "width": 1000
242 "width": 1000
243 },
243 },
244 "search": [
244 "search": [
245 "hg"
245 "hg"
246 ]
246 ]
247 },
247 },
248 {
248 {
249 "uid": "4a842c0afb4c35dacd21da71f9fed3f1",
249 "uid": "4a842c0afb4c35dacd21da71f9fed3f1",
250 "css": "comment-add",
250 "css": "comment-add",
251 "code": 59439,
251 "code": 59439,
252 "src": "custom_icons",
252 "src": "custom_icons",
253 "selected": true,
253 "selected": true,
254 "svg": {
254 "svg": {
255 "path": "M952.4 591.9V274.9C952.4 268.4 952.3 261.9 951.8 255.4 950.7 242.9 948.2 230.6 944.1 218.8 936.5 196.6 923.8 176.2 907.3 159.6 890.8 143.1 870.6 130.4 848.5 122.7 836.6 118.6 824.2 115.9 811.6 114.8 805.3 114.2 798.9 114.2 792.6 114.2H216.9C204 114.2 191.3 114.1 178.5 116 166.3 117.9 154.4 121.2 143 125.9 121.4 134.8 101.9 148.7 86.4 166.2 70.8 183.8 59.3 205 53.1 227.7 49.7 240.1 47.9 252.8 47.6 265.6 47.3 278.7 47.6 291.8 47.6 304.9V861.8C47.6 870.7 52.5 878.6 60.5 882.5 67.3 885.9 75.6 886.2 82.4 882.7 84.8 881.5 86.9 879.7 88.8 877.8 91.1 875.5 93.4 873.2 95.6 871 100.3 866.3 105 861.6 109.7 856.9L137.9 828.6C147.3 819.2 156.6 809.9 166 800.5 175.2 791.3 184.6 782.1 193.7 772.7 197.7 768.5 201.9 764.4 207.6 762.7 210.4 761.9 213.2 761.8 216 761.8H782.7C795.5 761.8 808.3 762 821 760.1 844.8 756.5 867.7 747.3 887.3 733.3 906.2 719.9 922.1 702.1 933.2 681.8 945.1 660.2 951.5 636 952.2 611.4 952.5 604.9 952.4 598.4 952.4 591.9ZM883.4 285.1V602.5C883.4 608.8 883.4 615.1 882.5 621.4 881.7 627.5 880.2 633.6 878.1 639.4 874.4 649.4 868.8 658.7 861.7 666.7 846.6 683.6 825.1 693.8 802.5 695.1 796.3 695.4 790 695.2 783.8 695.2H207.8C201.2 695.2 194.7 695.2 188.1 695.2 185 695.2 181.8 695.2 178.8 696.1 176.2 696.9 173.9 698.2 171.8 699.9 169.6 701.7 167.6 703.7 165.6 705.7 163.3 708 161 710.3 158.7 712.6 154 717.3 149.4 721.9 144.7 726.6 135.3 736 126 745.3 116.6 754.7V270C116.6 257.8 118.8 245.7 123.7 234.6 128 224.9 134 215.9 141.5 208.4 157.5 192.4 179.6 183.3 202.2 183.3H791.5C797.6 183.3 803.7 183.3 809.7 184.2 832 187.4 852.4 199.4 866 217.4 872.8 226.4 877.7 236.7 880.5 247.6 882 253.5 882.9 259.6 883.1 265.8 883.6 272.2 883.4 278.7 883.4 285.1ZM668.8 402H538.2C534.4 402 526.7 394.3 526.7 390.5V263.7C526.7 256 519 248.3 515.2 248.3H465.3C457.6 248.3 449.9 256 449.9 259.8V390.4C449.9 394.2 442.2 401.9 438.4 401.9H311.7C304 401.9 296.3 409.6 296.3 413.4V463.3C296.3 471 304 478.7 307.8 478.7H434.5C442.2 478.7 449.9 486.4 449.9 490.2V617C449.9 624.7 457.6 632.4 461.4 632.4H511.3C519 632.4 526.7 624.7 526.7 620.9V494.1C526.7 486.4 534.4 478.7 538.2 478.7H665C672.7 478.7 680.4 471 680.4 467.2V417.3C680.3 409.6 672.6 402 668.8 402Z",
255 "path": "M952.4 591.9V274.9C952.4 268.4 952.3 261.9 951.8 255.4 950.7 242.9 948.2 230.6 944.1 218.8 936.5 196.6 923.8 176.2 907.3 159.6 890.8 143.1 870.6 130.4 848.5 122.7 836.6 118.6 824.2 115.9 811.6 114.8 805.3 114.2 798.9 114.2 792.6 114.2H216.9C204 114.2 191.3 114.1 178.5 116 166.3 117.9 154.4 121.2 143 125.9 121.4 134.8 101.9 148.7 86.4 166.2 70.8 183.8 59.3 205 53.1 227.7 49.7 240.1 47.9 252.8 47.6 265.6 47.3 278.7 47.6 291.8 47.6 304.9V861.8C47.6 870.7 52.5 878.6 60.5 882.5 67.3 885.9 75.6 886.2 82.4 882.7 84.8 881.5 86.9 879.7 88.8 877.8 91.1 875.5 93.4 873.2 95.6 871 100.3 866.3 105 861.6 109.7 856.9L137.9 828.6C147.3 819.2 156.6 809.9 166 800.5 175.2 791.3 184.6 782.1 193.7 772.7 197.7 768.5 201.9 764.4 207.6 762.7 210.4 761.9 213.2 761.8 216 761.8H782.7C795.5 761.8 808.3 762 821 760.1 844.8 756.5 867.7 747.3 887.3 733.3 906.2 719.9 922.1 702.1 933.2 681.8 945.1 660.2 951.5 636 952.2 611.4 952.5 604.9 952.4 598.4 952.4 591.9ZM883.4 285.1V602.5C883.4 608.8 883.4 615.1 882.5 621.4 881.7 627.5 880.2 633.6 878.1 639.4 874.4 649.4 868.8 658.7 861.7 666.7 846.6 683.6 825.1 693.8 802.5 695.1 796.3 695.4 790 695.2 783.8 695.2H207.8C201.2 695.2 194.7 695.2 188.1 695.2 185 695.2 181.8 695.2 178.8 696.1 176.2 696.9 173.9 698.2 171.8 699.9 169.6 701.7 167.6 703.7 165.6 705.7 163.3 708 161 710.3 158.7 712.6 154 717.3 149.4 721.9 144.7 726.6 135.3 736 126 745.3 116.6 754.7V270C116.6 257.8 118.8 245.7 123.7 234.6 128 224.9 134 215.9 141.5 208.4 157.5 192.4 179.6 183.3 202.2 183.3H791.5C797.6 183.3 803.7 183.3 809.7 184.2 832 187.4 852.4 199.4 866 217.4 872.8 226.4 877.7 236.7 880.5 247.6 882 253.5 882.9 259.6 883.1 265.8 883.6 272.2 883.4 278.7 883.4 285.1ZM668.8 402H538.2C534.4 402 526.7 394.3 526.7 390.5V263.7C526.7 256 519 248.3 515.2 248.3H465.3C457.6 248.3 449.9 256 449.9 259.8V390.4C449.9 394.2 442.2 401.9 438.4 401.9H311.7C304 401.9 296.3 409.6 296.3 413.4V463.3C296.3 471 304 478.7 307.8 478.7H434.5C442.2 478.7 449.9 486.4 449.9 490.2V617C449.9 624.7 457.6 632.4 461.4 632.4H511.3C519 632.4 526.7 624.7 526.7 620.9V494.1C526.7 486.4 534.4 478.7 538.2 478.7H665C672.7 478.7 680.4 471 680.4 467.2V417.3C680.3 409.6 672.6 402 668.8 402Z",
256 "width": 1000
256 "width": 1000
257 },
257 },
258 "search": [
258 "search": [
259 "comment-add"
259 "comment-add"
260 ]
260 ]
261 },
261 },
262 {
262 {
263 "uid": "2427f6b8d4379b9a0b41cf31780807cf",
263 "uid": "2427f6b8d4379b9a0b41cf31780807cf",
264 "css": "comment-toggle",
264 "css": "comment-toggle",
265 "code": 59440,
265 "code": 59440,
266 "src": "custom_icons",
266 "src": "custom_icons",
267 "selected": true,
267 "selected": true,
268 "svg": {
268 "svg": {
269 "path": "M797.6 114.2H202.4C116.6 114.2 47.6 183.3 47.6 269V861.9C47.6 881.4 69.5 891.1 84.1 881.8 86.4 880.7 88.6 879.1 90.6 877.1L199.8 768C202.1 765.7 204.7 764 207.7 762.8 209.7 762.2 211.9 761.9 214.3 761.9H797.6C883.4 761.9 952.4 692.8 952.4 607.1V269C952.4 183.2 883.3 114.2 797.6 114.2ZM118.3 752.6V269.5C118.3 222.5 156.4 184.3 203.5 184.3H680.1C593.7 267.9 175.5 695.4 171.4 699.5L118.3 752.6Z",
269 "path": "M797.6 114.2H202.4C116.6 114.2 47.6 183.3 47.6 269V861.9C47.6 881.4 69.5 891.1 84.1 881.8 86.4 880.7 88.6 879.1 90.6 877.1L199.8 768C202.1 765.7 204.7 764 207.7 762.8 209.7 762.2 211.9 761.9 214.3 761.9H797.6C883.4 761.9 952.4 692.8 952.4 607.1V269C952.4 183.2 883.3 114.2 797.6 114.2ZM118.3 752.6V269.5C118.3 222.5 156.4 184.3 203.5 184.3H680.1C593.7 267.9 175.5 695.4 171.4 699.5L118.3 752.6Z",
270 "width": 1000
270 "width": 1000
271 },
271 },
272 "search": [
272 "search": [
273 "comment-toggle"
273 "comment-toggle"
274 ]
274 ]
275 },
275 },
276 {
276 {
277 "uid": "6533bdc16ab201eb3f3b27ce989cab33",
277 "uid": "6533bdc16ab201eb3f3b27ce989cab33",
278 "css": "folder-open-empty",
278 "css": "folder-open-empty",
279 "code": 61717,
279 "code": 61717,
280 "src": "fontawesome"
280 "src": "fontawesome"
281 },
281 },
282 {
282 {
283 "uid": "d64b34fac1d9923b7d29d1550b628ecd",
283 "uid": "d64b34fac1d9923b7d29d1550b628ecd",
284 "css": "lock",
284 "css": "lock",
285 "code": 59398,
285 "code": 59398,
286 "src": "custom_icons",
286 "src": "custom_icons",
287 "selected": true,
287 "selected": true,
288 "svg": {
288 "svg": {
289 "path": "M812.5 424.1H758.9V317C758.9 308 758.9 303.6 758.9 299.1 758.9 294.6 758.9 290.2 758.9 285.7 758.9 281.3 758.9 281.3 758.9 276.8 758.9 267.9 758.9 263.4 754.5 254.5 754.5 250 754.5 250 750 245.5 750 236.6 745.5 232.1 741.1 223.2 741.1 223.2 741.1 218.8 736.6 218.8 732.1 209.8 727.7 200.9 723.2 192 723.2 192 718.8 187.5 718.8 187.5 723.2 178.6 718.8 169.6 714.3 165.2 714.3 160.7 709.8 160.7 709.8 156.3 705.4 151.8 700.9 142.9 696.4 138.4 696.4 138.4 692 133.9 692 133.9 683 125 678.6 120.5 669.6 111.6 669.6 111.6 665.2 111.6 665.2 107.1 660.7 102.7 651.8 98.2 642.9 93.8 638.4 93.8 638.4 89.3 633.9 89.3 629.5 84.8 620.5 80.4 616.1 80.4 611.6 80.4 611.6 75.9 607.1 75.9 598.2 71.4 589.3 67 580.4 67 580.4 67 580.4 67 580.4 67 571.4 62.5 562.5 62.5 549.1 58 544.6 58 544.6 58 540.2 58 535.7 58 535.7 58 531.3 58 531.3 58 526.8 58 526.8 58 526.8 58 522.3 58 522.3 58 522.3 58 522.3 58 522.3 58 522.3 58 522.3 58 522.3 58 517.9 58 513.4 58 513.4 58 513.4 58 508.9 58 508.9 58 504.5 58 504.5 58 500 58 500 58 500 58 500 58 495.5 58 491.1 58 491.1 58 491.1 58 491.1 58 491.1 58 491.1 58 491.1 58 491.1 58 491.1 58 486.6 58 486.6 58 486.6 58 482.1 58 482.1 58 477.7 58 477.7 58 473.2 58 468.8 58 468.8 58 464.3 58 455.4 58 442 62.5 433 67 433 67 433 67 433 67 410.7 67 397.3 71.4 388.4 75.9 383.9 75.9 383.9 80.4 379.5 80.4 375 84.8 370.5 84.8 361.6 89.3 361.6 93.8 357.1 93.8 357.1 93.8 348.2 98.2 339.3 102.7 334.8 111.6 334.8 111.6 330.4 111.6 330.4 116.1 321.4 120.5 317 125 308 133.9 308 133.9 303.6 138.4 303.6 138.4 299.1 142.9 294.6 151.8 290.2 156.3 290.2 160.7 285.7 160.7 285.7 165.2 276.8 169.6 272.3 178.6 272.3 183 267.9 183 267.9 187.5 267.9 187.5 263.4 196.4 258.9 205.4 254.5 214.3 254.5 214.3 254.5 218.8 250 218.8 250 232.1 245.5 236.6 245.5 245.5 245.5 250 245.5 250 241.1 254.5 241.1 263.4 236.6 267.9 236.6 276.8 236.6 281.3 236.6 281.3 236.6 285.7 236.6 290.2 236.6 294.6 236.6 299.1 236.6 303.6 236.6 312.5 236.6 317V424.1H187.5C169.6 424.1 160.7 437.5 160.7 450.9V915.2C160.7 933 174.1 942 187.5 942H808C825.9 942 834.8 928.6 834.8 915.2V450.9C839.3 433 825.9 424.1 812.5 424.1ZM361.6 317C361.6 250 410.7 196.4 473.2 183 473.2 183 473.2 183 477.7 183 486.6 183 491.1 183 500 183 500 183 504.5 183 504.5 183 504.5 183 504.5 183 504.5 183 513.4 183 517.9 183 526.8 183 526.8 183 526.8 183 531.3 183 593.8 196.4 642.9 250 642.9 317V424.1H361.6V317Z",
289 "path": "M812.5 424.1H758.9V317C758.9 308 758.9 303.6 758.9 299.1 758.9 294.6 758.9 290.2 758.9 285.7 758.9 281.3 758.9 281.3 758.9 276.8 758.9 267.9 758.9 263.4 754.5 254.5 754.5 250 754.5 250 750 245.5 750 236.6 745.5 232.1 741.1 223.2 741.1 223.2 741.1 218.8 736.6 218.8 732.1 209.8 727.7 200.9 723.2 192 723.2 192 718.8 187.5 718.8 187.5 723.2 178.6 718.8 169.6 714.3 165.2 714.3 160.7 709.8 160.7 709.8 156.3 705.4 151.8 700.9 142.9 696.4 138.4 696.4 138.4 692 133.9 692 133.9 683 125 678.6 120.5 669.6 111.6 669.6 111.6 665.2 111.6 665.2 107.1 660.7 102.7 651.8 98.2 642.9 93.8 638.4 93.8 638.4 89.3 633.9 89.3 629.5 84.8 620.5 80.4 616.1 80.4 611.6 80.4 611.6 75.9 607.1 75.9 598.2 71.4 589.3 67 580.4 67 580.4 67 580.4 67 580.4 67 571.4 62.5 562.5 62.5 549.1 58 544.6 58 544.6 58 540.2 58 535.7 58 535.7 58 531.3 58 531.3 58 526.8 58 526.8 58 526.8 58 522.3 58 522.3 58 522.3 58 522.3 58 522.3 58 522.3 58 522.3 58 522.3 58 517.9 58 513.4 58 513.4 58 513.4 58 508.9 58 508.9 58 504.5 58 504.5 58 500 58 500 58 500 58 500 58 495.5 58 491.1 58 491.1 58 491.1 58 491.1 58 491.1 58 491.1 58 491.1 58 491.1 58 491.1 58 486.6 58 486.6 58 486.6 58 482.1 58 482.1 58 477.7 58 477.7 58 473.2 58 468.8 58 468.8 58 464.3 58 455.4 58 442 62.5 433 67 433 67 433 67 433 67 410.7 67 397.3 71.4 388.4 75.9 383.9 75.9 383.9 80.4 379.5 80.4 375 84.8 370.5 84.8 361.6 89.3 361.6 93.8 357.1 93.8 357.1 93.8 348.2 98.2 339.3 102.7 334.8 111.6 334.8 111.6 330.4 111.6 330.4 116.1 321.4 120.5 317 125 308 133.9 308 133.9 303.6 138.4 303.6 138.4 299.1 142.9 294.6 151.8 290.2 156.3 290.2 160.7 285.7 160.7 285.7 165.2 276.8 169.6 272.3 178.6 272.3 183 267.9 183 267.9 187.5 267.9 187.5 263.4 196.4 258.9 205.4 254.5 214.3 254.5 214.3 254.5 218.8 250 218.8 250 232.1 245.5 236.6 245.5 245.5 245.5 250 245.5 250 241.1 254.5 241.1 263.4 236.6 267.9 236.6 276.8 236.6 281.3 236.6 281.3 236.6 285.7 236.6 290.2 236.6 294.6 236.6 299.1 236.6 303.6 236.6 312.5 236.6 317V424.1H187.5C169.6 424.1 160.7 437.5 160.7 450.9V915.2C160.7 933 174.1 942 187.5 942H808C825.9 942 834.8 928.6 834.8 915.2V450.9C839.3 433 825.9 424.1 812.5 424.1ZM361.6 317C361.6 250 410.7 196.4 473.2 183 473.2 183 473.2 183 477.7 183 486.6 183 491.1 183 500 183 500 183 504.5 183 504.5 183 504.5 183 504.5 183 504.5 183 513.4 183 517.9 183 526.8 183 526.8 183 526.8 183 531.3 183 593.8 196.4 642.9 250 642.9 317V424.1H361.6V317Z",
290 "width": 1000
290 "width": 1000
291 },
291 },
292 "search": [
292 "search": [
293 "lock"
293 "lock"
294 ]
294 ]
295 },
295 },
296 {
296 {
297 "uid": "d95fde5e3bfeb3302efc47c90538a1c5",
297 "uid": "d95fde5e3bfeb3302efc47c90538a1c5",
298 "css": "more",
298 "css": "more",
299 "code": 59410,
299 "code": 59410,
300 "src": "custom_icons",
300 "src": "custom_icons",
301 "selected": true,
301 "selected": true,
302 "svg": {
302 "svg": {
303 "path": "M546.2 415.4H446.2C430.8 415.4 419.2 426.9 419.2 442.3V542.3C419.2 557.7 430.8 569.2 446.2 569.2H546.2C561.5 569.2 573.1 557.7 573.1 542.3V442.3C573.1 426.9 561.5 415.4 546.2 415.4ZM546.2 107.7H446.2C430.8 107.7 419.2 119.2 419.2 134.6V234.6C419.2 250 430.8 261.5 446.2 261.5H546.2C561.5 261.5 573.1 250 573.1 234.6V134.6C573.1 119.2 561.5 107.7 546.2 107.7ZM546.2 723.1H446.2C430.8 723.1 419.2 734.6 419.2 750V850C419.2 865.4 430.8 876.9 446.2 876.9H546.2C561.5 876.9 573.1 865.4 573.1 850V750C573.1 734.6 561.5 723.1 546.2 723.1Z",
303 "path": "M546.2 415.4H446.2C430.8 415.4 419.2 426.9 419.2 442.3V542.3C419.2 557.7 430.8 569.2 446.2 569.2H546.2C561.5 569.2 573.1 557.7 573.1 542.3V442.3C573.1 426.9 561.5 415.4 546.2 415.4ZM546.2 107.7H446.2C430.8 107.7 419.2 119.2 419.2 134.6V234.6C419.2 250 430.8 261.5 446.2 261.5H546.2C561.5 261.5 573.1 250 573.1 234.6V134.6C573.1 119.2 561.5 107.7 546.2 107.7ZM546.2 723.1H446.2C430.8 723.1 419.2 734.6 419.2 750V850C419.2 865.4 430.8 876.9 446.2 876.9H546.2C561.5 876.9 573.1 865.4 573.1 850V750C573.1 734.6 561.5 723.1 546.2 723.1Z",
304 "width": 1000
304 "width": 1000
305 },
305 },
306 "search": [
306 "search": [
307 "more"
307 "more"
308 ]
308 ]
309 },
309 },
310 {
310 {
311 "uid": "34e7772638ae3ca1bfb0a4eca2c39221",
311 "uid": "34e7772638ae3ca1bfb0a4eca2c39221",
312 "css": "merge",
312 "css": "merge",
313 "code": 59443,
313 "code": 59443,
314 "src": "custom_icons",
314 "src": "custom_icons",
315 "selected": true,
315 "selected": true,
316 "svg": {
316 "svg": {
317 "path": "M199.8 740.5C199.8 812.2 258.1 870.5 329.8 870.5S459.8 812.2 459.8 740.5C459.8 694.6 435.8 654.5 399.8 631.3 418.4 491.7 533.4 451.9 602.4 440.6V742.4C563.7 765 537.4 806.4 537.4 854.4 537.4 926.1 595.7 984.4 667.4 984.4S797.4 926.1 797.4 854.4C797.4 806.5 771.1 765 732.4 742.4V254.9C771.1 232.3 797.4 190.9 797.4 142.9 797.4 71.2 739.1 12.9 667.4 12.9S537.4 71.2 537.4 142.9C537.4 190.8 563.7 232.3 602.4 254.9V309.9C542.2 317.8 440.4 342.3 364.2 417.8 309.5 472.1 277.9 542.1 269.6 625.9 228.4 647.7 199.8 690.6 199.8 740.5ZM667.6 897.8C643.7 897.8 624.3 878.3 624.3 854.5S643.8 811.2 667.6 811.2C691.5 811.2 710.9 830.7 710.9 854.5S691.5 897.8 667.6 897.8ZM667.6 99.6C691.5 99.6 710.9 119 710.9 142.9S691.4 186.2 667.6 186.2C643.7 186.2 624.3 166.8 624.3 142.9S643.7 99.6 667.6 99.6ZM329.9 783.9C306 783.9 286.6 764.4 286.6 740.6S306.1 697.3 329.9 697.3C353.8 697.3 373.2 716.7 373.2 740.6S353.8 783.9 329.9 783.9Z",
317 "path": "M199.8 740.5C199.8 812.2 258.1 870.5 329.8 870.5S459.8 812.2 459.8 740.5C459.8 694.6 435.8 654.5 399.8 631.3 418.4 491.7 533.4 451.9 602.4 440.6V742.4C563.7 765 537.4 806.4 537.4 854.4 537.4 926.1 595.7 984.4 667.4 984.4S797.4 926.1 797.4 854.4C797.4 806.5 771.1 765 732.4 742.4V254.9C771.1 232.3 797.4 190.9 797.4 142.9 797.4 71.2 739.1 12.9 667.4 12.9S537.4 71.2 537.4 142.9C537.4 190.8 563.7 232.3 602.4 254.9V309.9C542.2 317.8 440.4 342.3 364.2 417.8 309.5 472.1 277.9 542.1 269.6 625.9 228.4 647.7 199.8 690.6 199.8 740.5ZM667.6 897.8C643.7 897.8 624.3 878.3 624.3 854.5S643.8 811.2 667.6 811.2C691.5 811.2 710.9 830.7 710.9 854.5S691.5 897.8 667.6 897.8ZM667.6 99.6C691.5 99.6 710.9 119 710.9 142.9S691.4 186.2 667.6 186.2C643.7 186.2 624.3 166.8 624.3 142.9S643.7 99.6 667.6 99.6ZM329.9 783.9C306 783.9 286.6 764.4 286.6 740.6S306.1 697.3 329.9 697.3C353.8 697.3 373.2 716.7 373.2 740.6S353.8 783.9 329.9 783.9Z",
318 "width": 1000
318 "width": 1000
319 },
319 },
320 "search": [
320 "search": [
321 "merge"
321 "merge"
322 ]
322 ]
323 },
323 },
324 {
324 {
325 "uid": "c95735c17a10af81448c7fed98a04546",
325 "uid": "c95735c17a10af81448c7fed98a04546",
326 "css": "folder-open",
326 "css": "folder-open",
327 "code": 59405,
327 "code": 59405,
328 "src": "fontawesome"
328 "src": "fontawesome"
329 },
329 },
330 {
330 {
331 "uid": "865ac833a8efcfc24a6f573705ce56b1",
331 "uid": "865ac833a8efcfc24a6f573705ce56b1",
332 "css": "svn",
332 "css": "svn",
333 "code": 59438,
333 "code": 59438,
334 "src": "custom_icons",
334 "src": "custom_icons",
335 "selected": true,
335 "selected": true,
336 "svg": {
336 "svg": {
337 "path": "M933.4 9.2H80.7C44.7 9.2 15.5 38.5 15.5 74.4V927.1C15.5 963.1 44.8 992.3 80.7 992.3H933.4C969.4 992.3 998.6 963 998.6 927.1V74.4C998.7 38.4 969.4 9.2 933.4 9.2ZM167.9 447.1C171.1 451 175.4 454.4 180.8 457.3 186.2 460.2 192.2 463 199 465.4 205.7 467.8 212.7 470.5 219.8 473.3 226.9 476.2 233.9 479.5 240.7 483.2 247.5 486.9 253.6 491.6 259 497.2 264.4 502.8 268.7 509.6 271.9 517.4 275.1 525.3 276.8 534.8 276.8 545.8 276.8 561.6 274.1 576.4 268.6 590.3 263.1 604.3 255.3 616.4 245.1 626.8 234.9 637.2 222.5 645.4 208 651.5 193.4 657.6 177 660.7 158.8 660.7 149.7 660.7 140.7 659.7 131.5 657.7S113.6 652.8 105.2 649.2C96.8 645.5 89 641.2 81.8 636.2 74.6 631.2 68.5 625.6 63.5 619.5L88.5 586.7C90.5 584.3 93 582.3 95.9 580.7 98.8 579.1 101.8 578.3 104.8 578.3 108.8 578.3 112.7 579.7 116.5 582.5 120.3 585.3 124.5 588.4 129.1 591.8 133.7 595.2 139 598.2 145.1 601.1 151.2 603.9 158.7 605.3 167.6 605.3 180.7 605.3 190.7 601.7 197.8 594.7 204.9 587.6 208.4 577.1 208.4 563.2 208.4 556.8 206.8 551.4 203.5 547.3 200.3 543.1 196 539.7 190.8 536.8 185.6 533.9 179.6 531.4 172.8 529.1 166 526.9 159.2 524.5 152.1 521.9 145.1 519.3 138.2 516.2 131.4 512.8 124.6 509.3 118.6 504.7 113.4 499 108.2 493.3 103.9 486.4 100.7 478.2 97.5 469.9 95.9 459.8 95.9 447.7 95.9 433.8 98.5 420.4 103.7 407.6 108.9 394.8 116.4 383.4 126.2 373.5 136 363.6 147.8 355.7 161.7 349.8 175.6 343.9 191.3 341 208.6 341 217.5 341 226.1 341.9 234.5 343.8S250.8 348.2 258.1 351.6C265.4 354.9 272.1 358.8 278.1 363.3 284.1 367.8 289.2 372.8 293.4 378.1L272.3 407C269.7 410.3 267.2 412.8 264.8 414.4 262.4 416 259.4 416.8 256 416.8 252.7 416.8 249.4 415.8 246.1 413.6 242.8 411.4 239.1 409.1 235 406.5 230.9 403.9 226.2 401.6 220.9 399.4 215.6 397.2 209.3 396.2 202.2 396.2 195.6 396.2 189.8 397.1 184.9 399 179.9 400.9 175.8 403.4 172.5 406.8 169.2 410.1 166.7 414 165.1 418.4 163.5 422.9 162.6 427.8 162.6 433 163.1 438.4 164.7 443.2 167.9 447.1ZM480 657.4H416.3L339.2 343.7H395.6C401.6 343.7 406.4 345.1 410 348 413.6 350.8 415.8 354.5 416.7 359L449.4 531.8C451.3 538.7 453 546.3 454.6 554.8 456.2 563.2 457.5 571.9 458.7 581 461.7 572 464.9 563.2 468.4 554.8 471.8 546.4 475.4 538.8 479.2 531.8L552.3 359C553.2 357.1 554.4 355.2 556.1 353.4 557.7 351.5 559.6 349.8 561.8 348.4 564 347 566.4 345.8 569 345 571.6 344.2 574.4 343.7 577.3 343.7H634.1L480 657.4ZM902.6 657.4H866C860.5 657.4 856.1 656.5 852.8 654.7 849.4 652.9 846.2 649.9 843.2 645.8L733.6 452.2C733.3 456.2 733 460.1 732.7 463.8 732.3 467.6 732 471.1 731.7 474.4L710.2 657.4H648.2L686.9 343.7H723.9C726.9 343.7 729.5 343.8 731.6 344 733.7 344.2 735.5 344.7 737.1 345.5 738.7 346.3 740.1 347.4 741.4 348.8S744.1 352.1 745.5 354.4L855.5 548.1C855.8 543.1 856.2 538.3 856.7 533.7 857.2 529.2 857.8 524.8 858.3 520.8L879.4 343.6H941.4L902.6 657.4Z",
337 "path": "M933.4 9.2H80.7C44.7 9.2 15.5 38.5 15.5 74.4V927.1C15.5 963.1 44.8 992.3 80.7 992.3H933.4C969.4 992.3 998.6 963 998.6 927.1V74.4C998.7 38.4 969.4 9.2 933.4 9.2ZM167.9 447.1C171.1 451 175.4 454.4 180.8 457.3 186.2 460.2 192.2 463 199 465.4 205.7 467.8 212.7 470.5 219.8 473.3 226.9 476.2 233.9 479.5 240.7 483.2 247.5 486.9 253.6 491.6 259 497.2 264.4 502.8 268.7 509.6 271.9 517.4 275.1 525.3 276.8 534.8 276.8 545.8 276.8 561.6 274.1 576.4 268.6 590.3 263.1 604.3 255.3 616.4 245.1 626.8 234.9 637.2 222.5 645.4 208 651.5 193.4 657.6 177 660.7 158.8 660.7 149.7 660.7 140.7 659.7 131.5 657.7S113.6 652.8 105.2 649.2C96.8 645.5 89 641.2 81.8 636.2 74.6 631.2 68.5 625.6 63.5 619.5L88.5 586.7C90.5 584.3 93 582.3 95.9 580.7 98.8 579.1 101.8 578.3 104.8 578.3 108.8 578.3 112.7 579.7 116.5 582.5 120.3 585.3 124.5 588.4 129.1 591.8 133.7 595.2 139 598.2 145.1 601.1 151.2 603.9 158.7 605.3 167.6 605.3 180.7 605.3 190.7 601.7 197.8 594.7 204.9 587.6 208.4 577.1 208.4 563.2 208.4 556.8 206.8 551.4 203.5 547.3 200.3 543.1 196 539.7 190.8 536.8 185.6 533.9 179.6 531.4 172.8 529.1 166 526.9 159.2 524.5 152.1 521.9 145.1 519.3 138.2 516.2 131.4 512.8 124.6 509.3 118.6 504.7 113.4 499 108.2 493.3 103.9 486.4 100.7 478.2 97.5 469.9 95.9 459.8 95.9 447.7 95.9 433.8 98.5 420.4 103.7 407.6 108.9 394.8 116.4 383.4 126.2 373.5 136 363.6 147.8 355.7 161.7 349.8 175.6 343.9 191.3 341 208.6 341 217.5 341 226.1 341.9 234.5 343.8S250.8 348.2 258.1 351.6C265.4 354.9 272.1 358.8 278.1 363.3 284.1 367.8 289.2 372.8 293.4 378.1L272.3 407C269.7 410.3 267.2 412.8 264.8 414.4 262.4 416 259.4 416.8 256 416.8 252.7 416.8 249.4 415.8 246.1 413.6 242.8 411.4 239.1 409.1 235 406.5 230.9 403.9 226.2 401.6 220.9 399.4 215.6 397.2 209.3 396.2 202.2 396.2 195.6 396.2 189.8 397.1 184.9 399 179.9 400.9 175.8 403.4 172.5 406.8 169.2 410.1 166.7 414 165.1 418.4 163.5 422.9 162.6 427.8 162.6 433 163.1 438.4 164.7 443.2 167.9 447.1ZM480 657.4H416.3L339.2 343.7H395.6C401.6 343.7 406.4 345.1 410 348 413.6 350.8 415.8 354.5 416.7 359L449.4 531.8C451.3 538.7 453 546.3 454.6 554.8 456.2 563.2 457.5 571.9 458.7 581 461.7 572 464.9 563.2 468.4 554.8 471.8 546.4 475.4 538.8 479.2 531.8L552.3 359C553.2 357.1 554.4 355.2 556.1 353.4 557.7 351.5 559.6 349.8 561.8 348.4 564 347 566.4 345.8 569 345 571.6 344.2 574.4 343.7 577.3 343.7H634.1L480 657.4ZM902.6 657.4H866C860.5 657.4 856.1 656.5 852.8 654.7 849.4 652.9 846.2 649.9 843.2 645.8L733.6 452.2C733.3 456.2 733 460.1 732.7 463.8 732.3 467.6 732 471.1 731.7 474.4L710.2 657.4H648.2L686.9 343.7H723.9C726.9 343.7 729.5 343.8 731.6 344 733.7 344.2 735.5 344.7 737.1 345.5 738.7 346.3 740.1 347.4 741.4 348.8S744.1 352.1 745.5 354.4L855.5 548.1C855.8 543.1 856.2 538.3 856.7 533.7 857.2 529.2 857.8 524.8 858.3 520.8L879.4 343.6H941.4L902.6 657.4Z",
338 "width": 1000
338 "width": 1000
339 },
339 },
340 "search": [
340 "search": [
341 "svn"
341 "svn"
342 ]
342 ]
343 },
343 },
344 {
344 {
345 "uid": "bbfb51903f40597f0b70fd75bc7b5cac",
345 "uid": "bbfb51903f40597f0b70fd75bc7b5cac",
346 "css": "trash",
346 "css": "trash",
347 "code": 61944,
347 "code": 61944,
348 "src": "fontawesome"
348 "src": "fontawesome"
349 },
349 },
350 {
350 {
351 "uid": "f48ae54adfb27d8ada53d0fd9e34ee10",
351 "uid": "f48ae54adfb27d8ada53d0fd9e34ee10",
352 "css": "trash-empty",
352 "css": "trash-empty",
353 "code": 59406,
353 "code": 59406,
354 "src": "fontawesome"
354 "src": "fontawesome"
355 },
355 },
356 {
356 {
357 "uid": "f8aa663c489bcbd6e68ec8147dca841e",
357 "uid": "f8aa663c489bcbd6e68ec8147dca841e",
358 "css": "folder",
358 "css": "folder",
359 "code": 59404,
359 "code": 59404,
360 "src": "fontawesome"
360 "src": "fontawesome"
361 },
361 },
362 {
362 {
363 "uid": "c8585e1e5b0467f28b70bce765d5840c",
363 "uid": "c8585e1e5b0467f28b70bce765d5840c",
364 "css": "docs",
364 "css": "docs",
365 "code": 61637,
365 "code": 61637,
366 "src": "fontawesome"
366 "src": "fontawesome"
367 },
367 },
368 {
368 {
369 "uid": "1b5a5d7b7e3c71437f5a26befdd045ed",
369 "uid": "1b5a5d7b7e3c71437f5a26befdd045ed",
370 "css": "doc",
370 "css": "doc",
371 "code": 59414,
371 "code": 59414,
372 "src": "fontawesome"
372 "src": "fontawesome"
373 },
373 },
374 {
374 {
375 "uid": "5408be43f7c42bccee419c6be53fdef5",
375 "uid": "5408be43f7c42bccee419c6be53fdef5",
376 "css": "doc-text",
376 "css": "doc-text",
377 "code": 61686,
377 "code": 61686,
378 "src": "fontawesome"
378 "src": "fontawesome"
379 },
379 },
380 {
380 {
381 "uid": "b091a8bd0fdade174951f17d936f51e4",
381 "uid": "b091a8bd0fdade174951f17d936f51e4",
382 "css": "folder-empty",
382 "css": "folder-empty",
383 "code": 61716,
383 "code": 61716,
384 "src": "fontawesome"
384 "src": "fontawesome"
385 },
385 },
386 {
386 {
387 "uid": "c08a1cde48d96cba21d8c05fa7d7feb1",
387 "uid": "c08a1cde48d96cba21d8c05fa7d7feb1",
388 "css": "doc-text-inv",
388 "css": "doc-text-inv",
389 "code": 61788,
389 "code": 61788,
390 "src": "fontawesome"
390 "src": "fontawesome"
391 },
391 },
392 {
392 {
393 "uid": "178053298e3e5b03551d754d4b9acd8b",
393 "uid": "178053298e3e5b03551d754d4b9acd8b",
394 "css": "doc-inv",
394 "css": "doc-inv",
395 "code": 61787,
395 "code": 61787,
396 "src": "fontawesome"
396 "src": "fontawesome"
397 },
397 },
398 {
398 {
399 "uid": "e99461abfef3923546da8d745372c995",
399 "uid": "e99461abfef3923546da8d745372c995",
400 "css": "cog",
400 "css": "cog",
401 "code": 59415,
401 "code": 59415,
402 "src": "fontawesome"
402 "src": "fontawesome"
403 },
403 },
404 {
404 {
405 "uid": "98687378abd1faf8f6af97c254eb6cd6",
405 "uid": "98687378abd1faf8f6af97c254eb6cd6",
406 "css": "cog-alt",
406 "css": "cog-alt",
407 "code": 59416,
407 "code": 59416,
408 "src": "fontawesome"
408 "src": "fontawesome"
409 },
409 },
410 {
410 {
411 "uid": "21b42d3c3e6be44c3cc3d73042faa216",
411 "uid": "21b42d3c3e6be44c3cc3d73042faa216",
412 "css": "sliders",
412 "css": "sliders",
413 "code": 61918,
413 "code": 61918,
414 "src": "fontawesome"
414 "src": "fontawesome"
415 },
415 },
416 {
416 {
417 "uid": "559647a6f430b3aeadbecd67194451dd",
417 "uid": "559647a6f430b3aeadbecd67194451dd",
418 "css": "menu",
418 "css": "menu",
419 "code": 61641,
419 "code": 61641,
420 "src": "fontawesome"
420 "src": "fontawesome"
421 },
421 },
422 {
422 {
423 "uid": "c5fd349cbd3d23e4ade333789c29c729",
423 "uid": "c5fd349cbd3d23e4ade333789c29c729",
424 "css": "eye",
424 "css": "eye",
425 "code": 59417,
425 "code": 59417,
426 "src": "fontawesome"
426 "src": "fontawesome"
427 },
427 },
428 {
428 {
429 "uid": "7fd683b2c518ceb9e5fa6757f2276faa",
429 "uid": "7fd683b2c518ceb9e5fa6757f2276faa",
430 "css": "eye-off",
430 "css": "eye-off",
431 "code": 59418,
431 "code": 59418,
432 "src": "fontawesome"
432 "src": "fontawesome"
433 },
433 },
434 {
434 {
435 "uid": "2e2dba0307a502a8507c1729084c7ab5",
435 "uid": "2e2dba0307a502a8507c1729084c7ab5",
436 "css": "cancel-circled2",
436 "css": "cancel-circled2",
437 "code": 59419,
437 "code": 59419,
438 "src": "fontawesome"
438 "src": "fontawesome"
439 },
439 },
440 {
440 {
441 "uid": "0f4cae16f34ae243a6144c18a003f2d8",
441 "uid": "0f4cae16f34ae243a6144c18a003f2d8",
442 "css": "cancel-circled",
442 "css": "cancel-circled",
443 "code": 59420,
443 "code": 59420,
444 "src": "fontawesome"
444 "src": "fontawesome"
445 },
445 },
446 {
446 {
447 "uid": "26613a2e6bc41593c54bead46f8c8ee3",
447 "uid": "26613a2e6bc41593c54bead46f8c8ee3",
448 "css": "file-code",
448 "css": "file-code",
449 "code": 61897,
449 "code": 61897,
450 "src": "fontawesome"
450 "src": "fontawesome"
451 },
451 },
452 {
452 {
453 "uid": "5211af474d3a9848f67f945e2ccaf143",
453 "uid": "5211af474d3a9848f67f945e2ccaf143",
454 "css": "remove",
454 "css": "remove",
455 "code": 59408,
455 "code": 59408,
456 "src": "fontawesome"
456 "src": "fontawesome"
457 },
457 },
458 {
458 {
459 "uid": "44e04715aecbca7f266a17d5a7863c68",
459 "uid": "44e04715aecbca7f266a17d5a7863c68",
460 "css": "plus",
460 "css": "plus",
461 "code": 59421,
461 "code": 59421,
462 "src": "fontawesome"
462 "src": "fontawesome"
463 },
463 },
464 {
464 {
465 "uid": "4ba33d2607902cf690dd45df09774cb0",
465 "uid": "4ba33d2607902cf690dd45df09774cb0",
466 "css": "plus-circled",
466 "css": "plus-circled",
467 "code": 59422,
467 "code": 59422,
468 "src": "fontawesome"
468 "src": "fontawesome"
469 },
469 },
470 {
470 {
471 "uid": "1a5cfa186647e8c929c2b17b9fc4dac1",
471 "uid": "1a5cfa186647e8c929c2b17b9fc4dac1",
472 "css": "plus-squared",
472 "css": "plus-squared",
473 "code": 61694,
473 "code": 61694,
474 "src": "fontawesome"
474 "src": "fontawesome"
475 },
475 },
476 {
476 {
477 "uid": "2d3be3e856fc1e4ac067590d2ded1b07",
477 "uid": "2d3be3e856fc1e4ac067590d2ded1b07",
478 "css": "plus-squared-alt",
478 "css": "plus-squared-alt",
479 "code": 61846,
479 "code": 61846,
480 "src": "fontawesome"
480 "src": "fontawesome"
481 },
481 },
482 {
482 {
483 "uid": "eeadb020bb75d089b25d8424aabe19e0",
483 "uid": "eeadb020bb75d089b25d8424aabe19e0",
484 "css": "minus-circled",
484 "css": "minus-circled",
485 "code": 59423,
485 "code": 59423,
486 "src": "fontawesome"
486 "src": "fontawesome"
487 },
487 },
488 {
488 {
489 "uid": "f755a58fb985eeb70bd47d9b31892a34",
489 "uid": "f755a58fb985eeb70bd47d9b31892a34",
490 "css": "minus-squared",
490 "css": "minus-squared",
491 "code": 61766,
491 "code": 61766,
492 "src": "fontawesome"
492 "src": "fontawesome"
493 },
493 },
494 {
494 {
495 "uid": "18ef25350258541e8e54148ed79845c0",
495 "uid": "18ef25350258541e8e54148ed79845c0",
496 "css": "minus-squared-alt",
496 "css": "minus-squared-alt",
497 "code": 61767,
497 "code": 61767,
498 "src": "fontawesome"
498 "src": "fontawesome"
499 },
499 },
500 {
500 {
501 "uid": "861ab06e455e2de3232ebef67d60d708",
501 "uid": "861ab06e455e2de3232ebef67d60d708",
502 "css": "minus",
502 "css": "minus",
503 "code": 59424,
503 "code": 59424,
504 "src": "fontawesome"
504 "src": "fontawesome"
505 },
505 },
506 {
506 {
507 "uid": "e82cedfa1d5f15b00c5a81c9bd731ea2",
507 "uid": "e82cedfa1d5f15b00c5a81c9bd731ea2",
508 "css": "info-circled",
508 "css": "info-circled",
509 "code": 59425,
509 "code": 59425,
510 "src": "fontawesome"
510 "src": "fontawesome"
511 },
511 },
512 {
512 {
513 "uid": "9dd9e835aebe1060ba7190ad2b2ed951",
513 "uid": "9dd9e835aebe1060ba7190ad2b2ed951",
514 "css": "search",
514 "css": "search",
515 "code": 59411,
515 "code": 59411,
516 "src": "fontawesome"
516 "src": "fontawesome"
517 },
517 },
518 {
518 {
519 "uid": "b429436ec5a518c78479d44ef18dbd60",
519 "uid": "b429436ec5a518c78479d44ef18dbd60",
520 "css": "paste",
520 "css": "paste",
521 "code": 61674,
521 "code": 61674,
522 "src": "fontawesome"
522 "src": "fontawesome"
523 },
523 },
524 {
524 {
525 "uid": "8772331a9fec983cdb5d72902a6f9e0e",
525 "uid": "8772331a9fec983cdb5d72902a6f9e0e",
526 "css": "scissors",
526 "css": "scissors",
527 "code": 59412,
527 "code": 59412,
528 "src": "fontawesome"
528 "src": "fontawesome"
529 },
529 },
530 {
530 {
531 "uid": "9a76bc135eac17d2c8b8ad4a5774fc87",
531 "uid": "9a76bc135eac17d2c8b8ad4a5774fc87",
532 "css": "download",
532 "css": "download",
533 "code": 59413,
533 "code": 59413,
534 "src": "fontawesome"
534 "src": "fontawesome"
535 },
535 },
536 {
536 {
537 "uid": "eeec3208c90b7b48e804919d0d2d4a41",
537 "uid": "eeec3208c90b7b48e804919d0d2d4a41",
538 "css": "upload",
538 "css": "upload",
539 "code": 59426,
539 "code": 59426,
540 "src": "fontawesome"
540 "src": "fontawesome"
541 },
541 },
542 {
542 {
543 "uid": "5d2d07f112b8de19f2c0dbfec3e42c05",
543 "uid": "5d2d07f112b8de19f2c0dbfec3e42c05",
544 "css": "spin",
544 "css": "spin",
545 "code": 59448,
545 "code": 59448,
546 "src": "fontelico"
546 "src": "fontelico"
547 },
547 },
548 {
548 {
549 "uid": "9bd60140934a1eb9236fd7a8ab1ff6ba",
549 "uid": "9bd60140934a1eb9236fd7a8ab1ff6ba",
550 "css": "spin-alt",
550 "css": "spin-alt",
551 "code": 59444,
551 "code": 59444,
552 "src": "fontelico"
552 "src": "fontelico"
553 },
553 },
554 {
554 {
555 "uid": "513ac180ff85bd275f2b736720cbbf5e",
555 "uid": "513ac180ff85bd275f2b736720cbbf5e",
556 "css": "home",
556 "css": "home",
557 "code": 59427,
557 "code": 59427,
558 "src": "entypo"
558 "src": "entypo"
559 },
559 },
560 {
560 {
561 "uid": "d4816c0845aa43767213d45574b3b145",
561 "uid": "d4816c0845aa43767213d45574b3b145",
562 "css": "history",
562 "css": "history",
563 "code": 61914,
563 "code": 61914,
564 "src": "fontawesome"
564 "src": "fontawesome"
565 },
565 },
566 {
566 {
567 "uid": "7034e4d22866af82bef811f52fb1ba46",
568 "css": "code",
569 "code": 61729,
570 "src": "fontawesome"
571 },
572 {
573 "uid": "f3f90c8c89795da30f7444634476ea4f",
574 "css": "angle-left",
575 "code": 61700,
576 "src": "fontawesome"
577 },
578 {
579 "uid": "7bf14281af5633a597f85b061ef1cfb9",
580 "css": "angle-right",
581 "code": 61701,
582 "src": "fontawesome"
583 },
584 {
585 "uid": "5de9370846a26947e03f63142a3f1c07",
586 "css": "angle-up",
587 "code": 61702,
588 "src": "fontawesome"
589 },
590 {
591 "uid": "e4dde1992f787163e2e2b534b8c8067d",
592 "css": "angle-down",
593 "code": 61703,
594 "src": "fontawesome"
595 },
596 {
597 "uid": "4i0s2bklai5fywieqm4dqqngfz9ptfab",
598 "css": "flag-filled",
599 "code": 59428,
600 "src": "typicons"
601 },
602 {
603 "uid": "3d4ea8a78dc34efe891f3a0f3d961274",
604 "css": "info",
605 "code": 61737,
606 "src": "fontawesome"
607 },
608 {
609 "uid": "56a21935a5d4d79b2e91ec00f760b369",
610 "css": "sort",
611 "code": 61660,
612 "src": "fontawesome"
613 },
614 {
615 "uid": "130380e481a7defc690dfb24123a1f0c",
616 "css": "circle",
617 "code": 61713,
618 "src": "fontawesome"
619 },
620 {
621 "uid": "422e07e5afb80258a9c4ed1706498f8a",
622 "css": "circle-empty",
623 "code": 61708,
624 "src": "fontawesome"
625 },
626 {
627 "uid": "5774d0a0e50f6eefc8be01bd761e5dd3",
628 "css": "circle-thin",
629 "code": 61915,
630 "src": "fontawesome"
631 },
632 {
567 "uid": "c43db6645e7515889fc2193294f50767",
633 "uid": "c43db6645e7515889fc2193294f50767",
568 "css": "plus",
634 "css": "plus",
569 "code": 59411,
635 "code": 59411,
570 "src": "custom_icons",
636 "src": "custom_icons",
571 "selected": false,
637 "selected": false,
572 "svg": {
638 "svg": {
573 "path": "M873.1 446.2H619.2C603.8 446.2 592.3 434.6 592.3 419.2V165.4C592.3 150 580.8 138.5 565.4 138.5H465.4C450 138.5 438.5 150 438.5 165.4V419.2C438.5 434.6 426.9 446.2 411.5 446.2H157.7C142.3 446.2 130.8 457.7 130.8 473.1V573.1C130.8 588.5 142.3 600 157.7 600H411.5C426.9 600 438.5 611.5 438.5 626.9V880.8C438.5 896.2 450 907.7 465.4 907.7H565.4C580.8 907.7 592.3 896.2 592.3 880.8V626.9C592.3 611.5 603.8 600 619.2 600H873.1C888.5 600 900 588.5 900 573.1V473.1C900 457.7 888.5 446.2 873.1 446.2Z",
639 "path": "M873.1 446.2H619.2C603.8 446.2 592.3 434.6 592.3 419.2V165.4C592.3 150 580.8 138.5 565.4 138.5H465.4C450 138.5 438.5 150 438.5 165.4V419.2C438.5 434.6 426.9 446.2 411.5 446.2H157.7C142.3 446.2 130.8 457.7 130.8 473.1V573.1C130.8 588.5 142.3 600 157.7 600H411.5C426.9 600 438.5 611.5 438.5 626.9V880.8C438.5 896.2 450 907.7 465.4 907.7H565.4C580.8 907.7 592.3 896.2 592.3 880.8V626.9C592.3 611.5 603.8 600 619.2 600H873.1C888.5 600 900 588.5 900 573.1V473.1C900 457.7 888.5 446.2 873.1 446.2Z",
574 "width": 1000
640 "width": 1000
575 },
641 },
576 "search": [
642 "search": [
577 "plus"
643 "plus"
578 ]
644 ]
579 },
645 },
580 {
646 {
581 "uid": "7d7f338d90203f20c0d8d5c26091cc69",
647 "uid": "7d7f338d90203f20c0d8d5c26091cc69",
582 "css": "minus",
648 "css": "minus",
583 "code": 59412,
649 "code": 59412,
584 "src": "custom_icons",
650 "src": "custom_icons",
585 "selected": false,
651 "selected": false,
586 "svg": {
652 "svg": {
587 "path": "M980 560H20C10 560 0 550 0 540V380C0 370 10 360 20 360H985C995 360 1005 370 1005 380V545C1000 550 990 560 980 560Z",
653 "path": "M980 560H20C10 560 0 550 0 540V380C0 370 10 360 20 360H985C995 360 1005 370 1005 380V545C1000 550 990 560 980 560Z",
588 "width": 1000
654 "width": 1000
589 },
655 },
590 "search": [
656 "search": [
591 "minus"
657 "minus"
592 ]
658 ]
593 },
659 },
594 {
660 {
595 "uid": "4ccc61480001600f2e7e3c7dd0546c6e",
661 "uid": "4ccc61480001600f2e7e3c7dd0546c6e",
596 "css": "remove",
662 "css": "remove",
597 "code": 59413,
663 "code": 59413,
598 "src": "custom_icons",
664 "src": "custom_icons",
599 "selected": false,
665 "selected": false,
600 "svg": {
666 "svg": {
601 "path": "M975 140L860 25C845 10 825 10 810 25L525 310C510 325 490 325 475 310L190 25C175 10 155 10 140 25L25 140C10 155 10 175 25 190L310 475C325 490 325 510 310 525L25 810C10 825 10 845 25 860L140 975C155 990 175 990 190 975L475 690C490 675 510 675 525 690L810 975C825 990 845 990 860 975L975 860C990 845 990 825 975 810L690 525C675 510 675 490 690 475L975 190C990 180 990 155 975 140Z",
667 "path": "M975 140L860 25C845 10 825 10 810 25L525 310C510 325 490 325 475 310L190 25C175 10 155 10 140 25L25 140C10 155 10 175 25 190L310 475C325 490 325 510 310 525L25 810C10 825 10 845 25 860L140 975C155 990 175 990 190 975L475 690C490 675 510 675 525 690L810 975C825 990 845 990 860 975L975 860C990 845 990 825 975 810L690 525C675 510 675 490 690 475L975 190C990 180 990 155 975 140Z",
602 "width": 1000
668 "width": 1000
603 },
669 },
604 "search": [
670 "search": [
605 "remove"
671 "remove"
606 ]
672 ]
607 },
673 },
608 {
674 {
609 "uid": "b1afcccc053ecb95fbcacf06e5c0d554",
675 "uid": "b1afcccc053ecb95fbcacf06e5c0d554",
610 "css": "history",
676 "css": "history",
611 "code": 59418,
677 "code": 59418,
612 "src": "custom_icons",
678 "src": "custom_icons",
613 "selected": false,
679 "selected": false,
614 "svg": {
680 "svg": {
615 "path": "",
681 "path": "",
616 "width": 1143
682 "width": 1143
617 },
683 },
618 "search": [
684 "search": [
619 "history"
685 "history"
620 ]
686 ]
621 }
687 }
622 ]
688 ]
623 } No newline at end of file
689 }
1 NO CONTENT: modified file, binary diff hidden
NO CONTENT: modified file, binary diff hidden
@@ -1,134 +1,156 b''
1 <?xml version="1.0" standalone="no"?>
1 <?xml version="1.0" standalone="no"?>
2 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
2 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
3 <svg xmlns="http://www.w3.org/2000/svg">
3 <svg xmlns="http://www.w3.org/2000/svg">
4 <metadata>Copyright (C) 2019 by original authors @ fontello.com</metadata>
4 <metadata>Copyright (C) 2019 by original authors @ fontello.com</metadata>
5 <defs>
5 <defs>
6 <font id="rcicons" horiz-adv-x="1000" >
6 <font id="rcicons" horiz-adv-x="1000" >
7 <font-face font-family="rcicons" font-weight="400" font-stretch="normal" units-per-em="1000" ascent="850" descent="-150" />
7 <font-face font-family="rcicons" font-weight="400" font-stretch="normal" units-per-em="1000" ascent="850" descent="-150" />
8 <missing-glyph horiz-adv-x="1000" />
8 <missing-glyph horiz-adv-x="1000" />
9 <glyph glyph-name="delete" unicode="&#xe800;" d="M515 758c-211 0-384-173-384-385 0-211 173-385 384-385s385 174 385 385c0 212-173 385-385 385z m227-416c0-15-11-27-30-27h-397c-15 0-30 12-30 27v62c0 15 11 27 30 27h397c15 0 30-12 30-27v-62z" horiz-adv-x="1000" />
9 <glyph glyph-name="delete" unicode="&#xe800;" d="M515 758c-211 0-384-173-384-385 0-211 173-385 384-385s385 174 385 385c0 212-173 385-385 385z m227-416c0-15-11-27-30-27h-397c-15 0-30 12-30 27v62c0 15 11 27 30 27h397c15 0 30-12 30-27v-62z" horiz-adv-x="1000" />
10
10
11 <glyph glyph-name="ok" unicode="&#xe801;" d="M515 735c-211 0-384-173-384-385 0-211 173-385 384-385s385 174 385 385c0 212-173 385-385 385z m239-296l-304-304c-11-12-27-12-38 0l-139 138c-11 12-11 27 0 39l42 42c12 11 27 11 39 0l58-58c11-11 27-11 38 0l219 219c12 12 27 12 39 0l42-42c15-8 15-23 4-34z" horiz-adv-x="1000" />
11 <glyph glyph-name="ok" unicode="&#xe801;" d="M515 735c-211 0-384-173-384-385 0-211 173-385 384-385s385 174 385 385c0 212-173 385-385 385z m239-296l-304-304c-11-12-27-12-38 0l-139 138c-11 12-11 27 0 39l42 42c12 11 27 11 39 0l58-58c11-11 27-11 38 0l219 219c12 12 27 12 39 0l42-42c15-8 15-23 4-34z" horiz-adv-x="1000" />
12
12
13 <glyph glyph-name="comment" unicode="&#xe802;" d="M131 65v504c0 73 58 131 131 131h507c73 0 131-58 131-131v-288c0-73-58-131-131-131h-496c-4 0-11-4-15-8l-93-92c-11-15-34-4-34 15z m131 574c-39 0-73-31-73-74v-411l46 46c4 4 7 8 15 8h519c39 0 73 31 73 73v288c0 39-30 73-73 73h-507z" horiz-adv-x="1000" />
13 <glyph glyph-name="comment" unicode="&#xe802;" d="M131 65v504c0 73 58 131 131 131h507c73 0 131-58 131-131v-288c0-73-58-131-131-131h-496c-4 0-11-4-15-8l-93-92c-11-15-34-4-34 15z m131 574c-39 0-73-31-73-74v-411l46 46c4 4 7 8 15 8h519c39 0 73 31 73 73v288c0 39-30 73-73 73h-507z" horiz-adv-x="1000" />
14
14
15 <glyph glyph-name="bookmark" unicode="&#xe803;" d="M780-140l-260 290c-10 10-25 10-35 0l-260-295c-20-20-45-5-45 30v930c-5 20 10 35 25 35h590c15 0 30-15 30-35v-925c0-35-30-50-45-30z" horiz-adv-x="1000" />
15 <glyph glyph-name="bookmark" unicode="&#xe803;" d="M780-140l-260 290c-10 10-25 10-35 0l-260-295c-20-20-45-5-45 30v930c-5 20 10 35 25 35h590c15 0 30-15 30-35v-925c0-35-30-50-45-30z" horiz-adv-x="1000" />
16
16
17 <glyph glyph-name="branch" unicode="&#xe804;" d="M875 600c0 76-58 134-134 134s-134-58-134-134c0-49 27-89 63-112-18-142-139-183-210-196v313c45 22 71 62 71 111 0 76-58 134-134 134s-134-58-134-134c0-49 27-94 67-116v-500c-40-22-67-67-67-116 0-76 58-134 134-134s134 58 134 134c0 49-26 94-67 116v58c63 9 166 31 246 112 58 58 89 129 98 214 40 22 67 67 67 116z m-478 161c27 0 45-18 45-45s-18-45-45-45-44 18-44 45 18 45 44 45z m0-822c-26 0-44 18-44 45s18 45 44 45 45-18 45-45-22-45-45-45z m344 706c27 0 45-18 45-45s-18-45-45-45-45 18-45 45 23 45 45 45z" horiz-adv-x="1000" />
17 <glyph glyph-name="branch" unicode="&#xe804;" d="M875 600c0 76-58 134-134 134s-134-58-134-134c0-49 27-89 63-112-18-142-139-183-210-196v313c45 22 71 62 71 111 0 76-58 134-134 134s-134-58-134-134c0-49 27-94 67-116v-500c-40-22-67-67-67-116 0-76 58-134 134-134s134 58 134 134c0 49-26 94-67 116v58c63 9 166 31 246 112 58 58 89 129 98 214 40 22 67 67 67 116z m-478 161c27 0 45-18 45-45s-18-45-45-45-44 18-44 45 18 45 44 45z m0-822c-26 0-44 18-44 45s18 45 44 45 45-18 45-45-22-45-45-45z m344 706c27 0 45-18 45-45s-18-45-45-45-45 18-45 45 23 45 45 45z" horiz-adv-x="1000" />
18
18
19 <glyph glyph-name="tag" unicode="&#xe805;" d="M460 788l-366 8c-18 0-31-13-31-31l13-366c0-9 4-13 9-22l464-465c14-13 31-13 45 0l352 353c14 14 14 31 0 45l-468 469c-5 4-14 9-18 9z m-103-224c0-35-31-67-67-67-35 0-67 32-67 67 0 36 32 67 67 67s67-26 67-67z" horiz-adv-x="1000" />
19 <glyph glyph-name="tag" unicode="&#xe805;" d="M460 788l-366 8c-18 0-31-13-31-31l13-366c0-9 4-13 9-22l464-465c14-13 31-13 45 0l352 353c14 14 14 31 0 45l-468 469c-5 4-14 9-18 9z m-103-224c0-35-31-67-67-67-35 0-67 32-67 67 0 36 32 67 67 67s67-26 67-67z" horiz-adv-x="1000" />
20
20
21 <glyph glyph-name="lock" unicode="&#xe806;" d="M813 426h-54v107c0 9 0 13 0 18 0 4 0 9 0 13 0 5 0 5 0 9 0 9 0 14-4 23 0 4 0 4-5 9 0 8-4 13-9 22 0 0 0 4-4 4-5 9-9 18-14 27 0 0-4 5-4 5 4 8 0 17-5 22 0 4-4 4-4 9-5 4-9 13-14 18 0 0-4 4-4 4-9 9-13 14-22 22 0 0-5 0-5 5-4 4-13 9-22 13-5 0-5 5-9 5-4 4-13 9-18 9-4 0-4 4-9 4-9 5-18 9-27 9 0 0 0 0 0 0-9 5-17 5-31 9-4 0-4 0-9 0-4 0-4 0-9 0 0 0-4 0-4 0 0 0-5 0-5 0 0 0 0 0 0 0 0 0 0 0 0 0-4 0-9 0-9 0 0 0-4 0-4 0-4 0-4 0-9 0 0 0 0 0 0 0-4 0-9 0-9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0-4 0-4 0 0 0-5 0-5 0-4 0-4 0-9 0-4 0-4 0-9 0-9 0-22-4-31-9 0 0 0 0 0 0-22 0-36-4-45-9-4 0-4-4-8-4-5-5-9-5-18-9 0-5-5-5-5-5-9-4-18-9-22-18 0 0-5 0-5-4-9-4-13-9-22-18 0 0-4-4-4-4-5-5-9-14-14-18 0-5-4-5-4-9-9-5-14-14-14-18-4 0-4-4-4-4-5-9-9-18-13-27 0 0 0-5-5-5 0-13-4-18-4-26 0-5 0-5-5-9 0-9-4-14-4-23 0-4 0-4 0-9 0-4 0-9 0-13 0-5 0-13 0-18v-107h-49c-18 0-27-13-27-27v-464c0-18 13-27 27-27h620c18 0 27 13 27 27v464c4 18-9 27-22 27z m-451 107c0 67 49 121 111 134 0 0 0 0 5 0 9 0 13 0 22 0 0 0 5 0 5 0 0 0 0 0 0 0 8 0 13 0 22 0 0 0 0 0 4 0 63-13 112-67 112-134v-107h-281v107z" horiz-adv-x="1000" />
21 <glyph glyph-name="lock" unicode="&#xe806;" d="M813 426h-54v107c0 9 0 13 0 18 0 4 0 9 0 13 0 5 0 5 0 9 0 9 0 14-4 23 0 4 0 4-5 9 0 8-4 13-9 22 0 0 0 4-4 4-5 9-9 18-14 27 0 0-4 5-4 5 4 8 0 17-5 22 0 4-4 4-4 9-5 4-9 13-14 18 0 0-4 4-4 4-9 9-13 14-22 22 0 0-5 0-5 5-4 4-13 9-22 13-5 0-5 5-9 5-4 4-13 9-18 9-4 0-4 4-9 4-9 5-18 9-27 9 0 0 0 0 0 0-9 5-17 5-31 9-4 0-4 0-9 0-4 0-4 0-9 0 0 0-4 0-4 0 0 0-5 0-5 0 0 0 0 0 0 0 0 0 0 0 0 0-4 0-9 0-9 0 0 0-4 0-4 0-4 0-4 0-9 0 0 0 0 0 0 0-4 0-9 0-9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0-4 0-4 0 0 0-5 0-5 0-4 0-4 0-9 0-4 0-4 0-9 0-9 0-22-4-31-9 0 0 0 0 0 0-22 0-36-4-45-9-4 0-4-4-8-4-5-5-9-5-18-9 0-5-5-5-5-5-9-4-18-9-22-18 0 0-5 0-5-4-9-4-13-9-22-18 0 0-4-4-4-4-5-5-9-14-14-18 0-5-4-5-4-9-9-5-14-14-14-18-4 0-4-4-4-4-5-9-9-18-13-27 0 0 0-5-5-5 0-13-4-18-4-26 0-5 0-5-5-9 0-9-4-14-4-23 0-4 0-4 0-9 0-4 0-9 0-13 0-5 0-13 0-18v-107h-49c-18 0-27-13-27-27v-464c0-18 13-27 27-27h620c18 0 27 13 27 27v464c4 18-9 27-22 27z m-451 107c0 67 49 121 111 134 0 0 0 0 5 0 9 0 13 0 22 0 0 0 5 0 5 0 0 0 0 0 0 0 8 0 13 0 22 0 0 0 0 0 4 0 63-13 112-67 112-134v-107h-281v107z" horiz-adv-x="1000" />
22
22
23 <glyph glyph-name="unlock" unicode="&#xe807;" d="M781 415h-385v93c0 57 43 104 96 115 0 0 0 0 4 0 8 0 12 0 19 0 0 0 4 0 4 0 0 0 0 0 4 0 8 0 16 0 23-4 0 0 0 0 0 0 8 0 12-4 19-7 0 0 4 0 4-4 4-4 12-4 16-8 0 0 0 0 0 0 4-4 11-8 15-11 0 0 4-4 4-4 4-4 8-8 11-12 0 0 0 0 4-4 4-4 8-11 12-19 0 0 0-4 0-4 4-4 4-11 4-15 0 0 0-4 0-4 0 0 0 0 0-4 4-11 11-19 23-19h57c16 0 27 11 24 27 0 0 0 0 0 0 0 0 0 4 0 4 0 7-4 11-4 19 0 4 0 4-4 8 0 15 0 19-4 27 0 0 0 3-4 3-4 8-8 16-11 23 0 0-4 4-4 4-4 8-8 12-12 16 0 4-4 4-4 7-3 4-7 12-11 16 0 0-4 4-4 4-8 7-12 11-19 19 0 0-4 0-4 4-4 4-12 7-19 11-4 0-4 4-8 4-4 4-12 8-15 8-4 0-4 4-8 4-8 3-15 7-23 7 0 0 0 0 0 0-8 4-16 4-27 8-4 0-4 0-8 0-7 0-11 0-19 4-4 0-8 0-8 0-7 0-15 0-23 0 0 0-4 0-4 0-7 0-15-4-27-4-3 0-11-4-15-4 0 0-4 0-4 0-92-27-157-115-157-215v-93h-43c-15 0-23-11-23-23v-400c0-15 12-23 23-23h535c15 0 23 12 23 23v400c4 12-8 23-23 23z" horiz-adv-x="1000" />
23 <glyph glyph-name="unlock" unicode="&#xe807;" d="M781 415h-385v93c0 57 43 104 96 115 0 0 0 0 4 0 8 0 12 0 19 0 0 0 4 0 4 0 0 0 0 0 4 0 8 0 16 0 23-4 0 0 0 0 0 0 8 0 12-4 19-7 0 0 4 0 4-4 4-4 12-4 16-8 0 0 0 0 0 0 4-4 11-8 15-11 0 0 4-4 4-4 4-4 8-8 11-12 0 0 0 0 4-4 4-4 8-11 12-19 0 0 0-4 0-4 4-4 4-11 4-15 0 0 0-4 0-4 0 0 0 0 0-4 4-11 11-19 23-19h57c16 0 27 11 24 27 0 0 0 0 0 0 0 0 0 4 0 4 0 7-4 11-4 19 0 4 0 4-4 8 0 15 0 19-4 27 0 0 0 3-4 3-4 8-8 16-11 23 0 0-4 4-4 4-4 8-8 12-12 16 0 4-4 4-4 7-3 4-7 12-11 16 0 0-4 4-4 4-8 7-12 11-19 19 0 0-4 0-4 4-4 4-12 7-19 11-4 0-4 4-8 4-4 4-12 8-15 8-4 0-4 4-8 4-8 3-15 7-23 7 0 0 0 0 0 0-8 4-16 4-27 8-4 0-4 0-8 0-7 0-11 0-19 4-4 0-8 0-8 0-7 0-15 0-23 0 0 0-4 0-4 0-7 0-15-4-27-4-3 0-11-4-15-4 0 0-4 0-4 0-92-27-157-115-157-215v-93h-43c-15 0-23-11-23-23v-400c0-15 12-23 23-23h535c15 0 23 12 23 23v400c4 12-8 23-23 23z" horiz-adv-x="1000" />
24
24
25 <glyph glyph-name="feed" unicode="&#xe808;" d="M842 739h-653c-35 0-58-27-58-58v-658c0-31 27-58 58-58h657c31 0 58 27 58 58v658c-4 31-31 58-62 58z m-534-666c-39 0-73 31-73 73s30 73 73 73c38 0 73-30 73-73s-35-73-73-73z m246-11c-35 0-58 27-58 57 0 112-88 200-200 200-31 0-65 27-65 58 0 35 23 62 54 62l11 0c177 0 319-143 319-320-3-30-30-57-61-57z m196 0c-35 0-58 27-58 57 0 220-180 400-400 400-30 0-65 27-65 62 0 34 23 61 54 61l11 0c285 0 520-230 520-519 0-34-27-61-62-61z" horiz-adv-x="1000" />
25 <glyph glyph-name="feed" unicode="&#xe808;" d="M842 739h-653c-35 0-58-27-58-58v-658c0-31 27-58 58-58h657c31 0 58 27 58 58v658c-4 31-31 58-62 58z m-534-666c-39 0-73 31-73 73s30 73 73 73c38 0 73-30 73-73s-35-73-73-73z m246-11c-35 0-58 27-58 57 0 112-88 200-200 200-31 0-65 27-65 58 0 35 23 62 54 62l11 0c177 0 319-143 319-320-3-30-30-57-61-57z m196 0c-35 0-58 27-58 57 0 220-180 400-400 400-30 0-65 27-65 62 0 34 23 61 54 61l11 0c285 0 520-230 520-519 0-34-27-61-62-61z" horiz-adv-x="1000" />
26
26
27 <glyph glyph-name="left" unicode="&#xe809;" d="M692 773l70-69c11-12 11-27 0-39l-289-288c-11-12-11-27 0-38l296-297c12-11 12-27 0-38l-69-69c-11-12-27-12-38 0l-404 404c-12 11-12 26 0 38l396 396c11 12 27 12 38 0z" horiz-adv-x="1000" />
27 <glyph glyph-name="left" unicode="&#xe809;" d="M692 773l70-69c11-12 11-27 0-39l-289-288c-11-12-11-27 0-38l296-297c12-11 12-27 0-38l-69-69c-11-12-27-12-38 0l-404 404c-12 11-12 26 0 38l396 396c11 12 27 12 38 0z" horiz-adv-x="1000" />
28
28
29 <glyph glyph-name="right" unicode="&#xe80a;" d="M339-65l-74 69c-11 11-11 27 0 38l289 289c11 11 11 27 0 38l-296 296c-12 12-12 27 0 39l69 69c12 12 27 12 38 0l404-404c12-11 12-27 0-38l-392-396c-12-12-31-12-38 0z" horiz-adv-x="1000" />
29 <glyph glyph-name="right" unicode="&#xe80a;" d="M339-65l-74 69c-11 11-11 27 0 38l289 289c11 11 11 27 0 38l-296 296c-12 12-12 27 0 39l69 69c12 12 27 12 38 0l404-404c12-11 12-27 0-38l-392-396c-12-12-31-12-38 0z" horiz-adv-x="1000" />
30
30
31 <glyph glyph-name="down" unicode="&#xe80b;" d="M704 454l-173-219c-8-8-23-8-27 0l-173 219c-8 11 0 31 15 31h346c12 0 20-20 12-31z" horiz-adv-x="1000" />
31 <glyph glyph-name="down" unicode="&#xe80b;" d="M704 454l-173-219c-8-8-23-8-27 0l-173 219c-8 11 0 31 15 31h346c12 0 20-20 12-31z" horiz-adv-x="1000" />
32
32
33 <glyph glyph-name="folder" unicode="&#xe80c;" d="M929 511v-393q0-51-37-88t-88-37h-679q-51 0-88 37t-37 88v536q0 51 37 88t88 37h179q51 0 88-37t37-88v-18h375q51 0 88-37t37-88z" horiz-adv-x="928.6" />
33 <glyph glyph-name="folder" unicode="&#xe80c;" d="M929 511v-393q0-51-37-88t-88-37h-679q-51 0-88 37t-37 88v536q0 51 37 88t88 37h179q51 0 88-37t37-88v-18h375q51 0 88-37t37-88z" horiz-adv-x="928.6" />
34
34
35 <glyph glyph-name="folder-open" unicode="&#xe80d;" d="M1049 319q0-17-18-37l-187-221q-24-28-67-48t-81-20h-607q-19 0-33 7t-15 24q0 17 17 37l188 221q24 28 67 48t80 20h607q19 0 34-7t15-24z m-192 192v-90h-464q-53 0-110-26t-92-67l-188-221-2-3q0 2-1 7t0 7v536q0 51 37 88t88 37h179q51 0 88-37t37-88v-18h303q52 0 88-37t37-88z" horiz-adv-x="1071.4" />
35 <glyph glyph-name="folder-open" unicode="&#xe80d;" d="M1049 319q0-17-18-37l-187-221q-24-28-67-48t-81-20h-607q-19 0-33 7t-15 24q0 17 17 37l188 221q24 28 67 48t80 20h607q19 0 34-7t15-24z m-192 192v-90h-464q-53 0-110-26t-92-67l-188-221-2-3q0 2-1 7t0 7v536q0 51 37 88t88 37h179q51 0 88-37t37-88v-18h303q52 0 88-37t37-88z" horiz-adv-x="1071.4" />
36
36
37 <glyph glyph-name="trash-empty" unicode="&#xe80e;" d="M286 439v-321q0-8-5-13t-13-5h-36q-8 0-13 5t-5 13v321q0 8 5 13t13 5h36q8 0 13-5t5-13z m143 0v-321q0-8-5-13t-13-5h-36q-8 0-13 5t-5 13v321q0 8 5 13t13 5h36q8 0 13-5t5-13z m142 0v-321q0-8-5-13t-12-5h-36q-8 0-13 5t-5 13v321q0 8 5 13t13 5h36q7 0 12-5t5-13z m72-404v529h-500v-529q0-12 4-22t8-15 6-5h464q2 0 6 5t8 15 4 22z m-375 601h250l-27 65q-4 5-9 6h-177q-6-1-10-6z m518-18v-36q0-8-5-13t-13-5h-54v-529q0-46-26-80t-63-34h-464q-37 0-63 33t-27 79v531h-53q-8 0-13 5t-5 13v36q0 8 5 13t13 5h172l39 93q9 21 31 35t44 15h178q23 0 44-15t30-35l39-93h173q8 0 13-5t5-13z" horiz-adv-x="785.7" />
37 <glyph glyph-name="trash-empty" unicode="&#xe80e;" d="M286 439v-321q0-8-5-13t-13-5h-36q-8 0-13 5t-5 13v321q0 8 5 13t13 5h36q8 0 13-5t5-13z m143 0v-321q0-8-5-13t-13-5h-36q-8 0-13 5t-5 13v321q0 8 5 13t13 5h36q8 0 13-5t5-13z m142 0v-321q0-8-5-13t-12-5h-36q-8 0-13 5t-5 13v321q0 8 5 13t13 5h36q7 0 12-5t5-13z m72-404v529h-500v-529q0-12 4-22t8-15 6-5h464q2 0 6 5t8 15 4 22z m-375 601h250l-27 65q-4 5-9 6h-177q-6-1-10-6z m518-18v-36q0-8-5-13t-13-5h-54v-529q0-46-26-80t-63-34h-464q-37 0-63 33t-27 79v531h-53q-8 0-13 5t-5 13v36q0 8 5 13t13 5h172l39 93q9 21 31 35t44 15h178q23 0 44-15t30-35l39-93h173q8 0 13-5t5-13z" horiz-adv-x="785.7" />
38
38
39 <glyph glyph-name="group" unicode="&#xe80f;" d="M962 219v-15c0-4-4-12-12-12h-161-4c-16 20-39 39-77 43-35 7-54 15-69 23 7 7 19 11 30 15 46 8 58 23 66 35 7 11 7 23 0 38-8 16-31 43-31 81 0 38 0 104 73 104h8 7c73-4 77-66 73-104 0-38-23-69-30-81-8-15-8-27 0-38 7-12 23-27 65-35 54-4 62-46 62-54 0 0 0 0 0 0z m-708-15c15 15 38 31 69 35 39 7 62 15 73 26-7 8-19 16-34 20-47 7-58 23-66 34-7 12-7 23 0 39 8 15 31 42 31 81 0 38 0 103-73 103h-8-11c-73-3-77-65-73-103 0-39 23-70 30-81 8-16 8-27 0-39-7-11-23-27-65-34-46-8-54-50-54-54 0 0 0 0 0 0v-16c0-3 4-11 12-11h161 8z m454 11c-73 12-96 35-108 54-11 20-11 39 0 62 12 23 50 69 54 131 4 61 0 165-119 169h-16-15c-119-4-123-104-119-166 4-61 38-107 54-130 11-23 11-43 0-62-12-19-35-42-108-54-73-11-85-80-85-88 0 0 0 0 0 0v-23c0-8 8-16 16-16h257 258c8 0 15 8 15 16v23c0 0 0 0 0 0-3 4-11 73-84 84z" horiz-adv-x="1000" />
39 <glyph glyph-name="group" unicode="&#xe80f;" d="M962 219v-15c0-4-4-12-12-12h-161-4c-16 20-39 39-77 43-35 7-54 15-69 23 7 7 19 11 30 15 46 8 58 23 66 35 7 11 7 23 0 38-8 16-31 43-31 81 0 38 0 104 73 104h8 7c73-4 77-66 73-104 0-38-23-69-30-81-8-15-8-27 0-38 7-12 23-27 65-35 54-4 62-46 62-54 0 0 0 0 0 0z m-708-15c15 15 38 31 69 35 39 7 62 15 73 26-7 8-19 16-34 20-47 7-58 23-66 34-7 12-7 23 0 39 8 15 31 42 31 81 0 38 0 103-73 103h-8-11c-73-3-77-65-73-103 0-39 23-70 30-81 8-16 8-27 0-39-7-11-23-27-65-34-46-8-54-50-54-54 0 0 0 0 0 0v-16c0-3 4-11 12-11h161 8z m454 11c-73 12-96 35-108 54-11 20-11 39 0 62 12 23 50 69 54 131 4 61 0 165-119 169h-16-15c-119-4-123-104-119-166 4-61 38-107 54-130 11-23 11-43 0-62-12-19-35-42-108-54-73-11-85-80-85-88 0 0 0 0 0 0v-23c0-8 8-16 16-16h257 258c8 0 15 8 15 16v23c0 0 0 0 0 0-3 4-11 73-84 84z" horiz-adv-x="1000" />
40
40
41 <glyph glyph-name="remove" unicode="&#xe810;" d="M724 112q0-22-15-38l-76-76q-16-15-38-15t-38 15l-164 165-164-165q-16-15-38-15t-38 15l-76 76q-16 16-16 38t16 38l164 164-164 164q-16 16-16 38t16 38l76 76q16 16 38 16t38-16l164-164 164 164q16 16 38 16t38-16l76-76q15-15 15-38t-15-38l-164-164 164-164q15-15 15-38z" horiz-adv-x="785.7" />
41 <glyph glyph-name="remove" unicode="&#xe810;" d="M724 112q0-22-15-38l-76-76q-16-15-38-15t-38 15l-164 165-164-165q-16-15-38-15t-38 15l-76 76q-16 16-16 38t16 38l164 164-164 164q-16 16-16 38t16 38l76 76q16 16 38 16t38-16l164-164 164 164q16 16 38 16t38-16l76-76q15-15 15-38t-15-38l-164-164 164-164q15-15 15-38z" horiz-adv-x="785.7" />
42
42
43 <glyph glyph-name="fork" unicode="&#xe811;" d="M792 654c0 58-46 100-100 100-57 0-100-46-100-100 0-35 20-65 47-85-12-84-70-123-127-142-58 15-116 54-127 142 27 20 46 50 46 85 0 58-46 100-100 100s-108-42-108-100c0-39 23-73 54-89 12-107 77-188 181-226v-162c-31-19-50-50-50-88 0-58 46-101 100-101s100 47 100 101c0 38-19 69-50 88v162c104 38 169 119 181 226 30 20 53 50 53 89z m-465 35c19 0 35-16 35-35s-16-31-35-31-35 12-35 31 16 35 35 35z m181-635c-19 0-35 15-35 35s16 34 35 34c19 0 34-15 34-34s-15-35-34-35z m184 635c20 0 35-16 35-35s-15-31-35-31-34 16-34 35 15 31 34 31z" horiz-adv-x="1000" />
43 <glyph glyph-name="fork" unicode="&#xe811;" d="M792 654c0 58-46 100-100 100-57 0-100-46-100-100 0-35 20-65 47-85-12-84-70-123-127-142-58 15-116 54-127 142 27 20 46 50 46 85 0 58-46 100-100 100s-108-42-108-100c0-39 23-73 54-89 12-107 77-188 181-226v-162c-31-19-50-50-50-88 0-58 46-101 100-101s100 47 100 101c0 38-19 69-50 88v162c104 38 169 119 181 226 30 20 53 50 53 89z m-465 35c19 0 35-16 35-35s-16-31-35-31-35 12-35 31 16 35 35 35z m181-635c-19 0-35 15-35 35s16 34 35 34c19 0 34-15 34-34s-15-35-34-35z m184 635c20 0 35-16 35-35s-15-31-35-31-34 16-34 35 15 31 34 31z" horiz-adv-x="1000" />
44
44
45 <glyph glyph-name="more" unicode="&#xe812;" d="M546 435h-100c-15 0-27-12-27-27v-100c0-16 12-27 27-27h100c16 0 27 11 27 27v100c0 15-11 27-27 27z m0 307h-100c-15 0-27-11-27-27v-100c0-15 12-26 27-26h100c16 0 27 11 27 26v100c0 16-11 27-27 27z m0-615h-100c-15 0-27-12-27-27v-100c0-15 12-27 27-27h100c16 0 27 12 27 27v100c0 15-11 27-27 27z" horiz-adv-x="1000" />
45 <glyph glyph-name="more" unicode="&#xe812;" d="M546 435h-100c-15 0-27-12-27-27v-100c0-16 12-27 27-27h100c16 0 27 11 27 27v100c0 15-11 27-27 27z m0 307h-100c-15 0-27-11-27-27v-100c0-15 12-26 27-26h100c16 0 27 11 27 26v100c0 16-11 27-27 27z m0-615h-100c-15 0-27-12-27-27v-100c0-15 12-27 27-27h100c16 0 27 12 27 27v100c0 15-11 27-27 27z" horiz-adv-x="1000" />
46
46
47 <glyph glyph-name="search" unicode="&#xe813;" d="M643 386q0 103-73 176t-177 74-177-74-73-176 73-177 177-73 177 73 73 177z m286-465q0-29-22-50t-50-21q-30 0-50 21l-191 191q-100-69-223-69-80 0-153 31t-125 84-84 125-31 153 31 152 84 126 125 84 153 31 153-31 125-84 84-126 31-152q0-123-69-223l191-191q21-21 21-51z" horiz-adv-x="928.6" />
47 <glyph glyph-name="search" unicode="&#xe813;" d="M643 386q0 103-73 176t-177 74-177-74-73-176 73-177 177-73 177 73 73 177z m286-465q0-29-22-50t-50-21q-30 0-50 21l-191 191q-100-69-223-69-80 0-153 31t-125 84-84 125-31 153 31 152 84 126 125 84 153 31 153-31 125-84 84-126 31-152q0-123-69-223l191-191q21-21 21-51z" horiz-adv-x="928.6" />
48
48
49 <glyph glyph-name="scissors" unicode="&#xe814;" d="M536 350q14 0 25-11t10-25-10-25-25-10-25 10-11 25 11 25 25 11z m167-36l283-222q16-11 14-31-3-20-19-28l-72-36q-7-4-16-4-10 0-17 4l-385 216-62-36q-4-3-7-3 8-28 6-54-4-43-31-83t-74-69q-74-47-154-47-76 0-124 44-51 47-44 116 4 42 31 82t73 69q74 47 155 47 46 0 84-18 5 8 13 13l68 40-68 41q-8 5-13 12-38-17-84-17-81 0-155 47-46 30-73 69t-31 82q-3 33 8 63t36 52q47 44 124 44 80 0 154-47 46-29 74-68t31-83q2-27-6-54 3-1 7-3l62-37 385 216q7 5 17 5 9 0 16-4l72-36q16-9 19-28 2-20-14-32z m-380 145q26 24 12 61t-59 65q-52 33-107 33-42 0-63-20-26-24-12-60t59-66q51-33 107-33 41 0 63 20z m-47-415q45 28 59 65t-12 60q-22 20-63 20-56 0-107-33-45-28-59-65t12-60q21-20 63-20 55 0 107 33z m99 342l54-33v7q0 20 18 31l8 4-44 26-15-14q-1-2-5-6t-7-7q-1-1-2-2t-2-1z m125-125l54-18 410 321-71 36-429-240v-64l-89-53 5-5q1-1 4-3 2-2 6-7t6-6l15-15z m393-232l71 35-290 228-99-77q-1-2-7-4z" horiz-adv-x="1000" />
49 <glyph glyph-name="scissors" unicode="&#xe814;" d="M536 350q14 0 25-11t10-25-10-25-25-10-25 10-11 25 11 25 25 11z m167-36l283-222q16-11 14-31-3-20-19-28l-72-36q-7-4-16-4-10 0-17 4l-385 216-62-36q-4-3-7-3 8-28 6-54-4-43-31-83t-74-69q-74-47-154-47-76 0-124 44-51 47-44 116 4 42 31 82t73 69q74 47 155 47 46 0 84-18 5 8 13 13l68 40-68 41q-8 5-13 12-38-17-84-17-81 0-155 47-46 30-73 69t-31 82q-3 33 8 63t36 52q47 44 124 44 80 0 154-47 46-29 74-68t31-83q2-27-6-54 3-1 7-3l62-37 385 216q7 5 17 5 9 0 16-4l72-36q16-9 19-28 2-20-14-32z m-380 145q26 24 12 61t-59 65q-52 33-107 33-42 0-63-20-26-24-12-60t59-66q51-33 107-33 41 0 63 20z m-47-415q45 28 59 65t-12 60q-22 20-63 20-56 0-107-33-45-28-59-65t12-60q21-20 63-20 55 0 107 33z m99 342l54-33v7q0 20 18 31l8 4-44 26-15-14q-1-2-5-6t-7-7q-1-1-2-2t-2-1z m125-125l54-18 410 321-71 36-429-240v-64l-89-53 5-5q1-1 4-3 2-2 6-7t6-6l15-15z m393-232l71 35-290 228-99-77q-1-2-7-4z" horiz-adv-x="1000" />
50
50
51 <glyph glyph-name="download" unicode="&#xe815;" d="M714 100q0 15-10 25t-25 11-25-11-11-25 11-25 25-11 25 11 10 25z m143 0q0 15-10 25t-26 11-25-11-10-25 10-25 25-11 26 11 10 25z m72 125v-179q0-22-16-37t-38-16h-821q-23 0-38 16t-16 37v179q0 22 16 38t38 16h259l75-76q33-32 76-32t76 32l76 76h259q22 0 38-16t16-38z m-182 318q10-23-8-39l-250-250q-10-11-25-11t-25 11l-250 250q-17 16-8 39 10 21 33 21h143v250q0 15 11 25t25 11h143q14 0 25-11t10-25v-250h143q24 0 33-21z" horiz-adv-x="928.6" />
51 <glyph glyph-name="download" unicode="&#xe815;" d="M714 100q0 15-10 25t-25 11-25-11-11-25 11-25 25-11 25 11 10 25z m143 0q0 15-10 25t-26 11-25-11-10-25 10-25 25-11 26 11 10 25z m72 125v-179q0-22-16-37t-38-16h-821q-23 0-38 16t-16 37v179q0 22 16 38t38 16h259l75-76q33-32 76-32t76 32l76 76h259q22 0 38-16t16-38z m-182 318q10-23-8-39l-250-250q-10-11-25-11t-25 11l-250 250q-17 16-8 39 10 21 33 21h143v250q0 15 11 25t25 11h143q14 0 25-11t10-25v-250h143q24 0 33-21z" horiz-adv-x="928.6" />
52
52
53 <glyph glyph-name="doc" unicode="&#xe816;" d="M819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 17-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 16t-16 37v233h-429v-858h715z" horiz-adv-x="857.1" />
53 <glyph glyph-name="doc" unicode="&#xe816;" d="M819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 17-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 16t-16 37v233h-429v-858h715z" horiz-adv-x="857.1" />
54
54
55 <glyph glyph-name="cog" unicode="&#xe817;" d="M571 350q0 59-41 101t-101 42-101-42-42-101 42-101 101-42 101 42 41 101z m286 61v-124q0-7-4-13t-11-7l-104-16q-10-30-21-51 19-27 59-77 6-6 6-13t-5-13q-15-21-55-61t-53-39q-7 0-14 5l-77 60q-25-13-51-21-9-76-16-104-4-16-20-16h-124q-8 0-14 5t-6 12l-16 103q-27 9-50 21l-79-60q-6-5-14-5-8 0-14 6-70 64-92 94-4 5-4 13 0 6 5 12 8 12 28 37t30 40q-15 28-23 55l-102 15q-7 1-11 7t-5 13v124q0 7 5 13t10 7l104 16q8 25 22 51-23 32-60 77-6 7-6 14 0 5 5 12 15 20 55 60t53 40q7 0 15-5l77-60q24 13 50 21 9 76 17 104 3 16 20 16h124q7 0 13-5t7-12l15-103q28-9 51-20l79 59q5 5 13 5 7 0 14-5 72-67 92-95 4-5 4-12 0-7-4-13-9-12-29-37t-30-40q15-28 23-54l102-16q7-1 12-7t4-13z" horiz-adv-x="857.1" />
55 <glyph glyph-name="cog" unicode="&#xe817;" d="M571 350q0 59-41 101t-101 42-101-42-42-101 42-101 101-42 101 42 41 101z m286 61v-124q0-7-4-13t-11-7l-104-16q-10-30-21-51 19-27 59-77 6-6 6-13t-5-13q-15-21-55-61t-53-39q-7 0-14 5l-77 60q-25-13-51-21-9-76-16-104-4-16-20-16h-124q-8 0-14 5t-6 12l-16 103q-27 9-50 21l-79-60q-6-5-14-5-8 0-14 6-70 64-92 94-4 5-4 13 0 6 5 12 8 12 28 37t30 40q-15 28-23 55l-102 15q-7 1-11 7t-5 13v124q0 7 5 13t10 7l104 16q8 25 22 51-23 32-60 77-6 7-6 14 0 5 5 12 15 20 55 60t53 40q7 0 15-5l77-60q24 13 50 21 9 76 17 104 3 16 20 16h124q7 0 13-5t7-12l15-103q28-9 51-20l79 59q5 5 13 5 7 0 14-5 72-67 92-95 4-5 4-12 0-7-4-13-9-12-29-37t-30-40q15-28 23-54l102-16q7-1 12-7t4-13z" horiz-adv-x="857.1" />
56
56
57 <glyph glyph-name="cog-alt" unicode="&#xe818;" d="M500 350q0 59-42 101t-101 42-101-42-42-101 42-101 101-42 101 42 42 101z m429-286q0 29-22 51t-50 21-50-21-21-51q0-29 21-50t50-21 51 21 21 50z m0 572q0 29-22 50t-50 21-50-21-21-50q0-30 21-51t50-21 51 21 21 51z m-215-235v-103q0-6-4-11t-8-6l-87-14q-6-19-18-42 19-27 50-64 4-6 4-11 0-7-4-11-12-17-46-50t-43-33q-7 0-12 4l-64 50q-21-11-43-17-6-60-13-87-4-13-17-13h-104q-6 0-11 4t-5 10l-13 85q-19 6-42 18l-66-50q-4-4-11-4-6 0-12 4-80 75-80 90 0 5 4 10 5 8 23 30t26 34q-13 24-20 46l-85 13q-5 1-9 5t-4 11v104q0 5 4 10t9 6l86 14q7 19 18 42-19 27-50 64-4 6-4 11 0 7 4 12 12 16 46 49t44 33q6 0 12-4l64-50q19 10 43 18 6 60 13 86 3 13 16 13h104q6 0 11-4t6-10l13-85q19-6 42-17l65 49q5 4 12 4 6 0 11-4 81-75 81-90 0-4-4-10-7-9-24-30t-25-34q13-27 19-46l85-12q6-2 9-6t4-11z m357-298v-78q0-9-83-17-6-15-16-29 28-63 28-77 0-2-2-4-68-40-69-40-5 0-26 27t-29 37q-11-1-17-1t-17 1q-7-11-29-37t-25-27q-1 0-69 40-3 2-3 4 0 14 29 77-10 14-17 29-83 8-83 17v78q0 9 83 18 7 16 17 29-29 63-29 77 0 2 3 4 2 1 19 11t33 19 17 9q4 0 25-26t29-38q12 1 17 1t17-1q28 40 51 63l4 1q2 0 69-39 2-2 2-4 0-14-28-77 9-13 16-29 83-9 83-18z m0 572v-78q0-9-83-18-6-15-16-29 28-63 28-77 0-2-2-4-68-39-69-39-5 0-26 26t-29 38q-11-1-17-1t-17 1q-7-12-29-38t-25-26q-1 0-69 39-3 2-3 4 0 14 29 77-10 14-17 29-83 9-83 18v78q0 9 83 17 7 16 17 29-29 63-29 77 0 2 3 4 2 1 19 11t33 19 17 9q4 0 25-26t29-37q12 1 17 1t17-1q28 39 51 62l4 1q2 0 69-39 2-2 2-4 0-14-28-77 9-13 16-29 83-8 83-17z" horiz-adv-x="1071.4" />
57 <glyph glyph-name="cog-alt" unicode="&#xe818;" d="M500 350q0 59-42 101t-101 42-101-42-42-101 42-101 101-42 101 42 42 101z m429-286q0 29-22 51t-50 21-50-21-21-51q0-29 21-50t50-21 51 21 21 50z m0 572q0 29-22 50t-50 21-50-21-21-50q0-30 21-51t50-21 51 21 21 51z m-215-235v-103q0-6-4-11t-8-6l-87-14q-6-19-18-42 19-27 50-64 4-6 4-11 0-7-4-11-12-17-46-50t-43-33q-7 0-12 4l-64 50q-21-11-43-17-6-60-13-87-4-13-17-13h-104q-6 0-11 4t-5 10l-13 85q-19 6-42 18l-66-50q-4-4-11-4-6 0-12 4-80 75-80 90 0 5 4 10 5 8 23 30t26 34q-13 24-20 46l-85 13q-5 1-9 5t-4 11v104q0 5 4 10t9 6l86 14q7 19 18 42-19 27-50 64-4 6-4 11 0 7 4 12 12 16 46 49t44 33q6 0 12-4l64-50q19 10 43 18 6 60 13 86 3 13 16 13h104q6 0 11-4t6-10l13-85q19-6 42-17l65 49q5 4 12 4 6 0 11-4 81-75 81-90 0-4-4-10-7-9-24-30t-25-34q13-27 19-46l85-12q6-2 9-6t4-11z m357-298v-78q0-9-83-17-6-15-16-29 28-63 28-77 0-2-2-4-68-40-69-40-5 0-26 27t-29 37q-11-1-17-1t-17 1q-7-11-29-37t-25-27q-1 0-69 40-3 2-3 4 0 14 29 77-10 14-17 29-83 8-83 17v78q0 9 83 18 7 16 17 29-29 63-29 77 0 2 3 4 2 1 19 11t33 19 17 9q4 0 25-26t29-38q12 1 17 1t17-1q28 40 51 63l4 1q2 0 69-39 2-2 2-4 0-14-28-77 9-13 16-29 83-9 83-18z m0 572v-78q0-9-83-18-6-15-16-29 28-63 28-77 0-2-2-4-68-39-69-39-5 0-26 26t-29 38q-11-1-17-1t-17 1q-7-12-29-38t-25-26q-1 0-69 39-3 2-3 4 0 14 29 77-10 14-17 29-83 9-83 18v78q0 9 83 17 7 16 17 29-29 63-29 77 0 2 3 4 2 1 19 11t33 19 17 9q4 0 25-26t29-37q12 1 17 1t17-1q28 39 51 62l4 1q2 0 69-39 2-2 2-4 0-14-28-77 9-13 16-29 83-8 83-17z" horiz-adv-x="1071.4" />
58
58
59 <glyph glyph-name="eye" unicode="&#xe819;" d="M929 314q-85 132-213 197 34-58 34-125 0-103-73-177t-177-73-177 73-73 177q0 67 34 125-128-65-213-197 75-114 187-182t242-68 243 68 186 182z m-402 215q0 11-8 19t-19 7q-70 0-120-50t-50-119q0-11 8-19t19-8 19 8 8 19q0 48 34 82t82 34q11 0 19 8t8 19z m473-215q0-19-11-38-78-129-210-206t-279-77-279 77-210 206q-11 19-11 38t11 39q78 128 210 205t279 78 279-78 210-205q11-20 11-39z" horiz-adv-x="1000" />
59 <glyph glyph-name="eye" unicode="&#xe819;" d="M929 314q-85 132-213 197 34-58 34-125 0-103-73-177t-177-73-177 73-73 177q0 67 34 125-128-65-213-197 75-114 187-182t242-68 243 68 186 182z m-402 215q0 11-8 19t-19 7q-70 0-120-50t-50-119q0-11 8-19t19-8 19 8 8 19q0 48 34 82t82 34q11 0 19 8t8 19z m473-215q0-19-11-38-78-129-210-206t-279-77-279 77-210 206q-11 19-11 38t11 39q78 128 210 205t279 78 279-78 210-205q11-20 11-39z" horiz-adv-x="1000" />
60
60
61 <glyph glyph-name="eye-off" unicode="&#xe81a;" d="M310 105l43 79q-48 35-76 88t-27 114q0 67 34 125-128-65-213-197 94-144 239-209z m217 424q0 11-8 19t-19 7q-70 0-120-50t-50-119q0-11 8-19t19-8 19 8 8 19q0 48 34 82t82 34q11 0 19 8t8 19z m202 106q0-4 0-5-59-105-176-316t-176-316l-28-50q-5-9-15-9-7 0-75 39-9 6-9 16 0 7 25 49-80 36-147 96t-117 137q-11 17-11 38t11 39q86 131 212 207t277 76q50 0 100-10l31 54q5 9 15 9 3 0 10-3t18-9 18-10 18-10 10-7q9-5 9-15z m21-249q0-78-44-142t-117-91l157 280q4-25 4-47z m250-72q0-19-11-38-22-36-61-81-84-96-194-149t-234-53l41 74q119 10 219 76t169 171q-65 100-158 164l35 63q53-36 102-85t81-103q11-19 11-39z" horiz-adv-x="1000" />
61 <glyph glyph-name="eye-off" unicode="&#xe81a;" d="M310 105l43 79q-48 35-76 88t-27 114q0 67 34 125-128-65-213-197 94-144 239-209z m217 424q0 11-8 19t-19 7q-70 0-120-50t-50-119q0-11 8-19t19-8 19 8 8 19q0 48 34 82t82 34q11 0 19 8t8 19z m202 106q0-4 0-5-59-105-176-316t-176-316l-28-50q-5-9-15-9-7 0-75 39-9 6-9 16 0 7 25 49-80 36-147 96t-117 137q-11 17-11 38t11 39q86 131 212 207t277 76q50 0 100-10l31 54q5 9 15 9 3 0 10-3t18-9 18-10 18-10 10-7q9-5 9-15z m21-249q0-78-44-142t-117-91l157 280q4-25 4-47z m250-72q0-19-11-38-22-36-61-81-84-96-194-149t-234-53l41 74q119 10 219 76t169 171q-65 100-158 164l35 63q53-36 102-85t81-103q11-19 11-39z" horiz-adv-x="1000" />
62
62
63 <glyph glyph-name="cancel-circled2" unicode="&#xe81b;" d="M612 248l-81-82q-6-5-13-5t-13 5l-76 77-77-77q-5-5-13-5t-12 5l-82 82q-6 6-6 13t6 13l76 76-76 77q-6 5-6 12t6 13l82 82q5 5 12 5t13-5l77-77 76 77q6 5 13 5t13-5l81-82q6-5 6-13t-6-12l-76-77 76-76q6-6 6-13t-6-13z m120 102q0 83-41 152t-110 111-152 41-153-41-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152z m125 0q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
63 <glyph glyph-name="cancel-circled2" unicode="&#xe81b;" d="M612 248l-81-82q-6-5-13-5t-13 5l-76 77-77-77q-5-5-13-5t-12 5l-82 82q-6 6-6 13t6 13l76 76-76 77q-6 5-6 12t6 13l82 82q5 5 12 5t13-5l77-77 76 77q6 5 13 5t13-5l81-82q6-5 6-13t-6-12l-76-77 76-76q6-6 6-13t-6-13z m120 102q0 83-41 152t-110 111-152 41-153-41-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152z m125 0q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
64
64
65 <glyph glyph-name="cancel-circled" unicode="&#xe81c;" d="M641 224q0 14-10 25l-101 101 101 101q10 11 10 25 0 15-10 26l-51 50q-10 11-25 11-15 0-25-11l-101-101-101 101q-11 11-25 11-16 0-26-11l-50-50q-11-11-11-26 0-14 11-25l101-101-101-101q-11-11-11-25 0-15 11-26l50-50q10-11 26-11 14 0 25 11l101 101 101-101q10-11 25-11 15 0 25 11l51 50q10 11 10 26z m216 126q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
65 <glyph glyph-name="cancel-circled" unicode="&#xe81c;" d="M641 224q0 14-10 25l-101 101 101 101q10 11 10 25 0 15-10 26l-51 50q-10 11-25 11-15 0-25-11l-101-101-101 101q-11 11-25 11-16 0-26-11l-50-50q-11-11-11-26 0-14 11-25l101-101-101-101q-11-11-11-25 0-15 11-26l50-50q10-11 26-11 14 0 25 11l101 101 101-101q10-11 25-11 15 0 25 11l51 50q10 11 10 26z m216 126q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
66
66
67 <glyph glyph-name="plus" unicode="&#xe81d;" d="M786 439v-107q0-22-16-38t-38-15h-232v-233q0-22-16-37t-38-16h-107q-22 0-38 16t-15 37v233h-232q-23 0-38 15t-16 38v107q0 23 16 38t38 16h232v232q0 22 15 38t38 16h107q23 0 38-16t16-38v-232h232q23 0 38-16t16-38z" horiz-adv-x="785.7" />
67 <glyph glyph-name="plus" unicode="&#xe81d;" d="M786 439v-107q0-22-16-38t-38-15h-232v-233q0-22-16-37t-38-16h-107q-22 0-38 16t-15 37v233h-232q-23 0-38 15t-16 38v107q0 23 16 38t38 16h232v232q0 22 15 38t38 16h107q23 0 38-16t16-38v-232h232q23 0 38-16t16-38z" horiz-adv-x="785.7" />
68
68
69 <glyph glyph-name="plus-circled" unicode="&#xe81e;" d="M679 314v72q0 14-11 25t-25 10h-143v143q0 15-11 25t-25 11h-71q-15 0-25-11t-11-25v-143h-143q-14 0-25-10t-10-25v-72q0-14 10-25t25-10h143v-143q0-15 11-25t25-11h71q15 0 25 11t11 25v143h143q14 0 25 10t11 25z m178 36q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
69 <glyph glyph-name="plus-circled" unicode="&#xe81e;" d="M679 314v72q0 14-11 25t-25 10h-143v143q0 15-11 25t-25 11h-71q-15 0-25-11t-11-25v-143h-143q-14 0-25-10t-10-25v-72q0-14 10-25t25-10h143v-143q0-15 11-25t25-11h71q15 0 25 11t11 25v143h143q14 0 25 10t11 25z m178 36q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
70
70
71 <glyph glyph-name="minus-circled" unicode="&#xe81f;" d="M679 314v72q0 14-11 25t-25 10h-429q-14 0-25-10t-10-25v-72q0-14 10-25t25-10h429q14 0 25 10t11 25z m178 36q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
71 <glyph glyph-name="minus-circled" unicode="&#xe81f;" d="M679 314v72q0 14-11 25t-25 10h-429q-14 0-25-10t-10-25v-72q0-14 10-25t25-10h429q14 0 25 10t11 25z m178 36q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
72
72
73 <glyph glyph-name="minus" unicode="&#xe820;" d="M786 439v-107q0-22-16-38t-38-15h-678q-23 0-38 15t-16 38v107q0 23 16 38t38 16h678q23 0 38-16t16-38z" horiz-adv-x="785.7" />
73 <glyph glyph-name="minus" unicode="&#xe820;" d="M786 439v-107q0-22-16-38t-38-15h-678q-23 0-38 15t-16 38v107q0 23 16 38t38 16h678q23 0 38-16t16-38z" horiz-adv-x="785.7" />
74
74
75 <glyph glyph-name="info-circled" unicode="&#xe821;" d="M571 82v89q0 8-5 13t-12 5h-54v286q0 8-5 13t-13 5h-178q-8 0-13-5t-5-13v-89q0-8 5-13t13-5h53v-179h-53q-8 0-13-5t-5-13v-89q0-8 5-13t13-5h250q7 0 12 5t5 13z m-71 500v89q0 8-5 13t-13 5h-107q-8 0-13-5t-5-13v-89q0-8 5-13t13-5h107q8 0 13 5t5 13z m357-232q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
75 <glyph glyph-name="info-circled" unicode="&#xe821;" d="M571 82v89q0 8-5 13t-12 5h-54v286q0 8-5 13t-13 5h-178q-8 0-13-5t-5-13v-89q0-8 5-13t13-5h53v-179h-53q-8 0-13-5t-5-13v-89q0-8 5-13t13-5h250q7 0 12 5t5 13z m-71 500v89q0 8-5 13t-13 5h-107q-8 0-13-5t-5-13v-89q0-8 5-13t13-5h107q8 0 13 5t5 13z m357-232q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
76
76
77 <glyph glyph-name="upload" unicode="&#xe822;" d="M714 29q0 14-10 25t-25 10-25-10-11-25 11-25 25-11 25 11 10 25z m143 0q0 14-10 25t-26 10-25-10-10-25 10-25 25-11 26 11 10 25z m72 125v-179q0-22-16-38t-38-16h-821q-23 0-38 16t-16 38v179q0 22 16 38t38 15h238q12-31 39-51t62-20h143q34 0 61 20t40 51h238q22 0 38-15t16-38z m-182 361q-9-22-33-22h-143v-250q0-15-10-25t-25-11h-143q-15 0-25 11t-11 25v250h-143q-23 0-33 22-9 22 8 39l250 250q10 10 25 10t25-10l250-250q18-17 8-39z" horiz-adv-x="928.6" />
77 <glyph glyph-name="upload" unicode="&#xe822;" d="M714 29q0 14-10 25t-25 10-25-10-11-25 11-25 25-11 25 11 10 25z m143 0q0 14-10 25t-26 10-25-10-10-25 10-25 25-11 26 11 10 25z m72 125v-179q0-22-16-38t-38-16h-821q-23 0-38 16t-16 38v179q0 22 16 38t38 15h238q12-31 39-51t62-20h143q34 0 61 20t40 51h238q22 0 38-15t16-38z m-182 361q-9-22-33-22h-143v-250q0-15-10-25t-25-11h-143q-15 0-25 11t-11 25v250h-143q-23 0-33 22-9 22 8 39l250 250q10 10 25 10t25-10l250-250q18-17 8-39z" horiz-adv-x="928.6" />
78
78
79 <glyph glyph-name="home" unicode="&#xe823;" d="M888 336q16-16 11-27t-27-11l-84 0 0-310q0-14-1-21t-8-13-23-6l-204 0 0 310-204 0 0-310-194 0q-28 0-35 10t-7 30l0 310-84 0q-22 0-27 11t11 27l400 402q16 16 38 16t38-16z" horiz-adv-x="900" />
79 <glyph glyph-name="home" unicode="&#xe823;" d="M888 336q16-16 11-27t-27-11l-84 0 0-310q0-14-1-21t-8-13-23-6l-204 0 0 310-204 0 0-310-194 0q-28 0-35 10t-7 30l0 310-84 0q-22 0-27 11t11 27l400 402q16 16 38 16t38-16z" horiz-adv-x="900" />
80
80
81 <glyph glyph-name="flag-filled" unicode="&#xe824;" d="M640 693q25 25 57 11t32-47l0-418q0-21-15-36-80-80-193-80t-193 80q-47 46-110 50t-114-36l0-238q0-21-15-37t-36-15-37 15-16 37l0 678q0 21 15 36 80 80 193 80t193-80q50-50 120-50t119 50z" horiz-adv-x="729" />
82
81 <glyph glyph-name="git" unicode="&#xe82a;" d="M929 844h-858c-36 0-65-30-65-65v-857c0-36 30-65 65-65h857c36 0 65 30 65 65v857c1 35-29 65-64 65z m-729-549c4-11 9-20 14-27 6-8 14-14 22-18 9-4 19-6 29-6 9 0 16 1 24 2 7 2 14 4 20 7l6 51h-27c-4 0-8 1-10 4-2 1-3 5-3 7l5 39h105l-16-131c-8-7-16-12-25-15-9-4-18-8-28-10-10-3-18-5-30-7-10-1-21-2-33-2-20 0-38 4-54 11-16 8-30 18-41 30-12 13-20 28-27 45-6 18-10 36-10 56 0 18 3 34 7 50 3 17 10 30 17 44 8 14 16 25 26 36 10 12 22 20 34 28 13 7 26 14 41 17 15 4 30 7 47 7 13 0 25-2 36-4 11-3 21-6 29-10 8-4 16-9 22-14 6-5 13-11 18-16l-20-31c-4-5-9-8-14-9-5-1-10 0-16 4-5 3-10 6-14 8-5 3-9 5-14 7-5 1-10 2-15 3-5 2-11 2-17 2-14 0-27-3-38-9-11-6-21-14-29-25-8-10-15-24-18-38-5-15-7-31-7-48-1-14 2-27 4-38z m336-102h-71l39 315h71l-39-315z m343 258h-80l-33-258h-70l32 258h-80l7 57h231l-7-57z" horiz-adv-x="1000" />
83 <glyph glyph-name="git" unicode="&#xe82a;" d="M929 844h-858c-36 0-65-30-65-65v-857c0-36 30-65 65-65h857c36 0 65 30 65 65v857c1 35-29 65-64 65z m-729-549c4-11 9-20 14-27 6-8 14-14 22-18 9-4 19-6 29-6 9 0 16 1 24 2 7 2 14 4 20 7l6 51h-27c-4 0-8 1-10 4-2 1-3 5-3 7l5 39h105l-16-131c-8-7-16-12-25-15-9-4-18-8-28-10-10-3-18-5-30-7-10-1-21-2-33-2-20 0-38 4-54 11-16 8-30 18-41 30-12 13-20 28-27 45-6 18-10 36-10 56 0 18 3 34 7 50 3 17 10 30 17 44 8 14 16 25 26 36 10 12 22 20 34 28 13 7 26 14 41 17 15 4 30 7 47 7 13 0 25-2 36-4 11-3 21-6 29-10 8-4 16-9 22-14 6-5 13-11 18-16l-20-31c-4-5-9-8-14-9-5-1-10 0-16 4-5 3-10 6-14 8-5 3-9 5-14 7-5 1-10 2-15 3-5 2-11 2-17 2-14 0-27-3-38-9-11-6-21-14-29-25-8-10-15-24-18-38-5-15-7-31-7-48-1-14 2-27 4-38z m336-102h-71l39 315h71l-39-315z m343 258h-80l-33-258h-70l32 258h-80l7 57h231l-7-57z" horiz-adv-x="1000" />
82
84
83 <glyph glyph-name="hg" unicode="&#xe82d;" d="M927 841h-853c-36 0-65-29-65-65v-853c0-36 29-65 65-65h853c36 0 65 29 65 65v853c0 36-29 65-65 65z m-483-648h-70l16 133h-113l-17-133h-70l39 313h70l-16-132h113l16 132h71l-39-313z m177 101c3-11 8-20 14-27 7-8 14-14 23-18 8-4 18-6 28-6 9 0 16 1 23 3 7 1 14 3 20 6l6 51h-27c-4 0-7 1-9 3-3 3-3 6-3 9l5 39h104l-16-131c-8-6-16-11-25-15-9-5-18-8-27-11-9-2-19-4-30-6-10-1-21-2-33-2-19 0-37 4-53 11-16 7-30 17-41 29-11 13-20 28-26 45-7 17-10 35-10 55 0 17 2 34 6 50 4 15 10 30 17 43 7 14 16 26 26 36 10 11 22 20 34 28 13 7 27 13 41 17 14 4 30 7 46 7 13 0 25-2 36-4 11-3 20-6 29-10 8-4 16-9 23-14 7-5 13-11 18-17l-23-28c-4-5-8-8-13-9-5-1-11 0-16 3-5 4-10 7-14 9-5 3-9 5-14 6-4 2-9 3-14 4-5 1-11 1-17 1-14 0-27-3-38-8-11-6-21-14-29-25-8-10-15-23-19-38-5-15-7-31-7-49 0-13 2-26 5-37z" horiz-adv-x="1000" />
85 <glyph glyph-name="hg" unicode="&#xe82d;" d="M927 841h-853c-36 0-65-29-65-65v-853c0-36 29-65 65-65h853c36 0 65 29 65 65v853c0 36-29 65-65 65z m-483-648h-70l16 133h-113l-17-133h-70l39 313h70l-16-132h113l16 132h71l-39-313z m177 101c3-11 8-20 14-27 7-8 14-14 23-18 8-4 18-6 28-6 9 0 16 1 23 3 7 1 14 3 20 6l6 51h-27c-4 0-7 1-9 3-3 3-3 6-3 9l5 39h104l-16-131c-8-6-16-11-25-15-9-5-18-8-27-11-9-2-19-4-30-6-10-1-21-2-33-2-19 0-37 4-53 11-16 7-30 17-41 29-11 13-20 28-26 45-7 17-10 35-10 55 0 17 2 34 6 50 4 15 10 30 17 43 7 14 16 26 26 36 10 11 22 20 34 28 13 7 27 13 41 17 14 4 30 7 46 7 13 0 25-2 36-4 11-3 20-6 29-10 8-4 16-9 23-14 7-5 13-11 18-17l-23-28c-4-5-8-8-13-9-5-1-11 0-16 3-5 4-10 7-14 9-5 3-9 5-14 6-4 2-9 3-14 4-5 1-11 1-17 1-14 0-27-3-38-8-11-6-21-14-29-25-8-10-15-23-19-38-5-15-7-31-7-49 0-13 2-26 5-37z" horiz-adv-x="1000" />
84
86
85 <glyph glyph-name="svn" unicode="&#xe82e;" d="M933 841h-852c-36 0-65-29-65-65v-853c0-36 29-65 65-65h852c36 0 66 29 66 65v853c0 36-30 65-66 65z m-765-438c3-4 7-7 13-10 5-3 11-6 18-8 7-3 14-5 21-8 7-3 14-6 21-10 7-4 13-9 18-14 5-6 10-13 13-20 3-8 5-18 5-29 0-16-3-30-8-44-6-14-14-26-24-37-10-10-22-18-37-24-15-7-31-10-49-10-9 0-18 1-27 3s-18 5-27 9c-8 4-16 8-23 13-7 5-13 10-18 17l25 32c2 3 4 5 7 6 3 2 6 3 9 3 4 0 8-2 12-4 3-3 8-6 12-10 5-3 10-6 16-9 6-3 14-4 23-4 13 0 23 3 30 10 7 7 10 18 10 32 0 6-1 12-4 16-4 4-8 7-13 10-5 3-11 6-18 8-7 2-14 5-21 7-7 3-14 6-21 9-6 4-12 8-18 14-5 6-9 13-12 21-3 8-5 18-5 30 0 14 3 28 8 40 5 13 12 25 22 35 10 9 22 17 36 23 14 6 29 9 47 9 9 0 17-1 26-3s16-4 23-8c7-3 14-7 20-11 6-5 11-10 15-15l-21-29c-2-3-5-6-7-7-3-2-6-3-9-3-3 0-7 1-10 3-3 3-7 5-11 8-4 2-9 4-14 7-5 2-12 3-19 3-6 0-12-1-17-3-5-2-9-4-12-8-4-3-6-7-8-11-1-5-2-10-2-15 0-5 2-10 5-14z m312-210h-64l-77 313h57c6 0 10-1 14-4 4-3 6-6 7-11l32-173c2-7 4-14 6-23 1-8 3-17 4-26 3 9 6 18 9 26 4 9 7 16 11 23l73 173c1 2 2 4 4 6 2 2 4 3 6 5 2 1 4 2 7 3 3 1 5 1 8 1h57l-154-313z m423 0h-37c-5 0-10 1-13 2-4 2-7 5-10 9l-109 194c-1-4-1-8-1-12-1-4-1-7-1-10l-22-183h-62l39 313h37c3 0 6 0 8 0 2 0 4-1 5-1 2-1 3-2 4-4s3-3 5-5l110-194c0 5 0 10 1 14 0 5 1 9 1 13l21 177h62l-38-313z" horiz-adv-x="1000" />
87 <glyph glyph-name="svn" unicode="&#xe82e;" d="M933 841h-852c-36 0-65-29-65-65v-853c0-36 29-65 65-65h852c36 0 66 29 66 65v853c0 36-30 65-66 65z m-765-438c3-4 7-7 13-10 5-3 11-6 18-8 7-3 14-5 21-8 7-3 14-6 21-10 7-4 13-9 18-14 5-6 10-13 13-20 3-8 5-18 5-29 0-16-3-30-8-44-6-14-14-26-24-37-10-10-22-18-37-24-15-7-31-10-49-10-9 0-18 1-27 3s-18 5-27 9c-8 4-16 8-23 13-7 5-13 10-18 17l25 32c2 3 4 5 7 6 3 2 6 3 9 3 4 0 8-2 12-4 3-3 8-6 12-10 5-3 10-6 16-9 6-3 14-4 23-4 13 0 23 3 30 10 7 7 10 18 10 32 0 6-1 12-4 16-4 4-8 7-13 10-5 3-11 6-18 8-7 2-14 5-21 7-7 3-14 6-21 9-6 4-12 8-18 14-5 6-9 13-12 21-3 8-5 18-5 30 0 14 3 28 8 40 5 13 12 25 22 35 10 9 22 17 36 23 14 6 29 9 47 9 9 0 17-1 26-3s16-4 23-8c7-3 14-7 20-11 6-5 11-10 15-15l-21-29c-2-3-5-6-7-7-3-2-6-3-9-3-3 0-7 1-10 3-3 3-7 5-11 8-4 2-9 4-14 7-5 2-12 3-19 3-6 0-12-1-17-3-5-2-9-4-12-8-4-3-6-7-8-11-1-5-2-10-2-15 0-5 2-10 5-14z m312-210h-64l-77 313h57c6 0 10-1 14-4 4-3 6-6 7-11l32-173c2-7 4-14 6-23 1-8 3-17 4-26 3 9 6 18 9 26 4 9 7 16 11 23l73 173c1 2 2 4 4 6 2 2 4 3 6 5 2 1 4 2 7 3 3 1 5 1 8 1h57l-154-313z m423 0h-37c-5 0-10 1-13 2-4 2-7 5-10 9l-109 194c-1-4-1-8-1-12-1-4-1-7-1-10l-22-183h-62l39 313h37c3 0 6 0 8 0 2 0 4-1 5-1 2-1 3-2 4-4s3-3 5-5l110-194c0 5 0 10 1 14 0 5 1 9 1 13l21 177h62l-38-313z" horiz-adv-x="1000" />
86
88
87 <glyph glyph-name="comment-add" unicode="&#xe82f;" d="M952 258v317c0 7 0 13 0 20-1 12-4 24-8 36-7 22-20 43-37 59-16 17-36 30-58 37-12 4-25 7-37 8-7 1-13 1-19 1h-576c-13 0-26 0-38-2-13-2-25-5-36-10-22-9-41-23-57-40-15-18-27-39-33-62-3-12-5-25-5-38-1-13 0-26 0-39v-557c0-9 5-17 13-21 6-3 15-3 21 0 3 1 5 3 7 5 2 2 4 5 7 7 4 5 9 9 14 14l28 28c9 10 19 19 28 29 9 9 19 18 28 27 4 5 8 9 14 10 2 1 5 1 8 1h567c13 0 25 0 38 2 24 4 47 13 66 27 19 13 35 31 46 51 12 22 19 46 19 71 1 6 0 13 0 19z m-69 307v-317c0-7 0-13 0-19-1-6-3-13-5-18-4-10-9-20-16-28-15-17-37-27-59-28-7 0-13 0-19 0h-576c-7 0-13 0-20 0-3 0-6 0-9-1-3-1-5-2-7-4-2-2-4-4-6-6-3-2-5-4-7-7-5-4-10-9-14-14-10-9-19-18-28-28v485c0 12 2 24 7 35 4 10 10 19 18 27 16 16 38 25 60 25h590c6 0 12 0 18-1 22-3 42-15 56-33 7-9 12-20 15-31 1-5 2-12 2-18 1-6 0-13 0-19z m-214-117h-131c-4 0-11 8-11 12v126c0 8-8 16-12 16h-50c-7 0-15-8-15-12v-130c0-4-8-12-12-12h-126c-8 0-16-8-16-11v-50c0-8 8-16 12-16h127c7 0 15-7 15-11v-127c0-8 8-15 11-15h50c8 0 16 7 16 11v127c0 8 7 15 11 15h127c8 0 15 8 15 12v50c0 7-7 15-11 15z" horiz-adv-x="1000" />
89 <glyph glyph-name="comment-add" unicode="&#xe82f;" d="M952 258v317c0 7 0 13 0 20-1 12-4 24-8 36-7 22-20 43-37 59-16 17-36 30-58 37-12 4-25 7-37 8-7 1-13 1-19 1h-576c-13 0-26 0-38-2-13-2-25-5-36-10-22-9-41-23-57-40-15-18-27-39-33-62-3-12-5-25-5-38-1-13 0-26 0-39v-557c0-9 5-17 13-21 6-3 15-3 21 0 3 1 5 3 7 5 2 2 4 5 7 7 4 5 9 9 14 14l28 28c9 10 19 19 28 29 9 9 19 18 28 27 4 5 8 9 14 10 2 1 5 1 8 1h567c13 0 25 0 38 2 24 4 47 13 66 27 19 13 35 31 46 51 12 22 19 46 19 71 1 6 0 13 0 19z m-69 307v-317c0-7 0-13 0-19-1-6-3-13-5-18-4-10-9-20-16-28-15-17-37-27-59-28-7 0-13 0-19 0h-576c-7 0-13 0-20 0-3 0-6 0-9-1-3-1-5-2-7-4-2-2-4-4-6-6-3-2-5-4-7-7-5-4-10-9-14-14-10-9-19-18-28-28v485c0 12 2 24 7 35 4 10 10 19 18 27 16 16 38 25 60 25h590c6 0 12 0 18-1 22-3 42-15 56-33 7-9 12-20 15-31 1-5 2-12 2-18 1-6 0-13 0-19z m-214-117h-131c-4 0-11 8-11 12v126c0 8-8 16-12 16h-50c-7 0-15-8-15-12v-130c0-4-8-12-12-12h-126c-8 0-16-8-16-11v-50c0-8 8-16 12-16h127c7 0 15-7 15-11v-127c0-8 8-15 11-15h50c8 0 16 7 16 11v127c0 8 7 15 11 15h127c8 0 15 8 15 12v50c0 7-7 15-11 15z" horiz-adv-x="1000" />
88
90
89 <glyph glyph-name="comment-toggle" unicode="&#xe830;" d="M798 736h-596c-85 0-154-69-154-155v-593c0-19 22-29 36-20 2 1 5 3 7 5l109 109c2 2 5 4 8 5 2 1 4 1 6 1h584c85 0 154 69 154 155v338c0 86-69 155-154 155z m-680-639v484c0 47 38 85 86 85h476c-86-84-504-511-509-515l-53-54z" horiz-adv-x="1000" />
91 <glyph glyph-name="comment-toggle" unicode="&#xe830;" d="M798 736h-596c-85 0-154-69-154-155v-593c0-19 22-29 36-20 2 1 5 3 7 5l109 109c2 2 5 4 8 5 2 1 4 1 6 1h584c85 0 154 69 154 155v338c0 86-69 155-154 155z m-680-639v484c0 47 38 85 86 85h476c-86-84-504-511-509-515l-53-54z" horiz-adv-x="1000" />
90
92
91 <glyph glyph-name="rhodecode" unicode="&#xe831;" d="M175 633c-2-4-3-8-4-12-3-10-6-20-9-30-3-13-7-25-11-38-3-11-6-23-10-35-2-7-4-15-6-22-1-1-1-2-1-4 0 0 0 0 0 0 0-1 1-2 1-2 2-7 5-14 7-21 4-11 8-22 12-33 4-12 9-25 13-37 4-11 8-23 12-34 3-7 5-14 7-21 1-1 1-2 2-3 0-1 1-1 1-2 4-6 8-12 11-17 7-10 13-19 19-29 7-11 14-22 22-33 6-10 13-21 20-31 5-7 9-15 14-22 1-2 3-4 4-5 0-1 1-1 1-2 3-3 6-5 8-8 7-6 13-12 19-19 9-8 17-16 25-24 10-10 19-19 29-28 9-9 18-18 27-27 8-8 16-15 23-23 5-5 11-10 16-15 1-1 3-3 5-5 7-5 14-10 21-15 11-8 21-15 31-23 4-2 7-5 11-7 0-1 1-2 2-2 0 0 0-1 1 0 7 3 14 7 21 11 11 6 23 11 34 17 6 4 12 7 19 10 0 0 0 1 1 1 1 2 2 3 3 5 4 5 8 10 13 15 6 8 12 16 18 24 8 9 15 19 23 28 8 11 16 21 24 31 8 11 16 21 24 31 8 10 15 19 23 28 6 8 12 16 18 24 4 5 8 10 12 15 2 2 3 3 4 5 0 0 0 0 0 0-1 1-2 1-3 1-3 0-6 1-9 2-5 1-10 2-15 3-6 2-13 4-20 5-8 3-16 5-24 7-9 3-19 6-28 9-10 3-21 7-31 11-12 4-23 8-34 13-12 5-24 10-36 15-13 6-26 12-38 18-13 7-26 14-39 21-13 7-27 15-39 23-14 9-27 17-40 27-13 9-26 19-39 29-13 11-25 22-37 33-13 11-25 23-36 36-12 13-23 26-34 40-11 14-21 28-31 43-9 15-19 31-27 47 0 1 0 1 0 1z m-3 3c-1-5-3-9-4-14-3-10-7-21-10-32-4-12-8-25-12-37-3-10-6-20-9-30-1-3-2-6-3-8 0-1 0-2 0-2 1-5 3-10 5-15 3-10 6-20 10-30 4-12 8-24 12-37 4-12 8-24 12-36 3-9 6-18 9-26 1-3 1-5 2-8 0 0 1-1 1-2 2-4 5-8 7-12 5-10 10-19 15-28 6-11 12-23 19-34 6-11 12-22 18-33 4-8 8-15 12-23 1-2 2-4 4-6 4-5 8-9 13-14 7-8 15-16 23-24 9-10 18-20 26-29 9-9 17-18 25-26 5-6 10-11 15-17 2-1 3-3 5-5 5-5 11-11 17-17 9-8 17-17 26-26 9-9 18-18 27-27 7-7 14-14 21-21 2-2 3-3 5-5 0 0 1-1 1-1 0 0 1 0 1 0 11 2 22 3 32 5 9 1 17 2 26 3 0 0 1 1 1 1 1 1 2 3 4 4 4 5 9 10 13 15 7 8 14 15 20 22 9 9 17 18 25 27 9 10 18 20 27 30 8 9 17 19 26 29 8 9 16 17 24 26 7 7 13 15 20 22 4 5 8 9 13 14 1 1 2 2 3 3 0 1 1 1 1 1 0 1-3 1-3 1-3 1-7 2-10 3-4 2-9 3-14 5-6 2-13 4-19 6-8 3-16 6-24 9-9 3-18 7-27 11-10 4-20 8-30 13-11 5-22 10-33 16-12 5-23 11-35 18-12 6-24 13-36 20-12 8-25 16-37 24-13 8-25 17-37 26-13 10-25 19-38 29-12 11-24 21-36 33-12 11-24 23-35 35-11 13-22 25-33 39-10 13-21 27-30 42-10 15-19 30-27 45-9 16-17 32-24 48z m-2 10c-1-4-2-8-3-11-1-10-3-19-5-29-2-12-5-25-7-37-3-13-5-26-8-39-1-10-3-20-5-30-1-5-2-10-3-15 0-1 0-1 0-2 1-3 2-5 3-8 3-9 7-19 10-29 4-12 9-25 13-37 4-11 8-22 11-33 2-5 4-11 6-16 0-1 1-2 1-2 1-3 2-5 4-7 4-9 8-18 13-27 6-12 11-23 17-35 6-11 11-22 17-33 3-7 7-14 11-21 0-2 1-3 1-4 1-1 2-1 2-2 5-6 9-11 14-17 8-9 15-18 22-27 9-10 17-20 26-30 7-9 15-18 22-27 5-6 10-11 15-17 0-1 1-2 2-3 0 0 0 0 0 0 1-1 2-1 3-2 7-4 14-9 21-14 10-7 21-14 31-22 11-7 21-14 31-20 6-4 12-9 18-13 3-2 7-5 10-8 10-8 19-16 29-24 7-5 13-11 20-17 1 0 1 0 1 1 1 1 2 2 3 3 4 4 8 8 12 13 6 6 12 13 18 20 8 8 16 17 23 25 9 10 18 19 26 29 9 9 18 19 27 29 9 9 18 19 26 28 8 9 16 17 23 26 6 6 13 13 19 20 4 4 7 8 11 12 1 2 3 3 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0-3 1-3 1-3 1-6 2-9 2-5 2-10 4-15 5-6 2-12 5-18 7-8 3-16 6-24 9-8 4-17 8-26 12-10 4-20 9-30 13-11 6-22 11-32 16-12 6-23 13-35 19-12 7-23 14-35 21-13 8-25 16-37 24-12 8-25 17-37 26-12 9-24 19-36 29-13 10-25 21-36 32-12 11-24 22-35 34-12 12-22 25-33 38-11 13-21 26-30 40-10 14-19 29-28 44-9 15-17 30-24 46-4 10-8 20-12 30z m696 21c-2 4-5 7-9 9-5 3-11 5-16 8-11 4-23 9-34 13-23 8-47 14-71 20-24 6-49 12-74 17-25 6-50 10-76 15-25 4-50 8-75 10-13 1-26 1-39 0-6-1-13-2-19-3-6-1-13-2-19-3-26-4-51-9-77-14-25-5-50-10-75-16-25-5-49-12-74-20-12-4-24-9-36-13-6-3-11-5-17-8-3-1-6-2-9-3-3-1-5-2-8-4-4-2-7-5-10-9-1-2-2-4-3-7-1-3-2-6-3-9-4-11-7-24-9-36-5-24-7-49-6-74 0-13 1-25 3-38 1-12 3-25 5-37 5-25 12-50 20-74 4-12 8-24 13-36 4-11 10-22 15-33 10-21 21-42 34-62 12-20 25-39 39-58 14-19 28-37 43-55 16-18 33-36 50-54 17-18 34-35 52-52 18-17 36-33 55-49 10-7 19-15 28-22 10-8 19-15 28-23 2-2 5-4 7-7 0 0 1-1 1-1 0 0 1 0 1 0 0 0 1 0 2 0 4 4 9 8 14 11 9 8 19 15 28 23 18 15 36 31 54 47 18 16 35 32 52 49 17 16 33 34 49 51 16 18 32 37 47 56 14 18 28 38 41 57 13 20 25 40 36 61 11 21 21 43 30 65 9 22 17 45 23 68 6 23 11 47 13 70 3 24 3 49 2 73 0 3-1 6-2 9 0 3-1 6-2 9-1 6-2 12-3 18-3 11-5 22-8 33-4 9-7 19-11 28-2 5 13-29 0 0z m-51-210c-7-25-15-49-26-73-9-22-19-44-30-64-12-21-24-40-37-59-13-19-27-38-42-56-15-18-31-36-47-54-17-18-34-36-52-53-18-17-37-34-56-50-9-7-19-15-28-23-1 0-2-1-2-1-1 0-2 0-2 0-1 0-2 1-2 1 0 0-1 1-1 1-2 1-3 3-4 4-4 3-9 7-14 11-2 1-4 3-7 5-2 2-4 4-6 6-5 4-9 8-14 13-9 8-18 17-27 25-10 9-18 18-27 27-4 4-8 9-13 13-4 4-8 9-12 13-17 17-33 35-49 53-15 18-30 37-44 57-14 20-27 40-38 61-12 21-23 42-32 64-10 22-18 45-25 67-2 6-4 12-5 19-1 6-2 12-3 19-2 13-4 26-4 39-1 13-2 26-1 39 0 12 1 25 3 37 0 4 0 7 1 10 0 1 0 3 0 5 1 1 1 3 1 4 0 3 1 5 2 7 0 2 0 3 0 4 0 1 1 2 2 3 1 0 2 1 3 2 0 0 1 0 1 1 1 0 2 0 3 1 3 1 6 2 9 3 6 2 12 5 18 7 23 8 47 16 72 23 12 3 24 6 37 9 6 1 12 2 18 4 7 1 13 2 19 4 26 5 51 9 77 13 13 1 26 3 39 5 3 0 7 1 10 1 1 1 3 1 4 1 2 0 3 0 4 0 6 0 12 0 17-1 1 0 2-1 4-1 1 0 3-1 4-1 3 0 6-1 9-1 7-1 13-2 19-3 13-2 25-4 38-6 25-4 51-8 76-13 25-6 50-12 75-19 12-4 24-8 37-12 6-2 12-4 18-6 3-1 6-2 9-3 1-1 3-1 4-2 1 0 1 0 2 0 1-1 2-1 2-1 2-2 3-2 4-4 1-1 1-1 1-2 0-1 0-2 0-2 1-1 1-2 1-3 2-6 3-13 4-19 1-7 2-13 3-20 0-3 0-6 0-9 0-1 0-2 0-2 0-1 0-2 0-3 1-1 1-3 1-5 5-23 7-48 5-72-1-13-3-26-6-38-8-29 8 35 0 0z m-197 0c-2 4-3 9-5 13 0 1 0 1 0 2-1 0 0 1-1 1 0 1 0 2 0 2 0 1-1 2-1 3-1 2-3 4-4 5-2 2-5 4-7 4 2 2 4 3 7 5 1 1 2 2 3 2 1 1 2 1 2 2 0 1 0 1 0 2 1 0 1 1 2 1 0 1 1 2 1 4 0 2 0 4 0 6 0 3 0 5 0 7 0 3 0 5-1 7-1 6-4 10-8 14-1 2-3 3-5 4-3 2-5 4-8 5-3 1-6 2-9 3-3 0-5 0-7 0-3 0-6 0-8 0-13 0-25 0-37 0-5 0-10 0-14 0-1 0-2 0-3 0 0 0 0-4 0-5 0-3 0-6 0-9 0-1 0-2 0-3 0-1 0-1 1-1 1 0 12 0 12 0 0-8 0-16 0-24 0-13 0-25 0-38 0-4 0-7 0-11 0 0 0-1 0-1-3 0-5 0-8 0-1 0-2 0-4 0 0 0-1 0-1-1 0-2 0-4 0-6 0-1 0-14 0-14 10 0 19 0 29 0 5 0 11 0 16 0 1 0 3 0 4 0 0 0 0 3 0 3 0 6 0 11 0 17 0 1 0 1-1 1-1 0-2 0-4 0-1 0-3 0-4 0 0 0-1-1-1 0 0 5 0 10 0 15 0 2 0 5 0 8 0 1 0 1 0 2 0 0 0 0 1 0 2 0 5 0 8 0 2 0 4 0 6 0 1 0 3 0 4 0 1 0 2-1 3-2 1-1 2-2 3-3 0-1 0-1 0-2 0-2 1-3 1-4 1-1 1-2 2-3 0-1 0-1 0-1 0-1 0-2 0-2 1-6 2-12 3-17 1-3 1-5 2-8 0 0 0-1 0-1 0 0 0 0 0 0 11 0 21 0 32 0 0 0 1 0 1 0 0 0 0 0 0 0 0 3 0 5 0 8 0 5 0 10 0 15 0 0 0 0 0 0-1-2-1-4-2-5z m-26 53c0-2-3-3-4-4-1 0-1-1-1-1 0 0-1 0-1 0 0 0-1 0-1 0-1-1-1-2-2-2-1 0-2 0-3 0-2 0-4 0-5 0-1 0-2 0-2 0-3 0-7 0-10 0 0 0-4 0-4 0 0 9 0 19 0 28 0 0 13 0 14 0 4 0 8 0 12-1 1 0 3-1 4-2 1 0 2-1 3-2 1-2 2-4 3-6 0-1 0-1 0-2-1-1-1-1-1-2-1-1-1-1-1-2-1-1-1-2-1-4z m131-53c0 9 0 18 0 27 0 9-2 18-8 24-7 7-19 8-28 7-2 0-4 0-6-1-1 0-1-1-2-2-1 0-2 0-2-1-3-1-6-3-8-6 0 9 0 18 0 27 0 6 0 12 0 18 0 2 0 3 0 5 0 1 0 1 0 1-11 0-22 0-32 0-1 0-3 0-4 0 0 0 0-4 0-4 0-5 0-11 0-16 0 0 1 0 1 0 1 0 3 0 4 0 3 0 5 0 8 0 0 0 0-5 0-6 0-11 0-23 0-34 0-11 0-22 0-33 0-1 0-2 0-3 0-1 0-1-1-1-3 0-6 0-9 0-1 0-2 0-3 0 0 0 0-1 0-1 0-6 0-11 0-17 0-1 0-1 0-2 0 0 0 0 0 0 2 0 3 0 4 0 12 0 24 0 36 0 0 0 9 0 9 0 0 5 0 10 0 15 0 1 0 3 0 5 0 0-6 0-7 0 0 0-6 0-6 0 0 1 0 3 0 4 0 6 0 12 0 18 0 3 0 5 0 7 0 1 0 1 0 2 0 0 1 1 2 2 1 1 2 2 3 2 1 1 1 1 2 1 1 0 1 0 1 1 2 1 3 1 4 1 3 1 5 0 7-1 1-1 2-2 3-3 1-1 2-2 2-3 1-2 1-4 1-6 0-3 0-7 0-11 0-11 0-22 0-33 0-1 0-2 1-2 1 0 3 0 5 0 6 0 12 0 19 0 3 0 7 0 11 0 0 0 0 14 0 15 0 2 0 4 0 6-2-1-5-2-7-2z m7 122c-2 0-5 0-7 0-1 0-2 0-3 0 0 0 0 0 0 0-3-5-7-10-10-14-1-2-3-5-4-7 0 0-1-1-1-2 0 0 0-1 0-1 0-1 0-4 0-4 0 0 1 0 2 0 3 0 5 0 8 0 3 0 5 0 8 0 0 0 0-1 0-1 0-1 0-3 0-4 0-2 0-3 0-4 0-1 0-1 1-1 1 0 3 0 4 0 1 0 2 0 2 0 0 3 0 6 0 8 0 1 0 2 1 2 1 0 2 0 4 0 0 0 0 0 0 0 0 1 0 1 0 2 0 0 0 3 0 3-1 0-2 0-3 0-1 0-2 0-2 1 0 7 0 15 0 22z m-7-15c0-1 0-2 0-4 0-1 0-1 0-2 0 0 0-1 0-2 0 0-1 0-1 0-1 0-2 0-3 0-1 0-3 0-4 0 1 2 3 4 4 6 1 1 1 2 2 3 1 2 2 4 2 7 0-3 0-5 0-8z m41-2c-3 2-8 2-11 2-1 0-2 0-2 0 0 0 0 1 0 1 0 2 0 3 0 4 0 0 13 0 14 0 1 0 1 0 1 1 0 1 0 2 0 4 0 1 0 2 0 3 0 0-1 0-1 0-6 0-11 0-17 0-1 0-1 0-2 0 0 0 0-1 0-1-1-2-1-4-1-6-1-5-1-9-2-14 4 0 9 1 12-1 3-1 4-4 4-7-1-4-5-4-7-4-2 0-9-1-9 2-1-2-1-5-2-8 1 0 3-1 5-1 2-1 5-1 7-1 4 0 8 2 11 5 2 3 2 7 2 11 0 2 0 5 0 7 0 1-1 2-2 3 0 0 0 0 0 0-3 2 2 0 0 0z" horiz-adv-x="1000" />
93 <glyph glyph-name="rhodecode" unicode="&#xe831;" d="M175 633c-2-4-3-8-4-12-3-10-6-20-9-30-3-13-7-25-11-38-3-11-6-23-10-35-2-7-4-15-6-22-1-1-1-2-1-4 0 0 0 0 0 0 0-1 1-2 1-2 2-7 5-14 7-21 4-11 8-22 12-33 4-12 9-25 13-37 4-11 8-23 12-34 3-7 5-14 7-21 1-1 1-2 2-3 0-1 1-1 1-2 4-6 8-12 11-17 7-10 13-19 19-29 7-11 14-22 22-33 6-10 13-21 20-31 5-7 9-15 14-22 1-2 3-4 4-5 0-1 1-1 1-2 3-3 6-5 8-8 7-6 13-12 19-19 9-8 17-16 25-24 10-10 19-19 29-28 9-9 18-18 27-27 8-8 16-15 23-23 5-5 11-10 16-15 1-1 3-3 5-5 7-5 14-10 21-15 11-8 21-15 31-23 4-2 7-5 11-7 0-1 1-2 2-2 0 0 0-1 1 0 7 3 14 7 21 11 11 6 23 11 34 17 6 4 12 7 19 10 0 0 0 1 1 1 1 2 2 3 3 5 4 5 8 10 13 15 6 8 12 16 18 24 8 9 15 19 23 28 8 11 16 21 24 31 8 11 16 21 24 31 8 10 15 19 23 28 6 8 12 16 18 24 4 5 8 10 12 15 2 2 3 3 4 5 0 0 0 0 0 0-1 1-2 1-3 1-3 0-6 1-9 2-5 1-10 2-15 3-6 2-13 4-20 5-8 3-16 5-24 7-9 3-19 6-28 9-10 3-21 7-31 11-12 4-23 8-34 13-12 5-24 10-36 15-13 6-26 12-38 18-13 7-26 14-39 21-13 7-27 15-39 23-14 9-27 17-40 27-13 9-26 19-39 29-13 11-25 22-37 33-13 11-25 23-36 36-12 13-23 26-34 40-11 14-21 28-31 43-9 15-19 31-27 47 0 1 0 1 0 1z m-3 3c-1-5-3-9-4-14-3-10-7-21-10-32-4-12-8-25-12-37-3-10-6-20-9-30-1-3-2-6-3-8 0-1 0-2 0-2 1-5 3-10 5-15 3-10 6-20 10-30 4-12 8-24 12-37 4-12 8-24 12-36 3-9 6-18 9-26 1-3 1-5 2-8 0 0 1-1 1-2 2-4 5-8 7-12 5-10 10-19 15-28 6-11 12-23 19-34 6-11 12-22 18-33 4-8 8-15 12-23 1-2 2-4 4-6 4-5 8-9 13-14 7-8 15-16 23-24 9-10 18-20 26-29 9-9 17-18 25-26 5-6 10-11 15-17 2-1 3-3 5-5 5-5 11-11 17-17 9-8 17-17 26-26 9-9 18-18 27-27 7-7 14-14 21-21 2-2 3-3 5-5 0 0 1-1 1-1 0 0 1 0 1 0 11 2 22 3 32 5 9 1 17 2 26 3 0 0 1 1 1 1 1 1 2 3 4 4 4 5 9 10 13 15 7 8 14 15 20 22 9 9 17 18 25 27 9 10 18 20 27 30 8 9 17 19 26 29 8 9 16 17 24 26 7 7 13 15 20 22 4 5 8 9 13 14 1 1 2 2 3 3 0 1 1 1 1 1 0 1-3 1-3 1-3 1-7 2-10 3-4 2-9 3-14 5-6 2-13 4-19 6-8 3-16 6-24 9-9 3-18 7-27 11-10 4-20 8-30 13-11 5-22 10-33 16-12 5-23 11-35 18-12 6-24 13-36 20-12 8-25 16-37 24-13 8-25 17-37 26-13 10-25 19-38 29-12 11-24 21-36 33-12 11-24 23-35 35-11 13-22 25-33 39-10 13-21 27-30 42-10 15-19 30-27 45-9 16-17 32-24 48z m-2 10c-1-4-2-8-3-11-1-10-3-19-5-29-2-12-5-25-7-37-3-13-5-26-8-39-1-10-3-20-5-30-1-5-2-10-3-15 0-1 0-1 0-2 1-3 2-5 3-8 3-9 7-19 10-29 4-12 9-25 13-37 4-11 8-22 11-33 2-5 4-11 6-16 0-1 1-2 1-2 1-3 2-5 4-7 4-9 8-18 13-27 6-12 11-23 17-35 6-11 11-22 17-33 3-7 7-14 11-21 0-2 1-3 1-4 1-1 2-1 2-2 5-6 9-11 14-17 8-9 15-18 22-27 9-10 17-20 26-30 7-9 15-18 22-27 5-6 10-11 15-17 0-1 1-2 2-3 0 0 0 0 0 0 1-1 2-1 3-2 7-4 14-9 21-14 10-7 21-14 31-22 11-7 21-14 31-20 6-4 12-9 18-13 3-2 7-5 10-8 10-8 19-16 29-24 7-5 13-11 20-17 1 0 1 0 1 1 1 1 2 2 3 3 4 4 8 8 12 13 6 6 12 13 18 20 8 8 16 17 23 25 9 10 18 19 26 29 9 9 18 19 27 29 9 9 18 19 26 28 8 9 16 17 23 26 6 6 13 13 19 20 4 4 7 8 11 12 1 2 3 3 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0-3 1-3 1-3 1-6 2-9 2-5 2-10 4-15 5-6 2-12 5-18 7-8 3-16 6-24 9-8 4-17 8-26 12-10 4-20 9-30 13-11 6-22 11-32 16-12 6-23 13-35 19-12 7-23 14-35 21-13 8-25 16-37 24-12 8-25 17-37 26-12 9-24 19-36 29-13 10-25 21-36 32-12 11-24 22-35 34-12 12-22 25-33 38-11 13-21 26-30 40-10 14-19 29-28 44-9 15-17 30-24 46-4 10-8 20-12 30z m696 21c-2 4-5 7-9 9-5 3-11 5-16 8-11 4-23 9-34 13-23 8-47 14-71 20-24 6-49 12-74 17-25 6-50 10-76 15-25 4-50 8-75 10-13 1-26 1-39 0-6-1-13-2-19-3-6-1-13-2-19-3-26-4-51-9-77-14-25-5-50-10-75-16-25-5-49-12-74-20-12-4-24-9-36-13-6-3-11-5-17-8-3-1-6-2-9-3-3-1-5-2-8-4-4-2-7-5-10-9-1-2-2-4-3-7-1-3-2-6-3-9-4-11-7-24-9-36-5-24-7-49-6-74 0-13 1-25 3-38 1-12 3-25 5-37 5-25 12-50 20-74 4-12 8-24 13-36 4-11 10-22 15-33 10-21 21-42 34-62 12-20 25-39 39-58 14-19 28-37 43-55 16-18 33-36 50-54 17-18 34-35 52-52 18-17 36-33 55-49 10-7 19-15 28-22 10-8 19-15 28-23 2-2 5-4 7-7 0 0 1-1 1-1 0 0 1 0 1 0 0 0 1 0 2 0 4 4 9 8 14 11 9 8 19 15 28 23 18 15 36 31 54 47 18 16 35 32 52 49 17 16 33 34 49 51 16 18 32 37 47 56 14 18 28 38 41 57 13 20 25 40 36 61 11 21 21 43 30 65 9 22 17 45 23 68 6 23 11 47 13 70 3 24 3 49 2 73 0 3-1 6-2 9 0 3-1 6-2 9-1 6-2 12-3 18-3 11-5 22-8 33-4 9-7 19-11 28-2 5 13-29 0 0z m-51-210c-7-25-15-49-26-73-9-22-19-44-30-64-12-21-24-40-37-59-13-19-27-38-42-56-15-18-31-36-47-54-17-18-34-36-52-53-18-17-37-34-56-50-9-7-19-15-28-23-1 0-2-1-2-1-1 0-2 0-2 0-1 0-2 1-2 1 0 0-1 1-1 1-2 1-3 3-4 4-4 3-9 7-14 11-2 1-4 3-7 5-2 2-4 4-6 6-5 4-9 8-14 13-9 8-18 17-27 25-10 9-18 18-27 27-4 4-8 9-13 13-4 4-8 9-12 13-17 17-33 35-49 53-15 18-30 37-44 57-14 20-27 40-38 61-12 21-23 42-32 64-10 22-18 45-25 67-2 6-4 12-5 19-1 6-2 12-3 19-2 13-4 26-4 39-1 13-2 26-1 39 0 12 1 25 3 37 0 4 0 7 1 10 0 1 0 3 0 5 1 1 1 3 1 4 0 3 1 5 2 7 0 2 0 3 0 4 0 1 1 2 2 3 1 0 2 1 3 2 0 0 1 0 1 1 1 0 2 0 3 1 3 1 6 2 9 3 6 2 12 5 18 7 23 8 47 16 72 23 12 3 24 6 37 9 6 1 12 2 18 4 7 1 13 2 19 4 26 5 51 9 77 13 13 1 26 3 39 5 3 0 7 1 10 1 1 1 3 1 4 1 2 0 3 0 4 0 6 0 12 0 17-1 1 0 2-1 4-1 1 0 3-1 4-1 3 0 6-1 9-1 7-1 13-2 19-3 13-2 25-4 38-6 25-4 51-8 76-13 25-6 50-12 75-19 12-4 24-8 37-12 6-2 12-4 18-6 3-1 6-2 9-3 1-1 3-1 4-2 1 0 1 0 2 0 1-1 2-1 2-1 2-2 3-2 4-4 1-1 1-1 1-2 0-1 0-2 0-2 1-1 1-2 1-3 2-6 3-13 4-19 1-7 2-13 3-20 0-3 0-6 0-9 0-1 0-2 0-2 0-1 0-2 0-3 1-1 1-3 1-5 5-23 7-48 5-72-1-13-3-26-6-38-8-29 8 35 0 0z m-197 0c-2 4-3 9-5 13 0 1 0 1 0 2-1 0 0 1-1 1 0 1 0 2 0 2 0 1-1 2-1 3-1 2-3 4-4 5-2 2-5 4-7 4 2 2 4 3 7 5 1 1 2 2 3 2 1 1 2 1 2 2 0 1 0 1 0 2 1 0 1 1 2 1 0 1 1 2 1 4 0 2 0 4 0 6 0 3 0 5 0 7 0 3 0 5-1 7-1 6-4 10-8 14-1 2-3 3-5 4-3 2-5 4-8 5-3 1-6 2-9 3-3 0-5 0-7 0-3 0-6 0-8 0-13 0-25 0-37 0-5 0-10 0-14 0-1 0-2 0-3 0 0 0 0-4 0-5 0-3 0-6 0-9 0-1 0-2 0-3 0-1 0-1 1-1 1 0 12 0 12 0 0-8 0-16 0-24 0-13 0-25 0-38 0-4 0-7 0-11 0 0 0-1 0-1-3 0-5 0-8 0-1 0-2 0-4 0 0 0-1 0-1-1 0-2 0-4 0-6 0-1 0-14 0-14 10 0 19 0 29 0 5 0 11 0 16 0 1 0 3 0 4 0 0 0 0 3 0 3 0 6 0 11 0 17 0 1 0 1-1 1-1 0-2 0-4 0-1 0-3 0-4 0 0 0-1-1-1 0 0 5 0 10 0 15 0 2 0 5 0 8 0 1 0 1 0 2 0 0 0 0 1 0 2 0 5 0 8 0 2 0 4 0 6 0 1 0 3 0 4 0 1 0 2-1 3-2 1-1 2-2 3-3 0-1 0-1 0-2 0-2 1-3 1-4 1-1 1-2 2-3 0-1 0-1 0-1 0-1 0-2 0-2 1-6 2-12 3-17 1-3 1-5 2-8 0 0 0-1 0-1 0 0 0 0 0 0 11 0 21 0 32 0 0 0 1 0 1 0 0 0 0 0 0 0 0 3 0 5 0 8 0 5 0 10 0 15 0 0 0 0 0 0-1-2-1-4-2-5z m-26 53c0-2-3-3-4-4-1 0-1-1-1-1 0 0-1 0-1 0 0 0-1 0-1 0-1-1-1-2-2-2-1 0-2 0-3 0-2 0-4 0-5 0-1 0-2 0-2 0-3 0-7 0-10 0 0 0-4 0-4 0 0 9 0 19 0 28 0 0 13 0 14 0 4 0 8 0 12-1 1 0 3-1 4-2 1 0 2-1 3-2 1-2 2-4 3-6 0-1 0-1 0-2-1-1-1-1-1-2-1-1-1-1-1-2-1-1-1-2-1-4z m131-53c0 9 0 18 0 27 0 9-2 18-8 24-7 7-19 8-28 7-2 0-4 0-6-1-1 0-1-1-2-2-1 0-2 0-2-1-3-1-6-3-8-6 0 9 0 18 0 27 0 6 0 12 0 18 0 2 0 3 0 5 0 1 0 1 0 1-11 0-22 0-32 0-1 0-3 0-4 0 0 0 0-4 0-4 0-5 0-11 0-16 0 0 1 0 1 0 1 0 3 0 4 0 3 0 5 0 8 0 0 0 0-5 0-6 0-11 0-23 0-34 0-11 0-22 0-33 0-1 0-2 0-3 0-1 0-1-1-1-3 0-6 0-9 0-1 0-2 0-3 0 0 0 0-1 0-1 0-6 0-11 0-17 0-1 0-1 0-2 0 0 0 0 0 0 2 0 3 0 4 0 12 0 24 0 36 0 0 0 9 0 9 0 0 5 0 10 0 15 0 1 0 3 0 5 0 0-6 0-7 0 0 0-6 0-6 0 0 1 0 3 0 4 0 6 0 12 0 18 0 3 0 5 0 7 0 1 0 1 0 2 0 0 1 1 2 2 1 1 2 2 3 2 1 1 1 1 2 1 1 0 1 0 1 1 2 1 3 1 4 1 3 1 5 0 7-1 1-1 2-2 3-3 1-1 2-2 2-3 1-2 1-4 1-6 0-3 0-7 0-11 0-11 0-22 0-33 0-1 0-2 1-2 1 0 3 0 5 0 6 0 12 0 19 0 3 0 7 0 11 0 0 0 0 14 0 15 0 2 0 4 0 6-2-1-5-2-7-2z m7 122c-2 0-5 0-7 0-1 0-2 0-3 0 0 0 0 0 0 0-3-5-7-10-10-14-1-2-3-5-4-7 0 0-1-1-1-2 0 0 0-1 0-1 0-1 0-4 0-4 0 0 1 0 2 0 3 0 5 0 8 0 3 0 5 0 8 0 0 0 0-1 0-1 0-1 0-3 0-4 0-2 0-3 0-4 0-1 0-1 1-1 1 0 3 0 4 0 1 0 2 0 2 0 0 3 0 6 0 8 0 1 0 2 1 2 1 0 2 0 4 0 0 0 0 0 0 0 0 1 0 1 0 2 0 0 0 3 0 3-1 0-2 0-3 0-1 0-2 0-2 1 0 7 0 15 0 22z m-7-15c0-1 0-2 0-4 0-1 0-1 0-2 0 0 0-1 0-2 0 0-1 0-1 0-1 0-2 0-3 0-1 0-3 0-4 0 1 2 3 4 4 6 1 1 1 2 2 3 1 2 2 4 2 7 0-3 0-5 0-8z m41-2c-3 2-8 2-11 2-1 0-2 0-2 0 0 0 0 1 0 1 0 2 0 3 0 4 0 0 13 0 14 0 1 0 1 0 1 1 0 1 0 2 0 4 0 1 0 2 0 3 0 0-1 0-1 0-6 0-11 0-17 0-1 0-1 0-2 0 0 0 0-1 0-1-1-2-1-4-1-6-1-5-1-9-2-14 4 0 9 1 12-1 3-1 4-4 4-7-1-4-5-4-7-4-2 0-9-1-9 2-1-2-1-5-2-8 1 0 3-1 5-1 2-1 5-1 7-1 4 0 8 2 11 5 2 3 2 7 2 11 0 2 0 5 0 7 0 1-1 2-2 3 0 0 0 0 0 0-3 2 2 0 0 0z" horiz-adv-x="1000" />
92
94
93 <glyph glyph-name="up" unicode="&#xe832;" d="M687 254l-173 217c-8 9-22 9-29 0l-173-217c-9-12-1-29 15-29h345c16 0 24 17 15 29z" horiz-adv-x="1000" />
95 <glyph glyph-name="up" unicode="&#xe832;" d="M687 254l-173 217c-8 9-22 9-29 0l-173-217c-9-12-1-29 15-29h345c16 0 24 17 15 29z" horiz-adv-x="1000" />
94
96
95 <glyph glyph-name="merge" unicode="&#xe833;" d="M200 110c0-72 58-131 130-131s130 59 130 131c0 45-24 86-60 109 18 139 133 179 202 190v-301c-38-23-65-64-65-112 0-72 59-130 130-130s130 58 130 130c0 48-26 89-65 112v487c39 23 65 64 65 112 0 72-58 130-130 130s-130-58-130-130c0-48 27-89 65-112v-55c-60-8-162-32-238-108-54-54-86-124-94-208-42-22-70-65-70-114z m468-158c-24 0-44 20-44 43s20 44 44 44c24 0 43-20 43-44s-19-43-43-43z m0 798c24 0 43-19 43-43s-20-43-43-43c-24 0-44 19-44 43s20 43 44 43z m-338-684c-24 0-43 20-43 43s19 44 43 44c24 0 43-20 43-44s-19-43-43-43z" horiz-adv-x="1000" />
97 <glyph glyph-name="merge" unicode="&#xe833;" d="M200 110c0-72 58-131 130-131s130 59 130 131c0 45-24 86-60 109 18 139 133 179 202 190v-301c-38-23-65-64-65-112 0-72 59-130 130-130s130 58 130 130c0 48-26 89-65 112v487c39 23 65 64 65 112 0 72-58 130-130 130s-130-58-130-130c0-48 27-89 65-112v-55c-60-8-162-32-238-108-54-54-86-124-94-208-42-22-70-65-70-114z m468-158c-24 0-44 20-44 43s20 44 44 44c24 0 43-20 43-44s-19-43-43-43z m0 798c24 0 43-19 43-43s-20-43-43-43c-24 0-44 19-44 43s20 43 44 43z m-338-684c-24 0-43 20-43 43s19 44 43 44c24 0 43-20 43-44s-19-43-43-43z" horiz-adv-x="1000" />
96
98
97 <glyph glyph-name="spin-alt" unicode="&#xe834;" d="M498 850c-114 0-228-39-320-116l0 0c173 140 428 130 588-31 134-134 164-332 89-495-10-29-5-50 12-68 21-20 61-23 84 0 3 3 12 15 15 24 71 180 33 393-112 539-99 98-228 147-356 147z m-409-274c-14 0-29-5-39-16-3-3-13-15-15-24-71-180-34-393 112-539 185-185 479-195 676-31l0 0c-173-140-428-130-589 31-134 134-163 333-89 495 11 29 6 50-12 68-11 11-27 17-44 16z" horiz-adv-x="1001" />
99 <glyph glyph-name="spin-alt" unicode="&#xe834;" d="M498 850c-114 0-228-39-320-116l0 0c173 140 428 130 588-31 134-134 164-332 89-495-10-29-5-50 12-68 21-20 61-23 84 0 3 3 12 15 15 24 71 180 33 393-112 539-99 98-228 147-356 147z m-409-274c-14 0-29-5-39-16-3-3-13-15-15-24-71-180-34-393 112-539 185-185 479-195 676-31l0 0c-173-140-428-130-589 31-134 134-163 333-89 495 11 29 6 50-12 68-11 11-27 17-44 16z" horiz-adv-x="1001" />
98
100
99 <glyph glyph-name="spin" unicode="&#xe838;" d="M462 850c-6 0-11-5-11-11l0-183 0 0c0-6 5-11 11-11l69 0c1 0 1 0 1 0 7 0 12 5 12 11l0 183 0 0c0 6-5 11-12 11l-69 0c0 0 0 0-1 0z m250-47c-4 1-8-2-10-5l-91-158 0 0c-4-6-2-13 4-16l60-34c0-1 0-1 0-1 6-3 13-1 16 4l91 158c3 6 2 13-4 16l-61 35c-1 1-3 1-5 1z m-428-2c-2 0-4-1-6-2l-61-35c-5-3-7-10-4-16l91-157c0 0 0 0 0 0 3-6 10-8 16-5l61 35c5 4 7 11 4 16l-91 157c0 1 0 1 0 1-2 4-6 6-10 6z m620-163c-2 0-4 0-6-1l-157-91c0 0 0 0 0 0-6-3-8-10-5-16l35-61c4-5 11-7 16-4l157 91c1 0 1 0 1 0 6 3 7 11 4 16l-35 61c-2 4-6 6-10 5z m-810-4c-5 0-9-2-11-6l-35-61c-3-5-1-12 4-15l158-91 0 0c6-4 13-2 16 4l35 60c0 0 0 0 0 0 3 6 1 13-4 16l-158 91c-2 1-4 2-5 2z m712-235l0 0c-6 0-11-5-11-11l0-69c0-1 0-1 0-1 0-7 5-12 11-12l183 0 0 0c6 0 11 5 11 12l0 69c0 0 0 0 0 1 0 6-5 11-11 11l-183 0z m-794-5l0 0c-7 0-12-5-12-12l0-69c0 0 0 0 0-1 0-6 5-11 12-11l182 0 0 0c6 0 11 5 11 11l0 69c0 1 0 1 0 1 0 7-5 12-11 12l-182 0z m772-153c-4 0-8-2-10-6l-34-60c-1 0-1 0-1 0-3-6-1-13 4-16l158-91c6-3 13-1 16 4l35 61c3 5 1 12-4 15l-158 92 0 0c-2 1-4 1-6 1z m-566-5c-1 0-3 0-5-1l-157-91c0 0-1 0-1 0-5-3-7-10-4-16l35-61c3-5 10-7 16-4l157 91c0 0 0 0 0 0 6 3 8 10 5 16l-35 61c-3 3-7 6-11 5z m468-121c-2 0-4 0-6-1l-61-35c-5-4-7-11-4-16l91-157c0-1 0-1 0-1 3-6 11-7 16-4l61 35c5 3 7 10 4 16l-91 157c0 0 0 0 0 0-2 4-6 6-10 6z m-367-2c-4 0-8-2-10-6l-91-158c-3-6-1-13 4-16l61-35c5-3 12-1 15 4l92 158 0 0c3 6 1 13-5 16l-60 35c0 0 0 0 0 0-2 1-4 1-6 2z m149-58c-7 0-12-5-12-11l0-183 0 0c0-6 5-11 12-11l69 0c0 0 0 0 1 0 6 0 11 5 11 11l0 183 0 0c0 6-5 11-11 11l-69 0c-1 0-1 0-1 0z" horiz-adv-x="1000" />
101 <glyph glyph-name="spin" unicode="&#xe838;" d="M462 850c-6 0-11-5-11-11l0-183 0 0c0-6 5-11 11-11l69 0c1 0 1 0 1 0 7 0 12 5 12 11l0 183 0 0c0 6-5 11-12 11l-69 0c0 0 0 0-1 0z m250-47c-4 1-8-2-10-5l-91-158 0 0c-4-6-2-13 4-16l60-34c0-1 0-1 0-1 6-3 13-1 16 4l91 158c3 6 2 13-4 16l-61 35c-1 1-3 1-5 1z m-428-2c-2 0-4-1-6-2l-61-35c-5-3-7-10-4-16l91-157c0 0 0 0 0 0 3-6 10-8 16-5l61 35c5 4 7 11 4 16l-91 157c0 1 0 1 0 1-2 4-6 6-10 6z m620-163c-2 0-4 0-6-1l-157-91c0 0 0 0 0 0-6-3-8-10-5-16l35-61c4-5 11-7 16-4l157 91c1 0 1 0 1 0 6 3 7 11 4 16l-35 61c-2 4-6 6-10 5z m-810-4c-5 0-9-2-11-6l-35-61c-3-5-1-12 4-15l158-91 0 0c6-4 13-2 16 4l35 60c0 0 0 0 0 0 3 6 1 13-4 16l-158 91c-2 1-4 2-5 2z m712-235l0 0c-6 0-11-5-11-11l0-69c0-1 0-1 0-1 0-7 5-12 11-12l183 0 0 0c6 0 11 5 11 12l0 69c0 0 0 0 0 1 0 6-5 11-11 11l-183 0z m-794-5l0 0c-7 0-12-5-12-12l0-69c0 0 0 0 0-1 0-6 5-11 12-11l182 0 0 0c6 0 11 5 11 11l0 69c0 1 0 1 0 1 0 7-5 12-11 12l-182 0z m772-153c-4 0-8-2-10-6l-34-60c-1 0-1 0-1 0-3-6-1-13 4-16l158-91c6-3 13-1 16 4l35 61c3 5 1 12-4 15l-158 92 0 0c-2 1-4 1-6 1z m-566-5c-1 0-3 0-5-1l-157-91c0 0-1 0-1 0-5-3-7-10-4-16l35-61c3-5 10-7 16-4l157 91c0 0 0 0 0 0 6 3 8 10 5 16l-35 61c-3 3-7 6-11 5z m468-121c-2 0-4 0-6-1l-61-35c-5-4-7-11-4-16l91-157c0-1 0-1 0-1 3-6 11-7 16-4l61 35c5 3 7 10 4 16l-91 157c0 0 0 0 0 0-2 4-6 6-10 6z m-367-2c-4 0-8-2-10-6l-91-158c-3-6-1-13 4-16l61-35c5-3 12-1 15 4l92 158 0 0c3 6 1 13-5 16l-60 35c0 0 0 0 0 0-2 1-4 1-6 2z m149-58c-7 0-12-5-12-11l0-183 0 0c0-6 5-11 12-11l69 0c0 0 0 0 1 0 6 0 11 5 11 11l0 183 0 0c0 6-5 11-11 11l-69 0c-1 0-1 0-1 0z" horiz-adv-x="1000" />
100
102
101 <glyph glyph-name="docs" unicode="&#xf0c5;" d="M946 636q23 0 38-16t16-38v-678q0-23-16-38t-38-16h-535q-23 0-38 16t-16 38v160h-303q-23 0-38 16t-16 38v375q0 22 11 49t27 42l228 228q15 16 42 27t49 11h232q23 0 38-16t16-38v-183q38 23 71 23h232z m-303-119l-167-167h167v167z m-357 214l-167-167h167v167z m109-361l176 176v233h-214v-233q0-22-15-37t-38-16h-233v-357h286v143q0 22 11 49t27 42z m534-449v643h-215v-232q0-22-15-38t-38-15h-232v-358h500z" horiz-adv-x="1000" />
103 <glyph glyph-name="docs" unicode="&#xf0c5;" d="M946 636q23 0 38-16t16-38v-678q0-23-16-38t-38-16h-535q-23 0-38 16t-16 38v160h-303q-23 0-38 16t-16 38v375q0 22 11 49t27 42l228 228q15 16 42 27t49 11h232q23 0 38-16t16-38v-183q38 23 71 23h232z m-303-119l-167-167h167v167z m-357 214l-167-167h167v167z m109-361l176 176v233h-214v-233q0-22-15-37t-38-16h-233v-357h286v143q0 22 11 49t27 42z m534-449v643h-215v-232q0-22-15-38t-38-15h-232v-358h500z" horiz-adv-x="1000" />
102
104
103 <glyph glyph-name="menu" unicode="&#xf0c9;" d="M857 100v-71q0-15-10-25t-26-11h-785q-15 0-25 11t-11 25v71q0 15 11 25t25 11h785q15 0 26-11t10-25z m0 286v-72q0-14-10-25t-26-10h-785q-15 0-25 10t-11 25v72q0 14 11 25t25 10h785q15 0 26-10t10-25z m0 285v-71q0-14-10-25t-26-11h-785q-15 0-25 11t-11 25v71q0 15 11 26t25 10h785q15 0 26-10t10-26z" horiz-adv-x="857.1" />
105 <glyph glyph-name="menu" unicode="&#xf0c9;" d="M857 100v-71q0-15-10-25t-26-11h-785q-15 0-25 11t-11 25v71q0 15 11 25t25 11h785q15 0 26-11t10-25z m0 286v-72q0-14-10-25t-26-10h-785q-15 0-25 10t-11 25v72q0 14 11 25t25 10h785q15 0 26-10t10-25z m0 285v-71q0-14-10-25t-26-11h-785q-15 0-25 11t-11 25v71q0 15 11 26t25 10h785q15 0 26-10t10-26z" horiz-adv-x="857.1" />
104
106
107 <glyph glyph-name="sort" unicode="&#xf0dc;" d="M571 243q0-15-10-25l-250-250q-11-11-25-11t-25 11l-250 250q-11 10-11 25t11 25 25 11h500q14 0 25-11t10-25z m0 214q0-14-10-25t-25-11h-500q-15 0-25 11t-11 25 11 25l250 250q10 11 25 11t25-11l250-250q10-10 10-25z" horiz-adv-x="571.4" />
108
105 <glyph glyph-name="paste" unicode="&#xf0ea;" d="M429-79h500v358h-233q-22 0-37 15t-16 38v232h-214v-643z m142 804v36q0 7-5 12t-12 6h-393q-7 0-13-6t-5-12v-36q0-7 5-13t13-5h393q7 0 12 5t5 13z m143-375h167l-167 167v-167z m286-71v-375q0-23-16-38t-38-16h-535q-23 0-38 16t-16 38v89h-303q-23 0-38 16t-16 37v750q0 23 16 38t38 16h607q22 0 38-16t15-38v-183q12-7 20-15l228-228q16-15 27-42t11-49z" horiz-adv-x="1000" />
109 <glyph glyph-name="paste" unicode="&#xf0ea;" d="M429-79h500v358h-233q-22 0-37 15t-16 38v232h-214v-643z m142 804v36q0 7-5 12t-12 6h-393q-7 0-13-6t-5-12v-36q0-7 5-13t13-5h393q7 0 12 5t5 13z m143-375h167l-167 167v-167z m286-71v-375q0-23-16-38t-38-16h-535q-23 0-38 16t-16 38v89h-303q-23 0-38 16t-16 37v750q0 23 16 38t38 16h607q22 0 38-16t15-38v-183q12-7 20-15l228-228q16-15 27-42t11-49z" horiz-adv-x="1000" />
106
110
107 <glyph glyph-name="doc-text" unicode="&#xf0f6;" d="M819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 17-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 16t-16 37v233h-429v-858h715z m-572 483q0 7 5 12t13 5h393q8 0 13-5t5-12v-36q0-8-5-13t-13-5h-393q-8 0-13 5t-5 13v36z m411-125q8 0 13-5t5-13v-36q0-8-5-13t-13-5h-393q-8 0-13 5t-5 13v36q0 8 5 13t13 5h393z m0-143q8 0 13-5t5-13v-36q0-8-5-13t-13-5h-393q-8 0-13 5t-5 13v36q0 8 5 13t13 5h393z" horiz-adv-x="857.1" />
111 <glyph glyph-name="doc-text" unicode="&#xf0f6;" d="M819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 17-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 16t-16 37v233h-429v-858h715z m-572 483q0 7 5 12t13 5h393q8 0 13-5t5-12v-36q0-8-5-13t-13-5h-393q-8 0-13 5t-5 13v36z m411-125q8 0 13-5t5-13v-36q0-8-5-13t-13-5h-393q-8 0-13 5t-5 13v36q0 8 5 13t13 5h393z m0-143q8 0 13-5t5-13v-36q0-8-5-13t-13-5h-393q-8 0-13 5t-5 13v36q0 8 5 13t13 5h393z" horiz-adv-x="857.1" />
108
112
109 <glyph glyph-name="plus-squared" unicode="&#xf0fe;" d="M714 314v72q0 14-10 25t-25 10h-179v179q0 15-11 25t-25 11h-71q-15 0-25-11t-11-25v-179h-178q-15 0-25-10t-11-25v-72q0-14 11-25t25-10h178v-179q0-14 11-25t25-11h71q15 0 25 11t11 25v179h179q14 0 25 10t10 25z m143 304v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
113 <glyph glyph-name="plus-squared" unicode="&#xf0fe;" d="M714 314v72q0 14-10 25t-25 10h-179v179q0 15-11 25t-25 11h-71q-15 0-25-11t-11-25v-179h-178q-15 0-25-10t-11-25v-72q0-14 11-25t25-10h178v-179q0-14 11-25t25-11h71q15 0 25 11t11 25v179h179q14 0 25 10t10 25z m143 304v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
110
114
115 <glyph glyph-name="angle-left" unicode="&#xf104;" d="M350 546q0-7-6-12l-219-220 219-219q6-6 6-13t-6-13l-28-28q-5-5-12-5t-13 5l-260 261q-6 5-6 12t6 13l260 260q5 6 13 6t12-6l28-28q6-5 6-13z" horiz-adv-x="357.1" />
116
117 <glyph glyph-name="angle-right" unicode="&#xf105;" d="M332 314q0-7-5-12l-261-261q-5-5-12-5t-13 5l-28 28q-6 6-6 13t6 13l219 219-219 220q-6 5-6 12t6 13l28 28q5 6 13 6t12-6l261-260q5-5 5-13z" horiz-adv-x="357.1" />
118
119 <glyph glyph-name="angle-up" unicode="&#xf106;" d="M600 189q0-7-6-12l-28-28q-5-6-12-6t-13 6l-220 219-219-219q-5-6-13-6t-12 6l-28 28q-6 5-6 12t6 13l260 260q5 6 12 6t13-6l260-260q6-5 6-13z" horiz-adv-x="642.9" />
120
121 <glyph glyph-name="angle-down" unicode="&#xf107;" d="M600 439q0-7-6-12l-260-261q-5-5-13-5t-12 5l-260 261q-6 5-6 12t6 13l28 28q5 6 12 6t13-6l219-219 220 219q5 6 13 6t12-6l28-28q6-5 6-13z" horiz-adv-x="642.9" />
122
123 <glyph glyph-name="circle-empty" unicode="&#xf10c;" d="M429 654q-83 0-153-41t-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152-41 152-110 111-152 41z m428-304q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
124
125 <glyph glyph-name="circle" unicode="&#xf111;" d="M857 350q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
126
111 <glyph glyph-name="folder-empty" unicode="&#xf114;" d="M857 118v393q0 22-15 38t-38 15h-393q-23 0-38 16t-16 38v36q0 22-15 38t-38 15h-179q-22 0-38-15t-16-38v-536q0-22 16-38t38-16h679q22 0 38 16t15 38z m72 393v-393q0-51-37-88t-88-37h-679q-51 0-88 37t-37 88v536q0 51 37 88t88 37h179q51 0 88-37t37-88v-18h375q51 0 88-37t37-88z" horiz-adv-x="928.6" />
127 <glyph glyph-name="folder-empty" unicode="&#xf114;" d="M857 118v393q0 22-15 38t-38 15h-393q-23 0-38 16t-16 38v36q0 22-15 38t-38 15h-179q-22 0-38-15t-16-38v-536q0-22 16-38t38-16h679q22 0 38 16t15 38z m72 393v-393q0-51-37-88t-88-37h-679q-51 0-88 37t-37 88v536q0 51 37 88t88 37h179q51 0 88-37t37-88v-18h375q51 0 88-37t37-88z" horiz-adv-x="928.6" />
112
128
113 <glyph glyph-name="folder-open-empty" unicode="&#xf115;" d="M994 331q0 19-30 19h-607q-22 0-48-12t-39-29l-164-203q-11-13-11-22 0-20 30-20h607q23 0 48 13t40 29l164 203q10 12 10 22z m-637 90h429v90q0 22-16 38t-38 15h-321q-23 0-38 16t-16 38v36q0 22-15 38t-38 15h-179q-22 0-38-15t-16-38v-476l143 175q25 30 65 49t78 19z m708-90q0-35-25-67l-165-203q-24-30-65-49t-78-19h-607q-51 0-88 37t-37 88v536q0 51 37 88t88 37h179q51 0 88-37t37-88v-18h303q52 0 88-37t37-88v-90h107q30 0 56-13t37-40q8-17 8-37z" horiz-adv-x="1071.4" />
129 <glyph glyph-name="folder-open-empty" unicode="&#xf115;" d="M994 331q0 19-30 19h-607q-22 0-48-12t-39-29l-164-203q-11-13-11-22 0-20 30-20h607q23 0 48 13t40 29l164 203q10 12 10 22z m-637 90h429v90q0 22-16 38t-38 15h-321q-23 0-38 16t-16 38v36q0 22-15 38t-38 15h-179q-22 0-38-15t-16-38v-476l143 175q25 30 65 49t78 19z m708-90q0-35-25-67l-165-203q-24-30-65-49t-78-19h-607q-51 0-88 37t-37 88v536q0 51 37 88t88 37h179q51 0 88-37t37-88v-18h303q52 0 88-37t37-88v-90h107q30 0 56-13t37-40q8-17 8-37z" horiz-adv-x="1071.4" />
114
130
131 <glyph glyph-name="code" unicode="&#xf121;" d="M344 69l-28-28q-5-5-12-5t-13 5l-260 261q-6 5-6 12t6 13l260 260q5 6 13 6t12-6l28-28q6-5 6-13t-6-12l-219-220 219-219q6-6 6-13t-6-13z m330 596l-208-721q-2-7-9-11t-13-1l-34 9q-8 3-11 9t-2 14l209 720q2 8 8 11t13 2l35-10q7-2 11-9t1-13z m367-363l-260-261q-6-5-13-5t-13 5l-28 28q-5 6-5 13t5 13l219 219-219 220q-5 5-5 12t5 13l28 28q6 6 13 6t13-6l260-260q5-5 5-13t-5-12z" horiz-adv-x="1071.4" />
132
133 <glyph glyph-name="info" unicode="&#xf129;" d="M357 100v-71q0-15-10-25t-26-11h-285q-15 0-25 11t-11 25v71q0 15 11 25t25 11h35v214h-35q-15 0-25 11t-11 25v71q0 15 11 25t25 11h214q15 0 25-11t11-25v-321h35q15 0 26-11t10-25z m-71 643v-107q0-15-11-25t-25-11h-143q-14 0-25 11t-11 25v107q0 14 11 25t25 11h143q15 0 25-11t11-25z" horiz-adv-x="357.1" />
134
115 <glyph glyph-name="minus-squared" unicode="&#xf146;" d="M714 314v72q0 14-10 25t-25 10h-500q-15 0-25-10t-11-25v-72q0-14 11-25t25-10h500q14 0 25 10t10 25z m143 304v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
135 <glyph glyph-name="minus-squared" unicode="&#xf146;" d="M714 314v72q0 14-10 25t-25 10h-500q-15 0-25-10t-11-25v-72q0-14 11-25t25-10h500q14 0 25 10t10 25z m143 304v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
116
136
117 <glyph glyph-name="minus-squared-alt" unicode="&#xf147;" d="M643 404v-36q0-8-5-13t-13-5h-464q-8 0-13 5t-5 13v36q0 7 5 12t13 5h464q8 0 13-5t5-12z m71-250v464q0 37-26 63t-63 26h-464q-37 0-63-26t-27-63v-464q0-37 27-63t63-27h464q37 0 63 27t26 63z m72 464v-464q0-67-47-114t-114-47h-464q-67 0-114 47t-47 114v464q0 66 47 113t114 48h464q66 0 114-48t47-113z" horiz-adv-x="785.7" />
137 <glyph glyph-name="minus-squared-alt" unicode="&#xf147;" d="M643 404v-36q0-8-5-13t-13-5h-464q-8 0-13 5t-5 13v36q0 7 5 12t13 5h464q8 0 13-5t5-12z m71-250v464q0 37-26 63t-63 26h-464q-37 0-63-26t-27-63v-464q0-37 27-63t63-27h464q37 0 63 27t26 63z m72 464v-464q0-67-47-114t-114-47h-464q-67 0-114 47t-47 114v464q0 66 47 113t114 48h464q66 0 114-48t47-113z" horiz-adv-x="785.7" />
118
138
119 <glyph glyph-name="doc-inv" unicode="&#xf15b;" d="M571 564v264q13-8 21-16l227-228q8-7 16-20h-264z m-71-18q0-22 16-37t38-16h303v-589q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h446v-304z" horiz-adv-x="857.1" />
139 <glyph glyph-name="doc-inv" unicode="&#xf15b;" d="M571 564v264q13-8 21-16l227-228q8-7 16-20h-264z m-71-18q0-22 16-37t38-16h303v-589q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h446v-304z" horiz-adv-x="857.1" />
120
140
121 <glyph glyph-name="doc-text-inv" unicode="&#xf15c;" d="M819 584q8-7 16-20h-264v264q13-8 21-16z m-265-91h303v-589q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h446v-304q0-22 16-37t38-16z m89-411v36q0 8-5 13t-13 5h-393q-8 0-13-5t-5-13v-36q0-8 5-13t13-5h393q8 0 13 5t5 13z m0 143v36q0 8-5 13t-13 5h-393q-8 0-13-5t-5-13v-36q0-8 5-13t13-5h393q8 0 13 5t5 13z m0 143v36q0 7-5 12t-13 5h-393q-8 0-13-5t-5-12v-36q0-8 5-13t13-5h393q8 0 13 5t5 13z" horiz-adv-x="857.1" />
141 <glyph glyph-name="doc-text-inv" unicode="&#xf15c;" d="M819 584q8-7 16-20h-264v264q13-8 21-16z m-265-91h303v-589q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h446v-304q0-22 16-37t38-16z m89-411v36q0 8-5 13t-13 5h-393q-8 0-13-5t-5-13v-36q0-8 5-13t13-5h393q8 0 13 5t5 13z m0 143v36q0 8-5 13t-13 5h-393q-8 0-13-5t-5-13v-36q0-8 5-13t13-5h393q8 0 13 5t5 13z m0 143v36q0 7-5 12t-13 5h-393q-8 0-13-5t-5-12v-36q0-8 5-13t13-5h393q8 0 13 5t5 13z" horiz-adv-x="857.1" />
122
142
123 <glyph glyph-name="plus-squared-alt" unicode="&#xf196;" d="M643 404v-36q0-8-5-13t-13-5h-196v-196q0-8-5-13t-13-5h-36q-8 0-13 5t-5 13v196h-196q-8 0-13 5t-5 13v36q0 7 5 12t13 5h196v197q0 8 5 13t13 5h36q8 0 13-5t5-13v-197h196q8 0 13-5t5-12z m71-250v464q0 37-26 63t-63 26h-464q-37 0-63-26t-27-63v-464q0-37 27-63t63-27h464q37 0 63 27t26 63z m72 464v-464q0-67-47-114t-114-47h-464q-67 0-114 47t-47 114v464q0 66 47 113t114 48h464q66 0 114-48t47-113z" horiz-adv-x="785.7" />
143 <glyph glyph-name="plus-squared-alt" unicode="&#xf196;" d="M643 404v-36q0-8-5-13t-13-5h-196v-196q0-8-5-13t-13-5h-36q-8 0-13 5t-5 13v196h-196q-8 0-13 5t-5 13v36q0 7 5 12t13 5h196v197q0 8 5 13t13 5h36q8 0 13-5t5-13v-197h196q8 0 13-5t5-12z m71-250v464q0 37-26 63t-63 26h-464q-37 0-63-26t-27-63v-464q0-37 27-63t63-27h464q37 0 63 27t26 63z m72 464v-464q0-67-47-114t-114-47h-464q-67 0-114 47t-47 114v464q0 66 47 113t114 48h464q66 0 114-48t47-113z" horiz-adv-x="785.7" />
124
144
125 <glyph glyph-name="file-code" unicode="&#xf1c9;" d="M819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 17-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 16t-16 37v233h-429v-858h715z m-518 500q4 7 12 7t13-3l28-21q7-5 7-12t-3-13l-102-136 102-136q4-6 3-13t-7-12l-28-21q-6-4-13-4t-12 7l-126 168q-8 11 0 22z m447-167q8-11 0-22l-126-168q-4-6-11-7t-14 4l-28 21q-6 5-7 12t3 13l102 136-102 136q-4 6-3 13t7 12l28 21q6 4 14 3t11-7z m-346-258q-7 1-11 8t-3 13l77 464q1 7 7 11t14 3l35-5q7-2 11-8t3-13l-77-464q-1-7-7-11t-13-3z" horiz-adv-x="857.1" />
145 <glyph glyph-name="file-code" unicode="&#xf1c9;" d="M819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 17-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 16t-16 37v233h-429v-858h715z m-518 500q4 7 12 7t13-3l28-21q7-5 7-12t-3-13l-102-136 102-136q4-6 3-13t-7-12l-28-21q-6-4-13-4t-12 7l-126 168q-8 11 0 22z m447-167q8-11 0-22l-126-168q-4-6-11-7t-14 4l-28 21q-6 5-7 12t3 13l102 136-102 136q-4 6-3 13t7 12l28 21q6 4 14 3t11-7z m-346-258q-7 1-11 8t-3 13l77 464q1 7 7 11t14 3l35-5q7-2 11-8t3-13l-77-464q-1-7-7-11t-13-3z" horiz-adv-x="857.1" />
126
146
127 <glyph glyph-name="history" unicode="&#xf1da;" d="M857 350q0-87-34-166t-91-137-137-92-166-34q-96 0-183 41t-147 114q-4 6-4 13t5 11l76 77q6 5 14 5 9-1 13-7 41-53 100-82t126-29q58 0 110 23t92 61 61 91 22 111-22 111-61 91-92 61-110 23q-55 0-105-20t-90-57l77-77q17-16 8-38-10-23-33-23h-250q-15 0-25 11t-11 25v250q0 24 22 33 22 10 39-8l72-72q60 57 137 88t159 31q87 0 166-34t137-92 91-137 34-166z m-357 161v-250q0-8-5-13t-13-5h-178q-8 0-13 5t-5 13v35q0 8 5 13t13 5h125v197q0 8 5 13t12 5h36q8 0 13-5t5-13z" horiz-adv-x="857.1" />
147 <glyph glyph-name="history" unicode="&#xf1da;" d="M857 350q0-87-34-166t-91-137-137-92-166-34q-96 0-183 41t-147 114q-4 6-4 13t5 11l76 77q6 5 14 5 9-1 13-7 41-53 100-82t126-29q58 0 110 23t92 61 61 91 22 111-22 111-61 91-92 61-110 23q-55 0-105-20t-90-57l77-77q17-16 8-38-10-23-33-23h-250q-15 0-25 11t-11 25v250q0 24 22 33 22 10 39-8l72-72q60 57 137 88t159 31q87 0 166-34t137-92 91-137 34-166z m-357 161v-250q0-8-5-13t-13-5h-178q-8 0-13 5t-5 13v35q0 8 5 13t13 5h125v197q0 8 5 13t12 5h36q8 0 13-5t5-13z" horiz-adv-x="857.1" />
128
148
149 <glyph glyph-name="circle-thin" unicode="&#xf1db;" d="M429 707q-73 0-139-28t-114-76-76-114-29-139 29-139 76-113 114-77 139-28 138 28 114 77 76 113 29 139-29 139-76 114-114 76-138 28z m428-357q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
150
129 <glyph glyph-name="sliders" unicode="&#xf1de;" d="M196 64v-71h-196v71h196z m197 72q14 0 25-11t11-25v-143q0-14-11-25t-25-11h-143q-14 0-25 11t-11 25v143q0 15 11 25t25 11h143z m89 214v-71h-482v71h482z m-357 286v-72h-125v72h125z m732-572v-71h-411v71h411z m-536 643q15 0 26-10t10-26v-142q0-15-10-25t-26-11h-142q-15 0-25 11t-11 25v142q0 15 11 26t25 10h142z m358-286q14 0 25-10t10-25v-143q0-15-10-25t-25-11h-143q-15 0-25 11t-11 25v143q0 14 11 25t25 10h143z m178-71v-71h-125v71h125z m0 286v-72h-482v72h482z" horiz-adv-x="857.1" />
151 <glyph glyph-name="sliders" unicode="&#xf1de;" d="M196 64v-71h-196v71h196z m197 72q14 0 25-11t11-25v-143q0-14-11-25t-25-11h-143q-14 0-25 11t-11 25v143q0 15 11 25t25 11h143z m89 214v-71h-482v71h482z m-357 286v-72h-125v72h125z m732-572v-71h-411v71h411z m-536 643q15 0 26-10t10-26v-142q0-15-10-25t-26-11h-142q-15 0-25 11t-11 25v142q0 15 11 26t25 10h142z m358-286q14 0 25-10t10-25v-143q0-15-10-25t-25-11h-143q-15 0-25 11t-11 25v143q0 14 11 25t25 10h143z m178-71v-71h-125v71h125z m0 286v-72h-482v72h482z" horiz-adv-x="857.1" />
130
152
131 <glyph glyph-name="trash" unicode="&#xf1f8;" d="M286 82v393q0 8-5 13t-13 5h-36q-8 0-13-5t-5-13v-393q0-8 5-13t13-5h36q8 0 13 5t5 13z m143 0v393q0 8-5 13t-13 5h-36q-8 0-13-5t-5-13v-393q0-8 5-13t13-5h36q8 0 13 5t5 13z m142 0v393q0 8-5 13t-12 5h-36q-8 0-13-5t-5-13v-393q0-8 5-13t13-5h36q7 0 12 5t5 13z m-303 554h250l-27 65q-4 5-9 6h-177q-6-1-10-6z m518-18v-36q0-8-5-13t-13-5h-54v-529q0-46-26-80t-63-34h-464q-37 0-63 33t-27 79v531h-53q-8 0-13 5t-5 13v36q0 8 5 13t13 5h172l39 93q9 21 31 35t44 15h178q23 0 44-15t30-35l39-93h173q8 0 13-5t5-13z" horiz-adv-x="785.7" />
153 <glyph glyph-name="trash" unicode="&#xf1f8;" d="M286 82v393q0 8-5 13t-13 5h-36q-8 0-13-5t-5-13v-393q0-8 5-13t13-5h36q8 0 13 5t5 13z m143 0v393q0 8-5 13t-13 5h-36q-8 0-13-5t-5-13v-393q0-8 5-13t13-5h36q8 0 13 5t5 13z m142 0v393q0 8-5 13t-12 5h-36q-8 0-13-5t-5-13v-393q0-8 5-13t13-5h36q7 0 12 5t5 13z m-303 554h250l-27 65q-4 5-9 6h-177q-6-1-10-6z m518-18v-36q0-8-5-13t-13-5h-54v-529q0-46-26-80t-63-34h-464q-37 0-63 33t-27 79v531h-53q-8 0-13 5t-5 13v36q0 8 5 13t13 5h172l39 93q9 21 31 35t44 15h178q23 0 44-15t30-35l39-93h173q8 0 13-5t5-13z" horiz-adv-x="785.7" />
132 </font>
154 </font>
133 </defs>
155 </defs>
134 </svg> No newline at end of file
156 </svg>
1 NO CONTENT: modified file, binary diff hidden
NO CONTENT: modified file, binary diff hidden
1 NO CONTENT: modified file, binary diff hidden
NO CONTENT: modified file, binary diff hidden
1 NO CONTENT: modified file, binary diff hidden
NO CONTENT: modified file, binary diff hidden
@@ -1,356 +1,311 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2
2
3 <%inherit file="/base/base.mako"/>
3 <%inherit file="/base/base.mako"/>
4 <%namespace name="base" file="/base/base.mako"/>
4 <%namespace name="diff_block" file="/changeset/diff_block.mako"/>
5 <%namespace name="diff_block" file="/changeset/diff_block.mako"/>
6 <%namespace name="file_base" file="/files/base.mako"/>
5
7
6 <%def name="title()">
8 <%def name="title()">
7 ${_('%s Commit') % c.repo_name} - ${h.show_id(c.commit)}
9 ${_('{} Commit').format(c.repo_name)} - ${h.show_id(c.commit)}
8 %if c.rhodecode_name:
10 %if c.rhodecode_name:
9 &middot; ${h.branding(c.rhodecode_name)}
11 &middot; ${h.branding(c.rhodecode_name)}
10 %endif
12 %endif
11 </%def>
13 </%def>
12
14
13 <%def name="menu_bar_nav()">
15 <%def name="menu_bar_nav()">
14 ${self.menu_items(active='repositories')}
16 ${self.menu_items(active='repositories')}
15 </%def>
17 </%def>
16
18
17 <%def name="menu_bar_subnav()">
19 <%def name="menu_bar_subnav()">
18 ${self.repo_menu(active='commits')}
20 ${self.repo_menu(active='commits')}
19 </%def>
21 </%def>
20
22
21 <%def name="main()">
23 <%def name="main()">
22 <script>
24 <script type="text/javascript">
23 // TODO: marcink switch this to pyroutes
25 // TODO: marcink switch this to pyroutes
24 AJAX_COMMENT_DELETE_URL = "${h.route_path('repo_commit_comment_delete',repo_name=c.repo_name,commit_id=c.commit.raw_id,comment_id='__COMMENT_ID__')}";
26 AJAX_COMMENT_DELETE_URL = "${h.route_path('repo_commit_comment_delete',repo_name=c.repo_name,commit_id=c.commit.raw_id,comment_id='__COMMENT_ID__')}";
25 templateContext.commit_data.commit_id = "${c.commit.raw_id}";
27 templateContext.commit_data.commit_id = "${c.commit.raw_id}";
26 </script>
28 </script>
29
27 <div class="box">
30 <div class="box">
28
31
29 <div id="changeset_compare_view_content" class="summary changeset">
32 <div class="summary">
30 <div class="summary-detail">
33
31 <div class="fieldset">
34 <div class="fieldset">
32 <div class="left-label-summary">
35 <div class="left-content">
33 <p>${_('Commit')}</p>
36
34 <div class="right-label-summary">
37 <div class="left-content-avatar">
35 <code>
38 ${base.gravatar(c.commit.author_email, 30)}
36 ${h.show_id(c.commit)}
39 </div>
37 </code>
40
38 <i class="tooltip icon-clipboard clipboard-action" data-clipboard-text="${c.commit.raw_id}" title="${_('Copy the full commit id')}"></i>
41 <div class="left-content-message">
39 % if hasattr(c.commit, 'phase'):
42 <div class="fieldset collapsable-content no-hide" data-toggle="summary-details">
40 <span class="tag phase-${c.commit.phase} tooltip" title="${_('Commit phase')}">${c.commit.phase}</span>
43 <div class="commit truncate-wrap">${h.urlify_commit_message(h.chop_at_smart(c.commit.message, '\n', suffix_if_chopped='...'), c.repo_name)}</div>
41 % endif
44 </div>
42
45
43 ## obsolete commits
46 <div class="fieldset collapsable-content" data-toggle="summary-details" style="display: none">
44 % if hasattr(c.commit, 'obsolete'):
47 <div class="commit">${h.urlify_commit_message(c.commit.message,c.repo_name)}</div>
45 % if c.commit.obsolete:
48 </div>
46 <span class="tag obsolete-${c.commit.obsolete} tooltip" title="${_('Evolve State')}">${_('obsolete')}</span>
49
47 % endif
50 <div class="fieldset" data-toggle="summary-details">
48 % endif
51 <div class="">
52 <table>
53 <tr class="file_author tooltip" title="${h.tooltip(h.author_string(c.commit.author_email))}">
49
54
50 ## hidden commits
55 <td>
51 % if hasattr(c.commit, 'hidden'):
56 <span class="user commit-author">${h.link_to_user(c.commit.author)}</span>
52 % if c.commit.hidden:
57 <span class="commit-date">- ${h.age_component(c.commit.date)}</span>
53 <span class="tag hidden-${c.commit.hidden} tooltip" title="${_('Evolve State')}">${_('hidden')}</span>
58 </td>
54 % endif
55 % endif
56
57
59
58 <div class="pull-right">
60 <td>
59 <span id="parent_link">
61 ## second cell for consistency with files
60 <a href="#parentCommit" title="${_('Parent Commit')}"><i class="icon-left icon-no-margin"></i>${_('parent')}</a>
62 </td>
61 </span>
63 </tr>
62 |
64 </table>
63 <span id="child_link">
64 <a href="#childCommit" title="${_('Child Commit')}">${_('child')}<i class="icon-right icon-no-margin"></i></a>
65 </span>
66 </div>
67
68 </div>
69 </div>
65 </div>
70 </div>
66 </div>
71
67
68 </div>
69 </div>
72
70
71 <div class="right-content">
72
73 <div data-toggle="summary-details">
74 <div class="tags tags-main">
75 <code><a href="${h.route_path('repo_commit',repo_name=c.repo_name,commit_id=c.commit.raw_id)}">${h.show_id(c.commit)}</a></code>
76 <i class="tooltip icon-clipboard clipboard-action" data-clipboard-text="${c.commit.raw_id}" title="${_('Copy the full commit id')}"></i>
77 ${file_base.refs(c.commit)}
78
79 ## phase
80 % if hasattr(c.commit, 'phase') and getattr(c.commit, 'phase') != 'public':
81 <span class="tag phase-${c.commit.phase} tooltip" title="${_('Commit phase')}">
82 <i class="icon-info"></i>${c.commit.phase}
83 </span>
84 % endif
73
85
74 <div class="fieldset">
86 ## obsolete commits
87 % if getattr(c.commit, 'obsolete', False):
88 <span class="tag obsolete-${c.commit.obsolete} tooltip" title="${_('Evolve State')}">
89 ${_('obsolete')}
90 </span>
91 % endif
92
93 ## hidden commits
94 % if getattr(c.commit, 'hidden', False):
95 <span class="tag hidden-${c.commit.hidden} tooltip" title="${_('Evolve State')}">
96 ${_('hidden')}
97 </span>
98 % endif
99 </div>
100
101 %if c.statuses:
102 <div class="tag status-tag-${c.statuses[0]} pull-right">
103 <i class="icon-circle review-status-${c.statuses[0]}"></i>
104 <div class="pull-right">${h.commit_status_lbl(c.statuses[0])}</div>
105 </div>
106 %endif
107
108 </div>
109
110 </div>
111 </div>
112
113 <div class="fieldset collapsable-content" data-toggle="summary-details" style="display: none;">
75 <div class="left-label-summary">
114 <div class="left-label-summary">
76 <p>${_('Description')}:</p>
115 <p>${_('Commit navigation')}:</p>
77 <div class="right-label-summary">
116 <div class="right-label-summary">
78 <div id="trimmed_message_box" class="commit">${h.urlify_commit_message(c.commit.message,c.repo_name)}</div>
117 <span id="parent_link" class="tag tagtag">
79 <div id="message_expand" style="display:none;">
118 <a href="#parentCommit" title="${_('Parent Commit')}"><i class="icon-left icon-no-margin"></i>${_('parent')}</a>
80 ${_('Expand')}
119 </span>
81 </div>
120
121 <span id="child_link" class="tag tagtag">
122 <a href="#childCommit" title="${_('Child Commit')}">${_('child')}<i class="icon-right icon-no-margin"></i></a>
123 </span>
82 </div>
124 </div>
83 </div>
125 </div>
84 </div>
126 </div>
85
127
86 %if c.statuses:
128 <div class="fieldset collapsable-content" data-toggle="summary-details" style="display: none;">
87 <div class="fieldset">
88 <div class="left-label-summary">
89 <p>${_('Commit status')}:</p>
90 <div class="right-label-summary">
91 <div class="changeset-status-ico">
92 <div class="${'flag_status %s' % c.statuses[0]} pull-left"></div>
93 </div>
94 <div title="${_('Commit status')}" class="changeset-status-lbl">[${h.commit_status_lbl(c.statuses[0])}]</div>
95 </div>
96 </div>
97 </div>
98 %endif
99
100 <div class="fieldset">
101 <div class="left-label-summary">
102 <p>${_('References')}:</p>
103 <div class="right-label-summary">
104 <div class="tags">
105 %if c.commit.merge:
106 <span class="mergetag tag">
107 <i class="icon-merge"></i>${_('merge')}
108 </span>
109 %endif
110
111 %if h.is_hg(c.rhodecode_repo):
112 %for book in c.commit.bookmarks:
113 <span class="booktag tag" title="${h.tooltip(_('Bookmark %s') % book)}">
114 <a href="${h.route_path('repo_files:default_path',repo_name=c.repo_name,commit_id=c.commit.raw_id,_query=dict(at=book))}"><i class="icon-bookmark"></i>${h.shorter(book)}</a>
115 </span>
116 %endfor
117 %endif
118
119 %for tag in c.commit.tags:
120 <span class="tagtag tag" title="${h.tooltip(_('Tag %s') % tag)}">
121 <a href="${h.route_path('repo_files:default_path',repo_name=c.repo_name,commit_id=c.commit.raw_id,_query=dict(at=tag))}"><i class="icon-tag"></i>${tag}</a>
122 </span>
123 %endfor
124
125 %if c.commit.branch:
126 <span class="branchtag tag" title="${h.tooltip(_('Branch %s') % c.commit.branch)}">
127 <a href="${h.route_path('repo_files:default_path',repo_name=c.repo_name,commit_id=c.commit.raw_id,_query=dict(at=c.commit.branch))}"><i class="icon-code-fork"></i>${h.shorter(c.commit.branch)}</a>
128 </span>
129 %endif
130 </div>
131 </div>
132 </div>
133 </div>
134
135 <div class="fieldset">
136 <div class="left-label-summary">
129 <div class="left-label-summary">
137 <p>${_('Diff options')}:</p>
130 <p>${_('Diff options')}:</p>
138 <div class="right-label-summary">
131 <div class="right-label-summary">
139 <div class="diff-actions">
132 <div class="diff-actions">
140 <a href="${h.route_path('repo_commit_raw',repo_name=c.repo_name,commit_id=c.commit.raw_id)}" class="tooltip" title="${h.tooltip(_('Raw diff'))}">
133 <a href="${h.route_path('repo_commit_raw',repo_name=c.repo_name,commit_id=c.commit.raw_id)}" class="tooltip" title="${h.tooltip(_('Raw diff'))}">
141 ${_('Raw Diff')}
134 ${_('Raw Diff')}
142 </a>
135 </a>
143 |
136 |
144 <a href="${h.route_path('repo_commit_patch',repo_name=c.repo_name,commit_id=c.commit.raw_id)}" class="tooltip" title="${h.tooltip(_('Patch diff'))}">
137 <a href="${h.route_path('repo_commit_patch',repo_name=c.repo_name,commit_id=c.commit.raw_id)}" class="tooltip" title="${h.tooltip(_('Patch diff'))}">
145 ${_('Patch Diff')}
138 ${_('Patch Diff')}
146 </a>
139 </a>
147 |
140 |
148 <a href="${h.route_path('repo_commit_download',repo_name=c.repo_name,commit_id=c.commit.raw_id,_query=dict(diff='download'))}" class="tooltip" title="${h.tooltip(_('Download diff'))}">
141 <a href="${h.route_path('repo_commit_download',repo_name=c.repo_name,commit_id=c.commit.raw_id,_query=dict(diff='download'))}" class="tooltip" title="${h.tooltip(_('Download diff'))}">
149 ${_('Download Diff')}
142 ${_('Download Diff')}
150 </a>
143 </a>
151 </div>
144 </div>
152 </div>
145 </div>
153 </div>
146 </div>
154 </div>
147 </div>
155
148
156 <div class="fieldset">
149 <div class="clear-fix"></div>
157 <div class="left-label-summary">
150
158 <p>${_('Comments')}:</p>
151 <div class="btn-collapse" data-toggle="summary-details">
159 <div class="right-label-summary">
152 ${_('Show More')}
160 <div class="comments-number">
161 %if c.comments:
162 <a href="#comments">${_ungettext("%d Commit comment", "%d Commit comments", len(c.comments)) % len(c.comments)}</a>,
163 %else:
164 ${_ungettext("%d Commit comment", "%d Commit comments", len(c.comments)) % len(c.comments)}
165 %endif
166 %if c.inline_cnt:
167 <a href="#" onclick="return Rhodecode.comments.nextComment();" id="inline-comments-counter">${_ungettext("%d Inline Comment", "%d Inline Comments", c.inline_cnt) % c.inline_cnt}</a>
168 %else:
169 ${_ungettext("%d Inline Comment", "%d Inline Comments", c.inline_cnt) % c.inline_cnt}
170 %endif
171 </div>
172 </div>
173 </div>
174 </div>
153 </div>
175
154
176 <div class="fieldset">
155 </div>
177 <div class="left-label-summary">
178 <p>${_('Unresolved TODOs')}:</p>
179 <div class="right-label-summary">
180 <div class="comments-number">
181 % if c.unresolved_comments:
182 % for co in c.unresolved_comments:
183 <a class="permalink" href="#comment-${co.comment_id}" onclick="Rhodecode.comments.scrollToComment($('#comment-${co.comment_id}'))"> #${co.comment_id}</a>${'' if loop.last else ','}
184 % endfor
185 % else:
186 ${_('There are no unresolved TODOs')}
187 % endif
188 </div>
189 </div>
190 </div>
191 </div>
192
156
193 <div class="fieldset">
194 <div class="left-label-summary">
195 <p>${_('Author')}</p>
196
197 <div class="right-label-summary">
198 ${self.gravatar_with_user(c.commit.author)}
199 <div class="user-inline-data">- ${h.age_component(c.commit.date)}</div>
200 </div>
201 </div>
202
203 <div class="clear-fix"></div>
204
205 </div> <!-- end summary-detail -->
206 </div> <!-- end summary -->
207 </div>
208 <div class="cs_files">
157 <div class="cs_files">
209 <%namespace name="cbdiffs" file="/codeblocks/diffs.mako"/>
158 <%namespace name="cbdiffs" file="/codeblocks/diffs.mako"/>
210 ${cbdiffs.render_diffset_menu(c.changes[c.commit.raw_id])}
159 ${cbdiffs.render_diffset_menu(c.changes[c.commit.raw_id])}
211 ${cbdiffs.render_diffset(
160 ${cbdiffs.render_diffset(
212 c.changes[c.commit.raw_id], commit=c.commit, use_comments=True,inline_comments=c.inline_comments )}
161 c.changes[c.commit.raw_id], commit=c.commit, use_comments=True,inline_comments=c.inline_comments )}
213 </div>
162 </div>
214
163
164 <div class="comments-heading">
165 <i class="icon-comment"></i>
166 ${_('Comments')} ${len(c.comments)}
167 </div>
168
215 ## template for inline comment form
169 ## template for inline comment form
216 <%namespace name="comment" file="/changeset/changeset_file_comment.mako"/>
170 <%namespace name="comment" file="/changeset/changeset_file_comment.mako"/>
217
171
218 ## render comments
172 ## render comments
219 ${comment.generate_comments(c.comments)}
173 ${comment.generate_comments(c.comments)}
220
174
221 ## main comment form and it status
175 ## main comment form and it status
222 ${comment.comments(h.route_path('repo_commit_comment_create', repo_name=c.repo_name, commit_id=c.commit.raw_id),
176 ${comment.comments(h.route_path('repo_commit_comment_create', repo_name=c.repo_name, commit_id=c.commit.raw_id),
223 h.commit_status(c.rhodecode_db_repo, c.commit.raw_id))}
177 h.commit_status(c.rhodecode_db_repo, c.commit.raw_id))}
224 </div>
178 </div>
225
179
226 ## FORM FOR MAKING JS ACTION AS CHANGESET COMMENTS
180 ## FORM FOR MAKING JS ACTION AS CHANGESET COMMENTS
227 <script type="text/javascript">
181 <script type="text/javascript">
228
182
229 $(document).ready(function() {
183 $(document).ready(function() {
230
184
231 var boxmax = parseInt($('#trimmed_message_box').css('max-height'), 10);
185 var boxmax = parseInt($('#trimmed_message_box').css('max-height'), 10);
232 if($('#trimmed_message_box').height() === boxmax){
186 if($('#trimmed_message_box').height() === boxmax){
233 $('#message_expand').show();
187 $('#message_expand').show();
234 }
188 }
235
189
236 $('#message_expand').on('click', function(e){
190 $('#message_expand').on('click', function(e){
237 $('#trimmed_message_box').css('max-height', 'none');
191 $('#trimmed_message_box').css('max-height', 'none');
238 $(this).hide();
192 $(this).hide();
239 });
193 });
240
194
241 $('.show-inline-comments').on('click', function(e){
195 $('.show-inline-comments').on('click', function(e){
242 var boxid = $(this).attr('data-comment-id');
196 var boxid = $(this).attr('data-comment-id');
243 var button = $(this);
197 var button = $(this);
244
198
245 if(button.hasClass("comments-visible")) {
199 if(button.hasClass("comments-visible")) {
246 $('#{0} .inline-comments'.format(boxid)).each(function(index){
200 $('#{0} .inline-comments'.format(boxid)).each(function(index){
247 $(this).hide();
201 $(this).hide();
248 });
202 });
249 button.removeClass("comments-visible");
203 button.removeClass("comments-visible");
250 } else {
204 } else {
251 $('#{0} .inline-comments'.format(boxid)).each(function(index){
205 $('#{0} .inline-comments'.format(boxid)).each(function(index){
252 $(this).show();
206 $(this).show();
253 });
207 });
254 button.addClass("comments-visible");
208 button.addClass("comments-visible");
255 }
209 }
256 });
210 });
257
211
258
212
259 // next links
213 // next links
260 $('#child_link').on('click', function(e){
214 $('#child_link').on('click', function(e){
261 // fetch via ajax what is going to be the next link, if we have
215 // fetch via ajax what is going to be the next link, if we have
262 // >1 links show them to user to choose
216 // >1 links show them to user to choose
263 if(!$('#child_link').hasClass('disabled')){
217 if(!$('#child_link').hasClass('disabled')){
264 $.ajax({
218 $.ajax({
265 url: '${h.route_path('repo_commit_children',repo_name=c.repo_name, commit_id=c.commit.raw_id)}',
219 url: '${h.route_path('repo_commit_children',repo_name=c.repo_name, commit_id=c.commit.raw_id)}',
266 success: function(data) {
220 success: function(data) {
267 if(data.results.length === 0){
221 if(data.results.length === 0){
268 $('#child_link').html("${_('No Child Commits')}").addClass('disabled');
222 $('#child_link').html("${_('No Child Commits')}").addClass('disabled');
269 }
223 }
270 if(data.results.length === 1){
224 if(data.results.length === 1){
271 var commit = data.results[0];
225 var commit = data.results[0];
272 window.location = pyroutes.url('repo_commit', {'repo_name': '${c.repo_name}','commit_id': commit.raw_id});
226 window.location = pyroutes.url('repo_commit', {'repo_name': '${c.repo_name}','commit_id': commit.raw_id});
273 }
227 }
274 else if(data.results.length === 2){
228 else if(data.results.length === 2){
275 $('#child_link').addClass('disabled');
229 $('#child_link').addClass('disabled');
276 $('#child_link').addClass('double');
230 $('#child_link').addClass('double');
277
231
278 var _html = '';
232 var _html = '';
279 _html +='<a title="__title__" href="__url__"><span class="tag branchtag"><i class="icon-code-fork"></i>__branch__</span> __rev__</a> '
233 _html +='<a title="__title__" href="__url__"><span class="tag branchtag"><i class="icon-code-fork"></i>__branch__</span> __rev__</a> '
280 .replace('__branch__', data.results[0].branch)
234 .replace('__branch__', data.results[0].branch)
281 .replace('__rev__','r{0}:{1}'.format(data.results[0].revision, data.results[0].raw_id.substr(0,6)))
235 .replace('__rev__','r{0}:{1}'.format(data.results[0].revision, data.results[0].raw_id.substr(0,6)))
282 .replace('__title__', data.results[0].message)
236 .replace('__title__', data.results[0].message)
283 .replace('__url__', pyroutes.url('repo_commit', {'repo_name': '${c.repo_name}','commit_id': data.results[0].raw_id}));
237 .replace('__url__', pyroutes.url('repo_commit', {'repo_name': '${c.repo_name}','commit_id': data.results[0].raw_id}));
284 _html +=' | ';
238 _html +=' | ';
285 _html +='<a title="__title__" href="__url__"><span class="tag branchtag"><i class="icon-code-fork"></i>__branch__</span> __rev__</a> '
239 _html +='<a title="__title__" href="__url__"><span class="tag branchtag"><i class="icon-code-fork"></i>__branch__</span> __rev__</a> '
286 .replace('__branch__', data.results[1].branch)
240 .replace('__branch__', data.results[1].branch)
287 .replace('__rev__','r{0}:{1}'.format(data.results[1].revision, data.results[1].raw_id.substr(0,6)))
241 .replace('__rev__','r{0}:{1}'.format(data.results[1].revision, data.results[1].raw_id.substr(0,6)))
288 .replace('__title__', data.results[1].message)
242 .replace('__title__', data.results[1].message)
289 .replace('__url__', pyroutes.url('repo_commit', {'repo_name': '${c.repo_name}','commit_id': data.results[1].raw_id}));
243 .replace('__url__', pyroutes.url('repo_commit', {'repo_name': '${c.repo_name}','commit_id': data.results[1].raw_id}));
290 $('#child_link').html(_html);
244 $('#child_link').html(_html);
291 }
245 }
292 }
246 }
293 });
247 });
294 e.preventDefault();
248 e.preventDefault();
295 }
249 }
296 });
250 });
297
251
298 // prev links
252 // prev links
299 $('#parent_link').on('click', function(e){
253 $('#parent_link').on('click', function(e){
300 // fetch via ajax what is going to be the next link, if we have
254 // fetch via ajax what is going to be the next link, if we have
301 // >1 links show them to user to choose
255 // >1 links show them to user to choose
302 if(!$('#parent_link').hasClass('disabled')){
256 if(!$('#parent_link').hasClass('disabled')){
303 $.ajax({
257 $.ajax({
304 url: '${h.route_path("repo_commit_parents",repo_name=c.repo_name, commit_id=c.commit.raw_id)}',
258 url: '${h.route_path("repo_commit_parents",repo_name=c.repo_name, commit_id=c.commit.raw_id)}',
305 success: function(data) {
259 success: function(data) {
306 if(data.results.length === 0){
260 if(data.results.length === 0){
307 $('#parent_link').html('${_('No Parent Commits')}').addClass('disabled');
261 $('#parent_link').html('${_('No Parent Commits')}').addClass('disabled');
308 }
262 }
309 if(data.results.length === 1){
263 if(data.results.length === 1){
310 var commit = data.results[0];
264 var commit = data.results[0];
311 window.location = pyroutes.url('repo_commit', {'repo_name': '${c.repo_name}','commit_id': commit.raw_id});
265 window.location = pyroutes.url('repo_commit', {'repo_name': '${c.repo_name}','commit_id': commit.raw_id});
312 }
266 }
313 else if(data.results.length === 2){
267 else if(data.results.length === 2){
314 $('#parent_link').addClass('disabled');
268 $('#parent_link').addClass('disabled');
315 $('#parent_link').addClass('double');
269 $('#parent_link').addClass('double');
316
270
317 var _html = '';
271 var _html = '';
318 _html +='<a title="__title__" href="__url__"><span class="tag branchtag"><i class="icon-code-fork"></i>__branch__</span> __rev__</a>'
272 _html +='<a title="__title__" href="__url__"><span class="tag branchtag"><i class="icon-code-fork"></i>__branch__</span> __rev__</a>'
319 .replace('__branch__', data.results[0].branch)
273 .replace('__branch__', data.results[0].branch)
320 .replace('__rev__','r{0}:{1}'.format(data.results[0].revision, data.results[0].raw_id.substr(0,6)))
274 .replace('__rev__','r{0}:{1}'.format(data.results[0].revision, data.results[0].raw_id.substr(0,6)))
321 .replace('__title__', data.results[0].message)
275 .replace('__title__', data.results[0].message)
322 .replace('__url__', pyroutes.url('repo_commit', {'repo_name': '${c.repo_name}','commit_id': data.results[0].raw_id}));
276 .replace('__url__', pyroutes.url('repo_commit', {'repo_name': '${c.repo_name}','commit_id': data.results[0].raw_id}));
323 _html +=' | ';
277 _html +=' | ';
324 _html +='<a title="__title__" href="__url__"><span class="tag branchtag"><i class="icon-code-fork"></i>__branch__</span> __rev__</a>'
278 _html +='<a title="__title__" href="__url__"><span class="tag branchtag"><i class="icon-code-fork"></i>__branch__</span> __rev__</a>'
325 .replace('__branch__', data.results[1].branch)
279 .replace('__branch__', data.results[1].branch)
326 .replace('__rev__','r{0}:{1}'.format(data.results[1].revision, data.results[1].raw_id.substr(0,6)))
280 .replace('__rev__','r{0}:{1}'.format(data.results[1].revision, data.results[1].raw_id.substr(0,6)))
327 .replace('__title__', data.results[1].message)
281 .replace('__title__', data.results[1].message)
328 .replace('__url__', pyroutes.url('repo_commit', {'repo_name': '${c.repo_name}','commit_id': data.results[1].raw_id}));
282 .replace('__url__', pyroutes.url('repo_commit', {'repo_name': '${c.repo_name}','commit_id': data.results[1].raw_id}));
329 $('#parent_link').html(_html);
283 $('#parent_link').html(_html);
330 }
284 }
331 }
285 }
332 });
286 });
333 e.preventDefault();
287 e.preventDefault();
334 }
288 }
335 });
289 });
336
290
337 if (location.hash) {
291 if (location.hash) {
338 var result = splitDelimitedHash(location.hash);
292 var result = splitDelimitedHash(location.hash);
339 var line = $('html').find(result.loc);
293 var line = $('html').find(result.loc);
340 if (line.length > 0){
294 if (line.length > 0){
341 offsetScroll(line, 70);
295 offsetScroll(line, 70);
342 }
296 }
343 }
297 }
344
298
345 // browse tree @ revision
299 // browse tree @ revision
346 $('#files_link').on('click', function(e){
300 $('#files_link').on('click', function(e){
347 window.location = '${h.route_path('repo_files:default_path',repo_name=c.repo_name, commit_id=c.commit.raw_id)}';
301 window.location = '${h.route_path('repo_files:default_path',repo_name=c.repo_name, commit_id=c.commit.raw_id)}';
348 e.preventDefault();
302 e.preventDefault();
349 });
303 });
350
304
351 // inject comments into their proper positions
305 // inject comments into their proper positions
352 var file_comments = $('.inline-comment-placeholder');
306 var file_comments = $('.inline-comment-placeholder');
307
353 })
308 })
354 </script>
309 </script>
355
310
356 </%def>
311 </%def>
@@ -1,119 +1,119 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 ${_('%s Commits') % c.repo_name} -
5 ${_('%s Commits') % c.repo_name} -
6 r${c.commit_ranges[0].idx}:${h.short_id(c.commit_ranges[0].raw_id)}
6 r${c.commit_ranges[0].idx}:${h.short_id(c.commit_ranges[0].raw_id)}
7 ...
7 ...
8 r${c.commit_ranges[-1].idx}:${h.short_id(c.commit_ranges[-1].raw_id)}
8 r${c.commit_ranges[-1].idx}:${h.short_id(c.commit_ranges[-1].raw_id)}
9 ${_ungettext('(%s commit)','(%s commits)', len(c.commit_ranges)) % len(c.commit_ranges)}
9 ${_ungettext('(%s commit)','(%s commits)', len(c.commit_ranges)) % len(c.commit_ranges)}
10 %if c.rhodecode_name:
10 %if c.rhodecode_name:
11 &middot; ${h.branding(c.rhodecode_name)}
11 &middot; ${h.branding(c.rhodecode_name)}
12 %endif
12 %endif
13 </%def>
13 </%def>
14
14
15 <%def name="breadcrumbs_links()"></%def>
15 <%def name="breadcrumbs_links()"></%def>
16
16
17 <%def name="menu_bar_nav()">
17 <%def name="menu_bar_nav()">
18 ${self.menu_items(active='repositories')}
18 ${self.menu_items(active='repositories')}
19 </%def>
19 </%def>
20
20
21 <%def name="menu_bar_subnav()">
21 <%def name="menu_bar_subnav()">
22 ${self.repo_menu(active='commits')}
22 ${self.repo_menu(active='commits')}
23 </%def>
23 </%def>
24
24
25 <%def name="main()">
25 <%def name="main()">
26
26 <div class="box">
27 <div class="box">
27 <div class="summary changeset">
28 <div class="summary changeset">
28 <div class="summary-detail">
29 <div class="summary-detail">
29 <div class="summary-detail-header">
30 <div class="summary-detail-header">
30 <span class="breadcrumbs files_location">
31 <span class="breadcrumbs files_location">
31 <h4>
32 <h4>
32 ${_('Commit Range')}
33 ${_('Commit Range')}
33 </h4>
34 </h4>
34 </span>
35 </span>
35
36
36 <div class="clear-fix"></div>
37 <div class="clear-fix"></div>
37 </div>
38 </div>
38
39
39 <div class="fieldset">
40 <div class="fieldset">
40 <div class="left-label-summary">
41 <div class="left-label-summary">
41 <p class="spacing">${_('Range')}:</p>
42 <p class="spacing">${_('Range')}:</p>
42 <div class="right-label-summary">
43 <div class="right-label-summary">
43 <div class="code-header" >
44 <div class="code-header" >
44 <div class="compare_header">
45 <div class="compare_header">
45 <code class="fieldset-text-line">
46 <code class="fieldset-text-line">
46 r${c.commit_ranges[0].idx}:${h.short_id(c.commit_ranges[0].raw_id)}
47 r${c.commit_ranges[0].idx}:${h.short_id(c.commit_ranges[0].raw_id)}
47 ...
48 ...
48 r${c.commit_ranges[-1].idx}:${h.short_id(c.commit_ranges[-1].raw_id)}
49 r${c.commit_ranges[-1].idx}:${h.short_id(c.commit_ranges[-1].raw_id)}
49 ${_ungettext('(%s commit)','(%s commits)', len(c.commit_ranges)) % len(c.commit_ranges)}
50 ${_ungettext('(%s commit)','(%s commits)', len(c.commit_ranges)) % len(c.commit_ranges)}
50 </code>
51 </code>
51 </div>
52 </div>
52 </div>
53 </div>
53 </div>
54 </div>
54 </div>
55 </div>
55 </div>
56 </div>
56
57
57 <div class="fieldset">
58 <div class="fieldset">
58 <div class="left-label-summary">
59 <div class="left-label-summary">
59 <p class="spacing">${_('Diff Option')}:</p>
60 <p class="spacing">${_('Diff Option')}:</p>
60 <div class="right-label-summary">
61 <div class="right-label-summary">
61 <div class="code-header" >
62 <div class="code-header" >
62 <div class="compare_header">
63 <div class="compare_header">
63 <div class="btn btn-primary">
64 <a class="btn btn-primary" href="${h.route_path('repo_compare',
64 <a href="${h.route_path('repo_compare',
65 repo_name=c.repo_name,
65 repo_name=c.repo_name,
66 source_ref_type='rev',
66 source_ref_type='rev',
67 source_ref=getattr(c.commit_ranges[0].parents[0] if c.commit_ranges[0].parents else h.EmptyCommit(), 'raw_id'),
67 source_ref=getattr(c.commit_ranges[0].parents[0] if c.commit_ranges[0].parents else h.EmptyCommit(), 'raw_id'),
68 target_ref_type='rev',
68 target_ref_type='rev',
69 target_ref=c.commit_ranges[-1].raw_id)}"
69 target_ref=c.commit_ranges[-1].raw_id)}"
70 >
70 >
71 ${_('Show combined diff')}
71 ${_('Show combined diff')}
72 </a>
72 </a>
73 </div>
74 </div>
73 </div>
75 </div>
74 </div>
76 </div>
75 </div>
77 </div>
76 </div>
78 </div>
77 </div>
79
78
80 <div class="clear-fix"></div>
79 <div class="clear-fix"></div>
81 </div> <!-- end summary-detail -->
80 </div> <!-- end summary-detail -->
82 </div> <!-- end summary -->
81 </div> <!-- end summary -->
83
82
84 <div id="changeset_compare_view_content">
83 <div id="changeset_compare_view_content">
85 <div class="pull-left">
84 <div class="pull-left">
86 <div class="btn-group">
85 <div class="btn-group">
87 <a
86 <a
88 class="btn"
87 class="btn"
89 href="#"
88 href="#"
90 onclick="$('.compare_select').show();$('.compare_select_hidden').hide(); return false">
89 onclick="$('.compare_select').show();$('.compare_select_hidden').hide(); return false">
91 ${_ungettext('Expand %s commit','Expand %s commits', len(c.commit_ranges)) % len(c.commit_ranges)}
90 ${_ungettext('Expand %s commit','Expand %s commits', len(c.commit_ranges)) % len(c.commit_ranges)}
92 </a>
91 </a>
93 <a
92 <a
94 class="btn"
93 class="btn"
95 href="#"
94 href="#"
96 onclick="$('.compare_select').hide();$('.compare_select_hidden').show(); return false">
95 onclick="$('.compare_select').hide();$('.compare_select_hidden').show(); return false">
97 ${_ungettext('Collapse %s commit','Collapse %s commits', len(c.commit_ranges)) % len(c.commit_ranges)}
96 ${_ungettext('Collapse %s commit','Collapse %s commits', len(c.commit_ranges)) % len(c.commit_ranges)}
98 </a>
97 </a>
99 </div>
98 </div>
100 </div>
99 </div>
101 ## Commit range generated below
100 ## Commit range generated below
102 <%include file="../compare/compare_commits.mako"/>
101 <%include file="../compare/compare_commits.mako"/>
103 <div class="cs_files">
102 <div class="cs_files">
104 <%namespace name="cbdiffs" file="/codeblocks/diffs.mako"/>
103 <%namespace name="cbdiffs" file="/codeblocks/diffs.mako"/>
105 <%namespace name="comment" file="/changeset/changeset_file_comment.mako"/>
104 <%namespace name="comment" file="/changeset/changeset_file_comment.mako"/>
106 <%namespace name="diff_block" file="/changeset/diff_block.mako"/>
105 <%namespace name="diff_block" file="/changeset/diff_block.mako"/>
107 ${cbdiffs.render_diffset_menu()}
106
108 %for commit in c.commit_ranges:
107 %for commit in c.commit_ranges:
108 ${cbdiffs.render_diffset_menu(c.changes[commit.raw_id])}
109 ${cbdiffs.render_diffset(
109 ${cbdiffs.render_diffset(
110 diffset=c.changes[commit.raw_id],
110 diffset=c.changes[commit.raw_id],
111 collapse_when_files_over=5,
111 collapse_when_files_over=5,
112 commit=commit,
112 commit=commit,
113 )}
113 )}
114 %endfor
114 %endfor
115 </div>
115 </div>
116 </div>
116 </div>
117 </div>
117 </div>
118
118
119 </%def>
119 </%def>
@@ -1,1031 +1,1121 b''
1 <%namespace name="commentblock" file="/changeset/changeset_file_comment.mako"/>
1 <%namespace name="commentblock" file="/changeset/changeset_file_comment.mako"/>
2
2
3 <%def name="diff_line_anchor(commit, filename, line, type)"><%
3 <%def name="diff_line_anchor(commit, filename, line, type)"><%
4 return '%s_%s_%i' % (h.md5_safe(commit+filename), type, line)
4 return '%s_%s_%i' % (h.md5_safe(commit+filename), type, line)
5 %></%def>
5 %></%def>
6
6
7 <%def name="action_class(action)">
7 <%def name="action_class(action)">
8 <%
8 <%
9 return {
9 return {
10 '-': 'cb-deletion',
10 '-': 'cb-deletion',
11 '+': 'cb-addition',
11 '+': 'cb-addition',
12 ' ': 'cb-context',
12 ' ': 'cb-context',
13 }.get(action, 'cb-empty')
13 }.get(action, 'cb-empty')
14 %>
14 %>
15 </%def>
15 </%def>
16
16
17 <%def name="op_class(op_id)">
17 <%def name="op_class(op_id)">
18 <%
18 <%
19 return {
19 return {
20 DEL_FILENODE: 'deletion', # file deleted
20 DEL_FILENODE: 'deletion', # file deleted
21 BIN_FILENODE: 'warning' # binary diff hidden
21 BIN_FILENODE: 'warning' # binary diff hidden
22 }.get(op_id, 'addition')
22 }.get(op_id, 'addition')
23 %>
23 %>
24 </%def>
24 </%def>
25
25
26
26
27
27
28 <%def name="render_diffset(diffset, commit=None,
28 <%def name="render_diffset(diffset, commit=None,
29
29
30 # collapse all file diff entries when there are more than this amount of files in the diff
30 # collapse all file diff entries when there are more than this amount of files in the diff
31 collapse_when_files_over=20,
31 collapse_when_files_over=20,
32
32
33 # collapse lines in the diff when more than this amount of lines changed in the file diff
33 # collapse lines in the diff when more than this amount of lines changed in the file diff
34 lines_changed_limit=500,
34 lines_changed_limit=500,
35
35
36 # add a ruler at to the output
36 # add a ruler at to the output
37 ruler_at_chars=0,
37 ruler_at_chars=0,
38
38
39 # show inline comments
39 # show inline comments
40 use_comments=False,
40 use_comments=False,
41
41
42 # disable new comments
42 # disable new comments
43 disable_new_comments=False,
43 disable_new_comments=False,
44
44
45 # special file-comments that were deleted in previous versions
45 # special file-comments that were deleted in previous versions
46 # it's used for showing outdated comments for deleted files in a PR
46 # it's used for showing outdated comments for deleted files in a PR
47 deleted_files_comments=None,
47 deleted_files_comments=None,
48
48
49 # for cache purpose
49 # for cache purpose
50 inline_comments=None,
50 inline_comments=None,
51
51
52 )">
52 )">
53
54 <%
55 diffset_container_id = h.md5(diffset.target_ref)
56 collapse_all = len(diffset.files) > collapse_when_files_over
57 %>
58
53 %if use_comments:
59 %if use_comments:
54 <div id="cb-comments-inline-container-template" class="js-template">
60 <div id="cb-comments-inline-container-template" class="js-template">
55 ${inline_comments_container([], inline_comments)}
61 ${inline_comments_container([], inline_comments)}
56 </div>
62 </div>
57 <div class="js-template" id="cb-comment-inline-form-template">
63 <div class="js-template" id="cb-comment-inline-form-template">
58 <div class="comment-inline-form ac">
64 <div class="comment-inline-form ac">
59
65
60 %if c.rhodecode_user.username != h.DEFAULT_USER:
66 %if c.rhodecode_user.username != h.DEFAULT_USER:
61 ## render template for inline comments
67 ## render template for inline comments
62 ${commentblock.comment_form(form_type='inline')}
68 ${commentblock.comment_form(form_type='inline')}
63 %else:
69 %else:
64 ${h.form('', class_='inline-form comment-form-login', method='get')}
70 ${h.form('', class_='inline-form comment-form-login', method='get')}
65 <div class="pull-left">
71 <div class="pull-left">
66 <div class="comment-help pull-right">
72 <div class="comment-help pull-right">
67 ${_('You need to be logged in to leave comments.')} <a href="${h.route_path('login', _query={'came_from': h.current_route_path(request)})}">${_('Login now')}</a>
73 ${_('You need to be logged in to leave comments.')} <a href="${h.route_path('login', _query={'came_from': h.current_route_path(request)})}">${_('Login now')}</a>
68 </div>
74 </div>
69 </div>
75 </div>
70 <div class="comment-button pull-right">
76 <div class="comment-button pull-right">
71 <button type="button" class="cb-comment-cancel" onclick="return Rhodecode.comments.cancelComment(this);">
77 <button type="button" class="cb-comment-cancel" onclick="return Rhodecode.comments.cancelComment(this);">
72 ${_('Cancel')}
78 ${_('Cancel')}
73 </button>
79 </button>
74 </div>
80 </div>
75 <div class="clearfix"></div>
81 <div class="clearfix"></div>
76 ${h.end_form()}
82 ${h.end_form()}
77 %endif
83 %endif
78 </div>
84 </div>
79 </div>
85 </div>
80
86
81 %endif
87 %endif
82 <%
83 collapse_all = len(diffset.files) > collapse_when_files_over
84 %>
85
88
86 %if c.user_session_attrs["diffmode"] == 'sideside':
89 %if c.user_session_attrs["diffmode"] == 'sideside':
87 <style>
90 <style>
88 .wrapper {
91 .wrapper {
89 max-width: 1600px !important;
92 max-width: 1600px !important;
90 }
93 }
91 </style>
94 </style>
92 %endif
95 %endif
93
96
94 %if ruler_at_chars:
97 %if ruler_at_chars:
95 <style>
98 <style>
96 .diff table.cb .cb-content:after {
99 .diff table.cb .cb-content:after {
97 content: "";
100 content: "";
98 border-left: 1px solid blue;
101 border-left: 1px solid blue;
99 position: absolute;
102 position: absolute;
100 top: 0;
103 top: 0;
101 height: 18px;
104 height: 18px;
102 opacity: .2;
105 opacity: .2;
103 z-index: 10;
106 z-index: 10;
104 //## +5 to account for diff action (+/-)
107 //## +5 to account for diff action (+/-)
105 left: ${ruler_at_chars + 5}ch;
108 left: ${ruler_at_chars + 5}ch;
106 </style>
109 </style>
107 %endif
110 %endif
108
111
109 <div class="diffset ${disable_new_comments and 'diffset-comments-disabled'}">
112 <div class="diffset ${disable_new_comments and 'diffset-comments-disabled'}">
110 <div class="diffset-heading ${diffset.limited_diff and 'diffset-heading-warning' or ''}">
113
111 %if commit:
114 <div style="height: 20px; line-height: 20px">
112 <div class="pull-right">
115 ## expand/collapse action
113 <a class="btn tooltip" title="${h.tooltip(_('Browse Files at revision {}').format(commit.raw_id))}" href="${h.route_path('repo_files',repo_name=diffset.repo_name, commit_id=commit.raw_id, f_path='')}">
116 <div class="pull-left">
114 ${_('Browse Files')}
117 <a class="${'collapsed' if collapse_all else ''}" href="#expand-files" onclick="toggleExpand(this, '${diffset_container_id}'); return false">
115 </a>
118 % if collapse_all:
119 <i class="icon-plus-squared-alt icon-no-margin"></i>${_('Expand all files')}
120 % else:
121 <i class="icon-minus-squared-alt icon-no-margin"></i>${_('Collapse all files')}
122 % endif
123 </a>
124
125 </div>
126
127 ## todos
128 <div class="pull-right">
129 <div class="comments-number" style="padding-left: 10px">
130 % if hasattr(c, 'unresolved_comments') and hasattr(c, 'resolved_comments'):
131 <i class="icon-flag-filled" style="color: #949494">TODOs:</i>
132 % if c.unresolved_comments:
133 <a href="#show-todos" onclick="$('#todo-box').toggle(); return false">
134 ${_('{} unresolved').format(len(c.unresolved_comments))}
135 </a>
136 % else:
137 ${_('0 unresolved')}
138 % endif
139
140 ${_('{} Resolved').format(len(c.unresolved_comments))}
141 % endif
116 </div>
142 </div>
117 %endif
143 </div>
118 <h2 class="clearinner">
119 ## invidual commit
120 % if commit:
121 <a class="tooltip revision" title="${h.tooltip(commit.message)}" href="${h.route_path('repo_commit',repo_name=diffset.repo_name,commit_id=commit.raw_id)}">${('r%s:%s' % (commit.idx,h.short_id(commit.raw_id)))}</a> -
122 ${h.age_component(commit.date)}
123 % if diffset.limited_diff:
124 - ${_('The requested changes are too big and content was truncated.')}
125 ${_ungettext('%(num)s file changed.', '%(num)s files changed.', diffset.changed_files) % {'num': diffset.changed_files}}
126 <a href="${h.current_route_path(request, fulldiff=1)}" onclick="return confirm('${_("Showing a big diff might take some time and resources, continue?")}')">${_('Show full diff')}</a>
127 % elif hasattr(c, 'commit_ranges') and len(c.commit_ranges) > 1:
128 ## compare diff, has no file-selector and we want to show stats anyway
129 ${_ungettext('{num} file changed: {linesadd} inserted, ''{linesdel} deleted',
130 '{num} files changed: {linesadd} inserted, {linesdel} deleted', diffset.changed_files) \
131 .format(num=diffset.changed_files, linesadd=diffset.lines_added, linesdel=diffset.lines_deleted)}
132 % endif
133 % else:
134 ## pull requests/compare
135 ${_('File Changes')}
136 % endif
137
144
138 </h2>
145 ## comments
146 <div class="pull-right">
147 <div class="comments-number" style="padding-left: 10px">
148 % if hasattr(c, 'comments') and hasattr(c, 'inline_cnt'):
149 <i class="icon-comment" style="color: #949494">COMMENTS:</i>
150 % if c.comments:
151 <a href="#comments">${_ungettext("{} General", "{} General", len(c.comments)).format(len(c.comments))}</a>,
152 % else:
153 ${_('0 General')}
154 % endif
155
156 % if c.inline_cnt:
157 <a href="#" onclick="return Rhodecode.comments.nextComment();"
158 id="inline-comments-counter">${_ungettext("{} Inline", "{} Inline", c.inline_cnt).format(c.inline_cnt)}
159 </a>
160 % else:
161 ${_('0 Inline')}
162 % endif
163 % endif
164 </div>
165 </div>
166
139 </div>
167 </div>
140
168
169 % if diffset.limited_diff:
170 <div class="diffset-heading ${(diffset.limited_diff and 'diffset-heading-warning' or '')}">
171 <h2 class="clearinner">
172 ${_('The requested changes are too big and content was truncated.')}
173 <a href="${h.current_route_path(request, fulldiff=1)}" onclick="return confirm('${_("Showing a big diff might take some time and resources, continue?")}')">${_('Show full diff')}</a>
174 </h2>
175 </div>
176 ## commit range header for each individual diff
177 % elif commit and hasattr(c, 'commit_ranges') and len(c.commit_ranges) > 1:
178 <div class="diffset-heading ${(diffset.limited_diff and 'diffset-heading-warning' or '')}">
179 <div class="clearinner">
180 <a class="tooltip revision" title="${h.tooltip(commit.message)}" href="${h.route_path('repo_commit',repo_name=diffset.repo_name,commit_id=commit.raw_id)}">${('r%s:%s' % (commit.idx,h.short_id(commit.raw_id)))}</a>
181 </div>
182 </div>
183 % endif
184
185 <div id="todo-box">
186 % if hasattr(c, 'unresolved_comments') and c.unresolved_comments:
187 % for co in c.unresolved_comments:
188 <a class="permalink" href="#comment-${co.comment_id}"
189 onclick="Rhodecode.comments.scrollToComment($('#comment-${co.comment_id}'))">
190 <i class="icon-flag-filled-red"></i>
191 ${co.comment_id}</a>${('' if loop.last else ',')}
192 % endfor
193 % endif
194 </div>
141 %if diffset.has_hidden_changes:
195 %if diffset.has_hidden_changes:
142 <p class="empty_data">${_('Some changes may be hidden')}</p>
196 <p class="empty_data">${_('Some changes may be hidden')}</p>
143 %elif not diffset.files:
197 %elif not diffset.files:
144 <p class="empty_data">${_('No files')}</p>
198 <p class="empty_data">${_('No files')}</p>
145 %endif
199 %endif
146
200
147 <div class="filediffs">
201 <div class="filediffs">
148
202
149 ## initial value could be marked as False later on
203 ## initial value could be marked as False later on
150 <% over_lines_changed_limit = False %>
204 <% over_lines_changed_limit = False %>
151 %for i, filediff in enumerate(diffset.files):
205 %for i, filediff in enumerate(diffset.files):
152
206
153 <%
207 <%
154 lines_changed = filediff.patch['stats']['added'] + filediff.patch['stats']['deleted']
208 lines_changed = filediff.patch['stats']['added'] + filediff.patch['stats']['deleted']
155 over_lines_changed_limit = lines_changed > lines_changed_limit
209 over_lines_changed_limit = lines_changed > lines_changed_limit
156 %>
210 %>
157 ## anchor with support of sticky header
211 ## anchor with support of sticky header
158 <div class="anchor" id="a_${h.FID(filediff.raw_id, filediff.patch['filename'])}"></div>
212 <div class="anchor" id="a_${h.FID(filediff.raw_id, filediff.patch['filename'])}"></div>
159
213
160 <input ${(collapse_all and 'checked' or '')} class="filediff-collapse-state" id="filediff-collapse-${id(filediff)}" type="checkbox" onchange="updateSticky();">
214 <input ${(collapse_all and 'checked' or '')} class="filediff-collapse-state collapse-${diffset_container_id}" id="filediff-collapse-${id(filediff)}" type="checkbox" onchange="updateSticky();">
161 <div
215 <div
162 class="filediff"
216 class="filediff"
163 data-f-path="${filediff.patch['filename']}"
217 data-f-path="${filediff.patch['filename']}"
164 data-anchor-id="${h.FID(filediff.raw_id, filediff.patch['filename'])}"
218 data-anchor-id="${h.FID(filediff.raw_id, filediff.patch['filename'])}"
165 >
219 >
166 <label for="filediff-collapse-${id(filediff)}" class="filediff-heading">
220 <label for="filediff-collapse-${id(filediff)}" class="filediff-heading">
167 <div class="filediff-collapse-indicator"></div>
221 <div class="filediff-collapse-indicator icon-"></div>
168 ${diff_ops(filediff)}
222 ${diff_ops(filediff)}
169 </label>
223 </label>
170
224
171 ${diff_menu(filediff, use_comments=use_comments)}
225 ${diff_menu(filediff, use_comments=use_comments)}
172 <table data-f-path="${filediff.patch['filename']}" data-anchor-id="${h.FID(filediff.raw_id, filediff.patch['filename'])}" class="code-visible-block cb cb-diff-${c.user_session_attrs["diffmode"]} code-highlight ${(over_lines_changed_limit and 'cb-collapsed' or '')}">
226 <table data-f-path="${filediff.patch['filename']}" data-anchor-id="${h.FID(filediff.raw_id, filediff.patch['filename'])}" class="code-visible-block cb cb-diff-${c.user_session_attrs["diffmode"]} code-highlight ${(over_lines_changed_limit and 'cb-collapsed' or '')}">
173
227
174 ## new/deleted/empty content case
228 ## new/deleted/empty content case
175 % if not filediff.hunks:
229 % if not filediff.hunks:
176 ## Comment container, on "fakes" hunk that contains all data to render comments
230 ## Comment container, on "fakes" hunk that contains all data to render comments
177 ${render_hunk_lines(filediff, c.user_session_attrs["diffmode"], filediff.hunk_ops, use_comments=use_comments, inline_comments=inline_comments)}
231 ${render_hunk_lines(filediff, c.user_session_attrs["diffmode"], filediff.hunk_ops, use_comments=use_comments, inline_comments=inline_comments)}
178 % endif
232 % endif
179
233
180 %if filediff.limited_diff:
234 %if filediff.limited_diff:
181 <tr class="cb-warning cb-collapser">
235 <tr class="cb-warning cb-collapser">
182 <td class="cb-text" ${(c.user_session_attrs["diffmode"] == 'unified' and 'colspan=4' or 'colspan=6')}>
236 <td class="cb-text" ${(c.user_session_attrs["diffmode"] == 'unified' and 'colspan=4' or 'colspan=6')}>
183 ${_('The requested commit or file is too big and content was truncated.')} <a href="${h.current_route_path(request, fulldiff=1)}" onclick="return confirm('${_("Showing a big diff might take some time and resources, continue?")}')">${_('Show full diff')}</a>
237 ${_('The requested commit or file is too big and content was truncated.')} <a href="${h.current_route_path(request, fulldiff=1)}" onclick="return confirm('${_("Showing a big diff might take some time and resources, continue?")}')">${_('Show full diff')}</a>
184 </td>
238 </td>
185 </tr>
239 </tr>
186 %else:
240 %else:
187 %if over_lines_changed_limit:
241 %if over_lines_changed_limit:
188 <tr class="cb-warning cb-collapser">
242 <tr class="cb-warning cb-collapser">
189 <td class="cb-text" ${(c.user_session_attrs["diffmode"] == 'unified' and 'colspan=4' or 'colspan=6')}>
243 <td class="cb-text" ${(c.user_session_attrs["diffmode"] == 'unified' and 'colspan=4' or 'colspan=6')}>
190 ${_('This diff has been collapsed as it changes many lines, (%i lines changed)' % lines_changed)}
244 ${_('This diff has been collapsed as it changes many lines, (%i lines changed)' % lines_changed)}
191 <a href="#" class="cb-expand"
245 <a href="#" class="cb-expand"
192 onclick="$(this).closest('table').removeClass('cb-collapsed'); updateSticky(); return false;">${_('Show them')}
246 onclick="$(this).closest('table').removeClass('cb-collapsed'); updateSticky(); return false;">${_('Show them')}
193 </a>
247 </a>
194 <a href="#" class="cb-collapse"
248 <a href="#" class="cb-collapse"
195 onclick="$(this).closest('table').addClass('cb-collapsed'); updateSticky(); return false;">${_('Hide them')}
249 onclick="$(this).closest('table').addClass('cb-collapsed'); updateSticky(); return false;">${_('Hide them')}
196 </a>
250 </a>
197 </td>
251 </td>
198 </tr>
252 </tr>
199 %endif
253 %endif
200 %endif
254 %endif
201
255
202 % for hunk in filediff.hunks:
256 % for hunk in filediff.hunks:
203 <tr class="cb-hunk">
257 <tr class="cb-hunk">
204 <td ${(c.user_session_attrs["diffmode"] == 'unified' and 'colspan=3' or '')}>
258 <td ${(c.user_session_attrs["diffmode"] == 'unified' and 'colspan=3' or '')}>
205 ## TODO: dan: add ajax loading of more context here
259 ## TODO: dan: add ajax loading of more context here
206 ## <a href="#">
260 ## <a href="#">
207 <i class="icon-more"></i>
261 <i class="icon-more"></i>
208 ## </a>
262 ## </a>
209 </td>
263 </td>
210 <td ${(c.user_session_attrs["diffmode"] == 'sideside' and 'colspan=5' or '')}>
264 <td ${(c.user_session_attrs["diffmode"] == 'sideside' and 'colspan=5' or '')}>
211 @@
265 @@
212 -${hunk.source_start},${hunk.source_length}
266 -${hunk.source_start},${hunk.source_length}
213 +${hunk.target_start},${hunk.target_length}
267 +${hunk.target_start},${hunk.target_length}
214 ${hunk.section_header}
268 ${hunk.section_header}
215 </td>
269 </td>
216 </tr>
270 </tr>
217 ${render_hunk_lines(filediff, c.user_session_attrs["diffmode"], hunk, use_comments=use_comments, inline_comments=inline_comments)}
271 ${render_hunk_lines(filediff, c.user_session_attrs["diffmode"], hunk, use_comments=use_comments, inline_comments=inline_comments)}
218 % endfor
272 % endfor
219
273
220 <% unmatched_comments = (inline_comments or {}).get(filediff.patch['filename'], {}) %>
274 <% unmatched_comments = (inline_comments or {}).get(filediff.patch['filename'], {}) %>
221
275
222 ## outdated comments that do not fit into currently displayed lines
276 ## outdated comments that do not fit into currently displayed lines
223 % for lineno, comments in unmatched_comments.items():
277 % for lineno, comments in unmatched_comments.items():
224
278
225 %if c.user_session_attrs["diffmode"] == 'unified':
279 %if c.user_session_attrs["diffmode"] == 'unified':
226 % if loop.index == 0:
280 % if loop.index == 0:
227 <tr class="cb-hunk">
281 <tr class="cb-hunk">
228 <td colspan="3"></td>
282 <td colspan="3"></td>
229 <td>
283 <td>
230 <div>
284 <div>
231 ${_('Unmatched inline comments below')}
285 ${_('Unmatched inline comments below')}
232 </div>
286 </div>
233 </td>
287 </td>
234 </tr>
288 </tr>
235 % endif
289 % endif
236 <tr class="cb-line">
290 <tr class="cb-line">
237 <td class="cb-data cb-context"></td>
291 <td class="cb-data cb-context"></td>
238 <td class="cb-lineno cb-context"></td>
292 <td class="cb-lineno cb-context"></td>
239 <td class="cb-lineno cb-context"></td>
293 <td class="cb-lineno cb-context"></td>
240 <td class="cb-content cb-context">
294 <td class="cb-content cb-context">
241 ${inline_comments_container(comments, inline_comments)}
295 ${inline_comments_container(comments, inline_comments)}
242 </td>
296 </td>
243 </tr>
297 </tr>
244 %elif c.user_session_attrs["diffmode"] == 'sideside':
298 %elif c.user_session_attrs["diffmode"] == 'sideside':
245 % if loop.index == 0:
299 % if loop.index == 0:
246 <tr class="cb-comment-info">
300 <tr class="cb-comment-info">
247 <td colspan="2"></td>
301 <td colspan="2"></td>
248 <td class="cb-line">
302 <td class="cb-line">
249 <div>
303 <div>
250 ${_('Unmatched inline comments below')}
304 ${_('Unmatched inline comments below')}
251 </div>
305 </div>
252 </td>
306 </td>
253 <td colspan="2"></td>
307 <td colspan="2"></td>
254 <td class="cb-line">
308 <td class="cb-line">
255 <div>
309 <div>
256 ${_('Unmatched comments below')}
310 ${_('Unmatched comments below')}
257 </div>
311 </div>
258 </td>
312 </td>
259 </tr>
313 </tr>
260 % endif
314 % endif
261 <tr class="cb-line">
315 <tr class="cb-line">
262 <td class="cb-data cb-context"></td>
316 <td class="cb-data cb-context"></td>
263 <td class="cb-lineno cb-context"></td>
317 <td class="cb-lineno cb-context"></td>
264 <td class="cb-content cb-context">
318 <td class="cb-content cb-context">
265 % if lineno.startswith('o'):
319 % if lineno.startswith('o'):
266 ${inline_comments_container(comments, inline_comments)}
320 ${inline_comments_container(comments, inline_comments)}
267 % endif
321 % endif
268 </td>
322 </td>
269
323
270 <td class="cb-data cb-context"></td>
324 <td class="cb-data cb-context"></td>
271 <td class="cb-lineno cb-context"></td>
325 <td class="cb-lineno cb-context"></td>
272 <td class="cb-content cb-context">
326 <td class="cb-content cb-context">
273 % if lineno.startswith('n'):
327 % if lineno.startswith('n'):
274 ${inline_comments_container(comments, inline_comments)}
328 ${inline_comments_container(comments, inline_comments)}
275 % endif
329 % endif
276 </td>
330 </td>
277 </tr>
331 </tr>
278 %endif
332 %endif
279
333
280 % endfor
334 % endfor
281
335
282 </table>
336 </table>
283 </div>
337 </div>
284 %endfor
338 %endfor
285
339
286 ## outdated comments that are made for a file that has been deleted
340 ## outdated comments that are made for a file that has been deleted
287 % for filename, comments_dict in (deleted_files_comments or {}).items():
341 % for filename, comments_dict in (deleted_files_comments or {}).items():
288 <%
342 <%
289 display_state = 'display: none'
343 display_state = 'display: none'
290 open_comments_in_file = [x for x in comments_dict['comments'] if x.outdated is False]
344 open_comments_in_file = [x for x in comments_dict['comments'] if x.outdated is False]
291 if open_comments_in_file:
345 if open_comments_in_file:
292 display_state = ''
346 display_state = ''
293 %>
347 %>
294 <div class="filediffs filediff-outdated" style="${display_state}">
348 <div class="filediffs filediff-outdated" style="${display_state}">
295 <input ${(collapse_all and 'checked' or '')} class="filediff-collapse-state" id="filediff-collapse-${id(filename)}" type="checkbox" onchange="updateSticky();">
349 <input ${(collapse_all and 'checked' or '')} class="filediff-collapse-state collapse-${diffset_container_id}" id="filediff-collapse-${id(filename)}" type="checkbox" onchange="updateSticky();">
296 <div class="filediff" data-f-path="${filename}" id="a_${h.FID(filediff.raw_id, filename)}">
350 <div class="filediff" data-f-path="${filename}" id="a_${h.FID(filediff.raw_id, filename)}">
297 <label for="filediff-collapse-${id(filename)}" class="filediff-heading">
351 <label for="filediff-collapse-${id(filename)}" class="filediff-heading">
298 <div class="filediff-collapse-indicator"></div>
352 <div class="filediff-collapse-indicator"></div>
353
299 <span class="pill">
354 <span class="pill">
300 ## file was deleted
355 ## file was deleted
301 <strong>${filename}</strong>
356 ${filename}
302 </span>
357 </span>
303 <span class="pill-group" style="float: left">
358 <span class="pill-group pull-left" >
304 ## file op, doesn't need translation
359 ## file op, doesn't need translation
305 <span class="pill" op="removed">removed in this version</span>
360 <span class="pill" op="removed">removed in this version</span>
306 </span>
361 </span>
307 <a class="pill filediff-anchor" href="#a_${h.FID(filediff.raw_id, filename)}"></a>
362 <a class="pill filediff-anchor" href="#a_${h.FID(filediff.raw_id, filename)}"></a>
308 <span class="pill-group" style="float: right">
363 <span class="pill-group pull-right">
309 <span class="pill" op="deleted">-${comments_dict['stats']}</span>
364 <span class="pill" op="deleted">-${comments_dict['stats']}</span>
310 </span>
365 </span>
311 </label>
366 </label>
312
367
313 <table class="cb cb-diff-${c.user_session_attrs["diffmode"]} code-highlight ${over_lines_changed_limit and 'cb-collapsed' or ''}">
368 <table class="cb cb-diff-${c.user_session_attrs["diffmode"]} code-highlight ${(over_lines_changed_limit and 'cb-collapsed' or '')}">
314 <tr>
369 <tr>
315 % if c.user_session_attrs["diffmode"] == 'unified':
370 % if c.user_session_attrs["diffmode"] == 'unified':
316 <td></td>
371 <td></td>
317 %endif
372 %endif
318
373
319 <td></td>
374 <td></td>
320 <td class="cb-text cb-${op_class(BIN_FILENODE)}" ${(c.user_session_attrs["diffmode"] == 'unified' and 'colspan=4' or 'colspan=5')}>
375 <td class="cb-text cb-${op_class(BIN_FILENODE)}" ${(c.user_session_attrs["diffmode"] == 'unified' and 'colspan=4' or 'colspan=5')}>
321 ${_('File was deleted in this version. There are still outdated/unresolved comments attached to it.')}
376 ${_('File was deleted in this version. There are still outdated/unresolved comments attached to it.')}
322 </td>
377 </td>
323 </tr>
378 </tr>
324 %if c.user_session_attrs["diffmode"] == 'unified':
379 %if c.user_session_attrs["diffmode"] == 'unified':
325 <tr class="cb-line">
380 <tr class="cb-line">
326 <td class="cb-data cb-context"></td>
381 <td class="cb-data cb-context"></td>
327 <td class="cb-lineno cb-context"></td>
382 <td class="cb-lineno cb-context"></td>
328 <td class="cb-lineno cb-context"></td>
383 <td class="cb-lineno cb-context"></td>
329 <td class="cb-content cb-context">
384 <td class="cb-content cb-context">
330 ${inline_comments_container(comments_dict['comments'], inline_comments)}
385 ${inline_comments_container(comments_dict['comments'], inline_comments)}
331 </td>
386 </td>
332 </tr>
387 </tr>
333 %elif c.user_session_attrs["diffmode"] == 'sideside':
388 %elif c.user_session_attrs["diffmode"] == 'sideside':
334 <tr class="cb-line">
389 <tr class="cb-line">
335 <td class="cb-data cb-context"></td>
390 <td class="cb-data cb-context"></td>
336 <td class="cb-lineno cb-context"></td>
391 <td class="cb-lineno cb-context"></td>
337 <td class="cb-content cb-context"></td>
392 <td class="cb-content cb-context"></td>
338
393
339 <td class="cb-data cb-context"></td>
394 <td class="cb-data cb-context"></td>
340 <td class="cb-lineno cb-context"></td>
395 <td class="cb-lineno cb-context"></td>
341 <td class="cb-content cb-context">
396 <td class="cb-content cb-context">
342 ${inline_comments_container(comments_dict['comments'], inline_comments)}
397 ${inline_comments_container(comments_dict['comments'], inline_comments)}
343 </td>
398 </td>
344 </tr>
399 </tr>
345 %endif
400 %endif
346 </table>
401 </table>
347 </div>
402 </div>
348 </div>
403 </div>
349 % endfor
404 % endfor
350
405
351 </div>
406 </div>
352 </div>
407 </div>
353 </%def>
408 </%def>
354
409
355 <%def name="diff_ops(filediff)">
410 <%def name="diff_ops(filediff)">
356 <%
411 <%
357 from rhodecode.lib.diffs import NEW_FILENODE, DEL_FILENODE, \
412 from rhodecode.lib.diffs import NEW_FILENODE, DEL_FILENODE, \
358 MOD_FILENODE, RENAMED_FILENODE, CHMOD_FILENODE, BIN_FILENODE, COPIED_FILENODE
413 MOD_FILENODE, RENAMED_FILENODE, CHMOD_FILENODE, BIN_FILENODE, COPIED_FILENODE
359 %>
414 %>
360 <span class="pill">
415 <span class="pill">
416 <i class="icon-file-text"></i>
361 %if filediff.source_file_path and filediff.target_file_path:
417 %if filediff.source_file_path and filediff.target_file_path:
362 %if filediff.source_file_path != filediff.target_file_path:
418 %if filediff.source_file_path != filediff.target_file_path:
363 ## file was renamed, or copied
419 ## file was renamed, or copied
364 %if RENAMED_FILENODE in filediff.patch['stats']['ops']:
420 %if RENAMED_FILENODE in filediff.patch['stats']['ops']:
365 <strong>${filediff.target_file_path}</strong><del>${filediff.source_file_path}</del>
421 ${filediff.target_file_path}<del>${filediff.source_file_path}</del>
366 <% final_path = filediff.target_file_path %>
422 <% final_path = filediff.target_file_path %>
367 %elif COPIED_FILENODE in filediff.patch['stats']['ops']:
423 %elif COPIED_FILENODE in filediff.patch['stats']['ops']:
368 <strong>${filediff.target_file_path}</strong>${filediff.source_file_path}
424 ${filediff.target_file_path}${filediff.source_file_path}
369 <% final_path = filediff.target_file_path %>
425 <% final_path = filediff.target_file_path %>
370 %endif
426 %endif
371 %else:
427 %else:
372 ## file was modified
428 ## file was modified
373 <strong>${filediff.source_file_path}</strong>
429 ${filediff.source_file_path}
374 <% final_path = filediff.source_file_path %>
430 <% final_path = filediff.source_file_path %>
375 %endif
431 %endif
376 %else:
432 %else:
377 %if filediff.source_file_path:
433 %if filediff.source_file_path:
378 ## file was deleted
434 ## file was deleted
379 <strong>${filediff.source_file_path}</strong>
435 ${filediff.source_file_path}
380 <% final_path = filediff.source_file_path %>
436 <% final_path = filediff.source_file_path %>
381 %else:
437 %else:
382 ## file was added
438 ## file was added
383 <strong>${filediff.target_file_path}</strong>
439 ${filediff.target_file_path}
384 <% final_path = filediff.target_file_path %>
440 <% final_path = filediff.target_file_path %>
385 %endif
441 %endif
386 %endif
442 %endif
387 <i style="color: #aaa" class="tooltip icon-clipboard clipboard-action" data-clipboard-text="${final_path}" title="${_('Copy the full path')}" onclick="return false;"></i>
443 <i style="color: #aaa" class="tooltip icon-clipboard clipboard-action" data-clipboard-text="${final_path}" title="${_('Copy the full path')}" onclick="return false;"></i>
388 </span>
444 </span>
389 ## anchor link
445 ## anchor link
390 <a class="pill filediff-anchor" href="#a_${h.FID(filediff.raw_id, filediff.patch['filename'])}"></a>
446 <a class="pill filediff-anchor" href="#a_${h.FID(filediff.raw_id, filediff.patch['filename'])}"></a>
391
447
392 <span class="pill-group" style="float: right">
448 <span class="pill-group pull-right">
393
449
394 ## ops pills
450 ## ops pills
395 %if filediff.limited_diff:
451 %if filediff.limited_diff:
396 <span class="pill tooltip" op="limited" title="The stats for this diff are not complete">limited diff</span>
452 <span class="pill tooltip" op="limited" title="The stats for this diff are not complete">limited diff</span>
397 %endif
453 %endif
398
454
399 %if NEW_FILENODE in filediff.patch['stats']['ops']:
455 %if NEW_FILENODE in filediff.patch['stats']['ops']:
400 <span class="pill" op="created">created</span>
456 <span class="pill" op="created">created</span>
401 %if filediff['target_mode'].startswith('120'):
457 %if filediff['target_mode'].startswith('120'):
402 <span class="pill" op="symlink">symlink</span>
458 <span class="pill" op="symlink">symlink</span>
403 %else:
459 %else:
404 <span class="pill" op="mode">${nice_mode(filediff['target_mode'])}</span>
460 <span class="pill" op="mode">${nice_mode(filediff['target_mode'])}</span>
405 %endif
461 %endif
406 %endif
462 %endif
407
463
408 %if RENAMED_FILENODE in filediff.patch['stats']['ops']:
464 %if RENAMED_FILENODE in filediff.patch['stats']['ops']:
409 <span class="pill" op="renamed">renamed</span>
465 <span class="pill" op="renamed">renamed</span>
410 %endif
466 %endif
411
467
412 %if COPIED_FILENODE in filediff.patch['stats']['ops']:
468 %if COPIED_FILENODE in filediff.patch['stats']['ops']:
413 <span class="pill" op="copied">copied</span>
469 <span class="pill" op="copied">copied</span>
414 %endif
470 %endif
415
471
416 %if DEL_FILENODE in filediff.patch['stats']['ops']:
472 %if DEL_FILENODE in filediff.patch['stats']['ops']:
417 <span class="pill" op="removed">removed</span>
473 <span class="pill" op="removed">removed</span>
418 %endif
474 %endif
419
475
420 %if CHMOD_FILENODE in filediff.patch['stats']['ops']:
476 %if CHMOD_FILENODE in filediff.patch['stats']['ops']:
421 <span class="pill" op="mode">
477 <span class="pill" op="mode">
422 ${nice_mode(filediff['source_mode'])}${nice_mode(filediff['target_mode'])}
478 ${nice_mode(filediff['source_mode'])}${nice_mode(filediff['target_mode'])}
423 </span>
479 </span>
424 %endif
480 %endif
425
481
426 %if BIN_FILENODE in filediff.patch['stats']['ops']:
482 %if BIN_FILENODE in filediff.patch['stats']['ops']:
427 <span class="pill" op="binary">binary</span>
483 <span class="pill" op="binary">binary</span>
428 %if MOD_FILENODE in filediff.patch['stats']['ops']:
484 %if MOD_FILENODE in filediff.patch['stats']['ops']:
429 <span class="pill" op="modified">modified</span>
485 <span class="pill" op="modified">modified</span>
430 %endif
486 %endif
431 %endif
487 %endif
432
488
433 <span class="pill" op="added">${('+' if filediff.patch['stats']['added'] else '')}${filediff.patch['stats']['added']}</span>
489 <span class="pill" op="added">${('+' if filediff.patch['stats']['added'] else '')}${filediff.patch['stats']['added']}</span>
434 <span class="pill" op="deleted">${((h.safe_int(filediff.patch['stats']['deleted']) or 0) * -1)}</span>
490 <span class="pill" op="deleted">${((h.safe_int(filediff.patch['stats']['deleted']) or 0) * -1)}</span>
435
491
436 </span>
492 </span>
437
493
438 </%def>
494 </%def>
439
495
440 <%def name="nice_mode(filemode)">
496 <%def name="nice_mode(filemode)">
441 ${(filemode.startswith('100') and filemode[3:] or filemode)}
497 ${(filemode.startswith('100') and filemode[3:] or filemode)}
442 </%def>
498 </%def>
443
499
444 <%def name="diff_menu(filediff, use_comments=False)">
500 <%def name="diff_menu(filediff, use_comments=False)">
445 <div class="filediff-menu">
501 <div class="filediff-menu">
446
502
447 %if filediff.diffset.source_ref:
503 %if filediff.diffset.source_ref:
448
504
449 ## FILE BEFORE CHANGES
505 ## FILE BEFORE CHANGES
450 %if filediff.operation in ['D', 'M']:
506 %if filediff.operation in ['D', 'M']:
451 <a
507 <a
452 class="tooltip"
508 class="tooltip"
453 href="${h.route_path('repo_files',repo_name=filediff.diffset.target_repo_name,commit_id=filediff.diffset.source_ref,f_path=filediff.source_file_path)}"
509 href="${h.route_path('repo_files',repo_name=filediff.diffset.target_repo_name,commit_id=filediff.diffset.source_ref,f_path=filediff.source_file_path)}"
454 title="${h.tooltip(_('Show file at commit: %(commit_id)s') % {'commit_id': filediff.diffset.source_ref[:12]})}"
510 title="${h.tooltip(_('Show file at commit: %(commit_id)s') % {'commit_id': filediff.diffset.source_ref[:12]})}"
455 >
511 >
456 ${_('Show file before')}
512 ${_('Show file before')}
457 </a> |
513 </a> |
458 %else:
514 %else:
459 <span
515 <span
460 class="tooltip"
516 class="tooltip"
461 title="${h.tooltip(_('File not present at commit: %(commit_id)s') % {'commit_id': filediff.diffset.source_ref[:12]})}"
517 title="${h.tooltip(_('File not present at commit: %(commit_id)s') % {'commit_id': filediff.diffset.source_ref[:12]})}"
462 >
518 >
463 ${_('Show file before')}
519 ${_('Show file before')}
464 </span> |
520 </span> |
465 %endif
521 %endif
466
522
467 ## FILE AFTER CHANGES
523 ## FILE AFTER CHANGES
468 %if filediff.operation in ['A', 'M']:
524 %if filediff.operation in ['A', 'M']:
469 <a
525 <a
470 class="tooltip"
526 class="tooltip"
471 href="${h.route_path('repo_files',repo_name=filediff.diffset.source_repo_name,commit_id=filediff.diffset.target_ref,f_path=filediff.target_file_path)}"
527 href="${h.route_path('repo_files',repo_name=filediff.diffset.source_repo_name,commit_id=filediff.diffset.target_ref,f_path=filediff.target_file_path)}"
472 title="${h.tooltip(_('Show file at commit: %(commit_id)s') % {'commit_id': filediff.diffset.target_ref[:12]})}"
528 title="${h.tooltip(_('Show file at commit: %(commit_id)s') % {'commit_id': filediff.diffset.target_ref[:12]})}"
473 >
529 >
474 ${_('Show file after')}
530 ${_('Show file after')}
475 </a>
531 </a>
476 %else:
532 %else:
477 <span
533 <span
478 class="tooltip"
534 class="tooltip"
479 title="${h.tooltip(_('File not present at commit: %(commit_id)s') % {'commit_id': filediff.diffset.target_ref[:12]})}"
535 title="${h.tooltip(_('File not present at commit: %(commit_id)s') % {'commit_id': filediff.diffset.target_ref[:12]})}"
480 >
536 >
481 ${_('Show file after')}
537 ${_('Show file after')}
482 </span>
538 </span>
483 %endif
539 %endif
484
540
485 % if use_comments:
541 % if use_comments:
486 |
542 |
487 <a href="#" onclick="return Rhodecode.comments.toggleComments(this);">
543 <a href="#" onclick="return Rhodecode.comments.toggleComments(this);">
488 <span class="show-comment-button">${_('Show comments')}</span><span class="hide-comment-button">${_('Hide comments')}</span>
544 <span class="show-comment-button">${_('Show comments')}</span><span class="hide-comment-button">${_('Hide comments')}</span>
489 </a>
545 </a>
490 % endif
546 % endif
491
547
492 %endif
548 %endif
493
549
494 </div>
550 </div>
495 </%def>
551 </%def>
496
552
497
553
498 <%def name="inline_comments_container(comments, inline_comments)">
554 <%def name="inline_comments_container(comments, inline_comments)">
499 <div class="inline-comments">
555 <div class="inline-comments">
500 %for comment in comments:
556 %for comment in comments:
501 ${commentblock.comment_block(comment, inline=True)}
557 ${commentblock.comment_block(comment, inline=True)}
502 %endfor
558 %endfor
503 % if comments and comments[-1].outdated:
559 % if comments and comments[-1].outdated:
504 <span class="btn btn-secondary cb-comment-add-button comment-outdated}"
560 <span class="btn btn-secondary cb-comment-add-button comment-outdated}" style="display: none;}">
505 style="display: none;}">
506 ${_('Add another comment')}
561 ${_('Add another comment')}
507 </span>
562 </span>
508 % else:
563 % else:
509 <span onclick="return Rhodecode.comments.createComment(this)"
564 <span onclick="return Rhodecode.comments.createComment(this)" class="btn btn-secondary cb-comment-add-button">
510 class="btn btn-secondary cb-comment-add-button">
511 ${_('Add another comment')}
565 ${_('Add another comment')}
512 </span>
566 </span>
513 % endif
567 % endif
514
568
515 </div>
569 </div>
516 </%def>
570 </%def>
517
571
518 <%!
572 <%!
519 def get_comments_for(diff_type, comments, filename, line_version, line_number):
573 def get_comments_for(diff_type, comments, filename, line_version, line_number):
520 if hasattr(filename, 'unicode_path'):
574 if hasattr(filename, 'unicode_path'):
521 filename = filename.unicode_path
575 filename = filename.unicode_path
522
576
523 if not isinstance(filename, (unicode, str)):
577 if not isinstance(filename, (unicode, str)):
524 return None
578 return None
525
579
526 line_key = '{}{}'.format(line_version, line_number) ## e.g o37, n12
580 line_key = '{}{}'.format(line_version, line_number) ## e.g o37, n12
527
581
528 if comments and filename in comments:
582 if comments and filename in comments:
529 file_comments = comments[filename]
583 file_comments = comments[filename]
530 if line_key in file_comments:
584 if line_key in file_comments:
531 data = file_comments.pop(line_key)
585 data = file_comments.pop(line_key)
532 return data
586 return data
533 %>
587 %>
534
588
535 <%def name="render_hunk_lines_sideside(filediff, hunk, use_comments=False, inline_comments=None)">
589 <%def name="render_hunk_lines_sideside(filediff, hunk, use_comments=False, inline_comments=None)">
536 %for i, line in enumerate(hunk.sideside):
590 %for i, line in enumerate(hunk.sideside):
537 <%
591 <%
538 old_line_anchor, new_line_anchor = None, None
592 old_line_anchor, new_line_anchor = None, None
539
593
540 if line.original.lineno:
594 if line.original.lineno:
541 old_line_anchor = diff_line_anchor(filediff.raw_id, hunk.source_file_path, line.original.lineno, 'o')
595 old_line_anchor = diff_line_anchor(filediff.raw_id, hunk.source_file_path, line.original.lineno, 'o')
542 if line.modified.lineno:
596 if line.modified.lineno:
543 new_line_anchor = diff_line_anchor(filediff.raw_id, hunk.target_file_path, line.modified.lineno, 'n')
597 new_line_anchor = diff_line_anchor(filediff.raw_id, hunk.target_file_path, line.modified.lineno, 'n')
544 %>
598 %>
545
599
546 <tr class="cb-line">
600 <tr class="cb-line">
547 <td class="cb-data ${action_class(line.original.action)}"
601 <td class="cb-data ${action_class(line.original.action)}"
548 data-line-no="${line.original.lineno}"
602 data-line-no="${line.original.lineno}"
549 >
603 >
550 <div>
604 <div>
551
605
552 <% line_old_comments = None %>
606 <% line_old_comments = None %>
553 %if line.original.get_comment_args:
607 %if line.original.get_comment_args:
554 <% line_old_comments = get_comments_for('side-by-side', inline_comments, *line.original.get_comment_args) %>
608 <% line_old_comments = get_comments_for('side-by-side', inline_comments, *line.original.get_comment_args) %>
555 %endif
609 %endif
556 %if line_old_comments:
610 %if line_old_comments:
557 <% has_outdated = any([x.outdated for x in line_old_comments]) %>
611 <% has_outdated = any([x.outdated for x in line_old_comments]) %>
558 % if has_outdated:
612 % if has_outdated:
559 <i title="${_('comments including outdated')}:${len(line_old_comments)}" class="icon-comment-toggle" onclick="return Rhodecode.comments.toggleLineComments(this)"></i>
613 <i title="${_('comments including outdated')}:${len(line_old_comments)}" class="icon-comment-toggle" onclick="return Rhodecode.comments.toggleLineComments(this)"></i>
560 % else:
614 % else:
561 <i title="${_('comments')}: ${len(line_old_comments)}" class="icon-comment" onclick="return Rhodecode.comments.toggleLineComments(this)"></i>
615 <i title="${_('comments')}: ${len(line_old_comments)}" class="icon-comment" onclick="return Rhodecode.comments.toggleLineComments(this)"></i>
562 % endif
616 % endif
563 %endif
617 %endif
564 </div>
618 </div>
565 </td>
619 </td>
566 <td class="cb-lineno ${action_class(line.original.action)}"
620 <td class="cb-lineno ${action_class(line.original.action)}"
567 data-line-no="${line.original.lineno}"
621 data-line-no="${line.original.lineno}"
568 %if old_line_anchor:
622 %if old_line_anchor:
569 id="${old_line_anchor}"
623 id="${old_line_anchor}"
570 %endif
624 %endif
571 >
625 >
572 %if line.original.lineno:
626 %if line.original.lineno:
573 <a name="${old_line_anchor}" href="#${old_line_anchor}">${line.original.lineno}</a>
627 <a name="${old_line_anchor}" href="#${old_line_anchor}">${line.original.lineno}</a>
574 %endif
628 %endif
575 </td>
629 </td>
576 <td class="cb-content ${action_class(line.original.action)}"
630 <td class="cb-content ${action_class(line.original.action)}"
577 data-line-no="o${line.original.lineno}"
631 data-line-no="o${line.original.lineno}"
578 >
632 >
579 %if use_comments and line.original.lineno:
633 %if use_comments and line.original.lineno:
580 ${render_add_comment_button()}
634 ${render_add_comment_button()}
581 %endif
635 %endif
582 <span class="cb-code"><span class="cb-action ${action_class(line.original.action)}"></span>${line.original.content or '' | n}</span>
636 <span class="cb-code"><span class="cb-action ${action_class(line.original.action)}"></span>${line.original.content or '' | n}</span>
583
637
584 %if use_comments and line.original.lineno and line_old_comments:
638 %if use_comments and line.original.lineno and line_old_comments:
585 ${inline_comments_container(line_old_comments, inline_comments)}
639 ${inline_comments_container(line_old_comments, inline_comments)}
586 %endif
640 %endif
587
641
588 </td>
642 </td>
589 <td class="cb-data ${action_class(line.modified.action)}"
643 <td class="cb-data ${action_class(line.modified.action)}"
590 data-line-no="${line.modified.lineno}"
644 data-line-no="${line.modified.lineno}"
591 >
645 >
592 <div>
646 <div>
593
647
594 %if line.modified.get_comment_args:
648 %if line.modified.get_comment_args:
595 <% line_new_comments = get_comments_for('side-by-side', inline_comments, *line.modified.get_comment_args) %>
649 <% line_new_comments = get_comments_for('side-by-side', inline_comments, *line.modified.get_comment_args) %>
596 %else:
650 %else:
597 <% line_new_comments = None%>
651 <% line_new_comments = None%>
598 %endif
652 %endif
599 %if line_new_comments:
653 %if line_new_comments:
600 <% has_outdated = any([x.outdated for x in line_new_comments]) %>
654 <% has_outdated = any([x.outdated for x in line_new_comments]) %>
601 % if has_outdated:
655 % if has_outdated:
602 <i title="${_('comments including outdated')}:${len(line_new_comments)}" class="icon-comment-toggle" onclick="return Rhodecode.comments.toggleLineComments(this)"></i>
656 <i title="${_('comments including outdated')}:${len(line_new_comments)}" class="icon-comment-toggle" onclick="return Rhodecode.comments.toggleLineComments(this)"></i>
603 % else:
657 % else:
604 <i title="${_('comments')}: ${len(line_new_comments)}" class="icon-comment" onclick="return Rhodecode.comments.toggleLineComments(this)"></i>
658 <i title="${_('comments')}: ${len(line_new_comments)}" class="icon-comment" onclick="return Rhodecode.comments.toggleLineComments(this)"></i>
605 % endif
659 % endif
606 %endif
660 %endif
607 </div>
661 </div>
608 </td>
662 </td>
609 <td class="cb-lineno ${action_class(line.modified.action)}"
663 <td class="cb-lineno ${action_class(line.modified.action)}"
610 data-line-no="${line.modified.lineno}"
664 data-line-no="${line.modified.lineno}"
611 %if new_line_anchor:
665 %if new_line_anchor:
612 id="${new_line_anchor}"
666 id="${new_line_anchor}"
613 %endif
667 %endif
614 >
668 >
615 %if line.modified.lineno:
669 %if line.modified.lineno:
616 <a name="${new_line_anchor}" href="#${new_line_anchor}">${line.modified.lineno}</a>
670 <a name="${new_line_anchor}" href="#${new_line_anchor}">${line.modified.lineno}</a>
617 %endif
671 %endif
618 </td>
672 </td>
619 <td class="cb-content ${action_class(line.modified.action)}"
673 <td class="cb-content ${action_class(line.modified.action)}"
620 data-line-no="n${line.modified.lineno}"
674 data-line-no="n${line.modified.lineno}"
621 >
675 >
622 %if use_comments and line.modified.lineno:
676 %if use_comments and line.modified.lineno:
623 ${render_add_comment_button()}
677 ${render_add_comment_button()}
624 %endif
678 %endif
625 <span class="cb-code"><span class="cb-action ${action_class(line.modified.action)}"></span>${line.modified.content or '' | n}</span>
679 <span class="cb-code"><span class="cb-action ${action_class(line.modified.action)}"></span>${line.modified.content or '' | n}</span>
626 %if use_comments and line.modified.lineno and line_new_comments:
680 %if use_comments and line.modified.lineno and line_new_comments:
627 ${inline_comments_container(line_new_comments, inline_comments)}
681 ${inline_comments_container(line_new_comments, inline_comments)}
628 %endif
682 %endif
629 </td>
683 </td>
630 </tr>
684 </tr>
631 %endfor
685 %endfor
632 </%def>
686 </%def>
633
687
634
688
635 <%def name="render_hunk_lines_unified(filediff, hunk, use_comments=False, inline_comments=None)">
689 <%def name="render_hunk_lines_unified(filediff, hunk, use_comments=False, inline_comments=None)">
636 %for old_line_no, new_line_no, action, content, comments_args in hunk.unified:
690 %for old_line_no, new_line_no, action, content, comments_args in hunk.unified:
637
691
638 <%
692 <%
639 old_line_anchor, new_line_anchor = None, None
693 old_line_anchor, new_line_anchor = None, None
640 if old_line_no:
694 if old_line_no:
641 old_line_anchor = diff_line_anchor(filediff.raw_id, hunk.source_file_path, old_line_no, 'o')
695 old_line_anchor = diff_line_anchor(filediff.raw_id, hunk.source_file_path, old_line_no, 'o')
642 if new_line_no:
696 if new_line_no:
643 new_line_anchor = diff_line_anchor(filediff.raw_id, hunk.target_file_path, new_line_no, 'n')
697 new_line_anchor = diff_line_anchor(filediff.raw_id, hunk.target_file_path, new_line_no, 'n')
644 %>
698 %>
645 <tr class="cb-line">
699 <tr class="cb-line">
646 <td class="cb-data ${action_class(action)}">
700 <td class="cb-data ${action_class(action)}">
647 <div>
701 <div>
648
702
649 %if comments_args:
703 %if comments_args:
650 <% comments = get_comments_for('unified', inline_comments, *comments_args) %>
704 <% comments = get_comments_for('unified', inline_comments, *comments_args) %>
651 %else:
705 %else:
652 <% comments = None %>
706 <% comments = None %>
653 %endif
707 %endif
654
708
655 % if comments:
709 % if comments:
656 <% has_outdated = any([x.outdated for x in comments]) %>
710 <% has_outdated = any([x.outdated for x in comments]) %>
657 % if has_outdated:
711 % if has_outdated:
658 <i title="${_('comments including outdated')}:${len(comments)}" class="icon-comment-toggle" onclick="return Rhodecode.comments.toggleLineComments(this)"></i>
712 <i title="${_('comments including outdated')}:${len(comments)}" class="icon-comment-toggle" onclick="return Rhodecode.comments.toggleLineComments(this)"></i>
659 % else:
713 % else:
660 <i title="${_('comments')}: ${len(comments)}" class="icon-comment" onclick="return Rhodecode.comments.toggleLineComments(this)"></i>
714 <i title="${_('comments')}: ${len(comments)}" class="icon-comment" onclick="return Rhodecode.comments.toggleLineComments(this)"></i>
661 % endif
715 % endif
662 % endif
716 % endif
663 </div>
717 </div>
664 </td>
718 </td>
665 <td class="cb-lineno ${action_class(action)}"
719 <td class="cb-lineno ${action_class(action)}"
666 data-line-no="${old_line_no}"
720 data-line-no="${old_line_no}"
667 %if old_line_anchor:
721 %if old_line_anchor:
668 id="${old_line_anchor}"
722 id="${old_line_anchor}"
669 %endif
723 %endif
670 >
724 >
671 %if old_line_anchor:
725 %if old_line_anchor:
672 <a name="${old_line_anchor}" href="#${old_line_anchor}">${old_line_no}</a>
726 <a name="${old_line_anchor}" href="#${old_line_anchor}">${old_line_no}</a>
673 %endif
727 %endif
674 </td>
728 </td>
675 <td class="cb-lineno ${action_class(action)}"
729 <td class="cb-lineno ${action_class(action)}"
676 data-line-no="${new_line_no}"
730 data-line-no="${new_line_no}"
677 %if new_line_anchor:
731 %if new_line_anchor:
678 id="${new_line_anchor}"
732 id="${new_line_anchor}"
679 %endif
733 %endif
680 >
734 >
681 %if new_line_anchor:
735 %if new_line_anchor:
682 <a name="${new_line_anchor}" href="#${new_line_anchor}">${new_line_no}</a>
736 <a name="${new_line_anchor}" href="#${new_line_anchor}">${new_line_no}</a>
683 %endif
737 %endif
684 </td>
738 </td>
685 <td class="cb-content ${action_class(action)}"
739 <td class="cb-content ${action_class(action)}"
686 data-line-no="${(new_line_no and 'n' or 'o')}${(new_line_no or old_line_no)}"
740 data-line-no="${(new_line_no and 'n' or 'o')}${(new_line_no or old_line_no)}"
687 >
741 >
688 %if use_comments:
742 %if use_comments:
689 ${render_add_comment_button()}
743 ${render_add_comment_button()}
690 %endif
744 %endif
691 <span class="cb-code"><span class="cb-action ${action_class(action)}"></span> ${content or '' | n}</span>
745 <span class="cb-code"><span class="cb-action ${action_class(action)}"></span> ${content or '' | n}</span>
692 %if use_comments and comments:
746 %if use_comments and comments:
693 ${inline_comments_container(comments, inline_comments)}
747 ${inline_comments_container(comments, inline_comments)}
694 %endif
748 %endif
695 </td>
749 </td>
696 </tr>
750 </tr>
697 %endfor
751 %endfor
698 </%def>
752 </%def>
699
753
700
754
701 <%def name="render_hunk_lines(filediff, diff_mode, hunk, use_comments, inline_comments)">
755 <%def name="render_hunk_lines(filediff, diff_mode, hunk, use_comments, inline_comments)">
702 % if diff_mode == 'unified':
756 % if diff_mode == 'unified':
703 ${render_hunk_lines_unified(filediff, hunk, use_comments=use_comments, inline_comments=inline_comments)}
757 ${render_hunk_lines_unified(filediff, hunk, use_comments=use_comments, inline_comments=inline_comments)}
704 % elif diff_mode == 'sideside':
758 % elif diff_mode == 'sideside':
705 ${render_hunk_lines_sideside(filediff, hunk, use_comments=use_comments, inline_comments=inline_comments)}
759 ${render_hunk_lines_sideside(filediff, hunk, use_comments=use_comments, inline_comments=inline_comments)}
706 % else:
760 % else:
707 <tr class="cb-line">
761 <tr class="cb-line">
708 <td>unknown diff mode</td>
762 <td>unknown diff mode</td>
709 </tr>
763 </tr>
710 % endif
764 % endif
711 </%def>file changes
765 </%def>file changes
712
766
713
767
714 <%def name="render_add_comment_button()">
768 <%def name="render_add_comment_button()">
715 <button class="btn btn-small btn-primary cb-comment-box-opener" onclick="return Rhodecode.comments.createComment(this)">
769 <button class="btn btn-small btn-primary cb-comment-box-opener" onclick="return Rhodecode.comments.createComment(this)">
716 <span><i class="icon-comment"></i></span>
770 <span><i class="icon-comment"></i></span>
717 </button>
771 </button>
718 </%def>
772 </%def>
719
773
720 <%def name="render_diffset_menu(diffset=None, range_diff_on=None)">
774 <%def name="render_diffset_menu(diffset, range_diff_on=None)">
775 <% diffset_container_id = h.md5(diffset.target_ref) %>
721
776
722 <div id="diff-file-sticky" class="diffset-menu clearinner">
777 <div id="diff-file-sticky" class="diffset-menu clearinner">
723 ## auto adjustable
778 ## auto adjustable
724 <div class="sidebar__inner">
779 <div class="sidebar__inner">
725 <div class="sidebar__bar">
780 <div class="sidebar__bar">
726 <div class="pull-right">
781 <div class="pull-right">
727 <div class="btn-group">
782 <div class="btn-group">
728
783 <a class="btn tooltip toggle-wide-diff" href="#toggle-wide-diff" onclick="toggleWideDiff(this); return false" title="${h.tooltip(_('Toggle wide diff'))}">
729 ## DIFF OPTIONS via Select2
784 <i class="icon-wide-mode"></i>
730 <div class="pull-left">
785 </a>
731 ${h.hidden('diff_menu')}
732 </div>
786 </div>
787 <div class="btn-group">
733
788
734 <a
789 <a
735 class="btn ${(c.user_session_attrs["diffmode"] == 'sideside' and 'btn-primary')} tooltip"
790 class="btn ${(c.user_session_attrs["diffmode"] == 'sideside' and 'btn-active')} tooltip"
736 title="${h.tooltip(_('View side by side'))}"
791 title="${h.tooltip(_('View diff as side by side'))}"
737 href="${h.current_route_path(request, diffmode='sideside')}">
792 href="${h.current_route_path(request, diffmode='sideside')}">
738 <span>${_('Side by Side')}</span>
793 <span>${_('Side by Side')}</span>
739 </a>
794 </a>
740
795
741 <a
796 <a
742 class="btn ${(c.user_session_attrs["diffmode"] == 'unified' and 'btn-primary')} tooltip"
797 class="btn ${(c.user_session_attrs["diffmode"] == 'unified' and 'btn-active')} tooltip"
743 title="${h.tooltip(_('View unified'))}" href="${h.current_route_path(request, diffmode='unified')}">
798 title="${h.tooltip(_('View diff as unified'))}" href="${h.current_route_path(request, diffmode='unified')}">
744 <span>${_('Unified')}</span>
799 <span>${_('Unified')}</span>
745 </a>
800 </a>
746
801
747 % if range_diff_on is True:
802 % if range_diff_on is True:
748 <a
803 <a
749 title="${_('Turn off: Show the diff as commit range')}"
804 title="${_('Turn off: Show the diff as commit range')}"
750 class="btn btn-primary"
805 class="btn btn-primary"
751 href="${h.current_route_path(request, **{"range-diff":"0"})}">
806 href="${h.current_route_path(request, **{"range-diff":"0"})}">
752 <span>${_('Range Diff')}</span>
807 <span>${_('Range Diff')}</span>
753 </a>
808 </a>
754 % elif range_diff_on is False:
809 % elif range_diff_on is False:
755 <a
810 <a
756 title="${_('Show the diff as commit range')}"
811 title="${_('Show the diff as commit range')}"
757 class="btn"
812 class="btn"
758 href="${h.current_route_path(request, **{"range-diff":"1"})}">
813 href="${h.current_route_path(request, **{"range-diff":"1"})}">
759 <span>${_('Range Diff')}</span>
814 <span>${_('Range Diff')}</span>
760 </a>
815 </a>
761 % endif
816 % endif
762 </div>
817 </div>
818 <div class="btn-group">
819
820 <div class="pull-left">
821 ${h.hidden('diff_menu_{}'.format(diffset_container_id))}
822 </div>
823
824 </div>
763 </div>
825 </div>
764 <div class="pull-left">
826 <div class="pull-left">
765 <div class="btn-group">
827 <div class="btn-group">
766 <div class="pull-left">
828 <div class="pull-left">
767 ${h.hidden('file_filter')}
829 ${h.hidden('file_filter_{}'.format(diffset_container_id))}
768 </div>
830 </div>
769 <a
831
770 class="btn"
771 href="#"
772 onclick="$('input[class=filediff-collapse-state]').prop('checked', false); updateSticky(); return false">${_('Expand All Files')}</a>
773 <a
774 class="btn"
775 href="#"
776 onclick="$('input[class=filediff-collapse-state]').prop('checked', true); updateSticky(); return false">${_('Collapse All Files')}</a>
777 </div>
832 </div>
778 </div>
833 </div>
779 </div>
834 </div>
780 <div class="fpath-placeholder">
835 <div class="fpath-placeholder">
781 <i class="icon-file-text"></i>
836 <i class="icon-file-text"></i>
782 <strong class="fpath-placeholder-text">
837 <strong class="fpath-placeholder-text">
783 Context file:
838 Context file:
784 </strong>
839 </strong>
785 </div>
840 </div>
786 <div class="sidebar_inner_shadow"></div>
841 <div class="sidebar_inner_shadow"></div>
787 </div>
842 </div>
788 </div>
843 </div>
789
844
790 % if diffset:
845 % if diffset:
791
792 %if diffset.limited_diff:
846 %if diffset.limited_diff:
793 <% file_placeholder = _ungettext('%(num)s file changed', '%(num)s files changed', diffset.changed_files) % {'num': diffset.changed_files} %>
847 <% file_placeholder = _ungettext('%(num)s file changed', '%(num)s files changed', diffset.changed_files) % {'num': diffset.changed_files} %>
794 %else:
848 %else:
795 <% file_placeholder = _ungettext('%(num)s file changed: %(linesadd)s inserted, ''%(linesdel)s deleted', '%(num)s files changed: %(linesadd)s inserted, %(linesdel)s deleted', diffset.changed_files) % {'num': diffset.changed_files, 'linesadd': diffset.lines_added, 'linesdel': diffset.lines_deleted}%>
849 <% file_placeholder = h.literal(_ungettext('%(num)s file changed: <span class="op-added">%(linesadd)s inserted</span>, <span class="op-deleted">%(linesdel)s deleted</span>', '%(num)s files changed: <span class="op-added">%(linesadd)s inserted</span>, <span class="op-deleted">%(linesdel)s deleted</span>',
850 diffset.changed_files) % {'num': diffset.changed_files, 'linesadd': diffset.lines_added, 'linesdel': diffset.lines_deleted}) %>
851
796 %endif
852 %endif
797 ## case on range-diff placeholder needs to be updated
853 ## case on range-diff placeholder needs to be updated
798 % if range_diff_on is True:
854 % if range_diff_on is True:
799 <% file_placeholder = _('Disabled on range diff') %>
855 <% file_placeholder = _('Disabled on range diff') %>
800 % endif
856 % endif
801
857
802 <script>
858 <script type="text/javascript">
803
804 var feedFilesOptions = function (query, initialData) {
859 var feedFilesOptions = function (query, initialData) {
805 var data = {results: []};
860 var data = {results: []};
806 var isQuery = typeof query.term !== 'undefined';
861 var isQuery = typeof query.term !== 'undefined';
807
862
808 var section = _gettext('Changed files');
863 var section = _gettext('Changed files');
809 var filteredData = [];
864 var filteredData = [];
810
865
811 //filter results
866 //filter results
812 $.each(initialData.results, function (idx, value) {
867 $.each(initialData.results, function (idx, value) {
813
868
814 if (!isQuery || query.term.length === 0 || value.text.toUpperCase().indexOf(query.term.toUpperCase()) >= 0) {
869 if (!isQuery || query.term.length === 0 || value.text.toUpperCase().indexOf(query.term.toUpperCase()) >= 0) {
815 filteredData.push({
870 filteredData.push({
816 'id': this.id,
871 'id': this.id,
817 'text': this.text,
872 'text': this.text,
818 "ops": this.ops,
873 "ops": this.ops,
819 })
874 })
820 }
875 }
821
876
822 });
877 });
823
878
824 data.results = filteredData;
879 data.results = filteredData;
825
880
826 query.callback(data);
881 query.callback(data);
827 };
882 };
828
883
884 var selectionFormatter = function(data, escapeMarkup) {
885 var container = '<div class="filelist" style="padding-right:100px">{0}</div>';
886 var tmpl = '<div><strong>{0}</strong></div>'.format(escapeMarkup(data['text']));
887 var pill = '<div class="pill-group" style="position: absolute; top:7px; right: 0">' +
888 '<span class="pill" op="added">{0}</span>' +
889 '<span class="pill" op="deleted">{1}</span>' +
890 '</div>'
891 ;
892 var added = data['ops']['added'];
893 if (added === 0) {
894 // don't show +0
895 added = 0;
896 } else {
897 added = '+' + added;
898 }
899
900 var deleted = -1*data['ops']['deleted'];
901
902 tmpl += pill.format(added, deleted);
903 return container.format(tmpl);
904 };
829 var formatFileResult = function(result, container, query, escapeMarkup) {
905 var formatFileResult = function(result, container, query, escapeMarkup) {
830 return function(data, escapeMarkup) {
906 return selectionFormatter(result, escapeMarkup);
831 var container = '<div class="filelist" style="padding-right:100px">{0}</div>';
832 var tmpl = '<span style="margin-right:-50px"><strong>{0}</strong></span>'.format(escapeMarkup(data['text']));
833 var pill = '<span class="pill-group" style="float: right;margin-right: -100px">' +
834 '<span class="pill" op="added">{0}</span>' +
835 '<span class="pill" op="deleted">{1}</span>' +
836 '</span>'
837 ;
838 var added = data['ops']['added'];
839 if (added === 0) {
840 // don't show +0
841 added = 0;
842 } else {
843 added = '+' + added;
844 }
845
846 var deleted = -1*data['ops']['deleted'];
847
848 tmpl += pill.format(added, deleted);
849 return container.format(tmpl);
850
851 }(result, escapeMarkup);
852 };
907 };
853
908
854 var preloadFileFilterData = {
909 var formatSelection = function (data, container) {
910 return '${file_placeholder}'
911 };
912
913 if (window.preloadFileFilterData === undefined) {
914 window.preloadFileFilterData = {}
915 }
916
917 preloadFileFilterData["${diffset_container_id}"] = {
855 results: [
918 results: [
856 % for filediff in diffset.files:
919 % for filediff in diffset.files:
857 {id:"a_${h.FID(filediff.raw_id, filediff.patch['filename'])}",
920 {id:"a_${h.FID(filediff.raw_id, filediff.patch['filename'])}",
858 text:"${filediff.patch['filename']}",
921 text:"${filediff.patch['filename']}",
859 ops:${h.json.dumps(filediff.patch['stats'])|n}}${('' if loop.last else ',')}
922 ops:${h.json.dumps(filediff.patch['stats'])|n}}${('' if loop.last else ',')}
860 % endfor
923 % endfor
861 ]
924 ]
862 };
925 };
863
926
864 $(document).ready(function () {
927 var diffFileFilterId = "#file_filter_" + "${diffset_container_id}";
928 var diffFileFilter = $(diffFileFilterId).select2({
929 'dropdownAutoWidth': true,
930 'width': 'auto',
931
932 containerCssClass: "drop-menu",
933 dropdownCssClass: "drop-menu-dropdown",
934 data: preloadFileFilterData["${diffset_container_id}"],
935 query: function(query) {
936 feedFilesOptions(query, preloadFileFilterData["${diffset_container_id}"]);
937 },
938 initSelection: function(element, callback) {
939 callback({'init': true});
940 },
941 formatResult: formatFileResult,
942 formatSelection: formatSelection
943 });
865
944
866 var fileFilter = $("#file_filter").select2({
945 % if range_diff_on is True:
867 'dropdownAutoWidth': true,
946 diffFileFilter.select2("enable", false);
868 'width': 'auto',
947 % endif
869 'placeholder': "${file_placeholder}",
948
870 containerCssClass: "drop-menu",
949 $(diffFileFilterId).on('select2-selecting', function (e) {
871 dropdownCssClass: "drop-menu-dropdown",
950 var idSelector = e.choice.id;
872 data: preloadFileFilterData,
951
873 query: function(query) {
952 // expand the container if we quick-select the field
874 feedFilesOptions(query, preloadFileFilterData);
953 $('#'+idSelector).next().prop('checked', false);
875 },
954 // hide the mast as we later do preventDefault()
876 formatResult: formatFileResult
955 $("#select2-drop-mask").click();
877 });
878
956
879 % if range_diff_on is True:
957 window.location.hash = '#'+idSelector;
880 fileFilter.select2("enable", false);
958 updateSticky();
881 % endif
959
960 e.preventDefault();
961 });
882
962
883 $("#file_filter").on('click', function (e) {
963 </script>
884 e.preventDefault();
964 % endif
885 var selected = $('#file_filter').select2('data');
965
886 var idSelector = "#"+selected.id;
966 <script type="text/javascript">
887 window.location.hash = idSelector;
967 $(document).ready(function () {
888 // expand the container if we quick-select the field
889 $(idSelector).next().prop('checked', false);
890 updateSticky()
891 });
892
968
893 var contextPrefix = _gettext('Context file: ');
969 var contextPrefix = _gettext('Context file: ');
894 ## sticky sidebar
970 ## sticky sidebar
895 var sidebarElement = document.getElementById('diff-file-sticky');
971 var sidebarElement = document.getElementById('diff-file-sticky');
896 sidebar = new StickySidebar(sidebarElement, {
972 sidebar = new StickySidebar(sidebarElement, {
897 topSpacing: 0,
973 topSpacing: 0,
898 bottomSpacing: 0,
974 bottomSpacing: 0,
899 innerWrapperSelector: '.sidebar__inner'
975 innerWrapperSelector: '.sidebar__inner'
900 });
976 });
901 sidebarElement.addEventListener('affixed.static.stickySidebar', function () {
977 sidebarElement.addEventListener('affixed.static.stickySidebar', function () {
902 // reset our file so it's not holding new value
978 // reset our file so it's not holding new value
903 $('.fpath-placeholder-text').html(contextPrefix)
979 $('.fpath-placeholder-text').html(contextPrefix + ' - ')
904 });
980 });
905
981
906 updateSticky = function () {
982 updateSticky = function () {
907 sidebar.updateSticky();
983 sidebar.updateSticky();
908 Waypoint.refreshAll();
984 Waypoint.refreshAll();
909 };
985 };
910
986
911 var animateText = $.debounce(100, function(fPath, anchorId) {
987 var animateText = function (fPath, anchorId) {
912 fPath = Select2.util.escapeMarkup(fPath);
988 fPath = Select2.util.escapeMarkup(fPath);
913
989 $('.fpath-placeholder-text').html(contextPrefix + '<a href="#a_' + anchorId + '">' + fPath + '</a>')
914 // animate setting the text
990 };
915 var callback = function () {
916 $('.fpath-placeholder-text').animate({'opacity': 1.00}, 200)
917 $('.fpath-placeholder-text').html(contextPrefix + '<a href="#a_' + anchorId + '">' + fPath + '</a>')
918 };
919 $('.fpath-placeholder-text').animate({'opacity': 0.15}, 200, callback);
920 });
921
991
922 ## dynamic file waypoints
992 ## dynamic file waypoints
923 var setFPathInfo = function(fPath, anchorId){
993 var setFPathInfo = function(fPath, anchorId){
924 animateText(fPath, anchorId)
994 animateText(fPath, anchorId)
925 };
995 };
926
996
927 var codeBlock = $('.filediff');
997 var codeBlock = $('.filediff');
998
928 // forward waypoint
999 // forward waypoint
929 codeBlock.waypoint(
1000 codeBlock.waypoint(
930 function(direction) {
1001 function(direction) {
931 if (direction === "down"){
1002 if (direction === "down"){
932 setFPathInfo($(this.element).data('fPath'), $(this.element).data('anchorId'))
1003 setFPathInfo($(this.element).data('fPath'), $(this.element).data('anchorId'))
933 }
1004 }
934 }, {
1005 }, {
935 offset: 70,
1006 offset: function () {
1007 return 70;
1008 },
936 context: '.fpath-placeholder'
1009 context: '.fpath-placeholder'
937 }
1010 }
938 );
1011 );
939
1012
940 // backward waypoint
1013 // backward waypoint
941 codeBlock.waypoint(
1014 codeBlock.waypoint(
942 function(direction) {
1015 function(direction) {
943 if (direction === "up"){
1016 if (direction === "up"){
944 setFPathInfo($(this.element).data('fPath'), $(this.element).data('anchorId'))
1017 setFPathInfo($(this.element).data('fPath'), $(this.element).data('anchorId'))
945 }
1018 }
946 }, {
1019 }, {
947 offset: function () {
1020 offset: function () {
948 return -this.element.clientHeight + 90
1021 return -this.element.clientHeight + 90;
949 },
1022 },
950 context: '.fpath-placeholder'
1023 context: '.fpath-placeholder'
951 }
1024 }
952 );
1025 );
953
1026
1027 toggleWideDiff = function (el) {
1028 updateSticky();
1029 var wide = Rhodecode.comments.toggleWideMode(this);
1030 storeUserSessionAttr('rc_user_session_attr.wide_diff_mode', wide);
1031 if (wide === true) {
1032 $(el).addClass('btn-active');
1033 } else {
1034 $(el).removeClass('btn-active');
1035 }
1036 return null;
1037 };
1038
954 var preloadDiffMenuData = {
1039 var preloadDiffMenuData = {
955 results: [
1040 results: [
956 ## Wide diff mode
957 {
958 id: 1,
959 text: _gettext('Toggle Wide Mode diff'),
960 action: function () {
961 updateSticky();
962 var wide = Rhodecode.comments.toggleWideMode(this);
963 storeUserSessionAttr('rc_user_session_attr.wide_diff_mode', wide);
964 return null;
965 },
966 url: null,
967 },
968
1041
969 ## Whitespace change
1042 ## Whitespace change
970 % if request.GET.get('ignorews', '') == '1':
1043 % if request.GET.get('ignorews', '') == '1':
971 {
1044 {
972 id: 2,
1045 id: 2,
973 text: _gettext('Show whitespace changes'),
1046 text: _gettext('Show whitespace changes'),
974 action: function () {},
1047 action: function () {},
975 url: "${h.current_route_path(request, ignorews=0)|n}"
1048 url: "${h.current_route_path(request, ignorews=0)|n}"
976 },
1049 },
977 % else:
1050 % else:
978 {
1051 {
979 id: 2,
1052 id: 2,
980 text: _gettext('Hide whitespace changes'),
1053 text: _gettext('Hide whitespace changes'),
981 action: function () {},
1054 action: function () {},
982 url: "${h.current_route_path(request, ignorews=1)|n}"
1055 url: "${h.current_route_path(request, ignorews=1)|n}"
983 },
1056 },
984 % endif
1057 % endif
985
1058
986 ## FULL CONTEXT
1059 ## FULL CONTEXT
987 % if request.GET.get('fullcontext', '') == '1':
1060 % if request.GET.get('fullcontext', '') == '1':
988 {
1061 {
989 id: 3,
1062 id: 3,
990 text: _gettext('Hide full context diff'),
1063 text: _gettext('Hide full context diff'),
991 action: function () {},
1064 action: function () {},
992 url: "${h.current_route_path(request, fullcontext=0)|n}"
1065 url: "${h.current_route_path(request, fullcontext=0)|n}"
993 },
1066 },
994 % else:
1067 % else:
995 {
1068 {
996 id: 3,
1069 id: 3,
997 text: _gettext('Show full context diff'),
1070 text: _gettext('Show full context diff'),
998 action: function () {},
1071 action: function () {},
999 url: "${h.current_route_path(request, fullcontext=1)|n}"
1072 url: "${h.current_route_path(request, fullcontext=1)|n}"
1000 },
1073 },
1001 % endif
1074 % endif
1002
1075
1003 ]
1076 ]
1004 };
1077 };
1005
1078
1006 // get stored diff mode and pre-enable it
1079 // get stored diff mode and pre-enable it
1007 if (templateContext.session_attrs.wide_diff_mode === "true") {
1080 if (templateContext.session_attrs.wide_diff_mode === "true") {
1008 Rhodecode.comments.toggleWideMode(null);
1081 Rhodecode.comments.toggleWideMode(null);
1082 $('.toggle-wide-diff').addClass('btn-active');
1009 }
1083 }
1010
1084
1011 $("#diff_menu").select2({
1085 var diffMenuId = "#diff_menu_" + "${diffset_container_id}";
1086 $(diffMenuId).select2({
1012 minimumResultsForSearch: -1,
1087 minimumResultsForSearch: -1,
1013 containerCssClass: "drop-menu",
1088 containerCssClass: "drop-menu-no-width",
1014 dropdownCssClass: "drop-menu-dropdown",
1089 dropdownCssClass: "drop-menu-dropdown",
1015 dropdownAutoWidth: true,
1090 dropdownAutoWidth: true,
1016 data: preloadDiffMenuData,
1091 data: preloadDiffMenuData,
1017 placeholder: "${_('Diff Options')}",
1092 placeholder: "${_('...')}",
1018 });
1093 });
1019 $("#diff_menu").on('select2-selecting', function (e) {
1094 $(diffMenuId).on('select2-selecting', function (e) {
1020 e.choice.action();
1095 e.choice.action();
1021 if (e.choice.url !== null) {
1096 if (e.choice.url !== null) {
1022 window.location = e.choice.url
1097 window.location = e.choice.url
1023 }
1098 }
1024 });
1099 });
1025
1100 toggleExpand = function (el, diffsetEl) {
1101 var el = $(el);
1102 if (el.hasClass('collapsed')) {
1103 $('.filediff-collapse-state.collapse-{0}'.format(diffsetEl)).prop('checked', false);
1104 el.removeClass('collapsed');
1105 el.html(
1106 '<i class="icon-minus-squared-alt icon-no-margin"></i>' +
1107 _gettext('Collapse all files'));
1108 }
1109 else {
1110 $('.filediff-collapse-state.collapse-{0}'.format(diffsetEl)).prop('checked', true);
1111 el.addClass('collapsed');
1112 el.html(
1113 '<i class="icon-plus-squared-alt icon-no-margin"></i>' +
1114 _gettext('Expand all files'));
1115 }
1116 updateSticky()
1117 }
1026 });
1118 });
1027
1028 </script>
1119 </script>
1029 % endif
1030
1120
1031 </%def>
1121 </%def>
@@ -1,369 +1,369 b''
1 <%inherit file="/base/base.mako"/>
1 <%inherit file="/base/base.mako"/>
2
2
3 <%def name="title(*args)">
3 <%def name="title(*args)">
4 ${_('{} Files').format(c.repo_name)}
4 ${_('{} Files').format(c.repo_name)}
5 %if hasattr(c,'file'):
5 %if hasattr(c,'file'):
6 &middot; ${(h.safe_unicode(c.file.path) or '\\')}
6 &middot; ${(h.safe_unicode(c.file.path) or '\\')}
7 %endif
7 %endif
8
8
9 %if c.rhodecode_name:
9 %if c.rhodecode_name:
10 &middot; ${h.branding(c.rhodecode_name)}
10 &middot; ${h.branding(c.rhodecode_name)}
11 %endif
11 %endif
12 </%def>
12 </%def>
13
13
14 <%def name="breadcrumbs_links()">
14 <%def name="breadcrumbs_links()">
15 ${_('Files')}
15 ${_('Files')}
16 %if c.file:
16 %if c.file:
17 @ ${h.show_id(c.commit)}
17 @ ${h.show_id(c.commit)}
18 %endif
18 %endif
19 </%def>
19 </%def>
20
20
21 <%def name="menu_bar_nav()">
21 <%def name="menu_bar_nav()">
22 ${self.menu_items(active='repositories')}
22 ${self.menu_items(active='repositories')}
23 </%def>
23 </%def>
24
24
25 <%def name="menu_bar_subnav()">
25 <%def name="menu_bar_subnav()">
26 ${self.repo_menu(active='files')}
26 ${self.repo_menu(active='files')}
27 </%def>
27 </%def>
28
28
29 <%def name="main()">
29 <%def name="main()">
30 <script type="text/javascript">
30 <script type="text/javascript">
31 var fileSourcePage = ${c.file_source_page};
31 var fileSourcePage = ${c.file_source_page};
32 var atRef = '${request.GET.get('at', '')}';
32 var atRef = '${request.GET.get('at', '')}';
33
33
34 // global state for fetching metadata
34 // global state for fetching metadata
35 metadataRequest = null;
35 metadataRequest = null;
36
36
37 // global metadata about URL
37 // global metadata about URL
38 filesUrlData = ${h.files_url_data(request)|n};
38 filesUrlData = ${h.files_url_data(request)|n};
39 </script>
39 </script>
40
40
41 <div>
41 <div>
42 <div id="files_data">
42 <div>
43 <%include file='files_pjax.mako'/>
43 <%include file='files_pjax.mako'/>
44 </div>
44 </div>
45 </div>
45 </div>
46
46
47 <script type="text/javascript">
47 <script type="text/javascript">
48
48
49 var initFileJS = function () {
49 var initFileJS = function () {
50 var state = getFileState();
50 var state = getFileState();
51
51
52 // select code link event
52 // select code link event
53 $("#hlcode").mouseup(getSelectionLink);
53 $("#hlcode").mouseup(getSelectionLink);
54
54
55 // file history select2 used for history of file, and switch to
55 // file history select2 used for history of file, and switch to
56 var initialCommitData = {
56 var initialCommitData = {
57 at_ref: atRef,
57 at_ref: atRef,
58 id: null,
58 id: null,
59 text: '${c.commit.raw_id}',
59 text: '${c.commit.raw_id}',
60 type: 'sha',
60 type: 'sha',
61 raw_id: '${c.commit.raw_id}',
61 raw_id: '${c.commit.raw_id}',
62 idx: ${c.commit.idx},
62 idx: ${c.commit.idx},
63 files_url: null,
63 files_url: null,
64 };
64 };
65
65
66 // check if we have ref info.
66 // check if we have ref info.
67 var selectedRef = fileTreeRefs[atRef];
67 var selectedRef = fileTreeRefs[atRef];
68 if (selectedRef !== undefined) {
68 if (selectedRef !== undefined) {
69 $.extend(initialCommitData, selectedRef)
69 $.extend(initialCommitData, selectedRef)
70 }
70 }
71
71
72 var loadUrl = pyroutes.url('repo_file_history', {'repo_name': templateContext.repo_name, 'commit_id': state.commit_id,'f_path': state.f_path});
72 var loadUrl = pyroutes.url('repo_file_history', {'repo_name': templateContext.repo_name, 'commit_id': state.commit_id,'f_path': state.f_path});
73 var cacheKey = '__SINGLE_FILE_REFS__';
73 var cacheKey = '__SINGLE_FILE_REFS__';
74 var cachedDataSource = {};
74 var cachedDataSource = {};
75
75
76 var loadRefsData = function (query) {
76 var loadRefsData = function (query) {
77 $.ajax({
77 $.ajax({
78 url: loadUrl,
78 url: loadUrl,
79 data: {},
79 data: {},
80 dataType: 'json',
80 dataType: 'json',
81 type: 'GET',
81 type: 'GET',
82 success: function (data) {
82 success: function (data) {
83 cachedDataSource[cacheKey] = data;
83 cachedDataSource[cacheKey] = data;
84 query.callback({results: data.results});
84 query.callback({results: data.results});
85 }
85 }
86 });
86 });
87 };
87 };
88
88
89 var feedRefsData = function (query, cachedData) {
89 var feedRefsData = function (query, cachedData) {
90 var data = {results: []};
90 var data = {results: []};
91 //filter results
91 //filter results
92 $.each(cachedData.results, function () {
92 $.each(cachedData.results, function () {
93 var section = this.text;
93 var section = this.text;
94 var children = [];
94 var children = [];
95 $.each(this.children, function () {
95 $.each(this.children, function () {
96 if (query.term.length === 0 || this.text.toUpperCase().indexOf(query.term.toUpperCase()) >= 0) {
96 if (query.term.length === 0 || this.text.toUpperCase().indexOf(query.term.toUpperCase()) >= 0) {
97 children.push(this)
97 children.push(this)
98 }
98 }
99 });
99 });
100 data.results.push({
100 data.results.push({
101 'text': section,
101 'text': section,
102 'children': children
102 'children': children
103 })
103 })
104 });
104 });
105
105
106 query.callback(data);
106 query.callback(data);
107 };
107 };
108
108
109 var select2FileHistorySwitcher = function (targetElement, loadUrl, initialData) {
109 var select2FileHistorySwitcher = function (targetElement, loadUrl, initialData) {
110 var formatResult = function (result, container, query) {
110 var formatResult = function (result, container, query) {
111 return formatSelect2SelectionRefs(result);
111 return formatSelect2SelectionRefs(result);
112 };
112 };
113
113
114 var formatSelection = function (data, container) {
114 var formatSelection = function (data, container) {
115 var commit_ref = data;
115 var commit_ref = data;
116
116
117 var tmpl = '';
117 var tmpl = '';
118 if (commit_ref.type === 'sha') {
118 if (commit_ref.type === 'sha') {
119 tmpl = (commit_ref.raw_id || "").substr(0,8);
119 tmpl = (commit_ref.raw_id || "").substr(0,8);
120 } else if (commit_ref.type === 'branch') {
120 } else if (commit_ref.type === 'branch') {
121 tmpl = tmpl.concat('<i class="icon-branch"></i> ');
121 tmpl = tmpl.concat('<i class="icon-branch"></i> ');
122 tmpl = tmpl.concat(escapeHtml(commit_ref.text));
122 tmpl = tmpl.concat(escapeHtml(commit_ref.text));
123 } else if (commit_ref.type === 'tag') {
123 } else if (commit_ref.type === 'tag') {
124 tmpl = tmpl.concat('<i class="icon-tag"></i> ');
124 tmpl = tmpl.concat('<i class="icon-tag"></i> ');
125 tmpl = tmpl.concat(escapeHtml(commit_ref.text));
125 tmpl = tmpl.concat(escapeHtml(commit_ref.text));
126 } else if (commit_ref.type === 'book') {
126 } else if (commit_ref.type === 'book') {
127 tmpl = tmpl.concat('<i class="icon-bookmark"></i> ');
127 tmpl = tmpl.concat('<i class="icon-bookmark"></i> ');
128 tmpl = tmpl.concat(escapeHtml(commit_ref.text));
128 tmpl = tmpl.concat(escapeHtml(commit_ref.text));
129 }
129 }
130 var idx = commit_ref.idx || 0;
130 var idx = commit_ref.idx || 0;
131 if (idx !== 0) {
131 if (idx !== 0) {
132 tmpl = tmpl.concat('<span class="select-index-number">r{0}</span>'.format(idx));
132 tmpl = tmpl.concat('<span class="select-index-number">r{0}</span>'.format(idx));
133 }
133 }
134 return tmpl
134 return tmpl
135 };
135 };
136
136
137 $(targetElement).select2({
137 $(targetElement).select2({
138 dropdownAutoWidth: true,
138 dropdownAutoWidth: true,
139 width: "resolve",
139 width: "resolve",
140 containerCssClass: "drop-menu",
140 containerCssClass: "drop-menu",
141 dropdownCssClass: "drop-menu-dropdown",
141 dropdownCssClass: "drop-menu-dropdown",
142 query: function(query) {
142 query: function(query) {
143 var cachedData = cachedDataSource[cacheKey];
143 var cachedData = cachedDataSource[cacheKey];
144 if (cachedData) {
144 if (cachedData) {
145 feedRefsData(query, cachedData)
145 feedRefsData(query, cachedData)
146 } else {
146 } else {
147 loadRefsData(query)
147 loadRefsData(query)
148 }
148 }
149 },
149 },
150 initSelection: function(element, callback) {
150 initSelection: function(element, callback) {
151 callback(initialData);
151 callback(initialData);
152 },
152 },
153 formatResult: formatResult,
153 formatResult: formatResult,
154 formatSelection: formatSelection
154 formatSelection: formatSelection
155 });
155 });
156
156
157 };
157 };
158
158
159 select2FileHistorySwitcher('#file_refs_filter', loadUrl, initialCommitData);
159 select2FileHistorySwitcher('#file_refs_filter', loadUrl, initialCommitData);
160
160
161 $('#file_refs_filter').on('change', function(e) {
161 $('#file_refs_filter').on('change', function(e) {
162 var data = $('#file_refs_filter').select2('data');
162 var data = $('#file_refs_filter').select2('data');
163 var commit_id = data.id;
163 var commit_id = data.id;
164
164
165 if ("${c.annotate}" === "True") {
165 if ("${c.annotate}" === "True") {
166 var url = pyroutes.url('repo_files:annotated',
166 var url = pyroutes.url('repo_files:annotated',
167 {'repo_name': templateContext.repo_name,
167 {'repo_name': templateContext.repo_name,
168 'commit_id': commit_id, 'f_path': state.f_path});
168 'commit_id': commit_id, 'f_path': state.f_path});
169 } else {
169 } else {
170 var url = pyroutes.url('repo_files',
170 var url = pyroutes.url('repo_files',
171 {'repo_name': templateContext.repo_name,
171 {'repo_name': templateContext.repo_name,
172 'commit_id': commit_id, 'f_path': state.f_path});
172 'commit_id': commit_id, 'f_path': state.f_path});
173 }
173 }
174 window.location = url;
174 window.location = url;
175
175
176 });
176 });
177
177
178 // load file short history
178 // load file short history
179 $('#file_history_overview').on('click', function(e) {
179 $('#file_history_overview').on('click', function(e) {
180 e.preventDefault();
180 e.preventDefault();
181 path = state.f_path;
181 path = state.f_path;
182 if (path.indexOf("#") >= 0) {
182 if (path.indexOf("#") >= 0) {
183 path = path.slice(0, path.indexOf("#"));
183 path = path.slice(0, path.indexOf("#"));
184 }
184 }
185 var url = pyroutes.url('repo_commits_file',
185 var url = pyroutes.url('repo_commits_file',
186 {'repo_name': templateContext.repo_name,
186 {'repo_name': templateContext.repo_name,
187 'commit_id': state.commit_id, 'f_path': path, 'limit': 6});
187 'commit_id': state.commit_id, 'f_path': path, 'limit': 6});
188 $('#file_history_container').show();
188 $('#file_history_container').show();
189 $('#file_history_container').html('<div class="file-history-inner">{0}</div>'.format(_gettext('Loading ...')));
189 $('#file_history_container').html('<div class="file-history-inner">{0}</div>'.format(_gettext('Loading ...')));
190
190
191 $.pjax({
191 $.pjax({
192 url: url,
192 url: url,
193 container: '#file_history_container',
193 container: '#file_history_container',
194 push: false,
194 push: false,
195 timeout: 5000
195 timeout: 5000
196 });
196 });
197 });
197 });
198
198
199 };
199 };
200
200
201 var initTreeJS = function () {
201 var initTreeJS = function () {
202 var state = getFileState();
202 var state = getFileState();
203 getFilesMetadata();
203 getFilesMetadata();
204
204
205 // fuzzy file filter
205 // fuzzy file filter
206 fileBrowserListeners(state.node_list_url, state.url_base);
206 fileBrowserListeners(state.node_list_url, state.url_base);
207
207
208 // switch to widget
208 // switch to widget
209 var initialCommitData = {
209 var initialCommitData = {
210 at_ref: atRef,
210 at_ref: atRef,
211 id: null,
211 id: null,
212 text: '${c.commit.raw_id}',
212 text: '${c.commit.raw_id}',
213 type: 'sha',
213 type: 'sha',
214 raw_id: '${c.commit.raw_id}',
214 raw_id: '${c.commit.raw_id}',
215 idx: ${c.commit.idx},
215 idx: ${c.commit.idx},
216 files_url: null,
216 files_url: null,
217 };
217 };
218
218
219 // check if we have ref info.
219 // check if we have ref info.
220 var selectedRef = fileTreeRefs[atRef];
220 var selectedRef = fileTreeRefs[atRef];
221 if (selectedRef !== undefined) {
221 if (selectedRef !== undefined) {
222 $.extend(initialCommitData, selectedRef)
222 $.extend(initialCommitData, selectedRef)
223 }
223 }
224
224
225 var loadUrl = pyroutes.url('repo_refs_data', {'repo_name': templateContext.repo_name});
225 var loadUrl = pyroutes.url('repo_refs_data', {'repo_name': templateContext.repo_name});
226 var cacheKey = '__ALL_FILE_REFS__';
226 var cacheKey = '__ALL_FILE_REFS__';
227 var cachedDataSource = {};
227 var cachedDataSource = {};
228
228
229 var loadRefsData = function (query) {
229 var loadRefsData = function (query) {
230 $.ajax({
230 $.ajax({
231 url: loadUrl,
231 url: loadUrl,
232 data: {},
232 data: {},
233 dataType: 'json',
233 dataType: 'json',
234 type: 'GET',
234 type: 'GET',
235 success: function (data) {
235 success: function (data) {
236 cachedDataSource[cacheKey] = data;
236 cachedDataSource[cacheKey] = data;
237 query.callback({results: data.results});
237 query.callback({results: data.results});
238 }
238 }
239 });
239 });
240 };
240 };
241
241
242 var feedRefsData = function (query, cachedData) {
242 var feedRefsData = function (query, cachedData) {
243 var data = {results: []};
243 var data = {results: []};
244 //filter results
244 //filter results
245 $.each(cachedData.results, function () {
245 $.each(cachedData.results, function () {
246 var section = this.text;
246 var section = this.text;
247 var children = [];
247 var children = [];
248 $.each(this.children, function () {
248 $.each(this.children, function () {
249 if (query.term.length === 0 || this.text.toUpperCase().indexOf(query.term.toUpperCase()) >= 0) {
249 if (query.term.length === 0 || this.text.toUpperCase().indexOf(query.term.toUpperCase()) >= 0) {
250 children.push(this)
250 children.push(this)
251 }
251 }
252 });
252 });
253 data.results.push({
253 data.results.push({
254 'text': section,
254 'text': section,
255 'children': children
255 'children': children
256 })
256 })
257 });
257 });
258
258
259 //push the typed in commit idx
259 //push the typed in commit idx
260 if (!isNaN(query.term)) {
260 if (!isNaN(query.term)) {
261 var files_url = pyroutes.url('repo_files',
261 var files_url = pyroutes.url('repo_files',
262 {'repo_name': templateContext.repo_name,
262 {'repo_name': templateContext.repo_name,
263 'commit_id': query.term, 'f_path': state.f_path});
263 'commit_id': query.term, 'f_path': state.f_path});
264
264
265 data.results.push({
265 data.results.push({
266 'text': _gettext('go to numeric commit'),
266 'text': _gettext('go to numeric commit'),
267 'children': [{
267 'children': [{
268 at_ref: null,
268 at_ref: null,
269 id: null,
269 id: null,
270 text: 'r{0}'.format(query.term),
270 text: 'r{0}'.format(query.term),
271 type: 'sha',
271 type: 'sha',
272 raw_id: query.term,
272 raw_id: query.term,
273 idx: query.term,
273 idx: query.term,
274 files_url: files_url,
274 files_url: files_url,
275 }]
275 }]
276 });
276 });
277 }
277 }
278 query.callback(data);
278 query.callback(data);
279 };
279 };
280
280
281 var select2RefFileSwitcher = function (targetElement, loadUrl, initialData) {
281 var select2RefFileSwitcher = function (targetElement, loadUrl, initialData) {
282 var formatResult = function (result, container, query) {
282 var formatResult = function (result, container, query) {
283 return formatSelect2SelectionRefs(result);
283 return formatSelect2SelectionRefs(result);
284 };
284 };
285
285
286 var formatSelection = function (data, container) {
286 var formatSelection = function (data, container) {
287 var commit_ref = data;
287 var commit_ref = data;
288
288
289 var tmpl = '';
289 var tmpl = '';
290 if (commit_ref.type === 'sha') {
290 if (commit_ref.type === 'sha') {
291 tmpl = (commit_ref.raw_id || "").substr(0,8);
291 tmpl = (commit_ref.raw_id || "").substr(0,8);
292 } else if (commit_ref.type === 'branch') {
292 } else if (commit_ref.type === 'branch') {
293 tmpl = tmpl.concat('<i class="icon-branch"></i> ');
293 tmpl = tmpl.concat('<i class="icon-branch"></i> ');
294 tmpl = tmpl.concat(escapeHtml(commit_ref.text));
294 tmpl = tmpl.concat(escapeHtml(commit_ref.text));
295 } else if (commit_ref.type === 'tag') {
295 } else if (commit_ref.type === 'tag') {
296 tmpl = tmpl.concat('<i class="icon-tag"></i> ');
296 tmpl = tmpl.concat('<i class="icon-tag"></i> ');
297 tmpl = tmpl.concat(escapeHtml(commit_ref.text));
297 tmpl = tmpl.concat(escapeHtml(commit_ref.text));
298 } else if (commit_ref.type === 'book') {
298 } else if (commit_ref.type === 'book') {
299 tmpl = tmpl.concat('<i class="icon-bookmark"></i> ');
299 tmpl = tmpl.concat('<i class="icon-bookmark"></i> ');
300 tmpl = tmpl.concat(escapeHtml(commit_ref.text));
300 tmpl = tmpl.concat(escapeHtml(commit_ref.text));
301 }
301 }
302
302
303 var idx = commit_ref.idx || 0;
303 var idx = commit_ref.idx || 0;
304 if (idx !== 0) {
304 if (idx !== 0) {
305 tmpl = tmpl.concat('<span class="select-index-number">r{0}</span>'.format(idx));
305 tmpl = tmpl.concat('<span class="select-index-number">r{0}</span>'.format(idx));
306 }
306 }
307 return tmpl
307 return tmpl
308 };
308 };
309
309
310 $(targetElement).select2({
310 $(targetElement).select2({
311 dropdownAutoWidth: true,
311 dropdownAutoWidth: true,
312 width: "resolve",
312 width: "resolve",
313 containerCssClass: "drop-menu",
313 containerCssClass: "drop-menu",
314 dropdownCssClass: "drop-menu-dropdown",
314 dropdownCssClass: "drop-menu-dropdown",
315 query: function(query) {
315 query: function(query) {
316
316
317 var cachedData = cachedDataSource[cacheKey];
317 var cachedData = cachedDataSource[cacheKey];
318 if (cachedData) {
318 if (cachedData) {
319 feedRefsData(query, cachedData)
319 feedRefsData(query, cachedData)
320 } else {
320 } else {
321 loadRefsData(query)
321 loadRefsData(query)
322 }
322 }
323 },
323 },
324 initSelection: function(element, callback) {
324 initSelection: function(element, callback) {
325 callback(initialData);
325 callback(initialData);
326 },
326 },
327 formatResult: formatResult,
327 formatResult: formatResult,
328 formatSelection: formatSelection
328 formatSelection: formatSelection
329 });
329 });
330
330
331 };
331 };
332
332
333 select2RefFileSwitcher('#refs_filter', loadUrl, initialCommitData);
333 select2RefFileSwitcher('#refs_filter', loadUrl, initialCommitData);
334
334
335 $('#refs_filter').on('change', function(e) {
335 $('#refs_filter').on('change', function(e) {
336 var data = $('#refs_filter').select2('data');
336 var data = $('#refs_filter').select2('data');
337 window.location = data.files_url
337 window.location = data.files_url
338 });
338 });
339
339
340 };
340 };
341
341
342 $(document).ready(function() {
342 $(document).ready(function() {
343 timeagoActivate();
343 timeagoActivate();
344
344
345 if ($('#trimmed_message_box').height() < 50) {
345 if ($('#trimmed_message_box').height() < 50) {
346 $('#message_expand').hide();
346 $('#message_expand').hide();
347 }
347 }
348
348
349 $('#message_expand').on('click', function(e) {
349 $('#message_expand').on('click', function(e) {
350 $('#trimmed_message_box').css('max-height', 'none');
350 $('#trimmed_message_box').css('max-height', 'none');
351 $(this).hide();
351 $(this).hide();
352 });
352 });
353
353
354 if (fileSourcePage) {
354 if (fileSourcePage) {
355 initFileJS()
355 initFileJS()
356 } else {
356 } else {
357 initTreeJS()
357 initTreeJS()
358 }
358 }
359
359
360 var search_GET = "${request.GET.get('search','')}";
360 var search_GET = "${request.GET.get('search','')}";
361 if (search_GET === "1") {
361 if (search_GET === "1") {
362 NodeFilter.initFilter();
362 NodeFilter.initFilter();
363 NodeFilter.focus();
363 NodeFilter.focus();
364 }
364 }
365 });
365 });
366
366
367 </script>
367 </script>
368
368
369 </%def> No newline at end of file
369 </%def>
@@ -1,114 +1,114 b''
1 <%inherit file="/base/base.mako"/>
1 <%inherit file="/base/base.mako"/>
2
2
3 <%def name="title()">
3 <%def name="title()">
4 ${_('{} Files Add').format(c.repo_name)}
4 ${_('{} Files Add').format(c.repo_name)}
5 %if c.rhodecode_name:
5 %if c.rhodecode_name:
6 &middot; ${h.branding(c.rhodecode_name)}
6 &middot; ${h.branding(c.rhodecode_name)}
7 %endif
7 %endif
8 </%def>
8 </%def>
9
9
10 <%def name="menu_bar_nav()">
10 <%def name="menu_bar_nav()">
11 ${self.menu_items(active='repositories')}
11 ${self.menu_items(active='repositories')}
12 </%def>
12 </%def>
13
13
14 <%def name="breadcrumbs_links()"></%def>
14 <%def name="breadcrumbs_links()"></%def>
15
15
16 <%def name="menu_bar_subnav()">
16 <%def name="menu_bar_subnav()">
17 ${self.repo_menu(active='files')}
17 ${self.repo_menu(active='files')}
18 </%def>
18 </%def>
19
19
20 <%def name="main()">
20 <%def name="main()">
21
21
22 <div class="box">
22 <div class="box">
23
23
24 <div class="edit-file-title">
24 <div class="edit-file-title">
25 <span class="title-heading">${_('Add new file')} @ <code>${h.show_id(c.commit)}</code></span>
25 <span class="title-heading">${_('Add new file')} @ <code>${h.show_id(c.commit)}</code></span>
26 % if c.commit.branch:
26 % if c.commit.branch:
27 <span class="tag branchtag">
27 <span class="tag branchtag">
28 <i class="icon-branch"></i> ${c.commit.branch}
28 <i class="icon-branch"></i> ${c.commit.branch}
29 </span>
29 </span>
30 % endif
30 % endif
31 </div>
31 </div>
32
32
33 ${h.secure_form(h.route_path('repo_files_create_file', repo_name=c.repo_name, commit_id=c.commit.raw_id, f_path=c.f_path), id='eform', request=request)}
33 ${h.secure_form(h.route_path('repo_files_create_file', repo_name=c.repo_name, commit_id=c.commit.raw_id, f_path=c.f_path), id='eform', request=request)}
34 <div class="edit-file-fieldset">
34 <div class="edit-file-fieldset">
35 <div class="path-items">
35 <div class="path-items">
36 <ul>
36 <ul>
37 <li class="breadcrumb-path">
37 <li class="breadcrumb-path">
38 <div>
38 <div>
39 <a href="${h.route_path('repo_files', repo_name=c.repo_name, commit_id=c.commit.raw_id, f_path='')}"><i class="icon-home"></i></a> /
39 <a href="${h.route_path('repo_files', repo_name=c.repo_name, commit_id=c.commit.raw_id, f_path='')}"><i class="icon-home"></i></a> /
40 <a href="${h.route_path('repo_files', repo_name=c.repo_name, commit_id=c.commit.raw_id, f_path=c.f_path)}">${c.f_path}</a> ${('/' if c.f_path else '')}
40 <a href="${h.route_path('repo_files', repo_name=c.repo_name, commit_id=c.commit.raw_id, f_path=c.f_path)}">${c.f_path}</a> ${('/' if c.f_path else '')}
41 </div>
41 </div>
42 </li>
42 </li>
43 <li class="location-path">
43 <li class="location-path">
44 <input class="file-name-input input-small" type="text" value="" name="filename" id="filename" placeholder="${_('Filename e.g example.py, or docs/readme.md')}">
44 <input class="file-name-input input-small" type="text" value="" name="filename" id="filename" placeholder="${_('Filename e.g example.py, or docs/readme.md')}">
45 </li>
45 </li>
46 </ul>
46 </ul>
47 </div>
47 </div>
48
48
49 </div>
49 </div>
50
50
51 <div class="table">
51 <div class="table">
52 <div id="files_data">
52 <div>
53
53
54 <div id="codeblock" class="codeblock">
54 <div id="codeblock" class="codeblock">
55 <div class="editor-items">
55 <div class="editor-items">
56 <div class="editor-action active show-editor pull-left" onclick="fileEditor.showEditor(); return false">
56 <div class="editor-action active show-editor pull-left" onclick="fileEditor.showEditor(); return false">
57 ${_('Edit')}
57 ${_('Edit')}
58 </div>
58 </div>
59
59
60 <div class="editor-action show-preview pull-left" onclick="fileEditor.showPreview(); return false">
60 <div class="editor-action show-preview pull-left" onclick="fileEditor.showPreview(); return false">
61 ${_('Preview')}
61 ${_('Preview')}
62 </div>
62 </div>
63
63
64 <div class="pull-right">
64 <div class="pull-right">
65 ${h.dropdownmenu('line_wrap', 'off', [('on', _('Line wraps on')), ('off', _('line wraps off'))], extra_classes=['last-item'])}
65 ${h.dropdownmenu('line_wrap', 'off', [('on', _('Line wraps on')), ('off', _('line wraps off'))], extra_classes=['last-item'])}
66 </div>
66 </div>
67 <div class="pull-right">
67 <div class="pull-right">
68 ${h.dropdownmenu('set_mode','plain',[('plain', _('plain'))], enable_filter=True)}
68 ${h.dropdownmenu('set_mode','plain',[('plain', _('plain'))], enable_filter=True)}
69 </div>
69 </div>
70 </div>
70 </div>
71
71
72 <div id="editor_container">
72 <div id="editor_container">
73 <pre id="editor_pre"></pre>
73 <pre id="editor_pre"></pre>
74 <textarea id="editor" name="content" ></textarea>
74 <textarea id="editor" name="content" ></textarea>
75 <div id="editor_preview"></div>
75 <div id="editor_preview"></div>
76 </div>
76 </div>
77 </div>
77 </div>
78 </div>
78 </div>
79 </div>
79 </div>
80
80
81 <div class="edit-file-fieldset">
81 <div class="edit-file-fieldset">
82 <div class="fieldset">
82 <div class="fieldset">
83 <div class="message">
83 <div class="message">
84 <textarea id="commit" name="message" placeholder="${c.default_message}"></textarea>
84 <textarea id="commit" name="message" placeholder="${c.default_message}"></textarea>
85 </div>
85 </div>
86 </div>
86 </div>
87 <div class="pull-left">
87 <div class="pull-left">
88 ${h.submit('commit_btn',_('Commit changes'), class_="btn btn-small btn-success")}
88 ${h.submit('commit_btn',_('Commit changes'), class_="btn btn-small btn-success")}
89 </div>
89 </div>
90 </div>
90 </div>
91 ${h.end_form()}
91 ${h.end_form()}
92 </div>
92 </div>
93
93
94 <script type="text/javascript">
94 <script type="text/javascript">
95
95
96 $(document).ready(function () {
96 $(document).ready(function () {
97 var modes_select = $('#set_mode');
97 var modes_select = $('#set_mode');
98 var filename_selector = '#filename';
98 var filename_selector = '#filename';
99 fillCodeMirrorOptions(modes_select);
99 fillCodeMirrorOptions(modes_select);
100
100
101 fileEditor = new FileEditor('#editor');
101 fileEditor = new FileEditor('#editor');
102
102
103 // on change of select field set mode
103 // on change of select field set mode
104 setCodeMirrorModeFromSelect(modes_select, filename_selector, fileEditor.cm, null);
104 setCodeMirrorModeFromSelect(modes_select, filename_selector, fileEditor.cm, null);
105
105
106 // on entering the new filename set mode, from given extension
106 // on entering the new filename set mode, from given extension
107 setCodeMirrorModeFromInput(modes_select, filename_selector, fileEditor.cm, null);
107 setCodeMirrorModeFromInput(modes_select, filename_selector, fileEditor.cm, null);
108
108
109 $('#filename').focus();
109 $('#filename').focus();
110
110
111 });
111 });
112
112
113 </script>
113 </script>
114 </%def>
114 </%def>
@@ -1,124 +1,124 b''
1 <%inherit file="/base/base.mako"/>
1 <%inherit file="/base/base.mako"/>
2
2
3 <%def name="title()">
3 <%def name="title()">
4 ${_('{} Files Edit').format(c.repo_name)}
4 ${_('{} Files Edit').format(c.repo_name)}
5 %if c.rhodecode_name:
5 %if c.rhodecode_name:
6 &middot; ${h.branding(c.rhodecode_name)}
6 &middot; ${h.branding(c.rhodecode_name)}
7 %endif
7 %endif
8 </%def>
8 </%def>
9
9
10 <%def name="menu_bar_nav()">
10 <%def name="menu_bar_nav()">
11 ${self.menu_items(active='repositories')}
11 ${self.menu_items(active='repositories')}
12 </%def>
12 </%def>
13
13
14 <%def name="breadcrumbs_links()"></%def>
14 <%def name="breadcrumbs_links()"></%def>
15
15
16 <%def name="menu_bar_subnav()">
16 <%def name="menu_bar_subnav()">
17 ${self.repo_menu(active='files')}
17 ${self.repo_menu(active='files')}
18 </%def>
18 </%def>
19
19
20 <%def name="main()">
20 <%def name="main()">
21
21
22 <div class="box">
22 <div class="box">
23
23
24 <div class="edit-file-title">
24 <div class="edit-file-title">
25 <span class="title-heading">${_('Edit file')} @ <code>${h.show_id(c.commit)}</code></span>
25 <span class="title-heading">${_('Edit file')} @ <code>${h.show_id(c.commit)}</code></span>
26 % if c.commit.branch:
26 % if c.commit.branch:
27 <span class="tag branchtag">
27 <span class="tag branchtag">
28 <i class="icon-branch"></i> ${c.commit.branch}
28 <i class="icon-branch"></i> ${c.commit.branch}
29 </span>
29 </span>
30 % endif
30 % endif
31 </div>
31 </div>
32
32
33 ${h.secure_form(h.route_path('repo_files_update_file', repo_name=c.repo_name, commit_id=c.commit.raw_id, f_path=c.f_path), id='eform', request=request)}
33 ${h.secure_form(h.route_path('repo_files_update_file', repo_name=c.repo_name, commit_id=c.commit.raw_id, f_path=c.f_path), id='eform', request=request)}
34 <div class="edit-file-fieldset">
34 <div class="edit-file-fieldset">
35 <div class="path-items">
35 <div class="path-items">
36 <ul>
36 <ul>
37 <li class="breadcrumb-path">
37 <li class="breadcrumb-path">
38 <div>
38 <div>
39 <a href="${h.route_path('repo_files', repo_name=c.repo_name, commit_id=c.commit.raw_id, f_path='')}"><i class="icon-home"></i></a> /
39 <a href="${h.route_path('repo_files', repo_name=c.repo_name, commit_id=c.commit.raw_id, f_path='')}"><i class="icon-home"></i></a> /
40 <a href="${h.route_path('repo_files', repo_name=c.repo_name, commit_id=c.commit.raw_id, f_path=c.file.dir_path)}">${c.file.dir_path}</a> ${('/' if c.file.dir_path else '')}
40 <a href="${h.route_path('repo_files', repo_name=c.repo_name, commit_id=c.commit.raw_id, f_path=c.file.dir_path)}">${c.file.dir_path}</a> ${('/' if c.file.dir_path else '')}
41 </div>
41 </div>
42 </li>
42 </li>
43 <li class="location-path">
43 <li class="location-path">
44 <input type="hidden" value="${c.f_path}" name="root_path">
44 <input type="hidden" value="${c.f_path}" name="root_path">
45 <input class="file-name-input input-small" type="text" value="${c.file.name}" name="filename" id="filename" placeholder="${_('Filename e.g example.py, or docs/readme.md')}">
45 <input class="file-name-input input-small" type="text" value="${c.file.name}" name="filename" id="filename" placeholder="${_('Filename e.g example.py, or docs/readme.md')}">
46 </li>
46 </li>
47 </ul>
47 </ul>
48 </div>
48 </div>
49
49
50 </div>
50 </div>
51
51
52 <div class="table">
52 <div class="table">
53 <div id="files_data">
53 <div>
54
54
55 <div id="codeblock" class="codeblock">
55 <div id="codeblock" class="codeblock">
56 <div class="editor-items">
56 <div class="editor-items">
57 <div class="editor-action active show-editor pull-left" onclick="fileEditor.showEditor(); return false">
57 <div class="editor-action active show-editor pull-left" onclick="fileEditor.showEditor(); return false">
58 ${_('Edit')}
58 ${_('Edit')}
59 </div>
59 </div>
60
60
61 <div class="editor-action show-preview pull-left" onclick="fileEditor.showPreview(); return false">
61 <div class="editor-action show-preview pull-left" onclick="fileEditor.showPreview(); return false">
62 ${_('Preview')}
62 ${_('Preview')}
63 </div>
63 </div>
64
64
65 <div class="pull-right">
65 <div class="pull-right">
66 ${h.dropdownmenu('line_wrap', 'off', [('on', _('Line wraps on')), ('off', _('line wraps off')),])}
66 ${h.dropdownmenu('line_wrap', 'off', [('on', _('Line wraps on')), ('off', _('line wraps off')),])}
67 </div>
67 </div>
68 <div class="pull-right">
68 <div class="pull-right">
69 ${h.dropdownmenu('set_mode','plain',[('plain', _('plain'))],enable_filter=True)}
69 ${h.dropdownmenu('set_mode','plain',[('plain', _('plain'))],enable_filter=True)}
70 </div>
70 </div>
71 </div>
71 </div>
72
72
73 <div id="editor_container">
73 <div id="editor_container">
74 <pre id="editor_pre"></pre>
74 <pre id="editor_pre"></pre>
75 <textarea id="editor" name="content" >${h.escape(c.file.content)|n}</textarea>
75 <textarea id="editor" name="content" >${h.escape(c.file.content)|n}</textarea>
76 <div id="editor_preview" ></div>
76 <div id="editor_preview" ></div>
77 </div>
77 </div>
78 </div>
78 </div>
79 </div>
79 </div>
80 </div>
80 </div>
81
81
82 <div class="edit-file-fieldset">
82 <div class="edit-file-fieldset">
83 <div class="fieldset">
83 <div class="fieldset">
84 <div class="message">
84 <div class="message">
85 <textarea id="commit" name="message" placeholder="${c.default_message}"></textarea>
85 <textarea id="commit" name="message" placeholder="${c.default_message}"></textarea>
86 </div>
86 </div>
87 </div>
87 </div>
88 <div class="pull-left">
88 <div class="pull-left">
89 ${h.submit('commit_btn',_('Commit changes'), class_="btn btn-small btn-success")}
89 ${h.submit('commit_btn',_('Commit changes'), class_="btn btn-small btn-success")}
90 </div>
90 </div>
91 </div>
91 </div>
92 ${h.end_form()}
92 ${h.end_form()}
93 </div>
93 </div>
94
94
95 <script type="text/javascript">
95 <script type="text/javascript">
96
96
97 $(document).ready(function() {
97 $(document).ready(function() {
98 var modes_select = $('#set_mode');
98 var modes_select = $('#set_mode');
99 var filename_selector = '#filename';
99 var filename_selector = '#filename';
100 fillCodeMirrorOptions(modes_select);
100 fillCodeMirrorOptions(modes_select);
101
101
102 fileEditor = new FileEditor('#editor');
102 fileEditor = new FileEditor('#editor');
103
103
104 // try to detect the mode based on the file we edit
104 // try to detect the mode based on the file we edit
105 var detected_mode = detectCodeMirrorMode("${c.file.name}", "${c.file.mimetype}");
105 var detected_mode = detectCodeMirrorMode("${c.file.name}", "${c.file.mimetype}");
106
106
107 if (detected_mode) {
107 if (detected_mode) {
108 setCodeMirrorMode(fileEditor.cm, detected_mode);
108 setCodeMirrorMode(fileEditor.cm, detected_mode);
109
109
110 var mimetype = $(modes_select).find("option[mode={0}]".format(detected_mode)).val();
110 var mimetype = $(modes_select).find("option[mode={0}]".format(detected_mode)).val();
111 $(modes_select).select2("val", mimetype).trigger('change');
111 $(modes_select).select2("val", mimetype).trigger('change');
112 }
112 }
113
113
114 // on change of select field set mode
114 // on change of select field set mode
115 setCodeMirrorModeFromSelect(modes_select, filename_selector, fileEditor.cm, null);
115 setCodeMirrorModeFromSelect(modes_select, filename_selector, fileEditor.cm, null);
116
116
117 // on entering the new filename set mode, from given extension
117 // on entering the new filename set mode, from given extension
118 setCodeMirrorModeFromInput(modes_select, filename_selector, fileEditor.cm, null);
118 setCodeMirrorModeFromInput(modes_select, filename_selector, fileEditor.cm, null);
119
119
120 });
120 });
121
121
122
122
123 </script>
123 </script>
124 </%def>
124 </%def>
@@ -1,61 +1,63 b''
1 <%namespace name="base" file="/base/base.mako"/>
1 <%namespace name="base" file="/base/base.mako"/>
2 <%namespace name="file_base" file="/files/base.mako"/>
2 <%namespace name="file_base" file="/files/base.mako"/>
3
3
4 <div class="summary">
4 <div class="summary">
5 <div class="fieldset">
5 <div class="fieldset">
6 <div class="left-content">
6 <div class="left-content">
7
7
8 <div class="left-content-avatar">
8 <div class="left-content-avatar">
9 ${base.gravatar(c.file_last_commit.author_email, 30)}
9 ${base.gravatar(c.file_last_commit.author_email, 30)}
10 </div>
10 </div>
11
11
12 <div class="left-content-message">
12 <div class="left-content-message">
13 <div class="fieldset collapsable-content no-hide" data-toggle="summary-details">
13 <div class="fieldset collapsable-content no-hide" data-toggle="summary-details">
14 <div class="commit truncate-wrap">${h.urlify_commit_message(h.chop_at_smart(c.commit.message, '\n', suffix_if_chopped='...'), c.repo_name)}</div>
14 <div class="commit truncate-wrap">${h.urlify_commit_message(h.chop_at_smart(c.commit.message, '\n', suffix_if_chopped='...'), c.repo_name)}</div>
15 </div>
15 </div>
16
16
17 <div class="fieldset collapsable-content" data-toggle="summary-details">
17 <div class="fieldset collapsable-content" data-toggle="summary-details">
18 <div class="commit">${h.urlify_commit_message(c.commit.message,c.repo_name)}</div>
18 <div class="commit">${h.urlify_commit_message(c.commit.message,c.repo_name)}</div>
19 </div>
19 </div>
20
20
21 <div class="fieldset" data-toggle="summary-details">
21 <div class="fieldset" data-toggle="summary-details">
22 <div class="" id="file_authors">
22 <div class="" id="file_authors">
23 ## loads single author, or ALL
23 ## loads single author, or ALL
24 <%include file='file_authors_box.mako'/>
24 <%include file='file_authors_box.mako'/>
25 </div>
25 </div>
26 </div>
26 </div>
27 </div>
27 </div>
28
28
29 <div class="fieldset collapsable-content" data-toggle="summary-details">
29 <div class="fieldset collapsable-content" data-toggle="summary-details">
30 <div class="left-label-summary-files">
30 <div class="left-label-summary-files">
31 <p>${_('File last commit')}</p>
31 <p>${_('File last commit')}</p>
32 <div class="right-label-summary">
32 <div class="right-label-summary">
33 <code><a href="${h.route_path('repo_commit',repo_name=c.repo_name,commit_id=c.file_last_commit.raw_id)}">${h.show_id(c.file_last_commit)}</a></code>
33 <code><a href="${h.route_path('repo_commit',repo_name=c.repo_name,commit_id=c.file_last_commit.raw_id)}">${h.show_id(c.file_last_commit)}</a></code>
34
35 ${file_base.refs(c.file_last_commit)}
34 ${file_base.refs(c.file_last_commit)}
36 </div>
35 </div>
37 </div>
36 </div>
38 </div>
37 </div>
39 </div>
38 </div>
40
39
41 <div class="right-content">
40 <div class="right-content">
42 <div data-toggle="summary-details">
41 <div data-toggle="summary-details">
43 <div class="tags commit-info tags-main">
42 <div class="tags tags-main">
44 <code><a href="${h.route_path('repo_commit',repo_name=c.repo_name,commit_id=c.commit.raw_id)}">${h.show_id(c.commit)}</a></code>
43 <code>
44 <a href="${h.route_path('repo_commit',repo_name=c.repo_name,commit_id=c.commit.raw_id)}">${h.show_id(c.commit)}</a>
45 </code>
46 <i class="tooltip icon-clipboard clipboard-action" data-clipboard-text="${c.commit.raw_id}" title="${_('Copy the full commit id')}"></i>
45 ${file_base.refs(c.commit)}
47 ${file_base.refs(c.commit)}
46 </div>
48 </div>
47 </div>
49 </div>
48 </div>
50 </div>
49
51
50 <div class="clear-fix"></div>
52 <div class="clear-fix"></div>
51
53
52 <div class="btn-collapse" data-toggle="summary-details">
54 <div class="btn-collapse" data-toggle="summary-details">
53 ${_('Show More')}
55 ${_('Show More')}
54 </div>
56 </div>
55
57
56 </div>
58 </div>
57 </div>
59 </div>
58
60
59 <script>
61 <script>
60 collapsableContent();
62 collapsableContent();
61 </script>
63 </script>
@@ -1,46 +1,47 b''
1 <%namespace name="base" file="/base/base.mako"/>
1 <%namespace name="base" file="/base/base.mako"/>
2 <%namespace name="file_base" file="/files/base.mako"/>
2 <%namespace name="file_base" file="/files/base.mako"/>
3
3
4 <div class="summary">
4 <div class="summary">
5 <div class="fieldset">
5 <div class="fieldset">
6 <div class="left-content">
6 <div class="left-content">
7
7
8 <div class="left-content-avatar">
8 <div class="left-content-avatar">
9 ${base.gravatar(c.commit.author_email, 30)}
9 ${base.gravatar(c.commit.author_email, 30)}
10 </div>
10 </div>
11
11
12 <div class="left-content-message">
12 <div class="left-content-message">
13 <div class="fieldset collapsable-content no-hide" data-toggle="summary-details">
13 <div class="fieldset collapsable-content no-hide" data-toggle="summary-details">
14 <div class="commit truncate-wrap">${h.urlify_commit_message(h.chop_at_smart(c.commit.message, '\n', suffix_if_chopped='...'), c.repo_name)}</div>
14 <div class="commit truncate-wrap">${h.urlify_commit_message(h.chop_at_smart(c.commit.message, '\n', suffix_if_chopped='...'), c.repo_name)}</div>
15 </div>
15 </div>
16
16
17 <div class="fieldset collapsable-content" data-toggle="summary-details">
17 <div class="fieldset collapsable-content" data-toggle="summary-details">
18 <div class="commit">${h.urlify_commit_message(c.commit.message,c.repo_name)}</div>
18 <div class="commit">${h.urlify_commit_message(c.commit.message,c.repo_name)}</div>
19 </div>
19 </div>
20
20
21 <div class="fieldset clear-fix">
21 <div class="fieldset clear-fix">
22 <span class="commit-author">${h.link_to_user(c.commit.author)}</span><span class="commit-date"> - ${h.age_component(c.commit.date)}</span>
22 <span class="commit-author">${h.link_to_user(c.commit.author)}</span><span class="commit-date"> - ${h.age_component(c.commit.date)}</span>
23 </div>
23 </div>
24 </div>
24 </div>
25 </div>
25 </div>
26
26
27 <div class="right-content">
27 <div class="right-content">
28 <div class="tags commit-info">
28 <div class="tags">
29 <code>
29 <code>
30 <a href="${h.route_path('repo_commit',repo_name=c.repo_name,commit_id=c.commit.raw_id)}">${h.show_id(c.commit)}</a>
30 <a href="${h.route_path('repo_commit',repo_name=c.repo_name,commit_id=c.commit.raw_id)}">${h.show_id(c.commit)}</a>
31 </code>
31 </code>
32
32
33 <i class="tooltip icon-clipboard clipboard-action" data-clipboard-text="${c.commit.raw_id}" title="${_('Copy the full commit id')}"></i>
33 ${file_base.refs(c.commit)}
34 ${file_base.refs(c.commit)}
34 </div>
35 </div>
35 </div>
36 </div>
36
37
37 <div class="clear-fix"></div>
38 <div class="clear-fix"></div>
38
39
39 <div class="btn-collapse" data-toggle="summary-details">
40 <div class="btn-collapse" data-toggle="summary-details">
40 ${_('Show More')}
41 ${_('Show More')}
41 </div>
42 </div>
42 </div>
43 </div>
43 </div>
44 </div>
44 <script>
45 <script>
45 collapsableContent();
46 collapsableContent();
46 </script>
47 </script>
@@ -1,211 +1,211 b''
1 <%inherit file="/base/base.mako"/>
1 <%inherit file="/base/base.mako"/>
2
2
3 <%def name="title()">
3 <%def name="title()">
4 ${_('{} Files Upload').format(c.repo_name)}
4 ${_('{} Files Upload').format(c.repo_name)}
5 %if c.rhodecode_name:
5 %if c.rhodecode_name:
6 &middot; ${h.branding(c.rhodecode_name)}
6 &middot; ${h.branding(c.rhodecode_name)}
7 %endif
7 %endif
8 </%def>
8 </%def>
9
9
10 <%def name="menu_bar_nav()">
10 <%def name="menu_bar_nav()">
11 ${self.menu_items(active='repositories')}
11 ${self.menu_items(active='repositories')}
12 </%def>
12 </%def>
13
13
14 <%def name="breadcrumbs_links()"></%def>
14 <%def name="breadcrumbs_links()"></%def>
15
15
16 <%def name="menu_bar_subnav()">
16 <%def name="menu_bar_subnav()">
17 ${self.repo_menu(active='files')}
17 ${self.repo_menu(active='files')}
18 </%def>
18 </%def>
19
19
20 <%def name="main()">
20 <%def name="main()">
21
21
22 <div class="box">
22 <div class="box">
23 ## Template for uploads
23 ## Template for uploads
24 <div style="display: none" id="tpl-dropzone">
24 <div style="display: none" id="tpl-dropzone">
25 <div class="dz-preview dz-file-preview">
25 <div class="dz-preview dz-file-preview">
26 <div class="dz-details">
26 <div class="dz-details">
27
27
28 <div class="dz-filename">
28 <div class="dz-filename">
29 <span data-dz-name></span>
29 <span data-dz-name></span>
30 </div>
30 </div>
31 <div class="dz-filename-size">
31 <div class="dz-filename-size">
32 <span class="dz-size" data-dz-size></span>
32 <span class="dz-size" data-dz-size></span>
33
33
34 </div>
34 </div>
35
35
36 <div class="dz-sending" style="display: none">${_('Uploading...')}</div>
36 <div class="dz-sending" style="display: none">${_('Uploading...')}</div>
37 <div class="dz-response" style="display: none">
37 <div class="dz-response" style="display: none">
38 ${_('Uploaded')} 100%
38 ${_('Uploaded')} 100%
39 </div>
39 </div>
40
40
41 </div>
41 </div>
42 <div class="dz-progress">
42 <div class="dz-progress">
43 <span class="dz-upload" data-dz-uploadprogress></span>
43 <span class="dz-upload" data-dz-uploadprogress></span>
44 </div>
44 </div>
45
45
46 <div class="dz-error-message">
46 <div class="dz-error-message">
47 </div>
47 </div>
48 </div>
48 </div>
49 </div>
49 </div>
50
50
51 <div class="edit-file-title">
51 <div class="edit-file-title">
52 <span class="title-heading">${_('Upload new file')} @ <code>${h.show_id(c.commit)}</code></span>
52 <span class="title-heading">${_('Upload new file')} @ <code>${h.show_id(c.commit)}</code></span>
53 % if c.commit.branch:
53 % if c.commit.branch:
54 <span class="tag branchtag">
54 <span class="tag branchtag">
55 <i class="icon-branch"></i> ${c.commit.branch}
55 <i class="icon-branch"></i> ${c.commit.branch}
56 </span>
56 </span>
57 % endif
57 % endif
58 </div>
58 </div>
59
59
60 <% form_url = h.route_path('repo_files_upload_file', repo_name=c.repo_name, commit_id=c.commit.raw_id, f_path=c.f_path) %>
60 <% form_url = h.route_path('repo_files_upload_file', repo_name=c.repo_name, commit_id=c.commit.raw_id, f_path=c.f_path) %>
61 ##${h.secure_form(form_url, id='eform', enctype="multipart/form-data", request=request)}
61 ##${h.secure_form(form_url, id='eform', enctype="multipart/form-data", request=request)}
62 <div class="edit-file-fieldset">
62 <div class="edit-file-fieldset">
63 <div class="path-items">
63 <div class="path-items">
64 <ul>
64 <ul>
65 <li class="breadcrumb-path">
65 <li class="breadcrumb-path">
66 <div>
66 <div>
67 <a href="${h.route_path('repo_files', repo_name=c.repo_name, commit_id=c.commit.raw_id, f_path='')}"><i class="icon-home"></i></a> /
67 <a href="${h.route_path('repo_files', repo_name=c.repo_name, commit_id=c.commit.raw_id, f_path='')}"><i class="icon-home"></i></a> /
68 <a href="${h.route_path('repo_files', repo_name=c.repo_name, commit_id=c.commit.raw_id, f_path=c.f_path)}">${c.f_path}</a> ${('/' if c.f_path else '')}
68 <a href="${h.route_path('repo_files', repo_name=c.repo_name, commit_id=c.commit.raw_id, f_path=c.f_path)}">${c.f_path}</a> ${('/' if c.f_path else '')}
69 </div>
69 </div>
70 </li>
70 </li>
71 <li class="location-path">
71 <li class="location-path">
72
72
73 </li>
73 </li>
74 </ul>
74 </ul>
75 </div>
75 </div>
76
76
77 </div>
77 </div>
78
78
79 <div class="upload-form table">
79 <div class="upload-form table">
80 <div id="files_data">
80 <div>
81
81
82 <div class="dropzone-wrapper" id="file-uploader">
82 <div class="dropzone-wrapper" id="file-uploader">
83 <div class="dropzone-pure">
83 <div class="dropzone-pure">
84 <div class="dz-message">
84 <div class="dz-message">
85 <i class="icon-upload" style="font-size:36px"></i></br>
85 <i class="icon-upload" style="font-size:36px"></i></br>
86 ${_("Drag'n Drop files here or")} <span class="link">${_('Choose your files')}</span>.<br>
86 ${_("Drag'n Drop files here or")} <span class="link">${_('Choose your files')}</span>.<br>
87 </div>
87 </div>
88 </div>
88 </div>
89
89
90 </div>
90 </div>
91 </div>
91 </div>
92
92
93 </div>
93 </div>
94
94
95 <div class="upload-form edit-file-fieldset">
95 <div class="upload-form edit-file-fieldset">
96 <div class="fieldset">
96 <div class="fieldset">
97 <div class="message">
97 <div class="message">
98 <textarea id="commit" name="message" placeholder="${c.default_message}"></textarea>
98 <textarea id="commit" name="message" placeholder="${c.default_message}"></textarea>
99 </div>
99 </div>
100 </div>
100 </div>
101 <div class="pull-left">
101 <div class="pull-left">
102 ${h.submit('commit_btn',_('Commit changes'), class_="btn btn-small btn-success")}
102 ${h.submit('commit_btn',_('Commit changes'), class_="btn btn-small btn-success")}
103 </div>
103 </div>
104 </div>
104 </div>
105 ##${h.end_form()}
105 ##${h.end_form()}
106
106
107 <div class="file-upload-transaction-wrapper" style="display: none">
107 <div class="file-upload-transaction-wrapper" style="display: none">
108 <div class="file-upload-transaction">
108 <div class="file-upload-transaction">
109 <h3>${_('Commiting...')}</h3>
109 <h3>${_('Commiting...')}</h3>
110 <p>${_('Please wait while the files are being uploaded')}</p>
110 <p>${_('Please wait while the files are being uploaded')}</p>
111 <p class="error" style="display: none">
111 <p class="error" style="display: none">
112
112
113 </p>
113 </p>
114 <i class="icon-spin animate-spin"></i>
114 <i class="icon-spin animate-spin"></i>
115 <p></p>
115 <p></p>
116 </div>
116 </div>
117 </div>
117 </div>
118
118
119 </div>
119 </div>
120
120
121 <script type="text/javascript">
121 <script type="text/javascript">
122
122
123 $(document).ready(function () {
123 $(document).ready(function () {
124
124
125 //see: https://www.dropzonejs.com/#configuration
125 //see: https://www.dropzonejs.com/#configuration
126 myDropzone = new Dropzone("div#file-uploader", {
126 myDropzone = new Dropzone("div#file-uploader", {
127 url: "${form_url}",
127 url: "${form_url}",
128 headers: {"X-CSRF-Token": CSRF_TOKEN},
128 headers: {"X-CSRF-Token": CSRF_TOKEN},
129 paramName: function () {
129 paramName: function () {
130 return "files_upload"
130 return "files_upload"
131 }, // The name that will be used to transfer the file
131 }, // The name that will be used to transfer the file
132 parallelUploads: 20,
132 parallelUploads: 20,
133 maxFiles: 20,
133 maxFiles: 20,
134 uploadMultiple: true,
134 uploadMultiple: true,
135 //chunking: true, // use chunking transfer, not supported at the moment
135 //chunking: true, // use chunking transfer, not supported at the moment
136 //maxFilesize: 2, // in MBs
136 //maxFilesize: 2, // in MBs
137 autoProcessQueue: false, // if false queue will not be processed automatically.
137 autoProcessQueue: false, // if false queue will not be processed automatically.
138 createImageThumbnails: false,
138 createImageThumbnails: false,
139 previewTemplate: document.querySelector('#tpl-dropzone').innerHTML,
139 previewTemplate: document.querySelector('#tpl-dropzone').innerHTML,
140 accept: function (file, done) {
140 accept: function (file, done) {
141 done();
141 done();
142 },
142 },
143 init: function () {
143 init: function () {
144 this.on("addedfile", function (file) {
144 this.on("addedfile", function (file) {
145
145
146 });
146 });
147
147
148 this.on("sending", function (file, xhr, formData) {
148 this.on("sending", function (file, xhr, formData) {
149 formData.append("message", $('#commit').val());
149 formData.append("message", $('#commit').val());
150 $(file.previewElement).find('.dz-sending').show();
150 $(file.previewElement).find('.dz-sending').show();
151 });
151 });
152
152
153 this.on("success", function (file, response) {
153 this.on("success", function (file, response) {
154 $(file.previewElement).find('.dz-sending').hide();
154 $(file.previewElement).find('.dz-sending').hide();
155 $(file.previewElement).find('.dz-response').show();
155 $(file.previewElement).find('.dz-response').show();
156
156
157 if (response.error !== null) {
157 if (response.error !== null) {
158 $('.file-upload-transaction-wrapper .error').html('ERROR: {0}'.format(response.error));
158 $('.file-upload-transaction-wrapper .error').html('ERROR: {0}'.format(response.error));
159 $('.file-upload-transaction-wrapper .error').show();
159 $('.file-upload-transaction-wrapper .error').show();
160 $('.file-upload-transaction-wrapper i').hide()
160 $('.file-upload-transaction-wrapper i').hide()
161 }
161 }
162
162
163 var redirect_url = response.redirect_url || '/';
163 var redirect_url = response.redirect_url || '/';
164 window.location = redirect_url
164 window.location = redirect_url
165
165
166 });
166 });
167
167
168 this.on("error", function (file, errorMessage, xhr) {
168 this.on("error", function (file, errorMessage, xhr) {
169 var error = null;
169 var error = null;
170
170
171 if (xhr !== undefined){
171 if (xhr !== undefined){
172 var httpStatus = xhr.status + " " + xhr.statusText;
172 var httpStatus = xhr.status + " " + xhr.statusText;
173 if (xhr.status >= 500) {
173 if (xhr.status >= 500) {
174 error = httpStatus;
174 error = httpStatus;
175 }
175 }
176 }
176 }
177
177
178 if (error === null) {
178 if (error === null) {
179 error = errorMessage.error || errorMessage || httpStatus;
179 error = errorMessage.error || errorMessage || httpStatus;
180 }
180 }
181
181
182 $(file.previewElement).find('.dz-error-message').html('ERROR: {0}'.format(error));
182 $(file.previewElement).find('.dz-error-message').html('ERROR: {0}'.format(error));
183 });
183 });
184 }
184 }
185 });
185 });
186
186
187 $('#commit_btn').on('click', function(e) {
187 $('#commit_btn').on('click', function(e) {
188 e.preventDefault();
188 e.preventDefault();
189 var button = $(this);
189 var button = $(this);
190 if (button.hasClass('clicked')) {
190 if (button.hasClass('clicked')) {
191 button.attr('disabled', true);
191 button.attr('disabled', true);
192 } else {
192 } else {
193 button.addClass('clicked');
193 button.addClass('clicked');
194 }
194 }
195
195
196 var files = myDropzone.getQueuedFiles();
196 var files = myDropzone.getQueuedFiles();
197 if (files.length === 0) {
197 if (files.length === 0) {
198 alert("Missing files");
198 alert("Missing files");
199 e.preventDefault();
199 e.preventDefault();
200 }
200 }
201
201
202 $('.upload-form').hide();
202 $('.upload-form').hide();
203 $('.file-upload-transaction-wrapper').show();
203 $('.file-upload-transaction-wrapper').show();
204 myDropzone.processQueue();
204 myDropzone.processQueue();
205
205
206 });
206 });
207
207
208 });
208 });
209
209
210 </script>
210 </script>
211 </%def>
211 </%def>
General Comments 0
You need to be logged in to leave comments. Login now