diff --git a/rhodecode/apps/repository/views/repo_files.py b/rhodecode/apps/repository/views/repo_files.py --- a/rhodecode/apps/repository/views/repo_files.py +++ b/rhodecode/apps/repository/views/repo_files.py @@ -873,18 +873,17 @@ class RepoFilesView(RepoAppView): self.db_repo_name, self.db_repo.repo_id, commit.raw_id, f_path) return {'nodes': metadata} - def _create_references( - self, branches_or_tags, symbolic_reference, f_path): + def _create_references(self, branches_or_tags, symbolic_reference, f_path, ref_type): items = [] for name, commit_id in branches_or_tags.items(): - sym_ref = symbolic_reference(commit_id, name, f_path) - items.append((sym_ref, name)) + sym_ref = symbolic_reference(commit_id, name, f_path, ref_type) + items.append((sym_ref, name, ref_type)) return items - def _symbolic_reference(self, commit_id, name, f_path): + def _symbolic_reference(self, commit_id, name, f_path, ref_type): return commit_id - def _symbolic_reference_svn(self, commit_id, name, f_path): + def _symbolic_reference_svn(self, commit_id, name, f_path, ref_type): new_f_path = vcspath.join(name, f_path) return u'%s@%s' % (new_f_path, commit_id) @@ -914,7 +913,7 @@ class RepoFilesView(RepoAppView): for commit in commits: branch = ' (%s)' % commit.branch if commit.branch else '' n_desc = 'r%s:%s%s' % (commit.idx, commit.short_id, branch) - commits_group[0].append((commit.raw_id, n_desc,)) + commits_group[0].append((commit.raw_id, n_desc, 'sha')) history.append(commits_group) symbolic_reference = self._symbolic_reference @@ -930,11 +929,11 @@ class RepoFilesView(RepoAppView): symbolic_reference = self._symbolic_reference_svn branches = self._create_references( - self.rhodecode_vcs_repo.branches, symbolic_reference, f_path) + self.rhodecode_vcs_repo.branches, symbolic_reference, f_path, 'branch') branches_group = (branches, _("Branches")) tags = self._create_references( - self.rhodecode_vcs_repo.tags, symbolic_reference, f_path) + self.rhodecode_vcs_repo.tags, symbolic_reference, f_path, 'tag') tags_group = (tags, _("Tags")) history.append(branches_group) @@ -962,7 +961,7 @@ class RepoFilesView(RepoAppView): for obj in file_history: res.append({ 'text': obj[1], - 'children': [{'id': o[0], 'text': o[1]} for o in obj[0]] + 'children': [{'id': o[0], 'text': o[1], 'type': o[2]} for o in obj[0]] }) data = { diff --git a/rhodecode/lib/helpers.py b/rhodecode/lib/helpers.py --- a/rhodecode/lib/helpers.py +++ b/rhodecode/lib/helpers.py @@ -199,6 +199,7 @@ class _GetError(object): if form_errors and field_name in form_errors: return literal(tmpl % form_errors.get(field_name)) + get_error = _GetError() @@ -215,33 +216,30 @@ class _ToolTip(object): tooltip_title = tooltip_title.replace('<', '<').replace('>', '>') return tooltip_title + tooltip = _ToolTip() -def files_breadcrumbs(repo_name, commit_id, file_path, at_ref=None): +def files_breadcrumbs(repo_name, commit_id, file_path, at_ref=None, limit_items=False): if isinstance(file_path, str): file_path = safe_unicode(file_path) + route_qry = {'at': at_ref} if at_ref else None - # TODO: johbo: Is this always a url like path, or is this operating - # system dependent? - path_segments = file_path.split('/') + # first segment is a `..` link to repo files + root_name = literal(u'') + url_segments = [ + link_to( + root_name, + route_path( + 'repo_files', + repo_name=repo_name, + commit_id=commit_id, + f_path='', + _query=route_qry), + )] - repo_name_html = escape(repo_name) - if len(path_segments) == 1 and path_segments[0] == '': - url_segments = [repo_name_html] - else: - url_segments = [ - link_to( - repo_name_html, - route_path( - 'repo_files', - repo_name=repo_name, - commit_id=commit_id, - f_path='', - _query=route_qry), - )] - + path_segments = file_path.split('/') last_cnt = len(path_segments) - 1 for cnt, segment in enumerate(path_segments): if not segment: @@ -262,7 +260,16 @@ def files_breadcrumbs(repo_name, commit_ else: url_segments.append(segment_html) - return literal('/'.join(url_segments)) + limited_url_segments = url_segments[:1] + ['...'] + url_segments[-5:] + if limit_items and len(limited_url_segments) < len(url_segments): + url_segments = limited_url_segments + + full_path = file_path + icon = ''.format(full_path) + if file_path == '': + return root_name + else: + return literal(' / '.join(url_segments) + icon) def code_highlight(code, lexer, formatter, use_hl_filter=False): diff --git a/rhodecode/public/css/main.less b/rhodecode/public/css/main.less --- a/rhodecode/public/css/main.less +++ b/rhodecode/public/css/main.less @@ -2192,12 +2192,13 @@ h3.files_location{ } } - .select-index-number { - margin: 0 0 0 20px; - color: @grey3; - } } + .select-index-number { + margin: 0 0 0 20px; + color: @grey3; + } + .search_activate { display: table-cell; vertical-align: middle; diff --git a/rhodecode/public/css/rcicons.less b/rhodecode/public/css/rcicons.less --- a/rhodecode/public/css/rcicons.less +++ b/rhodecode/public/css/rcicons.less @@ -1,12 +1,12 @@ @font-face { font-family: 'rcicons'; - src: url('../fonts/RCIcons/rcicons.eot?73199028'); - src: url('../fonts/RCIcons/rcicons.eot?73199028#iefix') format('embedded-opentype'), - url('../fonts/RCIcons/rcicons.woff2?73199028') format('woff2'), - url('../fonts/RCIcons/rcicons.woff?73199028') format('woff'), - url('../fonts/RCIconst/rcicons.ttf?73199028') format('truetype'), - url('../fonts/RCIcons/rcicons.svg?73199028#rcicons') format('svg'); + src: url('../fonts/RCIcons/rcicons.eot?9641970'); + src: url('../fonts/RCIcons/rcicons.eot?9641970#iefix') format('embedded-opentype'), + url('../fonts/RCIcons/rcicons.woff2?9641970') format('woff2'), + url('../fonts/RCIcons/rcicons.woff?9641970') format('woff'), + url('../fonts/RCIcons/rcicons.ttf?9641970') format('truetype'), + url('../fonts/RCIcons/rcicons.svg?9641970#rcicons') format('svg'); font-weight: normal; font-style: normal; @@ -186,6 +186,7 @@ .icon-minus:before { content: '\e820'; } /* '' */ .icon-info-circled:before { content: '\e821'; } /* '' */ .icon-upload:before { content: '\e822'; } /* '' */ +.icon-home:before { content: '\e823'; } /* '' */ .icon-git:before { content: '\e82a'; } /* '' */ .icon-hg:before { content: '\e82d'; } /* '' */ .icon-svn:before { content: '\e82e'; } /* '' */ diff --git a/rhodecode/public/css/summary.less b/rhodecode/public/css/summary.less --- a/rhodecode/public/css/summary.less +++ b/rhodecode/public/css/summary.less @@ -425,7 +425,6 @@ } .stats-info { - margin-top: 5px; color: @grey4; } @@ -434,7 +433,6 @@ text-align: right; color: @grey4; padding: 10px; - margin-top: 15px; } .file-container { diff --git a/rhodecode/public/fonts/RCIcons/config.json b/rhodecode/public/fonts/RCIcons/config.json --- a/rhodecode/public/fonts/RCIcons/config.json +++ b/rhodecode/public/fonts/RCIcons/config.json @@ -552,6 +552,12 @@ "src": "fontelico" }, { + "uid": "513ac180ff85bd275f2b736720cbbf5e", + "css": "home", + "code": 59427, + "src": "entypo" + }, + { "uid": "c43db6645e7515889fc2193294f50767", "css": "plus", "code": 59411, diff --git a/rhodecode/public/fonts/RCIcons/rcicons.eot b/rhodecode/public/fonts/RCIcons/rcicons.eot index f4bac9e63d0eb286d2010c9218636a67f3990b39..2c776640a9dabaac9d52da373366f4802313ac42 GIT binary patch literal 17836 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 diff --git a/rhodecode/public/fonts/RCIcons/rcicons.svg b/rhodecode/public/fonts/RCIcons/rcicons.svg --- a/rhodecode/public/fonts/RCIcons/rcicons.svg +++ b/rhodecode/public/fonts/RCIcons/rcicons.svg @@ -76,6 +76,8 @@ + + diff --git a/rhodecode/public/fonts/RCIcons/rcicons.ttf b/rhodecode/public/fonts/RCIcons/rcicons.ttf index 4b5d46ef39424db778faa0519503f9c94ddb5ff3..8d27f5bf37f690fcf011f7111d942dfceea88958 GIT binary patch literal 17672 zc%0pQYj_*ib>Mx>dj|6WW(E&}AP9f}U*ZEG06i(ml1Q1BWLZ+=NU{~vA|+9xNR^`e zj1?z#vbO6=u9Hn#XPeeuC+@cK=fvt4x4UkWI*!{o+15?7soglK>!cglZ4;~O&F5%E zaL=6?P>`ZT>G$ogC2(i%`<{F5dEIj_h%iD(MfW0#21a+j@0#?lcie>#UJkjtuHV^T z9PZya2ZjvwH~A3}c+(0kLf2gd*7i3k1&+G~(Lb!_~O<9HYOTPTk~ zIz2OfZ1SczzV$dlYkwcc{PW|pC+3B}d9w?lYo;OnX#}v-9g9a0;`$fQFP`W6S-$BYd1{(0%=}~VG_OSoP zZ=gX;7!W)~SNz+4aMJ`@S3~FC^YF13=JMH~Pxxaq{&$Dp^RT)|tsreRmqC7Q@jR)j#-g_Fb1#zn>|FSsz@of4Kdi~WP8-1MM zVaUZ^K4q&4`5X>II)l*(G)Cb0g>WHP^YyABOP`!{@e3K6jwI&Ok|-jiXa;~$VE{ULvf(N7L-J-D23W!HtjG*7UfU}%A*46L|v#G^}xKBp+3|P z^gD=(sDy@48C6gfEk`TRO0){CMr&Yb;i@zE|Nqb9fATLuY7JX=KQQ{K1%b(jS`Zk$ z)q=oit`-DFi?tvyj;{p)Ru$EPz~n)f!wIBe6p;{1t)=(`7Ky|1V1fV}u3j$Cg zss#aP64inL)QM_A06ImrAOOXpS`dJCQ7s5S#i$kppl4JI0#G)p1p#Or)q()jj%q;w zx(6=x18@MUE%O8L0;=`-0k{Iy`uza>focPO08T-*K|dhYN6`7)0Q`pDdD{=bdFY*=`T=+ly;JuCa3eZr`vLe8opbyE9E#43 z_yKqoog4K7a4kBw&kw-A=-f?y08U2dKIsSGX>{)EegN)9=f3X;;B(L!eqgli<$Mgi zgno=~#h)Z&*Kz{{~rIkuwD3s@J;bE5|UO+uPa660aaIL)aTWA zwB_1i?PJ=jq2-~8&;|XJF=lG!h|Sqa`(gX1Zm;{0`|W6N^mEaFiw(sdi~UtR79WX! zA)zOpXwh3v`&_j6F1?@p6zC3C4rfF`6zr%Qb&J(XwK7!57xEEX$hK$lYw%E|)LwKQ zLJ#k`u~aUXZrtr>VZtfwShkJ<1%d$(qd@6uBp^^6^lcgAA2 z9gB6wTkr@=#*^gz9mCn|@aDE;c>hpN$1AKAV=Uv^wN_oT)?UlvW5d=;*>0`u`iQmm zYtRV37hd+?UJktN~tV!@T3?^ z3Z_(*pb7&+gRbQ;p`r|fQBLPSZmRVGHV}R#q#qr;PEoEKJlf!cf20NSU34cT+RJRJ z#pu8wFn=jUAmX+W7X(7oaa*yw3KuJdfx+@neyChvvOV1I3fVn!@Q(QSt=?b)(F=(+S#LOx=f;~Mh*PCH+QdxmVi%a!Bf@?uXCI#MGTFj znus|~76>*)PLc=*6hb*!!65tCXwZg-kvKxQ(7HW?H;0t^an?6}MAm)2{~mpS`~d8b zIOxA?85WzT*M~9Vh7x1tXeM6<8IWbK3gD87V4%PfOEV#yWi?rT3PXV{(6NORiF7tf zelwb-xrM)F@~ySE_qBL?`KD^Dt1YVDIJUW`hvc4)w^z&iZl3n?rf%8)NM~1${2&us zn2Bbg`J=JS!olvfUERaoY9?B}sho`_a=qP~ue&jt$wa4b-dC=6l(L=T*_|(XLH;Jl{)FT}nHR>uabGC>}NjjFrJV$DrSK=>Jvd8#=t z2nt*_sslxGeVPqDF9);?0_r9FPt1nIqNmV2aZbMSv=F9G3yO;O0yHmuR}j7{MWYS+ z{~3Lps>~L|malz5)v#p%iigJZ@v+jvp3>M@>1=5X-wt81emhH&7<-1t5LsMY{23RA zKElkZVnW7KVSRWl_OzN?aF{|Pg?zQSXD%N8Z?WC^g~uaFY&{>_-9bJONqwb0P@c;^ z4= zMX!>MSnU>QCV+Vu;}Xzh7G#aX>IA4MSXtjXS%pDmfvf=G01uo}q@1L9k24perxnqU zipu7?2F!(DA+V|so^Rp!FA5y~XGN+Eb<_tshH#nH`+Py}b)SuP%Y~;wpgmXrGRws4 z+4C2~>l4IU_=#pKicKchgK*?`!iWn$>DzcsABlKC-0UQA%D!3gcFKspKyC+nbQ1k1 zFqyrX0pk@aKz>XOGhqhI$fB!2=(!>&1)zGys2;Np@T?kZkuMB-L|d)+yxRj}Lx_SV z1QHhfk25gnfEeiTs(XF1kB?NZOQ_tayHp#5#u_{@Sjf{CME{;s6xkTz3=xr!*Wjc)FBzhUc~#U*R|~7QoitnY z2+bu5ZZu>Gt{GQAG3knEqD1zr(Ca#&Nsn(ZXbgb^lCHQPhAu$+*%kgUtRNkLqj zTG&Wgyw)1Yq&E~+Q@S$0A)j|!X(k!gOo?}ls3AuMMG>O>NWiNSq+W7czrCyn|8 zHiwlcG>q4(XTd^o)Ft0GwwS%AR3t)9 z_pDge6^}aRR7a?-V~yDx?^%)PTQQ(*KiT?(-k0oIne40f=})wt+-^FtwNBEqlFq_M zp{<>C$lZ{(TP<&AzxYpN4f&se3_(m$x5AW|+6SJ`)2pOOW}41%W8t?U->amWo(KnddIV&02uW-g%*#}D}3LhuRIE0 zoa$X^e|h5W?T;Q_M^;ate)9D6YP{*o4*tlYN69B&{w?9*`eUu#&X+e0A9>`7(=#i% zYYu*L>)jJyW;;)D@jS@Rx5-ywyfO5CbP%0D_rg9Afk4!8AE`un*V~R1I>3l=MX($J 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 diff --git a/rhodecode/public/fonts/RCIcons/rcicons.woff b/rhodecode/public/fonts/RCIcons/rcicons.woff index be082d717ac7352bf61e23bd6c615dd3f90d3dd7..648b7f0d4a8aa406c66681c8cce5cb36949f9b76 GIT binary patch literal 10596 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�AT%Qp;uaNa5#=UG*YQxx-jqNeK2Pb_a%)z*HM|MLP-`HC$ zt}AIJoq5$#;#k+a*Nb!Wn~ z6L|d^|M!1HT2BFn|DBJWO1SeX8}fWI{b(Es-T4O7aSi`$XOe@8j3tOcjE14*=_QJE zaj&KoDli->aCn#;dEqzK>t-AVWsqnLG=mhrDIAtUeKf&+T|6J_Hb>1CW6ftjw`lFR zznpKeo^K12Zc&hK1HwIG=scnb<5y7>4p)l^x$?9Z)e_8zUohJkZ-k)+rdKPdzc;- zMHKaCB~*i8*<4^5K51WW;x~A=;V;)09Hyk;a9=zgGdaTL8hatl?PM`*t3k)Y`1Un^ zLIYY(Y5%p%jJNs2u)nTUi*kied}j-(C|8O%uaMVSsv=GH>2qg}X!ldVOa0w~g%r=4 W^7*^E-l57|grIK9?_HVz!2beqA07e# diff --git a/rhodecode/public/fonts/RCIcons/rcicons.woff2 b/rhodecode/public/fonts/RCIcons/rcicons.woff2 index 97dda07055e26e3b6586e48633d17d788de0d9b6..56a94eb8cb28de4a5c0c95eb1aa3e403d34286bd GIT binary patch literal 8980 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 u=9Fb=YsEF?F=oW(c1Z1=AHE&45f|<}yM`^WfHu %for cnt,cs in enumerate(c.pagination): - + ${base.gravatar_with_user(cs.author, 16)} @@ -33,7 +33,19 @@ ${_('Show File')} + + + ${_('Diff File')} + + %endfor + + + + ${_('Show Full History')} + + + diff --git a/rhodecode/templates/files/file_authors_box.mako b/rhodecode/templates/files/file_authors_box.mako --- a/rhodecode/templates/files/file_authors_box.mako +++ b/rhodecode/templates/files/file_authors_box.mako @@ -10,6 +10,7 @@ ${h.link_to_user(user)} % if c.file_author: - ${h.age_component(c.file_last_commit.date)} + - ${_('Load All Authors')} % elif c.file_last_commit.author_email==email: (${_('last author')}) % endif @@ -27,13 +28,7 @@ % endif - - - % if c.file_author: - ${_('Show Authors')} - % endif - - + % endfor % endif diff --git a/rhodecode/templates/files/files.mako b/rhodecode/templates/files/files.mako --- a/rhodecode/templates/files/files.mako +++ b/rhodecode/templates/files/files.mako @@ -118,14 +118,322 @@ timeagoActivate(); }); metadataRequest.fail(function (data, textStatus, errorThrown) { - console.log(data); if (data.status != 0) { alert("Error while fetching metadata.\nError code {0} ({1}).Please consider reloading the page".format(data.status,data.statusText)); } }); }; - var callbacks = function() { + var initFileJS = function () { + var state = getState('callbacks'); + + // select code link event + $("#hlcode").mouseup(getSelectionLink); + + // file history select2 used for history of file, and switch to + var initialCommitData = { + at_ref: atRef, + id: null, + text: '${c.commit.raw_id}', + type: 'sha', + raw_id: '${c.commit.raw_id}', + idx: ${c.commit.idx}, + files_url: null, + }; + + // check if we have ref info. + var selectedRef = fileTreeRefs[atRef]; + if (selectedRef !== undefined) { + $.extend(initialCommitData, selectedRef) + } + + var loadUrl = pyroutes.url('repo_file_history', {'repo_name': templateContext.repo_name, 'commit_id': state.rev,'f_path': state.f_path}); + var cacheKey = '__SINGLE_FILE_REFS__'; + var cachedDataSource = {}; + + var loadRefsData = function (query) { + $.ajax({ + url: loadUrl, + data: {}, + dataType: 'json', + type: 'GET', + success: function (data) { + cachedDataSource[cacheKey] = data; + query.callback({results: data.results}); + } + }); + }; + + var feedRefsData = function (query, cachedData) { + var data = {results: []}; + //filter results + $.each(cachedData.results, function () { + var section = this.text; + var children = []; + $.each(this.children, function () { + if (query.term.length === 0 || this.text.toUpperCase().indexOf(query.term.toUpperCase()) >= 0) { + children.push(this) + } + }); + data.results.push({ + 'text': section, + 'children': children + }) + }); + + query.callback(data); + }; + + var select2FileHistorySwitcher = function (targetElement, loadUrl, initialData) { + var formatResult = function (result, container, query) { + return formatSelect2SelectionRefs(result); + }; + + var formatSelection = function (data, container) { + var commit_ref = data; + + var tmpl = ''; + if (commit_ref.type === 'sha') { + tmpl = (commit_ref.raw_id || "").substr(0,8); + } else if (commit_ref.type === 'branch') { + tmpl = tmpl.concat(' '); + tmpl = tmpl.concat(escapeHtml(commit_ref.text)); + } else if (commit_ref.type === 'tag') { + tmpl = tmpl.concat(' '); + tmpl = tmpl.concat(escapeHtml(commit_ref.text)); + } else if (commit_ref.type === 'book') { + tmpl = tmpl.concat(' '); + tmpl = tmpl.concat(escapeHtml(commit_ref.text)); + } + var idx = commit_ref.idx || 0; + tmpl = tmpl.concat('r{0}'.format(idx)); + return tmpl + }; + + $(targetElement).select2({ + dropdownAutoWidth: true, + width: "resolve", + containerCssClass: "drop-menu", + dropdownCssClass: "drop-menu-dropdown", + query: function(query) { + var cachedData = cachedDataSource[cacheKey]; + if (cachedData) { + feedRefsData(query, cachedData) + } else { + loadRefsData(query) + } + }, + initSelection: function(element, callback) { + callback(initialData); + }, + formatResult: formatResult, + formatSelection: formatSelection + }); + + }; + + select2FileHistorySwitcher('#file_refs_filter', loadUrl, initialCommitData); + + $('#file_refs_filter').on('change', function(e) { + var data = $('#file_refs_filter').select2('data'); + var commit_id = data.id; + + if ("${c.annotate}" === "True") { + var url = pyroutes.url('repo_files:annotated', + {'repo_name': templateContext.repo_name, + 'commit_id': commit_id, 'f_path': state.f_path}); + } else { + var url = pyroutes.url('repo_files', + {'repo_name': templateContext.repo_name, + 'commit_id': commit_id, 'f_path': state.f_path}); + } + window.location = url; + + }); + + // show more authors + $('#show_authors').on('click', function(e) { + e.preventDefault(); + var url = pyroutes.url('repo_file_authors', + {'repo_name': templateContext.repo_name, + 'commit_id': state.rev, 'f_path': state.f_path}); + + $.pjax({ + url: url, + data: 'annotate=${("1" if c.annotate else "0")}', + container: '#file_authors', + push: false, + timeout: 5000 + }).complete(function(){ + $('#show_authors').hide(); + $('#file_authors_title').html(_gettext('All Authors')) + }) + }); + + // load file short history + $('#file_history_overview').on('click', function(e) { + e.preventDefault(); + path = state.f_path; + if (path.indexOf("#") >= 0) { + path = path.slice(0, path.indexOf("#")); + } + var url = pyroutes.url('repo_changelog_file', + {'repo_name': templateContext.repo_name, + 'commit_id': state.rev, 'f_path': path, 'limit': 6}); + $('#file_history_container').show(); + $('#file_history_container').html('
{0}
'.format(_gettext('Loading ...'))); + + $.pjax({ + url: url, + container: '#file_history_container', + push: false, + timeout: 5000 + }); + }); + + + }; + + var initTreeJS = function () { + var state = getState('callbacks'); + getFilesMetadata(); + + // fuzzy file filter + fileBrowserListeners(state.node_list_url, state.url_base); + + // switch to widget + var initialCommitData = { + at_ref: atRef, + id: null, + text: '${c.commit.raw_id}', + type: 'sha', + raw_id: '${c.commit.raw_id}', + idx: ${c.commit.idx}, + files_url: null, + }; + + // check if we have ref info. + var selectedRef = fileTreeRefs[atRef]; + if (selectedRef !== undefined) { + $.extend(initialCommitData, selectedRef) + } + + var loadUrl = pyroutes.url('repo_refs_data', {'repo_name': templateContext.repo_name}); + var cacheKey = '__ALL_FILE_REFS__'; + var cachedDataSource = {}; + + var loadRefsData = function (query) { + $.ajax({ + url: loadUrl, + data: {}, + dataType: 'json', + type: 'GET', + success: function (data) { + cachedDataSource[cacheKey] = data; + query.callback({results: data.results}); + } + }); + }; + + var feedRefsData = function (query, cachedData) { + var data = {results: []}; + //filter results + $.each(cachedData.results, function () { + var section = this.text; + var children = []; + $.each(this.children, function () { + if (query.term.length === 0 || this.text.toUpperCase().indexOf(query.term.toUpperCase()) >= 0) { + children.push(this) + } + }); + data.results.push({ + 'text': section, + 'children': children + }) + }); + + //push the typed in commit idx + if (!isNaN(query.term)) { + var files_url = pyroutes.url('repo_files', + {'repo_name': templateContext.repo_name, + 'commit_id': query.term, 'f_path': state.f_path}); + + data.results.push({ + 'text': _gettext('go to numeric commit'), + 'children': [{ + at_ref: null, + id: null, + text: 'r{0}'.format(query.term), + type: 'sha', + raw_id: query.term, + idx: query.term, + files_url: files_url, + }] + }); + } + query.callback(data); + }; + + var select2RefFileSwitcher = function (targetElement, loadUrl, initialData) { + var formatResult = function (result, container, query) { + return formatSelect2SelectionRefs(result); + }; + + var formatSelection = function (data, container) { + var commit_ref = data; + + var tmpl = ''; + if (commit_ref.type === 'sha') { + tmpl = (commit_ref.raw_id || "").substr(0,8); + } else if (commit_ref.type === 'branch') { + tmpl = tmpl.concat(' '); + tmpl = tmpl.concat(escapeHtml(commit_ref.text)); + } else if (commit_ref.type === 'tag') { + tmpl = tmpl.concat(' '); + tmpl = tmpl.concat(escapeHtml(commit_ref.text)); + } else if (commit_ref.type === 'book') { + tmpl = tmpl.concat(' '); + tmpl = tmpl.concat(escapeHtml(commit_ref.text)); + } + + var idx = commit_ref.idx || 0; + tmpl = tmpl.concat('r{0}'.format(idx)); + return tmpl + }; + + $(targetElement).select2({ + dropdownAutoWidth: true, + width: "resolve", + containerCssClass: "drop-menu", + dropdownCssClass: "drop-menu-dropdown", + query: function(query) { + + var cachedData = cachedDataSource[cacheKey]; + if (cachedData) { + feedRefsData(query, cachedData) + } else { + loadRefsData(query) + } + }, + initSelection: function(element, callback) { + callback(initialData); + }, + formatResult: formatResult, + formatSelection: formatSelection + }); + + }; + + select2RefFileSwitcher('#refs_filter', loadUrl, initialCommitData); + + $('#refs_filter').on('change', function(e) { + var data = $('#refs_filter').select2('data'); + window.location = data.files_url + }); + + }; + + $(document).ready(function() { timeagoActivate(); if ($('#trimmed_message_box').height() < 50) { @@ -137,250 +445,12 @@ $(this).hide(); }); - var state = getState('callbacks'); - - // VIEW FOR FILE SOURCE if (fileSourcePage) { - // variants for with source code, not tree view - - // select code link event - $("#hlcode").mouseup(getSelectionLink); - - // file history select2 used for history, and switch to - var initialCommitData = { - id: null, - text: '${_("Pick Commit")}', - type: 'sha', - raw_id: null, - files_url: null - }; - - select2FileHistorySwitcher('#diff1', initialCommitData, state); - - // show at, diff to actions handlers - $('#diff1').on('change', function(e) { - $('#diff_to_commit').removeClass('disabled').removeAttr("disabled"); - $('#diff_to_commit').val(_gettext('Diff to Commit ') + e.val.truncateAfter(8, '...')); - - $('#show_at_commit').removeClass('disabled').removeAttr("disabled"); - $('#show_at_commit').val(_gettext('Show at Commit ') + e.val.truncateAfter(8, '...')); - }); - - $('#diff_to_commit').on('click', function(e) { - var diff1 = $('#diff1').val(); - var diff2 = $('#diff2').val(); - - var url_data = { - repo_name: templateContext.repo_name, - source_ref: diff1, - source_ref_type: 'rev', - target_ref: diff2, - target_ref_type: 'rev', - merge: 1, - f_path: state.f_path - }; - window.location = pyroutes.url('repo_compare', url_data); - }); - - $('#show_at_commit').on('click', function(e) { - var diff1 = $('#diff1').val(); - - var annotate = $('#annotate').val(); - if (annotate === "True") { - var url = pyroutes.url('repo_files:annotated', - {'repo_name': templateContext.repo_name, - 'commit_id': diff1, 'f_path': state.f_path}); - } else { - var url = pyroutes.url('repo_files', - {'repo_name': templateContext.repo_name, - 'commit_id': diff1, 'f_path': state.f_path}); - } - window.location = url; - - }); - - // show more authors - $('#show_authors').on('click', function(e) { - e.preventDefault(); - var url = pyroutes.url('repo_file_authors', - {'repo_name': templateContext.repo_name, - 'commit_id': state.rev, 'f_path': state.f_path}); - - $.pjax({ - url: url, - data: 'annotate=${("1" if c.annotate else "0")}', - container: '#file_authors', - push: false, - timeout: 5000 - }).complete(function(){ - $('#show_authors').hide(); - $('#file_authors_title').html(_gettext('All Authors')) - }) - }); - - // load file short history - $('#file_history_overview').on('click', function(e) { - e.preventDefault(); - path = state.f_path; - if (path.indexOf("#") >= 0) { - path = path.slice(0, path.indexOf("#")); - } - var url = pyroutes.url('repo_changelog_file', - {'repo_name': templateContext.repo_name, - 'commit_id': state.rev, 'f_path': path, 'limit': 6}); - $('#file_history_container').show(); - $('#file_history_container').html('
{0}
'.format(_gettext('Loading ...'))); - - $.pjax({ - url: url, - container: '#file_history_container', - push: false, - timeout: 5000 - }) - }); - + initFileJS() + } else { + initTreeJS() } - // VIEW FOR FILE TREE BROWSER - else { - getFilesMetadata(); - - // fuzzy file filter - fileBrowserListeners(state.node_list_url, state.url_base); - - // switch to widget - var initialCommitData = { - at_ref: atRef, - id: null, - text: '${c.commit.raw_id}', - type: 'sha', - raw_id: '${c.commit.raw_id}', - idx: ${c.commit.idx}, - files_url: null, - }; - // check if we have ref info. - var selectedRef = fileTreeRefs[atRef]; - if (selectedRef !== undefined) { - $.extend(initialCommitData, selectedRef) - } - - var loadUrl = pyroutes.url('repo_refs_data', {'repo_name': templateContext.repo_name}); - var cacheKey = '__ALL_FILE_REFS__'; - var cachedDataSource = {}; - - var loadRefsData = function (query) { - $.ajax({ - url: loadUrl, - data: {}, - dataType: 'json', - type: 'GET', - success: function (data) { - cachedDataSource[cacheKey] = data; - query.callback({results: data.results}); - } - }); - }; - - var feedRefsData = function (query, cachedData) { - var data = {results: []}; - //filter results - $.each(cachedData.results, function () { - var section = this.text; - var children = []; - $.each(this.children, function () { - if (query.term.length === 0 || this.text.toUpperCase().indexOf(query.term.toUpperCase()) >= 0) { - children.push(this) - } - }); - data.results.push({ - 'text': section, - 'children': children - }) - }); - - //push the typed in commit idx - if (!isNaN(query.term)) { - var files_url = pyroutes.url('repo_files', - {'repo_name': templateContext.repo_name, - 'commit_id': query.term, 'f_path': state.f_path}); - - data.results.push({ - 'text': _gettext('go to numeric commit'), - 'children': [{ - at_ref: null, - id: null, - text: 'r{0}'.format(query.term), - type: 'sha', - raw_id: query.term, - idx: query.term, - files_url: files_url, - }] - }); - } - query.callback(data); - }; - - var select2RefFileSwitcher = function (targetElement, loadUrl, initialData) { - var formatResult = function (result, container, query) { - return formatSelect2SelectionRefs(result); - }; - - var formatSelection = function (data, container) { - var commit_ref = data; - - var tmpl = ''; - if (commit_ref.type === 'sha') { - tmpl = commit_ref.raw_id.substr(0,8); - } else if (commit_ref.type === 'branch') { - tmpl = tmpl.concat(' '); - tmpl = tmpl.concat(escapeHtml(commit_ref.text)); - } else if (commit_ref.type === 'tag') { - tmpl = tmpl.concat(' '); - tmpl = tmpl.concat(escapeHtml(commit_ref.text)); - } else if (commit_ref.type === 'book') { - tmpl = tmpl.concat(' '); - tmpl = tmpl.concat(escapeHtml(commit_ref.text)); - } - - tmpl = tmpl.concat('r{0}'.format(commit_ref.idx)); - return tmpl - }; - - $(targetElement).select2({ - dropdownAutoWidth: true, - width: "resolve", - containerCssClass: "drop-menu", - dropdownCssClass: "drop-menu-dropdown", - query: function(query) { - - var cachedData = cachedDataSource[cacheKey]; - if (cachedData) { - feedRefsData(query, cachedData) - } else { - loadRefsData(query) - } - }, - initSelection: function(element, callback) { - callback(initialData); - }, - formatResult: formatResult, - formatSelection: formatSelection - }); - - }; - - select2RefFileSwitcher('#refs_filter', loadUrl, initialCommitData); - - $('#refs_filter').on('change', function(e) { - var data = $('#refs_filter').select2('data'); - window.location = data.files_url - }); - - } - }; - - $(document).ready(function() { - callbacks(); var search_GET = "${request.GET.get('search','')}"; if (search_GET === "1") { NodeFilter.initFilter(); diff --git a/rhodecode/templates/files/files_browser.mako b/rhodecode/templates/files/files_browser.mako --- a/rhodecode/templates/files/files_browser.mako +++ b/rhodecode/templates/files/files_browser.mako @@ -17,18 +17,28 @@ % if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name): -
- - ${_('Add File')} + % endif % if c.enable_downloads: <% at_path = '{}'.format(request.GET.get('at') or c.commit.raw_id[:6]) %> % endif @@ -45,6 +55,7 @@
+ ## file tree is computed from caches, and filled in
${c.file_tree |n} diff --git a/rhodecode/templates/files/files_browser_tree.mako b/rhodecode/templates/files/files_browser_tree.mako --- a/rhodecode/templates/files/files_browser_tree.mako +++ b/rhodecode/templates/files/files_browser_tree.mako @@ -17,19 +17,13 @@ - %if c.file.parent: - - - - .. - + + + + ${h.files_breadcrumbs(c.repo_name,c.commit.raw_id,c.file.path, request.GET.get('at'), limit_items=True)} + - - - - - - %endif + %for cnt,node in enumerate(c.file): diff --git a/rhodecode/templates/files/files_pjax.mako b/rhodecode/templates/files/files_pjax.mako --- a/rhodecode/templates/files/files_pjax.mako +++ b/rhodecode/templates/files/files_pjax.mako @@ -13,14 +13,7 @@
- +
% if c.file.is_submodule(): diff --git a/rhodecode/templates/files/files_source.mako b/rhodecode/templates/files/files_source.mako --- a/rhodecode/templates/files/files_source.mako +++ b/rhodecode/templates/files/files_source.mako @@ -1,16 +1,61 @@ <%namespace name="sourceblock" file="/codeblocks/source.mako"/> -
-
+
+
+
+
+ ## loads the history for a file + ${h.hidden('file_refs_filter')} +
+ +
+ + ## Download + % if c.lf_node: + + ${_('Download largefile')} + + % else: + + ${_('Download file')} + + % endif + + %if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name): + ## on branch head, can edit files + %if c.on_branch_head and c.branch_or_raw_id and not c.file.is_binary: + ## binary files are delete only + % if c.file.is_binary: + ${h.link_to(_('Edit'), '#Edit', class_="btn btn-default disabled tooltip", title=_('Editing binary files not allowed'))} + ${h.link_to(_('Delete'), h.route_path('repo_files_remove_file',repo_name=c.repo_name,commit_id=c.branch_or_raw_id,f_path=c.f_path, _anchor='edit'),class_="btn btn-danger")} + % else: + + ${_('Edit on branch: ')}${c.branch_name} + + + + ${_('Delete')} + + % endif + ## not on head, forbid all + % else: + ${h.link_to(_('Edit'), '#Edit', class_="btn btn-default disabled tooltip", title=_('Editing files allowed only when on branch head commit'))} + ${h.link_to(_('Delete'), '#Delete', class_="btn btn-default btn-danger disabled tooltip", title=_('Deleting files allowed only when on branch head commit'))} + % endif + %endif + +
+
+
+ +
+
+ +
+
+ ${h.files_breadcrumbs(c.repo_name,c.commit.raw_id,c.file.path, request.GET.get('at'))} +
- - - - ${c.file.unicode_path_safe} - - - -
% if c.lf_node: | ${_('LargeFile')} ${h.format_byte_size_binary(c.lf_node.size)} @@ -22,50 +67,22 @@ | ${c.file.mimetype} | ${h.get_lexer_for_filenode(c.file).__class__.__name__}
+
-
- - ${_('History')} - - | - %if c.annotate: - ${h.link_to(_('Source'), h.route_path('repo_files', repo_name=c.repo_name,commit_id=c.commit.raw_id,f_path=c.f_path))} - %else: - ${h.link_to(_('Annotation'), h.route_path('repo_files:annotated',repo_name=c.repo_name,commit_id=c.commit.raw_id,f_path=c.f_path))} - %endif - | ${h.link_to(_('Raw'), h.route_path('repo_file_raw',repo_name=c.repo_name,commit_id=c.commit.raw_id,f_path=c.f_path))} - | - % if c.lf_node: - - ${_('Download largefile')} - - % else: - - ${_('Download')} - - % endif +
+ + ${_('History')} + + | + %if c.annotate: + ${h.link_to(_('Source'), h.route_path('repo_files', repo_name=c.repo_name,commit_id=c.commit.raw_id,f_path=c.f_path))} + %else: + ${h.link_to(_('Annotation'), h.route_path('repo_files:annotated',repo_name=c.repo_name,commit_id=c.commit.raw_id,f_path=c.f_path))} + %endif + | ${h.link_to(_('Raw'), h.route_path('repo_file_raw',repo_name=c.repo_name,commit_id=c.commit.raw_id,f_path=c.f_path))} - %if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name): - | - %if c.on_branch_head and c.branch_or_raw_id and not c.file.is_binary: - - ${_('Edit on Branch:{}').format(c.branch_name)} - - | ${_('Delete')} - - %elif c.on_branch_head and c.branch_or_raw_id and c.file.is_binary: - ${h.link_to(_('Edit'), '#', class_="btn btn-link disabled tooltip", title=_('Editing binary files not allowed'))} - | ${h.link_to(_('Delete'), h.route_path('repo_files_remove_file',repo_name=c.repo_name,commit_id=c.branch_or_raw_id,f_path=c.f_path, _anchor='edit'),class_="btn-danger btn-link")} - %else: - ${h.link_to(_('Edit'), '#', class_="btn btn-link disabled tooltip", title=_('Editing files allowed only when on branch head commit'))} - | ${h.link_to(_('Delete'), '#', class_="btn btn-danger btn-link disabled tooltip", title=_('Deleting files allowed only when on branch head commit'))} - %endif - %endif
-
-
+
%if c.file.is_binary: <% rendered_binary = h.render_binary(c.repo_name, c.file)%> diff --git a/rhodecode/templates/files/files_source_header.mako b/rhodecode/templates/files/files_source_header.mako --- a/rhodecode/templates/files/files_source_header.mako +++ b/rhodecode/templates/files/files_source_header.mako @@ -36,29 +36,6 @@
- - -
-
-

${_('Show/Diff file')}

-
- ${h.hidden('diff1')} - ${h.hidden('diff2',c.commit.raw_id)} - ${h.hidden('annotate', c.annotate)} -
-
-
- - -
-
-

${_('Action')}

-
- ${h.submit('diff_to_commit',_('Diff to Commit'),class_="btn disabled",disabled="true")} - ${h.submit('show_at_commit',_('Show at Commit'),class_="btn disabled",disabled="true")} -
-
-