| {% extends 'layout.html' %} | {% from '_macros/_add_new_menu.html' import add_new_menu %} | {% from '_macros/_navigation.html' import navigation_project %} include ../../../../pillar/src/templates/mixins/components | {% block page_title %}{{ project.name }}{% endblock%} | {% if title is not defined %} | {% set title = 'project' %} | {% endif %} | {% block og %} meta(property="og:type", content="website") | {% if og_picture %} meta(property="og:image", content="{{ og_picture.thumbnail('l', api=api) }}") meta(name="twitter:image", content="{{ og_picture.thumbnail('l', api=api) }}") | {% elif node and node.picture %} meta(property="og:image", content="{{ node.picture.thumbnail('l', api=api) }}") meta(name="twitter:image", content="{{ node.picture.thumbnail('l', api=api) }}") | {% elif project.picture_header %} meta(property="og:image", content="{{ project.picture_header.thumbnail('l', api=api) }}") meta(name="twitter:image", content="{{ project.picture_header.thumbnail('l', api=api) }}") | {% endif %} | {% if show_project %} meta(property="og:title", content="{{ project.name }} - Blender Cloud") meta(name="twitter:title", content="{{ project.name }} - Blender Cloud") meta(property="og:description", content="{{ project.summary }}") meta(name="twitter:description", content="{{ project.summary }}") meta(property="og:url", content="{{ url_for('projects.view', project_url=project.url, _external=True) }}") | {% else %} | {% if node %} meta(property="og:title", content="{{ node.name }} - Blender Cloud") meta(name="twitter:title", content="{{ node.name }} on Blender Cloud") | {% if node.node_type == 'post' %} | {% if node.properties.content %} meta(property="og:description", content="{{ node.properties.content | truncate(180) }}") meta(name="twitter:description", content="{{ node.properties.content | truncate(180) }}") | {% else %} meta(property="og:description", content="Blender Cloud, your source for open content and training") meta(name="twitter:description", content="Blender Cloud, your source for open content and training") | {% endif %} | {% else %} | {% if node.description %} meta(property="og:description", content="{{ node.description | truncate(180) }}") meta(name="twitter:description", content="{{ node.description | truncate(180) }}") | {% else %} meta(property="og:description", content="Blender Cloud, your source for open content and training") meta(name="twitter:description", content="Blender Cloud, your source for open content and training") | {% endif %} | {% endif %} meta(property="og:url", content="{{url_for('projects.view_node', project_url=project.url, node_id=node._id)}}") | {% else %} meta(property="og:title", content="{{ project.name }} Blog on Blender Cloud") meta(name="twitter:title", content="{{ project.name }} Blog on Blender Cloud") meta(property="og:description", content="{{ project.summary }}") meta(name="twitter:description", content="{{ project.summary }}") meta(property="og:url", content="{{url_for('projects.view', project_url=project.url, _external=True)}}") | {% endif %} | {% endif %} | {% endblock %} | {% block head %} link(href="{{ url_for('static_pillar', filename='assets/jstree/themes/default/style.min.css') }}", rel="stylesheet") | {% if node %} link(rel="amphtml", href="{{ url_for('nodes.view', node_id=node._id, _external=True, format='amp') }}") | {% endif %} script(src="{{ url_for('static_pillar', filename='assets/js/vendor/video.min.js') }}") script(src="{{ url_for('static_pillar', filename='assets/js/vendor/videojs-ga-0.4.2.min.js') }}") script(src="{{ url_for('static_pillar', filename='assets/js/vendor/videojs-hotkeys-0.2.20.min.js') }}") script(src="{{ url_for('static_pillar', filename='assets/js/video_plugins.min.js') }}") | {% endblock %} | {% block css %} link(href="{{ url_for('static_pillar', filename='assets/css/font-pillar.css') }}", rel="stylesheet") link(href="{{ url_for('static_cloud', filename='assets/css/project-main.css') }}", rel="stylesheet") | {% endblock %} | {% block navigation_tabs %} | {{ navigation_project(project, navigation_links, extension_sidebar_links, title) }} | {% endblock navigation_tabs %} | {% block body %} #project-container.is-sidebar-visible #project-side-container.bg-light #project_nav(class="{{ title }}") #project_nav-container | {% if title != 'about' %} button.project-sidebar-toggle.btn.btn-sm.btn-link.px-1.rounded-0.bg-light.text-muted.position-absolute( type="button", class="js-project-sidebar-toggle") i.pi-angle-double-left | {% block project_tree %} #project_tree.bg-light.p-1 | {% endblock project_tree %} | {% endif %} #project_context-container .breadcrumbs-container.bg-dark.fixed-top button.project-sidebar-toggle.btn.btn-sm.btn-link.px-1.bg-dark.rounded-0.text-muted( type="button", class="js-project-sidebar-toggle") i.pi-menu node-breadcrumbs(node-id="{{ node._id }}", @navigate="(nodeId)=>{displayNode(nodeId)}") script. new Vue({el:'node-breadcrumbs'}); | {% if project.has_method('PUT') %} #project_context-header.position-absolute ul.project-edit-tools.disabled.d-flex.list-unstyled.py-2.mb-0 li.dropdown( title="Create...", data-toggle="tooltip", data-placement="left") button.dropdown-toggle.btn.btn-sm.btn-outline-secondary( id="item_add", class="project-mode-view", type="button", data-toggle="dropdown", aria-haspopup="true", aria-expanded="false") i.pi-collection-plus ul.dropdown-menu.dropdown-menu-right( class="add_new-menu") | {{ add_new_menu(project.node_types) }} li.button-edit a.btn.btn-sm.btn-outline-secondary.ml-2.px-2( id="item_edit", class="project-mode-view", href="javascript:void(0);", title="Edit", data-project_id="{{project._id}}", data-toggle="tooltip", data-placement="top") i.button-edit-icon.pi-edit li.dropdown button.dropdown-toggle.btn.btn-sm.btn-outline-secondary.mx-2( class="project-mode-view", type="button", data-toggle="dropdown", aria-haspopup="true", aria-expanded="false") i.pi-more-vertical.p-0 ul.dropdown-menu.dropdown-menu-right | {% if current_user.has_cap('admin') %} li a.dropdown-item( id="item_featured", href="javascript:void(0);", title="Feature on project's homepage", data-toggle="tooltip", data-placement="left") i.pi-star.pr-2 | Toggle Featured li a.dropdown-item( id="item_toggle_public", href="javascript:void(0);", title="Make it accessible to anyone", data-toggle="tooltip", data-placement="left") i.pi-lock-open.pr-2 | Toggle Public | {% endif %} li a.dropdown-item( id="item_toggle_projheader", href="javascript:void(0);", title="Feature as project's header", data-toggle="tooltip", data-placement="left") i.pi-star.pr-2 | Toggle Project Header video li.button-move a.dropdown-item( id="item_move", href="javascript:void(0);", title="Move into a folder...", data-toggle="tooltip", data-placement="left") i.button-move-icon.pi-move.pr-2 | Move li.button-delete a.dropdown-item( id="item_delete", href="javascript:void(0);", title="Can be undone within a month", data-toggle="tooltip", data-placement="left") i.pi-trash.pr-2 | Delete Project // Edit Mode li.button-cancel a.btn.btn-outline-secondary( id="item_cancel", class="project-mode-edit", href="javascript:void(0);", title="Cancel changes") i.button-cancel-icon.pi-cancel | Cancel li.button-save a.btn.btn-outline-success.mx-2( id="item_save", class="project-mode-edit", href="javascript:void(0);", title="Save changes") i.button-save-icon.pi-check | Save Changes | {% endif %} | {% set utm_source = request.args.get('utm_source') %} | {% if config.UTM_LINKS and utm_source in config.UTM_LINKS %} #utm_container a(href="{{config.UTM_LINKS[utm_source]['link']}}") img(src="{{config.UTM_LINKS[utm_source]['image']}}", alt="gift", class="img-responsive") | {% endif %} #project_context | {% block project_context %} | {% if show_project %} | {% include "projects/view_embed.html" %} | {% endif %} | {% endblock project_context %} #overlay-mode-move-container .overlay-container .title i.pi-angle-left | Select the folder where you want to move it .buttons button#item_move_accept.move.disabled | Select a Folder button#item_move_cancel.cancel i.pi-cancel | Cancel | {% endblock %} | {% block footer_container %}{% endblock %} | {% block footer_scripts_pre %} | {% if project.has_method('PUT') %} | {# JS containing the Edit, Add, Featured, and Move functions #} script(type="text/javascript", src="{{ url_for('static_pillar', filename='assets/js/project-edit.min.js') }}") | {% endif %} script. loadProjectSidebar(); $('body').on('click', '.js-project-sidebar-toggle', function(e){ e.preventDefault(); toggleProjectSidebar(); }); function updateToggleProjHeaderMenuItem() { var $toggle_projheader = $('#item_toggle_projheader'); if (ProjectUtils.isProject()) { $toggle_projheader.hide(); return; } if (ProjectUtils.nodeType() == 'asset') { $toggle_projheader.show(); } else { $toggle_projheader.hide(); } } $(updateToggleProjHeaderMenuItem); // Function to update the interface on loadNodeContent, and edit/saving assets function updateUi(nodeId, mode) { if (mode === 'view') { $('.project-mode-view').displayAs('inline-block'); $('.project-mode-edit').hide(); $("#node-edit-form").unbind("submit"); $("#item_save").unbind("click"); $("#item_cancel").unbind("click"); } else if (mode === 'edit') { $('.project-mode-view').hide(); $('.project-mode-edit').displayAs('inline-block'); } else { if (console) console.log('Invalid mode:', mode); } // Prevent flicker by scrolling to top. $("#project_context-container").scrollTop(0); // Enable specific items under the Add New dropdown if (ProjectUtils.nodeType() === 'group') { addMenuEnable(['asset', 'group']); } else if (ProjectUtils.nodeType() === 'group_texture') { addMenuEnable(['group_texture', 'texture']); } else if (ProjectUtils.nodeType() === 'group_hdri') { addMenuEnable(['group_hdri', 'hdri']); } else if (!ProjectUtils.isProject()) { addMenuEnable(false); } updateToggleProjHeaderMenuItem(); // Set the page title on the document var page_title = $('#node-title').text() + " - {{ project.name }} — Blender Cloud"; DocumentTitleAPI.set_page_title(page_title); // TODO: Maybe remove this, now it's also in loadNodeContent(), but double-check // it's done like that in all users of updateUi(). loadingBarHide(); } | {% endblock %} | {% block footer_scripts %} script(src="{{ url_for('static_pillar', filename='assets/jstree/jstree.min.js') }}") script. {% if show_project %} ProjectUtils.setProjectAttributes({projectId: "{{project._id}}", isProject: true, nodeId: ''}); {% else %} {% if node %} ProjectUtils.setProjectAttributes({projectId: "{{project._id}}", isProject: false, nodeId: '{{node._id}}'}); {% endif %} {% endif %} var projectTree = document.getElementById('project_tree'); var urlNodeMove = "{{url_for('projects.move_node')}}"; var urlNodeFeature = "{{url_for('projects.add_featured_node')}}"; var urlNodeDelete = "{{url_for('projects.delete_node')}}"; var urlNodeTogglePublic = "{{url_for('projects.toggle_node_public')}}"; var urlNodeToggleProjHeader = "{{url_for('projects.toggle_node_project_header')}}"; var urlProjectDelete = "{{url_for('projects.delete')}}"; var urlProjectEdit = "{{url_for('projects.edit', project_url=project.url)}}"; function loadNodeContent(url, nodeId) { var $projectContext = $('#project_context') $projectContext.trigger('pillar:workStart') $.get(url, function(dataHtml) { // Update the DOM injecting the generate HTML into the page $projectContext.html(dataHtml); }) .done(function(){ pillar.events.Nodes.triggerLoaded(nodeId); updateUi(nodeId, 'view'); }) .fail(function(dataResponse) { $projectContext.html($('