diff --git a/pillar/web/main/routes.py b/pillar/web/main/routes.py index 1d0bb9f4..5c8ca2e5 100644 --- a/pillar/web/main/routes.py +++ b/pillar/web/main/routes.py @@ -1,16 +1,12 @@ -import itertools import logging from pillarsdk import Node from pillarsdk import Project -from pillarsdk.exceptions import ResourceNotFound -from flask import abort from flask import Blueprint from flask import current_app from flask import render_template from flask import redirect from flask import request -from flask_login import current_user from werkzeug.contrib.atom import AtomFeed from pillar.web.utils import system_util @@ -19,7 +15,6 @@ from pillar.web.nodes.custom.posts import posts_view from pillar.web.nodes.custom.posts import posts_create from pillar.web.utils import attach_project_pictures from pillar.web.utils import current_user_is_authenticated -from pillar.web.utils import get_file blueprint = Blueprint('main', __name__) log = logging.getLogger(__name__) @@ -27,80 +22,7 @@ log = logging.getLogger(__name__) @blueprint.route('/') def homepage(): - # Workaround to cache rendering of a page if user not logged in - @current_app.cache.cached(timeout=3600) - def render_page(): - return render_template('join.html') - - if current_user.is_anonymous: - return render_page() - - # Get latest blog posts - api = system_util.pillar_api() - latest_posts = Node.all({ - 'projection': {'name': 1, 'project': 1, 'node_type': 1, - 'picture': 1, 'properties.status': 1, 'properties.url': 1}, - 'where': {'node_type': 'post', 'properties.status': 'published'}, - 'embedded': {'project': 1}, - 'sort': '-_created', - 'max_results': '5' - }, api=api) - - # Append picture Files to last_posts - for post in latest_posts._items: - post.picture = get_file(post.picture, api=api) - - # Get latest assets added to any project - latest_assets = Node.latest('assets', api=api) - - # Append picture Files to latest_assets - for asset in latest_assets._items: - asset.picture = get_file(asset.picture, api=api) - - # Get latest comments to any node - latest_comments = Node.latest('comments', api=api) - - # Get a list of random featured assets - random_featured = get_random_featured_nodes() - - # Parse results for replies - to_remove = [] - for idx, comment in enumerate(latest_comments._items): - if comment.properties.is_reply: - try: - comment.attached_to = Node.find(comment.parent.parent, - {'projection': { - '_id': 1, - 'name': 1, - }}, - api=api) - except ResourceNotFound: - # Remove this comment - to_remove.append(idx) - else: - comment.attached_to = comment.parent - - for idx in reversed(to_remove): - del latest_comments._items[idx] - - main_project = Project.find(current_app.config['MAIN_PROJECT_ID'], api=api) - main_project.picture_header = get_file(main_project.picture_header, api=api) - - # Merge latest assets and comments into one activity stream. - def sort_key(item): - return item._created - - activities = itertools.chain(latest_assets._items, - latest_comments._items) - activity_stream = sorted(activities, key=sort_key, reverse=True) - - return render_template( - 'homepage.html', - main_project=main_project, - latest_posts=latest_posts._items, - activity_stream=activity_stream, - random_featured=random_featured, - api=api) + return render_template('homepage.html') # @blueprint.errorhandler(500) @@ -118,17 +40,6 @@ def homepage(): # return render_template('errors/403_embed.html'), 403 # -@blueprint.route('/join') -def join(): - """Join page""" - return redirect('https://store.blender.org/product/membership/') - - -@blueprint.route('/services') -def services(): - """Services page""" - return render_template('services.html') - @blueprint.route('/blog/') @blueprint.route('/blog/') @@ -167,37 +78,6 @@ def get_projects(category): return projects -def get_random_featured_nodes(): - - import random - - api = system_util.pillar_api() - projects = Project.all({ - 'projection': {'nodes_featured': 1}, - 'where': {'is_private': False}, - 'max_results': '15' - }, api=api) - - featured_nodes = (p.nodes_featured for p in projects._items if p.nodes_featured) - featured_nodes = [item for sublist in featured_nodes for item in sublist] - if len(featured_nodes) > 3: - featured_nodes = random.sample(featured_nodes, 3) - - featured_node_documents = [] - - for node in featured_nodes: - node_document = Node.find(node, { - 'projection': {'name': 1, 'project': 1, 'picture': 1, - 'properties.content_type': 1, 'properties.url': 1}, - 'embedded': {'project': 1} - }, api=api) - - node_document.picture = get_file(node_document.picture, api=api) - featured_node_documents.append(node_document) - - return featured_node_documents - - @blueprint.route('/open-projects') def open_projects(): @current_app.cache.cached(timeout=3600, unless=current_user_is_authenticated) diff --git a/src/templates/homepage.jade b/src/templates/homepage.jade index a0a79a9d..61a3eebb 100644 --- a/src/templates/homepage.jade +++ b/src/templates/homepage.jade @@ -1,361 +1,8 @@ | {% extends 'layout.html' %} -| {% from '_macros/_navigation.html' import navigation_tabs %} | {% set title = 'homepage' %} -| {% block og %} -meta(property="og:type", content="website") -meta(property="og:url", content="https://cloud.blender.org/") - -meta(property="og:title", content="Blender Cloud") -meta(name="twitter:title", content="Blender Cloud") - -meta(property="og:description", content="Blender Cloud is a web based service developed by Blender Institute that allows people to access the training videos and all the data from the open projects.") -meta(name="twitter:description", content="Blender Cloud is a web based service developed by Blender Institute that allows people to access the training videos and all the data from the open projects.") - -meta(property="og:image", content="{% if main_project.picture_header %}{{ main_project.picture_header.thumbnail('l', api=api) }}{% else %}{{ url_for('static', filename='assets/img/backgrounds/background_caminandes_3_02.jpg')}}{% endif %}") -meta(name="twitter:image", content="{% if main_project.picture_header %}{{ main_project.picture_header.thumbnail('l', api=api) }}{% else %}{{ url_for('static', filename='assets/img/backgrounds/background_caminandes_3_02.jpg')}}{% endif %}") -| {% endblock %} - | {% block body %} -.dashboard-container - section#main - | {{ navigation_tabs(title) }} - - section#stream - - h3#activity-stream__title - | Activity Stream - - ul#activity-stream__filters - li Filter - li.filter.active( - data-filter='image', - title="List images") - i.pi-picture - li.filter.active( - data-filter='video', - title="List videos") - i.pi-film-thick - li.filter.active( - data-filter='file', - title="List files") - i.pi-file-archive - li.filter( - data-filter='comment', - title="List comments") - i.pi-comment - - ul#activity-stream__list - | {% for n in activity_stream %} - li.activity-stream__list-item( - class="{{ n.node_type }} {{ n.properties.content_type }} {% if n.picture %}with-picture{% endif %}", - data-url="{{ url_for_node(node=n) }}") - a.activity-stream__list-thumbnail( - class="{{ n.properties.content_type }}", - href="{{ url_for_node(node=n) }}") - | {% if n.picture %} - img(src="{{ n.picture.thumbnail('m', api=api) }}") - | {% endif %} - - .activity-stream__list-thumbnail-icon - | {% if n.node_type == 'asset' %} - | {% if n.properties.content_type == 'video' %} - i.pi-play - | {% elif n.properties.content_type == 'image' %} - i.pi-picture - | {% elif n.properties.content_type == 'file' %} - i.pi-file-archive - | {% else %} - i.pi-folder - | {% endif %} - | {% elif n.node_type == 'comment' %} - i.pi-comment - | {% endif %} - - - .activity-stream__list-details - a.title(href="{{ url_for_node(node=n) }}") - | {% if n.node_type == 'comment' %} - | {{ n.properties.content | striptags | truncate(200) }} - | {% else %} - | {{ n.name }} - | {% endif %} - | {% if n.permissions.world %} - .ribbon - span free - | {% endif %} - ul.meta - | {% if n.node_type == 'comment' or not n.picture %} - li.when - a(href="{{ url_for_node(node=n) }}", title="{{ n._created }}") {{ n._created | pretty_date_time }} - li.who {{ n.user.full_name }} - | {% endif %} - - | {% if n.attached_to %} - li.where-parent - a(href="{{ url_for_node(node_id=n.attached_to._id) }}") {{ n.attached_to.name }} - | {% endif %} - li.where-project - a.project(href="{{ url_for('projects.view', project_url=n.project.url) }}") {{ n.project.name }} - li.what - | {% if n.node_type == 'asset' %} - | {{ n.properties.content_type | undertitle }} - | {% elif n.node_type != 'comment' %} - | {{ n.node_type | undertitle }} - | {% endif %} - - | {% if n.picture %} - ul.meta.extra - li.when - a(href="{{ url_for_node(node=n) }}", title="{{ n._created }}") {{ n._created | pretty_date_time }} - li.who {{ n.user.full_name }} - | {% endif %} - | {% endfor %} - - li.activity-stream__list-item.empty#activity-stream__empty - | No items to list. - - - section#side - section.announcement.hidden - | {% if main_project.picture_header %} - a(href="https://cloud.blender.org/p/agent-327/") - img.header( - src="{{ main_project.picture_header.thumbnail('l', api=api) }}") - | {% endif %} - .text - .title - a(href="https://cloud.blender.org/p/agent-327/") - span In production: - strong Agent 327 - - .lead - span. - Follow the ongoing progress of the Barbershop fight scene, a character study for the Agent 327 project. - - .buttons - a.btn.btn-default.btn-outline.orange( - href="https://cloud.blender.org/p/agent-327/blog/") - | Blog - a.btn.btn-default.btn-outline.blue( - href="https://cloud.blender.org/p/agent-327/") - | Learn More - - section#blog-stream - a.feed( - href="{{ url_for('main.feeds_blogs') }}", - title="Blender Cloud & Projects Blog Feed", - data-toggle="tooltip", - data-placement="left") - i.pi-rss - - h3 - a(href="{{ url_for('main.main_blog') }}") Blog - - ul#blog-stream__list - | {% if latest_posts %} - | {% for n in latest_posts %} - | {% if n.picture and loop.first %} - li.blog-stream__list-item.featured - a.blog-stream__thumbnail( - href="{{ url_for_node(node=n) }}") - img(src="{{ n.picture.thumbnail('l', api=api) }}") - a.title(href="{{ url_for_node(node=n) }}") - | {{ n.name }} - - ul.meta - li.when - a(href="{{ url_for_node(node=n) }}", - title="Updated {{ n._updated | pretty_date }}") - | {{ n._created | pretty_date }} - li.where-project - a.project(href="{{ url_for('projects.view', project_url=n.project.url) }}") {{ n.project.name }} - | {% else %} - li.blog-stream__list-item - a.blog-stream__list-thumbnail(href="{{ url_for_node(node=n) }}") - | {% if n.picture %} - img.image(src="{{ n.picture.thumbnail('s', api=api) }}") - | {% else %} - i.pi-newspaper - | {% endif %} - .blog-stream__list-details - a.title(href="{{ url_for_node(node=n) }}") {{ n.name }} - ul.meta - li.when - a(href="{{ url_for_node(node=n) }}", - title="Updated {{ n._updated | pretty_date }}") - | {{ n._created | pretty_date }} - li.where-project - a.project(href="{{ url_for('projects.view', project_url=n.project.url) }}") {{ n.project.name }} - | {% endif %} - | {% endfor %} - | {% else %} - li.blog-stream__list-item - .blog-stream__list-details - ul.meta - li.when No updates yet - | {% endif %} - li.blog-stream__list-item.more - a(href="{{ url_for('main.main_blog') }}") See All Blog Posts - - - section#random-asset - h3 - a(href="/search") Explore the Cloud - span.section-lead Random selection of the best assets & tutorials - - ul.random-asset__list - | {% for n in random_featured %} - | {% if n.picture and loop.first %} - li.random-asset__list-item.featured - | {% if n.permissions.world %} - .ribbon - span free - | {% endif %} - a.random-asset__thumbnail( - href="{{ url_for_node(node=n) }}", - class="{{ n.properties.content_type }}") - | {% if n.picture %} - img(src="{{ n.picture.thumbnail('l', api=api) }}") - - | {% if n.properties.content_type == 'video' %} - i.pi-play - | {% endif %} - - | {% endif %} - - a.title(href="{{ url_for_node(node=n) }}") - | {{ n.name }} - ul.meta - li.what - a(href="{{ url_for_node(node=n) }}") - | {% if n.properties.content_type %}{{ n.properties.content_type }}{% else %}Folder{% endif %} - li.where - a(href="{{ url_for('projects.view', project_url=n.project.url) }}") - | {{ n.project.name }} - | {% else %} - - li.random-asset__list-item - | {% if n.permissions.world %} - .ribbon - span free - | {% endif %} - a.random-asset__list-thumbnail( - href="{{ url_for_node(node=n) }}", - class="{{ n.properties.content_type }}") - | {% if n.picture %} - img.image(src="{{ n.picture.thumbnail('s', api=api) }}") - | {% else %} - | {% if n.properties.content_type == 'video' %} - i.pi-film-thick - | {% elif n.properties.content_type == 'image' %} - i.pi-picture - | {% elif n.properties.content_type == 'file' %} - i.pi-file-archive - | {% else %} - i.pi-folder - | {% endif %} - | {% endif %} - .random-asset__list-details - a.title(href="{{ url_for_node(node=n) }}") {{ n.name }} - ul.meta - li.what - a(href="{{ url_for_node(node=n) }}") - | {% if n.properties.content_type %}{{ n.properties.content_type }}{% else %}Folder{% endif %} - li.where - a(href="{{ url_for('projects.view', project_url=n.project.url) }}") {{ n.project.name }} - - | {% endif %} - | {% endfor %} - - -| {% endblock %} - -| {% block footer_scripts %} -script. - $(function () { - - /* cleanup mentions in comments */ - $('.activity-stream__list-details a.title').each(function(){ - $(this).text($(this).text().replace(/\*|\@|\<(.*?)\>/g, '')); - }); - - function saveFilters(){ - var filtersEnabled = []; - - $('ul#activity-stream__filters li.filter.active').each(function(){ - filtersEnabled.push($(this).attr('data-filter')); - }); - - setJSONCookie('bcloud_ui', 'homepage_activity_filters', filtersEnabled); - } - - function loadFilters(){ - - var filters = Cookies.getJSON('bcloud_ui'); - - if (filters) { - if (filters.homepage_activity_filters && filters.homepage_activity_filters.length){ - /* Clear style on filters/items */ - $('ul#activity-stream__filters li.filter').removeClass('active'); - $('ul#activity-stream__list li.activity-stream__list-item').addClass('hidden'); - - for (var f in filters.homepage_activity_filters){ - - var savedFilter = filters.homepage_activity_filters[f]; - - /* Style each filter type */ - $('ul#activity-stream__filters li.filter').each(function(){ - if ($(this).attr('data-filter') == savedFilter){ - $(this).addClass('active'); - } - }); - - /* Show items that are on the cookie */ - $('ul#activity-stream__list li.activity-stream__list-item').each(function(){ - if ($(this).hasClass(savedFilter)) { - $(this).removeClass('hidden'); - } - }); - } - } - } - } - - /* Toggle filters */ - $('ul#activity-stream__filters li.filter').click(function(){ - - // Style the filter button - $(this).toggleClass('active'); - - var filterType = $(this).attr('data-filter'); - - saveFilters(); - - // Toggle hidden class on list item if it has class matching the filter - $('ul#activity-stream__list li.activity-stream__list-item').each(function(){ - if ($(this).hasClass(filterType)) { - $(this).toggleClass('hidden'); - } - }); - - var hiddenItems = $('ul#activity-stream__list li.activity-stream__list-item.hidden').length; - - if (hiddenItems == '{{ activity_stream|length }}'){ - $('#activity-stream__empty').show(); - } - - }); - - loadFilters(); - - /* Click on the whole asset/comment row to go */ - $('li.activity-stream__list-item.asset, li.activity-stream__list-item.comment').click(function(e){ - window.location.href = $(this).data('url'); - $(this).addClass('active'); - }); - - hopToTop(); // Display jump to top button - }); -| {% endblock %} +h1 Welcome to Pillar! +p Get started on pillarframework.org +| {% endblock body %} diff --git a/src/templates/join.jade b/src/templates/join.jade deleted file mode 100644 index b7797f2b..00000000 --- a/src/templates/join.jade +++ /dev/null @@ -1,674 +0,0 @@ -| {% extends 'layout.html' %} -| {% block page_title %}Welcome{% endblock %} - -| {% set title = 'join' %} - -| {% block og %} -meta(property="og:title", content="Join the Blender Cloud") -meta(property="og:url", content="https://cloud.blender.org/") -meta(property="og:image", content="{{ url_for('static', filename='assets/img/backgrounds/background_andy_hdribot_01.jpg')}}") -| {% endblock %} - -| {% block header_backdrop %} -.navbar-backdrop.join( - style="background-image: url({{ url_for('static', filename='assets/img/backgrounds/background_agent327_04.jpg')}})") -| {% endblock %} - -| {% block page_overlay %} -#page-overlay.video - .video-embed -| {% endblock %} - -| {% block body %} -#page-container.join - #page-header - .container - .page-title - span.text-background Welcome to the Blender Cloud. - - .page-title-summary - p - span.text-background Join us as we make the Agent 327 "Barbershop" scene - ul - li - span.text-background Exclusive production insight & walk-throughs - li - span.text-background High-quality assets ready to use - li - span.text-background All the open movies files & tutorials - li - span.text-background 100+ hours of training - - .page-header-cta-container - a.page-header-cta(href="https://store.blender.org/product/membership/") - | Join Now - - a.page-header-cta-extra(href="https://cloud.blender.org/p/agent-327") - | Learn More - i.pi-angle-right - - - #page-content - section.page-card-header - h2 - a(href="{{ url_for('main.training') }}") Training & Tutorials - - .page-triplet-container.homepage - .row - .col-md-4 - .triplet-card(data-url="https://cloud.blender.org/p/motion-graphics/") - .triplet-card-thumbnail - img( - alt="HDRI", - src="{{ url_for('static', filename='assets/img/features/training_motion_graphics.jpg')}}") - .triplet-card-info - h3 Motion Graphics - p. - A comprehensive guide to motion graphics techniques using Blender. - a.triplet-cta(href="https://cloud.blender.org/p/motion-graphics/") - | LEARN MORE - - .col-md-4 - .triplet-card(data-url="https://cloud.blender.org/p/toon-character-workflow/") - .triplet-card-thumbnail - img( - alt="Textures", - src="{{ url_for('static', filename='assets/img/features/training_toon_character.jpg')}}") - .triplet-card-info - h3 Toon Character Workflow - p. - Perfect for beginners, learn how to build a cartoon character from concept to finish. - a.triplet-cta(href="https://cloud.blender.org/p/toon-character-workflow/") - | LEARN MORE - - .col-md-4 - .triplet-card(data-url="https://cloud.blender.org/p/gallery") - .triplet-card-thumbnail - img( - alt="Characters", - src="{{ url_for('static', filename='assets/img/features/training_bob_forest.jpg')}}") - .triplet-card-info - h3 Art Walk-throughs - p. - Follow artists through the creative process and techniques behind their work. - a.triplet-cta(href="https://cloud.blender.org/p/gallery") - | LEARN MORE - - .row - .col-md-8.col-md-offset-2 - p.extra. - Other trainings: - Blender for 3D Printing, - Game Asset Creation, - Character Modeling, - Character Animation, - Introduction - and - Advanced Rigging, - VFX Workflow, - Creature - and - Cartoon Character creation, - Advanced - Digital Painting - and - much more! - - - .page-triplet-container-fluid.dark( - style="background-image: url({{ url_for('static', filename='assets/img/backgrounds/pattern_01.jpg')}})") - section.page-card-header - h2 - a(href="{{ url_for('main.open_projects') }}") Browse all the Open Movies - - .page-triplet-container.homepage - .row - .col-md-4 - .triplet-card(data-url="https://cloud.blender.org/p/cosmos-laundromat/") - .triplet-card-thumbnail - img( - alt="HDRI", - src="{{ url_for('static', filename='assets/img/features/open_movies_cosmos.jpg')}}") - .triplet-card-info - h3 Cosmos Laundromat - a.triplet-cta(href="https://cloud.blender.org/p/cosmos-laundromat/") - | LEARN MORE - - .col-md-4 - .triplet-card(data-url="https://cloud.blender.org/p/agent-327/") - .triplet-card-thumbnail - img( - alt="Textures", - src="{{ url_for('static', filename='assets/img/features/open_movies_agent_barbershop.jpg')}}") - .triplet-card-info - h3 Agent 327 - a.triplet-cta(href="https://cloud.blender.org/p/agent-327/") - | LEARN MORE - - .col-md-4 - .triplet-card(data-url="https://cloud.blender.org/p/caminandes-3/") - .triplet-card-thumbnail - img( - alt="Characters", - src="{{ url_for('static', filename='assets/img/features/open_movies_caminandes_llamigos.jpg')}}") - .triplet-card-info - h3 Caminandes - a.triplet-cta(href="https://cloud.blender.org/p/caminandes-3/") - | LEARN MORE - - .row - .col-md-8.col-md-offset-2 - p.extra. - Other open movies: - Elephants Dream, - Sintel, - Big Buck Bunny, - Tears of Steel, - Glass Half, - and - more. - - - section.page-card-header - h2 Download 1000s of files and assets - - .page-triplet-container.homepage - .row - .col-md-4 - .triplet-card(data-url="{{ url_for('projects.view', project_url='textures') }}") - .triplet-card-thumbnail - img( - alt="Textures", - src="{{ url_for('static', filename='assets/img/features/textures_01.jpg')}}") - .triplet-card-info - h3 Textures - p. - More than 1500 texture maps. - Browse online or from Blender with our awesome add-on. - a.triplet-cta(href="{{ url_for('projects.view', project_url='textures') }}") - | LEARN MORE - - .col-md-4 - .triplet-card(data-url="{{ url_for('projects.view', project_url='hdri') }}") - .triplet-card-thumbnail - img( - alt="HDRI", - src="{{ url_for('static', filename='assets/img/features/hdri_01.jpg')}}") - .triplet-card-info - h3 HDRI - p. - Up to 16K and 24 EVs (extremely high) HDR images to light your renders. - a.triplet-cta(href="{{ url_for('projects.view', project_url='hdri') }}") - | LEARN MORE - - .col-md-4 - .triplet-card(data-url="{{ url_for('projects.view', project_url='characters') }}") - .triplet-card-thumbnail - img( - alt="Characters", - src="{{ url_for('static', filename='assets/img/features/characters_01.jpg')}}") - .triplet-card-info - h3 Characters - p. - Production quality, fully rigged and shaded characters ready to animate. - a.triplet-cta(href="{{ url_for('projects.view', project_url='characters') }}") - | LEARN MORE - - - section.page-card-header - h2 Learn by Example - - - section.page-card.services-projects - - .page-card-side - h2.page-card-title Exclusive Production Insights - .page-card-summary - p. - Watch the original authors of shots breaking them down and share their - insight in the production process. Watch animation reviews, - narrated timelapses, shot walk-throughs and more. - - .page-card-side - .page-card-image - video(autoplay, loop) - source(src="{{ url_for('static', filename='assets/img/features/animation_review_01.mp4')}}") - - - section.page-card.right.services-projects - - .page-card-side - h2.page-card-title Production Quality Files - .page-card-summary - p. - From fully rigged characters ready to animate to an Art Gallery - curated by the best Blender artists, access top quality blendfiles to learn - new techniques and improve your art. - - .page-card-side - .page-card-image - img( - alt="High Quality Assets", - src="{{ url_for('static', filename='assets/img/features/locomotive_01.jpg')}}") - - - #blender-addon.page-section-container( - style="background-image: url({{ url_for('static', filename='assets/img/backgrounds/pattern_bw_01.jpg')}})") - section.page-card-header.dark Blender Cloud Add-on - span.page-card-header_lead.dark Connect Blender with the Cloud - - a.page-card-cta.download( - href="https://cloud.blender.org/r/downloads/blender_cloud-latest-bundle.zip") - i.pi-download - | Download v{{ config.BLENDER_CLOUD_ADDON_VERSION }} - - section.page-card.dark.right - - .page-card-side - h2.page-card-title Blender Sync - .page-card-summary. - Save your settings once. Use them anywhere. - Carry your Blender configuration with you, - use our free add-on to sync your keymaps and preferences. -
- Syncing settings is free for everyone! No subscription required. - - a.page-card-cta( - href="https://cloud.blender.org/blog/introducing-blender-sync") - | Learn More - - .page-card-side - .page-card-icon - svg(xmlns="http://www.w3.org/2000/svg", - width="64", height="54", viewBox="0 0 64 54") - g(fill="none", stroke="#aaa", stroke-width="2", stroke-miterlimit="10") - path(d="M29 47H5l-4-4v-2h24l2 2h2M29 3H10C8.344 3 7 4.343 7 6v32M35 51h24l4-4v-2H39l-2 2h-2M35 7h19c1.656 0 3 1.343 3 3v32M32 34v20M32 20v8M32 0v14") - g - path(d="M32 31c-3.866 0-7-3.134-7-7M32 17c3.866 0 7 3.134 7 7M32 31h8M24 17h8M36 35l4-4-4-4M28 21l-4-4 4-4") - path(d="M29 37H11V7h18M35 11h18v30H35") - - - section.page-card.dark - - .page-card-side - h2.page-card-title Texture Browser - .page-card-summary - p. - Access the Blender Cloud Textures and HDRI - libraries from within Blender. - Create, manage and share your own texture libraries! - - a.page-card-cta.watch-video( - href="https://www.youtube.com/watch?v=-srXYv2Osjw", - data-youtube-id="-srXYv2Osjw") - i.pi-play - | Watch Video - - .page-card-side - .page-card-icon - svg(xmlns="http://www.w3.org/2000/svg", - width="64", height="60", - viewBox="0 0 64 60") - g(fill="#aaa") - path(d="M32 60c-.188 0-.377-.053-.542-.16l-31-20C.173 39.656 0 39.34 0 39s.173-.656.458-.84l31-20c.33-.213.754-.213 1.084 0l31 20c.285.184.458.5.458.84s-.173.656-.458.84l-31 20c-.165.107-.354.16-.542.16zM2.845 39L32 57.81 61.155 39 32 20.19 2.845 39z") - path(d="M32 51c-.188 0-.377-.053-.542-.16l-31-20C.173 30.656 0 30.34 0 30s.173-.656.458-.84l31-20c.33-.213.754-.213 1.084 0l31 20c.285.184.458.5.458.84s-.173.656-.458.84l-31 20c-.165.107-.354.16-.542.16zM2.845 30L32 48.81 61.155 30 32 11.19 2.845 30z") - path(d="M32 42c-.188 0-.377-.053-.542-.16l-31-20C.173 21.656 0 21.34 0 21s.173-.656.458-.84l31-20c.33-.213.754-.213 1.084 0l31 20c.285.184.458.5.458.84s-.173.656-.458.84l-31 20c-.165.107-.354.16-.542.16zM2.845 21L32 39.81 61.155 21 32 2.19 2.845 21z") - path(d="M31 27h2v2h-2zm0-4h2v2h-2zm0 8h2v2h-2zm4-4h2v2h-2zm4 2h2v2h-2zm-16 0h2v2h-2zm12 2h2v2h-2zm-8-4h2v2h-2zm0 4h2v2h-2zm4 4h2v2h-2zm31 15h2v2h-2zm0-4h2v2h-2zm0 8h2v2h-2zm0 4h2v2h-2zm0-54h2v2h-2zm0-4h2v2h-2zm0 8h2v2h-2zm0 4h2v2h-2zM0 50h2v2H0zm0-4h2v2H0zm0 8h2v2H0zm0 4h2v2H0zM0 4h2v2H0zm0-4h2v2H0zm4 0h2v2H4zm4 0h2v2H8zm4 0h2v2h-2zm4 0h2v2h-2zm4 0h2v2h-2zm22 0h2v2h-2zm4 0h2v2h-2zm4 0h2v2h-2zm4 0h2v2h-2zm4 0h2v2h-2zM4 58h2v2H4zm4 0h2v2H8zm4 0h2v2h-2zm4 0h2v2h-2zm4 0h2v2h-2zm22 0h2v2h-2zm4 0h2v2h-2zm4 0h2v2h-2zm4 0h2v2h-2zm4 0h2v2h-2zM0 8h2v2H0zm0 4h2v2H0z") - - - section.page-card.dark.right - - .page-card-side - h2.page-card-title - | Image Sharing - .page-card-summary - p. - Got a nice render, a Blender oddity, a cool screenshot? - Share it instantly from within Blender to the Cloud, to the world! - - a.page-card-cta( - href="https://cloud.blender.org/blog/introducing-image-sharing") - | Learn More - - .page-card-side - .page-card-icon - svg(xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64") - g(fill="none", - stroke="#aaa", - stroke-width="2", - stroke-linejoin="round", - stroke-miterlimit="10") - path(d="M1 1h62v62H1zM4 59h2M8 59h2M12 59h2M60 49H48M46 49H27M60 53H40") - path(d="M5 5h54v40H5z") - path(d="M9 45v-3c0-1.656 1.344-3 3-3h6c1.656 0 3 1.344 3 3v3M29 45v-3c0-1.656 1.344-3 3-3h6c1.656 0 3 1.344 3 3v3M13 45v-3M17 45v-3M33 45v-3M37 45v-3M22 31h-5c-2.762 0-5 2.238-5 5v3M38 39v-3c0-2.762-2.238-5-5-5h-5M31 20c0 3.313-1 9-6 9s-6-5.687-6-9c0-1 0-5 6-5s6 4 6 5z") - path(d="M29 27l-2 8h-4l-2-8M18 31c-4-3-5-9-5-9l6-3M32 31c4-3 5-9 5-9l-6-3M59 24L44 9l-8 8M44 9l8 36") - circle(cx="12", cy="12", r="3") - - - section.page-card - - .page-card-side - h2.page-card-title Private Projects - .page-card-summary. - Create and manage your own personal projects. - Upload assets and collaborate with other Blender Cloud members. - - a.page-card-cta( - href="https://cloud.blender.org/blog/introducing-private-projects") - | Learn More - - .page-card-side - .page-card-icon - svg(xmlns='http://www.w3.org/2000/svg', width='56', height='64', viewbox='0 0 56 64') - g(fill='#555') - path(d='M42 38H14V26h28v12zm-26-2h24v-8H16v8zm-4-5H8c-1.654 0-3-1.346-3-3V15h2v13c0 .55.45 1 1 1h4v2z') - path(d='M9.293 19.707L6 16.414l-3.293 3.293-1.414-1.414 4-4c.39-.39 1.023-.39 1.414 0l4 4-1.414 1.414zM48 31h-4v-2h4c.55 0 1-.45 1-1V15h2v13c0 1.654-1.346 3-3 3z') - path(d='M53.293 19.707L50 16.414l-3.293 3.293-1.414-1.414L50 13.586l4.707 4.707M27 15h2v9h-2z') - path(d='M31.293 19.707L28 16.414l-3.293 3.293-1.414-1.414L28 13.586l4.707 4.707M7 49H5V36c0-1.654 1.346-3 3-3h4v2H8c-.55 0-1 .45-1 1v13z') - path(d='M6 50c-.256 0-.512-.098-.707-.293l-4-4 1.414-1.414L6 47.586l3.293-3.293 1.414 1.414-4 4c-.195.195-.45.293-.707.293zm45-1h-2V36c0-.55-.45-1-1-1h-4v-2h4c1.654 0 3 1.346 3 3v13z') - path(d='M50 50.414l-4.707-4.707 1.414-1.414L50 47.586l3.293-3.293 1.414 1.414M27 40h2v9h-2z') - path(d='M28 50.414l-4.707-4.707 1.414-1.414L28 47.586l3.293-3.293 1.414 1.414M6 12c-3.31 0-6-2.692-6-6s2.69-6 6-6 6 2.692 6 6-2.69 6-6 6zM6 2C3.794 2 2 3.794 2 6s1.794 4 4 4 4-1.794 4-4-1.794-4-4-4zm22 10c-3.31 0-6-2.692-6-6s2.69-6 6-6 6 2.692 6 6-2.69 6-6 6zm0-10c-2.206 0-4 1.794-4 4s1.794 4 4 4 4-1.794 4-4-1.794-4-4-4zm22 10c-3.31 0-6-2.692-6-6s2.69-6 6-6 6 2.692 6 6-2.69 6-6 6zm0-10c-2.206 0-4 1.794-4 4s1.794 4 4 4 4-1.794 4-4-1.794-4-4-4zM6 64c-3.31 0-6-2.692-6-6s2.69-6 6-6 6 2.692 6 6-2.69 6-6 6zm0-10c-2.206 0-4 1.794-4 4s1.794 4 4 4 4-1.794 4-4-1.794-4-4-4zm22 10c-3.31 0-6-2.692-6-6s2.69-6 6-6 6 2.692 6 6-2.69 6-6 6zm0-10c-2.206 0-4 1.794-4 4s1.794 4 4 4 4-1.794 4-4-1.794-4-4-4zm22 10c-3.31 0-6-2.692-6-6s2.69-6 6-6 6 2.692 6 6-2.69 6-6 6zm0-10c-2.206 0-4 1.794-4 4s1.794 4 4 4 4-1.794 4-4-1.794-4-4-4zM27 31h2v2h-2zm-4 0h2v2h-2zm8 0h2v2h-2z') - - - section.pricing - .container - .row - .col-md-12 - h2 Simple Pricing. Any payment method. - .row - .col-md-4.col-sm-4 - .box.monthly - h3 Monthly - .pricing-display - span.currency-sign $ - span.digit-int 9 - span.digit-dec .90 / month* - - .pricing-caption - p * with a 3-months minimum period - - ul - li 100+ hours of high-quality training - li All the open movies files and tutorials - li Exclusive production insight & walk-throughs - li Sync your Blender settings across devices - li Share images & screenshots from within Blender - li Download 1500+ textures & HDRIs from Blender - - a.sign-up-now(href="https://store.blender.org/product/membership/") - | Subscribe Now - - .col-md-4.col-sm-4 - .box.yearly - h3 Yearly - .pricing-display - span.currency-sign $ - span.digit-int 109 - span.digit-dec .00 / year - .pricing-caption - ul - li 100+ hours of high-quality training - li All the open movies files and tutorials - li Exclusive production insight & walk-throughs - li Sync your Blender settings across devices - li Share images & screenshots from within Blender - li Download 1500+ textures & HDRIs from Blender - li.special 1 month free! - - a.sign-up-now(href="https://store.blender.org/product/membership/") - | Subscribe Now - - .col-md-4.col-sm-4 - .box.education - h3 Education - - .pricing-caption - p. - We also provide flexible options for group subscription - ideal for schools or teams. - p. - Get in touch to discuss direct support, custom solutions, - team management tools and Single Sign-on. - - a.sign-up-now(href="mailto:cloudsupport@blender.org") - i.pi-email - | Get in Touch - - section.team( - style="background-image: url({{ url_for('static', filename='assets/img/backgrounds/pattern_01.jpg')}})") - .container - .row - .col-md-12 - h2. - A restless team of artists and developers
- wants to share their work with you. - - .people-container - .people-intro - h3 Blender Institute - span Amsterdam, The Netherlands - - .people-faces - a.face( - href="https://twitter.com/tonroosendaal", - data-blenderhead='ton') - img(alt="Ton", src="{{ url_for('static', filename='assets/img/people/ton.jpg')}}") - a.face( - href="https://twitter.com/fsiddi", - data-blenderhead='francesco') - img(alt="Francesco", src="{{ url_for('static', filename='assets/img/people/francesco.jpg')}}") - a.face( - href="https://twitter.com/hjalti", - data-blenderhead='hjalti') - img(alt="Hjalti", src="{{ url_for('static', filename='assets/img/people/hjalti.jpg')}}") - a.face( - href="https://twitter.com/colinlevy", - data-blenderhead='colin') - img(alt="Colin", src="{{ url_for('static', filename='assets/img/people/colin.jpg')}}") - a.face( - href="https://twitter.com/PabloVazquez_", - data-blenderhead='pablo') - img(alt="Pablo", src="{{ url_for('static', filename='assets/img/people/pablo.jpg')}}") - a.face( - href="https://twitter.com/artificial3d", - data-blenderhead='andy') - img(alt="Andy", src="{{ url_for('static', filename='assets/img/people/andy.jpg')}}") - a.face( - href="https://developer.blender.org/p/sergey/", - data-blenderhead='sergey') - img(alt="Sergey", src="{{ url_for('static', filename='assets/img/people/sergey.jpg')}}") - a.face( - href="https://twitter.com/sastuvel", - data-blenderhead='sybren') - img(alt="Sybren", src="{{ url_for('static', filename='assets/img/people/sybren.jpg')}}") - a.face( - href="https://twitter.com/dfelinto", - data-blenderhead='dalai') - img(alt="dalai", src="{{ url_for('static', filename='assets/img/people/dalai.jpg')}}") - a.face( - href="https://twitter.com/dfelinto", - data-blenderhead='luca') - img(alt="luca", src="{{ url_for('static', filename='assets/img/people/luca.jpg')}}") - - .people-bio - .bio#ton - h3 Ton Roosendaal - small CEO Blender Foundation. Producer Blender Institute - span The Netherlands - - .bio#francesco - h3 Francesco Siddi - small Pipeline Tools & Back-end Web Development - span Italy - - .bio#pablo - h3 Pablo Vázquez - small Lighting, Rendering. Front-end Web Development - span Argentina - - .bio#andy - h3 Andy Goralczyk - small Shading, Lighting, Rendering, FX - span Germany - - .bio#colin - h3 Colin Levy - small Director. Layout. - span United States - - .bio#hjalti - h3 Hjalti Hjálmarsson - small Director. Animation. Layout. - span Iceland - - .bio#sergey - h3 Sergey Sharybin - small Blender & Cycles Core Developer - span Russia - - .bio#sybren - h3 Sybren Stüvel - small Blender Cloud Developer - span The Netherlands - - .bio#dalai - h3 Dalai Felinto - small Blender Developer - span Brazil - - .bio#luca - h3 Luca Rood - small Blender Developer - span The Netherlands - - .people-container.online - .people-intro - h3 Online Collaborators - span Contributing to Blender Cloud from all over the globe. - - .people-faces - a.face( - href="https://twitter.com/davidrevoy", - data-blenderhead='david') - img(alt="David", src="{{ url_for('static', filename='assets/img/people/david.jpg')}}") - a.face( - href="https://twitter.com/s_koenig", - data-blenderhead='sebastian') - img(alt="Sebastian", src="{{ url_for('static', filename='assets/img/people/sebastian.jpg')}}") - a.face( - href="https://twitter.com/gleb_alexandrov", - data-blenderhead='gleb') - img(alt="Gleb", src="{{ url_for('static', filename='assets/img/people/gleb.jpg')}}") - a.face( - href="https://twitter.com/the_mantissa", - data-blenderhead='midge') - img(alt="Midge", src="{{ url_for('static', filename='assets/img/people/midge.jpg')}}") - a.face( - href="https://twitter.com/jpbouza", - data-blenderhead='jpbouza') - img(alt="Juan Pablo", src="{{ url_for('static', filename='assets/img/people/jpbouza.jpg')}}") - - .people-bio - .bio#gleb - h3 Gleb Alexandrov - small Lighting & Shading - span Belarus - - .bio#david - h3 David Revoy - small Illustrator & Concept Artist - span France - - .bio#midge - h3 Midge Sinnaeve - small Motion Graphics - span Belgium - - .bio#sebastian - h3 Sebastian König - small VFX - span Germany - - .bio#jpbouza - h3 Juan Pablo Bouza - small Rigging - span Argentina - - - section.page-card.oneofus. - Join 2021 awesome people, subscribe to Blender Cloud now. - - section.supported-by - h2 Our projects were supported by - img.logos(alt="Supported by", src="{{ url_for('static', filename='assets/img/support_logos.png') }}") - - section.page-card.subscribe( - style="background-image: url({{ url_for('static', filename='assets/img/backgrounds/pattern_bw_01.jpg')}})") - .page-card-side - h2.page-card-title - | Support Blender, get inspiration, knowledge and tools in one place. - a.page-card-cta( - href="https://store.blender.org/product/membership/") - i.pi-heart-filled - | Subscribe Now - - -| {% endblock %} - -| {% block footer_scripts %} -script. - - $('.triplet-card').click(function(){ - window.location.href = $(this).attr('data-url'); - }); - - function getSubscribers(){ - $.get('https://store.blender.org/product-counter/?prod=cloud', function(data) { - }).done(function(data){ - if (data.total_sold > 0) { - $('.page-card.oneofus').addClass('active'); - $('.page-card.oneofus strong').html(data.total_sold); - } - }); - } - - getSubscribers(); - - $('.people-faces .face').hover( - function(){ - var who = $(this).data('blenderhead'); - $('#' + who).addClass('active'); - $(this).parent().prev().addClass('active'); - }, - function(){ - $('.bio, .people-intro').removeClass('active'); - } - ); - - // Click anywhere in the page to hide the overlay - function hideOverlay() { - $('#page-overlay.video').removeClass('active'); - $('#page-overlay.video .video-embed').html(''); - } - - $(document).click(function() { - hideOverlay(); - }); - - $(document).keyup(function(e) { - if (e.keyCode == 27) { - hideOverlay(); - } - }); - - $('a.watch-video').click(function(e){ - e.preventDefault(); - e.stopPropagation(); - - $('#page-overlay.video').addClass('active'); - - var videoId = $(this).attr('data-youtube-id'); - $('#page-overlay .video-embed').html('') - }); - -| {% endblock %} diff --git a/src/templates/layout.jade b/src/templates/layout.jade index d72b964c..6e067634 100644 --- a/src/templates/layout.jade +++ b/src/templates/layout.jade @@ -2,31 +2,31 @@ doctype html(lang="en") head meta(charset="utf-8") - title {% if self.page_title() %}{% block page_title %}{% endblock %} — {% endif %}Blender Cloud + title {% if self.page_title() %}{% block page_title %}{% endblock %} — {% endif %}Pillar meta(name="viewport", content="width=device-width, initial-scale=1.0") - meta(name="description", content="Blender Cloud is a web based service developed by Blender Institute that allows people to access the training videos and all the data from the open projects.") - meta(name="author", content="Blender Institute") + meta(name="description", content="") + meta(name="author", content="") meta(name="theme-color", content="#3e92aa") | {% if config['GOOGLE_SITE_VERIFICATION'] %} meta(name="google-site-verification" content="{{ config['GOOGLE_SITE_VERIFICATION'] }}") | {% endif %} - meta(property="og:site_name", content="Blender Cloud") + meta(property="og:site_name", content="") meta(property="og:locale", content="en_US") meta(name="twitter:card", content="summary_large_image") - meta(name="twitter:site", content="@Blender_Cloud") + meta(name="twitter:site", content="") | {% block og %} - meta(property="og:title", content="Blender Cloud") - meta(property="og:url", content="https://cloud.blender.org") - meta(property="og:type", content="website") - meta(property="og:image", content="{{ url_for('static', filename='assets/img/backgrounds/background_gleb_locomotive.jpg')}}") - meta(property="og:description", content="Blender Cloud is a web based service developed by Blender Institute that allows people to access the training videos and all the data from the open projects.") + meta(property="og:title", content="") + meta(property="og:url", content="") + meta(property="og:type", content="") + meta(property="og:image", content="") + meta(property="og:description", content="") - meta(name="twitter:title", content="Blender Cloud") - meta(name="twitter:description", content="Blender Cloud is a web based service developed by Blender Institute that allows people to access the training videos and all the data from the open projects.") - meta(name="twitter:image", content="{{ url_for('static', filename='assets/img/backgrounds/background_gleb_locomotive.jpg')}}") + meta(name="twitter:title", content="") + meta(name="twitter:description", content="") + meta(name="twitter:image", content="") | {% endblock %} script(src="{{ url_for('static_pillar', filename='assets/js/vendor/jquery-3.1.0.min.js')}}") @@ -67,150 +67,7 @@ html(lang="en") body(class="{{ title }}") .container-page - header.navbar-backdrop-container - | {% block header_backdrop %} - img(src="{{ url_for('static', filename='assets/img/backgrounds/pattern_02_blur.jpg')}}") - | {% endblock %} - - | {% with messages = get_flashed_messages(with_categories=True) %} - | {% if messages %} - - | {% for (category, message) in messages %} - .alert(role="alert", class="alert-{{ category }}") - i.alert-icon(class="{{ category }}") - span {{ message }} - button.close(type="button", data-dismiss="alert") - i.pi-cancel - | {% endfor %} - - | {% endif %} - | {% endwith %} - - nav.navbar.navbar-transparent.navbar-fixed-top - .navbar-overlay - - .navbar-container - header.navbar-header - button.navbar-toggle(data-target=".navbar-collapse", data-toggle="collapse", type="button") - span.sr-only Toggle navigation - i.pi-menu - a.navbar-brand( - href="{{ url_for('main.homepage') }}", - title="Blender Cloud") - span.app-logo - i.pi-blender-cloud - - | {% block navigation_search %} - .search-input - input#cloud-search( - type="text", - placeholder="Search assets, tutorials...") - i.search-icon.pi-search - | {% endblock %} - - nav.collapse.navbar-collapse - ul.nav.navbar-nav.navbar-right - | {% if node and node.properties and node.properties.category %} - | {% set category = node.properties.category %} - | {% else %} - | {% set category = title %} - | {% endif %} - - | {% block navigation_sections %} - li - a.navbar-item( - href="{{ url_for('main.main_blog') }}", - title="Blender Cloud Blog", - data-toggle="tooltip", - data-placement="bottom", - class="{% if category == 'blog' %}active{% endif %}") - span Blog - - li(class="dropdown libraries") - a.navbar-item.dropdown-toggle( - href="", - data-toggle="dropdown", - title="Libraries") - span Libraries - i.pi-angle-down - - ul.dropdown-menu - li - a.navbar-item( - href="{{ url_for('projects.view', project_url='hdri') }}", - title="HDRI Library", - data-toggle="tooltip", - data-placement="left") - i.pi-globe - | HDRI - li - a.navbar-item( - href="{{ url_for('projects.view', project_url='textures') }}", - title="Textures Library", - data-toggle="tooltip", - data-placement="left") - i.pi-folder-texture - | Textures - li - a.navbar-item( - href="{{ url_for('projects.view', project_url='characters') }}", - title="Character Library", - data-toggle="tooltip", - data-placement="left") - i.pi-character - | Characters - li - a.navbar-item( - href="{{ url_for('projects.view', project_url='gallery') }}", - title="Curated artwork collection", - data-toggle="tooltip", - data-placement="left") - i.pi-image - | Art Gallery - - li - a.navbar-item( - href="{{ url_for('main.training') }}", - title="Training & Tutorials", - data-toggle="tooltip", - data-placement="bottom", - class="{% if category == 'training' %}active{% endif %}") - span Training - li - a.navbar-item( - href="{{ url_for('main.open_projects') }}", - title="Browse all the Open Projects", - data-toggle="tooltip", - data-placement="bottom", - class="{% if category in ['open-projects', 'film'] %}active{% endif %}") - span Open Projects - li - a.navbar-item( - href="{{ url_for('main.services') }}", - title="Blender Cloud Services", - data-toggle="tooltip", - data-placement="bottom", - class="{% if category == 'services' %}active{% endif %}") - span Services - | {% endblock %} - - | {% if current_user.is_anonymous %} - li - a.navbar-item( - href="https://store.blender.org/product/membership/", - title="Sign up") Sign up - | {% endif %} - - | {% from '_macros/_menu.html' import navigation_menu_notifications, navigation_menu_user %} - | {{ navigation_menu_notifications(current_user) }} - | {{ navigation_menu_user(current_user) }} - - .page-content - #search-overlay - | {% block page_overlay %} - #page-overlay - | {% endblock %} .page-body | {% block body %}{% endblock %} @@ -218,105 +75,17 @@ html(lang="en") #footer-container | {% block footer_navigation %} #footer-navigation - .container - .row - .col-md-4.col-xs-6 - .footer-support - h4 Support & Feedback - p. - Let us know what you think or if you have any issues - just write to cloudsupport at blender dot org - - .col-md-2.col-xs-6 - ul.footer-social - li - a(href="https://www.facebook.com/BlenderCloudOfficial/", - title="Follow us on Facebook") - i.pi-social-facebook - li - a(href="https://twitter.com/Blender_Cloud", - title="Follow us on Twitter") - i.pi-social-twitter - - .col-md-2.col-xs-6 - h4 - a(href="{{ url_for('main.homepage') }}") - | Blender Cloud - ul.footer-links - li - a(href="{{ url_for('main.main_blog') }}", - title="Blender Cloud Blog") - | Blog - - li - a(href="{{ url_for('main.services') }}", - title="Blender Cloud Services") - | Services - - li - a(href="https://cloud.blender.org/blog/blender-cloud-v3", - title="About Blender Cloud") - | About - - .col-md-2.col-xs-6 - h4 - a(href="https://www.blender.org", - title="Blender official Website") - | Blender - ul.footer-links - li - a(href="https://www.blender.org", - title="Blender official Website") - | Blender.org - li - a(href="https://store.blender.org/", - title="The official Blender Store") - | Blender Store - - .col-md-2.col-xs-6.special - | With the support of the
MEDIA Programme of the European Union

- img(alt="MEDIA Programme of the European Union", - src="https://gooseberry.blender.org/wp-content/uploads/2014/01/media_programme.png") - | {% endblock %} + | {% endblock footer_navigation %} | {% block footer %} footer.container #hop(title="Be awesome in space") i.pi-angle-up - | {% endblock %} - | {% endblock %} - - #notification-pop(data-url="", data-read-toggle="") - .nc-progress - a#pop-close(href="#", title="Dismiss") - i.pi-cancel - .nc-item - .nc-avatar - .nc-text - span.nc-date - a(href="") - - noscript - link(href='//fonts.googleapis.com/css?family=Roboto:300,400', rel='stylesheet', type='text/css') + | {% endblock footer %} + | {% endblock footer_container%} script(src="{{ url_for('static_pillar', filename='assets/js/vendor/jquery.bootstrap-3.3.7.min.js', v=17320171) }}") - script. - $(document).ready(function() { - {% if current_user.is_authenticated %} - getNotificationsLoop(); // Check for new notifications in the background - - // Resize #notifications and change overflow for scrollbars - $(window).on("resize", function() { notificationsResize(); }); - {% endif %} - }); - - if (typeof $().tooltip != 'undefined'){ - $('[data-toggle="tooltip"]').tooltip({'delay' : {'show': 0, 'hide': 0}}); - } - if(typeof($.fn.popover) != 'undefined'){ - $('[data-toggle="popover"]').popover(); - } | {% block footer_scripts_pre %}{% endblock %} | {% block footer_scripts %}{% endblock %} diff --git a/src/templates/services.jade b/src/templates/services.jade deleted file mode 100644 index bd6198f6..00000000 --- a/src/templates/services.jade +++ /dev/null @@ -1,247 +0,0 @@ -| {% extends 'layout.html' %} -| {% block page_title %}Services{% endblock %} - -| {% set title = 'services' %} - -| {% block og %} -meta(property="og:type", content="website") -meta(property="og:url", content="{{ url_for('main.services') }}") - -meta(property="og:title", content="Services - Blender Cloud") -meta(name="twitter:title", content="Services - Blender Cloud") -meta(property="og:description", content="Personal Projects · Blender Integration · Texture Browsing · Production Management") -meta(name="twitter:description", content="Personal Projects · Blender Integration · Texture Browsing · Production Management") -meta(property="og:image", content="{{ url_for('static', filename='assets/img/backgrounds/background_services.jpg')}}") -meta(name="twitter:image", content="{{ url_for('static', filename='assets/img/backgrounds/background_services.jpg')}}") -| {% endblock %} - -| {% block header_backdrop %} -.navbar-backdrop( - style="background-image: url({{ url_for('static', filename='assets/img/backgrounds/services_projects.jpg')}})") -.navbar-backdrop-overlay -| {% endblock %} - -| {% block page_overlay %} -#page-overlay.video - .video-embed -| {% endblock %} - -| {% block body %} -#page-container - .container - #page-header - .page-title - | Blender Cloud Services - .page-title-summary - span.text-background - p. - Blender Cloud is the creative hub for your projects, powered by Free and Open Source software. - - p. - On Blender Cloud you can create and share personal projects, access our texture and HDRI - library (or create your own), keep track of your production, manage your renders and much more! - - - - var addon_text = 'Available through the Blender Cloud add-on' - - #page-content - - section#blender-cloud-add-on.page-card - .page-card-side - h2.page-card-title - | Blender Cloud add-on - .page-card-summary - p. - The Blender Cloud add-on provides access to most of our services directly within Blender. - p. - Use the add-on to share images online, submit renders to Flamenco or browse textures and HDRI libraries! - - hr - - small Blender Cloud add-on requires Blender 2.78 or newer - - a.page-card-cta.download( - href="https://cloud.blender.org/r/downloads/blender_cloud-latest-addon.zip") - i.pi-download - | Download add-on  v {{ config.BLENDER_CLOUD_ADDON_VERSION }} - - .page-card-side - img( - src="{{ url_for('static', filename='assets/img/features/blender_cloud_addon_thumbnail.png')}}") - - section#blender-sync.page-card.right - .page-card-side - h2.page-card-title Blender Sync - .page-card-summary - | Save your settings once. Use them anywhere. - | Carry your Blender configuration with you, - | use our add-on to sync your keymaps and preferences. - hr - small Blender Sync is free for everyone! No subscription required. - small This add-on requires Blender 2.78 or newer. - - .tip !{addon_text} - - - a.page-card-cta( - href="https://cloud.blender.org/blog/introducing-blender-sync") - | Learn More - - .page-card-side - img( - src="{{ url_for('static', filename='assets/img/features/sync_thumbnail.jpg')}}") - - - section#texture-browser.page-card.right - .page-card-side - h2.page-card-title Texture & HDRI Browser - .page-card-summary - p. - Access the Blender Cloud Textures - library from within Blender using our exclusive add-on. - Create, manage and share your own texture libraries! - - .tip !{addon_text} - - a.page-card-cta.js-watch-video.download( - href="https://www.youtube.com/watch?v=-srXYv2Osjw", - data-youtube-id="-srXYv2Osjw") - i.pi-play - | Watch Video - - .page-card-side - img( - src="{{ url_for('static', filename='assets/img/features/tex_library_thumbnail.jpg')}}") - - - section#image-sharing.page-card.right - .page-card-side - h2.page-card-title Image Sharing - .page-card-summary - | Got a nice render, a Blender oddity, a cool screenshot? - | Share it instantly from within Blender to the Cloud, to the world! - - .tip !{addon_text} - - a.page-card-cta.download.js-watch-video( - href="https://www.youtube.com/watch?v=yvtqeMBOAyk", - data-youtube-id="yvtqeMBOAyk") - i.pi-play - | Watch Video - - a.page-card-cta.outline( - href="https://cloud.blender.org/blog/introducing-image-sharing") - | Learn More - - .page-card-side - img( - src="{{ url_for('static', filename='assets/img/features/image_sharing_thumbnail.jpg')}}") - - - section#projects.page-card.right - .page-card-side - h2.page-card-title Private Projects - .page-card-summary. - Create and manage your own personal projects. - Upload assets and collaborate with other Blender Cloud members. - - a.page-card-cta( - href="https://cloud.blender.org/blog/introducing-private-projects") - | Learn More - - .page-card-side - img( - src="{{ url_for('static', filename='assets/img/features/projects_thumbnail.jpg')}}") - - - section#attract.page-card.right - .page-card-side - h2.page-card-title - | Attract - .page-card-summary. - Production-management software for your film, game, or commercial projects. - - a.page-card-cta.download.js-watch-video( - href="https://www.youtube.com/watch?v=b9x1rlyyt_o", - data-youtube-id="b9x1rlyyt_o") - i.pi-play - | Watch Video - - a.page-card-cta( - href="https://cloud.blender.org/blog/attract-and-flamenco-public-beta", - title="Learn more about Attract") - | Learn More - - .page-card-side - img( - src="{{ url_for('static', filename='assets/img/features/attract_thumbnail.jpg')}}") - - - section#flamenco.page-card.right - .page-card-side - h2.page-card-title - | Flamenco - .page-card-summary. - Take control of your computing infrastructure and get things done. - - a.page-card-cta.download.js-watch-video( - href="https://www.youtube.com/watch?v=7cnFKhsM67Q", - data-youtube-id="7cnFKhsM67Q") - i.pi-play - | Watch Video - - a.page-card-cta( - href="https://flamenco.io", - title="Learn more about Flamenco") - | Learn More - - .page-card-side - img( - src="{{ url_for('static', filename='assets/img/features/flamenco_thumbnail.jpg')}}") - - - | {% if not current_user.has_role('subscriber') %} - section.page-card.subscribe( - style="background-image: url({{ url_for('static', filename='assets/img/backgrounds/pattern_01.jpg')}})") - .page-card-side - h2.page-card-title - | All of this, plus hours of training and production assets. - .page-card-summary - | Join us for only $9.90/month! - a.page-card-cta( - href="https://store.blender.org/product/membership/") - | Subscribe Now - | {% endif %} - - -| {% endblock %} - -| {% block footer_scripts %} -script. - // Click anywhere in the page to hide the overlay - function hideOverlay() { - $('#page-overlay.video').removeClass('active'); - $('#page-overlay.video .video-embed').html(''); - } - - $(document).click(function() { - hideOverlay(); - }); - - $(document).keyup(function(e) { - if (e.keyCode == 27) { - hideOverlay(); - } - }); - - $('a.js-watch-video').click(function(e){ - e.preventDefault(); - e.stopPropagation(); - - $('#page-overlay.video').addClass('active'); - - var videoId = $(this).attr('data-youtube-id'); - $('#page-overlay .video-embed').html('') - }); - -| {% endblock %}