##// END OF EJS Templates
fixed inline comment indicator....
marcink -
r1701:b702d0d4 beta
parent child Browse files
Show More
@@ -1,145 +1,146 b''
1 div.diffblock {
1 div.diffblock {
2 overflow: auto;
2 overflow: auto;
3 padding: 0px;
3 padding: 0px;
4 border: 1px solid #ccc;
4 border: 1px solid #ccc;
5 background: #f8f8f8;
5 background: #f8f8f8;
6 font-size: 100%;
6 font-size: 100%;
7 line-height: 100%;
7 line-height: 100%;
8 /* new */
8 /* new */
9 line-height: 125%;
9 line-height: 125%;
10 }
10 }
11
11
12 div.diffblock.margined{
12 div.diffblock.margined{
13 margin: 0px 20px 0px 20px;
13 margin: 0px 20px 0px 20px;
14 }
14 }
15
15
16 div.diffblock .code-header{
16 div.diffblock .code-header{
17 border-bottom: 1px solid #CCCCCC;
17 border-bottom: 1px solid #CCCCCC;
18 background: #EEEEEE;
18 background: #EEEEEE;
19 padding:10px 0 10px 0;
19 padding:10px 0 10px 0;
20 }
20 }
21 div.diffblock .code-header div{
21 div.diffblock .code-header div{
22 margin-left:25px;
22 margin-left:25px;
23 font-weight: bold;
23 font-weight: bold;
24 }
24 }
25 div.diffblock .code-body{
25 div.diffblock .code-body{
26 background: #FFFFFF;
26 background: #FFFFFF;
27 }
27 }
28 div.diffblock pre.raw{
28 div.diffblock pre.raw{
29 background: #FFFFFF;
29 background: #FFFFFF;
30 color:#000000;
30 color:#000000;
31 }
31 }
32
32
33 table.code-difftable{
33 table.code-difftable{
34 border-collapse: collapse;
34 border-collapse: collapse;
35 width: 99%;
35 width: 99%;
36 }
36 }
37
37
38 table.code-difftable td {
38 table.code-difftable td {
39 padding: 0 !important;
39 padding: 0 !important;
40 background: none !important;
40 background: none !important;
41 border:0 !important;
41 border:0 !important;
42 }
42 }
43
43
44
44
45 .code-difftable .context{
45 .code-difftable .context{
46 background:none repeat scroll 0 0 #DDE7EF;
46 background:none repeat scroll 0 0 #DDE7EF;
47 }
47 }
48 .code-difftable .add{
48 .code-difftable .add{
49 background:none repeat scroll 0 0 #DDFFDD;
49 background:none repeat scroll 0 0 #DDFFDD;
50 }
50 }
51 .code-difftable .add ins{
51 .code-difftable .add ins{
52 background:none repeat scroll 0 0 #AAFFAA;
52 background:none repeat scroll 0 0 #AAFFAA;
53 text-decoration:none;
53 text-decoration:none;
54 }
54 }
55
55
56 .code-difftable .del{
56 .code-difftable .del{
57 background:none repeat scroll 0 0 #FFDDDD;
57 background:none repeat scroll 0 0 #FFDDDD;
58 }
58 }
59 .code-difftable .del del{
59 .code-difftable .del del{
60 background:none repeat scroll 0 0 #FFAAAA;
60 background:none repeat scroll 0 0 #FFAAAA;
61 text-decoration:none;
61 text-decoration:none;
62 }
62 }
63
63
64 .code-difftable .lineno{
64 .code-difftable .lineno{
65 background:none repeat scroll 0 0 #EEEEEE !important;
65 background:none repeat scroll 0 0 #EEEEEE !important;
66 padding-left:2px;
66 padding-left:2px;
67 padding-right:2px;
67 padding-right:2px;
68 text-align:right;
68 text-align:right;
69 width:30px;
69 width:30px;
70 -moz-user-select:none;
70 -moz-user-select:none;
71 -webkit-user-select: none;
71 -webkit-user-select: none;
72 }
72 }
73 .code-difftable .lineno-inline{
73 .code-difftable .lineno-inline{
74 background:none repeat scroll 0 0 #FFF !important;
74 background:none repeat scroll 0 0 #FFF !important;
75 padding-left:2px;
75 padding-left:2px;
76 padding-right:2px;
76 padding-right:2px;
77 text-align:right;
77 text-align:right;
78 width:30px;
78 width:30px;
79 -moz-user-select:none;
79 -moz-user-select:none;
80 -webkit-user-select: none;
80 -webkit-user-select: none;
81 }
81 }
82 .code-difftable .new {
82 .code-difftable .new {
83 border-right: 1px solid #CCC !important;
83 border-right: 1px solid #CCC !important;
84 }
84 }
85 .code-difftable .old {
85 .code-difftable .old {
86 border-right: 1px solid #CCC !important;
86 border-right: 1px solid #CCC !important;
87 }
87 }
88
88
89 .code-difftable .lineno-inline.new-inline{
89 .code-difftable .lineno-inline.new-inline{
90
90
91 }
91 }
92 .code-difftable .lineno-inline.old-inline{
92 .code-difftable .lineno-inline.old-inline{
93 border-right: 1px solid #CCC !important;
93 border-right: 1px solid #CCC !important;
94 }
94 }
95
95
96 .code-difftable .lineno pre{
96 .code-difftable .lineno pre{
97 color:#747474 !important;
97 color:#747474 !important;
98 font:11px "Bitstream Vera Sans Mono",Monaco,"Courier New",Courier,monospace !important;
98 font:11px "Bitstream Vera Sans Mono",Monaco,"Courier New",Courier,monospace !important;
99 letter-spacing:-1px;
99 letter-spacing:-1px;
100 text-align:right;
100 text-align:right;
101 width:20px;
101 width:20px;
102 }
102 }
103 .code-difftable .lineno a{
103 .code-difftable .lineno a{
104 font-weight: 700;
104 font-weight: 700;
105 cursor: pointer;
105 cursor: pointer;
106 }
106 }
107 .code-difftable .code td{
107 .code-difftable .code td{
108 margin:0;
108 margin:0;
109 padding: 0;
109 padding: 0;
110 }
110 }
111 .code-difftable .code pre{
111 .code-difftable .code pre{
112 margin:0;
112 margin:0;
113 padding:0;
113 padding:0;
114 }
114 }
115
115
116 .code {
116 .code {
117 display: block;
117 display: block;
118 width: 100%;
118 width: 100%;
119 }
119 }
120 .code-diff {
120 .code-diff {
121 padding: 0px;
121 padding: 0px;
122 margin-top: 5px;
122 margin-top: 5px;
123 margin-bottom: 5px;
123 margin-bottom: 5px;
124 border-left: 2px solid #ccc;
124 border-left: 2px solid #ccc;
125 }
125 }
126 .code-diff pre, .line pre {
126 .code-diff pre, .line pre {
127 padding: 3px;
127 padding: 3px;
128 margin: 0;
128 margin: 0;
129 }
129 }
130 .lineno a {
130 .lineno a {
131 text-decoration: none;
131 text-decoration: none;
132 }
132 }
133
133
134 .line{
134 .line{
135 padding:0;
135 padding:0;
136 margin:0;
136 margin:0;
137 }
137 }
138 .line:hover{
138
139 .diffblock.margined.comm .line:hover{
139 background-color:#FFFFCC !important;
140 background-color:#FFFFCC !important;
140 cursor: pointer !important;
141 cursor: pointer !important;
141 background-image:url("../images/icons/comment_add.png") !important;
142 background-image:url("../images/icons/comment_add.png") !important;
142 background-repeat:no-repeat !important;
143 background-repeat:no-repeat !important;
143 background-position: right !important;
144 background-position: right !important;
144 background-position: 100% 50% !important;
145 background-position: 100% 50% !important;
145 } No newline at end of file
146 }
@@ -1,281 +1,281 b''
1 <table id="permissions_manage" class="noborder">
1 <table id="permissions_manage" class="noborder">
2 <tr>
2 <tr>
3 <td>${_('none')}</td>
3 <td>${_('none')}</td>
4 <td>${_('read')}</td>
4 <td>${_('read')}</td>
5 <td>${_('write')}</td>
5 <td>${_('write')}</td>
6 <td>${_('admin')}</td>
6 <td>${_('admin')}</td>
7 <td>${_('member')}</td>
7 <td>${_('member')}</td>
8 <td></td>
8 <td></td>
9 </tr>
9 </tr>
10 ## USERS
10 ## USERS
11 %for r2p in c.repo_info.repo_to_perm:
11 %for r2p in c.repo_info.repo_to_perm:
12 %if r2p.user.username =='default' and c.repo_info.private:
12 %if r2p.user.username =='default' and c.repo_info.private:
13 <tr>
13 <tr>
14 <td colspan="4">
14 <td colspan="4">
15 <span class="private_repo_msg">
15 <span class="private_repo_msg">
16 ${_('private repository')}
16 ${_('private repository')}
17 </span>
17 </span>
18 </td>
18 </td>
19 <td class="private_repo_msg"><img style="vertical-align:bottom" src="${h.url("/images/icons/user.png")}"/>${r2p.user.username}</td>
19 <td class="private_repo_msg"><img style="vertical-align:bottom" src="${h.url('/images/icons/user.png')}"/>${r2p.user.username}</td>
20 </tr>
20 </tr>
21 %else:
21 %else:
22 <tr id="id${id(r2p.user.username)}">
22 <tr id="id${id(r2p.user.username)}">
23 <td>${h.radio('u_perm_%s' % r2p.user.username,'repository.none')}</td>
23 <td>${h.radio('u_perm_%s' % r2p.user.username,'repository.none')}</td>
24 <td>${h.radio('u_perm_%s' % r2p.user.username,'repository.read')}</td>
24 <td>${h.radio('u_perm_%s' % r2p.user.username,'repository.read')}</td>
25 <td>${h.radio('u_perm_%s' % r2p.user.username,'repository.write')}</td>
25 <td>${h.radio('u_perm_%s' % r2p.user.username,'repository.write')}</td>
26 <td>${h.radio('u_perm_%s' % r2p.user.username,'repository.admin')}</td>
26 <td>${h.radio('u_perm_%s' % r2p.user.username,'repository.admin')}</td>
27 <td style="white-space: nowrap;">
27 <td style="white-space: nowrap;">
28 <img style="vertical-align:bottom" src="${h.url('/images/icons/user.png')}"/>${r2p.user.username}
28 <img style="vertical-align:bottom" src="${h.url('/images/icons/user.png')}"/>${r2p.user.username}
29 </td>
29 </td>
30 <td>
30 <td>
31 %if r2p.user.username !='default':
31 %if r2p.user.username !='default':
32 <span class="delete_icon action_button" onclick="ajaxActionUser(${r2p.user.user_id},'${'id%s'%id(r2p.user.username)}')">
32 <span class="delete_icon action_button" onclick="ajaxActionUser(${r2p.user.user_id},'${'id%s'%id(r2p.user.username)}')">
33 ${_('revoke')}
33 ${_('revoke')}
34 </span>
34 </span>
35 %endif
35 %endif
36 </td>
36 </td>
37 </tr>
37 </tr>
38 %endif
38 %endif
39 %endfor
39 %endfor
40
40
41 ## USERS GROUPS
41 ## USERS GROUPS
42 %for g2p in c.repo_info.users_group_to_perm:
42 %for g2p in c.repo_info.users_group_to_perm:
43 <tr id="id${id(g2p.users_group.users_group_name)}">
43 <tr id="id${id(g2p.users_group.users_group_name)}">
44 <td>${h.radio('g_perm_%s' % g2p.users_group.users_group_name,'repository.none')}</td>
44 <td>${h.radio('g_perm_%s' % g2p.users_group.users_group_name,'repository.none')}</td>
45 <td>${h.radio('g_perm_%s' % g2p.users_group.users_group_name,'repository.read')}</td>
45 <td>${h.radio('g_perm_%s' % g2p.users_group.users_group_name,'repository.read')}</td>
46 <td>${h.radio('g_perm_%s' % g2p.users_group.users_group_name,'repository.write')}</td>
46 <td>${h.radio('g_perm_%s' % g2p.users_group.users_group_name,'repository.write')}</td>
47 <td>${h.radio('g_perm_%s' % g2p.users_group.users_group_name,'repository.admin')}</td>
47 <td>${h.radio('g_perm_%s' % g2p.users_group.users_group_name,'repository.admin')}</td>
48 <td style="white-space: nowrap;">
48 <td style="white-space: nowrap;">
49 <img style="vertical-align:bottom" src="${h.url('/images/icons/group.png')}"/>${g2p.users_group.users_group_name}
49 <img style="vertical-align:bottom" src="${h.url('/images/icons/group.png')}"/>${g2p.users_group.users_group_name}
50 </td>
50 </td>
51 <td>
51 <td>
52 <span class="delete_icon action_button" onclick="ajaxActionUsersGroup(${g2p.users_group.users_group_id},'${'id%s'%id(g2p.users_group.users_group_name)}')">
52 <span class="delete_icon action_button" onclick="ajaxActionUsersGroup(${g2p.users_group.users_group_id},'${'id%s'%id(g2p.users_group.users_group_name)}')">
53 ${_('revoke')}
53 ${_('revoke')}
54 </span>
54 </span>
55 </td>
55 </td>
56 </tr>
56 </tr>
57 %endfor
57 %endfor
58 <tr id="add_perm_input">
58 <tr id="add_perm_input">
59 <td>${h.radio('perm_new_member','repository.none')}</td>
59 <td>${h.radio('perm_new_member','repository.none')}</td>
60 <td>${h.radio('perm_new_member','repository.read')}</td>
60 <td>${h.radio('perm_new_member','repository.read')}</td>
61 <td>${h.radio('perm_new_member','repository.write')}</td>
61 <td>${h.radio('perm_new_member','repository.write')}</td>
62 <td>${h.radio('perm_new_member','repository.admin')}</td>
62 <td>${h.radio('perm_new_member','repository.admin')}</td>
63 <td class='ac'>
63 <td class='ac'>
64 <div class="perm_ac" id="perm_ac">
64 <div class="perm_ac" id="perm_ac">
65 ${h.text('perm_new_member_name',class_='yui-ac-input')}
65 ${h.text('perm_new_member_name',class_='yui-ac-input')}
66 ${h.hidden('perm_new_member_type')}
66 ${h.hidden('perm_new_member_type')}
67 <div id="perm_container"></div>
67 <div id="perm_container"></div>
68 </div>
68 </div>
69 </td>
69 </td>
70 <td></td>
70 <td></td>
71 </tr>
71 </tr>
72 <tr>
72 <tr>
73 <td colspan="6">
73 <td colspan="6">
74 <span id="add_perm" class="add_icon" style="cursor: pointer;">
74 <span id="add_perm" class="add_icon" style="cursor: pointer;">
75 ${_('Add another member')}
75 ${_('Add another member')}
76 </span>
76 </span>
77 </td>
77 </td>
78 </tr>
78 </tr>
79 </table>
79 </table>
80 <script type="text/javascript">
80 <script type="text/javascript">
81 function ajaxActionUser(user_id, field_id) {
81 function ajaxActionUser(user_id, field_id) {
82 var sUrl = "${h.url('delete_repo_user',repo_name=c.repo_name)}";
82 var sUrl = "${h.url('delete_repo_user',repo_name=c.repo_name)}";
83 var callback = {
83 var callback = {
84 success: function (o) {
84 success: function (o) {
85 var tr = YUD.get(String(field_id));
85 var tr = YUD.get(String(field_id));
86 tr.parentNode.removeChild(tr);
86 tr.parentNode.removeChild(tr);
87 },
87 },
88 failure: function (o) {
88 failure: function (o) {
89 alert("${_('Failed to remove user')}");
89 alert("${_('Failed to remove user')}");
90 },
90 },
91 };
91 };
92 var postData = '_method=delete&user_id=' + user_id;
92 var postData = '_method=delete&user_id=' + user_id;
93 var request = YAHOO.util.Connect.asyncRequest('POST', sUrl, callback, postData);
93 var request = YAHOO.util.Connect.asyncRequest('POST', sUrl, callback, postData);
94 };
94 };
95
95
96 function ajaxActionUsersGroup(users_group_id,field_id){
96 function ajaxActionUsersGroup(users_group_id,field_id){
97 var sUrl = "${h.url('delete_repo_users_group',repo_name=c.repo_name)}";
97 var sUrl = "${h.url('delete_repo_users_group',repo_name=c.repo_name)}";
98 var callback = {
98 var callback = {
99 success:function(o){
99 success:function(o){
100 var tr = YUD.get(String(field_id));
100 var tr = YUD.get(String(field_id));
101 tr.parentNode.removeChild(tr);
101 tr.parentNode.removeChild(tr);
102 },
102 },
103 failure:function(o){
103 failure:function(o){
104 alert("${_('Failed to remove users group')}");
104 alert("${_('Failed to remove users group')}");
105 },
105 },
106 };
106 };
107 var postData = '_method=delete&users_group_id='+users_group_id;
107 var postData = '_method=delete&users_group_id='+users_group_id;
108 var request = YAHOO.util.Connect.asyncRequest('POST', sUrl, callback, postData);
108 var request = YAHOO.util.Connect.asyncRequest('POST', sUrl, callback, postData);
109 };
109 };
110
110
111 YUE.onDOMReady(function () {
111 YUE.onDOMReady(function () {
112 if (!YUD.hasClass('perm_new_member_name', 'error')) {
112 if (!YUD.hasClass('perm_new_member_name', 'error')) {
113 YUD.setStyle('add_perm_input', 'display', 'none');
113 YUD.setStyle('add_perm_input', 'display', 'none');
114 }
114 }
115 YAHOO.util.Event.addListener('add_perm', 'click', function () {
115 YAHOO.util.Event.addListener('add_perm', 'click', function () {
116 YUD.setStyle('add_perm_input', 'display', '');
116 YUD.setStyle('add_perm_input', 'display', '');
117 YUD.setStyle('add_perm', 'opacity', '0.6');
117 YUD.setStyle('add_perm', 'opacity', '0.6');
118 YUD.setStyle('add_perm', 'cursor', 'default');
118 YUD.setStyle('add_perm', 'cursor', 'default');
119 });
119 });
120 });
120 });
121
121
122 YAHOO.example.FnMultipleFields = function () {
122 YAHOO.example.FnMultipleFields = function () {
123 var myUsers = ${c.users_array|n};
123 var myUsers = ${c.users_array|n};
124 var myGroups = ${c.users_groups_array|n};
124 var myGroups = ${c.users_groups_array|n};
125
125
126 // Define a custom search function for the DataSource of users
126 // Define a custom search function for the DataSource of users
127 var matchUsers = function (sQuery) {
127 var matchUsers = function (sQuery) {
128 // Case insensitive matching
128 // Case insensitive matching
129 var query = sQuery.toLowerCase();
129 var query = sQuery.toLowerCase();
130 var i = 0;
130 var i = 0;
131 var l = myUsers.length;
131 var l = myUsers.length;
132 var matches = [];
132 var matches = [];
133
133
134 // Match against each name of each contact
134 // Match against each name of each contact
135 for (; i < l; i++) {
135 for (; i < l; i++) {
136 contact = myUsers[i];
136 contact = myUsers[i];
137 if ((contact.fname.toLowerCase().indexOf(query) > -1) || (contact.lname.toLowerCase().indexOf(query) > -1) || (contact.nname && (contact.nname.toLowerCase().indexOf(query) > -1))) {
137 if ((contact.fname.toLowerCase().indexOf(query) > -1) || (contact.lname.toLowerCase().indexOf(query) > -1) || (contact.nname && (contact.nname.toLowerCase().indexOf(query) > -1))) {
138 matches[matches.length] = contact;
138 matches[matches.length] = contact;
139 }
139 }
140 }
140 }
141 return matches;
141 return matches;
142 };
142 };
143
143
144 // Define a custom search function for the DataSource of usersGroups
144 // Define a custom search function for the DataSource of usersGroups
145 var matchGroups = function (sQuery) {
145 var matchGroups = function (sQuery) {
146 // Case insensitive matching
146 // Case insensitive matching
147 var query = sQuery.toLowerCase();
147 var query = sQuery.toLowerCase();
148 var i = 0;
148 var i = 0;
149 var l = myGroups.length;
149 var l = myGroups.length;
150 var matches = [];
150 var matches = [];
151
151
152 // Match against each name of each contact
152 // Match against each name of each contact
153 for (; i < l; i++) {
153 for (; i < l; i++) {
154 matched_group = myGroups[i];
154 matched_group = myGroups[i];
155 if (matched_group.grname.toLowerCase().indexOf(query) > -1) {
155 if (matched_group.grname.toLowerCase().indexOf(query) > -1) {
156 matches[matches.length] = matched_group;
156 matches[matches.length] = matched_group;
157 }
157 }
158 }
158 }
159 return matches;
159 return matches;
160 };
160 };
161
161
162 //match all
162 //match all
163 var matchAll = function (sQuery) {
163 var matchAll = function (sQuery) {
164 u = matchUsers(sQuery);
164 u = matchUsers(sQuery);
165 g = matchGroups(sQuery);
165 g = matchGroups(sQuery);
166 return u.concat(g);
166 return u.concat(g);
167 };
167 };
168
168
169 // DataScheme for members
169 // DataScheme for members
170 var memberDS = new YAHOO.util.FunctionDataSource(matchAll);
170 var memberDS = new YAHOO.util.FunctionDataSource(matchAll);
171 memberDS.responseSchema = {
171 memberDS.responseSchema = {
172 fields: ["id", "fname", "lname", "nname", "grname", "grmembers"]
172 fields: ["id", "fname", "lname", "nname", "grname", "grmembers"]
173 };
173 };
174
174
175 // DataScheme for owner
175 // DataScheme for owner
176 var ownerDS = new YAHOO.util.FunctionDataSource(matchUsers);
176 var ownerDS = new YAHOO.util.FunctionDataSource(matchUsers);
177 ownerDS.responseSchema = {
177 ownerDS.responseSchema = {
178 fields: ["id", "fname", "lname", "nname"]
178 fields: ["id", "fname", "lname", "nname"]
179 };
179 };
180
180
181 // Instantiate AutoComplete for perms
181 // Instantiate AutoComplete for perms
182 var membersAC = new YAHOO.widget.AutoComplete("perm_new_member_name", "perm_container", memberDS);
182 var membersAC = new YAHOO.widget.AutoComplete("perm_new_member_name", "perm_container", memberDS);
183 membersAC.useShadow = false;
183 membersAC.useShadow = false;
184 membersAC.resultTypeList = false;
184 membersAC.resultTypeList = false;
185
185
186 // Instantiate AutoComplete for owner
186 // Instantiate AutoComplete for owner
187 var ownerAC = new YAHOO.widget.AutoComplete("user", "owner_container", ownerDS);
187 var ownerAC = new YAHOO.widget.AutoComplete("user", "owner_container", ownerDS);
188 ownerAC.useShadow = false;
188 ownerAC.useShadow = false;
189 ownerAC.resultTypeList = false;
189 ownerAC.resultTypeList = false;
190
190
191
191
192 // Helper highlight function for the formatter
192 // Helper highlight function for the formatter
193 var highlightMatch = function (full, snippet, matchindex) {
193 var highlightMatch = function (full, snippet, matchindex) {
194 return full.substring(0, matchindex) + "<span class='match'>" + full.substr(matchindex, snippet.length) + "</span>" + full.substring(matchindex + snippet.length);
194 return full.substring(0, matchindex) + "<span class='match'>" + full.substr(matchindex, snippet.length) + "</span>" + full.substring(matchindex + snippet.length);
195 };
195 };
196
196
197 // Custom formatter to highlight the matching letters
197 // Custom formatter to highlight the matching letters
198 var custom_formatter = function (oResultData, sQuery, sResultMatch) {
198 var custom_formatter = function (oResultData, sQuery, sResultMatch) {
199 var query = sQuery.toLowerCase();
199 var query = sQuery.toLowerCase();
200
200
201 if (oResultData.grname != undefined) {
201 if (oResultData.grname != undefined) {
202 var grname = oResultData.grname;
202 var grname = oResultData.grname;
203 var grmembers = oResultData.grmembers;
203 var grmembers = oResultData.grmembers;
204 var grnameMatchIndex = grname.toLowerCase().indexOf(query);
204 var grnameMatchIndex = grname.toLowerCase().indexOf(query);
205 var grprefix = "${_('Group')}: ";
205 var grprefix = "${_('Group')}: ";
206 var grsuffix = " (" + grmembers + " ${_('members')})";
206 var grsuffix = " (" + grmembers + " ${_('members')})";
207
207
208 if (grnameMatchIndex > -1) {
208 if (grnameMatchIndex > -1) {
209 return grprefix + highlightMatch(grname, query, grnameMatchIndex) + grsuffix;
209 return grprefix + highlightMatch(grname, query, grnameMatchIndex) + grsuffix;
210 }
210 }
211
211
212 return grprefix + oResultData.grname + grsuffix;
212 return grprefix + oResultData.grname + grsuffix;
213 } else if (oResultData.fname != undefined) {
213 } else if (oResultData.fname != undefined) {
214
214
215 var fname = oResultData.fname,
215 var fname = oResultData.fname,
216 lname = oResultData.lname,
216 lname = oResultData.lname,
217 nname = oResultData.nname || "",
217 nname = oResultData.nname || "",
218 // Guard against null value
218 // Guard against null value
219 fnameMatchIndex = fname.toLowerCase().indexOf(query),
219 fnameMatchIndex = fname.toLowerCase().indexOf(query),
220 lnameMatchIndex = lname.toLowerCase().indexOf(query),
220 lnameMatchIndex = lname.toLowerCase().indexOf(query),
221 nnameMatchIndex = nname.toLowerCase().indexOf(query),
221 nnameMatchIndex = nname.toLowerCase().indexOf(query),
222 displayfname, displaylname, displaynname;
222 displayfname, displaylname, displaynname;
223
223
224 if (fnameMatchIndex > -1) {
224 if (fnameMatchIndex > -1) {
225 displayfname = highlightMatch(fname, query, fnameMatchIndex);
225 displayfname = highlightMatch(fname, query, fnameMatchIndex);
226 } else {
226 } else {
227 displayfname = fname;
227 displayfname = fname;
228 }
228 }
229
229
230 if (lnameMatchIndex > -1) {
230 if (lnameMatchIndex > -1) {
231 displaylname = highlightMatch(lname, query, lnameMatchIndex);
231 displaylname = highlightMatch(lname, query, lnameMatchIndex);
232 } else {
232 } else {
233 displaylname = lname;
233 displaylname = lname;
234 }
234 }
235
235
236 if (nnameMatchIndex > -1) {
236 if (nnameMatchIndex > -1) {
237 displaynname = "(" + highlightMatch(nname, query, nnameMatchIndex) + ")";
237 displaynname = "(" + highlightMatch(nname, query, nnameMatchIndex) + ")";
238 } else {
238 } else {
239 displaynname = nname ? "(" + nname + ")" : "";
239 displaynname = nname ? "(" + nname + ")" : "";
240 }
240 }
241
241
242 return displayfname + " " + displaylname + " " + displaynname;
242 return displayfname + " " + displaylname + " " + displaynname;
243 } else {
243 } else {
244 return '';
244 return '';
245 }
245 }
246 };
246 };
247 membersAC.formatResult = custom_formatter;
247 membersAC.formatResult = custom_formatter;
248 ownerAC.formatResult = custom_formatter;
248 ownerAC.formatResult = custom_formatter;
249
249
250 var myHandler = function (sType, aArgs) {
250 var myHandler = function (sType, aArgs) {
251
251
252 var myAC = aArgs[0]; // reference back to the AC instance
252 var myAC = aArgs[0]; // reference back to the AC instance
253 var elLI = aArgs[1]; // reference to the selected LI element
253 var elLI = aArgs[1]; // reference to the selected LI element
254 var oData = aArgs[2]; // object literal of selected item's result data
254 var oData = aArgs[2]; // object literal of selected item's result data
255 //fill the autocomplete with value
255 //fill the autocomplete with value
256 if (oData.nname != undefined) {
256 if (oData.nname != undefined) {
257 //users
257 //users
258 myAC.getInputEl().value = oData.nname;
258 myAC.getInputEl().value = oData.nname;
259 YUD.get('perm_new_member_type').value = 'user';
259 YUD.get('perm_new_member_type').value = 'user';
260 } else {
260 } else {
261 //groups
261 //groups
262 myAC.getInputEl().value = oData.grname;
262 myAC.getInputEl().value = oData.grname;
263 YUD.get('perm_new_member_type').value = 'users_group';
263 YUD.get('perm_new_member_type').value = 'users_group';
264 }
264 }
265
265
266 };
266 };
267
267
268 membersAC.itemSelectEvent.subscribe(myHandler);
268 membersAC.itemSelectEvent.subscribe(myHandler);
269 if(ownerAC.itemSelectEvent){
269 if(ownerAC.itemSelectEvent){
270 ownerAC.itemSelectEvent.subscribe(myHandler);
270 ownerAC.itemSelectEvent.subscribe(myHandler);
271 }
271 }
272
272
273 return {
273 return {
274 memberDS: memberDS,
274 memberDS: memberDS,
275 ownerDS: ownerDS,
275 ownerDS: ownerDS,
276 membersAC: membersAC,
276 membersAC: membersAC,
277 ownerAC: ownerAC,
277 ownerAC: ownerAC,
278 };
278 };
279 }();
279 }();
280
280
281 </script> No newline at end of file
281 </script>
@@ -1,88 +1,88 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2 <%inherit file="/base/base.html"/>
2 <%inherit file="/base/base.html"/>
3
3
4 <%def name="title()">
4 <%def name="title()">
5 ${_('Repositories administration')} - ${c.rhodecode_name}
5 ${_('Repositories administration')} - ${c.rhodecode_name}
6 </%def>
6 </%def>
7
7
8
8
9 <%def name="breadcrumbs_links()">
9 <%def name="breadcrumbs_links()">
10 ${h.link_to(_('Admin'),h.url('admin_home'))} &raquo; ${_('Repositories')}
10 ${h.link_to(_('Admin'),h.url('admin_home'))} &raquo; ${_('Repositories')}
11 </%def>
11 </%def>
12 <%def name="page_nav()">
12 <%def name="page_nav()">
13 ${self.menu('admin')}
13 ${self.menu('admin')}
14 </%def>
14 </%def>
15 <%def name="main()">
15 <%def name="main()">
16 <div class="box">
16 <div class="box">
17 <!-- box / title -->
17 <!-- box / title -->
18 <div class="title">
18 <div class="title">
19 ${self.breadcrumbs()}
19 ${self.breadcrumbs()}
20 <ul class="links">
20 <ul class="links">
21 <li>
21 <li>
22 <span>${h.link_to(_(u'ADD NEW REPOSITORY'),h.url('new_repo'))}</span>
22 <span>${h.link_to(_(u'ADD NEW REPOSITORY'),h.url('new_repo'))}</span>
23 </li>
23 </li>
24 </ul>
24 </ul>
25 </div>
25 </div>
26 <!-- end box / title -->
26 <!-- end box / title -->
27 <div class="table">
27 <div class="table">
28 <table class="table_disp">
28 <table class="table_disp">
29 <tr class="header">
29 <tr class="header">
30 <th class="left">${_('Name')}</th>
30 <th class="left">${_('Name')}</th>
31 <th class="left">${_('Description')}</th>
31 <th class="left">${_('Description')}</th>
32 <th class="left">${_('Last change')}</th>
32 <th class="left">${_('Last change')}</th>
33 <th class="left">${_('Tip')}</th>
33 <th class="left">${_('Tip')}</th>
34 <th class="left">${_('Contact')}</th>
34 <th class="left">${_('Contact')}</th>
35 <th class="left">${_('action')}</th>
35 <th class="left">${_('action')}</th>
36 </tr>
36 </tr>
37 %for cnt,repo in enumerate(c.repos_list):
37 %for cnt,repo in enumerate(c.repos_list):
38 <tr class="parity${cnt%2}">
38 <tr class="parity${cnt%2}">
39 <td>
39 <td>
40 ## TYPE OF REPO
40 ## TYPE OF REPO
41 %if repo['dbrepo']['repo_type'] =='hg':
41 %if repo['dbrepo']['repo_type'] =='hg':
42 <img class="icon" title="${_('Mercurial repository')}" alt="${_('Mercurial repository')}" src="${h.url('/images/icons/hgicon.png')}"/>
42 <img class="icon" title="${_('Mercurial repository')}" alt="${_('Mercurial repository')}" src="${h.url('/images/icons/hgicon.png')}"/>
43 %elif repo['dbrepo']['repo_type'] =='git':
43 %elif repo['dbrepo']['repo_type'] =='git':
44 <img class="icon" title="${_('Git repository')}" alt="${_('Git repository')}" src="${h.url('/images/icons/giticon.png')}"/>
44 <img class="icon" title="${_('Git repository')}" alt="${_('Git repository')}" src="${h.url('/images/icons/giticon.png')}"/>
45 %else:
45 %else:
46
46
47 %endif
47 %endif
48
48
49 ## PRIVATE/PUBLIC REPO
49 ## PRIVATE/PUBLIC REPO
50 %if repo['dbrepo']['private']:
50 %if repo['dbrepo']['private']:
51 <img alt="${_('private')}" src="${h.url('/images/icons/lock.png')}"/>
51 <img alt="${_('private')}" src="${h.url('/images/icons/lock.png')}"/>
52 %else:
52 %else:
53 <img alt="${_('public')}" src="${h.url('/images/icons/lock_open.png')}"/>
53 <img alt="${_('public')}" src="${h.url('/images/icons/lock_open.png')}"/>
54 %endif
54 %endif
55 ${h.link_to(repo['name'],h.url('edit_repo',repo_name=repo['name']))}
55 ${h.link_to(repo['name'],h.url('edit_repo',repo_name=repo['name']))}
56
56
57 %if repo['dbrepo_fork']:
57 %if repo['dbrepo_fork']:
58 <a href="${h.url('summary_home',repo_name=repo['dbrepo_fork']['repo_name'])}">
58 <a href="${h.url('summary_home',repo_name=repo['dbrepo_fork']['repo_name'])}">
59 <img class="icon" alt="${_('public')}"
59 <img class="icon" alt="${_('public')}"
60 title="${_('Fork of')} ${repo['dbrepo_fork']['repo_name']}"
60 title="${_('Fork of')} ${repo['dbrepo_fork']['repo_name']}"
61 src="${h.url("/images/icons/arrow_divide.png")}"/></a>
61 src="${h.url('/images/icons/arrow_divide.png')}"/></a>
62 %endif
62 %endif
63 </td>
63 </td>
64 <td title="${repo['description']}">${h.truncate(repo['description'],60)}</td>
64 <td title="${repo['description']}">${h.truncate(repo['description'],60)}</td>
65 <td>${h.age(repo['last_change'])}</td>
65 <td>${h.age(repo['last_change'])}</td>
66 <td>
66 <td>
67 %if repo['rev']>=0:
67 %if repo['rev']>=0:
68 ${h.link_to('r%s:%s' % (repo['rev'],h.short_id(repo['tip'])),
68 ${h.link_to('r%s:%s' % (repo['rev'],h.short_id(repo['tip'])),
69 h.url('changeset_home',repo_name=repo['name'],revision=repo['tip']),
69 h.url('changeset_home',repo_name=repo['name'],revision=repo['tip']),
70 class_="tooltip",
70 class_="tooltip",
71 title=h.tooltip(repo['last_msg']))}
71 title=h.tooltip(repo['last_msg']))}
72 %else:
72 %else:
73 ${_('No changesets yet')}
73 ${_('No changesets yet')}
74 %endif
74 %endif
75 </td>
75 </td>
76 <td title="${repo['contact']}">${h.person(repo['contact'])}</td>
76 <td title="${repo['contact']}">${h.person(repo['contact'])}</td>
77 <td>
77 <td>
78 ${h.form(url('repo', repo_name=repo['name']),method='delete')}
78 ${h.form(url('repo', repo_name=repo['name']),method='delete')}
79 ${h.submit('remove_%s' % repo['name'],_('delete'),class_="delete_icon action_button",onclick="return confirm('"+_('Confirm to delete this repository')+"');")}
79 ${h.submit('remove_%s' % repo['name'],_('delete'),class_="delete_icon action_button",onclick="return confirm('"+_('Confirm to delete this repository')+"');")}
80 ${h.end_form()}
80 ${h.end_form()}
81 </td>
81 </td>
82 </tr>
82 </tr>
83 %endfor
83 %endfor
84 </table>
84 </table>
85 </div>
85 </div>
86 </div>
86 </div>
87
87
88 </%def>
88 </%def>
@@ -1,190 +1,190 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2 <%inherit file="/base/base.html"/>
2 <%inherit file="/base/base.html"/>
3
3
4 <%def name="title()">
4 <%def name="title()">
5 ${_('My account')} ${c.rhodecode_user.username} - ${c.rhodecode_name}
5 ${_('My account')} ${c.rhodecode_user.username} - ${c.rhodecode_name}
6 </%def>
6 </%def>
7
7
8 <%def name="breadcrumbs_links()">
8 <%def name="breadcrumbs_links()">
9 ${_('My Account')}
9 ${_('My Account')}
10 </%def>
10 </%def>
11
11
12 <%def name="page_nav()">
12 <%def name="page_nav()">
13 ${self.menu('admin')}
13 ${self.menu('admin')}
14 </%def>
14 </%def>
15
15
16 <%def name="main()">
16 <%def name="main()">
17
17
18 <div class="box box-left">
18 <div class="box box-left">
19 <!-- box / title -->
19 <!-- box / title -->
20 <div class="title">
20 <div class="title">
21 ${self.breadcrumbs()}
21 ${self.breadcrumbs()}
22 </div>
22 </div>
23 <!-- end box / title -->
23 <!-- end box / title -->
24 <div>
24 <div>
25 ${h.form(url('admin_settings_my_account_update'),method='put')}
25 ${h.form(url('admin_settings_my_account_update'),method='put')}
26 <div class="form">
26 <div class="form">
27
27
28 <div class="field">
28 <div class="field">
29 <div class="gravatar_box">
29 <div class="gravatar_box">
30 <div class="gravatar"><img alt="gravatar" src="${h.gravatar_url(c.user.email)}"/></div>
30 <div class="gravatar"><img alt="gravatar" src="${h.gravatar_url(c.user.email)}"/></div>
31 <p>
31 <p>
32 %if c.use_gravatar:
32 %if c.use_gravatar:
33 <strong>${_('Change your avatar at')} <a href="http://gravatar.com">gravatar.com</a></strong>
33 <strong>${_('Change your avatar at')} <a href="http://gravatar.com">gravatar.com</a></strong>
34 <br/>${_('Using')} ${c.user.email}
34 <br/>${_('Using')} ${c.user.email}
35 %else:
35 %else:
36 <br/>${c.user.email}
36 <br/>${c.user.email}
37 %endif
37 %endif
38 </p>
38 </p>
39 </div>
39 </div>
40 </div>
40 </div>
41 <div class="field">
41 <div class="field">
42 <div class="label">
42 <div class="label">
43 <label>${_('API key')}</label> ${c.user.api_key}
43 <label>${_('API key')}</label> ${c.user.api_key}
44 </div>
44 </div>
45 </div>
45 </div>
46 <div class="fields">
46 <div class="fields">
47 <div class="field">
47 <div class="field">
48 <div class="label">
48 <div class="label">
49 <label for="username">${_('Username')}:</label>
49 <label for="username">${_('Username')}:</label>
50 </div>
50 </div>
51 <div class="input">
51 <div class="input">
52 ${h.text('username',class_="medium")}
52 ${h.text('username',class_="medium")}
53 </div>
53 </div>
54 </div>
54 </div>
55
55
56 <div class="field">
56 <div class="field">
57 <div class="label">
57 <div class="label">
58 <label for="new_password">${_('New password')}:</label>
58 <label for="new_password">${_('New password')}:</label>
59 </div>
59 </div>
60 <div class="input">
60 <div class="input">
61 ${h.password('new_password',class_="medium",autocomplete="off")}
61 ${h.password('new_password',class_="medium",autocomplete="off")}
62 </div>
62 </div>
63 </div>
63 </div>
64
64
65 <div class="field">
65 <div class="field">
66 <div class="label">
66 <div class="label">
67 <label for="password_confirmation">${_('New password confirmation')}:</label>
67 <label for="password_confirmation">${_('New password confirmation')}:</label>
68 </div>
68 </div>
69 <div class="input">
69 <div class="input">
70 ${h.password('password_confirmation',class_="medium",autocomplete="off")}
70 ${h.password('password_confirmation',class_="medium",autocomplete="off")}
71 </div>
71 </div>
72 </div>
72 </div>
73
73
74 <div class="field">
74 <div class="field">
75 <div class="label">
75 <div class="label">
76 <label for="name">${_('First Name')}:</label>
76 <label for="name">${_('First Name')}:</label>
77 </div>
77 </div>
78 <div class="input">
78 <div class="input">
79 ${h.text('name',class_="medium")}
79 ${h.text('name',class_="medium")}
80 </div>
80 </div>
81 </div>
81 </div>
82
82
83 <div class="field">
83 <div class="field">
84 <div class="label">
84 <div class="label">
85 <label for="lastname">${_('Last Name')}:</label>
85 <label for="lastname">${_('Last Name')}:</label>
86 </div>
86 </div>
87 <div class="input">
87 <div class="input">
88 ${h.text('lastname',class_="medium")}
88 ${h.text('lastname',class_="medium")}
89 </div>
89 </div>
90 </div>
90 </div>
91
91
92 <div class="field">
92 <div class="field">
93 <div class="label">
93 <div class="label">
94 <label for="email">${_('Email')}:</label>
94 <label for="email">${_('Email')}:</label>
95 </div>
95 </div>
96 <div class="input">
96 <div class="input">
97 ${h.text('email',class_="medium")}
97 ${h.text('email',class_="medium")}
98 </div>
98 </div>
99 </div>
99 </div>
100
100
101 <div class="buttons">
101 <div class="buttons">
102 ${h.submit('save',_('Save'),class_="ui-button")}
102 ${h.submit('save',_('Save'),class_="ui-button")}
103 ${h.reset('reset',_('Reset'),class_="ui-button")}
103 ${h.reset('reset',_('Reset'),class_="ui-button")}
104 </div>
104 </div>
105 </div>
105 </div>
106 </div>
106 </div>
107 ${h.end_form()}
107 ${h.end_form()}
108 </div>
108 </div>
109 </div>
109 </div>
110
110
111 <div class="box box-right">
111 <div class="box box-right">
112 <!-- box / title -->
112 <!-- box / title -->
113 <div class="title">
113 <div class="title">
114 <h5>
114 <h5>
115 <input class="q_filter_box" id="q_filter" size="15" type="text" name="filter" value="${_('quick filter...')}"/>
115 <input class="q_filter_box" id="q_filter" size="15" type="text" name="filter" value="${_('quick filter...')}"/>
116 ${_('My repositories')}
116 ${_('My repositories')}
117 </h5>
117 </h5>
118 %if h.HasPermissionAny('hg.admin','hg.create.repository')():
118 %if h.HasPermissionAny('hg.admin','hg.create.repository')():
119 <ul class="links">
119 <ul class="links">
120 <li>
120 <li>
121 <span>${h.link_to(_('ADD REPOSITORY'),h.url('admin_settings_create_repository'))}</span>
121 <span>${h.link_to(_('ADD REPOSITORY'),h.url('admin_settings_create_repository'))}</span>
122 </li>
122 </li>
123 </ul>
123 </ul>
124 %endif
124 %endif
125 </div>
125 </div>
126 <!-- end box / title -->
126 <!-- end box / title -->
127 <div class="table">
127 <div class="table">
128 <table>
128 <table>
129 <thead>
129 <thead>
130 <tr>
130 <tr>
131 <th class="left">${_('Name')}</th>
131 <th class="left">${_('Name')}</th>
132 <th class="left">${_('revision')}</th>
132 <th class="left">${_('revision')}</th>
133 <th colspan="2" class="left">${_('action')}</th>
133 <th colspan="2" class="left">${_('action')}</th>
134 </thead>
134 </thead>
135 <tbody>
135 <tbody>
136 %if c.user_repos:
136 %if c.user_repos:
137 %for repo in c.user_repos:
137 %for repo in c.user_repos:
138 <tr>
138 <tr>
139 <td>
139 <td>
140 %if repo['dbrepo']['repo_type'] =='hg':
140 %if repo['dbrepo']['repo_type'] =='hg':
141 <img class="icon" title="${_('Mercurial repository')}" alt="${_('Mercurial repository')}" src="${h.url("/images/icons/hgicon.png")}"/>
141 <img class="icon" title="${_('Mercurial repository')}" alt="${_('Mercurial repository')}" src="${h.url('/images/icons/hgicon.png')}"/>
142 %elif repo['dbrepo']['repo_type'] =='git':
142 %elif repo['dbrepo']['repo_type'] =='git':
143 <img class="icon" title="${_('Git repository')}" alt="${_('Git repository')}" src="${h.url("/images/icons/giticon.png")}"/>
143 <img class="icon" title="${_('Git repository')}" alt="${_('Git repository')}" src="${h.url('/images/icons/giticon.png')}"/>
144 %else:
144 %else:
145
145
146 %endif
146 %endif
147 %if repo['dbrepo']['private']:
147 %if repo['dbrepo']['private']:
148 <img class="icon" alt="${_('private')}" src="${h.url("/images/icons/lock.png")}"/>
148 <img class="icon" alt="${_('private')}" src="${h.url('/images/icons/lock.png')}"/>
149 %else:
149 %else:
150 <img class="icon" alt="${_('public')}" src="${h.url("/images/icons/lock_open.png")}"/>
150 <img class="icon" alt="${_('public')}" src="${h.url('/images/icons/lock_open.png')}"/>
151 %endif
151 %endif
152
152
153 ${h.link_to(repo['name'], h.url('summary_home',repo_name=repo['name']),class_="repo_name")}
153 ${h.link_to(repo['name'], h.url('summary_home',repo_name=repo['name']),class_="repo_name")}
154 %if repo['dbrepo_fork']:
154 %if repo['dbrepo_fork']:
155 <a href="${h.url('summary_home',repo_name=repo['dbrepo_fork']['repo_name'])}">
155 <a href="${h.url('summary_home',repo_name=repo['dbrepo_fork']['repo_name'])}">
156 <img class="icon" alt="${_('public')}"
156 <img class="icon" alt="${_('public')}"
157 title="${_('Fork of')} ${repo['dbrepo_fork']['repo_name']}"
157 title="${_('Fork of')} ${repo['dbrepo_fork']['repo_name']}"
158 src="${h.url('/images/icons/arrow_divide.png')}"/></a>
158 src="${h.url('/images/icons/arrow_divide.png')}"/></a>
159 %endif
159 %endif
160 </td>
160 </td>
161 <td><span class="tooltip" title="${repo['last_change']}">${("r%s:%s") % (repo['rev'],h.short_id(repo['tip']))}</span></td>
161 <td><span class="tooltip" title="${repo['last_change']}">${("r%s:%s") % (repo['rev'],h.short_id(repo['tip']))}</span></td>
162 <td><a href="${h.url('repo_settings_home',repo_name=repo['name'])}" title="${_('edit')}"><img class="icon" alt="${_('private')}" src="${h.url('/images/icons/application_form_edit.png')}"/></a></td>
162 <td><a href="${h.url('repo_settings_home',repo_name=repo['name'])}" title="${_('edit')}"><img class="icon" alt="${_('private')}" src="${h.url('/images/icons/application_form_edit.png')}"/></a></td>
163 <td>
163 <td>
164 ${h.form(url('repo_settings_delete', repo_name=repo['name']),method='delete')}
164 ${h.form(url('repo_settings_delete', repo_name=repo['name']),method='delete')}
165 ${h.submit('remove_%s' % repo['name'],'',class_="delete_icon action_button",onclick="return confirm('Confirm to delete this repository');")}
165 ${h.submit('remove_%s' % repo['name'],'',class_="delete_icon action_button",onclick="return confirm('Confirm to delete this repository');")}
166 ${h.end_form()}
166 ${h.end_form()}
167 </td>
167 </td>
168 </tr>
168 </tr>
169 %endfor
169 %endfor
170 %else:
170 %else:
171 <div style="padding:5px 0px 10px 0px;">
171 <div style="padding:5px 0px 10px 0px;">
172 ${_('No repositories yet')}
172 ${_('No repositories yet')}
173 %if h.HasPermissionAny('hg.admin','hg.create.repository')():
173 %if h.HasPermissionAny('hg.admin','hg.create.repository')():
174 ${h.link_to(_('create one now'),h.url('admin_settings_create_repository'),class_="ui-button-small")}
174 ${h.link_to(_('create one now'),h.url('admin_settings_create_repository'),class_="ui-button-small")}
175 %endif
175 %endif
176 </div>
176 </div>
177 %endif
177 %endif
178 </tbody>
178 </tbody>
179 </table>
179 </table>
180 </div>
180 </div>
181 </div>
181 </div>
182 <script type="text/javascript">
182 <script type="text/javascript">
183 var nodes = YUQ('div.table tr td a.repo_name');
183 var nodes = YUQ('div.table tr td a.repo_name');
184 var target = 'q_filter';
184 var target = 'q_filter';
185 var func = function(node){
185 var func = function(node){
186 return node.parentNode.parentNode;
186 return node.parentNode.parentNode;
187 }
187 }
188 q_filter(target,nodes,func);
188 q_filter(target,nodes,func);
189 </script>
189 </script>
190 </%def>
190 </%def>
@@ -1,270 +1,270 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2 <%inherit file="/base/base.html"/>
2 <%inherit file="/base/base.html"/>
3
3
4 <%def name="title()">
4 <%def name="title()">
5 ${_('Edit users group')} ${c.users_group.users_group_name} - ${c.rhodecode_name}
5 ${_('Edit users group')} ${c.users_group.users_group_name} - ${c.rhodecode_name}
6 </%def>
6 </%def>
7
7
8 <%def name="breadcrumbs_links()">
8 <%def name="breadcrumbs_links()">
9 ${h.link_to(_('Admin'),h.url('admin_home'))}
9 ${h.link_to(_('Admin'),h.url('admin_home'))}
10 &raquo;
10 &raquo;
11 ${h.link_to(_('UsersGroups'),h.url('users_groups'))}
11 ${h.link_to(_('UsersGroups'),h.url('users_groups'))}
12 &raquo;
12 &raquo;
13 ${_('edit')} "${c.users_group.users_group_name}"
13 ${_('edit')} "${c.users_group.users_group_name}"
14 </%def>
14 </%def>
15
15
16 <%def name="page_nav()">
16 <%def name="page_nav()">
17 ${self.menu('admin')}
17 ${self.menu('admin')}
18 </%def>
18 </%def>
19
19
20 <%def name="main()">
20 <%def name="main()">
21 <div class="box box-left">
21 <div class="box box-left">
22 <!-- box / title -->
22 <!-- box / title -->
23 <div class="title">
23 <div class="title">
24 ${self.breadcrumbs()}
24 ${self.breadcrumbs()}
25 </div>
25 </div>
26 <!-- end box / title -->
26 <!-- end box / title -->
27 ${h.form(url('users_group', id=c.users_group.users_group_id),method='put', id='edit_users_group')}
27 ${h.form(url('users_group', id=c.users_group.users_group_id),method='put', id='edit_users_group')}
28 <div class="form">
28 <div class="form">
29 <!-- fields -->
29 <!-- fields -->
30 <div class="fields">
30 <div class="fields">
31 <div class="field">
31 <div class="field">
32 <div class="label">
32 <div class="label">
33 <label for="users_group_name">${_('Group name')}:</label>
33 <label for="users_group_name">${_('Group name')}:</label>
34 </div>
34 </div>
35 <div class="input">
35 <div class="input">
36 ${h.text('users_group_name',class_='small')}
36 ${h.text('users_group_name',class_='small')}
37 </div>
37 </div>
38 </div>
38 </div>
39
39
40 <div class="field">
40 <div class="field">
41 <div class="label label-checkbox">
41 <div class="label label-checkbox">
42 <label for="users_group_active">${_('Active')}:</label>
42 <label for="users_group_active">${_('Active')}:</label>
43 </div>
43 </div>
44 <div class="checkboxes">
44 <div class="checkboxes">
45 ${h.checkbox('users_group_active',value=True)}
45 ${h.checkbox('users_group_active',value=True)}
46 </div>
46 </div>
47 </div>
47 </div>
48 <div class="field">
48 <div class="field">
49 <div class="label">
49 <div class="label">
50 <label for="users_group_active">${_('Members')}:</label>
50 <label for="users_group_active">${_('Members')}:</label>
51 </div>
51 </div>
52 <div class="select">
52 <div class="select">
53 <table>
53 <table>
54 <tr>
54 <tr>
55 <td>
55 <td>
56 <div>
56 <div>
57 <div style="float:left">
57 <div style="float:left">
58 <div class="text" style="padding: 0px 0px 6px;">${_('Choosen group members')}</div>
58 <div class="text" style="padding: 0px 0px 6px;">${_('Choosen group members')}</div>
59 ${h.select('users_group_members',[x[0] for x in c.group_members],c.group_members,multiple=True,size=8,style="min-width:210px")}
59 ${h.select('users_group_members',[x[0] for x in c.group_members],c.group_members,multiple=True,size=8,style="min-width:210px")}
60 <div id="remove_all_elements" style="cursor:pointer;text-align:center">
60 <div id="remove_all_elements" style="cursor:pointer;text-align:center">
61 ${_('Remove all elements')}
61 ${_('Remove all elements')}
62 <img alt="remove" style="vertical-align:text-bottom" src="${h.url("/images/icons/arrow_right.png")}"/>
62 <img alt="remove" style="vertical-align:text-bottom" src="${h.url('/images/icons/arrow_right.png')}"/>
63 </div>
63 </div>
64 </div>
64 </div>
65 <div style="float:left;width:20px;padding-top:50px">
65 <div style="float:left;width:20px;padding-top:50px">
66 <img alt="add" id="add_element"
66 <img alt="add" id="add_element"
67 style="padding:2px;cursor:pointer"
67 style="padding:2px;cursor:pointer"
68 src="${h.url("/images/icons/arrow_left.png")}"/>
68 src="${h.url('/images/icons/arrow_left.png')}"/>
69 <br />
69 <br />
70 <img alt="remove" id="remove_element"
70 <img alt="remove" id="remove_element"
71 style="padding:2px;cursor:pointer"
71 style="padding:2px;cursor:pointer"
72 src="${h.url("/images/icons/arrow_right.png")}"/>
72 src="${h.url('/images/icons/arrow_right.png')}"/>
73 </div>
73 </div>
74 <div style="float:left">
74 <div style="float:left">
75 <div class="text" style="padding: 0px 0px 6px;">${_('Available members')}</div>
75 <div class="text" style="padding: 0px 0px 6px;">${_('Available members')}</div>
76 ${h.select('available_members',[],c.available_members,multiple=True,size=8,style="min-width:210px")}
76 ${h.select('available_members',[],c.available_members,multiple=True,size=8,style="min-width:210px")}
77 <div id="add_all_elements" style="cursor:pointer;text-align:center">
77 <div id="add_all_elements" style="cursor:pointer;text-align:center">
78 <img alt="add" style="vertical-align:text-bottom" src="${h.url("/images/icons/arrow_left.png")}"/>
78 <img alt="add" style="vertical-align:text-bottom" src="${h.url('/images/icons/arrow_left.png')}"/>
79 ${_('Add all elements')}
79 ${_('Add all elements')}
80 </div>
80 </div>
81 </div>
81 </div>
82 </div>
82 </div>
83 </td>
83 </td>
84 </tr>
84 </tr>
85 </table>
85 </table>
86 </div>
86 </div>
87
87
88 </div>
88 </div>
89 <div class="buttons">
89 <div class="buttons">
90 ${h.submit('save',_('save'),class_="ui-button")}
90 ${h.submit('save',_('save'),class_="ui-button")}
91 </div>
91 </div>
92 </div>
92 </div>
93 </div>
93 </div>
94 ${h.end_form()}
94 ${h.end_form()}
95 </div>
95 </div>
96
96
97 <script type="text/javascript">
97 <script type="text/javascript">
98 YAHOO.util.Event.onDOMReady(function(){
98 YAHOO.util.Event.onDOMReady(function(){
99 var D = YAHOO.util.Dom;
99 var D = YAHOO.util.Dom;
100 var E = YAHOO.util.Event;
100 var E = YAHOO.util.Event;
101
101
102 //definition of containers ID's
102 //definition of containers ID's
103 var available_container = 'available_members';
103 var available_container = 'available_members';
104 var selected_container = 'users_group_members';
104 var selected_container = 'users_group_members';
105
105
106 //form containing containers id
106 //form containing containers id
107 var form_id = 'edit_users_group';
107 var form_id = 'edit_users_group';
108
108
109 //temp container for selected storage.
109 //temp container for selected storage.
110 var cache = new Array();
110 var cache = new Array();
111 var av_cache = new Array();
111 var av_cache = new Array();
112 var c = D.get(selected_container);
112 var c = D.get(selected_container);
113 var ac = D.get(available_container);
113 var ac = D.get(available_container);
114
114
115 //get only selected options for further fullfilment
115 //get only selected options for further fullfilment
116 for(var i = 0;node =c.options[i];i++){
116 for(var i = 0;node =c.options[i];i++){
117 if(node.selected){
117 if(node.selected){
118 //push selected to my temp storage left overs :)
118 //push selected to my temp storage left overs :)
119 cache.push(node);
119 cache.push(node);
120 }
120 }
121 }
121 }
122
122
123 //clear 'selected' select
123 //clear 'selected' select
124 //c.options.length = 0;
124 //c.options.length = 0;
125
125
126 //fill it with remembered options
126 //fill it with remembered options
127 //for(var i = 0;node = cache[i];i++){
127 //for(var i = 0;node = cache[i];i++){
128 // c.options[i]=new Option(node.text, node.value, false, false);
128 // c.options[i]=new Option(node.text, node.value, false, false);
129 //}
129 //}
130
130
131
131
132 //get all available options to cache
132 //get all available options to cache
133 for(var i = 0;node =ac.options[i];i++){
133 for(var i = 0;node =ac.options[i];i++){
134 //push selected to my temp storage left overs :)
134 //push selected to my temp storage left overs :)
135 av_cache.push(node);
135 av_cache.push(node);
136 }
136 }
137
137
138 //fill available only with those not in choosen
138 //fill available only with those not in choosen
139 ac.options.length=0;
139 ac.options.length=0;
140 tmp_cache = new Array();
140 tmp_cache = new Array();
141
141
142 for(var i = 0;node = av_cache[i];i++){
142 for(var i = 0;node = av_cache[i];i++){
143 var add = true;
143 var add = true;
144 for(var i2 = 0;node_2 = cache[i2];i2++){
144 for(var i2 = 0;node_2 = cache[i2];i2++){
145 if(node.value == node_2.value){
145 if(node.value == node_2.value){
146 add=false;
146 add=false;
147 break;
147 break;
148 }
148 }
149 }
149 }
150 if(add){
150 if(add){
151 tmp_cache.push(new Option(node.text, node.value, false, false));
151 tmp_cache.push(new Option(node.text, node.value, false, false));
152 }
152 }
153 }
153 }
154
154
155 for(var i = 0;node = tmp_cache[i];i++){
155 for(var i = 0;node = tmp_cache[i];i++){
156 ac.options[i] = node;
156 ac.options[i] = node;
157 }
157 }
158
158
159 function prompts_action_callback(e){
159 function prompts_action_callback(e){
160
160
161 var choosen = D.get(selected_container);
161 var choosen = D.get(selected_container);
162 var available = D.get(available_container);
162 var available = D.get(available_container);
163
163
164 //get checked and unchecked options from field
164 //get checked and unchecked options from field
165 function get_checked(from_field){
165 function get_checked(from_field){
166 //temp container for storage.
166 //temp container for storage.
167 var sel_cache = new Array();
167 var sel_cache = new Array();
168 var oth_cache = new Array();
168 var oth_cache = new Array();
169
169
170 for(var i = 0;node = from_field.options[i];i++){
170 for(var i = 0;node = from_field.options[i];i++){
171 if(node.selected){
171 if(node.selected){
172 //push selected fields :)
172 //push selected fields :)
173 sel_cache.push(node);
173 sel_cache.push(node);
174 }
174 }
175 else{
175 else{
176 oth_cache.push(node)
176 oth_cache.push(node)
177 }
177 }
178 }
178 }
179
179
180 return [sel_cache,oth_cache]
180 return [sel_cache,oth_cache]
181 }
181 }
182
182
183 //fill the field with given options
183 //fill the field with given options
184 function fill_with(field,options){
184 function fill_with(field,options){
185 //clear firtst
185 //clear firtst
186 field.options.length=0;
186 field.options.length=0;
187 for(var i = 0;node = options[i];i++){
187 for(var i = 0;node = options[i];i++){
188 field.options[i]=new Option(node.text, node.value,
188 field.options[i]=new Option(node.text, node.value,
189 false, false);
189 false, false);
190 }
190 }
191
191
192 }
192 }
193 //adds to current field
193 //adds to current field
194 function add_to(field,options){
194 function add_to(field,options){
195 for(var i = 0;node = options[i];i++){
195 for(var i = 0;node = options[i];i++){
196 field.appendChild(new Option(node.text, node.value,
196 field.appendChild(new Option(node.text, node.value,
197 false, false));
197 false, false));
198 }
198 }
199 }
199 }
200
200
201 // add action
201 // add action
202 if (this.id=='add_element'){
202 if (this.id=='add_element'){
203 var c = get_checked(available);
203 var c = get_checked(available);
204 add_to(choosen,c[0]);
204 add_to(choosen,c[0]);
205 fill_with(available,c[1]);
205 fill_with(available,c[1]);
206 }
206 }
207 // remove action
207 // remove action
208 if (this.id=='remove_element'){
208 if (this.id=='remove_element'){
209 var c = get_checked(choosen);
209 var c = get_checked(choosen);
210 add_to(available,c[0]);
210 add_to(available,c[0]);
211 fill_with(choosen,c[1]);
211 fill_with(choosen,c[1]);
212 }
212 }
213 // add all elements
213 // add all elements
214 if(this.id=='add_all_elements'){
214 if(this.id=='add_all_elements'){
215 for(var i=0; node = available.options[i];i++){
215 for(var i=0; node = available.options[i];i++){
216 choosen.appendChild(new Option(node.text,
216 choosen.appendChild(new Option(node.text,
217 node.value, false, false));
217 node.value, false, false));
218 }
218 }
219 available.options.length = 0;
219 available.options.length = 0;
220 }
220 }
221 //remove all elements
221 //remove all elements
222 if(this.id=='remove_all_elements'){
222 if(this.id=='remove_all_elements'){
223 for(var i=0; node = choosen.options[i];i++){
223 for(var i=0; node = choosen.options[i];i++){
224 available.appendChild(new Option(node.text,
224 available.appendChild(new Option(node.text,
225 node.value, false, false));
225 node.value, false, false));
226 }
226 }
227 choosen.options.length = 0;
227 choosen.options.length = 0;
228 }
228 }
229
229
230 }
230 }
231
231
232
232
233 E.addListener(['add_element','remove_element',
233 E.addListener(['add_element','remove_element',
234 'add_all_elements','remove_all_elements'],'click',
234 'add_all_elements','remove_all_elements'],'click',
235 prompts_action_callback)
235 prompts_action_callback)
236
236
237 E.addListener(form_id,'submit',function(){
237 E.addListener(form_id,'submit',function(){
238 var choosen = D.get(selected_container);
238 var choosen = D.get(selected_container);
239 for (var i = 0; i < choosen.options.length; i++) {
239 for (var i = 0; i < choosen.options.length; i++) {
240 choosen.options[i].selected = 'selected';
240 choosen.options[i].selected = 'selected';
241 }
241 }
242 })
242 })
243 });
243 });
244 </script>
244 </script>
245 <div class="box box-right">
245 <div class="box box-right">
246 <!-- box / title -->
246 <!-- box / title -->
247 <div class="title">
247 <div class="title">
248 <h5>${_('Permissions')}</h5>
248 <h5>${_('Permissions')}</h5>
249 </div>
249 </div>
250 ${h.form(url('users_group_perm', id=c.users_group.users_group_id), method='put')}
250 ${h.form(url('users_group_perm', id=c.users_group.users_group_id), method='put')}
251 <div class="form">
251 <div class="form">
252 <!-- fields -->
252 <!-- fields -->
253 <div class="fields">
253 <div class="fields">
254 <div class="field">
254 <div class="field">
255 <div class="label label-checkbox">
255 <div class="label label-checkbox">
256 <label for="create_repo_perm">${_('Create repositories')}:</label>
256 <label for="create_repo_perm">${_('Create repositories')}:</label>
257 </div>
257 </div>
258 <div class="checkboxes">
258 <div class="checkboxes">
259 ${h.checkbox('create_repo_perm',value=True)}
259 ${h.checkbox('create_repo_perm',value=True)}
260 </div>
260 </div>
261 </div>
261 </div>
262 <div class="buttons">
262 <div class="buttons">
263 ${h.submit('save',_('Save'),class_="ui-button")}
263 ${h.submit('save',_('Save'),class_="ui-button")}
264 ${h.reset('reset',_('Reset'),class_="ui-button")}
264 ${h.reset('reset',_('Reset'),class_="ui-button")}
265 </div>
265 </div>
266 </div>
266 </div>
267 </div>
267 </div>
268 ${h.end_form()}
268 ${h.end_form()}
269 </div>
269 </div>
270 </%def>
270 </%def>
@@ -1,257 +1,257 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2
2
3 <%inherit file="/base/base.html"/>
3 <%inherit file="/base/base.html"/>
4
4
5 <%def name="title()">
5 <%def name="title()">
6 ${c.repo_name} ${_('Changeset')} - r${c.changeset.revision}:${h.short_id(c.changeset.raw_id)} - ${c.rhodecode_name}
6 ${c.repo_name} ${_('Changeset')} - r${c.changeset.revision}:${h.short_id(c.changeset.raw_id)} - ${c.rhodecode_name}
7 </%def>
7 </%def>
8
8
9 <%def name="breadcrumbs_links()">
9 <%def name="breadcrumbs_links()">
10 ${h.link_to(u'Home',h.url('/'))}
10 ${h.link_to(u'Home',h.url('/'))}
11 &raquo;
11 &raquo;
12 ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))}
12 ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))}
13 &raquo;
13 &raquo;
14 ${_('Changeset')} - r${c.changeset.revision}:${h.short_id(c.changeset.raw_id)}
14 ${_('Changeset')} - r${c.changeset.revision}:${h.short_id(c.changeset.raw_id)}
15 </%def>
15 </%def>
16
16
17 <%def name="page_nav()">
17 <%def name="page_nav()">
18 ${self.menu('changelog')}
18 ${self.menu('changelog')}
19 </%def>
19 </%def>
20
20
21 <%def name="fid(raw_id,path)" filter="strip">
21 <%def name="fid(raw_id,path)" filter="strip">
22 <%
22 <%
23 return 'C-%s-%s' % (h.short_id(raw_id),h.safeid(h.safe_unicode(path)))
23 return 'C-%s-%s' % (h.short_id(raw_id),h.safeid(h.safe_unicode(path)))
24 %>
24 %>
25 </%def>
25 </%def>
26
26
27 <%def name="main()">
27 <%def name="main()">
28 <div class="box">
28 <div class="box">
29 <!-- box / title -->
29 <!-- box / title -->
30 <div class="title">
30 <div class="title">
31 ${self.breadcrumbs()}
31 ${self.breadcrumbs()}
32 </div>
32 </div>
33 <div class="table">
33 <div class="table">
34 <div class="diffblock">
34 <div class="diffblock">
35 <div class="code-header">
35 <div class="code-header">
36 <div>
36 <div>
37 ${_('Changeset')} - r${c.changeset.revision}:${h.short_id(c.changeset.raw_id)}
37 ${_('Changeset')} - r${c.changeset.revision}:${h.short_id(c.changeset.raw_id)}
38 &raquo; <span>${h.link_to(_('raw diff'),
38 &raquo; <span>${h.link_to(_('raw diff'),
39 h.url('raw_changeset_home',repo_name=c.repo_name,revision=c.changeset.raw_id,diff='show'))}</span>
39 h.url('raw_changeset_home',repo_name=c.repo_name,revision=c.changeset.raw_id,diff='show'))}</span>
40 &raquo; <span>${h.link_to(_('download diff'),
40 &raquo; <span>${h.link_to(_('download diff'),
41 h.url('raw_changeset_home',repo_name=c.repo_name,revision=c.changeset.raw_id,diff='download'))}</span>
41 h.url('raw_changeset_home',repo_name=c.repo_name,revision=c.changeset.raw_id,diff='download'))}</span>
42 </div>
42 </div>
43 </div>
43 </div>
44 </div>
44 </div>
45 <div id="changeset_content">
45 <div id="changeset_content">
46 <div class="container">
46 <div class="container">
47 <div class="left">
47 <div class="left">
48 <div class="date">${_('commit')} ${c.changeset.revision}: ${h.short_id(c.changeset.raw_id)}@${c.changeset.date}</div>
48 <div class="date">${_('commit')} ${c.changeset.revision}: ${h.short_id(c.changeset.raw_id)}@${c.changeset.date}</div>
49 <div class="author">
49 <div class="author">
50 <div class="gravatar">
50 <div class="gravatar">
51 <img alt="gravatar" src="${h.gravatar_url(h.email(c.changeset.author),20)}"/>
51 <img alt="gravatar" src="${h.gravatar_url(h.email(c.changeset.author),20)}"/>
52 </div>
52 </div>
53 <span>${h.person(c.changeset.author)}</span><br/>
53 <span>${h.person(c.changeset.author)}</span><br/>
54 <span><a href="mailto:${h.email_or_none(c.changeset.author)}">${h.email_or_none(c.changeset.author)}</a></span><br/>
54 <span><a href="mailto:${h.email_or_none(c.changeset.author)}">${h.email_or_none(c.changeset.author)}</a></span><br/>
55 </div>
55 </div>
56 <div class="message">${h.link_to(h.wrap_paragraphs(c.changeset.message),h.url('changeset_home',repo_name=c.repo_name,revision=c.changeset.raw_id))}</div>
56 <div class="message">${h.link_to(h.wrap_paragraphs(c.changeset.message),h.url('changeset_home',repo_name=c.repo_name,revision=c.changeset.raw_id))}</div>
57 </div>
57 </div>
58 <div class="right">
58 <div class="right">
59 <div class="changes">
59 <div class="changes">
60 % if len(c.changeset.affected_files) <= c.affected_files_cut_off:
60 % if len(c.changeset.affected_files) <= c.affected_files_cut_off:
61 <span class="removed" title="${_('removed')}">${len(c.changeset.removed)}</span>
61 <span class="removed" title="${_('removed')}">${len(c.changeset.removed)}</span>
62 <span class="changed" title="${_('changed')}">${len(c.changeset.changed)}</span>
62 <span class="changed" title="${_('changed')}">${len(c.changeset.changed)}</span>
63 <span class="added" title="${_('added')}">${len(c.changeset.added)}</span>
63 <span class="added" title="${_('added')}">${len(c.changeset.added)}</span>
64 % else:
64 % else:
65 <span class="removed" title="${_('affected %s files') % len(c.changeset.affected_files)}">!</span>
65 <span class="removed" title="${_('affected %s files') % len(c.changeset.affected_files)}">!</span>
66 <span class="changed" title="${_('affected %s files') % len(c.changeset.affected_files)}">!</span>
66 <span class="changed" title="${_('affected %s files') % len(c.changeset.affected_files)}">!</span>
67 <span class="added" title="${_('affected %s files') % len(c.changeset.affected_files)}">!</span>
67 <span class="added" title="${_('affected %s files') % len(c.changeset.affected_files)}">!</span>
68 % endif
68 % endif
69 </div>
69 </div>
70 %if len(c.changeset.parents)>1:
70 %if len(c.changeset.parents)>1:
71 <div class="merge">
71 <div class="merge">
72 ${_('merge')}<img alt="merge" src="${h.url('/images/icons/arrow_join.png')}"/>
72 ${_('merge')}<img alt="merge" src="${h.url('/images/icons/arrow_join.png')}"/>
73 </div>
73 </div>
74 %endif
74 %endif
75
75
76 %if c.changeset.parents:
76 %if c.changeset.parents:
77 %for p_cs in reversed(c.changeset.parents):
77 %for p_cs in reversed(c.changeset.parents):
78 <div class="parent">${_('Parent')} ${p_cs.revision}: ${h.link_to(h.short_id(p_cs.raw_id),
78 <div class="parent">${_('Parent')} ${p_cs.revision}: ${h.link_to(h.short_id(p_cs.raw_id),
79 h.url('changeset_home',repo_name=c.repo_name,revision=p_cs.raw_id),title=p_cs.message)}
79 h.url('changeset_home',repo_name=c.repo_name,revision=p_cs.raw_id),title=p_cs.message)}
80 </div>
80 </div>
81 %endfor
81 %endfor
82 %else:
82 %else:
83 <div class="parent">${_('No parents')}</div>
83 <div class="parent">${_('No parents')}</div>
84 %endif
84 %endif
85 <span class="logtags">
85 <span class="logtags">
86 <span class="branchtag" title="${'%s %s' % (_('branch'),c.changeset.branch)}">
86 <span class="branchtag" title="${'%s %s' % (_('branch'),c.changeset.branch)}">
87 ${h.link_to(c.changeset.branch,h.url('files_home',repo_name=c.repo_name,revision=c.changeset.raw_id))}</span>
87 ${h.link_to(c.changeset.branch,h.url('files_home',repo_name=c.repo_name,revision=c.changeset.raw_id))}</span>
88 %for tag in c.changeset.tags:
88 %for tag in c.changeset.tags:
89 <span class="tagtag" title="${'%s %s' % (_('tag'),tag)}">
89 <span class="tagtag" title="${'%s %s' % (_('tag'),tag)}">
90 ${h.link_to(tag,h.url('files_home',repo_name=c.repo_name,revision=c.changeset.raw_id))}</span>
90 ${h.link_to(tag,h.url('files_home',repo_name=c.repo_name,revision=c.changeset.raw_id))}</span>
91 %endfor
91 %endfor
92 </span>
92 </span>
93 </div>
93 </div>
94 </div>
94 </div>
95 <span style="font-size:1.1em;font-weight: bold">
95 <span style="font-size:1.1em;font-weight: bold">
96 ${_('%s files affected with %s additions and %s deletions.') % (len(c.changeset.affected_files),c.lines_added,c.lines_deleted)}
96 ${_('%s files affected with %s additions and %s deletions.') % (len(c.changeset.affected_files),c.lines_added,c.lines_deleted)}
97 </span>
97 </span>
98 <div class="cs_files">
98 <div class="cs_files">
99 %for change,filenode,diff,cs1,cs2,stat in c.changes:
99 %for change,filenode,diff,cs1,cs2,stat in c.changes:
100 <div class="cs_${change}">
100 <div class="cs_${change}">
101 <div class="node">
101 <div class="node">
102 %if change != 'removed':
102 %if change != 'removed':
103 ${h.link_to(h.safe_unicode(filenode.path),h.url.current(anchor=self.fid(filenode.changeset.raw_id,filenode.path)))}
103 ${h.link_to(h.safe_unicode(filenode.path),h.url.current(anchor=self.fid(filenode.changeset.raw_id,filenode.path)))}
104 %else:
104 %else:
105 ${h.link_to(h.safe_unicode(filenode.path),h.url.current(anchor=self.fid('',filenode.path)))}
105 ${h.link_to(h.safe_unicode(filenode.path),h.url.current(anchor=self.fid('',filenode.path)))}
106 %endif
106 %endif
107 </div>
107 </div>
108 <div class="changes">${h.fancy_file_stats(stat)}</div>
108 <div class="changes">${h.fancy_file_stats(stat)}</div>
109 </div>
109 </div>
110 %endfor
110 %endfor
111 % if c.cut_off:
111 % if c.cut_off:
112 ${_('Changeset was too big and was cut off...')}
112 ${_('Changeset was too big and was cut off...')}
113 % endif
113 % endif
114 </div>
114 </div>
115 </div>
115 </div>
116
116
117 </div>
117 </div>
118
118
119 %for change,filenode,diff,cs1,cs2,stat in c.changes:
119 %for change,filenode,diff,cs1,cs2,stat in c.changes:
120 %if change !='removed':
120 %if change !='removed':
121 <div style="clear:both;height:10px"></div>
121 <div style="clear:both;height:10px"></div>
122 <div class="diffblock margined" id="${self.fid(filenode.changeset.raw_id,filenode.path)}">
122 <div class="diffblock margined comm" id="${self.fid(filenode.changeset.raw_id,filenode.path)}">
123 <div class="code-header">
123 <div class="code-header">
124 <div class="changeset_header">
124 <div class="changeset_header">
125 <span class="changeset_file">
125 <span class="changeset_file">
126 ${h.link_to_if(change!='removed',h.safe_unicode(filenode.path),h.url('files_home',repo_name=c.repo_name,
126 ${h.link_to_if(change!='removed',h.safe_unicode(filenode.path),h.url('files_home',repo_name=c.repo_name,
127 revision=filenode.changeset.raw_id,f_path=h.safe_unicode(filenode.path)))}
127 revision=filenode.changeset.raw_id,f_path=h.safe_unicode(filenode.path)))}
128 </span>
128 </span>
129 &raquo; <span>${h.link_to(_('diff'),
129 &raquo; <span>${h.link_to(_('diff'),
130 h.url('files_diff_home',repo_name=c.repo_name,f_path=h.safe_unicode(filenode.path),diff2=cs2,diff1=cs1,diff='diff'))}</span>
130 h.url('files_diff_home',repo_name=c.repo_name,f_path=h.safe_unicode(filenode.path),diff2=cs2,diff1=cs1,diff='diff'))}</span>
131 &raquo; <span>${h.link_to(_('raw diff'),
131 &raquo; <span>${h.link_to(_('raw diff'),
132 h.url('files_diff_home',repo_name=c.repo_name,f_path=h.safe_unicode(filenode.path),diff2=cs2,diff1=cs1,diff='raw'))}</span>
132 h.url('files_diff_home',repo_name=c.repo_name,f_path=h.safe_unicode(filenode.path),diff2=cs2,diff1=cs1,diff='raw'))}</span>
133 &raquo; <span>${h.link_to(_('download diff'),
133 &raquo; <span>${h.link_to(_('download diff'),
134 h.url('files_diff_home',repo_name=c.repo_name,f_path=h.safe_unicode(filenode.path),diff2=cs2,diff1=cs1,diff='download'))}</span>
134 h.url('files_diff_home',repo_name=c.repo_name,f_path=h.safe_unicode(filenode.path),diff2=cs2,diff1=cs1,diff='download'))}</span>
135 <span style="float:right">
135 <span style="float:right">
136 <label>
136 <label>
137 ${_('show inline comments')}
137 ${_('show inline comments')}
138 ${h.checkbox('',checked="checked",class_="show-inline-comments",id_for=self.fid(filenode.changeset.raw_id,filenode.path))}
138 ${h.checkbox('',checked="checked",class_="show-inline-comments",id_for=self.fid(filenode.changeset.raw_id,filenode.path))}
139 </label>
139 </label>
140 </span>
140 </span>
141 </div>
141 </div>
142 </div>
142 </div>
143 <div class="code-body">
143 <div class="code-body">
144 <div class="full_f_path" path="${filenode.path}"></div>
144 <div class="full_f_path" path="${filenode.path}"></div>
145 %if diff:
145 %if diff:
146 ${diff|n}
146 ${diff|n}
147 %else:
147 %else:
148 ${_('No changes in this file')}
148 ${_('No changes in this file')}
149 %endif
149 %endif
150 </div>
150 </div>
151 </div>
151 </div>
152 %endif
152 %endif
153 %endfor
153 %endfor
154
154
155 <%namespace name="comment" file="/changeset/changeset_file_comment.html"/>
155 <%namespace name="comment" file="/changeset/changeset_file_comment.html"/>
156 ## template for inline comment form
156 ## template for inline comment form
157 ${comment.comment_inline_form()}
157 ${comment.comment_inline_form()}
158
158
159 <div class="comments">
159 <div class="comments">
160 <div class="comments-number">${len(c.comments)} comment(s) (${c.inline_cnt} ${_('inline')})</div>
160 <div class="comments-number">${len(c.comments)} comment(s) (${c.inline_cnt} ${_('inline')})</div>
161
161
162 %for path, lines in c.inline_comments:
162 %for path, lines in c.inline_comments:
163 <div style="display:none" class="inline-comment-placeholder" path="${path}" target_id="${self.fid(c.changeset.raw_id,path)}">
163 <div style="display:none" class="inline-comment-placeholder" path="${path}" target_id="${self.fid(c.changeset.raw_id,path)}">
164 % for line,comments in lines.iteritems():
164 % for line,comments in lines.iteritems():
165 <div class="inline-comment-placeholder-line" line="${line}" target_id="${h.safeid(h.safe_unicode(path))}">
165 <div class="inline-comment-placeholder-line" line="${line}" target_id="${h.safeid(h.safe_unicode(path))}">
166 %for co in comments:
166 %for co in comments:
167 ${comment.comment_block(co)}
167 ${comment.comment_block(co)}
168 %endfor
168 %endfor
169 </div>
169 </div>
170 %endfor
170 %endfor
171 </div>
171 </div>
172 %endfor
172 %endfor
173
173
174 %for co in c.comments:
174 %for co in c.comments:
175 ${comment.comment_block(co)}
175 ${comment.comment_block(co)}
176 %endfor
176 %endfor
177 %if c.rhodecode_user.username != 'default':
177 %if c.rhodecode_user.username != 'default':
178 <div class="comment-form">
178 <div class="comment-form">
179 ${h.form(h.url('changeset_comment', repo_name=c.repo_name, revision=c.changeset.raw_id))}
179 ${h.form(h.url('changeset_comment', repo_name=c.repo_name, revision=c.changeset.raw_id))}
180 <strong>${_('Leave a comment')}</strong>
180 <strong>${_('Leave a comment')}</strong>
181 <div class="clearfix">
181 <div class="clearfix">
182 <div class="comment-help">
182 <div class="comment-help">
183 ${_('Comments parsed using')} <a href="${h.url('rst_help')}">RST</a> ${_('syntax')}
183 ${_('Comments parsed using')} <a href="${h.url('rst_help')}">RST</a> ${_('syntax')}
184 </div>
184 </div>
185 ${h.textarea('text')}
185 ${h.textarea('text')}
186 </div>
186 </div>
187 <div class="comment-button">
187 <div class="comment-button">
188 ${h.submit('save', _('Comment'), class_='ui-button')}
188 ${h.submit('save', _('Comment'), class_='ui-button')}
189 </div>
189 </div>
190 ${h.end_form()}
190 ${h.end_form()}
191 </div>
191 </div>
192 %endif
192 %endif
193 </div>
193 </div>
194 <script type="text/javascript">
194 <script type="text/javascript">
195 var deleteComment = function(comment_id){
195 var deleteComment = function(comment_id){
196
196
197 var url = "${url('changeset_comment_delete',repo_name=c.repo_name,comment_id='__COMMENT_ID__')}".replace('__COMMENT_ID__',comment_id);
197 var url = "${url('changeset_comment_delete',repo_name=c.repo_name,comment_id='__COMMENT_ID__')}".replace('__COMMENT_ID__',comment_id);
198 var postData = '_method=delete';
198 var postData = '_method=delete';
199 var success = function(o){
199 var success = function(o){
200 var n = YUD.get('comment-'+comment_id);
200 var n = YUD.get('comment-'+comment_id);
201 n.parentNode.removeChild(n);
201 n.parentNode.removeChild(n);
202 }
202 }
203 ajaxPOST(url,postData,success);
203 ajaxPOST(url,postData,success);
204 }
204 }
205
205
206 YUE.onDOMReady(function(){
206 YUE.onDOMReady(function(){
207
207
208 YUE.on(YUQ('.show-inline-comments'),'change',function(e){
208 YUE.on(YUQ('.show-inline-comments'),'change',function(e){
209 var show = 'none';
209 var show = 'none';
210 var target = e.currentTarget;
210 var target = e.currentTarget;
211 if(target.checked){
211 if(target.checked){
212 var show = ''
212 var show = ''
213 }
213 }
214 var boxid = YUD.getAttribute(target,'id_for');
214 var boxid = YUD.getAttribute(target,'id_for');
215 var comments = YUQ('#{0} .inline-comments'.format(boxid));
215 var comments = YUQ('#{0} .inline-comments'.format(boxid));
216 for(c in comments){
216 for(c in comments){
217 YUD.setStyle(comments[c],'display',show);
217 YUD.setStyle(comments[c],'display',show);
218 }
218 }
219 })
219 })
220
220
221
221
222
222
223 YUE.on(YUQ('.line'),'click',function(e){
223 YUE.on(YUQ('.line'),'click',function(e){
224 var tr = e.currentTarget;
224 var tr = e.currentTarget;
225 if(YUD.hasClass(tr,'form-open') || YUD.hasClass(tr,'context')){
225 if(YUD.hasClass(tr,'form-open') || YUD.hasClass(tr,'context')){
226 return
226 return
227 }
227 }
228 YUD.addClass(tr,'form-open');
228 YUD.addClass(tr,'form-open');
229 var node = tr.parentNode.parentNode.parentNode.getElementsByClassName('full_f_path')[0];
229 var node = tr.parentNode.parentNode.parentNode.getElementsByClassName('full_f_path')[0];
230 var f_path = YUD.getAttribute(node,'path');
230 var f_path = YUD.getAttribute(node,'path');
231 var lineno = getLineNo(tr);
231 var lineno = getLineNo(tr);
232 var form = createInlineForm(tr, f_path, lineno);
232 var form = createInlineForm(tr, f_path, lineno);
233 YUD.insertAfter(form,tr);
233 YUD.insertAfter(form,tr);
234 });
234 });
235
235
236 // inject comments into they proper positions
236 // inject comments into they proper positions
237 var file_comments = YUQ('.inline-comment-placeholder');
237 var file_comments = YUQ('.inline-comment-placeholder');
238
238
239 for (f in file_comments){
239 for (f in file_comments){
240 var box = file_comments[f];
240 var box = file_comments[f];
241 var inlines = box.children;
241 var inlines = box.children;
242 for(var i=0; i<inlines.length; i++){
242 for(var i=0; i<inlines.length; i++){
243 try{
243 try{
244 var inline = inlines[i];
244 var inline = inlines[i];
245 var lineno = YUD.getAttribute(inlines[i],'line');
245 var lineno = YUD.getAttribute(inlines[i],'line');
246 var lineid = "{0}_{1}".format(YUD.getAttribute(inline,'target_id'),lineno);
246 var lineid = "{0}_{1}".format(YUD.getAttribute(inline,'target_id'),lineno);
247 var target_line = YUD.get(lineid);
247 var target_line = YUD.get(lineid);
248 var comments = new YAHOO.util.Element(tableTr('inline-comments',inline.innerHTML))
248 var comments = new YAHOO.util.Element(tableTr('inline-comments',inline.innerHTML))
249 YUD.insertAfter(comments,target_line.parentNode);
249 YUD.insertAfter(comments,target_line.parentNode);
250 }catch(e){}
250 }catch(e){}
251 }
251 }
252 }
252 }
253 })
253 })
254
254
255 </script>
255 </script>
256 </div>
256 </div>
257 </%def>
257 </%def>
@@ -1,69 +1,69 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2 <%inherit file="/base/base.html"/>
2 <%inherit file="/base/base.html"/>
3 <%def name="title()">
3 <%def name="title()">
4 ${_('Journal')} - ${c.rhodecode_name}
4 ${_('Journal')} - ${c.rhodecode_name}
5 </%def>
5 </%def>
6 <%def name="breadcrumbs()">
6 <%def name="breadcrumbs()">
7 ${c.rhodecode_name}
7 ${c.rhodecode_name}
8 </%def>
8 </%def>
9 <%def name="page_nav()">
9 <%def name="page_nav()">
10 ${self.menu('home')}
10 ${self.menu('home')}
11 </%def>
11 </%def>
12 <%def name="main()">
12 <%def name="main()">
13
13
14 <div class="box box-left">
14 <div class="box box-left">
15 <!-- box / title -->
15 <!-- box / title -->
16 <div class="title">
16 <div class="title">
17 <h5>${_('Journal')}</h5>
17 <h5>${_('Journal')}</h5>
18 </div>
18 </div>
19 <script type="text/javascript">
19 <script type="text/javascript">
20 function show_more_event(){
20 function show_more_event(){
21 YUE.on(YUD.getElementsByClassName('show_more'),'click',function(e){
21 YUE.on(YUD.getElementsByClassName('show_more'),'click',function(e){
22 var el = e.target;
22 var el = e.target;
23 YUD.setStyle(YUD.get(el.id.substring(1)),'display','');
23 YUD.setStyle(YUD.get(el.id.substring(1)),'display','');
24 YUD.setStyle(el.parentNode,'display','none');
24 YUD.setStyle(el.parentNode,'display','none');
25 });
25 });
26 }
26 }
27 </script>
27 </script>
28 <div id="journal">${c.journal_data}</div>
28 <div id="journal">${c.journal_data}</div>
29 </div>
29 </div>
30
30
31 <div class="box box-right">
31 <div class="box box-right">
32 <!-- box / title -->
32 <!-- box / title -->
33 <div class="title">
33 <div class="title">
34 <h5>${_('Following')}</h5>
34 <h5>${_('Following')}</h5>
35 </div>
35 </div>
36 <div>
36 <div>
37 %if c.following:
37 %if c.following:
38 %for entry in c.following:
38 %for entry in c.following:
39 <div class="currently_following">
39 <div class="currently_following">
40 %if entry.follows_user_id:
40 %if entry.follows_user_id:
41 <img title="${_('following user')}" alt="${_('user')}" src="${h.url("/images/icons/user.png")}"/>
41 <img title="${_('following user')}" alt="${_('user')}" src="${h.url('/images/icons/user.png')}"/>
42 ${entry.follows_user.full_contact}
42 ${entry.follows_user.full_contact}
43 %endif
43 %endif
44
44
45 %if entry.follows_repo_id:
45 %if entry.follows_repo_id:
46
46
47 <div style="float:left;padding-right:5px">
47 <div style="float:left;padding-right:5px">
48 <span id="follow_toggle_${entry.follows_repository.repo_id}" class="following" title="${_('Stop following this repository')}"
48 <span id="follow_toggle_${entry.follows_repository.repo_id}" class="following" title="${_('Stop following this repository')}"
49 onclick="javascript:toggleFollowingRepo(this,${entry.follows_repository.repo_id},'${str(h.get_token())}')">
49 onclick="javascript:toggleFollowingRepo(this,${entry.follows_repository.repo_id},'${str(h.get_token())}')">
50 </span>
50 </span>
51 </div>
51 </div>
52 %if entry.follows_repository.private:
52 %if entry.follows_repository.private:
53 <img class="icon" title="${_('private repository')}" alt="${_('private repository')}" src="${h.url("/images/icons/lock.png")}"/>
53 <img class="icon" title="${_('private repository')}" alt="${_('private repository')}" src="${h.url('/images/icons/lock.png')}"/>
54 %else:
54 %else:
55 <img class="icon" title="${_('public repository')}" alt="${_('public repository')}" src="${h.url("/images/icons/lock_open.png")}"/>
55 <img class="icon" title="${_('public repository')}" alt="${_('public repository')}" src="${h.url('/images/icons/lock_open.png')}"/>
56 %endif
56 %endif
57
57
58 ${h.link_to(entry.follows_repository.repo_name,h.url('summary_home',
58 ${h.link_to(entry.follows_repository.repo_name,h.url('summary_home',
59 repo_name=entry.follows_repository.repo_name))}
59 repo_name=entry.follows_repository.repo_name))}
60
60
61 %endif
61 %endif
62 </div>
62 </div>
63 %endfor
63 %endfor
64 %else:
64 %else:
65 ${_('You are not following any users or repositories')}
65 ${_('You are not following any users or repositories')}
66 %endif
66 %endif
67 </div>
67 </div>
68 </div>
68 </div>
69 </%def>
69 </%def>
General Comments 0
You need to be logged in to leave comments. Login now