mirror of
https://github.com/xevidos/codiad.git
synced 2024-11-14 07:41:14 +01:00
259 lines
11 KiB
JavaScript
Executable file
259 lines
11 KiB
JavaScript
Executable file
/*
|
|
* Copyright (c) Codiad & Kent Safranski (codiad.com), distributed
|
|
* as-is and without warranty under the MIT License. See
|
|
* [root]/license.txt for more. This information must remain intact.
|
|
*/
|
|
|
|
(function(global, $){
|
|
|
|
var codiad = global.codiad;
|
|
|
|
$(function() {
|
|
codiad.project.init();
|
|
});
|
|
|
|
codiad.project = {
|
|
|
|
controller: 'components/project/controller.php',
|
|
dialog: 'components/project/dialog.php',
|
|
|
|
init: function() {
|
|
this.loadCurrent();
|
|
this.loadSide();
|
|
|
|
var _this = this;
|
|
|
|
$('#projects-create').click(function(){
|
|
codiad.project.create('true');
|
|
});
|
|
|
|
$('#projects-manage').click(function(){
|
|
codiad.project.list();
|
|
});
|
|
|
|
$('#projects-collapse').click(function(){
|
|
if (!_this._sideExpanded) {
|
|
_this.projectsExpand();
|
|
} else {
|
|
_this.projectsCollapse();
|
|
}
|
|
});
|
|
},
|
|
|
|
//////////////////////////////////////////////////////////////////
|
|
// Get Current Project
|
|
//////////////////////////////////////////////////////////////////
|
|
|
|
loadCurrent: function() {
|
|
$.get(this.controller + '?action=get_current', function(data) {
|
|
var projectInfo = codiad.jsend.parse(data);
|
|
if (projectInfo != 'error') {
|
|
$('#file-manager')
|
|
.html('')
|
|
.append('<ul><li><a id="project-root" data-type="root" class="directory" data-path="' + projectInfo.path + '">' + projectInfo.name + '</a></li></ul>');
|
|
codiad.filemanager.index(projectInfo.path);
|
|
codiad.user.project(projectInfo.path);
|
|
codiad.message.success(i18n('Project %{projectName}% Loaded', {projectName:projectInfo.name}));
|
|
}
|
|
});
|
|
},
|
|
|
|
//////////////////////////////////////////////////////////////////
|
|
// Open Project
|
|
//////////////////////////////////////////////////////////////////
|
|
|
|
open: function(path) {
|
|
var _this = this;
|
|
codiad.finder.contractFinder();
|
|
$.get(this.controller + '?action=open&path=' + encodeURIComponent(path), function(data) {
|
|
var projectInfo = codiad.jsend.parse(data);
|
|
if (projectInfo != 'error') {
|
|
_this.loadCurrent();
|
|
codiad.modal.unload();
|
|
codiad.user.project(path);
|
|
localStorage.removeItem("lastSearched");
|
|
/* Notify listeners. */
|
|
amplify.publish('project.onOpen', path);
|
|
}
|
|
});
|
|
},
|
|
|
|
//////////////////////////////////////////////////////////////////
|
|
// Open the project manager dialog
|
|
//////////////////////////////////////////////////////////////////
|
|
|
|
list: function() {
|
|
$('#modal-content form')
|
|
.die('submit'); // Prevent form bubbling
|
|
codiad.modal.load(500, this.dialog + '?action=list');
|
|
},
|
|
|
|
//////////////////////////////////////////////////////////////////
|
|
// Load and list projects in the sidebar.
|
|
//////////////////////////////////////////////////////////////////
|
|
loadSide: function() {
|
|
$('.sb-projects-content').load(this.dialog + '?action=sidelist&trigger='+localStorage.getItem('codiad.editor.fileManagerTrigger'));
|
|
this._sideExpanded = true;
|
|
},
|
|
|
|
projectsExpand: function() {
|
|
this._sideExpanded = true;
|
|
$('#side-projects').css('height', 276+'px');
|
|
$('.project-list-title').css('right', 0);
|
|
$('.sb-left-content').css('bottom', 276+'px');
|
|
$('#projects-collapse')
|
|
.removeClass('icon-up-dir')
|
|
.addClass('icon-down-dir');
|
|
},
|
|
|
|
projectsCollapse: function() {
|
|
this._sideExpanded = false;
|
|
$('#side-projects').css('height', 33+'px');
|
|
$('.project-list-title').css('right', 0);
|
|
$('.sb-left-content').css('bottom', 33+'px');
|
|
$('#projects-collapse')
|
|
.removeClass('icon-down-dir')
|
|
.addClass('icon-up-dir');
|
|
},
|
|
|
|
//////////////////////////////////////////////////////////////////
|
|
// Create Project
|
|
//////////////////////////////////////////////////////////////////
|
|
|
|
create: function(close) {
|
|
var _this = this;
|
|
create = true;
|
|
codiad.modal.load(500, this.dialog + '?action=create&close=' + close);
|
|
$('#modal-content form')
|
|
.live('submit', function(e) {
|
|
e.preventDefault();
|
|
var projectName = $('#modal-content form input[name="project_name"]')
|
|
.val(),
|
|
projectPath = $('#modal-content form input[name="project_path"]')
|
|
.val(),
|
|
gitRepo = $('#modal-content form input[name="git_repo"]')
|
|
.val(),
|
|
gitBranch = $('#modal-content form input[name="git_branch"]')
|
|
.val();
|
|
if(projectPath.indexOf('/') == 0) {
|
|
create = confirm('Do you really want to create project with absolute path "' + projectPath + '"?');
|
|
}
|
|
if(create) {
|
|
$.get(_this.controller + '?action=create&project_name=' + encodeURIComponent(projectName) + '&project_path=' + encodeURIComponent(projectPath) + '&git_repo=' + gitRepo + '&git_branch=' + gitBranch, function(data) {
|
|
createResponse = codiad.jsend.parse(data);
|
|
if (createResponse != 'error') {
|
|
_this.open(createResponse.path);
|
|
codiad.modal.unload();
|
|
_this.loadSide();
|
|
/* Notify listeners. */
|
|
amplify.publish('project.onCreate', {"name": projectName, "path": projectPath, "git_repo": gitRepo, "git_branch": gitBranch});
|
|
}
|
|
});
|
|
}
|
|
});
|
|
},
|
|
|
|
//////////////////////////////////////////////////////////////////
|
|
// Rename Project
|
|
//////////////////////////////////////////////////////////////////
|
|
|
|
rename: function(path,name) {
|
|
var _this = this;
|
|
codiad.modal.load(500, this.dialog + '?action=rename&path=' + encodeURIComponent(path) + '&name='+name);
|
|
$('#modal-content form')
|
|
.live('submit', function(e) {
|
|
e.preventDefault();
|
|
var projectPath = $('#modal-content form input[name="project_path"]')
|
|
.val();
|
|
var projectName = $('#modal-content form input[name="project_name"]')
|
|
.val();
|
|
$.get(_this.controller + '?action=rename&project_path=' + encodeURIComponent(projectPath) + '&project_name=' + encodeURIComponent(projectName), function(data) {
|
|
renameResponse = codiad.jsend.parse(data);
|
|
if (renameResponse != 'error') {
|
|
codiad.message.success(i18n('Project renamed'));
|
|
_this.loadSide();
|
|
$('#file-manager a[data-type="root"]').html(projectName);
|
|
codiad.modal.unload();
|
|
/* Notify listeners. */
|
|
amplify.publish('project.onRename', {"path": projectPath, "name": projectName});
|
|
}
|
|
});
|
|
});
|
|
},
|
|
|
|
//////////////////////////////////////////////////////////////////
|
|
// Delete Project
|
|
//////////////////////////////////////////////////////////////////
|
|
|
|
delete: function(name, path) {
|
|
var _this = this;
|
|
codiad.modal.load(500, this.dialog + '?action=delete&name=' + encodeURIComponent(name) + '&path=' + encodeURIComponent(path));
|
|
$('#modal-content form')
|
|
.live('submit', function(e) {
|
|
e.preventDefault();
|
|
var projectPath = $('#modal-content form input[name="project_path"]')
|
|
.val();
|
|
var deletefiles = $('input:checkbox[name="delete"]:checked').val();
|
|
var followlinks = $('input:checkbox[name="follow"]:checked').val();
|
|
var action = '?action=delete';
|
|
if( typeof deletefiles !== 'undefined' ) {
|
|
if( typeof followlinks !== 'undefined' ) {
|
|
action += '&follow=true&path=' + encodeURIComponent(projectPath);
|
|
} else {
|
|
action += '&path=' + encodeURIComponent(projectPath);
|
|
}
|
|
}
|
|
$.get(codiad.filemanager.controller + action, function(d) {
|
|
$.get(_this.controller + '?action=delete&project_path=' + encodeURIComponent(projectPath), function(data) {
|
|
deleteResponse = codiad.jsend.parse(data);
|
|
if (deleteResponse != 'error') {
|
|
codiad.message.success(i18n('Project Deleted'));
|
|
_this.list();
|
|
_this.loadSide();
|
|
// Remove any active files that may be open
|
|
$('#active-files a')
|
|
.each(function() {
|
|
var curPath = $(this)
|
|
.attr('data-path');
|
|
if (curPath.indexOf(projectPath) == 0) {
|
|
codiad.active.remove(curPath);
|
|
}
|
|
});
|
|
/* Notify listeners. */
|
|
amplify.publish('project.onDelete', {"path": projectPath, "name": name});
|
|
}
|
|
});
|
|
});
|
|
});
|
|
},
|
|
|
|
//////////////////////////////////////////////////////////////////
|
|
// Check Absolute Path
|
|
//////////////////////////////////////////////////////////////////
|
|
|
|
isAbsPath: function(path) {
|
|
if ( path.indexOf("/") == 0 ) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
},
|
|
|
|
//////////////////////////////////////////////////////////////////
|
|
// Get Current (Path)
|
|
//////////////////////////////////////////////////////////////////
|
|
|
|
getCurrent: function() {
|
|
var _this = this;
|
|
var currentResponse = null;
|
|
$.ajax({
|
|
url: _this.controller + '?action=current',
|
|
async: false,
|
|
success: function(data) {
|
|
currentResponse = codiad.jsend.parse(data);
|
|
}
|
|
});
|
|
return currentResponse;
|
|
}
|
|
};
|
|
})(this, jQuery);
|