mavensmate
Version:
Core APIs that drive MavensMate IDEs for Salesforce1/Force.com
219 lines (196 loc) • 7.64 kB
HTML
{% extends "views/layouts/base.html" %}
{% block yield %}
{% if isUpdate %}
<script>
$(function() {
showToast('Successfully updated project credentials', 'success', null, 5000);
});
</script>
{% endif %}
<div class="slds-tabs--scoped" data-aljs="tabs">
<ul class="slds-tabs--scoped__nav" role="tablist">
<li class="slds-tabs--scoped__item slds-text-heading--label" title="Subscription" role="presentation"><a class="slds-tabs--scoped__link" href="#" role="tab" tabindex="0" aria-selected="false" aria-controls="tab-default-1" data-aljs-show="tab-default-1">Subscription</a></li>
<li class="slds-tabs--scoped__item slds-text-heading--label" title="Advanced" role="presentation"><a class="slds-tabs--scoped__link" href="#" role="tab" tabindex="-1" aria-selected="true" aria-controls="tab-default-2" data-aljs-show="tab-default-2">Project Metadata</a></li>
</ul>
<div id="tab-default-1" class="slds-tabs--scoped__content slds-hide" role="tabpanel">
<div class="slds-form--stacked">
<fieldset>
<div class="slds-form-element slds-m-bottom--medium" >
<div class="slds-picklist--draggable slds-grid" data-aljs="multi-select" id="project-subscription">
<div class="slds-form-element">
<span class="slds-form-element__label" aria-label="select-1">Org Metadata</span>
<div class="slds-picklist slds-picklist--multi" data-aljs-multi-select="unselected">
<ul class="slds-picklist__options slds-picklist__options--multi shown" id="ul-org-metadata"></ul>
</div>
</div>
<div class="slds-grid slds-grid--vertical">
<button class="slds-button slds-button--icon-container" data-aljs-multi-select="unselect">
<svg aria-hidden="true" class="slds-button__icon">
<use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="{{ mavensmate.ui.getStaticResourcePath() }}/lds/assets/icons/utility-sprite/svg/symbols.svg#left"></use>
</svg>
<span class="slds-assistive-text">Pick list</span>
</button>
<button class="slds-button slds-button--icon-container" data-aljs-multi-select="select">
<svg aria-hidden="true" class="slds-button__icon">
<use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="{{ mavensmate.ui.getStaticResourcePath() }}/lds/assets/icons/utility-sprite/svg/symbols.svg#right"></use>
</svg>
<span class="slds-assistive-text">Pick list</span>
</button>
</div>
<div class="slds-form-element">
<span class="slds-form-element__label" aria-label="select-2">Project Metadata</span>
<div class="slds-picklist slds-picklist--multi" data-aljs-multi-select="selected">
<ul class="slds-picklist__options slds-picklist__options--multi shown" id="ul-project-metadata"></ul>
</div>
</div>
</div>
</div>
</fieldset>
</div>
</div>
<div id="tab-default-2" class="slds-tabs--scoped__content slds-hide" role="tabpanel">
{% include 'views/partials/metadata_tree.html' %}
</div>
</div>
{% endblock %}
{% block buttons %}
<button class="slds-button slds-button--brand" onclick="updateProject()">Update Project</button>
<button class="slds-button slds-button--neutral" onclick="indexOrg()">Refresh Metadata Index</button>
{% endblock %}
{% block body_js %}
<script>
var metadataTree;
$(function() {
$('[data-aljs="tabs"]').tabs({
defaultTabId: 'tab-default-2'
});
var selectedItems = [
{% for m in mavensmate.ui.getMetadataObjects(project) %}
{% if project.settings.subscription.indexOf(m.xmlName) >= 0 %}
{
id: '{{ m.xmlName }}',
label: '{{ m.xmlName }}'
},
{% endif %}
{% endfor %}
];
var unselectedItems = [
{% for m in mavensmate.ui.getMetadataObjects(project) %}
{% if project.settings.subscription.indexOf(m.xmlName) === -1 %}
{
id: '{{ m.xmlName }}',
label: '{{ m.xmlName }}'
},
{% endif %}
{% endfor %}
];
$('#project-subscription').multiSelect({
unselectedItems: unselectedItems,
selectedItems: selectedItems
});
$('#project-subscription').find('[data-aljs-multi-select="unselect"]').on('click', function() {
updateSubscription();
});
$('#project-subscription').find('[data-aljs-multi-select="select"]').on('click', function() {
updateSubscription();
});
if ({{ project.hasIndexedMetadata() }}) {
metadataTree = new mavensmate.MetadataTree();
metadataTree.render();
} else {
indexOrg();
}
});
function updateSubscription() {
// sort the dom nodes
var $orgMetadataLi = $('#ul-org-metadata li');
var $projectMetadataLi = $('#ul-project-metadata li');
$orgMetadataLi.sort(metadataTypeSort);
$orgMetadataLi.detach().appendTo($('#ul-org-metadata'));
$projectMetadataLi.sort(metadataTypeSort);
$projectMetadataLi.detach().appendTo($('#ul-project-metadata'));
// update the project
var selectedMetadataTypes = [];
_.each($('#project-subscription').multiSelect('getSelectedItems'), function(item) {
selectedMetadataTypes.push(item.id);
});
selectedMetadataTypes.sort();
var opts = {
async: false,
ajax: {
type: 'POST',
url: "{{ mavensmate.ui.getBaseUrl() }}/app/project/{{project.settings.id}}/subscription?pid={{project.settings.id}}",
data: JSON.stringify({
subscription: selectedMetadataTypes
})
},
message: {
label: 'Updating project subscription...'
}
};
mavensmate.request(opts)
.then(function(response) {
showToast(response.message, 'success');
// todo: custom action; indexOrg(true);
})
.catch(function(err) {
console.error('could not update subscription', err);
})
.finally(function() {
hideLoading();
});
}
function updateProject() {
var opts = {
ajax: {
type: 'POST',
url: '{{ mavensmate.ui.getBaseUrl() }}/app/project/{{project.settings.id}}?pid={{project.settings.id}}',
data: JSON.stringify({
package: metadataTree.getPackage()
})
},
message: {
label: 'Updating MavensMate project...'
}
};
mavensmate.request(opts)
.then(function(response) {
showToast('Project updated successfully', 'success');
})
.catch(function(err) {
console.error('could not update project', err);
})
.finally(function() {
hideLoading();
});
}
function indexOrg() {
var opts = {
ajax: {
type: 'POST',
url: "{{ mavensmate.ui.getBaseUrl() }}/app/project/{{project.settings.id}}/index"
},
message: {
label: 'Updating metadata index...',
detail: ' This operation can take a few minutes in large orgs. To minimize indexing time, limit your project\'s subscription to only those metadata types you absolutely need.<br/><br/>Thanks for being patient! :)'
}
};
mavensmate.request(opts)
.then(function(response) {
if (!metadataTree) {
metadataTree = new mavensmate.MetadataTree();
metadataTree.render();
} else {
metadataTree.dynatree.reload();
}
showToast('Project metadata index updated successfully', 'success');
})
.catch(function(err) {
console.error('could not update index', err);
})
.finally(function() {
hideLoading();
});
}
</script>
{% endblock %}