if (interestingFeature(element)) {
var $li = $("<li>")
- .addClass("query-result")
+ .addClass("query-result list-group-item")
.data("geometry", featureGeometry(element))
- .appendTo($ul);
- var $p = $("<p>")
.text(featurePrefix(element) + " ")
- .appendTo($li);
+ .appendTo($ul);
$("<a>")
.attr("href", "/" + element.type + "/" + element.id)
.text(featureName(element))
- .appendTo($p);
+ .appendTo($li);
}
}
@import "bootstrap/alert";
// @import "bootstrap/progress";
// @import "bootstrap/media";
-// @import "bootstrap/list-group";
+@import "bootstrap/list-group";
// @import "bootstrap/close";
// @import "bootstrap/toasts";
// @import "bootstrap/modal";
#sidebar .changesets {
li {
- padding: 15px 20px;
- border-bottom: 1px solid $grey;
cursor: pointer;
&.selected { background: $list-highlight; }
/* color is derived from changeset bbox fillColor in history.js */
}
- h4 {
- margin: 0;
- a {
- color: #000;
- }
- }
-
.comments {
float: right;
color: $darkgrey;
background-color: #F6F6F6;
border: 1px solid $grey;
border-radius: 3px;
- font-size: 12px;
table-layout: fixed;
border-collapse: separate;
.colour-preview-box {
float: right;
- width: 12px;
- height: 12px;
+ width: 14px;
+ height: 14px;
margin: 4px 0px;
border: 1px solid rgba(0, 0, 0, .1);
// add color via inline css on element: background-color: <tag value>;
.query-results {
display: none;
+ padding-bottom: $lineheight/2;
h3 {
- padding: $lineheight $lineheight $lineheight/2;
- margin: 0;
+ padding: 0 $lineheight;
}
ul {
li {
- padding: 15px 20px;
- border-bottom: 1px solid $grey;
-
&.query-result {
cursor: pointer;
}
border-bottom: none;
}
-/* Rules for RSS buttons */
-
-.rsssmall {
- position: relative;
- top: 3px;
-}
-
/* General styles for action lists / subnavs / pager navs */
ul.secondary-actions {
def logout
@title = t "users.logout.title"
- if params[:session] == session.id
+ if request.post?
if session[:token]
token = UserToken.find_by(:token => session[:token])
token&.destroy
</h2>
<div class="browse-section">
- <h4><%= linkify(h(@changeset.tags["comment"].to_s.presence || t("browse.no_comment"))) %></h4>
+ <h6><%= linkify(h(@changeset.tags["comment"].to_s.presence || t("browse.no_comment"))) %></h6>
<div class="details"><%= changeset_details(@changeset) %></div>
<%= render :partial => "tag_details", :object => @changeset.tags.except("comment") %>
<div id="query-nearby" class="query-results">
<h3><%= t(".nearby") %></h3>
<%= image_tag "searching.gif", :class => "loader" %>
- <ul class="query-results-list"></ul>
+ <div>
+ <ul class="query-results-list list-group list-group-flush"></ul>
+ </div>
</div>
<div id="query-isin" class="query-results">
<h3><%= t(".enclosing") %></h3>
<%= image_tag "searching.gif", :class => "loader" %>
- <ul class="query-results-list"></ul>
+ <div>
+ <ul class="query-results-list list-group list-group-flush"></ul>
+ </div>
</div>
}
end %>
-<%= content_tag "li", :id => "changeset_#{changeset.id}", :data => { :changeset => changeset_data } do %>
- <h4>
- <a class="changeset_id" href="<%= changeset_path(changeset) %>">
+<%= content_tag "li", :id => "changeset_#{changeset.id}", :data => { :changeset => changeset_data }, :class => "list-group-item" do %>
+ <h6>
+ <a class="changeset_id text-dark" href="<%= changeset_path(changeset) %>">
<%= changeset.tags["comment"].to_s.presence || t("browse.no_comment") %>
</a>
- </h4>
+ </h6>
<div class="comments comments-<%= changeset.comments.length %>">
<%= changeset.comments.length %>
<span class="icon note grey"></span>
<% if @changesets.present? %>
- <ol class="changesets">
+ <ol class="changesets list-group list-group-flush">
<%= render @changesets %>
</ol>
<% if @changesets.size == 20 -%>
<%= yield :greeting %>
</li>
<li>
- <%= link_to t("layouts.logout"), logout_path(:session => session.id, :referer => request.fullpath), :class => "geolink" %>
+ <%= link_to t("layouts.logout"), logout_path(:referer => request.fullpath), :method => "post", :class => "geolink" %>
</li>
</ul>
</div>
<%= form_tag :action => "logout" do %>
<%= hidden_field_tag("referer", h(params[:referer])) %>
- <%= hidden_field_tag("session", session.id) %>
<%= submit_tag t(".logout_button") %>
<% end %>
end
def test_logout_without_referer
+ post :logout
+ assert_response :redirect
+ assert_redirected_to root_path
+ end
+
+ def test_logout_with_referer
+ post :logout, :params => { :referer => "/test" }
+ assert_response :redirect
+ assert_redirected_to "/test"
+ end
+
+ def test_logout_fallback_without_referer
get :logout
assert_response :success
assert_template :logout
assert_select "input[name=referer][value=?]", ""
-
- session_id = assert_select("input[name=session]").first["value"]
-
- get :logout, :params => { :session => session_id }
- assert_response :redirect
- assert_redirected_to root_path
end
- def test_logout_with_referer
+ def test_logout_fallback_with_referer
get :logout, :params => { :referer => "/test" }
assert_response :success
assert_template :logout
assert_select "input[name=referer][value=?]", "/test"
-
- session_id = assert_select("input[name=session]").first["value"]
-
- get :logout, :params => { :session => session_id, :referer => "/test" }
- assert_response :redirect
- assert_redirected_to "/test"
end
def test_logout_with_token
session[:token] = token.token
- get :logout
- assert_response :success
- assert_template :logout
- assert_select "input[name=referer][value=?]", ""
- assert_equal token.token, session[:token]
- assert_not_nil UserToken.where(:id => token.id).first
-
- session_id = assert_select("input[name=session]").first["value"]
-
- get :logout, :params => { :session => session_id }
+ post :logout
assert_response :redirect
assert_redirected_to root_path
assert_nil session[:token]
--- /dev/null
+require "application_system_test_case"
+
+class UserLogoutTest < ApplicationSystemTestCase
+ test "Sign out via link" do
+ user = create(:user)
+ sign_in_as(user)
+ assert_not page.has_content? "Log In"
+
+ click_on user.display_name
+ click_on "Log Out"
+ assert page.has_content? "Log In"
+ end
+
+ test "Sign out via link with referer" do
+ user = create(:user)
+ sign_in_as(user)
+ visit traces_path
+ assert_not page.has_content? "Log In"
+
+ click_on user.display_name
+ click_on "Log Out"
+ assert page.has_content? "Log In"
+ assert page.has_content? "Public GPS traces"
+ end
+
+ test "Sign out via fallback page" do
+ sign_in_as(create(:user))
+ assert_not page.has_content? "Log In"
+
+ visit logout_path
+ assert page.has_content? "Logout from OpenStreetMap"
+
+ click_button "Logout"
+ assert page.has_content? "Log In"
+ end
+
+ test "Sign out via fallback page with referer" do
+ sign_in_as(create(:user))
+ assert_not page.has_content? "Log In"
+
+ visit logout_path(:referer => "/traces")
+ assert page.has_content? "Logout from OpenStreetMap"
+
+ click_button "Logout"
+ assert page.has_content? "Log In"
+ assert page.has_content? "Public GPS traces"
+ end
+end