Introducing Pillar Framework
Refactor of pillar-server and pillar-web into a single python package. This simplifies the overall architecture of pillar applications. Special thanks @sybren and @venomgfx
This commit is contained in:
128
src/templates/nodes/custom/asset/file/view_embed.jade
Normal file
128
src/templates/nodes/custom/asset/file/view_embed.jade
Normal file
@@ -0,0 +1,128 @@
|
||||
| {% block body %}
|
||||
|
||||
#node-container
|
||||
#node-overlay
|
||||
|
||||
| {% if node.picture %}
|
||||
section#node-preview.node-preview.file
|
||||
img.node-preview-thumbnail#node-preview-thumbnail(
|
||||
src="{{ node.picture.thumbnail('l', api=api) }}")
|
||||
| {% endif %}
|
||||
|
||||
|
||||
section.node-details-container.file
|
||||
|
||||
.node-details-header
|
||||
.node-title#node-title
|
||||
| {{node.name}}
|
||||
|
||||
.node-details-meta.header
|
||||
ul.node-details-meta-list
|
||||
| {% if node.permissions.world %}
|
||||
li.node-details-meta-list-item.access.public(
|
||||
data-toggle="tooltip",
|
||||
data-placement="left",
|
||||
title="Anybody can download. Share it!")
|
||||
i.pi-lock-open
|
||||
span Public
|
||||
| {% endif %}
|
||||
|
||||
| {% if node.file %}
|
||||
li.node-details-meta-list-item.type
|
||||
| {{ node.file.content_type }}
|
||||
|
||||
li.node-details-meta-list-item.file.length
|
||||
| {{ node.file.length | filesizeformat }}
|
||||
| {% endif %}
|
||||
|
||||
| {% if node.properties.license_type %}
|
||||
| {% if node.properties.license_notes %}
|
||||
li.node-details-meta-list-item.license(
|
||||
id="asset-license",
|
||||
data-toggle="popover",
|
||||
data-placement="left",
|
||||
data-trigger="hover",
|
||||
data-content="{{ node.properties.license_notes }}",
|
||||
title="{{ node.properties.license_type }}")
|
||||
|
||||
i(class="pi-license-{{ node.properties.license_type }}")
|
||||
| {% else %}
|
||||
li.node-details-meta-list-item.license(
|
||||
id="asset-license",
|
||||
data-toggle="tooltip",
|
||||
data-placement="bottom",
|
||||
title="{{ node.properties.license_type }}")
|
||||
|
||||
i(class="pi-license-{{ node.properties.license_type }}")
|
||||
| {% endif %}
|
||||
| {% endif %}
|
||||
|
||||
| {% if node.file %}
|
||||
li.node-details-meta-list-item.file.download(title="Download File")
|
||||
| {% if node.file.link %}
|
||||
a(href="{{ node.file.link }}",
|
||||
title="Download file",
|
||||
download="{{ node.file.filename }}")
|
||||
button.btn.btn-default(type="button")
|
||||
i.pi-download
|
||||
| {% else %}
|
||||
button.btn.btn-default.disabled.sorry(type="button")
|
||||
i.pi-download
|
||||
| {% endif %}
|
||||
| {% endif %}
|
||||
|
||||
|
||||
| {% if node.description %}
|
||||
.node-details-description#node-description
|
||||
| {{node.description}}
|
||||
| {% endif %}
|
||||
|
||||
| {% if node.properties.license_notes %}
|
||||
.node-details-meta.license
|
||||
| {{ node.properties.license_notes }}
|
||||
| {% endif %}
|
||||
|
||||
.node-details-meta.footer
|
||||
ul.node-details-meta-list
|
||||
li.node-details-meta-list-item.status
|
||||
| {{node.properties.status}}
|
||||
|
||||
li.node-details-meta-list-item.author
|
||||
| {{ node.user.full_name }}
|
||||
|
||||
li.node-details-meta-list-item.date(title="Created {{ node._created }}")
|
||||
| {{ node._created | pretty_date }}
|
||||
| {% if (node._created | pretty_date) != (node._updated | pretty_date) %}
|
||||
span(title="Updated {{ node._updated }}") (updated {{ node._updated | pretty_date }})
|
||||
| {% endif %}
|
||||
|
||||
|
||||
#comments-container
|
||||
#comments-list-items-loading
|
||||
i.pi-spin
|
||||
|
||||
include ../../_scripts
|
||||
|
||||
| {% endblock %}
|
||||
|
||||
| {% block footer_scripts %}
|
||||
script.
|
||||
// Generate GA pageview
|
||||
ga('send', 'pageview', location.pathname);
|
||||
|
||||
var content_type = $("li.node-details-meta-list-item.type").text();
|
||||
var type_trimmed = content_type.substring(content_type.indexOf("/") + 1);
|
||||
|
||||
if (type_trimmed == 'x-blender' || type_trimmed == 'blend'){
|
||||
type_trimmed = '<span class="blend"><i class="pi-blender-logo"></i></span>';
|
||||
};
|
||||
|
||||
$("li.node-details-meta-list-item.type").html(type_trimmed);
|
||||
|
||||
$('.sorry').click(function() {
|
||||
$.get('/403', function(data) {
|
||||
$('#node-overlay').html(data).addClass('active');
|
||||
})
|
||||
});
|
||||
|
||||
| {% endblock %}
|
4
src/templates/nodes/custom/asset/image/view.jade
Normal file
4
src/templates/nodes/custom/asset/image/view.jade
Normal file
@@ -0,0 +1,4 @@
|
||||
| {% extends 'layout.html' %}
|
||||
|
||||
| {% block footer_scripts %}
|
||||
| {% endblock %}
|
128
src/templates/nodes/custom/asset/image/view_embed.jade
Normal file
128
src/templates/nodes/custom/asset/image/view_embed.jade
Normal file
@@ -0,0 +1,128 @@
|
||||
| {% block body %}
|
||||
|
||||
#node-container
|
||||
#node-overlay
|
||||
|
||||
| {% if node.picture %}
|
||||
section#node-preview.node-preview.image
|
||||
img.node-preview-thumbnail#node-preview-thumbnail(
|
||||
src="{{ node.picture.thumbnail('l', api=api) }}")
|
||||
| {% endif %}
|
||||
|
||||
|
||||
section.node-details-container.image
|
||||
|
||||
.node-details-header
|
||||
.node-title#node-title
|
||||
| {{node.name}}
|
||||
|
||||
.node-details-meta.header
|
||||
ul.node-details-meta-list
|
||||
| {% if node.permissions.world %}
|
||||
li.node-details-meta-list-item.access.public(
|
||||
data-toggle="tooltip",
|
||||
data-placement="left",
|
||||
title="Anybody can download. Share it!")
|
||||
i.pi-lock-open
|
||||
span Public
|
||||
| {% endif %}
|
||||
| {% if node.short_link %}
|
||||
li.node-details-meta-list-item.access.shared
|
||||
a(href="{{ node.short_link }}")
|
||||
i.pi-share
|
||||
| Shared
|
||||
| {% endif %}
|
||||
|
||||
| {% if node.file %}
|
||||
li.node-details-meta-list-item.type
|
||||
| {{ node.file.content_type }}
|
||||
|
||||
li.node-details-meta-list-item.image.length
|
||||
| {{ node.file.length | filesizeformat }}
|
||||
| {% endif %}
|
||||
|
||||
| {% if node.properties.license_type %}
|
||||
| {% if node.properties.license_notes %}
|
||||
li.node-details-meta-list-item.license(
|
||||
id="asset-license",
|
||||
data-toggle="popover",
|
||||
data-placement="left",
|
||||
data-trigger="hover",
|
||||
data-content="{{ node.properties.license_notes }}",
|
||||
title=" {{ node.properties.license_type }}")
|
||||
|
||||
i(class="pi-license-{{ node.properties.license_type }}")
|
||||
| {% else %}
|
||||
li.node-details-meta-list-item.license(
|
||||
id="asset-license",
|
||||
data-toggle="tooltip",
|
||||
data-placement="bottom",
|
||||
title="{{ node.properties.license_type }}")
|
||||
|
||||
i(class="pi-license-{{ node.properties.license_type }}")
|
||||
| {% endif %}
|
||||
| {% endif %}
|
||||
|
||||
| {% if node.file %}
|
||||
li.node-details-meta-list-item.image.download(title="Download Image")
|
||||
| {% if node.file.link %}
|
||||
a(href="{{ node.file.link }}",
|
||||
title="Download image",
|
||||
download="{{ node.file.filename }}")
|
||||
button.btn.btn-default(type="button")
|
||||
i.pi-download
|
||||
| {% else %}
|
||||
button.btn.btn-default.disabled.sorry(type="button")
|
||||
i.pi-download
|
||||
| {% endif %}
|
||||
| {% endif %}
|
||||
|
||||
| {% if node.description %}
|
||||
.node-details-description#node-description
|
||||
| {{node.description}}
|
||||
| {% endif %}
|
||||
|
||||
| {% if node.properties.license_notes %}
|
||||
.node-details-meta.license
|
||||
| {{ node.properties.license_notes }}
|
||||
| {% endif %}
|
||||
|
||||
.node-details-meta.footer
|
||||
ul.node-details-meta-list
|
||||
| {% if node.has_method('PUT') %}
|
||||
li.node-details-meta-list-item.status
|
||||
| {{node.properties.status}}
|
||||
| {% endif %}
|
||||
|
||||
li.node-details-meta-list-item.author
|
||||
| {{ node.user.full_name }}
|
||||
|
||||
li.node-details-meta-list-item.date(title="Created {{ node._created }}")
|
||||
| {{ node._created | pretty_date }}
|
||||
| {% if (node._created | pretty_date) != (node._updated | pretty_date) %}
|
||||
span(title="Updated {{ node._updated }}") (updated {{ node._updated | pretty_date }})
|
||||
| {% endif %}
|
||||
#comments-container
|
||||
#comments-list-items-loading
|
||||
i.pi-spin
|
||||
|
||||
include ../../_scripts
|
||||
|
||||
| {% endblock %}
|
||||
|
||||
| {% block footer_scripts %}
|
||||
script.
|
||||
// Generate GA pageview
|
||||
ga('send', 'pageview', location.pathname);
|
||||
|
||||
var content_type = $("li.node-details-meta-list-item.type").text();
|
||||
$("li.node-details-meta-list-item.type").text(content_type.substring(content_type.indexOf("/") + 1));
|
||||
|
||||
$('.sorry').click(function() {
|
||||
$.get('/403', function(data) {
|
||||
$('#node-overlay').html(data).addClass('active');
|
||||
})
|
||||
});
|
||||
|
||||
| {% endblock %}
|
||||
|
6
src/templates/nodes/custom/asset/video/view.jade
Normal file
6
src/templates/nodes/custom/asset/video/view.jade
Normal file
@@ -0,0 +1,6 @@
|
||||
| {% extends 'layout.html' %}
|
||||
| {% from '_macros/_file_uploader_javascript.html' import render_file_uploader_javascript %}
|
||||
|
||||
| {% block footer_scripts %}
|
||||
| {{render_file_uploader_javascript()}}
|
||||
| {% endblock %}
|
158
src/templates/nodes/custom/asset/video/view_embed.jade
Normal file
158
src/templates/nodes/custom/asset/video/view_embed.jade
Normal file
@@ -0,0 +1,158 @@
|
||||
| {% block body %}
|
||||
|
||||
#node-container
|
||||
#node-overlay
|
||||
|
||||
section.node-preview.video
|
||||
#flowplayer_container.is-splash.play-button(
|
||||
style="{% if node.picture %}background-image:url({{node.picture.thumbnail('l', api=api)}}); background-repeat:no-repeat; {% endif %}")
|
||||
.fp-startscreen.fp-toggle
|
||||
a.big-play-button
|
||||
i.pi-play
|
||||
.fp-endscreen
|
||||
a.watch-again.fp-toggle
|
||||
i.pi-replay
|
||||
| Watch again
|
||||
.fp-waiting
|
||||
i.pi-spin.spin
|
||||
|
||||
|
||||
section.node-details-container.video
|
||||
|
||||
.node-details-header
|
||||
.node-title#node-title
|
||||
| {{node.name}}
|
||||
|
||||
.node-details-meta.header
|
||||
ul.node-details-meta-list
|
||||
| {% if node.permissions.world %}
|
||||
li.node-details-meta-list-item.access.public(
|
||||
data-toggle="tooltip",
|
||||
data-placement="bottom",
|
||||
title="Anybody can download. Share it!")
|
||||
i.pi-lock-open
|
||||
span Public
|
||||
| {% endif %}
|
||||
|
||||
| {% if node.properties.license_type %}
|
||||
| {% if node.properties.license_notes %}
|
||||
li.node-details-meta-list-item.video.license(
|
||||
id="asset-license",
|
||||
data-toggle="popover",
|
||||
data-placement="left",
|
||||
data-trigger="hover",
|
||||
data-content="{{ node.properties.license_notes }}",
|
||||
title="{{ node.properties.license_type }}")
|
||||
|
||||
i(class="pi-license-{{ node.properties.license_type }}")
|
||||
| {% else %}
|
||||
li.node-details-meta-list-item.video.license(
|
||||
id="asset-license",
|
||||
data-toggle="tooltip",
|
||||
data-placement="bottom",
|
||||
title="{{ node.properties.license_type }}")
|
||||
|
||||
i(class="pi-license-{{ node.properties.license_type }}")
|
||||
| {% endif %}
|
||||
| {% endif %}
|
||||
|
||||
| {% if node.file %}
|
||||
| {% if node.file_variations %}
|
||||
li.btn-group.node-details-meta-list-item.video.download(
|
||||
title="Download Video")
|
||||
button.btn.btn-default.dropdown-toggle(
|
||||
type="button",
|
||||
data-toggle="dropdown",
|
||||
aria-haspopup="true",
|
||||
aria-expanded="false")
|
||||
i.pi-download
|
||||
i.pi-angle-down.icon-dropdown-menu
|
||||
|
||||
ul.dropdown-menu
|
||||
| {% for child in node.file_variations %}
|
||||
li
|
||||
a(href="{{ child.link }}",
|
||||
title="Download this video format",
|
||||
download)
|
||||
span.length {{ child.length | filesizeformat }}
|
||||
|
||||
span.format {{ child.format }}
|
||||
span.size {{ child.size }}
|
||||
|
||||
| {% endfor %}
|
||||
| {% else %}
|
||||
li.btn-group.node-details-meta-list-item.video.download.disabled(
|
||||
title="Download Video")
|
||||
button.btn.btn-default.sorry(type="button")
|
||||
i.pi-download
|
||||
i.pi-angle-down.icon-dropdown-menu
|
||||
| {% endif %}
|
||||
| {% endif %}
|
||||
|
||||
| {% if node.description %}
|
||||
.node-details-description#node-description
|
||||
| {{node.description}}
|
||||
| {% endif %}
|
||||
|
||||
| {% if node.properties.license_notes %}
|
||||
.node-details-meta.license
|
||||
| {{ node.properties.license_notes }}
|
||||
| {% endif %}
|
||||
|
||||
.node-details-meta.footer
|
||||
ul.node-details-meta-list
|
||||
li.node-details-meta-list-item.status
|
||||
| {{node.properties.status}}
|
||||
|
||||
li.node-details-meta-list-item.author
|
||||
| {{ node.user.full_name }}
|
||||
|
||||
li.node-details-meta-list-item.date(title="Created {{ node._created }}")
|
||||
| {{ node._created | pretty_date }}
|
||||
| {% if (node._created | pretty_date) != (node._updated | pretty_date) %}
|
||||
span(title="Updated {{ node._updated }}") (updated {{ node._updated | pretty_date }})
|
||||
| {% endif %}
|
||||
|
||||
|
||||
#comments-container
|
||||
#comments-list-items-loading
|
||||
i.pi-spin
|
||||
|
||||
include ../../_scripts
|
||||
|
||||
| {% endblock %}
|
||||
|
||||
| {% block footer_scripts %}
|
||||
script(type="text/javascript").
|
||||
$(function(){
|
||||
// Generate GA pageview
|
||||
ga('send', 'pageview', location.pathname);
|
||||
|
||||
var content_type = $("li.node-details-meta-list-item.type").text();
|
||||
$("li.node-details-meta-list-item.type").text(content_type.substring(content_type.indexOf("/") + 1));
|
||||
|
||||
var container = document.getElementById("flowplayer_container");
|
||||
|
||||
flowplayer(container, {
|
||||
key: "{{config.FLOWPLAYER_KEY}}",
|
||||
embed: false,
|
||||
splash: true,
|
||||
{% if node.video_sources %}
|
||||
clip: {
|
||||
sources: {{ node.video_sources | safe }}
|
||||
}
|
||||
{% else %}
|
||||
disabled: true
|
||||
{% endif %}
|
||||
});
|
||||
|
||||
{% if not node.video_sources %}
|
||||
$('#flowplayer_container, .sorry').click(function() {
|
||||
$.get('/403', function(data) {
|
||||
$('#node-overlay').html(data).addClass('active');
|
||||
})
|
||||
});
|
||||
{% endif %}
|
||||
});
|
||||
|
||||
| {% endblock %}
|
127
src/templates/nodes/custom/asset/view_theatre_embed.jade
Normal file
127
src/templates/nodes/custom/asset/view_theatre_embed.jade
Normal file
@@ -0,0 +1,127 @@
|
||||
#theatre-media
|
||||
img(src="{{ node.picture.thumbnail('h', api=api) }}", onmousedown="return false")
|
||||
|
||||
ul#theatre-tools
|
||||
li.theatre-tool-resize(title="Toggle Normal Size")
|
||||
span
|
||||
i.pi-resize-full
|
||||
| {% if node.file and node.file.link %}
|
||||
li.download
|
||||
a(href="{{ node.file.link }}",
|
||||
title="Download the original file",
|
||||
download="{{ node.file.filename }}")
|
||||
i.pi-download
|
||||
| {% else %}
|
||||
li.download.disabled
|
||||
a(href="{{ url_for('users.login') }}",
|
||||
title="Sign in to download the original file")
|
||||
i.pi-download
|
||||
| {% endif %}
|
||||
|
||||
#theatre-info
|
||||
.theatre-info-header
|
||||
.theatre-info-title {{ node.name }}
|
||||
.theatre-info-user {{ node.user.full_name }}
|
||||
.theatre-info-date {{ node._created | pretty_date_time }}
|
||||
|
||||
ul.theatre-info-details
|
||||
li
|
||||
span Type
|
||||
span {{ node.file.content_type }}
|
||||
li
|
||||
span Dimensions
|
||||
span {{ node.file.width }} <small>x</small> {{ node.file.height }}
|
||||
li
|
||||
span Size
|
||||
span {{ node.file.length | filesizeformat }}
|
||||
| {% if node.short_link %}
|
||||
li
|
||||
span Share link
|
||||
a(href="{{ node.short_link }}") {{ node.short_link }}
|
||||
| {% endif %}
|
||||
|
||||
#comments-container
|
||||
#comments-list-items-loading
|
||||
i.pi-spin
|
||||
|
||||
include ../_scripts
|
||||
|
||||
script.
|
||||
$(function () {
|
||||
|
||||
// Load scrollbar for sidebar
|
||||
Ps.initialize(document.getElementById('theatre-info'), {suppressScrollX: true});
|
||||
|
||||
var file_width = {{ node.file.width }};
|
||||
var file_height = {{ node.file.height }};
|
||||
var theatre_media = document.getElementById('theatre-media');
|
||||
var $theatre_media = $(theatre_media);
|
||||
|
||||
function canZoom() {
|
||||
return theatre_media.scrollWidth < file_width ||
|
||||
theatre_media.scrollHeight < file_height;
|
||||
}
|
||||
|
||||
// TODO: update this whenever the screen resizes.
|
||||
if (canZoom()) $theatre_media.addClass('zoomed-out');
|
||||
|
||||
function theatreZoom() {
|
||||
var started_zoomed_in = $theatre_media.hasClass('zoomed-in');
|
||||
|
||||
// See if we need to zoom in at all. Zooming out is always allowed.
|
||||
if (!started_zoomed_in && !canZoom()) {
|
||||
$theatre_media.removeClass('zoomed-out');
|
||||
return;
|
||||
}
|
||||
|
||||
// Use add/removeClass to ensure there is always exactly one of zoomed-{in,out}.
|
||||
// If we were to use toggleClass() they could both be applied when we started
|
||||
// without zoomed-out class.
|
||||
if (started_zoomed_in) {
|
||||
$theatre_media.removeClass('zoomed-in');
|
||||
$theatre_media.addClass('zoomed-out');
|
||||
Ps.destroy(theatre_media);
|
||||
} else {
|
||||
$theatre_media.addClass('zoomed-in');
|
||||
$theatre_media.removeClass('zoomed-out');
|
||||
Ps.initialize(theatre_media);
|
||||
}
|
||||
|
||||
// Style toolbar button
|
||||
$('ul#theatre-tools li.theatre-tool-resize').toggleClass('active');
|
||||
}
|
||||
|
||||
$('ul#theatre-tools li.theatre-tool-resize').on('click', function (e) {
|
||||
theatreZoom();
|
||||
});
|
||||
|
||||
$('ul.nav.navbar-nav a.navbar-item.info').on('click', function (e) {
|
||||
e.preventDefault();
|
||||
$('#theatre-container').toggleClass('with-info');
|
||||
});
|
||||
|
||||
$("#theatre-media img").on('click', function (e) {
|
||||
var $parent = $(this).parent();
|
||||
var mouse_x = e.pageX;
|
||||
var mouse_y = e.pageY;
|
||||
|
||||
// Compute relative position before zooming in.
|
||||
var pre_width = e.target.clientWidth;
|
||||
var rel_x = e.offsetX / pre_width;
|
||||
var rel_y = e.offsetY / e.target.clientHeight;
|
||||
|
||||
theatreZoom();
|
||||
|
||||
var post_width = e.target.clientWidth;
|
||||
|
||||
if (post_width > pre_width) {
|
||||
// We zoomed in, scroll such that the target position is under the mouse.
|
||||
var target_x = Math.round(rel_x * post_width);
|
||||
var target_y = Math.round(rel_y * e.target.clientHeight);
|
||||
|
||||
$parent
|
||||
.scrollLeft(target_x - mouse_x + e.target.parentElement.parentElement.offsetLeft)
|
||||
.scrollTop(target_y - mouse_y + e.target.parentElement.parentElement.offsetTop);
|
||||
}
|
||||
});
|
||||
});
|
Reference in New Issue
Block a user