discourse/app/views/layouts/embed.html.erb
Sam a3e8c3cd7b FEATURE: Native theme support
This feature introduces the concept of themes. Themes are an evolution
of site customizations.

Themes introduce two very big conceptual changes:

- A theme may include other "child themes", children can include grand
children and so on.

- A theme may specify a color scheme

The change does away with the idea of "enabled" color schemes.

It also adds a bunch of big niceties like

- You can source a theme from a git repo

- History for themes is much improved

- You can only have a single enabled theme. Themes can be selected by
    users, if you opt for it.

On a technical level this change comes with a whole bunch of goodies

- All CSS is now compiled using a custom pipeline that uses libsass
    see /lib/stylesheet

- There is a single pipeline for css compilation (in the past we used
    one for customizations and another one for the rest of the app

- The stylesheet pipeline is now divorced of sprockets, there is no
   reliance on sprockets for CSS bundling

- CSS is generated with source maps everywhere (including themes) this
    makes debugging much easier

- Our "live reloader" is smarter and avoid a flash of unstyled content
   we run a file watcher in "puma" in dev so you no longer need to run
   rake autospec to watch for CSS changes
2017-04-12 10:53:49 -04:00

75 lines
2.1 KiB
Plaintext

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<%= stylesheet_link_tag 'embed' %>
<%- unless customization_disabled? %>
<%= Theme.custom_stylesheet(session[:preview_style], :embedded) %>
<%- end %>
<%= javascript_include_tag 'break_string' %>
<%- if @topic_view && @topic_view.page_title.present? %>
<title><%= @topic_view.page_title %> - <%= SiteSetting.title %></title>
<%- end %>
<script>
(function() {
function postUp(msg) {
if (parent) {
parent.postMessage(msg, '<%= request.referer %>');
}
}
function clickPostLink(e) {
var postId = e.target.getAttribute('data-link-to-post');
if (postId) {
var postElement = document.getElementById('post-' + postId);
if (postElement) {
var rect = postElement.getBoundingClientRect();
if (rect && rect.top) {
postUp({type: 'discourse-scroll', top: rect.top});
e.preventDefault();
return false;
}
}
}
}
window.onload = function() {
// Send a post message with our loaded height
postUp({type: 'discourse-resize', height: document['body'].offsetHeight});
var postLinks = document.querySelectorAll("a[data-link-to-post]"),
i;
for (i=0; i<postLinks.length; i++) {
postLinks[i].onclick = clickPostLink;
}
// Make sure all links in the iframe point to _blank
var cookedLinks = document.querySelectorAll('.cooked a');
for (i=0; i<cookedLinks.length; i++) {
cookedLinks[i].target = "_blank";
}
// Adjust all names
var names = document.querySelectorAll('.username a');
for (i=0; i<names.length; i++) {
var username = names[i].innerHTML;
if (username) {
names[i].innerHTML = new BreakString(username).break();
}
}
};
})();
</script>
</head>
<body>
<%= yield %>
</body>
</html>