codiad/plugins/Codiad-Permissions-master/init.js

177 lines
5.3 KiB
JavaScript
Executable File

/*
* Copyright (c) Codiad & Andr3as, distributed
* as-is and without warranty under the MIT License.
* See [root]/license.md for more information. This information must remain intact.
*/
(function(global, $){
var codiad = global.codiad,
scripts = document.getElementsByTagName('script'),
path = scripts[scripts.length-1].src.split('?')[0],
curpath = path.split('/').slice(0, -1).join('/')+'/';
$(function() {
codiad.Permissions.init();
});
codiad.Permissions = {
path : curpath,
file : "",
init: function() {
var _this = this;
$('.more_control').live('click', function(e){
$('.more').toggle(0, function(){
$('.more_control span').removeClass('icon-right-open-big');
$('.more_control span').removeClass('icon-down-open-big');
if ($('.more').is(':visible')) {
$('.more_control span').addClass('icon-down-open-big');
} else {
$('.more_control span').addClass('icon-right-open-big');
}
});
});
$('.more input:checkbox').live('change', function(e){
_this.calculateRights();
});
$('#permissions').live('input keyup', function(e){
_this.calculateBoxes($('#permissions').val());
});
},
//////////////////////////////////////////////////////////
//
// Show dialog to modify permissions
//
// Parameters:
//
// path - {String} - File path
//
//////////////////////////////////////////////////////////
showDialog: function(path) {
this.file = path;
codiad.modal.load(100, this.path+"dialog.php?path="+path);
},
//////////////////////////////////////////////////////////
//
// Change permissions
//
//////////////////////////////////////////////////////////
change: function() {
var perm = $('#permissions').val();
codiad.modal.unload();
$.getJSON(this.path+"controller.php?action=changePermission&path="+this.file+"&mode="+perm, function(data){
if (data.status == "error") {
codiad.message.error(data.message);
} else {
codiad.message.success(data.message);
}
});
},
//////////////////////////////////////////////////////////
//
// Calculate rights
//
//////////////////////////////////////////////////////////
calculateRights: function() {
var sum = 0, _this = this;
$('.more input:checkbox').each(function(i, item){
var factor = 1, right = 1;
if (_this.isChecked(item)) {
if ($(item).hasClass('owner')) {
factor = 100;
} else if ($(item).hasClass('group')) {
factor = 10;
}
if ($(item).hasClass('r')) {
right = 4;
} else if($(item).hasClass('w')) {
right = 2;
}
sum += factor * right;
}
});
var obj = $('.more input:checkbox');
if (!this.isChecked(obj[0]) && !this.isChecked(obj[1]) && !this.isChecked(obj[2])) {
sum = '0' + sum;
if (!this.isChecked(obj[3]) && !this.isChecked(obj[4]) && !this.isChecked(obj[5])) {
sum = '0' + sum;
}
}
$('#permissions').val(sum);
},
//////////////////////////////////////////////////////////
//
// Calculate checkboxes
//
// Parameter:
//
// rights - {string} - File rights
//
//////////////////////////////////////////////////////////
calculateBoxes: function(rights) {
$('.more input:checkbox').removeAttr('checked');
var fn = function(right, selector) {
if (right == '1' || right == '3' || right == '5' || right == '7') {
this.selectCheckbox(selector + ' .x');
}
if (right == '2' || right == '3' || right == '6' || right == '7') {
this.selectCheckbox(selector + ' .w');
}
if (right == '4' || right == '5' || right == '6' || right == '7') {
this.selectCheckbox(selector + ' .r');
}
}.bind(this);
if (rights[0] === '0' && rights.length > 3) {
rights = rights.substring(1);
}
if (rights.length < 1) {
rights = '000';
} else if (rights.length < 2) {
rights += '00';
} else {
rights += '0';
}
fn(rights[0], ".owner");
fn(rights[1], ".group");
fn(rights[2], ".other");
},
//////////////////////////////////////////////////////////
//
// Check if checkbox is checked
//
// Parameter:
//
// item - {object} - jQuery object
//
//////////////////////////////////////////////////////////
isChecked: function(item) {
if ($(item).attr('checked') == "checked") {
return true;
} else {
return false;
}
},
//////////////////////////////////////////////////////////
//
// Select checkbox
//
// Parameter:
//
// selector - {string} - Selector of checkbox(s)
//
//////////////////////////////////////////////////////////
selectCheckbox: function(selector) {
$('.more ' + selector).attr('checked', 'checked');
}
};
})(this, jQuery);