added news updates ui

This commit is contained in:
albert
2011-11-01 17:51:15 -04:00
parent b06857f8bd
commit 461fe9a6dc
21 changed files with 287 additions and 20 deletions

View File

@@ -1,14 +1,14 @@
(function() {
Danbooru.News = {};
Danbooru.NewsUpdate = {};
Danbooru.News.initialize = function() {
var key = $("#news-ticker").data("updated-at");
Danbooru.NewsUpdate.initialize = function() {
var key = $("#news-updates").data("updated-at");
if (Danbooru.Cookie.get("news-ticker") === key) {
$("#news-ticker").hide();
$("#news-updates").hide();
} else {
$("#close-news-ticker-link").click(function(e) {
$("#news-ticker").hide();
$("#news-updates").hide();
Danbooru.Cookie.put("news-ticker", key);
// need to reset the more link
@@ -20,6 +20,6 @@
}
$(function() {
Danbooru.News.initialize();
Danbooru.NewsUpdate.initialize();
});
})();

View File

@@ -1,4 +1,4 @@
div#news-ticker {
div#news-updates {
padding: 5px;
background: #EEE;
border-bottom: 2px solid #666;

View File

@@ -0,0 +1,4 @@
/*
Place all the styles related to the matching controller here.
They will automatically be included in application.css.
*/

View File

@@ -0,0 +1,38 @@
class NewsUpdatesController < ApplicationController
before_filter :admin_only
respond_to :html
def index
@news_updates = NewsUpdate.paginate(params[:page])
respond_with(@news_updates)
end
def edit
@news_update = NewsUpdate.find(params[:id])
respond_with(@news_update)
end
def update
@news_update = NewsUpdate.find(params[:id])
@news_update.update_attributes(params[:news_update])
respond_with(@news_update, :location => news_updates_path)
end
def new
@news_update = NewsUpdate.new
respond_with(@news_update)
end
def create
@news_update = NewsUpdate.create(params[:news_update])
respond_with(@news_update, :location => news_updates_path)
end
def destroy
@news_update = NewsUpdate.find(params[:id])
@news_update.destroy
respond_with(@news_update) do |format|
format.js
end
end
end

View File

@@ -0,0 +1,2 @@
module NewsUpdatesHelper
end

15
app/models/news_update.rb Normal file
View File

@@ -0,0 +1,15 @@
class NewsUpdate < ActiveRecord::Base
belongs_to :creator, :class_name => "User"
belongs_to :udpater, :class_name => "User"
scope :recent, order("created_at desc").limit(5)
before_validation :initialize_creator, :on => :create
before_validation :initialize_updater
def initialize_creator
self.creator_id = CurrentUser.id
end
def initialize_updater
self.updater_id = CurrentUser.id
end
end

View File

@@ -23,7 +23,7 @@
</head>
<body>
<header id="top">
<%= render "news/listing" %>
<%= render "news_updates/listing" %>
<h1><%= link_to Danbooru.config.app_name, "/" %></h1>
<nav>

View File

@@ -1,10 +0,0 @@
<% unless cookies["news-ticker"] == "2011-09-01" %>
<div id="news-ticker" data-updated-at="2011-09-01">
<ul>
<li>10/22: Database has been reset</li>
<li>Report issues on <a href="https://github.com/r888888888/danbooru/issues/new">Github</a> or the <a href="http://danbooru.donmai.us/forum/show/65870">forum</a></li>
</ul>
<a href="#" id="close-news-ticker-link">close</a>
</div>
<% end %>

View File

@@ -0,0 +1,11 @@
<% cache("news-updates", :expires_in => 1.hour) do %>
<div id="news-updates" data-updated-at="<%= NewsUpdate.recent.first.try(:created_at).try(:strftime, "%m/%d/%Y") %>">
<ul>
<% NewsUpdate.recent.each do |news_update| %>
<li><%= news_update.created_at.strftime("%m/%d") %>: <%= news_update.message.html_safe %></li>
<% end %>
</ul>
<a href="#" id="close-news-ticker-link">close</a>
</div>
<% end %>

View File

@@ -0,0 +1,6 @@
<% content_for(:secondary_links) do %>
<menu>
<li><%= link_to "Listing", news_updates_path %></li>
<li><%= link_to "New", new_news_update_path %></li>
</menu>
<% end %>

View File

@@ -0,0 +1 @@
$("#news-update-<%= @news_update.id %>").remove();

View File

@@ -0,0 +1,16 @@
<div id="c-news-updates">
<div id="a-new">
<h1>Edit Update</h1>
<%= simple_form_for(@news_update) do |f| %>
<%= f.input :message, :hint => "Use HTML for formatting", :input_html => {:size => "30x5"} %>
<%= f.button :submit, "Submit" %>
<% end %>
</div>
</div>
<%= render "secondary_links" %>
<% content_for(:page_title) do %>
Edit Update - <%= Danbooru.config.app_name %>
<% end %>

View File

@@ -0,0 +1,32 @@
<div id="c-news-updates">
<div id="a-index">
<h1>News Updates</h1>
<table class="striped" width="100%">
<thead>
<tr>
<th>Creator</th>
<th>Message</th>
<th></th>
</tr>
</thead>
<tbody>
<% @news_updates.each do |news_update| %>
<tr id="news-update-<%= news_update.id %>">
<td><%= news_update.creator.name %></td>
<td><%= news_update.message %></td>
<td><%= link_to "Edit", edit_news_update_path(news_update) %> | <%= link_to "Delete", news_update_path(news_update), :method => :delete %></td>
</tr>
<% end %>
</tbody>
</table>
<%= numbered_paginator(@news_updates) %>
</div>
</div>
<%= render "secondary_links" %>
<% content_for(:page_title) do %>
News Updates - <%= Danbooru.config.app_name %>
<% end %>

View File

@@ -0,0 +1,16 @@
<div id="c-news-updates">
<div id="a-new">
<h1>New Update</h1>
<%= simple_form_for(@news_update) do |f| %>
<%= f.input :message, :hint => "Use HTML for formatting", :input_html => {:size => "30x5"} %>
<%= f.button :submit, "Submit" %>
<% end %>
</div>
</div>
<%= render "secondary_links" %>
<% content_for(:page_title) do %>
New Update - <%= Danbooru.config.app_name %>
<% end %>

View File

@@ -92,6 +92,7 @@ Danbooru::Application.routes.draw do
resources :jobs
resource :landing
resources :mod_actions
resources :news_updates
resources :notes do
collection do
get :search

View File

@@ -1983,6 +1983,39 @@ CREATE SEQUENCE mod_actions_id_seq
ALTER SEQUENCE mod_actions_id_seq OWNED BY mod_actions.id;
--
-- Name: news_updates; Type: TABLE; Schema: public; Owner: -; Tablespace:
--
CREATE TABLE news_updates (
id integer NOT NULL,
message text NOT NULL,
creator_id integer NOT NULL,
updater_id integer NOT NULL,
created_at timestamp without time zone,
updated_at timestamp without time zone
);
--
-- Name: news_updates_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--
CREATE SEQUENCE news_updates_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
--
-- Name: news_updates_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
--
ALTER SEQUENCE news_updates_id_seq OWNED BY news_updates.id;
--
-- Name: note_versions; Type: TABLE; Schema: public; Owner: -; Tablespace:
--
@@ -2870,6 +2903,13 @@ ALTER TABLE janitor_trials ALTER COLUMN id SET DEFAULT nextval('janitor_trials_i
ALTER TABLE mod_actions ALTER COLUMN id SET DEFAULT nextval('mod_actions_id_seq'::regclass);
--
-- Name: id; Type: DEFAULT; Schema: public; Owner: -
--
ALTER TABLE news_updates ALTER COLUMN id SET DEFAULT nextval('news_updates_id_seq'::regclass);
--
-- Name: id; Type: DEFAULT; Schema: public; Owner: -
--
@@ -3146,6 +3186,14 @@ ALTER TABLE ONLY mod_actions
ADD CONSTRAINT mod_actions_pkey PRIMARY KEY (id);
--
-- Name: news_updates_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace:
--
ALTER TABLE ONLY news_updates
ADD CONSTRAINT news_updates_pkey PRIMARY KEY (id);
--
-- Name: note_versions_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace:
--
@@ -4916,6 +4964,13 @@ CREATE UNIQUE INDEX index_ip_bans_on_ip_addr ON ip_bans USING btree (ip_addr);
CREATE INDEX index_janitor_trials_on_user_id ON janitor_trials USING btree (user_id);
--
-- Name: index_news_updates_on_created_at; Type: INDEX; Schema: public; Owner: -; Tablespace:
--
CREATE INDEX index_news_updates_on_created_at ON news_updates USING btree (created_at);
--
-- Name: index_note_versions_on_note_id; Type: INDEX; Schema: public; Owner: -; Tablespace:
--
@@ -5440,4 +5495,6 @@ INSERT INTO schema_migrations (version) VALUES ('20110717010705');
INSERT INTO schema_migrations (version) VALUES ('20110722211855');
INSERT INTO schema_migrations (version) VALUES ('20110815233456');
INSERT INTO schema_migrations (version) VALUES ('20110815233456');
INSERT INTO schema_migrations (version) VALUES ('20111101212358');

View File

@@ -26,7 +26,7 @@ class CreateUsers < ActiveRecord::Migration
t.column :receive_email_notifications, :boolean, :null => false, :default => false
t.column :comment_threshold, :integer, :null => false, :default => -1
t.column :always_resize_images, :boolean, :null => false, :default => false
t.column :default_image_size, :string, :null => false, :default => "medium"
t.column :default_image_size, :string, :null => false, :default => "large"
t.column :favorite_tags, :text
t.column :blacklisted_tags, :text
t.column :time_zone, :string, :null => false, :default => "Eastern Time (US & Canada)"

View File

@@ -0,0 +1,12 @@
class CreateNewsUpdates < ActiveRecord::Migration
def change
create_table :news_updates do |t|
t.column :message, :text, :null => false
t.column :creator_id, :integer, :null => false
t.column :updater_id, :integer, :null => false
t.timestamps
end
add_index :news_updates, :created_at
end
end

View File

@@ -0,0 +1,3 @@
Factory.define(:news_update) do |f|
f.message "xxx"
end

View File

@@ -0,0 +1,59 @@
require 'test_helper'
class NewsUpdatesControllerTest < ActionController::TestCase
context "the news updates controller" do
setup do
@admin = Factory.create(:admin_user)
CurrentUser.user = @admin
CurrentUser.ip_addr = "127.0.0.1"
@news_update = Factory.create(:news_update)
end
teardown do
CurrentUser.user = nil
CurrentUser.ip_addr = nil
end
context "index action" do
should "render" do
get :index, {}, :user_id => @admin.id
assert_response :success
end
end
context "new action" do
should "render" do
get :new, {}, :user_id => @admin.id
assert_response :success
end
end
context "edit action" do
should "render" do
get :edit, {:id => @news_update.id}, {:user_id => @admin.id}
assert_response :success
end
end
context "update action" do
should "work" do
post :update, {:id => @news_update.id, :news_update => {:message => "zzz"}}, {:user_id => @admin.id}
assert_redirected_to(news_updates_path)
end
end
context "create action" do
should "work" do
post :create, {:news_update => {:message => "zzz"}}, {:user_id => @admin.id}
assert_redirected_to(news_updates_path)
end
end
context "destroy action" do
should "work" do
post :destroy, {:id => @news_update.id, :format => "js"}, {:user_id => @admin.id}
assert_response :success
end
end
end
end

View File

@@ -0,0 +1,4 @@
require 'test_helper'
class NewsUpdatesHelperTest < ActionView::TestCase
end