mirror of
https://github.com/neocities/neocities.git
synced 2025-04-25 01:32:36 +02:00
wrangle between surf and browse context
This commit is contained in:
parent
9d9c1c4495
commit
f6a6df6c86
4 changed files with 84 additions and 27 deletions
26
app.rb
26
app.rb
|
@ -376,7 +376,7 @@ get '/tags/autocomplete/:name.json' do |name|
|
||||||
Tag.autocomplete(name).collect {|t| t[:name]}.to_json
|
Tag.autocomplete(name).collect {|t| t[:name]}.to_json
|
||||||
end
|
end
|
||||||
|
|
||||||
get '/browse/?' do
|
def browse_sites_dataset
|
||||||
@current_page = params[:current_page]
|
@current_page = params[:current_page]
|
||||||
@current_page = @current_page.to_i
|
@current_page = @current_page.to_i
|
||||||
@current_page = 1 if @current_page == 0
|
@current_page = 1 if @current_page == 0
|
||||||
|
@ -397,13 +397,13 @@ get '/browse/?' do
|
||||||
|
|
||||||
case params[:sort_by]
|
case params[:sort_by]
|
||||||
when 'hits'
|
when 'hits'
|
||||||
site_dataset.order!(:hits.desc)
|
site_dataset.order!(:hits.desc, :updated_at.desc)
|
||||||
when 'views'
|
when 'views'
|
||||||
site_dataset.order!(:views.desc)
|
site_dataset.order!(:views.desc, :updated_at.desc)
|
||||||
when 'newest'
|
when 'newest'
|
||||||
site_dataset.order!(:created_at.desc)
|
site_dataset.order!(:created_at.desc, :views.desc)
|
||||||
when 'oldest'
|
when 'oldest'
|
||||||
site_dataset.order!(:created_at)
|
site_dataset.order!(:created_at, :views.desc)
|
||||||
when 'random'
|
when 'random'
|
||||||
site_dataset.where! 'random() < 0.01'
|
site_dataset.where! 'random() < 0.01'
|
||||||
when 'last_updated'
|
when 'last_updated'
|
||||||
|
@ -412,7 +412,7 @@ get '/browse/?' do
|
||||||
else
|
else
|
||||||
if params[:tag]
|
if params[:tag]
|
||||||
params[:sort_by] = 'views'
|
params[:sort_by] = 'views'
|
||||||
site_dataset.order!(:views.desc)
|
site_dataset.order!(:views.desc, :updated_at.desc)
|
||||||
else
|
else
|
||||||
params[:sort_by] = 'last_updated'
|
params[:sort_by] = 'last_updated'
|
||||||
site_dataset.order!(:updated_at.desc, :views.desc)
|
site_dataset.order!(:updated_at.desc, :views.desc)
|
||||||
|
@ -427,12 +427,26 @@ get '/browse/?' do
|
||||||
site_dataset.where! ['tags.is_nsfw = ?', (params[:is_nsfw] == 'true' ? true : false)]
|
site_dataset.where! ['tags.is_nsfw = ?', (params[:is_nsfw] == 'true' ? true : false)]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
site_dataset
|
||||||
|
end
|
||||||
|
|
||||||
|
get '/browse/?' do
|
||||||
|
site_dataset = browse_sites_dataset
|
||||||
site_dataset = site_dataset.paginate @current_page, 300
|
site_dataset = site_dataset.paginate @current_page, 300
|
||||||
@page_count = site_dataset.page_count || 1
|
@page_count = site_dataset.page_count || 1
|
||||||
@sites = site_dataset.all
|
@sites = site_dataset.all
|
||||||
erb :browse
|
erb :browse
|
||||||
end
|
end
|
||||||
|
|
||||||
|
get '/surf/?' do
|
||||||
|
site_dataset = browse_sites_dataset
|
||||||
|
site_dataset = site_dataset.paginate @current_page, 1
|
||||||
|
@page_count = site_dataset.page_count || 1
|
||||||
|
@site = site_dataset.first
|
||||||
|
redirect "/browse?#{Rack::Utils.build_query params}" if @site.nil?
|
||||||
|
erb :'surf', layout: false
|
||||||
|
end
|
||||||
|
|
||||||
get '/surf/:username' do |username|
|
get '/surf/:username' do |username|
|
||||||
@site = Site.select(:id, :username, :title, :domain, :views).where(username: username).first
|
@site = Site.select(:id, :username, :title, :domain, :views).where(username: username).first
|
||||||
@title = @site.title
|
@title = @site.title
|
||||||
|
|
|
@ -2,6 +2,10 @@
|
||||||
function getPage(currentPage) {
|
function getPage(currentPage) {
|
||||||
document.location.href = '/browse?current_page='+currentPage+'&'+$('#search_criteria').serialize();
|
document.location.href = '/browse?current_page='+currentPage+'&'+$('#search_criteria').serialize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function surf(currentPage) {
|
||||||
|
document.location.href = '/surf?current_page='+currentPage+'&'+$('#search_criteria').serialize();
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="header-Outro with-columns browse-page">
|
<div class="header-Outro with-columns browse-page">
|
||||||
|
@ -14,12 +18,9 @@
|
||||||
<% end %>
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col col-50 filter">
|
|
||||||
<form id="search_criteria" action="/browse" method="GET">
|
<form id="search_criteria" action="/browse" method="GET">
|
||||||
|
<div class="col col-50 filter">
|
||||||
<fieldset class="grouping">
|
<fieldset class="grouping">
|
||||||
<% if params[:tag] %>
|
|
||||||
<input name="tag" type="hidden" value="<%= params[:tag] %>">
|
|
||||||
<% end %>
|
|
||||||
<label class="text-Label" for="sort_by">Sort By:</label>
|
<label class="text-Label" for="sort_by">Sort By:</label>
|
||||||
<div class="select-Container">
|
<div class="select-Container">
|
||||||
<select name="sort_by" id="sort_by" class="input-Select">
|
<select name="sort_by" id="sort_by" class="input-Select">
|
||||||
|
@ -38,19 +39,17 @@
|
||||||
-->
|
-->
|
||||||
<input class="btn-Action" type="submit" value="Update">
|
<input class="btn-Action" type="submit" value="Update">
|
||||||
</fieldset>
|
</fieldset>
|
||||||
</form>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="col col-50 filter">
|
<div class="col col-50 filter">
|
||||||
<form method="GET" action="browse">
|
<form method="GET" action="browse">
|
||||||
<fieldset class="grouping">
|
<fieldset class="grouping">
|
||||||
<label class="text-Label" for="tag">Search by tag:</label>
|
<label class="text-Label" for="tag">Search by tag:</label>
|
||||||
<input class="input-Area typeahead" name="tag" type="text" placeholder="pokemon" value="" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" dir="auto">
|
<input class="input-Area typeahead" name="tag" type="text" placeholder="pokemon" value="<%= params[:tag] %>" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" dir="auto">
|
||||||
<input style="vertical-align: -4px;margin-left: 4px;" type="submit" class="btn-Action" value="Search">
|
<input style="vertical-align: -4px;margin-left: 4px;" type="submit" class="btn-Action" value="Search">
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="browse-page">
|
<div class="browse-page">
|
||||||
|
@ -62,9 +61,9 @@
|
||||||
</div>
|
</div>
|
||||||
<% else %>
|
<% else %>
|
||||||
<ul class="row website-Gallery content int-Gall">
|
<ul class="row website-Gallery content int-Gall">
|
||||||
<% @sites.each do |site| %>
|
<% @sites.each_with_index do |site,i| %>
|
||||||
<li>
|
<li>
|
||||||
<a href="/surf/<%= site.username %>" class="neo-Screen-Shot" target="_blank" title="<%= site.title %>">
|
<a href="" class="neo-Screen-Shot" target="_blank" title="<%= site.title %>" onclick="surf(<%= i+1 %>); return false">
|
||||||
<span class="img-Holder" style="background:url(<%= site.screenshot_url('index.html', '540x405') %>) no-repeat;">
|
<span class="img-Holder" style="background:url(<%= site.screenshot_url('index.html', '540x405') %>) no-repeat;">
|
||||||
<img src="/img/placeholder.png" alt="<%= site.title %>" />
|
<img src="/img/placeholder.png" alt="<%= site.title %>" />
|
||||||
</span>
|
</span>
|
||||||
|
|
|
@ -60,8 +60,6 @@
|
||||||
name: 'tags',
|
name: 'tags',
|
||||||
source: function(query, callback) {
|
source: function(query, callback) {
|
||||||
$.get('/tags/autocomplete/'+query+'.json', function(data) {
|
$.get('/tags/autocomplete/'+query+'.json', function(data) {
|
||||||
console.log(data)
|
|
||||||
|
|
||||||
var suggestions = JSON.parse(data)
|
var suggestions = JSON.parse(data)
|
||||||
var suggestionObjects = []
|
var suggestionObjects = []
|
||||||
for(var i=0; i<suggestions.length; i++)
|
for(var i=0; i<suggestions.length; i++)
|
||||||
|
|
|
@ -89,13 +89,41 @@
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
<script type="text/javascript">
|
||||||
|
function getPage(currentPage) {
|
||||||
|
document.location.href = '/surf?current_page='+currentPage+'&'+$('#search_criteria').serialize()
|
||||||
|
}
|
||||||
|
|
||||||
|
function backToBrowse() {
|
||||||
|
document.location.href = '/browse?'+$('#search_criteria').serialize()
|
||||||
|
}
|
||||||
|
</script>
|
||||||
<a href="/" id="logo"></a>
|
<a href="/" id="logo"></a>
|
||||||
<div id="top-bar">
|
<div id="top-bar">
|
||||||
<ul class="browse-actions">
|
<ul class="browse-actions">
|
||||||
<li><a href="/">Neocities</a></li>
|
<li>
|
||||||
<li><input type="text" placeholder="Browse by tag..." /></li>
|
<a href="/browse" onclick="backToBrowse(<%= @current_page %>); return false">Neocities</a>
|
||||||
<li><a href=""><i class="fa fa-caret-left"></i> Prev</a></li>
|
</li>
|
||||||
<li><a href="">Next <i class="fa fa-caret-right"></i></a></li>
|
<% if @current_page %>
|
||||||
|
<li>
|
||||||
|
<form id="search_criteria" onsubmit="getPage(1); return false">
|
||||||
|
<input type="hidden" name="sort_by" value="<%= params[:sort_by] %>">
|
||||||
|
<input class="typeahead" name="tag" type="text" placeholder="Browse by tag..." value="<%= params[:tag] %>" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" dir="auto" />
|
||||||
|
</form>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<% if @current_page > 1 %>
|
||||||
|
<a href="" onclick="getPage(<%= @current_page - 1 %>); return false">
|
||||||
|
<i class="fa fa-caret-left"></i> Prev
|
||||||
|
</a>
|
||||||
|
<% end %>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<% if @current_page != @page_count %>
|
||||||
|
<a href="" onclick="getPage(<%= @current_page + 1 %>); return false">Next <i class="fa fa-caret-right"></i></a>
|
||||||
|
<% end %>
|
||||||
|
</li>
|
||||||
|
<% end %>
|
||||||
</ul>
|
</ul>
|
||||||
<ul class="site-actions">
|
<ul class="site-actions">
|
||||||
<li><a href="/site/<%= @site.username %>"><i class="fa fa-user"></i> <strong><%= @site.username %></strong></a></li>
|
<li><a href="/site/<%= @site.username %>"><i class="fa fa-user"></i> <strong><%= @site.username %></strong></a></li>
|
||||||
|
@ -113,10 +141,28 @@
|
||||||
|
|
||||||
<script src="/js/jquery-1.11.0.min.js"></script>
|
<script src="/js/jquery-1.11.0.min.js"></script>
|
||||||
<script src="/js/bootstrap.min.js"></script>
|
<script src="/js/bootstrap.min.js"></script>
|
||||||
|
<script src="/js/typeahead.bundle.js"></script>
|
||||||
<script>
|
<script>
|
||||||
$(function() {
|
$(function() {
|
||||||
$('#shareButton').popover({html: true})
|
$('#shareButton').popover({html: true})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
$('.typeahead').typeahead({
|
||||||
|
minLength: 2,
|
||||||
|
highlight: true
|
||||||
|
}, {
|
||||||
|
name: 'tags',
|
||||||
|
source: function(query, callback) {
|
||||||
|
$.get('/tags/autocomplete/'+query+'.json', function(data) {
|
||||||
|
var suggestions = JSON.parse(data)
|
||||||
|
var suggestionObjects = []
|
||||||
|
for(var i=0; i<suggestions.length; i++)
|
||||||
|
suggestionObjects.push({value: suggestions[i]})
|
||||||
|
|
||||||
|
callback(suggestionObjects)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
Loading…
Add table
Reference in a new issue