* Removed unapprovals, added post flags and post appeals (still need to update tests)
* Restyled text
This commit is contained in:
2
Gemfile
2
Gemfile
@@ -8,7 +8,7 @@ group :test do
|
|||||||
gem "simplecov", :require => false
|
gem "simplecov", :require => false
|
||||||
end
|
end
|
||||||
|
|
||||||
gem "rails", "3.0.3"
|
gem "rails", "3.0.5"
|
||||||
gem "pg"
|
gem "pg"
|
||||||
gem "memcache-client", :require => "memcache"
|
gem "memcache-client", :require => "memcache"
|
||||||
gem "imagesize", :require => "image_size"
|
gem "imagesize", :require => "image_size"
|
||||||
|
|||||||
84
Gemfile.lock
84
Gemfile.lock
@@ -1,8 +1,8 @@
|
|||||||
GIT
|
GIT
|
||||||
remote: http://github.com/EmmanuelOga/ffaker.git
|
remote: http://github.com/EmmanuelOga/ffaker.git
|
||||||
revision: 3298ebf33319b840f693a1a0ae2613eeb53e7dc4
|
revision: fc090a6f62d63bd03546e8272e4c9ecd027a77de
|
||||||
specs:
|
specs:
|
||||||
ffaker (1.0.0)
|
ffaker (1.4.0)
|
||||||
|
|
||||||
GIT
|
GIT
|
||||||
remote: http://github.com/mislav/will_paginate.git
|
remote: http://github.com/mislav/will_paginate.git
|
||||||
@@ -15,36 +15,36 @@ GEM
|
|||||||
remote: http://gemcutter.org/
|
remote: http://gemcutter.org/
|
||||||
specs:
|
specs:
|
||||||
abstract (1.0.0)
|
abstract (1.0.0)
|
||||||
actionmailer (3.0.3)
|
actionmailer (3.0.5)
|
||||||
actionpack (= 3.0.3)
|
actionpack (= 3.0.5)
|
||||||
mail (~> 2.2.9)
|
mail (~> 2.2.15)
|
||||||
actionpack (3.0.3)
|
actionpack (3.0.5)
|
||||||
activemodel (= 3.0.3)
|
activemodel (= 3.0.5)
|
||||||
activesupport (= 3.0.3)
|
activesupport (= 3.0.5)
|
||||||
builder (~> 2.1.2)
|
builder (~> 2.1.2)
|
||||||
erubis (~> 2.6.6)
|
erubis (~> 2.6.6)
|
||||||
i18n (~> 0.4)
|
i18n (~> 0.4)
|
||||||
rack (~> 1.2.1)
|
rack (~> 1.2.1)
|
||||||
rack-mount (~> 0.6.13)
|
rack-mount (~> 0.6.13)
|
||||||
rack-test (~> 0.5.6)
|
rack-test (~> 0.5.7)
|
||||||
tzinfo (~> 0.3.23)
|
tzinfo (~> 0.3.23)
|
||||||
activemodel (3.0.3)
|
activemodel (3.0.5)
|
||||||
activesupport (= 3.0.3)
|
activesupport (= 3.0.5)
|
||||||
builder (~> 2.1.2)
|
builder (~> 2.1.2)
|
||||||
i18n (~> 0.4)
|
i18n (~> 0.4)
|
||||||
activerecord (3.0.3)
|
activerecord (3.0.5)
|
||||||
activemodel (= 3.0.3)
|
activemodel (= 3.0.5)
|
||||||
activesupport (= 3.0.3)
|
activesupport (= 3.0.5)
|
||||||
arel (~> 2.0.2)
|
arel (~> 2.0.2)
|
||||||
tzinfo (~> 0.3.23)
|
tzinfo (~> 0.3.23)
|
||||||
activeresource (3.0.3)
|
activeresource (3.0.5)
|
||||||
activemodel (= 3.0.3)
|
activemodel (= 3.0.5)
|
||||||
activesupport (= 3.0.3)
|
activesupport (= 3.0.5)
|
||||||
activesupport (3.0.3)
|
activesupport (3.0.5)
|
||||||
arel (2.0.6)
|
arel (2.0.9)
|
||||||
builder (2.1.2)
|
builder (2.1.2)
|
||||||
daemons (1.1.0)
|
daemons (1.1.0)
|
||||||
delayed_job (2.1.2)
|
delayed_job (2.1.4)
|
||||||
activesupport (~> 3.0)
|
activesupport (~> 3.0)
|
||||||
daemons
|
daemons
|
||||||
erubis (2.6.6)
|
erubis (2.6.6)
|
||||||
@@ -53,7 +53,7 @@ GEM
|
|||||||
haml (3.0.25)
|
haml (3.0.25)
|
||||||
i18n (0.5.0)
|
i18n (0.5.0)
|
||||||
imagesize (0.1.1)
|
imagesize (0.1.1)
|
||||||
mail (2.2.14)
|
mail (2.2.15)
|
||||||
activesupport (>= 2.3.6)
|
activesupport (>= 2.3.6)
|
||||||
i18n (>= 0.4.0)
|
i18n (>= 0.4.0)
|
||||||
mime-types (~> 1.16)
|
mime-types (~> 1.16)
|
||||||
@@ -61,50 +61,48 @@ GEM
|
|||||||
mechanize (1.0.0)
|
mechanize (1.0.0)
|
||||||
nokogiri (>= 1.2.1)
|
nokogiri (>= 1.2.1)
|
||||||
memcache-client (1.8.5)
|
memcache-client (1.8.5)
|
||||||
meta_search (0.9.11)
|
meta_search (1.0.3)
|
||||||
actionpack (~> 3.0.2)
|
actionpack (~> 3.0.2)
|
||||||
activerecord (~> 3.0.2)
|
activerecord (~> 3.0.2)
|
||||||
activesupport (~> 3.0.2)
|
activesupport (~> 3.0.2)
|
||||||
arel (~> 2.0.2)
|
arel (~> 2.0.2)
|
||||||
mime-types (1.16)
|
mime-types (1.16)
|
||||||
mocha (0.9.10)
|
mocha (0.9.12)
|
||||||
rake
|
|
||||||
nokogiri (1.4.4)
|
nokogiri (1.4.4)
|
||||||
pg (0.10.0)
|
pg (0.10.1)
|
||||||
polyglot (0.3.1)
|
polyglot (0.3.1)
|
||||||
rack (1.2.1)
|
rack (1.2.2)
|
||||||
rack-mount (0.6.13)
|
rack-mount (0.6.13)
|
||||||
rack (>= 1.0.0)
|
rack (>= 1.0.0)
|
||||||
rack-test (0.5.7)
|
rack-test (0.5.7)
|
||||||
rack (>= 1.0)
|
rack (>= 1.0)
|
||||||
rails (3.0.3)
|
rails (3.0.5)
|
||||||
actionmailer (= 3.0.3)
|
actionmailer (= 3.0.5)
|
||||||
actionpack (= 3.0.3)
|
actionpack (= 3.0.5)
|
||||||
activerecord (= 3.0.3)
|
activerecord (= 3.0.5)
|
||||||
activeresource (= 3.0.3)
|
activeresource (= 3.0.5)
|
||||||
activesupport (= 3.0.3)
|
activesupport (= 3.0.5)
|
||||||
bundler (~> 1.0)
|
bundler (~> 1.0)
|
||||||
railties (= 3.0.3)
|
railties (= 3.0.5)
|
||||||
railties (3.0.3)
|
railties (3.0.5)
|
||||||
actionpack (= 3.0.3)
|
actionpack (= 3.0.5)
|
||||||
activesupport (= 3.0.3)
|
activesupport (= 3.0.5)
|
||||||
rake (>= 0.8.7)
|
rake (>= 0.8.7)
|
||||||
thor (~> 0.14.4)
|
thor (~> 0.14.4)
|
||||||
rake (0.8.7)
|
rake (0.8.7)
|
||||||
shoulda (2.11.3)
|
shoulda (2.11.3)
|
||||||
silent-postgres (0.0.7)
|
silent-postgres (0.0.7)
|
||||||
simple_form (1.3.0)
|
simple_form (1.3.1)
|
||||||
rails (~> 3.0.0)
|
simplecov (0.4.1)
|
||||||
simplecov (0.3.9)
|
simplecov-html (~> 0.4.3)
|
||||||
simplecov-html (>= 0.3.7)
|
simplecov-html (0.4.3)
|
||||||
simplecov-html (0.3.9)
|
|
||||||
super_exception_notifier (3.0.13)
|
super_exception_notifier (3.0.13)
|
||||||
actionmailer
|
actionmailer
|
||||||
rake
|
rake
|
||||||
thor (0.14.6)
|
thor (0.14.6)
|
||||||
treetop (1.4.9)
|
treetop (1.4.9)
|
||||||
polyglot (>= 0.3.1)
|
polyglot (>= 0.3.1)
|
||||||
tzinfo (0.3.23)
|
tzinfo (0.3.25)
|
||||||
|
|
||||||
PLATFORMS
|
PLATFORMS
|
||||||
ruby
|
ruby
|
||||||
@@ -121,7 +119,7 @@ DEPENDENCIES
|
|||||||
mocha
|
mocha
|
||||||
nokogiri
|
nokogiri
|
||||||
pg
|
pg
|
||||||
rails (= 3.0.3)
|
rails (= 3.0.5)
|
||||||
shoulda
|
shoulda
|
||||||
silent-postgres
|
silent-postgres
|
||||||
simple_form
|
simple_form
|
||||||
|
|||||||
@@ -10,6 +10,10 @@ class CommentsController < ApplicationController
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def search
|
||||||
|
@search = Comment.search(params[:search])
|
||||||
|
end
|
||||||
|
|
||||||
def update
|
def update
|
||||||
@comment = Comment.find(params[:id])
|
@comment = Comment.find(params[:id])
|
||||||
@comment.update_attributes(params[:comment])
|
@comment.update_attributes(params[:comment])
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
class DtextController < ApplicationController
|
class DtextController < ApplicationController
|
||||||
def preview
|
def preview
|
||||||
render :inline => "<h1 class=\"preview-header\">Preview</h1><%= format_text(params[:body]) %>"
|
render :inline => "<h3 class=\"preview-header\">Preview</h3><%= format_text(params[:body]) %>"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
25
app/controllers/post_appeals_controller.rb
Normal file
25
app/controllers/post_appeals_controller.rb
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
class PostAppealsController < ApplicationController
|
||||||
|
before_filter :member_only
|
||||||
|
respond_to :html, :xml, :json, :js
|
||||||
|
rescue_from User::PrivilegeError, :with => "static/access_denied"
|
||||||
|
|
||||||
|
def new
|
||||||
|
@post_appeal = PostAppeal.new
|
||||||
|
respond_with(@post_appeal)
|
||||||
|
end
|
||||||
|
|
||||||
|
def index
|
||||||
|
@search = PostAppeal.search(params[:search])
|
||||||
|
@post_appeals = @search.paginate(:page => params[:page])
|
||||||
|
end
|
||||||
|
|
||||||
|
def create
|
||||||
|
@post_appeal = PostAppeal.create(params[:post_appeal])
|
||||||
|
respond_with(@post_appeal)
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
def check_privilege(post_appeal)
|
||||||
|
raise User::PrivilegeError unless (post_appeal.creator_id == CurrentUser.id || CurrentUser.is_moderator?)
|
||||||
|
end
|
||||||
|
end
|
||||||
25
app/controllers/post_flags_controller.rb
Normal file
25
app/controllers/post_flags_controller.rb
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
class PostFlagsController < ApplicationController
|
||||||
|
before_filter :member_only
|
||||||
|
respond_to :html, :xml, :json, :js
|
||||||
|
rescue_from User::PrivilegeError, :with => "static/access_denied"
|
||||||
|
|
||||||
|
def new
|
||||||
|
@post_flag = PostFlag.new
|
||||||
|
respond_with(@post_flag)
|
||||||
|
end
|
||||||
|
|
||||||
|
def index
|
||||||
|
@search = PostFlag.search(params[:search])
|
||||||
|
@post_flags = @search.paginate(:page => params[:page])
|
||||||
|
end
|
||||||
|
|
||||||
|
def create
|
||||||
|
@post_flag = PostFlag.create(params[:post_flag])
|
||||||
|
respond_with(@post_flag)
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
def check_privilege(post_flag)
|
||||||
|
raise User::PrivilegeError unless (post_flag.creator_id == CurrentUser.id || CurrentUser.is_moderator?)
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -10,7 +10,8 @@ class PostsController < ApplicationController
|
|||||||
|
|
||||||
def show
|
def show
|
||||||
@post = Post.find(params[:id])
|
@post = Post.find(params[:id])
|
||||||
@unapproval = Unapproval.new(:post_id => @post)
|
@post_flag = PostFlag.new(:post_id => @post)
|
||||||
|
@post_appeal = PostAppeal.new(:post_id => @post)
|
||||||
respond_with(@post)
|
respond_with(@post)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -1,32 +0,0 @@
|
|||||||
class UnapprovalsController < ApplicationController
|
|
||||||
before_filter :member_only
|
|
||||||
respond_to :html, :xml, :json, :js
|
|
||||||
rescue_from User::PrivilegeError, :with => "static/access_denied"
|
|
||||||
|
|
||||||
def new
|
|
||||||
@unapproval = Unapproval.new
|
|
||||||
respond_with(@unapproval)
|
|
||||||
end
|
|
||||||
|
|
||||||
def index
|
|
||||||
@search = Unapproval.search(params[:search])
|
|
||||||
@unapprovals = @search.paginate(:page => params[:page])
|
|
||||||
end
|
|
||||||
|
|
||||||
def create
|
|
||||||
@unapproval = Unapproval.create(params[:unapproval])
|
|
||||||
respond_with(@unapproval)
|
|
||||||
end
|
|
||||||
|
|
||||||
def destroy
|
|
||||||
@unapproval = Unapproval.find(params[:id])
|
|
||||||
check_privilege(@unapproval)
|
|
||||||
@unapproval.destroy
|
|
||||||
respond_with(@unapproval)
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
def check_privilege(unapproval)
|
|
||||||
raise User::PrivilegeError unless (unapproval.unapprover_id == CurrentUser.id || CurrentUser.is_moderator?)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -33,10 +33,6 @@ module ApplicationHelper
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def wait_image(html_id)
|
|
||||||
('<img src="/images/wait.gif" style="display: none;" class="wait" id="' + html_id + '">').html_safe
|
|
||||||
end
|
|
||||||
|
|
||||||
protected
|
protected
|
||||||
def nav_link_match(controller, url)
|
def nav_link_match(controller, url)
|
||||||
url =~ case controller
|
url =~ case controller
|
||||||
|
|||||||
9
app/helpers/post_appeals_helper.rb
Normal file
9
app/helpers/post_appeals_helper.rb
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
module PostAppealsHelper
|
||||||
|
def post_appeal_reason(post)
|
||||||
|
post.appeals.map do |appeal|
|
||||||
|
content_tag("span", :class => "flag-and-reason-count") do
|
||||||
|
appeal.reason + " (" + link_to(appeal.creator.name, :controller => "user", :action => "show", :id => appeal.creator_id) + ")"
|
||||||
|
end
|
||||||
|
end.join("; ")
|
||||||
|
end
|
||||||
|
end
|
||||||
9
app/helpers/post_flags_helper.rb
Normal file
9
app/helpers/post_flags_helper.rb
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
module PostFlagsHelper
|
||||||
|
def post_flag_reason(post)
|
||||||
|
post.flags.map do |flag|
|
||||||
|
content_tag("span", :class => "flag-and-reason-count") do
|
||||||
|
flag.reason + " (" + link_to(flag.creator.name, :controller => "user", :action => "show", :id => flag.creator_id) + ")"
|
||||||
|
end
|
||||||
|
end.join("; ")
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -1,6 +1,15 @@
|
|||||||
require 'cgi'
|
require 'cgi'
|
||||||
|
require 'uri'
|
||||||
|
|
||||||
class DText
|
class DText
|
||||||
|
def self.u(string)
|
||||||
|
CGI.escape(string)
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.h(string)
|
||||||
|
CGI.escapeHTML(string)
|
||||||
|
end
|
||||||
|
|
||||||
def self.parse_inline(str, options = {})
|
def self.parse_inline(str, options = {})
|
||||||
str = parse_aliased_wiki_links(str)
|
str = parse_aliased_wiki_links(str)
|
||||||
str = parse_wiki_links(str)
|
str = parse_wiki_links(str)
|
||||||
|
|||||||
@@ -10,8 +10,12 @@ class Comment < ActiveRecord::Base
|
|||||||
attr_accessor :do_not_bump_post
|
attr_accessor :do_not_bump_post
|
||||||
|
|
||||||
scope :recent, :order => "comments.id desc", :limit => 6
|
scope :recent, :order => "comments.id desc", :limit => 6
|
||||||
scope :search_body, lambda {|query| where("body_index @@ plainto_tsquery(?)", query).order("comments.id DESC")}
|
scope :body_matches, lambda {|query| where("body_index @@ plainto_tsquery(?)", query).order("comments.id DESC")}
|
||||||
scope :hidden, lambda {|user| where("score < ?", user.comment_threshold)}
|
scope :hidden, lambda {|user| where("score < ?", user.comment_threshold)}
|
||||||
|
scope :post_tag_match, lambda {|query| joins(:post).where("posts.tag_index @@ to_tsquery('danbooru', ?)", query)}
|
||||||
|
|
||||||
|
search_method :body_matches
|
||||||
|
search_method :post_tag_match
|
||||||
|
|
||||||
def initialize_creator
|
def initialize_creator
|
||||||
self.creator_id = CurrentUser.user.id
|
self.creator_id = CurrentUser.user.id
|
||||||
|
|||||||
@@ -15,8 +15,9 @@ class Post < ActiveRecord::Base
|
|||||||
belongs_to :updater, :class_name => "User"
|
belongs_to :updater, :class_name => "User"
|
||||||
belongs_to :approver, :class_name => "User"
|
belongs_to :approver, :class_name => "User"
|
||||||
belongs_to :parent, :class_name => "Post"
|
belongs_to :parent, :class_name => "Post"
|
||||||
has_one :unapproval, :dependent => :destroy
|
|
||||||
has_one :upload, :dependent => :destroy
|
has_one :upload, :dependent => :destroy
|
||||||
|
has_many :flags, :class_name => "PostFlag", :dependent => :destroy
|
||||||
|
has_many :appeals, :class_name => "PostAppeal", :dependent => :destroy
|
||||||
has_many :versions, :class_name => "PostVersion", :dependent => :destroy, :order => "post_versions.id ASC"
|
has_many :versions, :class_name => "PostVersion", :dependent => :destroy, :order => "post_versions.id ASC"
|
||||||
has_many :votes, :class_name => "PostVote", :dependent => :destroy
|
has_many :votes, :class_name => "PostVote", :dependent => :destroy
|
||||||
has_many :notes, :dependent => :destroy
|
has_many :notes, :dependent => :destroy
|
||||||
@@ -30,8 +31,10 @@ class Post < ActiveRecord::Base
|
|||||||
scope :pending, where(["is_pending = ?", true])
|
scope :pending, where(["is_pending = ?", true])
|
||||||
scope :pending_or_flagged, where(["(is_pending = ? OR is_flagged = ?)", true, true])
|
scope :pending_or_flagged, where(["(is_pending = ? OR is_flagged = ?)", true, true])
|
||||||
scope :undeleted, where(["is_deleted = ?", false])
|
scope :undeleted, where(["is_deleted = ?", false])
|
||||||
|
scope :deleted, where(["is_deleted = ?", true])
|
||||||
scope :visible, lambda {|user| Danbooru.config.can_user_see_post_conditions(user)}
|
scope :visible, lambda {|user| Danbooru.config.can_user_see_post_conditions(user)}
|
||||||
scope :commented_before, lambda {|date| where("last_commented_at < ?", date).order("last_commented_at DESC")}
|
scope :commented_before, lambda {|date| where("last_commented_at < ?", date).order("last_commented_at DESC")}
|
||||||
|
scope :for_user, lambda {|user_id| where(["uploader_string = ?", "uploader:#{user_id}"])}
|
||||||
scope :available_for_moderation, lambda {where(["id NOT IN (SELECT pd.post_id FROM post_disapprovals pd WHERE pd.user_id = ?)", CurrentUser.id])}
|
scope :available_for_moderation, lambda {where(["id NOT IN (SELECT pd.post_id FROM post_disapprovals pd WHERE pd.user_id = ?)", CurrentUser.id])}
|
||||||
scope :hidden_from_moderation, lambda {where(["id IN (SELECT pd.post_id FROM post_disapprovals pd WHERE pd.user_id = ?)", CurrentUser.id])}
|
scope :hidden_from_moderation, lambda {where(["id IN (SELECT pd.post_id FROM post_disapprovals pd WHERE pd.user_id = ?)", CurrentUser.id])}
|
||||||
scope :before_id, lambda {|id| id.present? ? where(["posts.id < ?", id]) : where("TRUE")}
|
scope :before_id, lambda {|id| id.present? ? where(["posts.id < ?", id]) : where("TRUE")}
|
||||||
@@ -212,31 +215,27 @@ class Post < ActiveRecord::Base
|
|||||||
end
|
end
|
||||||
|
|
||||||
module ApprovalMethods
|
module ApprovalMethods
|
||||||
def is_unapprovable?
|
|
||||||
is_pending == false && is_flagged == false && unapproval.nil?
|
|
||||||
end
|
|
||||||
|
|
||||||
def is_approvable?
|
def is_approvable?
|
||||||
(is_pending? || is_flagged?) && approver_string != "approver:#{CurrentUser.name}"
|
(is_pending? || is_flagged?) && approver_string != "approver:#{CurrentUser.name}"
|
||||||
end
|
end
|
||||||
|
|
||||||
def unapprove!(reason)
|
def flag!(reason)
|
||||||
raise Unapproval::Error.new("This post is still pending approval") if is_pending?
|
flag = create_flag(:reason => reason)
|
||||||
raise Unapproval::Error.new("This post has already been flagged") if is_flagged?
|
|
||||||
raise Unapproval::Error.new("This post has already been unapproved once") unless unapproval.nil?
|
|
||||||
|
|
||||||
unapproval = create_unapproval(
|
if flag.errors.any?
|
||||||
:unapprover_id => CurrentUser.user.id,
|
raise PostFlag::Error.new(flag.errors.full_messages.join("; "))
|
||||||
:unapprover_ip_addr => CurrentUser.ip_addr,
|
|
||||||
:reason => reason
|
|
||||||
)
|
|
||||||
|
|
||||||
if unapproval.errors.any?
|
|
||||||
raise Unapproval::Error.new(unapproval.errors.full_messages.join("; "))
|
|
||||||
end
|
end
|
||||||
|
|
||||||
update_attribute(:is_flagged, true)
|
update_attribute(:is_flagged, true)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def appeal!(reason)
|
||||||
|
appeal = create_appeal(:reason => reason)
|
||||||
|
|
||||||
|
if appeal.errors.any?
|
||||||
|
raise PostAppeal::Error.new(appeal.errors.full_messages.join("; "))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def approve!
|
def approve!
|
||||||
raise ApprovalError.new("You have previously approved this post and cannot approve it again") if approver_string == "approver:#{CurrentUser.name}"
|
raise ApprovalError.new("You have previously approved this post and cannot approve it again") if approver_string == "approver:#{CurrentUser.name}"
|
||||||
|
|||||||
36
app/models/post_appeal.rb
Normal file
36
app/models/post_appeal.rb
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
class PostAppeal < ActiveRecord::Base
|
||||||
|
class Error < Exception ; end
|
||||||
|
|
||||||
|
belongs_to :creator, :class_name => "User"
|
||||||
|
belongs_to :post
|
||||||
|
validates_presence_of :reason, :creator_id, :creator_ip_addr
|
||||||
|
validate :validate_post_is_inactive
|
||||||
|
validate :creator_is_not_limited
|
||||||
|
before_validation :initialize_creator, :on => :create
|
||||||
|
validates_uniqueness_of :creator_id, :scope => :post_id
|
||||||
|
scope :for_user, lambda {|user_id| where(["creator_id = ?", user_id])}
|
||||||
|
scope :recent, lambda {where(["created_at >= ?", 1.day.ago])}
|
||||||
|
|
||||||
|
def validate_creator_is_not_limited
|
||||||
|
if PostAppeal.for_user(creator_id).recent.count >= 5
|
||||||
|
errors[:creator] << "can appeal 5 posts a day"
|
||||||
|
false
|
||||||
|
else
|
||||||
|
true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def validate_post_is_inactive
|
||||||
|
if !post.is_deleted? && !post.is_flagged?
|
||||||
|
errors[:post] << "is inactive"
|
||||||
|
false
|
||||||
|
else
|
||||||
|
true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def initialize_creator
|
||||||
|
self.creator_id = CurrentUser.id
|
||||||
|
self.creator_ip_addr = CurrentUser.ip_addr
|
||||||
|
end
|
||||||
|
end
|
||||||
34
app/models/post_flag.rb
Normal file
34
app/models/post_flag.rb
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
class PostFlag < ActiveRecord::Base
|
||||||
|
class Error < Exception ; end
|
||||||
|
|
||||||
|
belongs_to :creator, :class_name => "User"
|
||||||
|
belongs_to :post
|
||||||
|
validates_presence_of :reason, :creator_id, :creator_ip_addr
|
||||||
|
validate :creator_is_not_limited
|
||||||
|
validate :validate_post_is_active
|
||||||
|
before_validation :initialize_creator, :on => :create
|
||||||
|
validates_uniqueness_of :creator_id, :scope => :post_id
|
||||||
|
|
||||||
|
def validate_creator_is_not_limited
|
||||||
|
if PostAppeal.for_user(creator_id).recent.count >= 10
|
||||||
|
errors[:creator] << "can flag 10 posts a day"
|
||||||
|
false
|
||||||
|
else
|
||||||
|
true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def validate_post_is_active
|
||||||
|
if post.is_deleted?
|
||||||
|
errors[:post] << "is deleted"
|
||||||
|
false
|
||||||
|
else
|
||||||
|
true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def initialize_creator
|
||||||
|
self.creator_id = CurrentUser.id
|
||||||
|
self.creator_ip_addr = CurrentUser.ip_addr
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
class Unapproval < ActiveRecord::Base
|
|
||||||
class Error < Exception ; end
|
|
||||||
|
|
||||||
belongs_to :unapprover, :class_name => "User"
|
|
||||||
belongs_to :post
|
|
||||||
validates_presence_of :reason, :unapprover_id, :unapprover_ip_addr
|
|
||||||
validate :validate_post_is_active
|
|
||||||
before_validation :initialize_unapprover, :on => :create
|
|
||||||
before_save :flag_post
|
|
||||||
|
|
||||||
def validate_post_is_active
|
|
||||||
if post.is_pending? || post.is_flagged? || post.is_deleted?
|
|
||||||
errors[:post] << "is inactive"
|
|
||||||
false
|
|
||||||
else
|
|
||||||
true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def flag_post
|
|
||||||
post.update_attribute(:is_flagged, true)
|
|
||||||
end
|
|
||||||
|
|
||||||
def initialize_unapprover
|
|
||||||
self.unapprover_id = CurrentUser.id
|
|
||||||
self.unapprover_ip_addr = CurrentUser.ip_addr
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -228,11 +228,15 @@ class User < ActiveRecord::Base
|
|||||||
end
|
end
|
||||||
|
|
||||||
def upload_limit
|
def upload_limit
|
||||||
deleted_count = RemovedPost.where("user_id = ?", id).count
|
deleted_count = Post.for_user(id).deleted.count
|
||||||
unapproved_count = Post.where("is_pending = true and user_id = ?", id).count
|
pending_count = Post.for_user(id).pending.count
|
||||||
approved_count = Post.where("is_flagged = false and is_pending = false and user_id = ?", id).count
|
approved_count = Post.where("is_flagged = false and is_pending = false and user_id = ?", id).count
|
||||||
|
|
||||||
limit = base_upload_limit + (approved_count / 10) - (deleted_count / 4) - unapproved_count
|
if base_upload_limit
|
||||||
|
limit = base_upload_limit - pending_count
|
||||||
|
else
|
||||||
|
limit = 10 + (approved_count / 10) - (deleted_count / 4) - pending_count
|
||||||
|
end
|
||||||
|
|
||||||
if limit > 20
|
if limit > 20
|
||||||
limit = 20
|
limit = 20
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
<div id="artists">
|
<div id="c-artists">
|
||||||
<div id="edit">
|
<div id="a-edit">
|
||||||
|
<h3>Edit Artist</h3>
|
||||||
<%= render "form" %>
|
<%= render "form" %>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
<div id="artists">
|
<div id="c-artists">
|
||||||
<div id="new">
|
<div id="a-new">
|
||||||
|
<h2>New Artist</h2>
|
||||||
<%= render "form" %>
|
<%= render "form" %>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<div id="c-artists">
|
<div id="c-artists">
|
||||||
<div id="a-search">
|
<div id="a-search">
|
||||||
<h1>Search Artists</h1>
|
<h3>Search Artists</h3>
|
||||||
|
|
||||||
<div id="search-form" style="margin-bottom: 1em;">
|
<div id="search-form" style="margin-bottom: 1em;">
|
||||||
<%= simple_form_for(@search) do |f| %>
|
<%= simple_form_for(@search) do |f| %>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<div id="artists">
|
<div id="c-artists">
|
||||||
<div id="show">
|
<div id="a-show">
|
||||||
<h1>Artist: <%= @artist.name.tr("_", " ") %></h1>
|
<h3>Artist: <%= @artist.name.tr("_", " ") %></h3>
|
||||||
|
|
||||||
<% unless @artist.notes.blank? %>
|
<% unless @artist.notes.blank? %>
|
||||||
<div style="margin-bottom: 1em;">
|
<div style="margin-bottom: 1em;">
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
<% content_for(:secondary_links) do %>
|
<% content_for(:secondary_links) do %>
|
||||||
<menu>
|
<menu>
|
||||||
<li><%= link_to "Listing", comments_path(:group_by => "post") %></li>
|
<li><%= link_to "Listing", comments_path(:group_by => "post") %></li>
|
||||||
|
<li><%= link_to "Search", search_comments_path %></li>
|
||||||
<li><%= link_to "Help", wiki_pages_path(:title => "help:comments") %></li>
|
<li><%= link_to "Help", wiki_pages_path(:title => "help:comments") %></li>
|
||||||
</menu>
|
</menu>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|||||||
@@ -1,9 +1,13 @@
|
|||||||
<div id="c-comments">
|
<div id="c-comments">
|
||||||
<div id="a-index">
|
<div id="a-index">
|
||||||
<% @comments.each do |comment| %>
|
<div class="comments-for-post">
|
||||||
<%= render :partial => "comments/partials/index/list", :locals => {:post => comment.post, :comments => [comment], :show_header => false} %>
|
<div class="list-of-comments">
|
||||||
<% end %>
|
<% @comments.each do |comment| %>
|
||||||
|
<%= render :partial => "comments/partials/show/comment", :locals => {:post => comment.post, :comment => comment, :show_header => false} %>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<%= render "comments/secondary_links" %>
|
<%= render "comments/secondary_links" %>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<article data-comment-id="<%= comment.id %>">
|
<article data-comment-id="<%= comment.id %>">
|
||||||
<div class="author">
|
<div class="author">
|
||||||
<h1><%= link_to comment.creator_name, user_path(comment.creator_id) %></h1>
|
<h4><%= link_to comment.creator_name, user_path(comment.creator_id) %></h4>
|
||||||
<p>
|
<p>
|
||||||
<%= time_ago_in_words(comment.created_at) %> ago
|
<%= time_ago_in_words(comment.created_at) %> ago
|
||||||
</p>
|
</p>
|
||||||
|
|||||||
13
app/views/comments/search.html.erb
Normal file
13
app/views/comments/search.html.erb
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
<div id="c-comments">
|
||||||
|
<div id="a-search">
|
||||||
|
<h1>Search Comments</h1>
|
||||||
|
<%= simple_form_for(@search) do |f| %>
|
||||||
|
<%= hidden_field_tag "group_by", "comment" %>
|
||||||
|
<%= f.input :body_matches, :label => "Body" %>
|
||||||
|
<%= f.input :creator_name_equals, :label => "User" %>
|
||||||
|
<%= f.input :post_tag_match, :label => "Tags" %>
|
||||||
|
|
||||||
|
<%= f.button :submit, "Search" %>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@@ -1,10 +1,8 @@
|
|||||||
<article data-forum-post-id="<%= forum_post.id %>">
|
<article data-forum-post-id="<%= forum_post.id %>">
|
||||||
<div class="author">
|
<div class="author">
|
||||||
<h1><%= link_to forum_post.creator.name, user_path(forum_post.creator_id) %></h1>
|
<h4><%= link_to forum_post.creator.name, user_path(forum_post.creator_id) %></h4>
|
||||||
<p>
|
<p>
|
||||||
<time datetime="<%= forum_post.created_at %>">
|
<%= time_ago_in_words(forum_post.created_at) %> ago
|
||||||
<%= time_ago_in_words(forum_post.created_at) %> ago
|
|
||||||
</time>
|
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="content">
|
<div class="content">
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<div id="c-forum-topics">
|
<div id="c-forum-topics">
|
||||||
<div id="a-edit">
|
<div id="a-edit">
|
||||||
<h1>Edit Forum Post</h1>
|
<h3>Edit Forum Post</h3>
|
||||||
|
|
||||||
<%= render "form" %>
|
<%= render "form" %>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<div id="c-forum-topics">
|
<div id="c-forum-topics">
|
||||||
<div id="a-new">
|
<div id="a-new">
|
||||||
<h1>New Forum Post</h1>
|
<h3>New Forum Post</h3>
|
||||||
<%= render "form" %>
|
<%= render "form" %>
|
||||||
<%= error_messages_for "forum_post" %>
|
<%= error_messages_for "forum_post" %>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<div id="c-forum-topics">
|
<div id="c-forum-topics">
|
||||||
<div id="a-search">
|
<div id="a-search">
|
||||||
<h1>Search Forum Posts</h1>
|
<h3>Search Forum Posts</h3>
|
||||||
<%= simple_form_for @search do |f| %>
|
<%= simple_form_for @search do |f| %>
|
||||||
<%= f.input :topic_title_matches, :label => "Title" %>
|
<%= f.input :topic_title_matches, :label => "Title" %>
|
||||||
<%= f.input :body_matches, :label => "Body" %>
|
<%= f.input :body_matches, :label => "Body" %>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<div id="c-forum-topics">
|
<div id="c-forum-topics">
|
||||||
<div id="a-edit">
|
<div id="a-edit">
|
||||||
<h1>Edit Forum Topic</h1>
|
<h3>Edit Forum Topic</h3>
|
||||||
|
|
||||||
<%= render "form" %>
|
<%= render "form" %>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<h1>Forum</h1>
|
<h3>Forum</h3>
|
||||||
|
|
||||||
<table width="100%" class="striped">
|
<table width="100%" class="striped">
|
||||||
<thead>
|
<thead>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<div id="c-forum-topics">
|
<div id="c-forum-topics">
|
||||||
<div id="a-new">
|
<div id="a-new">
|
||||||
<h1>New Forum Topic</h1>
|
<h3>New Forum Topic</h3>
|
||||||
|
|
||||||
<%= render "form" %>
|
<%= render "form" %>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,18 +1,18 @@
|
|||||||
<div id="c-forum-topics">
|
<div id="c-forum-topics">
|
||||||
<div id="a-show">
|
<div id="a-show">
|
||||||
<h1 id="forum-topic-title">
|
<% if @forum_topic.is_locked? %>
|
||||||
<%= @forum_topic.title %>
|
<div class="notice">
|
||||||
<% if @forum_topic.is_locked? %>
|
<p>This topic has been locked.</p>
|
||||||
<span class="info">(locked)</span>
|
</div>
|
||||||
<% end %>
|
<% end %>
|
||||||
<% if @forum_topic.is_sticky? %>
|
|
||||||
<span class="info">(sticky)</span>
|
|
||||||
<% end %>
|
|
||||||
</h1>
|
|
||||||
|
|
||||||
<%= render :partial => "forum_posts/listing", :locals => {:forum_posts => @forum_posts} %>
|
<%= render :partial => "forum_posts/listing", :locals => {:forum_posts => @forum_posts} %>
|
||||||
<%= render "paginator" %>
|
<%= render "paginator" %>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<%= render "secondary_links" %>
|
<%= render "secondary_links" %>
|
||||||
|
|
||||||
|
<%= content_for(:page_title) do %>
|
||||||
|
forum/<%= @forum_topic.title %>
|
||||||
|
<% end %>
|
||||||
@@ -48,12 +48,12 @@
|
|||||||
</nav>
|
</nav>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
<% if flash[:notice] %>
|
<%- if flash[:notice] -%>
|
||||||
<div class="ui-corner-all ui-state-highlight" id="notice"><span class="ui-icon ui-icon-info"></span> <%= flash[:notice] %></div>
|
<div class="ui-corner-all ui-state-highlight" id="notice"><span class="ui-icon ui-icon-info"></span> <%= flash[:notice] %></div>
|
||||||
<% else %>
|
<%- else -%>
|
||||||
<div class="ui-corner-all ui-state-highlight" id="notice" style="display: none;"><span class="ui-icon ui-icon-info"></span> </div>
|
<div class="ui-corner-all ui-state-highlight" id="notice" style="display: none;"><span class="ui-icon ui-icon-info"></span> </div>
|
||||||
<% end %>
|
<%- end -%>
|
||||||
|
|
||||||
<div id="page">
|
<div id="page">
|
||||||
<%= yield :layout %>
|
<%= yield :layout %>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
17
app/views/post_appeals/new.html.erb
Normal file
17
app/views/post_appeals/new.html.erb
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
<p>If this post was automatically deleted, <strong>then it means at least ten janitors all thought it didn't belong on the site</strong>. If you still believe this image was wrongfully deleted, then you can appeal its deletion.</p>
|
||||||
|
|
||||||
|
<p>Some valid reasons for appealing include:</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>Funny</li>
|
||||||
|
<li>Weird</li>
|
||||||
|
<li>Translated</li>
|
||||||
|
<li>Part of a pool</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>All users are limited to 5 appeals a day. For more details, please read the <%= link_to "wiki", wiki_pages_path(:title => "help:deletion_appeals") %>.</p>
|
||||||
|
|
||||||
|
<%= simple_form_for(@post_appeal, :remote => true, :format => :js) do |f| %>
|
||||||
|
<%= hidden_field_tag "post_appeal[post_id]", @post_appeal.post_id %>
|
||||||
|
<%= f.text_field :reason, :size => "40x5" %>
|
||||||
|
<% end %>
|
||||||
@@ -2,8 +2,8 @@ var errors = <%= @unapproval.errors.full_messages.to_json.html_safe %>;
|
|||||||
if (errors.length > 0) {
|
if (errors.length > 0) {
|
||||||
Danbooru.j_error(errors.join("; "));
|
Danbooru.j_error(errors.join("; "));
|
||||||
} else {
|
} else {
|
||||||
Danbooru.j_alert("Unapproval", "Unapproval successful");
|
Danbooru.j_alert("Flag", "Post flagged");
|
||||||
$("a#approve").show();
|
$("a#approve").show();
|
||||||
$("a#disapprove").show();
|
$("a#disapprove").show();
|
||||||
$("a#unapprove").hide();
|
$("a#flag").hide();
|
||||||
}
|
}
|
||||||
25
app/views/post_flags/new.html.erb
Normal file
25
app/views/post_flags/new.html.erb
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
<p>If you believe a post does not belong on this site, you can flag for its deletion. As a reminder, the following are some common reasons for flagging a post:</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>Not anime-related</li>
|
||||||
|
<li>Furry: a character has body fur or an animal face</li>
|
||||||
|
<li>Watermark: text or logo inserted by someone besides the original artist</li>
|
||||||
|
<li>Poor compression: JPEG artifacts</li>
|
||||||
|
<li>Guro: mutilation, extreme bodily distension</li>
|
||||||
|
<li>Bad proportions: extremely large breasts or penises</li>
|
||||||
|
<li>Manga: Multiple pages of a manga, doujinshi, or comic that don't stand up to individual scrutiny</li>
|
||||||
|
<li>Fake translations: Made up translations are banned</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>The following are <strong>NOT</strong> valid reasons for flagging a post:</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>Duplicate: just parent to the original</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Enter a reason:</p>
|
||||||
|
|
||||||
|
<%= simple_form_for(@post_flag, :remote => true, :format => :js) do |f| %>
|
||||||
|
<%= hidden_field_tag "post_flag[post_id]", @post_flag.post_id %>
|
||||||
|
<%= f.text_field :reason %>
|
||||||
|
<% end %>
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
$("#c-posts a#approve").hide();
|
$("#c-posts a#approve").hide();
|
||||||
$("#c-posts a#disapprove").hide();
|
$("#c-posts a#disapprove").hide();
|
||||||
$("#c-posts a#unapprove").show();
|
$("#c-posts a#flag").show();
|
||||||
|
|
||||||
$("#c-post-moderation #post-<%= @post.id %>").hide();
|
$("#c-post-moderation #post-<%= @post.id %>").hide();
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
$("#c-posts a#approve").hide();
|
$("#c-posts a#approve").hide();
|
||||||
$("#c-posts a#disapprove").hide();
|
$("#c-posts a#disapprove").hide();
|
||||||
$("#c-posts a#unapprove").hide();
|
|
||||||
|
|
||||||
$("#c-post-moderation #post-<%= @post.id %>").hide();
|
$("#c-post-moderation #post-<%= @post.id %>").hide();
|
||||||
|
|||||||
@@ -23,7 +23,10 @@
|
|||||||
<li>Score: <%= post.score %></li>
|
<li>Score: <%= post.score %></li>
|
||||||
<li>Uploader: <%= link_to(post.uploader.name, user_path(post.uploader_id)) %> <%= time_ago_in_words(post.created_at) %> ago</li>
|
<li>Uploader: <%= link_to(post.uploader.name, user_path(post.uploader_id)) %> <%= time_ago_in_words(post.created_at) %> ago</li>
|
||||||
<% if post.is_flagged? %>
|
<% if post.is_flagged? %>
|
||||||
<li>Flagged: <%= post.unapproval.reason %> by <%= post.unapproval.unapprover.name %></li>
|
<li>Flagged: <%= post_flag_reason(post) %></li>
|
||||||
|
<% end %>
|
||||||
|
<% if (post.is_flagged? || post.is_deleted?) && post.appeals.any? %>
|
||||||
|
<li>Appeals: <%= post_appeal_reason(post) %></li>
|
||||||
<% end %>
|
<% end %>
|
||||||
<li>Disapprovals: <%= post.disapprovals.count %></li>
|
<li>Disapprovals: <%= post.disapprovals.count %></li>
|
||||||
<li>Tags: <%= post.tag_string %></li>
|
<li>Tags: <%= post.tag_string %></li>
|
||||||
|
|||||||
@@ -17,6 +17,5 @@
|
|||||||
<% if CurrentUser.user.is_janitor? %>
|
<% if CurrentUser.user.is_janitor? %>
|
||||||
<option value="approve">Approve</option>
|
<option value="approve">Approve</option>
|
||||||
<% end %>
|
<% end %>
|
||||||
<option value="unapprove">Unapprove</option>
|
|
||||||
</select>
|
</select>
|
||||||
</form>
|
</form>
|
||||||
@@ -4,8 +4,11 @@
|
|||||||
<% if post.approver %>
|
<% if post.approver %>
|
||||||
<li>Approver: <%= link_to(post.approver.name, user_path(post.approver_id)) %></li>
|
<li>Approver: <%= link_to(post.approver.name, user_path(post.approver_id)) %></li>
|
||||||
<% end %>
|
<% end %>
|
||||||
<% if post.unapproval %>
|
<% if post.is_flagged? %>
|
||||||
<li>Unapproved: <%= post.unapproval.reason %> (by <%= post.unapproval.unapprover.name %>)</li>
|
<li>Flagged: <%= post_flag_reason(post) %></li>
|
||||||
|
<% end %>
|
||||||
|
<% if (post.is_flagged? || post.is_deleted?) && post.appeals.any? %>
|
||||||
|
<li>Appealed: <%= post_appeal_reason(post) %></li>
|
||||||
<% end %>
|
<% end %>
|
||||||
<li>
|
<li>
|
||||||
Size: <%= number_to_human_size(post.file_size) %>
|
Size: <%= number_to_human_size(post.file_size) %>
|
||||||
|
|||||||
@@ -3,7 +3,8 @@
|
|||||||
<li><%= link_to "Favorite", favorite_path(post), :remote => true, :method => :post, :id => "add-to-favorites" %></li>
|
<li><%= link_to "Favorite", favorite_path(post), :remote => true, :method => :post, :id => "add-to-favorites" %></li>
|
||||||
<li><%= link_to "Unfavorite", favorite_path(post), :remote => true, :method => :delete, :id => "remove-from-favorites" %></li>
|
<li><%= link_to "Unfavorite", favorite_path(post), :remote => true, :method => :delete, :id => "remove-from-favorites" %></li>
|
||||||
<li><%= link_to "Translate", "#" %></li>
|
<li><%= link_to "Translate", "#" %></li>
|
||||||
<li><%= link_to "Unapprove", new_unapproval_path(:post_id => post.id), :id => "unapprove" %></li>
|
<li><%= link_to "Flag", new_post_flag_path(:post_id => post.id), :id => "flag" %></li>
|
||||||
|
<li><%= link_to "Appeal", new_post_appeal_path(:post_id => post.id), :id => "appeal" %></li>
|
||||||
<% if CurrentUser.is_janitor? %>
|
<% if CurrentUser.is_janitor? %>
|
||||||
<li><%= link_to "Approve", post_moderation_approve_path(:post_id => post.id), :remote => true, :method => :put, :id => "approve" %></li>
|
<li><%= link_to "Approve", post_moderation_approve_path(:post_id => post.id), :remote => true, :method => :put, :id => "approve" %></li>
|
||||||
<li><%= link_to "Disapprove", post_moderation_disapprove_path(:post_id => post.id), :remote => true, :method => :put, :id => "disapprove" %></li>
|
<li><%= link_to "Disapprove", post_moderation_disapprove_path(:post_id => post.id), :remote => true, :method => :put, :id => "disapprove" %></li>
|
||||||
|
|||||||
@@ -60,8 +60,12 @@
|
|||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="unapprove-dialog" title="Unapprove Post">
|
<div id="flag-dialog" title="Flag Post">
|
||||||
<%= render :template => "unapprovals/new" %>
|
<%= render :template => "post_flags/new" %>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="appeal-dialog" title="Appeal Post">
|
||||||
|
<%= render :template => "post_appeals/new" %>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="add-to-pool-dialog" title="Add to Pool">
|
<div id="add-to-pool-dialog" title="Add to Pool">
|
||||||
@@ -78,7 +82,6 @@
|
|||||||
<meta name="favorites" content="<%= @post.fav_string %>">
|
<meta name="favorites" content="<%= @post.fav_string %>">
|
||||||
<meta name="pools" content="<%= @post.pool_string %>">
|
<meta name="pools" content="<%= @post.pool_string %>">
|
||||||
<meta name="post-id" content="<%= @post.id %>">
|
<meta name="post-id" content="<%= @post.id %>">
|
||||||
<meta name="post-is-unapprovable" content="<%= @post.is_unapprovable? %>">
|
|
||||||
<meta name="post-is-approvable" content="<%= @post.is_approvable? %>">
|
<meta name="post-is-approvable" content="<%= @post.is_approvable? %>">
|
||||||
<meta name="post-is-deleted" content="<%= @post.is_deleted? %>">
|
<meta name="post-is-deleted" content="<%= @post.is_deleted? %>">
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<div id="c-tag-aliases">
|
<div id="c-tag-aliases">
|
||||||
<div id="a-new">
|
<div id="a-new">
|
||||||
<h1>New Tag Alias</h1>
|
<h3>New Tag Alias</h3>
|
||||||
<%= simple_form_for(@tag_alias) do |f| %>
|
<%= simple_form_for(@tag_alias) do |f| %>
|
||||||
<%= f.input :antecedent_name, :label => "From" %>
|
<%= f.input :antecedent_name, :label => "From" %>
|
||||||
<%= f.input :consequent_name, :label => "To" %>
|
<%= f.input :consequent_name, :label => "To" %>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<div id="c-tag-aliases">
|
<div id="c-tag-aliases">
|
||||||
<div id="a-new">
|
<div id="a-new">
|
||||||
<h1>New Tag Implication</h1>
|
<h3>New Tag Implication</h3>
|
||||||
<%= simple_form_for(@tag_implication) do |f| %>
|
<%= simple_form_for(@tag_implication) do |f| %>
|
||||||
<%= f.input :antecedent_name, :label => "From" %>
|
<%= f.input :antecedent_name, :label => "From" %>
|
||||||
<%= f.input :consequent_name, :label => "To" %>
|
<%= f.input :consequent_name, :label => "To" %>
|
||||||
|
|||||||
@@ -2,8 +2,6 @@
|
|||||||
<menu>
|
<menu>
|
||||||
<li><%= link_to "Listing", tags_path %></li>
|
<li><%= link_to "Listing", tags_path %></li>
|
||||||
<li><%= link_to "Search", search_tags_path %></li>
|
<li><%= link_to "Search", search_tags_path %></li>
|
||||||
<li><%= link_to "Aliases", tag_aliases_path %></li>
|
|
||||||
<li><%= link_to "Implications", tag_implications_path %></li>
|
|
||||||
<li><%= link_to "Help", wiki_pages_path(:search => {:title_equals => "help:tags"}) %></li>
|
<li><%= link_to "Help", wiki_pages_path(:search => {:title_equals => "help:tags"}) %></li>
|
||||||
</menu>
|
</menu>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|||||||
@@ -8,3 +8,5 @@
|
|||||||
<% end %>
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<%= render "secondary_links" %>
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
<p>You can unapprove a post if you believe it breaks the rules or doesn't belong on this site. You must provide a reason.</p>
|
|
||||||
<%= form_for(@unapproval, :remote => true, :format => :js) do |f| %>
|
|
||||||
<%= hidden_field_tag "unapproval[post_id]", @unapproval.post_id %>
|
|
||||||
<%= f.text_area :reason, :size => "40x5" %>
|
|
||||||
<% end %>
|
|
||||||
@@ -58,6 +58,8 @@ Danbooru::Application.routes.draw do
|
|||||||
end
|
end
|
||||||
|
|
||||||
resources :post_versions, :only => [:index]
|
resources :post_versions, :only => [:index]
|
||||||
|
resources :post_flags, :only => [:new, :index, :create]
|
||||||
|
resources :post_appeals, :only => [:new, :index, :create]
|
||||||
resource :session
|
resource :session
|
||||||
resources :tags do
|
resources :tags do
|
||||||
collection do
|
collection do
|
||||||
@@ -71,7 +73,6 @@ Danbooru::Application.routes.draw do
|
|||||||
end
|
end
|
||||||
resources :tag_implications
|
resources :tag_implications
|
||||||
resources :tag_subscriptions
|
resources :tag_subscriptions
|
||||||
resources :unapprovals
|
|
||||||
resources :uploads
|
resources :uploads
|
||||||
resources :users
|
resources :users
|
||||||
resources :user_feedback
|
resources :user_feedback
|
||||||
|
|||||||
@@ -1,17 +0,0 @@
|
|||||||
class CreateUnapprovals < ActiveRecord::Migration
|
|
||||||
def self.up
|
|
||||||
create_table :unapprovals do |t|
|
|
||||||
t.column :post_id, :integer, :null => false
|
|
||||||
t.column :reason, :text
|
|
||||||
t.column :unapprover_id, :integer, :null => false
|
|
||||||
t.column :unapprover_ip_addr, "inet", :null => false
|
|
||||||
t.timestamps
|
|
||||||
end
|
|
||||||
|
|
||||||
add_index :unapprovals, :post_id
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.down
|
|
||||||
drop_table :unapprovals
|
|
||||||
end
|
|
||||||
end
|
|
||||||
19
db/migrate/20110328215652_create_post_flags.rb
Normal file
19
db/migrate/20110328215652_create_post_flags.rb
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
class CreatePostFlags < ActiveRecord::Migration
|
||||||
|
def self.up
|
||||||
|
create_table :post_flags do |t|
|
||||||
|
t.column :post_id, :integer, :null => false
|
||||||
|
t.column :creator_id, :integer, :null => false
|
||||||
|
t.column :creator_ip_addr, :inet, :null => false
|
||||||
|
t.column :reason, :text
|
||||||
|
t.timestamps
|
||||||
|
end
|
||||||
|
|
||||||
|
add_index :post_flags, :post_id
|
||||||
|
add_index :post_flags, :creator_id
|
||||||
|
add_index :post_flags, :creator_ip_addr
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.down
|
||||||
|
drop_table :post_flags
|
||||||
|
end
|
||||||
|
end
|
||||||
19
db/migrate/20110328215701_create_post_appeals.rb
Normal file
19
db/migrate/20110328215701_create_post_appeals.rb
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
class CreatePostAppeals < ActiveRecord::Migration
|
||||||
|
def self.up
|
||||||
|
create_table :post_appeals do |t|
|
||||||
|
t.column :post_id, :integer, :null => false
|
||||||
|
t.column :creator_id, :integer, :null => false
|
||||||
|
t.column :creator_ip_addr, :integer, :null => false
|
||||||
|
t.column :reason, :text
|
||||||
|
t.timestamps
|
||||||
|
end
|
||||||
|
|
||||||
|
add_index :post_appeals, :post_id
|
||||||
|
add_index :post_appeals, :creator_id
|
||||||
|
add_index :post_appeals, :creator_ip_addr
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.down
|
||||||
|
drop_table :post_appeals
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -1113,27 +1113,27 @@ $(document).ready(function() {
|
|||||||
Danbooru.Favorite.initialize_all();
|
Danbooru.Favorite.initialize_all();
|
||||||
});
|
});
|
||||||
(function() {
|
(function() {
|
||||||
Danbooru.Unapproval = {};
|
Danbooru.PostFlag = {};
|
||||||
|
|
||||||
Danbooru.Unapproval.initialize_all = function() {
|
Danbooru.PostFlag.initialize_all = function() {
|
||||||
this.initialize_unapprove();
|
this.initialize_flag();
|
||||||
this.hide_or_show_unapprove_link();
|
this.hide_or_show_flag_link();
|
||||||
}
|
}
|
||||||
|
|
||||||
Danbooru.Unapproval.hide_or_show_unapprove_link = function() {
|
Danbooru.PostFlag.hide_or_show_flag_link = function() {
|
||||||
if (Danbooru.meta("post-is-unapprovable") != "true") {
|
if (Danbooru.meta("post-is-deleted") == "true") {
|
||||||
$("a#unapprove").hide();
|
$("a#flag").hide();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Danbooru.Unapproval.initialize_unapprove = function() {
|
Danbooru.PostFlag.initialize_flag = function() {
|
||||||
$("#unapprove-dialog").dialog({
|
$("#flag-dialog").dialog({
|
||||||
autoOpen: false,
|
autoOpen: false,
|
||||||
width: 400,
|
width: 700,
|
||||||
modal: true,
|
modal: true,
|
||||||
buttons: {
|
buttons: {
|
||||||
"Submit": function() {
|
"Submit": function() {
|
||||||
$("#unapprove-dialog form").submit();
|
$("#flag-dialog form").submit();
|
||||||
$(this).dialog("close");
|
$(this).dialog("close");
|
||||||
},
|
},
|
||||||
"Cancel": function() {
|
"Cancel": function() {
|
||||||
@@ -1142,15 +1142,55 @@ $(document).ready(function() {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
$("a#unapprove").click(function(e) {
|
$("a#flag").click(function(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
$("#unapprove-dialog").dialog("open");
|
$("#flag-dialog").dialog("open");
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
})();
|
})();
|
||||||
|
|
||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
Danbooru.Unapproval.initialize_all();
|
Danbooru.PostFlag.initialize_all();
|
||||||
|
});
|
||||||
|
(function() {
|
||||||
|
Danbooru.PostAppeal = {};
|
||||||
|
|
||||||
|
Danbooru.PostAppeal.initialize_all = function() {
|
||||||
|
this.initialize_appeal();
|
||||||
|
this.hide_or_show_appeal_link();
|
||||||
|
}
|
||||||
|
|
||||||
|
Danbooru.PostAppeal.hide_or_show_appeal_link = function() {
|
||||||
|
if (Danbooru.meta("post-is-deleted") != "true") {
|
||||||
|
$("a#appeal").hide();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Danbooru.PostAppeal.initialize_appeal = function() {
|
||||||
|
$("#appeal-dialog").dialog({
|
||||||
|
autoOpen: false,
|
||||||
|
width: 700,
|
||||||
|
modal: true,
|
||||||
|
buttons: {
|
||||||
|
"Submit": function() {
|
||||||
|
$("#appeal-dialog form").submit();
|
||||||
|
$(this).dialog("close");
|
||||||
|
},
|
||||||
|
"Cancel": function() {
|
||||||
|
$(this).dialog("close");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$("a#appeal").click(function(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
$("#appeal-dialog").dialog("open");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
|
||||||
|
$(document).ready(function() {
|
||||||
|
Danbooru.PostAppeal.initialize_all();
|
||||||
});
|
});
|
||||||
(function() {
|
(function() {
|
||||||
Danbooru.PostModeration = {};
|
Danbooru.PostModeration = {};
|
||||||
|
|||||||
40
public/javascripts/src/app/post_appeals.js
Normal file
40
public/javascripts/src/app/post_appeals.js
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
(function() {
|
||||||
|
Danbooru.PostAppeal = {};
|
||||||
|
|
||||||
|
Danbooru.PostAppeal.initialize_all = function() {
|
||||||
|
this.initialize_appeal();
|
||||||
|
this.hide_or_show_appeal_link();
|
||||||
|
}
|
||||||
|
|
||||||
|
Danbooru.PostAppeal.hide_or_show_appeal_link = function() {
|
||||||
|
if (Danbooru.meta("post-is-deleted") != "true") {
|
||||||
|
$("a#appeal").hide();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Danbooru.PostAppeal.initialize_appeal = function() {
|
||||||
|
$("#appeal-dialog").dialog({
|
||||||
|
autoOpen: false,
|
||||||
|
width: 700,
|
||||||
|
modal: true,
|
||||||
|
buttons: {
|
||||||
|
"Submit": function() {
|
||||||
|
$("#appeal-dialog form").submit();
|
||||||
|
$(this).dialog("close");
|
||||||
|
},
|
||||||
|
"Cancel": function() {
|
||||||
|
$(this).dialog("close");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$("a#appeal").click(function(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
$("#appeal-dialog").dialog("open");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
|
||||||
|
$(document).ready(function() {
|
||||||
|
Danbooru.PostAppeal.initialize_all();
|
||||||
|
});
|
||||||
40
public/javascripts/src/app/post_flags.js
Normal file
40
public/javascripts/src/app/post_flags.js
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
(function() {
|
||||||
|
Danbooru.PostFlag = {};
|
||||||
|
|
||||||
|
Danbooru.PostFlag.initialize_all = function() {
|
||||||
|
this.initialize_flag();
|
||||||
|
this.hide_or_show_flag_link();
|
||||||
|
}
|
||||||
|
|
||||||
|
Danbooru.PostFlag.hide_or_show_flag_link = function() {
|
||||||
|
if (Danbooru.meta("post-is-deleted") == "true") {
|
||||||
|
$("a#flag").hide();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Danbooru.PostFlag.initialize_flag = function() {
|
||||||
|
$("#flag-dialog").dialog({
|
||||||
|
autoOpen: false,
|
||||||
|
width: 700,
|
||||||
|
modal: true,
|
||||||
|
buttons: {
|
||||||
|
"Submit": function() {
|
||||||
|
$("#flag-dialog form").submit();
|
||||||
|
$(this).dialog("close");
|
||||||
|
},
|
||||||
|
"Cancel": function() {
|
||||||
|
$(this).dialog("close");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$("a#flag").click(function(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
$("#flag-dialog").dialog("open");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
|
||||||
|
$(document).ready(function() {
|
||||||
|
Danbooru.PostFlag.initialize_all();
|
||||||
|
});
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
(function() {
|
|
||||||
Danbooru.Unapproval = {};
|
|
||||||
|
|
||||||
Danbooru.Unapproval.initialize_all = function() {
|
|
||||||
this.initialize_unapprove();
|
|
||||||
this.hide_or_show_unapprove_link();
|
|
||||||
}
|
|
||||||
|
|
||||||
Danbooru.Unapproval.hide_or_show_unapprove_link = function() {
|
|
||||||
if (Danbooru.meta("post-is-unapprovable") != "true") {
|
|
||||||
$("a#unapprove").hide();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Danbooru.Unapproval.initialize_unapprove = function() {
|
|
||||||
$("#unapprove-dialog").dialog({
|
|
||||||
autoOpen: false,
|
|
||||||
width: 400,
|
|
||||||
modal: true,
|
|
||||||
buttons: {
|
|
||||||
"Submit": function() {
|
|
||||||
$("#unapprove-dialog form").submit();
|
|
||||||
$(this).dialog("close");
|
|
||||||
},
|
|
||||||
"Cancel": function() {
|
|
||||||
$(this).dialog("close");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
$("a#unapprove").click(function(e) {
|
|
||||||
e.preventDefault();
|
|
||||||
$("#unapprove-dialog").dialog("open");
|
|
||||||
});
|
|
||||||
}
|
|
||||||
})();
|
|
||||||
|
|
||||||
$(document).ready(function() {
|
|
||||||
Danbooru.Unapproval.initialize_all();
|
|
||||||
});
|
|
||||||
@@ -1,20 +1,22 @@
|
|||||||
.blacklisted {
|
.blacklisted {
|
||||||
display: none !important; }
|
display: none !important; }
|
||||||
|
|
||||||
body, div, h1, h2, h3, h4, h5, h6, p, ul, li, dd, dt {
|
body, div, h1, h2, h3, h4, h5, h6, p, ul, li, dd, dt, header, aside {
|
||||||
font-family: Verdana, Geneva, sans-serif;
|
font-family: Verdana, Geneva, sans-serif;
|
||||||
font-size: 100%;
|
line-height: 1.25em;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
border: 0;
|
border: 0;
|
||||||
vertical-align: baseline; }
|
vertical-align: baseline; }
|
||||||
|
|
||||||
|
body {
|
||||||
|
font-size: 87.5%; }
|
||||||
|
|
||||||
h1, h2, h3, h4 {
|
h1, h2, h3, h4 {
|
||||||
font-family: Tahoma;
|
font-family: Tahoma;
|
||||||
line-height: 1em; }
|
line-height: 1em; }
|
||||||
|
|
||||||
body {
|
body {
|
||||||
font-size: 80%;
|
|
||||||
padding: 1em 2em;
|
padding: 1em 2em;
|
||||||
margin: 0; }
|
margin: 0; }
|
||||||
|
|
||||||
@@ -57,22 +59,22 @@ dt {
|
|||||||
font-weight: bold; }
|
font-weight: bold; }
|
||||||
|
|
||||||
h1 {
|
h1 {
|
||||||
font-size: 2em; }
|
font-size: 2.1818em; }
|
||||||
|
|
||||||
h2 {
|
h2 {
|
||||||
font-size: 1.8em; }
|
font-size: 1.9091em; }
|
||||||
|
|
||||||
h3 {
|
h3 {
|
||||||
font-size: 1.6em; }
|
font-size: 1.6364em; }
|
||||||
|
|
||||||
h4 {
|
h4 {
|
||||||
font-size: 1.4em; }
|
font-size: 1.4545em; }
|
||||||
|
|
||||||
h5 {
|
h5 {
|
||||||
font-size: 1.2em; }
|
font-size: 1.2727em; }
|
||||||
|
|
||||||
h6 {
|
h6 {
|
||||||
font-size: 1em; }
|
font-size: 1.090em; }
|
||||||
|
|
||||||
header {
|
header {
|
||||||
margin: 0 0 1em 0;
|
margin: 0 0 1em 0;
|
||||||
@@ -116,6 +118,9 @@ menu {
|
|||||||
list-style-type: none;
|
list-style-type: none;
|
||||||
display: inline; }
|
display: inline; }
|
||||||
|
|
||||||
|
p {
|
||||||
|
margin-bottom: 1em; }
|
||||||
|
|
||||||
section {
|
section {
|
||||||
display: block; }
|
display: block; }
|
||||||
|
|
||||||
@@ -208,17 +213,22 @@ body > header > h1 {
|
|||||||
font-size: 3em;
|
font-size: 3em;
|
||||||
font-family: Tahoma, Helvetica, sans-serif; }
|
font-family: Tahoma, Helvetica, sans-serif; }
|
||||||
|
|
||||||
|
/*** Dialog Boxes ***/
|
||||||
|
div.ui-dialog ul {
|
||||||
|
margin-left: 1em;
|
||||||
|
margin-bottom: 1em; }
|
||||||
|
|
||||||
/*** Simple Form ***/
|
/*** Simple Form ***/
|
||||||
form.simple_form {
|
form.simple_form {
|
||||||
margin: 1em 0; }
|
margin: 0 0 1em 0; }
|
||||||
form.simple_form div.input.boolean label {
|
form.simple_form div.input.boolean label {
|
||||||
display: inline; }
|
display: inline; }
|
||||||
form.simple_form div.input {
|
form.simple_form div.input {
|
||||||
margin-bottom: 1em; }
|
margin-bottom: 1em; }
|
||||||
form.simple_form div.input input[type=text], form.simple_form div.input input[type=file], form.simple_form div.input textarea {
|
form.simple_form div.input input[type=text], form.simple_form div.input input[type=file] {
|
||||||
width: 300px; }
|
width: 20em; }
|
||||||
form.simple_form div.input textarea {
|
form.simple_form div.input textarea {
|
||||||
height: 100px; }
|
width: 30em; }
|
||||||
form.simple_form div.input label {
|
form.simple_form div.input label {
|
||||||
display: block;
|
display: block;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
@@ -238,27 +248,21 @@ form.simple_form {
|
|||||||
margin-right: 2em; }
|
margin-right: 2em; }
|
||||||
|
|
||||||
/*** DText Preview ***/
|
/*** DText Preview ***/
|
||||||
div.dtext h1.preview-header {
|
div.dtext {
|
||||||
margin-bottom: 0.25em; }
|
width: 30em; }
|
||||||
div.dtext p {
|
div.dtext ul {
|
||||||
margin-bottom: 1em; }
|
margin-left: 1em; }
|
||||||
div.dtext ul {
|
|
||||||
margin-left: 1em; }
|
|
||||||
|
|
||||||
/*** Pools Posts ***/
|
/*** Pools Posts ***/
|
||||||
div#c-pools-posts div#a-new form {
|
div#c-pools-posts div#a-new form {
|
||||||
margin-bottom: 1em; }
|
margin-bottom: 1em; }
|
||||||
div#c-pools-posts div#a-new h1 {
|
|
||||||
font-size: 1.2em;
|
|
||||||
font-weight: bold; }
|
|
||||||
div#c-pools-posts div#a-new li {
|
div#c-pools-posts div#a-new li {
|
||||||
margin-left: 1em;
|
margin-left: 1em;
|
||||||
cursor: pointer; }
|
cursor: pointer; }
|
||||||
|
|
||||||
/*** Pools ***/
|
/*** Pools ***/
|
||||||
div#c-pools div#a-edit p {
|
div#c-pools div#a-edit p {
|
||||||
margin-bottom: 1em;
|
width: 30em; }
|
||||||
width: 40em; }
|
|
||||||
div#c-pools div#a-edit ul.ui-sortable {
|
div#c-pools div#a-edit ul.ui-sortable {
|
||||||
list-style-type: none; }
|
list-style-type: none; }
|
||||||
div#c-pools div#a-edit ul.ui-sortable span {
|
div#c-pools div#a-edit ul.ui-sortable span {
|
||||||
@@ -283,11 +287,9 @@ div.comments-for-post div.list-of-comments article {
|
|||||||
div.comments-for-post div.list-of-comments article div.author {
|
div.comments-for-post div.list-of-comments article div.author {
|
||||||
width: 20%;
|
width: 20%;
|
||||||
float: left; }
|
float: left; }
|
||||||
div.comments-for-post div.list-of-comments article div.author h1 {
|
|
||||||
font-size: 1.5em; }
|
|
||||||
div.comments-for-post div.list-of-comments article div.content {
|
div.comments-for-post div.list-of-comments article div.content {
|
||||||
margin-left: 2em;
|
margin-left: 2em;
|
||||||
width: 40em;
|
width: 30em;
|
||||||
float: left; }
|
float: left; }
|
||||||
div.comments-for-post div.comment-preview {
|
div.comments-for-post div.comment-preview {
|
||||||
margin-bottom: 2em; }
|
margin-bottom: 2em; }
|
||||||
@@ -296,7 +298,7 @@ div.dtext-preview {
|
|||||||
border: 2px dashed #AAA;
|
border: 2px dashed #AAA;
|
||||||
padding: 1em;
|
padding: 1em;
|
||||||
margin: 1em;
|
margin: 1em;
|
||||||
width: 40em; }
|
width: 30em; }
|
||||||
|
|
||||||
div#c-comments div#a-index div.header span.info {
|
div#c-comments div#a-index div.header span.info {
|
||||||
margin-right: 1.5em; }
|
margin-right: 1.5em; }
|
||||||
@@ -316,8 +318,6 @@ div#c-comments div#a-index div.post {
|
|||||||
div#c-comments div#a-index div.post div.comments-for-post {
|
div#c-comments div#a-index div.post div.comments-for-post {
|
||||||
float: left;
|
float: left;
|
||||||
width: 55em; }
|
width: 55em; }
|
||||||
div#c-comments div#a-index div.post div.comments-for-post h1 {
|
|
||||||
font-size: 1.2em; }
|
|
||||||
|
|
||||||
/*** Favorites ***/
|
/*** Favorites ***/
|
||||||
div#c-favorites section#content > h1 {
|
div#c-favorites section#content > h1 {
|
||||||
@@ -329,10 +329,6 @@ article.post-preview {
|
|||||||
margin-bottom: 4em;
|
margin-bottom: 4em;
|
||||||
float: left; }
|
float: left; }
|
||||||
|
|
||||||
div#c-posts h1 {
|
|
||||||
font-size: 1.2em; }
|
|
||||||
div#c-posts h2 {
|
|
||||||
font-size: 1.1em; }
|
|
||||||
div#c-posts aside#sidebar > section#pool-sidebar span.ui-icon {
|
div#c-posts aside#sidebar > section#pool-sidebar span.ui-icon {
|
||||||
float: left;
|
float: left;
|
||||||
margin-right: 0.25em;
|
margin-right: 0.25em;
|
||||||
@@ -347,8 +343,6 @@ div#c-posts section#tag-and-wiki-box {
|
|||||||
display: inline-block; }
|
display: inline-block; }
|
||||||
div#c-posts section#tag-and-wiki-box menu li.active a {
|
div#c-posts section#tag-and-wiki-box menu li.active a {
|
||||||
color: #000; }
|
color: #000; }
|
||||||
div#c-posts section#tag-and-wiki-box h1 {
|
|
||||||
font-size: 1.2em; }
|
|
||||||
div#c-posts section#tag-and-wiki-box div#tag-box h2 {
|
div#c-posts section#tag-and-wiki-box div#tag-box h2 {
|
||||||
display: none; }
|
display: none; }
|
||||||
div#c-posts section#tag-and-wiki-box div#tag-box li {
|
div#c-posts section#tag-and-wiki-box div#tag-box li {
|
||||||
@@ -412,26 +406,20 @@ div#c-artists span.new-artist {
|
|||||||
color: #A00; }
|
color: #A00; }
|
||||||
div#c-artists div#a-show {
|
div#c-artists div#a-show {
|
||||||
max-width: 60em; }
|
max-width: 60em; }
|
||||||
div#c-artists div#a-show h1 {
|
|
||||||
font-size: 1.5em;
|
|
||||||
margin-bottom: 5px; }
|
|
||||||
div#c-artists div#a-show p.legend {
|
div#c-artists div#a-show p.legend {
|
||||||
margin-bottom: 2em;
|
margin-bottom: 2em;
|
||||||
font-size: 0.8em;
|
font-size: 0.8em;
|
||||||
font-style: italic; }
|
font-style: italic; }
|
||||||
|
div#c-artists div#a-edit textarea, div#c-artists div#a-new textarea {
|
||||||
|
height: 5em; }
|
||||||
|
|
||||||
/*** Users ***/
|
/*** Users ***/
|
||||||
div.users div.new {
|
div.users div.new {
|
||||||
max-width: 60em; }
|
max-width: 60em; }
|
||||||
div.users div.new h1 {
|
|
||||||
margin-bottom: 0.5em; }
|
|
||||||
div.users div.new p {
|
div.users div.new p {
|
||||||
margin-bottom: 1em; }
|
margin-bottom: 1em; }
|
||||||
div.users div.new li {
|
div.users div.new li {
|
||||||
margin-left: 1em; }
|
margin-left: 1em; }
|
||||||
div.users div.new div#account-comparison h1 {
|
|
||||||
font-size: 1.4em;
|
|
||||||
margin-bottom: 3px; }
|
|
||||||
div.users div.new div#account-comparison li {
|
div.users div.new div#account-comparison li {
|
||||||
font-size: 0.9em;
|
font-size: 0.9em;
|
||||||
line-height: 1.5em; }
|
line-height: 1.5em; }
|
||||||
@@ -440,7 +428,7 @@ div.users div.new {
|
|||||||
float: left;
|
float: left;
|
||||||
padding: 1em; }
|
padding: 1em; }
|
||||||
div.users div.new footer.nav-links {
|
div.users div.new footer.nav-links {
|
||||||
font-size: 1.5em;
|
font-size: 1.4545em;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
display: block; }
|
display: block; }
|
||||||
@@ -459,11 +447,9 @@ div.list-of-forum-posts article {
|
|||||||
div.list-of-forum-posts article div.author {
|
div.list-of-forum-posts article div.author {
|
||||||
width: 20%;
|
width: 20%;
|
||||||
float: left; }
|
float: left; }
|
||||||
div.list-of-forum-posts article div.author h1 {
|
|
||||||
font-size: 1.5em; }
|
|
||||||
div.list-of-forum-posts article div.content {
|
div.list-of-forum-posts article div.content {
|
||||||
margin-left: 2em;
|
margin-left: 2em;
|
||||||
width: 40em;
|
width: 30em;
|
||||||
float: left; }
|
float: left; }
|
||||||
div.list-of-forum-posts article div.content menu {
|
div.list-of-forum-posts article div.content menu {
|
||||||
margin-top: 0.5em; }
|
margin-top: 0.5em; }
|
||||||
@@ -471,12 +457,9 @@ div.list-of-forum-posts article {
|
|||||||
div#c-forum-topics div.single-forum-post {
|
div#c-forum-topics div.single-forum-post {
|
||||||
width: 60em; }
|
width: 60em; }
|
||||||
div#c-forum-topics div#a-show h1#forum-topic-title {
|
div#c-forum-topics div#a-show h1#forum-topic-title {
|
||||||
font-size: 2em; }
|
font-size: 2.1818em; }
|
||||||
div#c-forum-topics span.info {
|
div#c-forum-topics span.info {
|
||||||
color: #AAA; }
|
color: #AAA; }
|
||||||
div#c-forum-topics textarea {
|
|
||||||
width: 400px;
|
|
||||||
height: 40em; }
|
|
||||||
div#c-forum-topics div#form-content {
|
div#c-forum-topics div#form-content {
|
||||||
float: left;
|
float: left;
|
||||||
width: 450px;
|
width: 450px;
|
||||||
@@ -494,18 +477,15 @@ div#c-wiki-pages span.version {
|
|||||||
color: #AAA; }
|
color: #AAA; }
|
||||||
div#c-wiki-pages div#form-content {
|
div#c-wiki-pages div#form-content {
|
||||||
float: left;
|
float: left;
|
||||||
width: 450px;
|
width: 30em;
|
||||||
padding-right: 1em; }
|
padding-right: 1em; }
|
||||||
div#c-wiki-pages div#form-aside {
|
div#c-wiki-pages div#form-aside {
|
||||||
float: left;
|
float: left;
|
||||||
width: 400px; }
|
width: 20em; }
|
||||||
div#c-wiki-pages div#form-aside div#preview > p {
|
div#c-wiki-pages div#form-aside div#preview > p {
|
||||||
margin-top: 0.5em;
|
margin-top: 0.5em;
|
||||||
padding-top: 0.5em;
|
padding-top: 0.5em;
|
||||||
border-top: 1px solid #AAA; }
|
border-top: 1px solid #AAA; }
|
||||||
div#c-wiki-pages div#a-edit textarea, div#c-wiki-pages div#a-new textarea {
|
|
||||||
width: 400px;
|
|
||||||
height: 40em; }
|
|
||||||
|
|
||||||
/*** Post Moderation ***/
|
/*** Post Moderation ***/
|
||||||
div#c-post-moderation article {
|
div#c-post-moderation article {
|
||||||
|
|||||||
@@ -5,22 +5,25 @@ $link_hover_color: #9093FF;
|
|||||||
display: none !important;
|
display: none !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
body, div, h1, h2, h3, h4, h5, h6, p, ul, li, dd, dt {
|
body, div, h1, h2, h3, h4, h5, h6, p, ul, li, dd, dt, header, aside {
|
||||||
font-family: Verdana, Geneva, sans-serif;
|
font-family: Verdana, Geneva, sans-serif;
|
||||||
font-size: 100%;
|
line-height: 1.25em;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
border: 0;
|
border: 0;
|
||||||
vertical-align: baseline;
|
vertical-align: baseline;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
font-size: 87.5%;
|
||||||
|
}
|
||||||
|
|
||||||
h1, h2, h3, h4 {
|
h1, h2, h3, h4 {
|
||||||
font-family: Tahoma;
|
font-family: Tahoma;
|
||||||
line-height: 1em;
|
line-height: 1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
body {
|
body {
|
||||||
font-size: 80%;
|
|
||||||
padding: 1em 2em;
|
padding: 1em 2em;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
@@ -74,27 +77,27 @@ dt {
|
|||||||
}
|
}
|
||||||
|
|
||||||
h1 {
|
h1 {
|
||||||
font-size: 2em;
|
font-size: 2.1818em;
|
||||||
}
|
}
|
||||||
|
|
||||||
h2 {
|
h2 {
|
||||||
font-size: 1.8em;
|
font-size: 1.9091em;
|
||||||
}
|
}
|
||||||
|
|
||||||
h3 {
|
h3 {
|
||||||
font-size: 1.6em;
|
font-size: 1.6364em;
|
||||||
}
|
}
|
||||||
|
|
||||||
h4 {
|
h4 {
|
||||||
font-size: 1.4em;
|
font-size: 1.4545em;
|
||||||
}
|
}
|
||||||
|
|
||||||
h5 {
|
h5 {
|
||||||
font-size: 1.2em;
|
font-size: 1.2727em;
|
||||||
}
|
}
|
||||||
|
|
||||||
h6 {
|
h6 {
|
||||||
font-size: 1em;
|
font-size: 1.090em;
|
||||||
}
|
}
|
||||||
|
|
||||||
header {
|
header {
|
||||||
@@ -150,6 +153,10 @@ menu {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
margin-bottom: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
section {
|
section {
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
@@ -292,9 +299,18 @@ body > header > h1 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*** Dialog Boxes ***/
|
||||||
|
div.ui-dialog {
|
||||||
|
ul {
|
||||||
|
margin-left: 1em;
|
||||||
|
margin-bottom: 1em;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*** Simple Form ***/
|
/*** Simple Form ***/
|
||||||
form.simple_form {
|
form.simple_form {
|
||||||
margin: 1em 0;
|
margin: 0 0 1em 0;
|
||||||
|
|
||||||
div.input.boolean {
|
div.input.boolean {
|
||||||
label {
|
label {
|
||||||
@@ -305,12 +321,12 @@ form.simple_form {
|
|||||||
div.input {
|
div.input {
|
||||||
margin-bottom: 1em;
|
margin-bottom: 1em;
|
||||||
|
|
||||||
input[type=text], input[type=file], textarea {
|
input[type=text], input[type=file] {
|
||||||
width: 300px;
|
width: 20em;
|
||||||
}
|
}
|
||||||
|
|
||||||
textarea {
|
textarea {
|
||||||
height: 100px;
|
width: 30em;
|
||||||
}
|
}
|
||||||
|
|
||||||
label {
|
label {
|
||||||
@@ -344,14 +360,8 @@ form.simple_form {
|
|||||||
/*** DText Preview ***/
|
/*** DText Preview ***/
|
||||||
|
|
||||||
div.dtext {
|
div.dtext {
|
||||||
h1.preview-header {
|
width: 30em;
|
||||||
margin-bottom: 0.25em;
|
|
||||||
}
|
|
||||||
|
|
||||||
p {
|
|
||||||
margin-bottom: 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
ul {
|
ul {
|
||||||
margin-left: 1em;
|
margin-left: 1em;
|
||||||
}
|
}
|
||||||
@@ -366,11 +376,6 @@ div#c-pools-posts {
|
|||||||
margin-bottom: 1em;
|
margin-bottom: 1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
h1 {
|
|
||||||
font-size: 1.2em;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
li {
|
li {
|
||||||
margin-left: 1em;
|
margin-left: 1em;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
@@ -385,8 +390,7 @@ div#c-pools-posts {
|
|||||||
div#c-pools {
|
div#c-pools {
|
||||||
div#a-edit {
|
div#a-edit {
|
||||||
p {
|
p {
|
||||||
margin-bottom: 1em;
|
width: 30em;
|
||||||
width: 40em;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ul.ui-sortable {
|
ul.ui-sortable {
|
||||||
@@ -429,15 +433,11 @@ div.comments-for-post {
|
|||||||
div.author {
|
div.author {
|
||||||
width: 20%;
|
width: 20%;
|
||||||
float: left;
|
float: left;
|
||||||
|
|
||||||
h1 {
|
|
||||||
font-size: 1.5em;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
div.content {
|
div.content {
|
||||||
margin-left: 2em;
|
margin-left: 2em;
|
||||||
width: 40em;
|
width: 30em;
|
||||||
float: left;
|
float: left;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -452,7 +452,7 @@ div.dtext-preview {
|
|||||||
border: 2px dashed #AAA;
|
border: 2px dashed #AAA;
|
||||||
padding: 1em;
|
padding: 1em;
|
||||||
margin: 1em;
|
margin: 1em;
|
||||||
width: 40em;
|
width: 30em;
|
||||||
}
|
}
|
||||||
|
|
||||||
div#c-comments {
|
div#c-comments {
|
||||||
@@ -492,10 +492,6 @@ div#c-comments {
|
|||||||
div.comments-for-post {
|
div.comments-for-post {
|
||||||
float: left;
|
float: left;
|
||||||
width: 55em;
|
width: 55em;
|
||||||
|
|
||||||
h1 {
|
|
||||||
font-size: 1.2em;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -519,14 +515,6 @@ article.post-preview {
|
|||||||
}
|
}
|
||||||
|
|
||||||
div#c-posts {
|
div#c-posts {
|
||||||
h1 {
|
|
||||||
font-size: 1.2em;
|
|
||||||
}
|
|
||||||
|
|
||||||
h2 {
|
|
||||||
font-size: 1.1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
aside#sidebar > section#pool-sidebar {
|
aside#sidebar > section#pool-sidebar {
|
||||||
span.ui-icon {
|
span.ui-icon {
|
||||||
float: left;
|
float: left;
|
||||||
@@ -556,10 +544,6 @@ div#c-posts {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
h1 {
|
|
||||||
font-size: 1.2em;
|
|
||||||
}
|
|
||||||
|
|
||||||
div#tag-box {
|
div#tag-box {
|
||||||
h2 {
|
h2 {
|
||||||
display: none;
|
display: none;
|
||||||
@@ -689,17 +673,18 @@ div#c-artists {
|
|||||||
div#a-show {
|
div#a-show {
|
||||||
max-width: 60em;
|
max-width: 60em;
|
||||||
|
|
||||||
h1 {
|
|
||||||
font-size: 1.5em;
|
|
||||||
margin-bottom: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
p.legend {
|
p.legend {
|
||||||
margin-bottom: 2em;
|
margin-bottom: 2em;
|
||||||
font-size: 0.8em;
|
font-size: 0.8em;
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
div#a-edit, div#a-new {
|
||||||
|
textarea {
|
||||||
|
height: 5em;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -708,10 +693,6 @@ div.users {
|
|||||||
div.new {
|
div.new {
|
||||||
max-width: 60em;
|
max-width: 60em;
|
||||||
|
|
||||||
h1 {
|
|
||||||
margin-bottom: 0.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
p {
|
p {
|
||||||
margin-bottom: 1em;
|
margin-bottom: 1em;
|
||||||
}
|
}
|
||||||
@@ -721,11 +702,6 @@ div.users {
|
|||||||
}
|
}
|
||||||
|
|
||||||
div#account-comparison {
|
div#account-comparison {
|
||||||
h1 {
|
|
||||||
font-size: 1.4em;
|
|
||||||
margin-bottom: 3px;
|
|
||||||
}
|
|
||||||
|
|
||||||
li {
|
li {
|
||||||
font-size: 0.9em;
|
font-size: 0.9em;
|
||||||
line-height: 1.5em;
|
line-height: 1.5em;
|
||||||
@@ -739,7 +715,7 @@ div.users {
|
|||||||
}
|
}
|
||||||
|
|
||||||
footer.nav-links {
|
footer.nav-links {
|
||||||
font-size: 1.5em;
|
font-size: 1.4545em;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
display: block;
|
display: block;
|
||||||
@@ -776,15 +752,11 @@ div.list-of-forum-posts {
|
|||||||
div.author {
|
div.author {
|
||||||
width: 20%;
|
width: 20%;
|
||||||
float: left;
|
float: left;
|
||||||
|
|
||||||
h1 {
|
|
||||||
font-size: 1.5em;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
div.content {
|
div.content {
|
||||||
margin-left: 2em;
|
margin-left: 2em;
|
||||||
width: 40em;
|
width: 30em;
|
||||||
float: left;
|
float: left;
|
||||||
|
|
||||||
menu {
|
menu {
|
||||||
@@ -801,7 +773,7 @@ div#c-forum-topics {
|
|||||||
|
|
||||||
div#a-show {
|
div#a-show {
|
||||||
h1#forum-topic-title {
|
h1#forum-topic-title {
|
||||||
font-size: 2em;
|
font-size: 2.1818em;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -809,11 +781,6 @@ div#c-forum-topics {
|
|||||||
color: #AAA;
|
color: #AAA;
|
||||||
}
|
}
|
||||||
|
|
||||||
textarea {
|
|
||||||
width: 400px;
|
|
||||||
height: 40em;
|
|
||||||
}
|
|
||||||
|
|
||||||
div#form-content {
|
div#form-content {
|
||||||
float: left;
|
float: left;
|
||||||
width: 450px;
|
width: 450px;
|
||||||
@@ -842,13 +809,13 @@ div#c-wiki-pages {
|
|||||||
|
|
||||||
div#form-content {
|
div#form-content {
|
||||||
float: left;
|
float: left;
|
||||||
width: 450px;
|
width: 30em;
|
||||||
padding-right: 1em;
|
padding-right: 1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
div#form-aside {
|
div#form-aside {
|
||||||
float: left;
|
float: left;
|
||||||
width: 400px;
|
width: 20em;
|
||||||
|
|
||||||
div#preview > p {
|
div#preview > p {
|
||||||
margin-top: 0.5em;
|
margin-top: 0.5em;
|
||||||
@@ -856,13 +823,8 @@ div#c-wiki-pages {
|
|||||||
border-top: 1px solid #AAA;
|
border-top: 1px solid #AAA;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
div#a-edit, div#a-new {
|
div#a-edit, div#a-new {
|
||||||
textarea {
|
|
||||||
width: 400px;
|
|
||||||
height: 40em;
|
|
||||||
}
|
|
||||||
|
|
||||||
div#preview {
|
div#preview {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,8 @@ cat public/javascripts/src/app/comments.js >> public/javascripts/compiled/defaul
|
|||||||
cat public/javascripts/src/app/uploads.js >> public/javascripts/compiled/default.js
|
cat public/javascripts/src/app/uploads.js >> public/javascripts/compiled/default.js
|
||||||
cat public/javascripts/src/app/users.js >> public/javascripts/compiled/default.js
|
cat public/javascripts/src/app/users.js >> public/javascripts/compiled/default.js
|
||||||
cat public/javascripts/src/app/favorites.js >> public/javascripts/compiled/default.js
|
cat public/javascripts/src/app/favorites.js >> public/javascripts/compiled/default.js
|
||||||
cat public/javascripts/src/app/unapprovals.js >> public/javascripts/compiled/default.js
|
cat public/javascripts/src/app/post_flags.js >> public/javascripts/compiled/default.js
|
||||||
|
cat public/javascripts/src/app/post_appeals.js >> public/javascripts/compiled/default.js
|
||||||
cat public/javascripts/src/app/post_moderation.js >> public/javascripts/compiled/default.js
|
cat public/javascripts/src/app/post_moderation.js >> public/javascripts/compiled/default.js
|
||||||
cat public/javascripts/src/app/pools.js >> public/javascripts/compiled/default.js
|
cat public/javascripts/src/app/pools.js >> public/javascripts/compiled/default.js
|
||||||
cat public/javascripts/src/app/wiki_pages.js >> public/javascripts/compiled/default.js
|
cat public/javascripts/src/app/wiki_pages.js >> public/javascripts/compiled/default.js
|
||||||
|
|||||||
11
test/fixtures/post_appeals.yml
vendored
Normal file
11
test/fixtures/post_appeals.yml
vendored
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
|
||||||
|
|
||||||
|
# This model initially had no columns defined. If you add columns to the
|
||||||
|
# model remove the '{}' from the fixture names and add the columns immediately
|
||||||
|
# below each fixture, per the syntax in the comments below
|
||||||
|
#
|
||||||
|
one: {}
|
||||||
|
# column: value
|
||||||
|
#
|
||||||
|
two: {}
|
||||||
|
# column: value
|
||||||
11
test/fixtures/post_flags.yml
vendored
Normal file
11
test/fixtures/post_flags.yml
vendored
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
|
||||||
|
|
||||||
|
# This model initially had no columns defined. If you add columns to the
|
||||||
|
# model remove the '{}' from the fixture names and add the columns immediately
|
||||||
|
# below each fixture, per the syntax in the comments below
|
||||||
|
#
|
||||||
|
one: {}
|
||||||
|
# column: value
|
||||||
|
#
|
||||||
|
two: {}
|
||||||
|
# column: value
|
||||||
8
test/unit/post_appeal_test.rb
Normal file
8
test/unit/post_appeal_test.rb
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
require 'test_helper'
|
||||||
|
|
||||||
|
class PostAppealTest < ActiveSupport::TestCase
|
||||||
|
# Replace this with your real tests.
|
||||||
|
test "the truth" do
|
||||||
|
assert true
|
||||||
|
end
|
||||||
|
end
|
||||||
8
test/unit/post_flag_test.rb
Normal file
8
test/unit/post_flag_test.rb
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
require 'test_helper'
|
||||||
|
|
||||||
|
class PostFlagTest < ActiveSupport::TestCase
|
||||||
|
# Replace this with your real tests.
|
||||||
|
test "the truth" do
|
||||||
|
assert true
|
||||||
|
end
|
||||||
|
end
|
||||||
Reference in New Issue
Block a user