2014-08-29 15:41:59 +00:00
{% extends "baseprojectpage.html" %}
2014-08-12 09:56:42 +00:00
{% load projecttags %}
{% load humanize %}
2014-08-29 15:41:59 +00:00
{% block localbreadcrumb %}
< li > Layers< / li >
{% endblock %}
{% block projectinfomain %}
2014-08-12 09:56:42 +00:00
< div class = "page-header" >
< h1 >
2014-11-14 17:07:06 +00:00
{% if request.GET.filter and total_count > 0 or request.GET.search and total_count > 0 %}
{{total_count}} layer{{total_count|pluralize}} found
{% elif request.GET.filter and total_count == 0 or request.GET.search and total_count == 0 %}
2014-10-02 16:58:15 +00:00
No layers found
2014-09-29 19:20:33 +00:00
{%else%}
All layers
{%endif%}
2014-10-02 16:58:15 +00:00
< i class = "icon-question-sign get-help heading-help" title = "This page lists all the layers compatible with {{project.release.name}} that Toaster knows about." > < / i >
2014-08-12 09:56:42 +00:00
< / h1 >
< / div >
2014-09-29 19:20:33 +00:00
< div id = "zone1alerts" >
< / div >
2014-11-13 11:34:01 +00:00
{% if objects.paginator.count == 0 %}
< div class = "row-fluid" >
< div class = "alert" >
< form class = "no-results input-append" id = "searchform" >
< input id = "search" name = "search" class = "input-xxlarge" type = "text" value = "{{request.GET.search}}" / > {% if request.GET.search %}< a href = "javascript:$('#search').val('');searchform.submit()" class = "add-on btn" tabindex = "-1" > < i class = "icon-remove" > < / i > < / a > {% endif %}
< button class = "btn" type = "submit" value = "Search" > Search< / button >
< button class = "btn btn-link" onclick = "javascript:$('#search').val('');searchform.submit()" > Show all layers< / button >
< / form >
< / div >
< / div >
{% else %}
2014-09-29 19:20:33 +00:00
{% include "basetable_top_layers.html" %}
2014-10-02 16:58:15 +00:00
{% for o in objects %}
2014-08-12 09:56:42 +00:00
< tr class = "data" >
2014-10-02 16:58:15 +00:00
< td class = "layer" > < a href = "{% url 'layerdetails' o.id %}" > {{o.layer.name}}< / a > < / td >
< td class = "description" > {% if o.layer.summary %}{{o.layer.summary}}{%endif%}< / td >
< td class = "source" > < a href = "{% url 'layerdetails' o.pk %}" > {{o.layer_source.name}}< / a > < / td >
< td class = "git-repo" > < a href = "{% url 'layerdetails' o.pk %}" > < code > {{o.layer.vcs_url}}< / code > < / a >
{% if o.get_vcs_link_url %}
< a target = "_blank" href = "{{ o.get_vcs_link_url }}" > < i class = "icon-share get-info" > < / i > < / a >
2014-09-29 19:20:33 +00:00
{% endif %}
< / td >
2014-10-02 16:58:15 +00:00
< td class = "git-subdir" style = "display: table-cell;" > < a href = "{% url 'layerdetails' o.pk %}" > < code > {{o.dirpath}}< / code > < / a >
{% if o.dirpath and o.get_vcs_dirpath_link_url %}
< a target = "_blank" href = "{{ o.get_vcs_dirpath_link_url }}" > < i class = "icon-share get-info" > < / i > < / a >
2014-10-20 15:26:14 +00:00
{% endif %}
2014-09-29 19:20:33 +00:00
< / td >
2014-11-27 12:18:25 +00:00
< td class = "branch" >
{% if o.branch %}
{{o.branch}}
{% else %}
{{o.up_branch.name}}
< i class = "icon-question-sign get-help hover-help" title = "Your builds will use the tip of the branch you have cloned or downloaded to your computer, so nothing will be fetched" > < / i >
{% endif %}
< / td >
2014-09-29 19:20:33 +00:00
< td class = "dependencies" >
2014-10-02 16:58:15 +00:00
{% with ods=o.dependencies.all%}
{% if ods.count %}
2014-09-29 19:20:33 +00:00
< a class = "btn"
2014-10-02 16:58:15 +00:00
title="< a href = '{% url "layerdetails" o.pk %}' > {{o.layer.name}}< / a > dependencies"
2014-09-29 19:20:33 +00:00
data-content="< ul class = 'unstyled' >
2014-10-02 16:58:15 +00:00
{% for i in ods%}
2014-09-29 19:20:33 +00:00
< li > < a href = '{% url "layerdetails" i.depends_on.pk %}' > {{i.depends_on.layer.name}}< / a > < / li >
{% endfor %}
< / ul > ">
2014-10-02 16:58:15 +00:00
{{ods.count}}
2014-09-29 19:20:33 +00:00
< / a >
{% endif %}
{% endwith %}
< / td >
2014-10-02 16:58:15 +00:00
{% if project %}
< td class = "add-del-layers" value = "{{o.pk}}" >
< div id = "layer-tooltip-{{o.pk}}" style = "display: none; font-size: 11px; line-height: 1.3;" class = "tooltip-inner" > layer was modified< / div >
< button id = "layer-del-{{o.pk}}" class = "btn btn-danger btn-block remove-layer layerbtn" style = "display:none;" onclick = "layerDel({{o.pk}}, '{{o.layer.name}}', '{%url 'layerdetails' o.pk%}')" >
2014-08-12 09:56:42 +00:00
< i class = "icon-trash" > < / i >
Delete layer
< / button >
2014-10-02 16:58:15 +00:00
< button id = "layer-add-{{o.pk}}" class = "btn btn-block layerbtn" style = "display:none;" onclick = "layerAdd({{o.pk}}, '{{o.layer.name}}', '{%url 'layerdetails' o.pk%}')" title = "layer added" >
2014-08-12 09:56:42 +00:00
< i class = "icon-plus" > < / i >
Add layer
< / button >
< / td >
2014-10-02 16:58:15 +00:00
{% endif %}
2014-08-12 09:56:42 +00:00
< / tr >
{% endfor %}
{% include "basetable_bottom.html" %}
<!-- Modals -->
<!-- 'Layer dependencies modal' -->
2014-09-29 19:20:33 +00:00
< div id = "dependencies_modal" class = "modal hide fade" tabindex = "-1" role = "dialog" aria-hidden = "true" >
2014-11-13 11:16:56 +00:00
< form id = "dependencies_modal_form" >
2014-08-12 09:56:42 +00:00
< div class = "modal-header" >
< button type = "button" class = "close" data-dismiss = "modal" aria-hidden = "true" > x< / button >
2014-09-29 19:20:33 +00:00
< h3 > < span class = "layer-name" > < / span > dependencies< / h3 >
2014-08-12 09:56:42 +00:00
< / div >
< div class = "modal-body" >
2014-09-29 19:20:33 +00:00
< p > < strong class = "layer-name" > < / strong > depends on some layers that are not added to your project. Select the ones you want to add:< / p >
< ul class = "unstyled" id = "dependencies_list" >
2014-08-12 09:56:42 +00:00
< / ul >
< / div >
< div class = "modal-footer" >
2014-09-29 19:20:33 +00:00
< button class = "btn btn-primary" type = "submit" > Add layers< / button >
< button class = "btn" type = "reset" data-dismiss = "modal" > Cancel< / button >
2014-08-12 09:56:42 +00:00
< / div >
2014-09-29 19:20:33 +00:00
< / form >
2014-08-12 09:56:42 +00:00
< / div >
2014-10-02 16:58:15 +00:00
{% if project %}
2014-09-29 19:20:33 +00:00
< script >
2014-10-02 16:58:15 +00:00
var tooltipUpdateText;
2014-09-29 19:20:33 +00:00
function _makeXHREditCall(data, onsuccess, onfail) {
$.ajax( {
type: "POST",
url: "{% url 'xhr_projectedit' project.id %}",
data: data,
headers: { 'X-CSRFToken' : $.cookie('csrftoken')},
success: function (_data) {
if (_data.error != "ok") {
2015-01-08 13:15:10 +00:00
console.warn(_data.error);
2014-09-29 19:20:33 +00:00
} else {
updateButtons(_data.layers.map(function (e) {return e.id}));
if (onsuccess != undefined) onsuccess(_data);
2014-08-12 09:56:42 +00:00
}
2014-09-29 19:20:33 +00:00
},
error: function (_data) {
2015-01-08 13:15:10 +00:00
console.warn("Call failed");
console.warn(_data);
2014-09-29 19:20:33 +00:00
}
});
}
2014-10-31 16:18:04 +00:00
function updateLayerCountLabels (amount) {
/* Update the filter labels */
var countLabel = $("#projectlayer__project\\:{{project.id}}_count");
countLabel.text(Number(countLabel.text())+amount);
var countLabelRemaining = $("#projectlayer__project\\:NOT{{project.id}}_count");
countLabelRemaining.text(Number(countLabelRemaining.text())-amount);
}
2014-09-29 19:20:33 +00:00
function layerDel(layerId, layerName, layerURL) {
2014-10-02 16:58:15 +00:00
tooltipUpdateText = "1 layer deleted";
2014-09-29 19:20:33 +00:00
_makeXHREditCall({ 'layerDel': layerId }, function () {
2014-10-31 16:18:04 +00:00
updateLayerCountLabels(-1);
2014-10-02 16:58:15 +00:00
show_alert("You have deleted < strong > 1< / strong > layer from < a href = \"{% url ' project ' project . id % } \ " > {{project.name}}< / a > : < a href = \""+layerURL+"\" > " + layerName +"< / a > ");
2014-09-29 19:20:33 +00:00
});
}
function show_alert(text, cls) {
2014-10-02 16:58:15 +00:00
$("#zone1alerts").html("< div class = \"alert alert-info lead \ " > < button type = \"button\" class = \"close\" data-dismiss = \"alert\" > × < / button > " + text + "< / div > ");
2014-09-29 19:20:33 +00:00
}
function show_dependencies_modal(layerId, layerName, layerURL, dependencies) {
// update layer name
$('.layer-name').text(layerName);
var deplistHtml = "";
for (var i = 0; i < dependencies.length ; i + + ) {
deplistHtml += "< li > < label class = \"checkbox\" > < input name = \"dependencies\" value = \""
deplistHtml += dependencies[i].id;
deplistHtml +="\" type=\"checkbox\" checked=\"checked\"/>";
deplistHtml += dependencies[i].name;
deplistHtml += "< / label > < / li > ";
}
$('#dependencies_list').html(deplistHtml);
2014-10-02 16:58:15 +00:00
var selected = [layerId];
var layer_link_list = "< a href = '"+layerURL+"' > "+layerName+"< / a > ";
2014-09-29 19:20:33 +00:00
$("#dependencies_modal_form").submit(function (e) {
e.preventDefault();
$("input[name='dependencies']:checked").map(function () { selected.push(parseInt($(this).val()))});
2014-10-02 16:58:15 +00:00
if (selected.length > 1) {
tooltipUpdateText = "" + selected.length + " layers added";
} else {
tooltipUpdateText = "1 layer added";
}
2014-09-29 19:20:33 +00:00
2014-10-02 16:58:15 +00:00
for (var i = 0; i < selected.length ; i + + ) {
for (var j = 0; j < dependencies.length ; j + + ) {
if (dependencies[j].id == selected[i]) {
layer_link_list+= ", < a href = '"+dependencies[j].layerdetailurl+"' > "+dependencies[j].name+"< / a > "
break;
2014-09-29 19:20:33 +00:00
}
2014-08-12 09:56:42 +00:00
}
2014-10-02 16:58:15 +00:00
}
$('#dependencies_modal').modal('hide');
2014-08-12 09:56:42 +00:00
2014-10-02 16:58:15 +00:00
{% if project %}
_makeXHREditCall({ 'layerAdd': selected.join(",") }, function () {
show_alert("You have added < strong > "+selected.length+"< / strong > layers to < a href = \"{% url ' project ' project . id % } \ " > {{project.name}}< / a > : " + layer_link_list);
2014-09-29 19:20:33 +00:00
});
2014-10-02 16:58:15 +00:00
{% endif %}
2014-09-29 19:20:33 +00:00
});
$('#dependencies_modal').modal('show');
}
function layerAdd(layerId, layerName, layerURL) {
$.ajax({
url: '{% url "xhr_datatypeahead" %}',
data: {'type': 'layerdeps','value':layerId},
success: function(_data) {
if (_data.error != "ok") {
2015-01-08 13:15:10 +00:00
console.warn(_data.error);
2014-09-29 19:20:33 +00:00
} else {
2014-10-31 16:18:04 +00:00
updateLayerCountLabels(_data.list.length+1);
2014-09-29 19:20:33 +00:00
if (_data.list.length > 0) {
show_dependencies_modal(layerId, layerName, layerURL, _data.list);
2014-08-12 09:56:42 +00:00
}
2014-09-29 19:20:33 +00:00
else {
2014-10-02 16:58:15 +00:00
tooltipUpdateText = "1 layer added";
2014-09-29 19:20:33 +00:00
_makeXHREditCall({ 'layerAdd': layerId }, function () {
2014-10-02 16:58:15 +00:00
show_alert("You have added < strong > 1< / strong > layer to < a href = \"{% url ' project ' project . id % } \ " > {{project.name}}< / a > : < a href = \""+layerURL+"\" > " + layerName +"< / a > ");
2014-09-29 19:20:33 +00:00
});
2014-08-12 09:56:42 +00:00
}
2014-09-29 19:20:33 +00:00
}
}
})
}
function button_set(id, state) {
2014-10-02 16:58:15 +00:00
var tohide, toshow;
2014-09-29 19:20:33 +00:00
if (state == "add")
{
2014-10-02 16:58:15 +00:00
tohide = "#layer-del-";
toshow = "#layer-add-";
2014-09-29 19:20:33 +00:00
}
else if (state == "del")
{
2014-10-02 16:58:15 +00:00
tohide = "#layer-add-";
toshow = "#layer-del-";
}
var previouslyvisible = $(tohide + id).is(":visible");
if (previouslyvisible) {
$(tohide + id).fadeOut( function() {
$("#layer-tooltip-" + id).text(tooltipUpdateText);
$("#layer-tooltip-" + id).fadeIn().delay(2000).fadeOut(function(){
$(toshow + id).delay(300).fadeIn();
});
});
} else {
$(tohide + id).hide();
$("#layer-tooltip-" + id).hide();
$(toshow + id).show();
2014-09-29 19:20:33 +00:00
}
};
function updateButtons(projectLayers) {
var displayedLayers = [];
$(".add-del-layers").map(function () { displayedLayers.push(parseInt($(this).attr('value')))});
for (var i=0; i < displayedLayers.length ; i + + ) {
if (projectLayers.indexOf(displayedLayers[i]) > -1) {
button_set(displayedLayers[i], "del");
}
else {
button_set(displayedLayers[i], "add");
}
}
}
$(document).ready(function (){
2014-10-02 16:58:15 +00:00
$('.layerbtn').tooltip({ trigger: 'manual' });
2014-09-29 19:20:33 +00:00
updateButtons({{projectlayerset}});
});
2014-08-12 09:56:42 +00:00
< / script >
2014-10-02 16:58:15 +00:00
{%endif%}
2014-08-12 09:56:42 +00:00
2014-11-13 11:34:01 +00:00
{%endif%}
2014-08-12 09:56:42 +00:00
{% endblock %}