diff --git a/pagure/api/project.py b/pagure/api/project.py
index 60f9719..7492781 100644
--- a/pagure/api/project.py
+++ b/pagure/api/project.py
@@ -141,6 +141,7 @@ def api_projects():
tags = flask.request.values.getlist('tags')
username = flask.request.values.get('username', None)
fork = flask.request.values.get('fork', None)
+ pattern = flask.request.values.get('pattern', None)
if str(fork).lower() in ['1', 'true']:
fork = True
@@ -148,7 +149,7 @@ def api_projects():
fork = False
projects = pagure.lib.search_projects(
- SESSION, username=username, fork=fork, tags=tags)
+ SESSION, username=username, fork=fork, tags=tags, pattern=pattern)
if not projects:
raise pagure.exceptions.APIError(
diff --git a/pagure/static/jquery.dotdotdot.min.js b/pagure/static/jquery.dotdotdot.min.js
new file mode 100644
index 0000000..95bce3a
--- /dev/null
+++ b/pagure/static/jquery.dotdotdot.min.js
@@ -0,0 +1,13 @@
+/*
+ * jQuery dotdotdot 1.7.4
+ *
+ * Copyright (c) Fred Heusschen
+ * www.frebsite.nl
+ *
+ * Plugin website:
+ * dotdotdot.frebsite.nl
+ *
+ * Licensed under the MIT license.
+ * http://en.wikipedia.org/wiki/MIT_License
+ */
+!function(t,e){function n(t,e,n){var r=t.children(),o=!1;t.empty();for(var i=0,d=r.length;d>i;i++){var l=r.eq(i);if(t.append(l),n&&t.append(n),a(t,e)){l.remove(),o=!0;break}n&&n.detach()}return o}function r(e,n,i,d,l){var s=!1,c="a, table, thead, tbody, tfoot, tr, col, colgroup, object, embed, param, ol, ul, dl, blockquote, select, optgroup, option, textarea, script, style",u="script, .dotdotdot-keep";return e.contents().detach().each(function(){var h=this,f=t(h);if("undefined"==typeof h)return!0;if(f.is(u))e.append(f);else{if(s)return!0;e.append(f),!l||f.is(d.after)||f.find(d.after).length||e[e.is(c)?"after":"append"](l),a(i,d)&&(s=3==h.nodeType?o(f,n,i,d,l):r(f,n,i,d,l),s||(f.detach(),s=!0)),s||l&&l.detach()}}),n.addClass("is-truncated"),s}function o(e,n,r,o,d){var c=e[0];if(!c)return!1;var h=s(c),f=-1!==h.indexOf(" ")?" ":" ",p="letter"==o.wrap?"":f,g=h.split(p),v=-1,w=-1,b=0,y=g.length-1;for(o.fallbackToLetter&&0==b&&0==y&&(p="",g=h.split(p),y=g.length-1);y>=b&&(0!=b||0!=y);){var m=Math.floor((b+y)/2);if(m==w)break;w=m,l(c,g.slice(0,w+1).join(p)+o.ellipsis),r.children().each(function(){t(this).toggle().toggle()}),a(r,o)?(y=w,o.fallbackToLetter&&0==b&&0==y&&(p="",g=g[0].split(p),v=-1,w=-1,b=0,y=g.length-1)):(v=w,b=w)}if(-1==v||1==g.length&&0==g[0].length){var x=e.parent();e.detach();var T=d&&d.closest(x).length?d.length:0;x.contents().length>T?c=u(x.contents().eq(-1-T),n):(c=u(x,n,!0),T||x.detach()),c&&(h=i(s(c),o),l(c,h),T&&d&&t(c).parent().append(d))}else h=i(g.slice(0,v+1).join(p),o),l(c,h);return!0}function a(t,e){return t.innerHeight()>e.maxHeight}function i(e,n){for(;t.inArray(e.slice(-1),n.lastCharacter.remove)>-1;)e=e.slice(0,-1);return t.inArray(e.slice(-1),n.lastCharacter.noEllipsis)<0&&(e+=n.ellipsis),e}function d(t){return{width:t.innerWidth(),height:t.innerHeight()}}function l(t,e){t.innerText?t.innerText=e:t.nodeValue?t.nodeValue=e:t.textContent&&(t.textContent=e)}function s(t){return t.innerText?t.innerText:t.nodeValue?t.nodeValue:t.textContent?t.textContent:""}function c(t){do t=t.previousSibling;while(t&&1!==t.nodeType&&3!==t.nodeType);return t}function u(e,n,r){var o,a=e&&e[0];if(a){if(!r){if(3===a.nodeType)return a;if(t.trim(e.text()))return u(e.contents().last(),n)}for(o=c(a);!o;){if(e=e.parent(),e.is(n)||!e.length)return!1;o=c(e[0])}if(o)return u(t(o),n)}return!1}function h(e,n){return e?"string"==typeof e?(e=t(e,n),e.length?e:!1):e.jquery?e:!1:!1}function f(t){for(var e=t.innerHeight(),n=["paddingTop","paddingBottom"],r=0,o=n.length;o>r;r++){var a=parseInt(t.css(n[r]),10);isNaN(a)&&(a=0),e-=a}return e}if(!t.fn.dotdotdot){t.fn.dotdotdot=function(e){if(0==this.length)return t.fn.dotdotdot.debug('No element found for "'+this.selector+'".'),this;if(this.length>1)return this.each(function(){t(this).dotdotdot(e)});var o=this;o.data("dotdotdot")&&o.trigger("destroy.dot"),o.data("dotdotdot-style",o.attr("style")||""),o.css("word-wrap","break-word"),"nowrap"===o.css("white-space")&&o.css("white-space","normal"),o.bind_events=function(){return o.bind("update.dot",function(e,d){switch(o.removeClass("is-truncated"),e.preventDefault(),e.stopPropagation(),typeof l.height){case"number":l.maxHeight=l.height;break;case"function":l.maxHeight=l.height.call(o[0]);break;default:l.maxHeight=f(o)}l.maxHeight+=l.tolerance,"undefined"!=typeof d&&(("string"==typeof d||"nodeType"in d&&1===d.nodeType)&&(d=t("
").append(d).contents()),d instanceof t&&(i=d)),g=o.wrapInner('').children(),g.contents().detach().end().append(i.clone(!0)).find("br").replaceWith("
").end().css({height:"auto",width:"auto",border:"none",padding:0,margin:0});var c=!1,u=!1;return s.afterElement&&(c=s.afterElement.clone(!0),c.show(),s.afterElement.detach()),a(g,l)&&(u="children"==l.wrap?n(g,l,c):r(g,o,g,l,c)),g.replaceWith(g.contents()),g=null,t.isFunction(l.callback)&&l.callback.call(o[0],u,i),s.isTruncated=u,u}).bind("isTruncated.dot",function(t,e){return t.preventDefault(),t.stopPropagation(),"function"==typeof e&&e.call(o[0],s.isTruncated),s.isTruncated}).bind("originalContent.dot",function(t,e){return t.preventDefault(),t.stopPropagation(),"function"==typeof e&&e.call(o[0],i),i}).bind("destroy.dot",function(t){t.preventDefault(),t.stopPropagation(),o.unwatch().unbind_events().contents().detach().end().append(i).attr("style",o.data("dotdotdot-style")||"").data("dotdotdot",!1)}),o},o.unbind_events=function(){return o.unbind(".dot"),o},o.watch=function(){if(o.unwatch(),"window"==l.watch){var e=t(window),n=e.width(),r=e.height();e.bind("resize.dot"+s.dotId,function(){n==e.width()&&r==e.height()&&l.windowResizeFix||(n=e.width(),r=e.height(),u&&clearInterval(u),u=setTimeout(function(){o.trigger("update.dot")},100))})}else c=d(o),u=setInterval(function(){if(o.is(":visible")){var t=d(o);(c.width!=t.width||c.height!=t.height)&&(o.trigger("update.dot"),c=t)}},500);return o},o.unwatch=function(){return t(window).unbind("resize.dot"+s.dotId),u&&clearInterval(u),o};var i=o.contents(),l=t.extend(!0,{},t.fn.dotdotdot.defaults,e),s={},c={},u=null,g=null;return l.lastCharacter.remove instanceof Array||(l.lastCharacter.remove=t.fn.dotdotdot.defaultArrays.lastCharacter.remove),l.lastCharacter.noEllipsis instanceof Array||(l.lastCharacter.noEllipsis=t.fn.dotdotdot.defaultArrays.lastCharacter.noEllipsis),s.afterElement=h(l.after,o),s.isTruncated=!1,s.dotId=p++,o.data("dotdotdot",!0).bind_events().trigger("update.dot"),l.watch&&o.watch(),o},t.fn.dotdotdot.defaults={ellipsis:"... ",wrap:"word",fallbackToLetter:!0,lastCharacter:{},tolerance:0,callback:null,after:null,height:null,watch:!1,windowResizeFix:!0},t.fn.dotdotdot.defaultArrays={lastCharacter:{remove:[" "," ",",",";",".","!","?"],noEllipsis:[]}},t.fn.dotdotdot.debug=function(){};var p=1,g=t.fn.html;t.fn.html=function(n){return n!=e&&!t.isFunction(n)&&this.data("dotdotdot")?this.trigger("update",[n]):g.apply(this,arguments)};var v=t.fn.text;t.fn.text=function(n){return n!=e&&!t.isFunction(n)&&this.data("dotdotdot")?(n=t("").text(n).html(),this.trigger("update",[n])):v.apply(this,arguments)}}}(jQuery);
\ No newline at end of file
diff --git a/pagure/static/koji.css b/pagure/static/koji.css
index 0daea60..21682bb 100644
--- a/pagure/static/koji.css
+++ b/pagure/static/koji.css
@@ -189,8 +189,42 @@ min-height:800px;
right:6px!important;
}
-@media (min-width:768px) {
+.ellipsis {
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ text-overflow: ellipsis;
+ text-overflow: ellipsis;
+}
+
+.repo_desc
+{
+ height:2.5em;
+ line-height:1;
+ padding-left:65px;
+}
+
+.repo_name
+{
+ padding-top:4px;
+ padding-left:65px;
+}
+
+.project_wrapper
+{
+border:1px solid #ddd;
+position:relative;
+}
+.project_metadata
+{
+
+ bottom:0;
+ background:#eee;
+ width:100%;
+ margin-top:2px;
+}
+/*@media (min-width:768px) {
.container {
max-width:55pc
}
-}
+}*/
diff --git a/pagure/templates/_browseheader.html b/pagure/templates/_browseheader.html
new file mode 100644
index 0000000..573e20e
--- /dev/null
+++ b/pagure/templates/_browseheader.html
@@ -0,0 +1,27 @@
+{% macro browse_header(select) -%}
+
+
+{%- endmacro %}
diff --git a/pagure/templates/_render_repo.html b/pagure/templates/_render_repo.html
index 8f5dae2..6466f10 100644
--- a/pagure/templates/_render_repo.html
+++ b/pagure/templates/_render_repo.html
@@ -1,36 +1,32 @@
{% macro render_row(items) -%}
{% for repo in items %}
- {% if loop.index == 1 %}
-
-
- {% endif %}
{% if repo.is_fork %}
{% set url = url_for('view_repo', username=repo.user.username, repo=repo.name) %}
{% else %}
{% set url = url_for('view_repo', repo=repo.name) %}
{% endif %}
-
- {% elif loop.index is divisibleby(3) or loop.last %}
-
+
+ {{ repo.name }}
+
+
+ {% if repo.description %}{{ repo.description }}{%else%}no description{% endif %}
+
+
-
-
- {% endif %}
+
{% else %}
-
No project found
+
No projects found
{% endfor %}
{%- endmacro %}
@@ -41,7 +37,7 @@
{% if page > 1%}
-
+
< Previous
{% else %}
@@ -51,7 +47,7 @@
| {{ page }} / {{ total }} |
{% if page < total %}
-
+
Next >
{% else %}
@@ -66,9 +62,7 @@
{% macro render_repos(
list, total, pagetitle, page, title, count, id, username=None, hide=True) %}
-
+
{% set title_lvl = 3 if username else 2 %}
{{ title }} ({{ count }})
@@ -76,13 +70,44 @@
{% if total and total > 1 %}
{{ pagination_link(pagetitle, page, total) }}
{% endif %}
-
+
{{ render_row(list) }}
+
{% if total and total > 1 %}
{{ pagination_link(pagetitle, page, total) }}
{% endif %}
-
+{% endmacro %}
+
+{% macro render_user_repos(
+ list, total, pagetitle, page, title, count, id, username=None, hide=True) %}
+
+
+ {% if total and total > 1 %}
+ {{ pagination_link(pagetitle, page, total) }}
+ {% endif %}
+
+
+ {% for repo in list %}
+ {% if repo.is_fork %}
+ {% set url = url_for('view_repo', username=repo.user.username, repo=repo.name) %}
+ {% else %}
+ {% set url = url_for('view_repo', repo=repo.name) %}
+ {% endif %}
+
+ {{ repo.name }}
+
+ {% else %}
+ No projects found
+ {% endfor %}
+
+
+ {% if total and total > 1 %}
+ {{ pagination_link(pagetitle, page, total) }}
+ {% endif %}
+
{% endmacro %}
diff --git a/pagure/templates/index.html b/pagure/templates/index.html
index 2d93796..3c97cc6 100644
--- a/pagure/templates/index.html
+++ b/pagure/templates/index.html
@@ -5,16 +5,25 @@
{% block header %}
-
+
+
+
{% endblock %}
-{% from "_render_repo.html" import render_repos %}
-{% from "_render_repo.html" import repos_switch %}
+{% from "_render_repo.html" import render_repos, render_user_repos%}
+{% from "_browseheader.html" import browse_header %}
+
+{% if (not username) or (request.path == '/browse/projects') or (request.path == '/browse/projects/') %}
+ {% set indexcontext = 'browse' %}
+{% else %}
+ {% set indexcontext = 'userpage' %}
+{% endif %}
{% block content %}
-
- {% if username %}
+
+
+ {% if indexcontext == 'userpage' %}
+
+
+ {{ render_user_repos(
+ user_repos, total_page_repos, 'repopage', repopage,
+ 'My Projects', user_repos_length, 'myrepos', username) }}
+
+
+ {{ render_user_repos(
+ user_forks, total_page_forks, 'forkpage', forkpage,
+ 'My Forks', user_forks_length, 'myforks', username) }}
+
+
+ {% else %}
{{ render_repos(
repos, total_page, 'page', page,
'All Projects', repos_length, 'repos', username) }}
+ {% endif %}
+
{% endblock %}
{% block jscripts %}
{{ super() }}
+
+
+
+
{% if username %}
{% endif %}
+
{% endblock %}
diff --git a/pagure/templates/issue.html b/pagure/templates/issue.html
index 5880a58..e2ee0fb 100644
--- a/pagure/templates/issue.html
+++ b/pagure/templates/issue.html
@@ -203,7 +203,7 @@
src="{{ url_for('static', filename='upload.js') }}">
-
+
+
{% endblock %}
{% if config['FEDMENU_URL'] %}
diff --git a/pagure/templates/user_list.html b/pagure/templates/user_list.html
index 4b7738f..310c612 100644
--- a/pagure/templates/user_list.html
+++ b/pagure/templates/user_list.html
@@ -1,16 +1,20 @@
{% extends "master.html" %}
{% block title %}Users{% endblock %}
{% set tag = "users" %}
+{% from "_browseheader.html" import browse_header %}
+{% block header %}
+
+{% endblock %}
{% block content %}
-
- Users
-
-{% if config.get('PAGURE_AUTH') == 'local' %}
- Create User
-{% endif %}
-
+
+
{% if total_page and total_page > 1 %}
@@ -51,5 +55,43 @@
{% endfor %}
+
+
+{% endblock %}
+{% block jscripts %}
+ {{ super() }}
+
+
{% endblock %}
diff --git a/pagure/ui/app.py b/pagure/ui/app.py
index ce62902..12735c3 100644
--- a/pagure/ui/app.py
+++ b/pagure/ui/app.py
@@ -27,6 +27,8 @@ from pagure import (APP, SESSION, cla_required,
# pylint: disable=E1101
+@APP.route('/browse/projects', endpoint='browse_projects')
+@APP.route('/browse/projects/', endpoint='browse_projects')
@APP.route('/')
def index():
""" Front page of the application.
@@ -113,6 +115,7 @@ def index():
total_page=total_page,
page=page,
username=username,
+ select="projects",
repopage=repopage,
forkpage=forkpage,
user_repos=user_repos,
diff --git a/pagure/ui/filters.py b/pagure/ui/filters.py
index 465949a..f448845 100644
--- a/pagure/ui/filters.py
+++ b/pagure/ui/filters.py
@@ -13,6 +13,7 @@ import textwrap
import arrow
import flask
+import md5
from pygments import highlight
from pygments.lexers.text import DiffLexer
@@ -217,12 +218,12 @@ def text_wraps(text, size=10):
@APP.template_filter('avatar')
-def avatar(packager, size=64):
+def avatar(packager, size=64, default="retro"):
""" Template filter sorting the given branches, Fedora first then EPEL,
then whatever is left.
"""
output = ' ' % (
- pagure.lib.avatar_url(packager, size)
+ pagure.lib.avatar_url(packager, size, default)
)
return output
@@ -349,3 +350,11 @@ def int_to_rgb(percent):
except ValueError:
pass
return output
+
+@APP.template_filter('return_md5')
+def return_md5(text):
+ """ Template filter to return an MD5 for a string
+ """
+ m = md5.new()
+ m.update(text)
+ return pagure.lib.clean_input(m.hexdigest())
|