Simple search by items title (#506)
This commit is contained in:
parent
fc279ece66
commit
c26418fbae
@ -775,6 +775,30 @@ iframe {
|
||||
max-width: 98%;
|
||||
}
|
||||
|
||||
.search {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
#search-opener {
|
||||
color: #777;
|
||||
font-size: 87.5%;
|
||||
cursor: pointer;
|
||||
text-transform: lowercase;
|
||||
}
|
||||
|
||||
#search-opener:hover {
|
||||
color: #333;
|
||||
}
|
||||
|
||||
#search-form {
|
||||
border: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
#search-form input {
|
||||
font-size: 75%;
|
||||
}
|
||||
|
||||
.menu-more li {
|
||||
font-size: 1.1em;
|
||||
padding-top: 10px;
|
||||
@ -893,6 +917,10 @@ html[dir="rtl"] span.items-count:before {
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.search {
|
||||
margin-top: -30px;
|
||||
}
|
||||
}
|
||||
|
||||
/* mobile design */
|
||||
@ -957,6 +985,11 @@ html[dir="rtl"] span.items-count:before {
|
||||
font-size: 0.85em;
|
||||
}
|
||||
|
||||
#search-form input {
|
||||
box-sizing: border-box;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.item-icons {
|
||||
display: block;
|
||||
float: right;
|
||||
|
20
assets/js/all.min.js
vendored
20
assets/js/all.min.js
vendored
@ -5,16 +5,16 @@ document.createEvent("MouseEvents");e.initEvent("mousedown",!0,!0);a.dispatchEve
|
||||
a&&(a.textContent=r||"");document.getElementById("nav-counter").textContent=l||"";var e=document.querySelector("div.page-header h2:first-of-type");if(e)pageHeading=e.firstChild.nodeValue;else if(e=document.querySelector("article.item h1:first-of-type")){document.title=e.textContent;return}switch(document.querySelector("section.page").getAttribute("data-item-page")){case "unread":document.title="Miniflux ("+l+")";break;case "feed-items":document.title="("+r+") "+pageHeading;break;default:document.title=
|
||||
a?pageHeading+" ("+r+")":pageHeading}}function q(a){var e=d(a),b=new XMLHttpRequest;b.onload=function(){v.b()&&(c(a),n())};b.open("POST","?action=mark-item-read&id="+e,!0);b.send()}function p(g){var e=d(g),c=new XMLHttpRequest;c.onload=function(){if(v.b()){if("unread"!==g.getAttribute("data-item-status")){if(g.getAttribute("data-hide"))k(g);else{g.setAttribute("data-item-status","unread");a(g.querySelector(".read-icon"));var c=g.querySelector(".read-icon");c&&c.setAttribute("data-action","mark-read")}l++}n()}};
|
||||
c.open("POST","?action=mark-item-unread&id="+e,!0);c.send()}var u=[],t=!1,l=function(){var a=document.getElementById("nav-counter");if(a)return counter=parseInt(a.textContent,10)||0}(),r=function(){var a=document.getElementById("page-counter");if(a)return counter=parseInt(a.textContent,10)||0}();return{w:q,B:p,A:function(a){var c=d(a),b=new XMLHttpRequest;b.onload=function(){v.b()&&(k(a),"unread"===a.getAttribute("data-item-status")&&l--,n())};b.open("POST","?action=mark-item-removed&id="+c,!0);b.send()},
|
||||
j:function(c){var e=d(c),b="1"===c.getAttribute("data-item-bookmark")?"0":"1",w=new XMLHttpRequest;w.onload=function(){var e=document.querySelector("section.page");v.b()&&"bookmarks"===e.getAttribute("data-item-page")?(k(c),n()):(c.setAttribute("data-item-bookmark",b),a(c.querySelector(".bookmark-icon")))};w.open("POST","?action=bookmark&id="+e+"&value="+b,!0);w.send()},K:function(a){var c=a.getAttribute("data-item-status");"read"===c?p(a):"unread"===c&&q(a)},I:function(a){(a=a.querySelector("a.show"))&&
|
||||
j:function(c){var e=d(c),b="1"===c.getAttribute("data-item-bookmark")?"0":"1",w=new XMLHttpRequest;w.onload=function(){var e=document.querySelector("section.page");v.b()&&"bookmarks"===e.getAttribute("data-item-page")?(k(c),n()):(c.setAttribute("data-item-bookmark",b),a(c.querySelector(".bookmark-icon")))};w.open("POST","?action=bookmark&id="+e+"&value="+b,!0);w.send()},L:function(a){var c=a.getAttribute("data-item-status");"read"===c?p(a):"unread"===c&&q(a)},I:function(a){(a=a.querySelector("a.show"))&&
|
||||
b(a)},F:function(a){(a=a.querySelector("a.original"))&&b(a)},i:function(a){var c=document.getElementById("download-item");if(c){c.innerHTML=" "+c.getAttribute("data-before-message");c.className="loading-icon";var b=new XMLHttpRequest;b.onload=function(){var a=JSON.parse(b.responseText);c.className="";if(a.result){var d=document.getElementById("item-content");d&&(d.innerHTML=a.content);c.innerHTML=c.getAttribute("data-after-message")}else c.innerHTML=c.getAttribute("data-failure-message")};a=d(a);
|
||||
b.open("POST","?action=download-item&id="+a,!0);b.send()}},C:function(a){var b=new XMLHttpRequest;b.onload=function(){for(var a=document.getElementsByTagName("article"),b=0,d=a.length;b<d;b++)c(a[b]);l=this.responseText;n()};b.open("POST","?action=mark-feed-as-read&feed_id="+a,!0);b.send()},L:function(){for(var a=["#current-item h1","#item-content","#listing #current-item h2","#listing #current-item .preview","#listing #current-item .preview-full-content"],c=0;c<a.length;c++){var b=document.querySelector(a[c]);
|
||||
b&&(b.dir=""==b.dir?"rtl":"")}},M:function(){return t},a:function(){if(!document.hidden||!t){var a=new XMLHttpRequest;a.onload=function(){var a=0===u.length,c=!1,b=JSON.parse(this.responseText),d;for(d in b.feeds){var k=b.feeds[d];if(!u.hasOwnProperty(d)||k.time>u[d])u[d]=k.time,"unread"===k.status&&(c=!0)}document.hidden||b.nbUnread===l&&!t?document.hidden&&!a&&c&&(t=!0,document.title="\u21bb "+document.title):(t=!1,l=b.nbUnread,n())};a.open("POST","?action=latest-feeds-items",!0);a.send()}}}}(),
|
||||
b.open("POST","?action=download-item&id="+a,!0);b.send()}},C:function(a){var b=new XMLHttpRequest;b.onload=function(){for(var a=document.getElementsByTagName("article"),b=0,d=a.length;b<d;b++)c(a[b]);l=this.responseText;n()};b.open("POST","?action=mark-feed-as-read&feed_id="+a,!0);b.send()},M:function(){for(var a=["#current-item h1","#item-content","#listing #current-item h2","#listing #current-item .preview","#listing #current-item .preview-full-content"],c=0;c<a.length;c++){var b=document.querySelector(a[c]);
|
||||
b&&(b.dir=""==b.dir?"rtl":"")}},N:function(){return t},a:function(){if(!document.hidden||!t){var a=new XMLHttpRequest;a.onload=function(){var a=0===u.length,c=!1,b=JSON.parse(this.responseText),d;for(d in b.feeds){var k=b.feeds[d];if(!u.hasOwnProperty(d)||k.time>u[d])u[d]=k.time,"unread"===k.status&&(c=!0)}document.hidden||b.nbUnread===l&&!t?document.hidden&&!a&&c&&(t=!0,document.title="\u21bb "+document.title):(t=!1,l=b.nbUnread,n())};a.open("POST","?action=latest-feeds-items",!0);a.send()}}}}(),
|
||||
m=function(){function b(a){if(63!==a.keyCode&&63!==a.which&&(a.ctrlKey||a.shiftKey||a.altKey||a.metaKey))return!0;a=a.target||a.srcElement;return"INPUT"===a.tagName||"TEXTAREA"===a.tagName?!0:!1}var d=[];return{c:"",u:function(){document.onclick=function(a){a.target.hasAttribute("data-action")&&"original"!==a.target.className&&a.preventDefault()};document.onmouseup=function(a){if(2!==a.button)if("INPUT"===a.target.nodeName&&"auto-select"===a.target.className)a.target.select();else{var c=a.target.getAttribute("data-action");
|
||||
if(c){m.c="mouse";var b;a:{for(element=a.target;element&&element.parentNode;)if(element=element.parentNode,element.tagName&&"article"===element.tagName.toLowerCase()){b=element;break a}b=void 0}switch(c){case "refresh-all":h.m(a.target.getAttribute("data-concurrent-requests"));break;case "refresh-feed":b&&h.l(b);break;case "mark-read":b&&f.w(b);break;case "mark-unread":b&&f.B(b);break;case "mark-removed":b&&f.A(b);break;case "bookmark":b&&f.j(b);break;case "download-item":b&&f.i(b);break;case "mark-feed-read":a=
|
||||
document.getElementById("listing").getAttribute("data-feed-id");f.C(a);break;case "close-help":v.h()}}}}},s:function(){document.onkeypress=function(a){if(!b(a))if(m.c="keyboard",d.push(a.key||a.which),"g"===d[0]||103===d[0])switch(d[1]){case void 0:break;case "u":case 117:window.location.href="?action=unread";d=[];break;case "b":case 98:window.location.href="?action=bookmarks";d=[];break;case "h":case 104:window.location.href="?action=history";d=[];break;case "s":case 115:window.location.href="?action=feeds";
|
||||
d=[];break;case "p":case 112:window.location.href="?action=config";d=[];break;default:d=[]}else{d=[];var c=document.getElementById("current-item");switch(a.key||a.which){case "d":case 100:c&&f.i(c);break;case "p":case 112:case "k":case 107:v.g();break;case "n":case 110:case "j":case 106:v.f();break;case "v":case 118:c&&f.F(c);break;case "o":case 111:c&&f.I(c);break;case "m":case 109:c&&f.K(c);break;case "f":case 102:c&&f.j(c);break;case "h":case 104:v.G();break;case "l":case 108:v.D();break;case "r":case 114:h.m();
|
||||
break;case "?":case 63:v.J();break;case "Q":case 81:case "q":case 113:v.h();break;case "z":case 122:f.L()}}};document.onkeydown=function(a){if(!b(a))switch(m.c="keyboard",a.key||a.which){case "ArrowLeft":case "Left":case 37:v.g();break;case "ArrowRight":case "Right":case 39:v.f()}}},v:function(){document.addEventListener("visibilitychange",function(){!document.hidden&&f.M()&&f.a()})}}}(),v=function(){function b(a){var b=pageYOffset+document.documentElement.clientHeight;(0>b-(a.offsetTop+a.offsetHeight)||
|
||||
b-a.offsetTop>document.documentElement.clientHeight)&&window.scrollTo(0,a.offsetTop-10)}function d(){return document.getElementById("listing")?!0:!1}return{D:function(){var a=document.getElementById("next-page");a&&a.click()},G:function(){var a=document.getElementById("previous-page");a&&a.click()},f:function(){var a=document.getElementById("next-item");if(a)a.click();else if(d())if(a=document.getElementsByTagName("article"),document.getElementById("current-item"))for(var c=0,k=a.length;c<k;c++){if("current-item"===
|
||||
a[c].id){c+1<k&&(a[c].id="item-"+a[c].getAttribute("data-item-id"),a[c+1].id="current-item",b(a[c+1]));break}}else a[0].id="current-item",b(a[0])},g:function(){var a=document.getElementById("previous-item");if(a)a.click();else if(d())if(a=document.getElementsByTagName("article"),document.getElementById("current-item"))for(var c=a.length-1;0<=c;c--){if("current-item"===a[c].id){0<=c-1&&(a[c].id="item-"+a[c].getAttribute("data-item-id"),a[c-1].id="current-item",b(a[c-1]));break}}else a[a.length-1].id=
|
||||
"current-item",b(a[a.length-1])},J:function(){document.getElementById("help-layer").removeAttribute("class")},h:function(){document.getElementById("help-layer").setAttribute("class","hide")},b:d}}();
|
||||
({N:function(){},H:function(){m.s();m.u();m.v();this.o()},o:function(){var b=new XMLHttpRequest;b.onload=function(){var b=JSON.parse(this.responseText);0<b.frontend_updatecheck_interval&&(f.a(),setInterval(function(){f.a()},6E4*b.frontend_updatecheck_interval))};b.open("POST","?action=get-config",!0);b.send(JSON.stringify(["frontend_updatecheck_interval"]))}}).H();
|
||||
document.getElementById("listing").getAttribute("data-feed-id");f.C(a);break;case "close-help":v.h();break;case "show-search":v.K()}}}}},s:function(){document.onkeypress=function(a){if(!b(a))if(m.c="keyboard",d.push(a.key||a.which),"g"===d[0]||103===d[0])switch(d[1]){case void 0:break;case "u":case 117:window.location.href="?action=unread";d=[];break;case "b":case 98:window.location.href="?action=bookmarks";d=[];break;case "h":case 104:window.location.href="?action=history";d=[];break;case "s":case 115:window.location.href=
|
||||
"?action=feeds";d=[];break;case "p":case 112:window.location.href="?action=config";d=[];break;default:d=[]}else{d=[];var c=document.getElementById("current-item");switch(a.key||a.which){case "d":case 100:c&&f.i(c);break;case "p":case 112:case "k":case 107:v.g();break;case "n":case 110:case "j":case 106:v.f();break;case "v":case 118:c&&f.F(c);break;case "o":case 111:c&&f.I(c);break;case "m":case 109:c&&f.L(c);break;case "f":case 102:c&&f.j(c);break;case "h":case 104:v.G();break;case "l":case 108:v.D();
|
||||
break;case "r":case 114:h.m();break;case "?":case 63:v.J();break;case "Q":case 81:case "q":case 113:v.h();break;case "z":case 122:f.M()}}};document.onkeydown=function(a){if(!b(a))switch(m.c="keyboard",a.key||a.which){case "ArrowLeft":case "Left":case 37:v.g();break;case "ArrowRight":case "Right":case 39:v.f()}}},v:function(){document.addEventListener("visibilitychange",function(){!document.hidden&&f.N()&&f.a()})}}}(),v=function(){function b(a){var b=pageYOffset+document.documentElement.clientHeight;
|
||||
(0>b-(a.offsetTop+a.offsetHeight)||b-a.offsetTop>document.documentElement.clientHeight)&&window.scrollTo(0,a.offsetTop-10)}function d(){return document.getElementById("listing")?!0:!1}return{D:function(){var a=document.getElementById("next-page");a&&a.click()},G:function(){var a=document.getElementById("previous-page");a&&a.click()},f:function(){var a=document.getElementById("next-item");if(a)a.click();else if(d())if(a=document.getElementsByTagName("article"),document.getElementById("current-item"))for(var c=
|
||||
0,k=a.length;c<k;c++){if("current-item"===a[c].id){c+1<k&&(a[c].id="item-"+a[c].getAttribute("data-item-id"),a[c+1].id="current-item",b(a[c+1]));break}}else a[0].id="current-item",b(a[0])},g:function(){var a=document.getElementById("previous-item");if(a)a.click();else if(d())if(a=document.getElementsByTagName("article"),document.getElementById("current-item"))for(var c=a.length-1;0<=c;c--){if("current-item"===a[c].id){0<=c-1&&(a[c].id="item-"+a[c].getAttribute("data-item-id"),a[c-1].id="current-item",
|
||||
b(a[c-1]));break}}else a[a.length-1].id="current-item",b(a[a.length-1])},J:function(){document.getElementById("help-layer").removeAttribute("class")},h:function(){document.getElementById("help-layer").setAttribute("class","hide")},K:function(){document.getElementById("search-opener").setAttribute("class","hide");document.getElementById("search-form").removeAttribute("class")},b:d}}();
|
||||
({O:function(){},H:function(){m.s();m.u();m.v();this.o()},o:function(){var b=new XMLHttpRequest;b.onload=function(){var b=JSON.parse(this.responseText);0<b.frontend_updatecheck_interval&&(f.a(),setInterval(function(){f.a()},6E4*b.frontend_updatecheck_interval))};b.open("POST","?action=get-config",!0);b.send(JSON.stringify(["frontend_updatecheck_interval"]))}}).H();
|
@ -91,6 +91,9 @@ Miniflux.Event = (function() {
|
||||
case 'close-help':
|
||||
Miniflux.Nav.CloseHelp();
|
||||
break;
|
||||
case 'show-search':
|
||||
Miniflux.Nav.ShowSearch();
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
@ -108,7 +108,11 @@ Miniflux.Nav = (function() {
|
||||
var help_layer = document.getElementById("help-layer");
|
||||
help_layer.setAttribute("class", "hide");
|
||||
},
|
||||
ShowSearch: function() {
|
||||
document.getElementById("search-opener").setAttribute("class", "hide");
|
||||
document.getElementById("search-form").removeAttribute("class")
|
||||
},
|
||||
IsListing: isListing
|
||||
};
|
||||
|
||||
})();
|
||||
})();
|
||||
|
34
controllers/search.php
Normal file
34
controllers/search.php
Normal file
@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
// Display search results page
|
||||
Router\get_action('search', function() {
|
||||
|
||||
$text = Request\param('text', '');
|
||||
$offset = Request\int_param('offset', 0);
|
||||
|
||||
$items = array();
|
||||
$nb_items = 0;
|
||||
if ($text) {
|
||||
$items = Model\Item\search_all($text, $offset, Model\Config\get('items_per_page'));
|
||||
$nb_items = Model\Item\count_by_search($text);
|
||||
}
|
||||
|
||||
Response\html(Template\layout('search', array(
|
||||
'favicons' => Model\Favicon\get_item_favicons($items),
|
||||
'original_marks_read' => Model\Config\get('original_marks_read'),
|
||||
'text' => $text,
|
||||
'items' => $items,
|
||||
'order' => '',
|
||||
'direction' => '',
|
||||
'display_mode' => Model\Config\get('items_display_mode'),
|
||||
'item_title_link' => Model\Config\get('item_title_link'),
|
||||
'group_id' => array(),
|
||||
'nb_items' => $nb_items,
|
||||
'nb_unread_items' => Model\Item\count_by_status('unread'),
|
||||
'offset' => $offset,
|
||||
'items_per_page' => Model\Config\get('items_per_page'),
|
||||
'nothing_to_read' => Request\int_param('nothing_to_read'),
|
||||
'menu' => 'search',
|
||||
'title' => t('Search').' ('.$nb_items.')'
|
||||
)));
|
||||
});
|
@ -2,7 +2,7 @@
|
||||
|
||||
require __DIR__.'/common.php';
|
||||
|
||||
Router\bootstrap(__DIR__.'/controllers', 'common', 'console', 'user', 'config', 'item', 'history', 'bookmark', 'feed');
|
||||
Router\bootstrap(__DIR__.'/controllers', 'common', 'console', 'user', 'config', 'item', 'history', 'bookmark', 'feed', 'search');
|
||||
|
||||
// Page not found
|
||||
Router\notfound(function() {
|
||||
|
@ -245,4 +245,6 @@ return array(
|
||||
// 'Item title links to' => '',
|
||||
// 'Original' => '',
|
||||
// 'Last login:' => '',
|
||||
// 'Search' => '',
|
||||
// 'There are no results for your search' => '',
|
||||
);
|
||||
|
@ -245,4 +245,6 @@ return array(
|
||||
'Item title links to' => 'Titulek článku odkazuje na',
|
||||
'Original' => 'Originál',
|
||||
'Last login:' => 'Poslední přihlášení:',
|
||||
// 'Search' => '',
|
||||
// 'There are no results for your search' => '',
|
||||
);
|
||||
|
@ -245,4 +245,6 @@ return array(
|
||||
// 'Item title links to' => '',
|
||||
// 'Original' => '',
|
||||
// 'Last login:' => '',
|
||||
// 'Search' => '',
|
||||
// 'There are no results for your search' => '',
|
||||
);
|
||||
|
@ -245,4 +245,6 @@ return array(
|
||||
// 'Item title links to' => '',
|
||||
// 'Original' => '',
|
||||
// 'Last login:' => '',
|
||||
// 'Search' => '',
|
||||
// 'There are no results for your search' => '',
|
||||
);
|
||||
|
@ -245,4 +245,6 @@ return array(
|
||||
'Item title links to' => 'Le titre des articles redirige vers',
|
||||
'Original' => 'Original',
|
||||
'Last login:' => 'Dernière connexion :',
|
||||
// 'Search' => '',
|
||||
// 'There are no results for your search' => '',
|
||||
);
|
||||
|
@ -245,4 +245,6 @@ return array(
|
||||
// 'Item title links to' => '',
|
||||
// 'Original' => '',
|
||||
// 'Last login:' => '',
|
||||
// 'Search' => '',
|
||||
// 'There are no results for your search' => '',
|
||||
);
|
||||
|
@ -247,4 +247,6 @@ return array(
|
||||
'Item title links to' => 'アイテムのタイトルのリンク先',
|
||||
'Original' => '元のページ',
|
||||
// 'Last login:' => '',
|
||||
// 'Search' => '',
|
||||
// 'There are no results for your search' => '',
|
||||
);
|
||||
|
@ -245,4 +245,6 @@ return array(
|
||||
// 'Item title links to' => '',
|
||||
// 'Original' => '',
|
||||
// 'Last login:' => '',
|
||||
// 'Search' => '',
|
||||
// 'There are no results for your search' => '',
|
||||
);
|
||||
|
@ -245,4 +245,6 @@ return array(
|
||||
'Item title links to' => 'Заголовок статьи ведет на',
|
||||
'Original' => 'Оригинал',
|
||||
'Last login:' => 'Последний вход:',
|
||||
'Search' => 'Поиск',
|
||||
'There are no results for your search' => 'По вашему запросу ничего не нашлось',
|
||||
);
|
||||
|
@ -245,4 +245,6 @@ return array(
|
||||
// 'Item title links to' => '',
|
||||
// 'Original' => '',
|
||||
// 'Last login:' => '',
|
||||
// 'Search' => '',
|
||||
// 'There are no results for your search' => '',
|
||||
);
|
||||
|
@ -245,4 +245,6 @@ return array(
|
||||
// 'Item title links to' => '',
|
||||
// 'Original' => '',
|
||||
// 'Last login:' => '',
|
||||
// 'Search' => '',
|
||||
// 'There are no results for your search' => '',
|
||||
);
|
||||
|
@ -245,4 +245,6 @@ return array(
|
||||
'Item title links to' => 'Öğe başlığıyla ilişkili bağlantılar',
|
||||
'Original' => 'Orijinal',
|
||||
'Last login:' => 'En son sisteme giriş zamanı:',
|
||||
// 'Search' => '',
|
||||
// 'There are no results for your search' => '',
|
||||
);
|
||||
|
@ -245,4 +245,6 @@ return array(
|
||||
// 'Item title links to' => '',
|
||||
// 'Original' => '',
|
||||
// 'Last login:' => '',
|
||||
// 'Search' => '',
|
||||
// 'There are no results for your search' => '',
|
||||
);
|
||||
|
@ -64,6 +64,45 @@ function get_all_since($timestamp)
|
||||
->findAll();
|
||||
}
|
||||
|
||||
function search_all($text, $offset = null, $limit = null)
|
||||
{
|
||||
return Database::getInstance('db')
|
||||
->table('items')
|
||||
->columns(
|
||||
'items.id',
|
||||
'items.title',
|
||||
'items.updated',
|
||||
'items.url',
|
||||
'items.enclosure',
|
||||
'items.enclosure_type',
|
||||
'items.bookmark',
|
||||
'items.feed_id',
|
||||
'items.status',
|
||||
'items.content',
|
||||
'items.language',
|
||||
'items.author',
|
||||
'feeds.site_url',
|
||||
'feeds.title AS feed_title',
|
||||
'feeds.rtl'
|
||||
)
|
||||
->join('feeds', 'id', 'feed_id')
|
||||
->neq('status', 'removed')
|
||||
->ilike('items.title', '%' . $text . '%')
|
||||
->orderBy('updated', 'desc')
|
||||
->offset($offset)
|
||||
->limit($limit)
|
||||
->findAll();
|
||||
}
|
||||
|
||||
function count_by_search($text)
|
||||
{
|
||||
return Database::getInstance('db')
|
||||
->table('items')
|
||||
->neq('status', 'removed')
|
||||
->ilike('title', '%' . $text . '%')
|
||||
->count();
|
||||
}
|
||||
|
||||
function get_latest_feeds_items()
|
||||
{
|
||||
return Database::getInstance('db')
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?php if (empty($items) && $group_id === null): ?>
|
||||
<p class="alert alert-info"><?= t('No bookmark') ?></p>
|
||||
<?php else: ?>
|
||||
|
||||
<?= \Template\load('search_form') ?>
|
||||
<div class="page-header">
|
||||
<h2><?= t('Bookmarks') ?><span id="page-counter"><?= isset($nb_items) ? $nb_items : '' ?></span></h2>
|
||||
<?php if (!empty($groups)): ?>
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?php if (empty($items)): ?>
|
||||
<p class="alert alert-info"><?= t('No history') ?></p>
|
||||
<?php else: ?>
|
||||
|
||||
<?= \Template\load('search_form') ?>
|
||||
<div class="page-header">
|
||||
<h2><?= t('History') ?><span id="page-counter"><?= isset($nb_items) ? $nb_items : '' ?></span></h2>
|
||||
<?php if (!empty($groups)): ?>
|
||||
|
@ -1,9 +1,31 @@
|
||||
<?php
|
||||
$params = array();
|
||||
if (isset($order)) {
|
||||
$params[] = 'order=' . $order;
|
||||
}
|
||||
if (isset($direction)) {
|
||||
$params[] = 'direction=' . $direction;
|
||||
}
|
||||
if (isset($feed_id)) {
|
||||
$params[] = 'feed_id=' . $feed_id;
|
||||
}
|
||||
if (isset($group_id)) {
|
||||
$params[] = 'group_id=' . $group_id;
|
||||
}
|
||||
if (isset($text)) {
|
||||
$params[] = 'text=' . $text;
|
||||
}
|
||||
$optionals = '';
|
||||
if ($params) {
|
||||
$optionals = '&' . implode('&', $params);
|
||||
}
|
||||
?>
|
||||
<div id="items-paging">
|
||||
<?php if ($offset > 0): ?>
|
||||
<a id="previous-page" href="?action=<?= $menu ?>&offset=<?= ($offset - $items_per_page) ?>&order=<?= $order ?>&direction=<?= $direction ?><?= isset($feed_id) ? '&feed_id='.$feed_id : '' ?><?= isset($group_id) ? '&group_id='.$group_id : '' ?>">« <?= t('Previous page') ?></a>
|
||||
<a id="previous-page" href="?action=<?= $menu ?>&offset=<?= ($offset - $items_per_page) ?><?= $optionals; ?>">« <?= t('Previous page') ?></a>
|
||||
<?php endif ?>
|
||||
|
||||
<?php if (($nb_items - $offset) > $items_per_page): ?>
|
||||
<a id="next-page" href="?action=<?= $menu ?>&offset=<?= ($offset + $items_per_page) ?>&order=<?= $order ?>&direction=<?= $direction ?><?= isset($feed_id) ? '&feed_id='.$feed_id : '' ?><?= isset($group_id) ? '&group_id='.$group_id : '' ?>"><?= t('Next page') ?> »</a>
|
||||
<a id="next-page" href="?action=<?= $menu ?>&offset=<?= ($offset + $items_per_page) ?><?= $optionals; ?>"><?= t('Next page') ?> »</a>
|
||||
<?php endif ?>
|
||||
</div>
|
||||
</div>
|
||||
|
26
templates/search.php
Normal file
26
templates/search.php
Normal file
@ -0,0 +1,26 @@
|
||||
<?= \Template\load('search_form', array('text' => $text, 'opened' => true)) ?>
|
||||
<?php if (empty($items)): ?>
|
||||
<p class="alert alert-info"><?= t('There are no results for your search') ?></p>
|
||||
<?php else: ?>
|
||||
<div class="page-header">
|
||||
<h2><?= t('Search') ?><span id="page-counter"><?= isset($nb_items) ? $nb_items : '' ?></span></h2>
|
||||
</div>
|
||||
|
||||
<section class="items" id="listing">
|
||||
<?php foreach ($items as $item): ?>
|
||||
<?= \Template\load('item', array(
|
||||
'item' => $item,
|
||||
'menu' => $menu,
|
||||
'offset' => $offset,
|
||||
'hide' => false,
|
||||
'display_mode' => $display_mode,
|
||||
'item_title_link' => $item_title_link,
|
||||
'favicons' => $favicons,
|
||||
'original_marks_read' => $original_marks_read,
|
||||
)) ?>
|
||||
<?php endforeach ?>
|
||||
|
||||
<?= \Template\load('paging', array('menu' => $menu, 'nb_items' => $nb_items, 'items_per_page' => $items_per_page, 'offset' => $offset, 'text' => $text)) ?>
|
||||
</section>
|
||||
|
||||
<?php endif ?>
|
7
templates/search_form.php
Normal file
7
templates/search_form.php
Normal file
@ -0,0 +1,7 @@
|
||||
<div class="search">
|
||||
<span id="search-opener"<?= isset($opened) && $opened ? ' class="hide"' : '' ?> data-action="show-search">« <?= t('Search')?></span>
|
||||
<form id="search-form"<?= isset($opened) && $opened ? '' : ' class="hide"' ?> action="?" method="get">
|
||||
<?= Helper\form_hidden('action', array('action' => 'search')) ?>
|
||||
<?= Helper\form_text('text', array('text' => isset($text) ? $text : ''), array(), array('required', 'placeholder="' . t('Search') . '"')) ?>
|
||||
</form>
|
||||
</div>
|
@ -1,5 +1,5 @@
|
||||
|
||||
|
||||
<?= \Template\load('search_form') ?>
|
||||
<div class="page-header">
|
||||
<h2><?= t('Unread') ?><span id="page-counter"><?= isset($nb_items) ? $nb_items : '' ?></span></h2>
|
||||
<?php if (!empty($groups)): ?>
|
||||
|
Loading…
Reference in New Issue
Block a user