mirror of
https://github.com/codeninjasllc/discourse.git
synced 2024-11-23 23:58:31 -05:00
Allow importing Discourse styles in custom stylesheets to modify vars.
This commit is contained in:
parent
a3f270f0e9
commit
ddd1dfe896
58 changed files with 66 additions and 176 deletions
|
@ -1,17 +0,0 @@
|
|||
// Manifest
|
||||
//
|
||||
|
||||
//= require ./vendor/normalize
|
||||
//= require ./common/foundation/base
|
||||
//= require ./vendor/font_awesome/font-awesome
|
||||
//= require ./vendor/chosen
|
||||
//= require_tree ./common/components
|
||||
//= require ./common/foundation/helpers
|
||||
//= require_tree ./common
|
||||
<%
|
||||
# TODO this is very tricky, we want to add a dependency here on files that may not yet exist
|
||||
# otherwise in dev we are often stuck nuking the tmp/cache directory
|
||||
DiscoursePluginRegistry.stylesheets.each do |css|
|
||||
require_asset(css)
|
||||
end
|
||||
%>
|
10
app/assets/stylesheets/common.scss
Normal file
10
app/assets/stylesheets/common.scss
Normal file
|
@ -0,0 +1,10 @@
|
|||
@import "vendor/normalize";
|
||||
@import "common/foundation/base";
|
||||
@import "vendor/font_awesome/font-awesome";
|
||||
@import "vendor/chosen";
|
||||
@import "common/foundation/helpers";
|
||||
@import "common/foundation/mixins";
|
||||
@import "common/foundation/variables";
|
||||
@import "common/components/*";
|
||||
@import "common/admin/*";
|
||||
@import "common/input_tip";
|
|
@ -1,6 +1,3 @@
|
|||
@import "common/foundation/variables";
|
||||
@import "common/foundation/mixins";
|
||||
|
||||
// --------------------------------------------------
|
||||
// Badges
|
||||
// --------------------------------------------------
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
@import "common/foundation/variables";
|
||||
@import "common/foundation/mixins";
|
||||
|
||||
// --------------------------------------------------
|
||||
// Buttons
|
||||
// --------------------------------------------------
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
@import "../foundation/variables";
|
||||
|
||||
.topic-list-item td:first-child, .topic-post {
|
||||
background-color: inherit;
|
||||
border-left: 1px solid transparent;
|
||||
|
|
|
@ -1,7 +1,3 @@
|
|||
@import "common/foundation/variables";
|
||||
@import "common/foundation/mixins";
|
||||
@import "common/foundation/helpers";
|
||||
|
||||
// --------------------------------------------------
|
||||
// Navigation menus
|
||||
// --------------------------------------------------
|
||||
|
|
|
@ -27,4 +27,4 @@
|
|||
.close:hover {
|
||||
opacity: 1.0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
// Manifest
|
||||
//
|
||||
//= require common
|
||||
|
||||
//= require_tree ./desktop
|
2
app/assets/stylesheets/desktop.scss
Normal file
2
app/assets/stylesheets/desktop.scss
Normal file
|
@ -0,0 +1,2 @@
|
|||
@import "common";
|
||||
@import "desktop/*";
|
|
@ -1,9 +1,6 @@
|
|||
// Styles used before the user is logged into discourse. For example, activating their
|
||||
// account or changing their email.
|
||||
|
||||
@import "common/foundation/variables";
|
||||
@import "common/foundation/mixins";
|
||||
|
||||
#simple-container {
|
||||
@include border-radius-all(10px);
|
||||
background-color: $primary_background_color;
|
||||
|
|
|
@ -1,8 +1,5 @@
|
|||
// styles for the category badge color picker
|
||||
|
||||
@import "../common/foundation/variables";
|
||||
@import "../common/foundation/mixins";
|
||||
|
||||
.category-color-editor {
|
||||
input {
|
||||
width: 70px;
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
@import "../common/foundation/variables";
|
||||
|
||||
|
||||
.category-combobox {
|
||||
.badge-category {
|
||||
display: inline-block;
|
||||
|
@ -17,4 +14,4 @@
|
|||
margin: 6px 0 0 3px;
|
||||
font-size: 12px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,8 +1,5 @@
|
|||
// styles that apply to the reply pane that slides up to compose replies
|
||||
|
||||
@import "common/foundation/variables";
|
||||
@import "common/foundation/mixins";
|
||||
|
||||
// hack, this needs to be done cleaner
|
||||
#private-message-users {
|
||||
width: 400px;
|
||||
|
|
|
@ -2,11 +2,6 @@
|
|||
// BEWARE: changing these styles implies they take effect anywhere they are seen
|
||||
// throughout the Discourse application
|
||||
|
||||
@import "common/foundation/variables";
|
||||
@import "common/foundation/mixins";
|
||||
@import "common/foundation/helpers";
|
||||
|
||||
|
||||
html {font-size: 14px/19px;}
|
||||
|
||||
body {
|
||||
|
|
|
@ -1,7 +1,3 @@
|
|||
@import "common/foundation/variables";
|
||||
@import "common/foundation/mixins";
|
||||
@import "common/foundation/helpers";
|
||||
|
||||
// --------------------------------------------------
|
||||
// FAQs
|
||||
// --------------------------------------------------
|
||||
|
@ -58,4 +54,4 @@
|
|||
.nav-pills {
|
||||
margin-left:0px !important;
|
||||
font: 13px/18px "Helvetica Neue",Helvetica,Arial,sans-serif;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
@import "common/foundation/variables";
|
||||
@import "common/foundation/mixins";
|
||||
|
||||
// --------------------------------------------------
|
||||
// Discourse header
|
||||
// --------------------------------------------------
|
||||
|
|
|
@ -1,8 +1,5 @@
|
|||
// styles that apply to the popup that appears when you show the edit history of a post
|
||||
|
||||
@import "common/foundation/variables";
|
||||
@import "common/foundation/mixins";
|
||||
|
||||
.modal.history-modal {
|
||||
.modal-inner-container {
|
||||
min-width: 960px;
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
@import "common/foundation/variables";
|
||||
@import "common/foundation/mixins";
|
||||
|
||||
.lightbox {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
|
|
|
@ -1,8 +1,5 @@
|
|||
// style that apply to the login popup
|
||||
|
||||
@import "common/foundation/variables";
|
||||
@import "common/foundation/mixins";
|
||||
|
||||
#login-buttons {
|
||||
button {
|
||||
margin: 0 5px 5px 0;
|
||||
|
@ -63,4 +60,4 @@
|
|||
.tos-agree {
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,8 +1,5 @@
|
|||
// base styles for every modal popup used in Discourse
|
||||
|
||||
@import "common/foundation/variables";
|
||||
@import "common/foundation/mixins";
|
||||
|
||||
.modal-open {
|
||||
.dropdown-menu {
|
||||
z-index: 2050;
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
@import "common/foundation/variables";
|
||||
@import "common/foundation/mixins";
|
||||
|
||||
a.loading-onebox {
|
||||
background: {
|
||||
image: image-url("spinner_96.gif");
|
||||
|
|
|
@ -1,8 +1,5 @@
|
|||
// styles that apply to the PageDown editor
|
||||
// http://code.google.com/p/pagedown/
|
||||
@import "common/foundation/variables";
|
||||
|
||||
@import "common/foundation/mixins";
|
||||
|
||||
.wmd-panel {
|
||||
margin-left: 25%;
|
||||
|
|
|
@ -1,8 +1,5 @@
|
|||
// styles that apply to the "share" popup when sharing a link to a post or topic
|
||||
|
||||
@import "common/foundation/variables";
|
||||
@import "common/foundation/mixins";
|
||||
|
||||
#poster-expansion {
|
||||
position: absolute;
|
||||
width: 460px;
|
||||
|
|
|
@ -1,8 +1,5 @@
|
|||
// styles that apply to the "share" popup when sharing a link to a post or topic
|
||||
|
||||
@import "common/foundation/variables";
|
||||
@import "common/foundation/mixins";
|
||||
|
||||
#share-link {
|
||||
position: absolute;
|
||||
left: 20px;
|
||||
|
|
|
@ -1,8 +1,5 @@
|
|||
// Styles for the topic admin menu
|
||||
|
||||
@import "common/foundation/variables";
|
||||
@import "common/foundation/mixins";
|
||||
|
||||
#show-topic-admin {
|
||||
position: fixed;
|
||||
top: 70px;
|
||||
|
@ -29,4 +26,4 @@
|
|||
width: 200px;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
@import "common/foundation/variables";
|
||||
@import "common/foundation/mixins";
|
||||
|
||||
// --------------------------------------------------
|
||||
// Topic lists
|
||||
// --------------------------------------------------
|
||||
|
|
|
@ -1,7 +1,3 @@
|
|||
@import "common/foundation/variables";
|
||||
@import "common/foundation/mixins";
|
||||
@import "common/foundation/helpers";
|
||||
|
||||
.gap {
|
||||
background-color: lighten($secondary_background_color, 76%);
|
||||
padding: 5px 0;
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
@import "common/foundation/variables";
|
||||
@import "common/foundation/mixins";
|
||||
|
||||
.post-info a {
|
||||
color: lighten($primary_text_color, 50%);
|
||||
padding-right: 5px;
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
@import "common/foundation/variables";
|
||||
@import "common/foundation/mixins";
|
||||
|
||||
.add-upload .fa-plus {
|
||||
font-size: 10px;
|
||||
position: relative;
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
// styles that apply to the user page
|
||||
@import "common/foundation/variables";
|
||||
@import "common/foundation/mixins";
|
||||
|
||||
.groups {
|
||||
.group-link {
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
// Manifest
|
||||
//
|
||||
//= require common
|
||||
//= require_tree ./mobile
|
2
app/assets/stylesheets/mobile.scss
Normal file
2
app/assets/stylesheets/mobile.scss
Normal file
|
@ -0,0 +1,2 @@
|
|||
@import "common";
|
||||
@import "mobile/*";
|
|
@ -1,9 +1,6 @@
|
|||
// Styles used before the user is logged into discourse. For example, activating their
|
||||
// account or changing their email.
|
||||
|
||||
@import "../common/foundation/variables";
|
||||
@import "../common/foundation/mixins";
|
||||
|
||||
#simple-container {
|
||||
@include border-radius-all(10px);
|
||||
background-color: $primary_background_color;
|
||||
|
|
|
@ -1,8 +1,5 @@
|
|||
// styles for the category badge color picker
|
||||
|
||||
@import "../common/foundation/variables";
|
||||
@import "../common/foundation/mixins";
|
||||
|
||||
.category-color-editor {
|
||||
input {
|
||||
width: 70px;
|
||||
|
|
|
@ -1,8 +1,5 @@
|
|||
// styles that apply to the reply pane that slides up to compose replies
|
||||
|
||||
@import "../common/foundation/variables";
|
||||
@import "../common/foundation/mixins";
|
||||
|
||||
// hack, this needs to be done cleaner
|
||||
.private-message input.span8 {
|
||||
width: 47%;
|
||||
|
|
|
@ -2,10 +2,6 @@
|
|||
// BEWARE: changing these styles implies they take effect anywhere they are seen
|
||||
// throughout the Discourse application
|
||||
|
||||
@import "../common/foundation/variables";
|
||||
@import "../common/foundation/mixins";
|
||||
@import "../common/foundation/helpers";
|
||||
|
||||
body {
|
||||
background-color: $primary_background_color;
|
||||
}
|
||||
|
|
|
@ -1,7 +1,3 @@
|
|||
@import "../common/foundation/variables";
|
||||
@import "../common/foundation/mixins";
|
||||
@import "../common/foundation/helpers";
|
||||
|
||||
// --------------------------------------------------
|
||||
// FAQs
|
||||
// --------------------------------------------------
|
||||
|
@ -59,4 +55,4 @@
|
|||
.nav-pills {
|
||||
// margin-left:0px !important; this style affects everything, and it has !important! yuck.
|
||||
font: 13px/18px "Helvetica Neue",Helvetica,Arial,sans-serif;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
@import "../common/foundation/variables";
|
||||
@import "../common/foundation/mixins";
|
||||
|
||||
// --------------------------------------------------
|
||||
// Discourse header
|
||||
// --------------------------------------------------
|
||||
|
|
|
@ -1,8 +1,5 @@
|
|||
// styles that apply to the popup that appears when you show the edit history of a post
|
||||
|
||||
@import "common/foundation/variables";
|
||||
@import "common/foundation/mixins";
|
||||
|
||||
.modal.history-modal {
|
||||
.modal-inner-container {
|
||||
min-width: 960px;
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
@import "../common/foundation/variables";
|
||||
@import "../common/foundation/mixins";
|
||||
|
||||
.lightbox {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
|
|
|
@ -1,8 +1,5 @@
|
|||
// style that apply to the login popup
|
||||
|
||||
@import "../common/foundation/variables";
|
||||
@import "../common/foundation/mixins";
|
||||
|
||||
.btn-social {
|
||||
width: 250px;
|
||||
font-size: 16px;
|
||||
|
|
|
@ -1,8 +1,5 @@
|
|||
// base styles for every modal popup used in Discourse
|
||||
|
||||
@import "../common/foundation/variables";
|
||||
@import "../common/foundation/mixins";
|
||||
|
||||
.modal-open {
|
||||
.dropdown-menu {
|
||||
z-index: 2050;
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
@import "../common/foundation/variables";
|
||||
@import "../common/foundation/mixins";
|
||||
|
||||
a.loading-onebox {
|
||||
background: {
|
||||
image: image-url("spinner_96.gif");
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
// styles that apply to the PageDown editor
|
||||
// http://code.google.com/p/pagedown/
|
||||
|
||||
@import "../common/foundation/mixins";
|
||||
|
||||
.wmd-panel {
|
||||
margin-left: 25%;
|
||||
margin-right: 25%;
|
||||
|
|
|
@ -1,8 +1,5 @@
|
|||
// styles that apply to the "share" popup when sharing a link to a post or topic
|
||||
|
||||
@import "../common/foundation/variables";
|
||||
@import "../common/foundation/mixins";
|
||||
|
||||
#share-link {
|
||||
position: absolute;
|
||||
left: 20px;
|
||||
|
|
|
@ -1,8 +1,5 @@
|
|||
// Styles for the topic admin menu
|
||||
|
||||
@import "../common/foundation/variables";
|
||||
@import "../common/foundation/mixins";
|
||||
|
||||
#show-topic-admin {
|
||||
position: fixed;
|
||||
top: 70px;
|
||||
|
@ -29,4 +26,4 @@
|
|||
width: 200px;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
@import "../common/foundation/variables";
|
||||
@import "../common/foundation/mixins";
|
||||
|
||||
// --------------------------------------------------
|
||||
// Topic lists
|
||||
// --------------------------------------------------
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
@import "common/foundation/variables";
|
||||
|
||||
.gap {
|
||||
background-color: lighten($secondary_background_color, 76%);
|
||||
padding: 5px 15px;
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
@import "common/foundation/variables";
|
||||
|
||||
.topic-meta-data {
|
||||
width: 100%;
|
||||
h3 a {margin-left: 10px;}
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
@import "../common/foundation/variables";
|
||||
@import "../common/foundation/mixins";
|
||||
|
||||
.add-upload .fa-plus {
|
||||
font-size: 10px;
|
||||
position: relative;
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
// styles that apply to the user page
|
||||
@import "../common/foundation/variables";
|
||||
@import "../common/foundation/mixins";
|
||||
|
||||
.user-preferences {
|
||||
.control-group {
|
||||
|
@ -311,4 +309,4 @@
|
|||
.avatar {
|
||||
margin: 5px 10px 5px 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
7
app/assets/stylesheets/plugins.css.erb
Normal file
7
app/assets/stylesheets/plugins.css.erb
Normal file
|
@ -0,0 +1,7 @@
|
|||
<%
|
||||
# TODO this is very tricky, we want to add a dependency here on files that may not yet exist
|
||||
# otherwise in dev we are often stuck nuking the tmp/cache directory
|
||||
DiscoursePluginRegistry.stylesheets.each do |css|
|
||||
require_asset(css)
|
||||
end
|
||||
%>
|
|
@ -60,7 +60,7 @@
|
|||
width: 12px;
|
||||
height: 13px;
|
||||
font-size: 1px;
|
||||
background: url(<%=asset_path "chosen-sprite.png"%>) right top no-repeat;
|
||||
background: asset-url("chosen-sprite.png") right top no-repeat;
|
||||
}
|
||||
.chzn-container-single .chzn-single abbr:hover {
|
||||
background-position: right -11px;
|
||||
|
@ -74,7 +74,7 @@
|
|||
width: 18px;
|
||||
}
|
||||
.chzn-container-single .chzn-single div b {
|
||||
background: url(<%=asset_path "chosen-sprite.png"%>) no-repeat 0 0;
|
||||
background: asset-url("chosen-sprite.png") no-repeat 0 0;
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
|
@ -184,7 +184,7 @@
|
|||
width: 12px;
|
||||
height: 13px;
|
||||
font-size: 1px;
|
||||
background: url(<%=asset_path "chosen-sprite.png"%>) right top no-repeat;
|
||||
background: asset-url("chosen-sprite.png") right top no-repeat;
|
||||
}
|
||||
.chzn-container-multi .chzn-choices .search-choice .search-choice-close:hover {
|
||||
background-position: right -11px;
|
||||
|
@ -264,10 +264,10 @@
|
|||
bottom: 0;
|
||||
}
|
||||
.chzn-container .chzn-results-scroll-down span {
|
||||
background: url(<%=asset_path "chosen-sprite.png"%>) no-repeat -4px -3px;
|
||||
background: asset-url("chosen-sprite.png") no-repeat -4px -3px;
|
||||
}
|
||||
.chzn-container .chzn-results-scroll-up span {
|
||||
background: url(<%=asset_path "chosen-sprite.png"%>) no-repeat -22px -3px;
|
||||
background: asset-url("chosen-sprite.png") no-repeat -22px -3px;
|
||||
}
|
||||
/* @end */
|
||||
|
|
@ -11,11 +11,37 @@ class SiteCustomization < ActiveRecord::Base
|
|||
true
|
||||
end
|
||||
|
||||
def compile_stylesheet(scss)
|
||||
stylesheets_path = Rails.root.join('app', 'assets', 'stylesheets')
|
||||
|
||||
# Get the sprockets environment. We need to do this because in production
|
||||
# Rails.application.assets returns Sprockets::Index which does not compile
|
||||
# assets.
|
||||
sprockets = Rails.application.assets
|
||||
if sprockets.is_a?(Sprockets::Index)
|
||||
sprockets = sprockets.instance_variable_get('@environment')
|
||||
end
|
||||
|
||||
file_path = stylesheets_path.join('custom_stylesheet.scss')
|
||||
|
||||
File.open(file_path, 'w') do |f|
|
||||
f.write scss
|
||||
end
|
||||
|
||||
begin
|
||||
compiled = sprockets.find_asset('custom_stylesheet').body
|
||||
ensure
|
||||
FileUtils.rm file_path
|
||||
end
|
||||
|
||||
compiled
|
||||
end
|
||||
|
||||
before_save do
|
||||
['stylesheet', 'mobile_stylesheet'].each do |stylesheet_attr|
|
||||
if self.send("#{stylesheet_attr}_changed?")
|
||||
begin
|
||||
self.send("#{stylesheet_attr}_baked=", Sass.compile(self.send(stylesheet_attr)))
|
||||
self.send("#{stylesheet_attr}_baked=", compile_stylesheet(self.send(stylesheet_attr)))
|
||||
rescue Sass::SyntaxError => e
|
||||
error = e.sass_backtrace_str("custom stylesheet")
|
||||
error.gsub!("\n", '\A ')
|
||||
|
|
|
@ -6,9 +6,11 @@
|
|||
<% end %>
|
||||
<%- end %>
|
||||
|
||||
<%= stylesheet_link_tag "plugins" %>
|
||||
|
||||
<%- if staff? %>
|
||||
<%= stylesheet_link_tag "admin"%>
|
||||
<%-end%>
|
||||
<%- end %>
|
||||
|
||||
<%- unless customization_disabled? %>
|
||||
<%= SiteCustomization.custom_stylesheet(session[:preview_style], mobile_view? ? :mobile : :desktop) %>
|
||||
|
|
|
@ -35,10 +35,10 @@ task 'assets:precompile:before' do
|
|||
def evaluate(context, locals, &block)
|
||||
::Sprockets.cache_compiled("sass", data) do
|
||||
# HACK, SASS compiler will degrade to aweful perf with huge files
|
||||
# Bypass if larger than 200kb, ensure assets are minified prior
|
||||
# Bypass if larger than 500kb, ensure assets are minified prior
|
||||
if context.pathname &&
|
||||
context.pathname.to_s =~ /.css$/ &&
|
||||
data.length > 200.kilobytes
|
||||
data.length > 500.kilobytes
|
||||
puts "Skipped minifying #{context.pathname} cause it is larger than 200KB, minify in source control or avoid large CSS files"
|
||||
data
|
||||
else
|
||||
|
|
Loading…
Reference in a new issue