chore: import upstream snapshot with attribution

This commit is contained in:
wehub-resource-sync
2026-07-13 13:12:17 +08:00
commit cf8edb9f21
44281 changed files with 1655134 additions and 0 deletions
+160
View File
@@ -0,0 +1,160 @@
body
{
font-size: 12px;
}
#list_form {
clear: both;
}
#listing {
border-collapse: collapse;
width: 100%;
}
#listing td {
padding: 1px;
}
#listing tr.header {
font-weight: bold;
background: #ddd;
}
#list_form tr.checked {
background: #bfb;
}
#list_form tr.checked.even {
background: #cfc;
}
#list_form tr.checked:hover {
background: #bdb;
}
a {
color: #000;
}
a.active {
font-weight: bold;
}
input.hidden {
visibility: hidden;
margin: 0;
}
tr.even {
background: #eee;
}
td.right {
text-align: right;
}
#quicks {
float: right;
}
#quicks a {
display: inline-block;
}
#quicks a:hover {
background: #ccc;
}
.ui_columns {
clear: both;
width: 100%;
}
#info {
float: right;
color: #d22;
margin-right: 10px;
}
.dataTables_filter input {
margin-top: 10px !important;
}
table.dataTable thead .sorting::after,
table.dataTable thead .sorting_asc::after,
table.dataTable thead .sorting_desc::after {
content: "" !important;
}
.dataTables_wrapper .dataTables_paginate .paginate_button {
border: none;
min-width: none;
margin: 0;
padding: 0;
}
.dataTables_wrapper .dataTables_paginate .paginate_button:active,
.dataTables_wrapper .dataTables_paginate .paginate_button:hover {
background: none;
box-shadow: none;
border: none;
}
.breadcrumb {
border: solid 1px #ddd;
background: #fbfbfb;
}
.breadcrumb i {
font-size: 16px;
}
.hdd-icon {
position: relative;
top: 6px;
}
#chattrForm input,
#chconForm input,
#chownForm input {
width: 200px;
}
.modal {
display:none;
}
textarea {
font-family: consolas, monospace !important;
}
label + select, label + input[type="text"] {
max-width: 100%;
}
select, input[type="button"][onclick], button.btn-default.file_chooser_button, button.btn-default.file_chooser_button_emulate, input.form-control.ui_textbox, td > select + input, input + input, input + select, select + input, select + select, input[type="submit"] + select, input[type="submit"] + input[type="submit"], div.table-responsive + input, div.table-responsive > select + input, div.table-responsive > input + select, div.table-responsive > input {
margin: 0 !important;
}
.action-link {
padding-right: 3px;
}
.btn:not(.btn-xs):not(.btn-tiny):not(.ui_link_replaced), .csf button.input, .csf input[type=submit], input[type=button], input[type=reset], input[type=submit], button.btn {
padding: 6px 8px;
}
a:hover {
cursor:pointer;
}
/* by https://github.com/iliajie */
#list_form tbody tr.checked:not(.m-active-o):not(.m-not-active):hover,
#list_form tbody tr:hover:not(.m-active-o):not(.m-not-active) {
background: #d3e4f4 !important;
}
a.pages {
padding: 0 3px;
}
.breadcrumb {
margin-bottom: 10px;
}
.total {
clear: both;
margin-bottom: 10px;
}
span[data-acls],
span[data-attributes],
span[data-secontext] {
font-family: monospace;
font-size: 11px;
}
@@ -0,0 +1,114 @@
/* Styles for jQuery menu widget
Author: Maggie Wachs, maggie@filamentgroup.com
Date: September 2008
*/
/* REQUIRED STYLES - the menus will only render correctly with these rules */
.fg-menu-container { position: absolute; top:0; left:-999px; padding: .4em; overflow: hidden; }
.fg-menu-container.fg-menu-flyout { overflow: visible; }
.fg-menu, .fg-menu ul { list-style-type:none; padding: 0; margin:0; }
.fg-menu { position:relative; }
.fg-menu-flyout .fg-menu { position:static; }
.fg-menu ul { position:absolute; top:0; }
.fg-menu ul ul { top:-1px; }
.fg-menu-container.fg-menu-ipod .fg-menu-content,
.fg-menu-container.fg-menu-ipod .fg-menu-content ul { background: none !important; }
.fg-menu.fg-menu-scroll,
.fg-menu ul.fg-menu-scroll { overflow: scroll; overflow-x: hidden; }
.fg-menu li { clear:both; float:left; width:100%; margin: 0; padding:0; border: 0; }
.fg-menu li li { font-size:1em; } /* inner li font size must be reset so that they don't blow up */
.fg-menu-flyout ul ul { padding: .4em; }
.fg-menu-flyout li { position:relative; }
.fg-menu-scroll { overflow: scroll; overflow-x: hidden; }
.fg-menu-breadcrumb { margin: 0; padding: 0; }
.fg-menu-footer { margin-top: .4em; padding: .4em; }
.fg-menu-header { margin-bottom: .4em; padding: .4em; }
.fg-menu-breadcrumb li { float: left; list-style: none; margin: 0; padding: 0 .2em; font-size: .9em; opacity: .7; }
.fg-menu-breadcrumb li.fg-menu-prev-list,
.fg-menu-breadcrumb li.fg-menu-current-crumb { clear: left; float: none; opacity: 1; }
.fg-menu-breadcrumb li.fg-menu-current-crumb { padding-top: .2em; }
.fg-menu-breadcrumb a,
.fg-menu-breadcrumb span { float: left; }
.fg-menu-footer a:link,
.fg-menu-footer a:visited { float:left; width:100%; text-decoration: none; }
.fg-menu-footer a:hover,
.fg-menu-footer a:active { }
.fg-menu-footer a span { float:left; cursor: pointer; }
.fg-menu-breadcrumb .fg-menu-prev-list a:link,
.fg-menu-breadcrumb .fg-menu-prev-list a:visited,
.fg-menu-breadcrumb .fg-menu-prev-list a:hover,
.fg-menu-breadcrumb .fg-menu-prev-list a:active { background-image: none; text-decoration:none; }
.fg-menu-breadcrumb .fg-menu-prev-list a { float: left; padding-right: .4em; }
.fg-menu-breadcrumb .fg-menu-prev-list a .ui-icon { float: left; }
.fg-menu-breadcrumb .fg-menu-current-crumb a:link,
.fg-menu-breadcrumb .fg-menu-current-crumb a:visited,
.fg-menu-breadcrumb .fg-menu-current-crumb a:hover,
.fg-menu-breadcrumb .fg-menu-current-crumb a:active { display:block; background-image:none; font-size:1.3em; text-decoration:none; }
/* REQUIRED LINK STYLES: links are "display:block" by default; if the menu options are split into
selectable node links and 'next' links, the script floats the node links left and floats the 'next' links to the right */
.fg-menu a:link,
.fg-menu a:visited,
.fg-menu a:hover,
.fg-menu a:active { float:left; width:92%; padding:.3em 3%; text-decoration:none; outline: 0 !important; }
.fg-menu a { border: 1px dashed transparent; }
.fg-menu a.ui-state-default:link,
.fg-menu a.ui-state-default:visited,
.fg-menu a.ui-state-default:hover,
.fg-menu a.ui-state-default:active,
.fg-menu a.ui-state-hover:link,
.fg-menu a.ui-state-hover:visited,
.fg-menu a.ui-state-hover:hover,
.fg-menu a.ui-state-hover:active,
.fg-menu a.ui-state-active:link,
.fg-menu a.ui-state-active:visited,
.fg-menu a.ui-state-active:hover,
.fg-menu a.ui-state-active:active { border-style: solid; font-weight: normal; }
.fg-menu a span { display:block; cursor:pointer; }
/* SUGGESTED STYLES - for use with jQuery UI Themeroller CSS */
.fg-menu-indicator span { float:left; }
.fg-menu-indicator span.ui-icon { float:right; }
.fg-menu-content.ui-widget-content,
.fg-menu-content ul.ui-widget-content { border:0; }
/* ICONS AND DIVIDERS */
.fg-menu.fg-menu-has-icons a:link,
.fg-menu.fg-menu-has-icons a:visited,
.fg-menu.fg-menu-has-icons a:hover,
.fg-menu.fg-menu-has-icons a:active { padding-left:20px; }
.fg-menu .horizontal-divider hr, .fg-menu .horizontal-divider span { padding:0; margin:5px .6em; }
.fg-menu .horizontal-divider hr { border:0; height:1px; }
.fg-menu .horizontal-divider span { font-size:.9em; text-transform: uppercase; padding-left:.2em; }
+648
View File
@@ -0,0 +1,648 @@
/*--------------------------------------------------------------------
Scripts for creating and manipulating custom menus based on standard <ul> markup
Version: 3.0, 03.31.2009
By: Maggie Costello Wachs (maggie@filamentgroup.com) and Scott Jehl (scott@filamentgroup.com)
http://www.filamentgroup.com
* reference articles: http://www.filamentgroup.com/lab/jquery_ipod_style_drilldown_menu/
Copyright (c) 2009 Filament Group
Dual licensed under the MIT (filamentgroup.com/examples/mit-license.txt) and GPL (filamentgroup.com/examples/gpl-license.txt) licenses.
--------------------------------------------------------------------*/
var allUIMenus = [];
$.fn.menu = function(options){
var caller = this;
var options = options;
var m = new Menu(caller, options);
allUIMenus.push(m);
$(this)
.mousedown(function(){
if (!m.menuOpen) { m.showLoading(); };
})
.click(function(){
if (m.menuOpen == false) { m.showMenu(); }
else { m.kill(); };
return false;
});
};
function Menu(caller, options){
var menu = this;
var caller = $(caller);
var container = $('<div class="fg-menu-container ui-widget ui-widget-content ui-corner-all">'+options.content+'</div>');
this.menuOpen = false;
this.menuExists = false;
var options = jQuery.extend({
content: null,
width: 180, // width of menu container, must be set or passed in to calculate widths of child menus
maxHeight: 180, // max height of menu (if a drilldown: height does not include breadcrumb)
positionOpts: {
posX: 'left',
posY: 'bottom',
offsetX: 0,
offsetY: 0,
directionH: 'right',
directionV: 'down',
detectH: true, // do horizontal collision detection
detectV: true, // do vertical collision detection
linkToFront: false
},
showSpeed: 200, // show/hide speed in milliseconds
callerOnState: 'ui-state-active', // class to change the appearance of the link/button when the menu is showing
loadingState: 'ui-state-loading', // class added to the link/button while the menu is created
linkHover: 'ui-state-hover', // class for menu option hover state
linkHoverSecondary: 'li-hover', // alternate class, may be used for multi-level menus
// ----- multi-level menu defaults -----
crossSpeed: 200, // cross-fade speed for multi-level menus
crumbDefaultText: 'Choose an option:',
backLink: true, // in the ipod-style menu: instead of breadcrumbs, show only a 'back' link
backLinkText: 'Back',
flyOut: false, // multi-level menus are ipod-style by default; this parameter overrides to make a flyout instead
flyOutOnState: 'ui-state-default',
nextMenuLink: 'ui-icon-triangle-1-e', // class to style the link (specifically, a span within the link) used in the multi-level menu to show the next level
topLinkText: 'All',
nextCrumbLink: 'ui-icon-carat-1-e'
}, options);
var killAllMenus = function(){
$.each(allUIMenus, function(i){
if (allUIMenus[i].menuOpen) { allUIMenus[i].kill(); };
});
};
this.kill = function(){
caller
.removeClass(options.loadingState)
.removeClass('fg-menu-open')
.removeClass(options.callerOnState);
container.find('li').removeClass(options.linkHoverSecondary).find('a').removeClass(options.linkHover);
if (options.flyOutOnState) { container.find('li a').removeClass(options.flyOutOnState); };
if (options.callerOnState) { caller.removeClass(options.callerOnState); };
if (container.is('.fg-menu-ipod')) { menu.resetDrilldownMenu(); };
if (container.is('.fg-menu-flyout')) { menu.resetFlyoutMenu(); };
container.parent().hide();
menu.menuOpen = false;
$(document).unbind('click', killAllMenus);
$(document).unbind('keydown');
};
this.showLoading = function(){
caller.addClass(options.loadingState);
};
this.showMenu = function(){
killAllMenus();
if (!menu.menuExists) { menu.create() };
caller
.addClass('fg-menu-open')
.addClass(options.callerOnState);
container.parent().show().click(function(){ menu.kill(); return false; });
container.hide().slideDown(options.showSpeed).find('.fg-menu:eq(0)');
menu.menuOpen = true;
caller.removeClass(options.loadingState);
$(document).click(killAllMenus);
// assign key events
$(document).keydown(function(event){
var e;
if (event.which !="") { e = event.which; }
else if (event.charCode != "") { e = event.charCode; }
else if (event.keyCode != "") { e = event.keyCode; }
var menuType = ($(event.target).parents('div').is('.fg-menu-flyout')) ? 'flyout' : 'ipod' ;
switch(e) {
case 37: // left arrow
if (menuType == 'flyout') {
$(event.target).trigger('mouseout');
if ($('.'+options.flyOutOnState).length > 0) { $('.'+options.flyOutOnState).trigger('mouseover'); };
};
if (menuType == 'ipod') {
$(event.target).trigger('mouseout');
if ($('.fg-menu-footer').find('a').length > 0) { $('.fg-menu-footer').find('a').trigger('click'); };
if ($('.fg-menu-header').find('a').length > 0) { $('.fg-menu-current-crumb').prev().find('a').trigger('click'); };
if ($('.fg-menu-current').prev().is('.fg-menu-indicator')) {
$('.fg-menu-current').prev().trigger('mouseover');
};
};
return false;
break;
case 38: // up arrow
if ($(event.target).is('.' + options.linkHover)) {
var prevLink = $(event.target).parent().prev().find('a:eq(0)');
if (prevLink.length > 0) {
$(event.target).trigger('mouseout');
prevLink.trigger('mouseover');
};
}
else { container.find('a:eq(0)').trigger('mouseover'); }
return false;
break;
case 39: // right arrow
if ($(event.target).is('.fg-menu-indicator')) {
if (menuType == 'flyout') {
$(event.target).next().find('a:eq(0)').trigger('mouseover');
}
else if (menuType == 'ipod') {
$(event.target).trigger('click');
setTimeout(function(){
$(event.target).next().find('a:eq(0)').trigger('mouseover');
}, options.crossSpeed);
};
};
return false;
break;
case 40: // down arrow
if ($(event.target).is('.' + options.linkHover)) {
var nextLink = $(event.target).parent().next().find('a:eq(0)');
if (nextLink.length > 0) {
$(event.target).trigger('mouseout');
nextLink.trigger('mouseover');
};
}
else { container.find('a:eq(0)').trigger('mouseover'); }
return false;
break;
case 27: // escape
killAllMenus();
break;
case 13: // enter
if ($(event.target).is('.fg-menu-indicator') && menuType == 'ipod') {
$(event.target).trigger('click');
setTimeout(function(){
$(event.target).next().find('a:eq(0)').trigger('mouseover');
}, options.crossSpeed);
};
break;
};
});
};
this.create = function() {
container.css({ width: options.width }).appendTo('body').find('ul:first').not('.fg-menu-breadcrumb').addClass('fg-menu');
container.find('ul, li a').addClass('ui-corner-all');
// aria roles & attributes
container.find('ul').attr('role', 'menu').eq(0).attr('aria-activedescendant','active-menuitem').attr('aria-labelledby', caller.attr('id'));
container.find('li').attr('role', 'menuitem');
container.find('li:has(ul)').attr('aria-haspopup', 'true').find('ul').attr('aria-expanded', 'false');
container.find('a').attr('tabindex', '-1');
// when there are multiple levels of hierarchy, create flyout or drilldown menu
if (container.find('ul').length > 1) {
if (options.flyOut) { menu.flyout(container, options); }
else { menu.drilldown(container, options); }
}
else {
container.find('a').click(function(){
menu.chooseItem(this);
return false;
});
};
if (options.linkHover) {
var allLinks = container.find('.fg-menu li a');
allLinks.hover(
function(){
var menuitem = $(this);
$('.'+options.linkHover).removeClass(options.linkHover).blur().parent().removeAttr('id');
$(this).addClass(options.linkHover).focus().parent().attr('id','active-menuitem');
},
function(){
$(this).removeClass(options.linkHover).blur().parent().removeAttr('id');
}
);
};
if (options.linkHoverSecondary) {
container.find('.fg-menu li').hover(
function(){
$(this).siblings('li').removeClass(options.linkHoverSecondary);
if (options.flyOutOnState) { $(this).siblings('li').find('a').removeClass(options.flyOutOnState); }
$(this).addClass(options.linkHoverSecondary);
},
function(){ $(this).removeClass(options.linkHoverSecondary); }
);
};
menu.setPosition(container, caller, options);
menu.menuExists = true;
// Hide empty
container.find('a:empty').parent('li').hide()
};
this.chooseItem = function(item){
menu.kill();
// edit this for your own custom function/callback:
$('#menuSelection').text($(item).text());
location.href = $(item).attr('href');
};
};
Menu.prototype.flyout = function(container, options) {
var menu = this;
this.resetFlyoutMenu = function(){
var allLists = container.find('ul ul');
allLists.removeClass('ui-widget-content').hide();
};
container.addClass('fg-menu-flyout').find('li:has(ul)').each(function(){
var linkWidth = container.width();
var showTimer, hideTimer;
var allSubLists = $(this).find('ul');
allSubLists.css({ left: linkWidth, width: linkWidth }).hide();
$(this).find('a:eq(0)').addClass('fg-menu-indicator').html('<span>' + $(this).find('a:eq(0)').text() + '</span><span class="ui-icon '+options.nextMenuLink+'"></span>').hover(
function(){
clearTimeout(hideTimer);
var subList = $(this).next();
if (!fitVertical(subList, $(this).offset().top)) { subList.css({ top: 'auto', bottom: 0 }); };
if (!fitHorizontal(subList, $(this).offset().left + 100)) { subList.css({ left: 'auto', right: linkWidth, 'z-index': 999 }); };
showTimer = setTimeout(function(){
subList.addClass('ui-widget-content').show(options.showSpeed).attr('aria-expanded', 'true');
}, 300);
},
function(){
clearTimeout(showTimer);
var subList = $(this).next();
hideTimer = setTimeout(function(){
subList.removeClass('ui-widget-content').hide(options.showSpeed).attr('aria-expanded', 'false');
}, 400);
}
);
$(this).find('ul a').hover(
function(){
clearTimeout(hideTimer);
if ($(this).parents('ul').prev().is('a.fg-menu-indicator')) {
$(this).parents('ul').prev().addClass(options.flyOutOnState);
}
},
function(){
hideTimer = setTimeout(function(){
allSubLists.hide(options.showSpeed);
container.find(options.flyOutOnState).removeClass(options.flyOutOnState);
}, 500);
}
);
});
container.find('a').click(function(){
menu.chooseItem(this);
return false;
});
};
Menu.prototype.drilldown = function(container, options) {
var menu = this;
var topList = container.find('.fg-menu');
var breadcrumb = $('<ul class="fg-menu-breadcrumb ui-widget-header ui-corner-all ui-helper-clearfix"></ul>');
var crumbDefaultHeader = $('<li class="fg-menu-breadcrumb-text">'+options.crumbDefaultText+'</li>');
var firstCrumbText = (options.backLink) ? options.backLinkText : options.topLinkText;
var firstCrumbClass = (options.backLink) ? 'fg-menu-prev-list' : 'fg-menu-all-lists';
var firstCrumbLinkClass = (options.backLink) ? 'ui-state-default ui-corner-all' : '';
var firstCrumbIcon = (options.backLink) ? '<span class="ui-icon ui-icon-triangle-1-w"></span>' : '';
var firstCrumb = $('<li class="'+firstCrumbClass+'"><a href="#" class="'+firstCrumbLinkClass+'">'+firstCrumbIcon+firstCrumbText+'</a></li>');
container.addClass('fg-menu-ipod');
if (options.backLink) { breadcrumb.addClass('fg-menu-footer').appendTo(container).hide(); }
else { breadcrumb.addClass('fg-menu-header').prependTo(container); };
breadcrumb.append(crumbDefaultHeader);
var checkMenuHeight = function(el){
if (el.height() > options.maxHeight) { el.addClass('fg-menu-scroll') };
el.css({ height: options.maxHeight });
};
var resetChildMenu = function(el){ el.removeClass('fg-menu-scroll').removeClass('fg-menu-current').height('auto'); };
this.resetDrilldownMenu = function(){
$('.fg-menu-current').removeClass('fg-menu-current');
topList.animate({ left: 0 }, options.crossSpeed, function(){
$(this).find('ul').each(function(){
$(this).hide();
resetChildMenu($(this));
});
topList.addClass('fg-menu-current');
});
$('.fg-menu-all-lists').find('span').remove();
breadcrumb.empty().append(crumbDefaultHeader);
$('.fg-menu-footer').empty().hide();
checkMenuHeight(topList);
};
topList
.addClass('fg-menu-content fg-menu-current ui-widget-content ui-helper-clearfix')
.css({ width: container.width() })
.find('ul')
.css({ width: container.width(), left: container.width() })
.addClass('ui-widget-content')
.hide();
checkMenuHeight(topList);
topList.find('a').each(function(){
// if the link opens a child menu:
if ($(this).next().is('ul')) {
$(this)
.addClass('fg-menu-indicator')
.each(function(){ $(this).html('<span>' + $(this).text() + '</span><span class="ui-icon '+options.nextMenuLink+'"></span>'); })
.click(function(){ // ----- show the next menu
var nextList = $(this).next();
var parentUl = $(this).parents('ul:eq(0)');
var parentLeft = (parentUl.is('.fg-menu-content')) ? 0 : parseFloat(topList.css('left'));
var nextLeftVal = Math.round(parentLeft - parseFloat(container.width()));
var footer = $('.fg-menu-footer');
// show next menu
resetChildMenu(parentUl);
checkMenuHeight(nextList);
topList.animate({ left: nextLeftVal }, options.crossSpeed);
nextList.show().addClass('fg-menu-current').attr('aria-expanded', 'true');
var setPrevMenu = function(backlink){
var b = backlink;
var c = $('.fg-menu-current');
var prevList = c.parents('ul:eq(0)');
c.hide().attr('aria-expanded', 'false');
resetChildMenu(c);
checkMenuHeight(prevList);
prevList.addClass('fg-menu-current').attr('aria-expanded', 'true');
if (prevList.hasClass('fg-menu-content')) { b.remove(); footer.hide(); };
};
// initialize "back" link
if (options.backLink) {
if (footer.find('a').length == 0) {
footer.show();
$('<a href="#"><span class="ui-icon ui-icon-triangle-1-w"></span> <span>Back</span></a>')
.appendTo(footer)
.click(function(){ // ----- show the previous menu
var b = $(this);
var prevLeftVal = parseFloat(topList.css('left')) + container.width();
topList.animate({ left: prevLeftVal }, options.crossSpeed, function(){
setPrevMenu(b);
});
return false;
});
}
}
// or initialize top breadcrumb
else {
if (breadcrumb.find('li').length == 1){
breadcrumb.empty().append(firstCrumb);
firstCrumb.find('a').click(function(){
menu.resetDrilldownMenu();
return false;
});
}
$('.fg-menu-current-crumb').removeClass('fg-menu-current-crumb');
var crumbText = $(this).find('span:eq(0)').text();
var newCrumb = $('<li class="fg-menu-current-crumb"><a href="javascript://" class="fg-menu-crumb">'+crumbText+'</a></li>');
newCrumb
.appendTo(breadcrumb)
.find('a').click(function(){
if ($(this).parent().is('.fg-menu-current-crumb')){
menu.chooseItem(this);
}
else {
var newLeftVal = - ($('.fg-menu-current').parents('ul').length - 1) * 180;
topList.animate({ left: newLeftVal }, options.crossSpeed, function(){
setPrevMenu();
});
// make this the current crumb, delete all breadcrumbs after this one, and navigate to the relevant menu
$(this).parent().addClass('fg-menu-current-crumb').find('span').remove();
$(this).parent().nextAll().remove();
};
return false;
});
newCrumb.prev().append(' <span class="ui-icon '+options.nextCrumbLink+'"></span>');
};
return false;
});
}
// if the link is a leaf node (doesn't open a child menu)
else {
$(this).click(function(){
menu.chooseItem(this);
return false;
});
};
});
};
/* Menu.prototype.setPosition parameters (defaults noted with *):
referrer = the link (or other element) used to show the overlaid object
settings = can override the defaults:
- posX/Y: where the top left corner of the object should be positioned in relation to its referrer.
X: left*, center, right
Y: top, center, bottom*
- offsetX/Y: the number of pixels to be offset from the x or y position. Can be a positive or negative number.
- directionH/V: where the entire menu should appear in relation to its referrer.
Horizontal: left*, right
Vertical: up, down*
- detectH/V: detect the viewport horizontally / vertically
- linkToFront: copy the menu link and place it on top of the menu (visual effect to make it look like it overlaps the object) */
Menu.prototype.setPosition = function(widget, caller, options) {
var el = widget;
var referrer = caller;
var dims = {
refX: referrer.offset().left,
refY: referrer.offset().top,
refW: referrer.getTotalWidth(),
refH: referrer.getTotalHeight()
};
var options = options;
var xVal, yVal;
var helper = $('<div class="positionHelper"></div>');
helper.css({ position: 'absolute', left: dims.refX, top: dims.refY, width: dims.refW, height: dims.refH });
el.wrap(helper);
// get X pos
switch(options.positionOpts.posX) {
case 'left': xVal = 0;
break;
case 'center': xVal = dims.refW / 2;
break;
case 'right': xVal = dims.refW;
break;
};
// get Y pos
switch(options.positionOpts.posY) {
case 'top': yVal = 0;
break;
case 'center': yVal = dims.refH / 2;
break;
case 'bottom': yVal = dims.refH;
break;
};
// add the offsets (zero by default)
xVal += options.positionOpts.offsetX;
yVal += options.positionOpts.offsetY;
// position the object vertically
if (options.positionOpts.directionV == 'up') {
el.css({ top: 'auto', bottom: yVal });
if (options.positionOpts.detectV && !fitVertical(el)) {
el.css({ bottom: 'auto', top: yVal });
}
}
else {
el.css({ bottom: 'auto', top: yVal });
if (options.positionOpts.detectV && !fitVertical(el)) {
el.css({ top: 'auto', bottom: yVal });
}
};
// and horizontally
if (options.positionOpts.directionH == 'left') {
el.css({ left: 'auto', right: xVal });
if (options.positionOpts.detectH && !fitHorizontal(el)) {
el.css({ right: 'auto', left: xVal });
}
}
else {
el.css({ right: 'auto', left: xVal });
if (options.positionOpts.detectH && !fitHorizontal(el)) {
el.css({ left: 'auto', right: xVal });
}
};
// if specified, clone the referring element and position it so that it appears on top of the menu
if (options.positionOpts.linkToFront) {
referrer.clone().addClass('linkClone').css({
position: 'absolute',
top: 0,
right: 'auto',
bottom: 'auto',
left: 0,
width: referrer.width(),
height: referrer.height()
}).insertAfter(el);
};
};
/* Utilities to sort and find viewport dimensions */
function sortBigToSmall(a, b) { return b - a; };
jQuery.fn.getTotalWidth = function(){
return $(this).width() + parseInt($(this).css('paddingRight')) + parseInt($(this).css('paddingLeft')) + parseInt($(this).css('borderRightWidth')) + parseInt($(this).css('borderLeftWidth'));
};
jQuery.fn.getTotalHeight = function(){
return $(this).height() + parseInt($(this).css('paddingTop')) + parseInt($(this).css('paddingBottom')) + parseInt($(this).css('borderTopWidth')) + parseInt($(this).css('borderBottomWidth'));
};
function getScrollTop(){
return self.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;
};
function getScrollLeft(){
return self.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft;
};
function getWindowHeight(){
var de = document.documentElement;
return self.innerHeight || (de && de.clientHeight) || document.body.clientHeight;
};
function getWindowWidth(){
var de = document.documentElement;
return self.innerWidth || (de && de.clientWidth) || document.body.clientWidth;
};
/* Utilities to test whether an element will fit in the viewport
Parameters:
el = element to position, required
leftOffset / topOffset = optional parameter if the offset cannot be calculated (i.e., if the object is in the DOM but is set to display: 'none') */
function fitHorizontal(el, leftOffset){
var leftVal = parseInt(leftOffset) || $(el).offset().left;
return (leftVal + $(el).width() <= getWindowWidth() + getScrollLeft() && leftVal - getScrollLeft() >= 0);
};
function fitVertical(el, topOffset){
var topVal = parseInt(topOffset) || $(el).offset().top;
return (topVal + $(el).height() <= getWindowHeight() + getScrollTop() && topVal - getScrollTop() >= 0);
};
/*--------------------------------------------------------------------
* javascript method: "pxToEm"
* by:
Scott Jehl (scott@filamentgroup.com)
Maggie Wachs (maggie@filamentgroup.com)
http://www.filamentgroup.com
*
* Copyright (c) 2008 Filament Group
* Dual licensed under the MIT (filamentgroup.com/examples/mit-license.txt) and GPL (filamentgroup.com/examples/gpl-license.txt) licenses.
*
* Description: Extends the native Number and String objects with pxToEm method. pxToEm converts a pixel value to ems depending on inherited font size.
* Article: http://www.filamentgroup.com/lab/retaining_scalable_interfaces_with_pixel_to_em_conversion/
* Demo: http://www.filamentgroup.com/examples/pxToEm/
*
* Options:
scope: string or jQuery selector for font-size scoping
reverse: Boolean, true reverses the conversion to em-px
* Dependencies: jQuery library
* Usage Example: myPixelValue.pxToEm(); or myPixelValue.pxToEm({'scope':'#navigation', reverse: true});
*
* Version: 2.0, 08.01.2008
* Changelog:
* 08.02.2007 initial Version 1.0
* 08.01.2008 - fixed font-size calculation for IE
--------------------------------------------------------------------*/
Number.prototype.pxToEm = String.prototype.pxToEm = function(settings){
//set defaults
settings = jQuery.extend({
scope: 'body',
reverse: false
}, settings);
var pxVal = (this == '') ? 0 : parseFloat(this);
var scopeVal;
var getWindowWidth = function(){
var de = document.documentElement;
return self.innerWidth || (de && de.clientWidth) || document.body.clientWidth;
};
/* When a percentage-based font-size is set on the body, IE returns that percent of the window width as the font-size.
For example, if the body font-size is 62.5% and the window width is 1000px, IE will return 625px as the font-size.
When this happens, we calculate the correct body font-size (%) and multiply it by 16 (the standard browser font size)
to get an accurate em value. */
if (settings.scope == 'body' && $.browser.msie && (parseFloat($('body').css('font-size')) / getWindowWidth()).toFixed(1) > 0.0) {
var calcFontSize = function(){
return (parseFloat($('body').css('font-size'))/getWindowWidth()).toFixed(3) * 16;
};
scopeVal = calcFontSize();
}
else { scopeVal = parseFloat(jQuery(settings.scope).css("font-size")); };
var result = (settings.reverse == true) ? (pxVal * scopeVal).toFixed(2) + 'px' : (pxVal / scopeVal).toFixed(2) + 'em';
return result;
};
Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,12 @@
/**
* @preserve
* Project: Bootstrap Hover Dropdown
* Author: Cameron Spear
* Version: v2.1.3
* Contributors: Mattia Larentis
* Dependencies: Bootstrap's Dropdown plugin, jQuery
* Description: A simple plugin to enable Bootstrap dropdowns to active on hover and provide a nice user experience.
* License: MIT
* Homepage: http://cameronspear.com/blog/bootstrap-dropdown-on-hover-plugin/
*/
!function(e,n){var o=e();e.fn.dropdownHover=function(t){return"ontouchstart"in document?this:(o=o.add(this.parent()),this.each(function(){function r(){n.clearTimeout(a),n.clearTimeout(i),i=n.setTimeout(function(){o.find(":focus").blur(),f.instantlyCloseOthers===!0&&o.removeClass("open"),n.clearTimeout(i),d.attr("aria-expanded","true"),s.addClass("open"),d.trigger(l)},f.hoverDelay)}var a,i,d=e(this),s=d.parent(),u={delay:500,hoverDelay:0,instantlyCloseOthers:!0},h={delay:e(this).data("delay"),hoverDelay:e(this).data("hover-delay"),instantlyCloseOthers:e(this).data("close-others")},l="show.bs.dropdown",c="hide.bs.dropdown",f=e.extend(!0,{},u,t,h);s.hover(function(e){return s.hasClass("open")||d.is(e.target)?void r(e):!0},function(){n.clearTimeout(i),a=n.setTimeout(function(){d.attr("aria-expanded","false"),s.removeClass("open"),d.trigger(c)},f.delay)}),d.hover(function(e){return s.hasClass("open")||s.is(e.target)?void r(e):!0}),s.find(".dropdown-submenu").each(function(){var o,t=e(this);t.hover(function(){n.clearTimeout(o),t.children(".dropdown-menu").show(),t.siblings().children(".dropdown-menu").hide()},function(){var e=t.children(".dropdown-menu");o=n.setTimeout(function(){e.hide()},f.delay)})})}))},e(document).ready(function(){e('[data-hover="dropdown"]').dropdownHover()})}(jQuery,window);
@@ -0,0 +1,80 @@
/*
Jeroen's Chmod Calculator- By Jeroen Vermeulen of Alphamega Hosting <jeroen@alphamegahosting.com>
Visit http://www.javascriptkit.com for this script and more
This notice must stay intact
*/
function octalchange()
{
var val = document.chmod.t_total.value;
var extrabin = parseInt(val.charAt(0)).toString(2);
while (extrabin.length<2) { extrabin="0"+extrabin; };
var ownerbin = parseInt(val.charAt(1)).toString(2);
while (ownerbin.length<4) { ownerbin="0"+ownerbin; };
var groupbin = parseInt(val.charAt(2)).toString(2);
while (groupbin.length<4) { groupbin="0"+groupbin; };
var otherbin = parseInt(val.charAt(3)).toString(2);
while (otherbin.length<4) { otherbin="0"+otherbin; };
document.chmod.sticky.checked = parseInt(extrabin.charAt(1));
document.chmod.setgid.checked = parseInt(extrabin.charAt(0));
document.chmod.owner4.checked = parseInt(ownerbin.charAt(1));
document.chmod.owner2.checked = parseInt(ownerbin.charAt(2));
document.chmod.owner1.checked = parseInt(ownerbin.charAt(3));
document.chmod.group4.checked = parseInt(groupbin.charAt(1));
document.chmod.group2.checked = parseInt(groupbin.charAt(2));
document.chmod.group1.checked = parseInt(groupbin.charAt(3));
document.chmod.other4.checked = parseInt(otherbin.charAt(1));
document.chmod.other2.checked = parseInt(otherbin.charAt(2));
document.chmod.other1.checked = parseInt(otherbin.charAt(3));
calc_chmod(1);
};
function calc_chmod(nototals)
{
var users = new Array("owner", "group", "other");
var totals = new Array("","","","");
var syms = new Array("","","");
if (document.chmod['sticky'].checked == true) { totals[0] = 1; } else { totals[0] = 0; }
if (document.chmod['setgid'].checked == true) { totals[0] = totals[0] + 2; }
for (var i=0; i<users.length; i++)
{
var user=users[i];
var field4 = user + "4";
var field2 = user + "2";
var field1 = user + "1";
//var total = "t_" + user;
var symbolic = "sym_" + user;
var number = 0;
var sym_string = "";
if (document.chmod[field4].checked == true) { number += 4; }
if (document.chmod[field2].checked == true) { number += 2; }
if (document.chmod[field1].checked == true) { number += 1; }
if (document.chmod[field4].checked == true) {
sym_string += "r";
} else {
sym_string += "-";
}
if (document.chmod[field2].checked == true) {
sym_string += "w";
} else {
sym_string += "-";
}
if (document.chmod[field1].checked == true) {
sym_string += "x";
} else {
sym_string += "-";
}
totals[i + 1] = totals[i + 1]+number;
syms[i] = syms[i]+sym_string;
};
if (!nototals) document.chmod.t_total.value = totals[0] + totals[1] + totals[2] + totals[3];
document.chmod.sym_total.value = "-" + syms[0] + syms[1] + syms[2];
}
window.onload=octalchange
+475
View File
@@ -0,0 +1,475 @@
$( document ).ready(function() {
/*
$( "input[title]" ).tooltip({
position: {
my: "left top",
at: "right+5 top-5"
}
});
/*
$( "a[title]" ).tooltip({
position: {
my: "bottom center",
at: "bottom+30"
}
});*/
$('tr').removeAttr('onmouseover');
$('tr').removeAttr('onmouseout');
$('input').removeAttr('onclick');
$('._select-unselect_').change(function() { selectUnselect($(this)); });
// BUTTONS
$('.fg-button').hover(
function(){ $(this).removeClass('ui-state-default').addClass('ui-state-focus'); },
function(){ $(this).removeClass('ui-state-focus').addClass('ui-state-default'); }
);
// MENUS
$('#flat').menu({
content: $('#flat').next().html(), // grab content from this page
showSpeed: 100
});
});
window.onload = function() {
var checkboxes = document.getElementsByClassName('ui_checkbox');
for(var i = 0; i < checkboxes.length; i++) {
checkboxes[i].onclick = function() {
var row = this.parentNode.parentNode;
if (this.checked) {
row.className = row.className + ' checked';
}
else {
row.className = row.className.replace(' checked', '');
}
};
}
}
function countUploads(files) {
if(files.files.length = 0) return;
var info = '';
for (i = 0; i < files.files.length; i++) {
info += files.files[i].name + '<br>';
}
$('#readyForUploadList').html(info);
}
function selectAll() {
var rows = document.getElementsByClassName('ui_checked_columns');
for (i = 0; i < rows.length; i++) {
var input = rows[i].getElementsByTagName('input')[0];
if (!input.checked) {
rowClick(rows[i]);
}
}
}
function invertSelection() {
var rows = document.getElementsByClassName('ui_checked_columns');
for (i = 0; i < rows.length; i++)
rowClick(rows[i]);
}
function compressDialog() {
if(checkSelected()) {
$( "#compressDialog" ).dialog({
modal: true,
buttons: {
"Compress": function() {
compressSelected();
},
"Cancel": function() {
$( this ).dialog( "close" );
}
}
});
}
}
function compressSelected() {
var filename = $('#compressSelectedForm input[name=filename]').val();
if (filename != null && filename != "") {
var method = $('#compressSelectedForm select[name=method] option:selected').val();
$('#list_form').attr('action', "compress.cgi?arch=" + filename + "&method=" + method);
$('#list_form').submit();
}
}
function removeSelected() {
if(checkSelected()) {
$('#items-to-remove').html('');
$(".ui_checked_checkbox input[type='checkbox']:checked").each(function() {
$('#items-to-remove').append($(this).val() + '<br>');
});
$( "#removeDialog" ).dialog({
modal: true,
buttons: {
"YES": function() {
document.forms['list_form'].action = "delete.cgi";
document.forms['list_form'].submit();
},
"NO": function() {
$( this ).dialog( "close" );
}
}
});
}
}
function chmodDialog() {
if(checkSelected()) {
$( "#chmodDialog" ).dialog({
modal: true,
minWidth: 550,
buttons: {
"Change": function() {
chmodSelected();
},
"Cancel": function() {
$( this ).dialog( "close" );
}
}
});
}
}
function chmodSelected() {
var perms = $('#perms').val();
if (perms != null && perms != "") {
var applyto = $('#chmodForm select[name=applyto] option:selected').val();
$('#list_form').attr('action', "chmod.cgi?perms=" + perms + "&applyto=" + applyto);
$('#list_form').submit();
}
}
function chownDialog() {
if(checkSelected()) {
$( "#chownDialog" ).dialog({
modal: true,
buttons: {
"Change": function() {
chownSelected();
},
"Cancel": function() {
$( this ).dialog( "close" );
}
}
});
}
}
function chownSelected() {
var owner = $('#chownForm input[name=owner]').val();
var group = $('#chownForm input[name=group]').val();
var recursive = $('#chown-recursive').prop('checked');
if (owner != null && owner != "" && group != null && group != "") {
$('#list_form').attr('action', "chown.cgi?owner=" + owner + "&group=" + group + "&recursive=" + recursive);
$('#list_form').submit();
}
}
function chattrDialog() {
if(checkSelected()) {
$( "#chattrDialog" ).dialog({
modal: true,
buttons: {
"Change": function() {
chattrSelected();
},
"Cancel": function() {
$( this ).dialog( "close" );
}
}
});
}
}
function chattrSelected() {
var label = $('#chattrForm input[name=label]').val(),
recursive = $('#chattr-recursive').prop('checked');
if (label != null && label != "") {
$('#list_form').attr('action', "chattr.cgi?label=" + encodeURIComponent(label) + "&recursive=" + recursive);
$('#list_form').submit();
}
}
function chconDialog() {
if(checkSelected()) {
$( "#chconDialog" ).dialog({
modal: true,
buttons: {
"Change": function() {
chconSelected();
},
"Cancel": function() {
$( this ).dialog( "close" );
}
}
});
}
}
function chconSelected() {
var label = $('#chconForm input[name=label]').val(),
recursive = $('#chcon-recursive').prop('checked');
if (label != null && label != "") {
$('#list_form').attr('action', "chcon.cgi?label=" + label + "&recursive=" + recursive);
$('#list_form').submit();
}
}
function aclsDialog() {
if(checkSelected()) {
$( "#aclsDialog" ).dialog({
modal: true,
buttons: {
"Change": function() {
aclsSelected();
},
"Cancel": function() {
$( this ).dialog( "close" );
}
}
});
}
}
function aclsSelected() {
var aclsForm = $('#aclsForm').serialize();
$('#list_form').attr('action', "setfacl.cgi?" + aclsForm);
$('#list_form').submit();
}
function renameDialog(file) {
$("#renameForm input[name=name]").val(file);
$("#renameForm input[name=file]").val(file);
$( "#renameDialog" ).dialog({
modal: true,
buttons: {
"Rename": function() {
renameSelected();
},
"Cancel": function() {
$( this ).dialog( "close" );
}
}
});
}
function renameSelected() {
var name = $('#renameForm input[name=name]').val();
var file = $('#renameForm input[name=file]').val();
if (name != null && name != "" && name != file) {
$('#renameForm').submit();
}
}
function copySelected() {
if(checkSelected()) {
document.forms['list_form'].action = "copy.cgi";
document.forms['list_form'].submit();
}
}
function cutSelected() {
if(checkSelected()) {
document.forms['list_form'].action = "cut.cgi";
document.forms['list_form'].submit();
}
}
function viewReadyForUpload() {
$( "#readyForUploadDialog" ).dialog({
modal: true,
buttons: {
"OK": function() {
uploadFiles();
},
"Cancel": function() {
$( this ).dialog( "close" );
}
}
});
}
function browseForUpload() {
var files = document.getElementById('upfiles');
files.click();
return true;
}
function uploadFiles() {
var files = document.getElementById('upfiles');
if (files.files.length > 0)
$('#upload-form').submit();
else
files.click();
}
function createFolderDialog() {
$( "#createFolderDialog" ).dialog({
modal: true,
buttons: {
"Create": function() {
createFolder();
},
"Cancel": function() {
$( this ).dialog( "close" );
}
}
});
}
function createFolder() {
var name = $('#createFolderForm input[name=name]').val();
if (name != null && name != "")
$("#createFolderForm").submit();
else {
/* var tooltip = $('#createFolderForm input[name=name]').tooltip({
position: {
my: "left top",
at: "right+5 top-5"
}
});
tooltip.tooltip('open');*/
$('#createFolderForm input[name=name]').tooltip('open');
}
}
function createFileDialog() {
$( "#createFileDialog" ).dialog({
modal: true,
buttons: {
"Create": function() {
createFile();
},
"Cancel": function() {
$( this ).dialog( "close" );
}
}
});
}
function createFile() {
var name = $('#createFileForm input[name=name]').val();
if (name != null && name != "") {
$("#createFileForm").submit();
}
}
function downFromUrlDialog() {
$( "#downFromUrlDialog" ).dialog({
modal: true,
buttons: {
"Download": function() {
downFromUrl();
},
"Cancel": function() {
$( this ).dialog( "close" );
}
}
});
}
function downFromUrl() {
var link = $('#downFromUrlForm input[name=link]').val();
if (link != null && link != "")
$('#downFromUrlForm').submit();
}
function selectUnselect(cb) {
var rows = $('.ui_checked_columns');
for (i = 0; i < rows.length; i++) {
switch(cb.is(":checked")) {
case true:
selectRow(rows[i]);
break;
case false:
unselectRow(rows[i]);
break;
}
}
}
function rowClick(row) {
var input = row.getElementsByTagName('input')[0];
input.checked = !input.checked;
if (input.checked) {
row.className = row.className + ' checked';
}
else {
row.className = row.className.replace(' checked', '');
}
}
function selectRow(row) {
var input = row.getElementsByTagName('input')[0];
if(!input.checked) {
input.checked = true;
row.className = row.className + ' checked';
}
}
function unselectRow(row) {
var input = row.getElementsByTagName('input')[0];
if(input.checked) {
input.checked = false;
row.className = row.className.replace(' checked', '');
}
}
function checkSelected() {
var checkboxes = $('.ui_checkbox');
for(var i = 0; i < checkboxes.length; i++) {
if(checkboxes[i].checked) return true;
}
$( "#nothingSelected" ).dialog({
modal: true,
buttons: {
"OK": function() {
$( this ).dialog( "close" );
}
}
});
return false;
}
function searchDialog() {
$( "#searchDialog" ).dialog({
modal: true,
buttons: {
"Search": function() {
search();
},
"Cancel": function() {
$( this ).dialog( "close" );
}
}
});
}
function search() {
var query = $('#searchForm input[name=query]').val();
if (query != null && query != "")
$("#searchForm").submit();
}
/*
function checkSelected() {
var checkboxes = document.getElementsByClassName('ui_checkbox');
for(var i = 0; i < checkboxes.length; i++) {
if(checkboxes[i].checked) return true;
}
alert('Nothing selected');
return false;
}
*/
+362
View File
@@ -0,0 +1,362 @@
function countUploads(files) {
if(files.files.length = 0) return;
var info = '';
for (i = 0; i < files.files.length; i++) {
info += files.files[i].name + '<br>';
}
$('#readyForUploadList').html(info);
}
function invertSelection() {
var rows = document.getElementsByClassName('ui_checked_columns');
for (i = 0; i < rows.length; i++)
rowClick(rows[i]);
}
function selectAll() {
var rows = document.getElementsByClassName('ui_checked_columns');
for (i = 0; i < rows.length; i++) {
var input = rows[i].getElementsByTagName('input')[0];
if (!input.checked) {
rowClick(rows[i]);
}
}
}
function invertSelection() {
var rows = document.getElementsByClassName('ui_checked_columns');
for (i = 0; i < rows.length; i++)
rowClick(rows[i]);
}
function compressDialog() {
if(checkSelected())
$("#compressDialog").modal({
"backdrop" : "static",
"keyboard" : true,
"show" : true
});
}
function compressSelected() {
var filename = $('#compressSelectedForm input[name=filename]').val();
if (filename != null && filename != "") {
var method = $('#compressSelectedForm select[name=method] option:selected').val();
$('#list_form').attr('action', "compress.cgi?arch=" + filename + "&method=" + method);
$('#list_form').submit();
} else {
$('#compressSelectedForm input[name=filename]').popover('show');
$('#compressSelectedForm input[name=filename]').focus();
}
}
function removeDialog() {
if(checkSelected()) {
$('#items-to-remove').html('');
$(".ui_checked_checkbox input[type='checkbox']:checked").each(function() {
$('#items-to-remove').append($(this).val() + '<br>');
});
$("#removeDialog").modal({
"backdrop" : "static",
"keyboard" : true,
"show" : true
});
}
}
function removeSelected() {
$('#list_form').attr('action', "delete.cgi");
$('#list_form').submit();
}
function chmodDialog() {
if(checkSelected())
$("#chmodDialog").modal({
"backdrop" : "static",
"keyboard" : true,
"show" : true
});
}
function chmodSelected() {
var perms = $('#perms').val();
var recursive = $('#recursive').prop('checked');
if (perms != null && perms != "") {
var applyto = $('#chmodForm select[name=applyto] option:selected').val();
$('#list_form').attr('action', "chmod.cgi?perms=" + perms + "&applyto=" + applyto);
$('#list_form').submit();
}
}
function chownDialog() {
if(checkSelected())
$("#chownDialog").modal({
"backdrop" : "static",
"keyboard" : true,
"show" : true
});
}
function chownSelected() {
var owner = $('#chownForm input[name=owner]').val();
var group = $('#chownForm input[name=group]').val();
var recursive = $('#chown-recursive').prop('checked');
if (owner == null || owner == "") {
$('#chownForm input[name=owner]').popover('show');
$('#chownForm input[name=owner]').focus();
}
if (group == null || group == "") {
$('#chownForm input[name=group]').popover('show');
$('#chownForm input[name=group]').focus();
}
if (owner != null && owner != "" && group != null && group != "") {
$('#list_form').attr('action', "chown.cgi?owner=" + owner + "&group=" + group + "&recursive=" + recursive);
$('#list_form').submit();
}
}
function chattrDialog() {
if(checkSelected())
$("#chattrDialog").modal({
"backdrop" : "static",
"keyboard" : true,
"show" : true
});
}
function chattrSelected() {
var label = $('#chattrForm input[name=label]').val();
var recursive = $('#chattr-recursive').prop('checked');
if (label == null || label == "") {
$('#chattrForm input[name=label]').focus();
} else if (label != null && label != "" ) {
$('#list_form').attr('action', "chattr.cgi?label=" + encodeURIComponent(label) + "&recursive=" + recursive);
$('#list_form').submit();
}
}
function chconDialog() {
if(checkSelected())
$("#chconDialog").modal({
"backdrop" : "static",
"keyboard" : true,
"show" : true
});
}
function chconSelected() {
var label = $('#chconForm input[name=label]').val();
var recursive = $('#chcon-recursive').prop('checked');
if (label == null || label == "") {
$('#chconForm input[name=label]').focus();
} else if (label != null && label != "" ) {
$('#list_form').attr('action', "chcon.cgi?label=" + label + "&recursive=" + recursive);
$('#list_form').submit();
}
}
function aclsDialog() {
if(checkSelected())
$("#aclsDialog").modal({
"backdrop" : "static",
"keyboard" : true,
"show" : true
});
}
function aclsSelected() {
var aclsForm = $('#aclsForm').serialize();
$('#list_form').attr('action', "setfacl.cgi?" + aclsForm);
$('#list_form').submit();
}
function renameDialog(file) {
$("#renameForm input[name=name]").val(file);
$("#renameForm input[name=file]").val(file);
$("#renameDialog").modal({
"backdrop" : "static",
"keyboard" : true,
"show" : true
});
}
function renameSelected() {
var name = $('#renameForm input[name=name]').val();
var file = $('#renameForm input[name=file]').val();
if (name != null && name != "" && name != file) {
$('#renameForm').submit();
} else {
$('#renameForm input[name=name]').popover('show');
$('#renameForm input[name=name]').focus();
}
}
function copySelected() {
if(checkSelected()) {
document.forms['list_form'].action = "copy.cgi";
document.forms['list_form'].submit();
}
}
function cutSelected() {
if(checkSelected()) {
document.forms['list_form'].action = "cut.cgi";
document.forms['list_form'].submit();
}
}
function browseForUpload() {
$('#upfiles').click();
return true;
}
function uploadFiles() {
var files = document.getElementById('upfiles');
if (files.files.length > 0)
$('#upload-form').submit();
else
files.click();
}
function createFolderDialog() {
$("#createFolderDialog").modal({
"backdrop" : "static",
"keyboard" : true,
"show" : true
});
}
function createFolder() {
var name = $('#createFolderForm input[name=name]').val();
if (name != null && name != "")
$("#createFolderForm").submit();
else {
$('#createFolderForm input[name=name]').popover('show');
$('#createFolderForm input[name=name]').focus();
}
}
function createFileDialog(path) {
$("#createFileDialog").modal({
"backdrop" : "static",
"keyboard" : true,
"show" : true
});
}
function createFile() {
var name = $('#createFileForm input[name=name]').val();
if (name != null && name != "")
$("#createFileForm").submit();
else {
$('#createFileForm input[name=name]').popover('show');
$('#createFileForm input[name=name]').focus();
}
}
function downFromUrlDialog() {
$("#downFromUrlDialog").modal({
"backdrop" : "static",
"keyboard" : true,
"show" : true
});
}
function downFromUrl(path) {
var link = $('#downFromUrlForm input[name=link]').val();
if (link != null && link != "")
$('#downFromUrlForm').submit();
else {
$('#downFromUrlForm input[name=link]').popover('show');
$('#downFromUrlForm input[name=link]').focus();
}
}
function selectUnselect(cb) {
var rows = document.getElementsByClassName('ui_checked_columns');
for (i = 0; i < rows.length; i++) {
switch(cb.checked) {
case true:
selectRow(rows[i]);
break;
case false:
unselectRow(rows[i]);
break;
}
}
}
function rowClick(row) {
var input = row.getElementsByTagName('input')[0];
input.checked = !input.checked;
if (input.checked) {
row.className = row.className + ' hl-aw';
}
else {
row.className = row.className.replace(' hl-aw', '');
}
}
function selectRow(row) {
var input = row.getElementsByTagName('input')[0];
if(!input.checked) {
input.checked = true;
row.className = row.className + ' hl-aw';
}
}
function unselectRow(row) {
var input = row.getElementsByTagName('input')[0];
if(input.checked) {
input.checked = false;
row.className = row.className.replace(' hl-aw', '');
}
}
function viewReadyForUpload() {
$("#readyForUploadDialog").modal({
"backdrop" : "static",
"keyboard" : true,
"show" : true
});
}
function checkSelected() {
var checkboxes = $(".ui_checked_checkbox input[type='checkbox']:checked");
if(checkboxes.length == 0) {
$("#nothingSelected").modal({
"backdrop" : "static",
"keyboard" : true,
"show" : true
});
return false
}
return true;
}
function searchDialog() {
$("#searchDialog").modal({
"backdrop" : "static",
"keyboard" : true,
"show" : true
});
}
function search() {
var query = $('#searchForm input[name=query]').val();
if (query != null && query != "")
$("#searchForm").submit();
else {
$('#searchForm input[name=query]').popover('show');
$('#searchForm input[name=query]').focus();
}
}
@@ -0,0 +1,459 @@
<div id="nothingSelected" class="modal fade">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">&times;</button>
<h4 class="warning">$text{'warning_title'}</h4>
</div>
<div class="modal-body">
<h5>$text{'nothing_selected'}</h5>
</div>
<div class="modal-footer">
<button type="button" class="btn bnt-default" data-dismiss="modal">$text{'dialog_ok'}</button>
</div>
</div>
</div>
</div>
<div id="createFolderDialog" class="modal fade">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">&times;</button>
<h4 class="warning">$text{'create_folder'}</h4>
</div>
<div class="modal-body">
<form id="createFolderForm" action="create_folder.cgi" method="post">
<div class="form-group">
<label>$text{'new_folder_name'}</label>
<input id="name" name="name" type="text" class="form-control" data-placement="right" data-content="$text{'provide_folder_name'}" data-trigger="manual">
<input type='hidden' name='path' value='$quote_escaped_path'>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" onclick="createFolder()">$text{'create'}</button>
<button type="button" class="btn bnt-default" data-dismiss="modal">$text{'dialog_cancel'}</button>
</div>
</div>
</div>
</div>
<div id="createFileDialog" class="modal fade">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">&times;</button>
<h4 class="warning">$text{'create_file'}</h4>
</div>
<div class="modal-body">
<form id="createFileForm" action="create_file.cgi" method="post">
<div class="form-group">
<label>$text{'new_file_name'}</label>
<input name="name" type="text" class="form-control" data-placement="right" data-content="$text{'provide_file_name'}" data-trigger="manual">
<input type='hidden' name='path' value='$quote_escaped_path'>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" onclick="createFile()">$text{'create'}</button>
<button type="button" class="btn bnt-default" data-dismiss="modal">$text{'dialog_cancel'}</button>
</div>
</div>
</div>
</div>
<div id="renameDialog" class="modal fade">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">&times;</button>
<h4 class="warning">$text{'rename'}</h4>
</div>
<div class="modal-body">
<form id="renameForm" action="rename.cgi" method="post">
<div class="form-group">
<label>$text{'new_name'}</label>
<input name="name" type="text" class="form-control" data-placement="right" data-content="$text{'provide_new_file_name'}" data-trigger="manual">
<input type='hidden' name='file' value='' required>
<input type='hidden' name='path' value='$quote_escaped_path'>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" onclick="renameSelected()" name="button">$text{'rename'}</button>
<button type="button" class="btn bnt-default" data-dismiss="modal">$text{'dialog_cancel'}</button>
</div>
</div>
</div>
</div>
<div id="compressDialog" class="modal fade">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">&times;</button>
<h4 class="warning">$text{'compress_selected'}</h4>
</div>
<div class="modal-body">
<form id="compressSelectedForm" class="form-inline">
<div class="form-group">
<label>$text{'archive_name'}</label>
<input name="filename" type="text" class="form-control" data-placement="right" data-content="$text{'provide_file_name'}" data-trigger="manual">
</div>
<select name="method">
<option value="plain-tar">.tar</option>
<option value="xz-tar">.tar.xz</option>
<option selected value="tar">.tar.gz</option>
<option value="zstd-tar">.zstd</option>
<option value="zip">.zip</option>
</select>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" onclick="compressSelected()">$text{'dialog_compress'}</button>
<button type="button" class="btn bnt-default" data-dismiss="modal">$text{'dialog_cancel'}</button>
</div>
</div>
</div>
</div>
<div id="removeDialog" class="modal fade">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">&times;</button>
<h4 class="warning">$text{'remove_selected'}</h4>
</div>
<div class="modal-body">
$text{'about_to_delete'}
<div id="items-to-remove" class="well">
</div>
$text{'are_you_sure'}
</div>
<div class="modal-footer">
<button type="button" class="btn btn-danger" onclick="removeSelected()">$text{'remove_selected'}</button>
<button type="button" class="btn bnt-primary" data-dismiss="modal">$text{'dialog_cancel'}</button>
</div>
</div>
</div>
</div>
<div id="chownDialog" class="modal fade">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">&times;</button>
<h4 class="warning">$text{'chown_selected'}</h4>
</div>
<div class="modal-body">
<form id="chownForm">
<div class="form-group">
<label>$text{'user_name'}</label>
<input name="owner" type="text" class="form-control" data-placement="right" data-content="$text{'provide_user_name'}" data-trigger="manual">
<label>$text{'group_name'}</label>
<input name="group" type="text" class="form-control" data-placement="right" data-content="$text{'provide_group_name'}" data-trigger="manual">
<label>$text{'dialog_recursive'}</label>
<input id="chown-recursive" type="checkbox" name="recursive" class="form-control">
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" onclick="chownSelected()">$text{'dialog_change'}</button>
<button type="button" class="btn bnt-default" data-dismiss="modal">$text{'dialog_cancel'}</button>
</div>
</div>
</div>
</div>
<div id="chattrDialog" class="modal fade">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">&times;</button>
<h4 class="warning">$text{'chattr_selected'}</h4>
</div>
<div class="modal-body">
<form id="chattrForm">
<div class="form-group">
<label>$text{'attr_label'}</label>
<input name="label" type="text" class="form-control">
<label>$text{'dialog_recursive'}</label>
<input id="chattr-recursive" type="checkbox" name="recursive" class="form-control">
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" onclick="chattrSelected()">$text{'dialog_change'}</button>
<button type="button" class="btn bnt-default" data-dismiss="modal">$text{'dialog_cancel'}</button>
</div>
</div>
</div>
</div>
<div id="chconDialog" class="modal fade">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">&times;</button>
<h4 class="warning">$text{'chcon_selected'}</h4>
</div>
<div class="modal-body">
<form id="chconForm">
<div class="form-group">
<label>$text{'context_label'}</label>
<input name="label" type="text" class="form-control">
<label>$text{'dialog_recursive'}</label>
<input id="chcon-recursive" type="checkbox" name="recursive" class="form-control">
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" onclick="chconSelected()">$text{'dialog_change'}</button>
<button type="button" class="btn bnt-default" data-dismiss="modal">$text{'dialog_cancel'}</button>
</div>
</div>
</div>
</div>
<div id="aclsDialog" class="modal fade">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">&times;</button>
<h4 class="warning">$text{'acls_selected'}</h4>
</div>
<div class="modal-body">
<form id="aclsForm">
<div class="form-group">
<div class="row">
<div class="col-sm-12">
<label>$text{'acls_action'}</label><br>
<select name="action">
<option value=""></option>
<option selected value="-m">Modify (-m)</option>
<option value="-x">Remove (-x)</option>
<option value="-b">Remove all extended (-b)</option>
<option value="-k">Remove default (-k)</option>
</select>
</div>
</div>
<div class="row">
<div class="col-sm-12">
<label>$text{'acls_applyto'}</label><br>
<select multiple size=4 name="apply_to">
<option value="u">$text{'acls_user'}</option>
<option value="g">$text{'acls_group'}</option>
<option value="m">$text{'acls_mask'}</option>
<option value="o">$text{'acls_other'}</option>
</select>
</div>
</div>
<div class="row">
<div class="col-sm-3">
<label>$text{'acls_perms'}</label><br>
<select name="perms">
<option value=""></option>
<option value="---">---</option>
<option value="r--">r--</option>
<option value="-w-">-w-</option>
<option value="--x">--x</option>
<option value="r-x">r-x</option>
<option value="rw-">rw-</option>
<option value="-wx">-wx</option>
<option value="rwx">rwx</option>
</select>
</div>
<div class="col-sm-3">
<label>$text{'acls_user'}</label><br>
$acl_user_select
</div>
<div class="col-sm-3">
<label>$text{'acls_group'}</label><br>
$acl_group_select
</div>
</div>
<div class="row">
<div class="col-sm-12">
<label>$text{'dialog_recursive'}</label>
<input id="acls-recursive" type="checkbox" name="recursive">
</div>
</div>
<div class="row">
<div class="col-sm-12">
$acl_manual
</div>
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" onclick="aclsSelected()">$text{'dialog_change'}</button>
<button type="button" class="btn bnt-default" data-dismiss="modal">$text{'dialog_cancel'}</button>
</div>
</div>
</div>
</div>
<div id="chmodDialog" class="modal fade">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">&times;</button>
<h4 class="warning">$text{'chmod_selected'}</h4>
</div>
<div class="modal-body">
<form name="chmod" id="chmodForm">
<div class="form-group">
<label for="t_total">$text{'permissions'}:&nbsp; </label>
<input id="perms" type="text" oninput="if(this.value.length>4)this.value=this.value.slice(0,4)" name="t_total" value="0644" size="4" onKeyUp="octalchange()" class="form-group-item">
<input type="text" name="sym_total" value="" size="12" readonly="true" class="form-group-item">
</div>
<table class="table">
<tr>
<th></th>
<th><b>$text{'chmod_owner'}</b></th>
<th><b>$text{'chmod_group'}</b></th>
<th><b>$text{'chmod_others'}<b></th>
</tr>
<tr>
<td>$text{'chmod_read'}</td>
<td><input type="checkbox" name="owner4" value="4" onclick="calc_chmod()"></td>
<td><input type="checkbox" name="group4" value="4" onclick="calc_chmod()"></td>
<td><input type="checkbox" name="other4" value="4" onclick="calc_chmod()"></td>
</tr>
<tr>
<td>$text{'chmod_write'}</td>
<td><input type="checkbox" name="owner2" value="2" onclick="calc_chmod()"></td>
<td><input type="checkbox" name="group2" value="2" onclick="calc_chmod()"></td>
<td><input type="checkbox" name="other2" value="2" onclick="calc_chmod()"></td>
</tr>
<tr>
<td>$text{'chmod_execute'}</td>
<td><input type="checkbox" name="owner1" value="1" onclick="calc_chmod()"></td>
<td><input type="checkbox" name="group1" value="1" onclick="calc_chmod()"></td>
<td><input type="checkbox" name="other1" value="1" onclick="calc_chmod()"></td>
</tr>
<tr>
<td>----------</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>$text{'chmod_sticky'}</td>
<td><input type="checkbox" name="sticky" value="1" onclick="calc_chmod()"></td>
<td></td>
<td></td>
</tr>
<tr>
<td>$text{'chmod_setgid'}</td>
<td><input type="checkbox" name="setgid" value="2" onclick="calc_chmod()"></td>
<td></td>
<td></td>
</tr>
</table>
<label>$text{'chmod_apply_to'}:&nbsp; </label>
<select name="applyto">
<option value="1">$text{'chmod_dir_only'}</option>
<option value="2">$text{'chmod_dir_and_its_files'}</option>
<option value="3">$text{'chmod_all'}</option>
<option value="4">$text{'chmod_dir_files_and_subs_files'}</option>
<option value="5">$text{'chmod_dir_and_subs'}</option>
</select>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" onclick="chmodSelected()">$text{'dialog_change'}</button>
<button type="button" class="btn bnt-default" data-dismiss="modal">$text{'dialog_cancel'}</button>
</div>
</div>
</div>
</div>
<div id="downFromUrlDialog" class="modal fade">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">&times;</button>
<h4 class="warning">$text{'get_from_url'}</h4>
</div>
<div class="modal-body">
<form id="downFromUrlForm" action="http_download.cgi" method="post">
<div class="form-group">
<label style="display: block;">$text{'dialog_file_url'} <sup class="text-danger">&nbsp;*</sup>
<input name="link" type="url" class="form-control" data-placement="top" data-content="$text{'provide_url'}" data-trigger="manual" autocomplete="url" style="font-weight: normal;">
</label>
</div>
<div class="form-group">
<label style="display: block;">$text{'dialog_user_name'}
<input name="username" type="text" class="form-control" autocomplete="off" style="font-weight: normal;">
</label>
</div>
<div class="form-group">
<label style="display: block;">$text{'dialog_user_pass'}
<input name="password" type="password" class="form-control" autocomplete="new-password" style="font-weight: normal;">
</label>
</div>
<input type='hidden' name='path' value='$quote_escaped_path'>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" onclick="downFromUrl()">$text{'dialog_download'}</button>
<button type="button" class="btn bnt-default" data-dismiss="modal">$text{'dialog_cancel'}</button>
</div>
</div>
</div>
</div>
<div id="readyForUploadDialog" class="modal fade">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">&times;</button>
<h4 class="warning">$text{'upload_files'}</h4>
</div>
<div class="modal-body">
<form id='upload-form' method='post' action='upload.cgi?path=$urlized_path&id=$upid' enctype='multipart/form-data' onsubmit='window.open("@{[&get_webprefix()]}/uptracker.cgi?id=$upid&uid=$uid", "uptracker", "toolbar=no, menubar=no, scrollbars=no, location=no, resizable=no, width=screen.width, height=screen.height")'>
<input type='file' id='upfiles' name='upfiles' multiple onchange='countUploads(this)'>
<input type='hidden' name='path' value='$quote_escaped_path'>
</form>
<div id="readyForUploadList" class="well">
</div>
<input type="checkbox" data-id="webkitdirectory" onchange="document.querySelector('#upload-form > #upfiles').toggleAttribute('webkitdirectory')"> $text{'upload_dirs'}
<input type="checkbox" data-id="extract_uploaded" onchange="t=document.querySelector('#upload-form'),v=t.getAttribute('action'),x='&extract_uploaded=1',this.checked?t.setAttribute('action', t.getAttribute('action') + x):t.setAttribute('action',t.getAttribute('action').replace(x,''))"> $text{'extract_uploaded'}
<input type="checkbox" data-id="overwrite_existing" onchange="t=document.querySelector('#upload-form'),v=t.getAttribute('action'),x='&overwrite_existing=1',this.checked?t.setAttribute('action', t.getAttribute('action') + x):t.setAttribute('action',t.getAttribute('action').replace(x,''))"> $text{'overwrite_existing'}
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" onclick="uploadFiles()">$text{'upload_files'}</button>
<button type="button" class="btn bnt-default" data-dismiss="modal">$text{'dialog_cancel'}</button>
</div>
</div>
</div>
</div>
<div id="searchDialog" class="modal fade">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">&times;</button>
<h4 class="warning">$text{'search'}</h4>
</div>
<div class="modal-body">
<form id="searchForm" action="search.cgi" method="post">
<div class="form-group">
<label>$text{'search_label'}</label>
<input id="query" name="query" type="text" class="form-control" data-placement="right" data-content="$text{'provide_search_query'}" data-trigger="manual"><br>
<input id="caseins" name="caseins" type="checkbox" checked="checked"> $text{'search_insensitive'}
<input type='hidden' name='path' value='$quote_escaped_path'>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" onclick="search()">$text{'search_go'}</button>
<button type="button" class="btn bnt-default" data-dismiss="modal">$text{'dialog_cancel'}</button>
</div>
</div>
</div>
</div>
@@ -0,0 +1,246 @@
<div id="nothingSelected" class="modal">
<h3>$text{'nothing_selected'}</h3>
</div>
<div id="createFolderDialog" class="modal">
<form id="createFolderForm" action="create_folder.cgi" method="post">
<div class="form-group">
<label>$text{'new_folder_name'}</label>
<input id="name" name="name" type="text" title="$text{'provide_folder_name'}">
<input type='hidden' name='path' value='$quote_escaped_path'>
</div>
</form>
</div>
<div id="createFileDialog" class="modal">
<form id="createFileForm" action="create_file.cgi" method="post">
<div class="form-group">
<label>$text{'new_file_name'}</label>
<input name="name" type="text">
<input type='hidden' name='path' value='$quote_escaped_path'>
</div>
</form>
</div>
<div id="renameDialog" class="modal">
<form id="renameForm" action="rename.cgi" method="post">
<div class="form-group">
<label>$text{'new_name'}</label>
<input name="name" type="text">
<input type='hidden' name='file' value='' required>
<input type='hidden' name='path' value='$quote_escaped_path'>
</div>
</form>
</div>
<div id="compressDialog" class="modal">
<form id="compressSelectedForm" action="compress.cgi" method="post">
<div class="form-group">
<label>$text{'archive_name'}</label>
<input name="filename" type="text">
<select name="method">
<option value="plain-tar">.tar</option>
<option value="xz-tar">.tar.xz</option>
<option selected value="tar">.tar.gz</option>
<option value="zstd-tar">.zstd</option>
<option value="zip">.zip</option>
</select>
</div>
</form>
</div>
<div id="removeDialog" class="modal">
<p>$text{'about_to_delete'}</p>
<pre id="items-to-remove">
</pre>
$text{'are_you_sure'}
</div>
<div id="chownDialog" class="modal">
<form id="chownForm">
<div class="form-group">
<label>$text{'user_name'}</label><br>
<input name="owner" type="text"><br>
<label>$text{'group_name'}</label><br>
<input name="group" type="text"><br><br>
<label>$text{'dialog_recursive'}</label>
<input id="chown-recursive" type="checkbox" name="recursive">
</div>
</form>
</div>
<div id="chattrDialog" class="modal">
<form id="chattrForm">
<div class="form-group">
<label>$text{'attr_label'}</label><br>
<input name="label" type="text"><br><br>
<label>$text{'dialog_recursive'}</label>
<input id="chattr-recursive" type="checkbox" name="recursive">
</div>
</form>
</div>
<div id="chconDialog" class="modal">
<form id="chconForm">
<div class="form-group">
<label>$text{'context_label'}</label><br>
<input name="label" type="text"><br><br>
<label>$text{'dialog_recursive'}</label>
<input id="chcon-recursive" type="checkbox" name="recursive">
</div>
</form>
</div>
<div id="aclsDialog" class="modal">
<form id="aclsForm">
<div class="form-group">
<label>$text{'acls_action'}</label><br>
<select name="action">
<option value=""></option>
<option selected value="-m">Modify (-m)</option>
<option value="-x">Remove (-x)</option>
<option value="-b">Remove all extended (-b)</option>
<option value="-k">Remove default (-k)</option>
</select><br><br>
<label>$text{'acls_applyto'}</label><br>
<select multiple size=4 name="apply_to">
<option value="u">$text{'acls_user'}</option>
<option value="g">$text{'acls_group'}</option>
<option value="m">$text{'acls_mask'}</option>
<option value="o">$text{'acls_other'}</option>
</select><br><br>
<label>$text{'acls_perms'}</label><br>
<select name="perms">
<option value=""></option>
<option value="---">---</option>
<option value="r--">r--</option>
<option value="-w-">-w-</option>
<option value="--x">--x</option>
<option value="r-x">r-x</option>
<option value="rw-">rw-</option>
<option value="-wx">-wx</option>
<option value="rwx">rwx</option>
</select><br><br>
<label>$text{'acls_user'}</label><br>
$acl_user_select<br><br>
<label>$text{'acls_group'}</label><br>
$acl_group_select<br><br>
<label>$text{'dialog_recursive'}</label>
<input id="acls-recursive" type="checkbox" name="recursive">
<br><br>
$acl_manual
</div>
</form>
</div>
<div id="downFromUrlDialog" class="modal">
<form id="downFromUrlForm" action="http_download.cgi" method="post">
<div class="form-group">
<label style="display: block;">$text{'dialog_file_url'} <sup class="text-danger">&nbsp;*</sup><br>
<input name="link" type="url" data-placement="top" data-content="$text{'provide_url'}" data-trigger="manual" autocomplete="url" style="font-weight: normal;">
</label>
<label style="display: block;">$text{'dialog_user_name'}<br>
<input name="username" type="text" autocomplete="off" style="font-weight: normal;">
</label>
<label style="display: block;">$text{'dialog_user_pass'}<br>
<input name="password" type="password" autocomplete="new-password" style="font-weight: normal;">
</label>
<input type='hidden' name='path' value='$quote_escaped_path'>
</div>
</form>
</div>
<div id="readyForUploadDialog" class="modal">
<form id='upload-form' method='post' onsubmit="this.extract_upload.checked=false" action='upload.cgi?path=$urlized_path&id=$upid' enctype='multipart/form-data' onsubmit='window.open("@{[&get_webprefix()]}/uptracker.cgi?id=$upid&uid=$uid", "uptracker", "toolbar=no, menubar=no, scrollbars=no, location=no, resizable=no, width=screen.width, height=screen.height")'>
<input type='file' id='upfiles' name='upfiles' multiple onchange='countUploads(this)'>
<input type='hidden' name='path' value='$quote_escaped_path'>
<br>
<br>
<input type="checkbox" id="filetype" onchange="this.parentElement.querySelector('#upfiles').toggleAttribute('webkitdirectory')"><label for="filetype"> $text{'upload_dirs'}</label>
<br>
<input type="checkbox" id="extract_upload" onchange="t=document.querySelector('#upload-form'),v=t.getAttribute('action'),x='&extract_uploaded=1',this.checked?t.setAttribute('action', t.getAttribute('action') + x):t.setAttribute('action',t.getAttribute('action').replace(x,''))"><label for="extract_upload"> $text{'extract_uploaded'}</label>
<br>
<input type="checkbox" id="overwrite_existing" onchange="t=document.querySelector('#upload-form'),v=t.getAttribute('action'),x='&overwrite_existing=1',this.checked?t.setAttribute('action', t.getAttribute('action') + x):t.setAttribute('action',t.getAttribute('action').replace(x,''))"><label for="overwrite_existing"> $text{'overwrite_existing'}</label>
</form>
<div id="readyForUploadList" class="well" style="max-height: 180px;">
</div>
</div>
<div id="chmodDialog" class="modal fade">
<form name="chmod" id="chmodForm">
<div class="form-group">
<label for="t_total">$text{'permissions'}:&nbsp; </label><br>
<input id="perms" type="text" oninput="if(this.value.length>4)this.value=this.value.slice(0,4)" name="t_total" value="0644" size="4" onKeyUp="octalchange()" class="form-group-item">
<input type="text" name="sym_total" value="" size="12" readonly="true" class="form-group-item">
</div>
<table class="table">
<tr>
<th></th>
<th><b>$text{'chmod_owner'}</b></th>
<th><b>$text{'chmod_group'}</b></th>
<th><b>$text{'chmod_others'}<b></th>
</tr>
<tr>
<td>$text{'chmod_read'}</td>
<td><input type="checkbox" name="owner4" value="4" onchange="calc_chmod()"></td>
<td><input type="checkbox" name="group4" value="4" onchange="calc_chmod()"></td>
<td><input type="checkbox" name="other4" value="4" onchange="calc_chmod()"></td>
</tr>
<tr>
<td>$text{'chmod_write'}</td>
<td><input type="checkbox" name="owner2" value="2" onchange="calc_chmod()"></td>
<td><input type="checkbox" name="group2" value="2" onchange="calc_chmod()"></td>
<td><input type="checkbox" name="other2" value="2" onchange="calc_chmod()"></td>
</tr>
<tr>
<td>$text{'chmod_execute'}</td>
<td><input type="checkbox" name="owner1" value="1" onchange="calc_chmod()"></td>
<td><input type="checkbox" name="group1" value="1" onchange="calc_chmod()"></td>
<td><input type="checkbox" name="other1" value="1" onchange="calc_chmod()"></td>
</tr>
<tr>
<td>----------</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>$text{'chmod_sticky'}</td>
<td><input type="checkbox" name="sticky" value="1" onchange="calc_chmod()"></td>
<td></td>
<td></td>
</tr>
<tr>
<td>$text{'chmod_setgid'}</td>
<td><input type="checkbox" name="setgid" value="2" onchange="calc_chmod()"></td>
<td></td>
<td></td>
</tr>
</table>
<label>$text{'chmod_apply_to'}:&nbsp; </label>
<select name="applyto">
<option value="1">$text{'chmod_dir_only'}</option>
<option value="2">$text{'chmod_dir_and_its_files'}</option>
<option value="3">$text{'chmod_all'}</option>
<option value="4">$text{'chmod_dir_files_and_subs_files'}</option>
<option value="5">$text{'chmod_dir_and_subs'}</option>
</select>
</form>
</div>
<div id="searchDialog" class="modal">
<form id="searchForm" action="search.cgi" method="post">
<div class="form-group">
<label>$text{'search_label'}</label>
<input id="query" name="query" type="text" title="$text{'provide_search_query'}"><br><br>
<input id="caseins" name="caseins" type="checkbox" checked="checked"> $text{'search_insensitive'}
<input type='hidden' name='path' value='$quote_escaped_path'>
</div>
</form>
</div>
@@ -0,0 +1,29 @@
<div id="quicks" style="float:right">
<a href="javascript:void(0)" onclick='searchDialog()' title="$text{'search'}"><img src='images/icons/quick/edit-find.png' alt="$text{'search'}" /></a>
<a href="bookmark.cgi?path=$urlized_path" title="$text{'bookmark_folder'}"><img src='images/icons/quick/bookmark-new.png' alt="$text{'bookmark_folder'}" /></a>
<a tabindex="0" class="fg-button fg-button-icon-right ui-widget ui-state-default ui-corner-all" id="flat">
<img src="images/icons/quick/go-down.png" alt="$text{'config_bookmarks'}">
</a>
<div id="bookmarks" class="ui-helper-hidden">
<ul>
$bookmarks
</ul>
</div>
<a href="javascript:void(0)" onclick='selectAll()' title="$text{'select_all'}"><img src='images/icons/quick/select-all.png' alt="$text{'select_all'}" /></a>
<a href="javascript:void(0)" onclick='invertSelection()' title="$text{'invert_selection'}"><img src='images/icons/quick/invert.png' alt="$text{'invert_selection'}" /></a>
<a href="javascript:void(0)" onclick='copySelected()' title="$text{'copy_selected'}"><img src='images/icons/quick/edit-copy.png' alt="$text{'copy_selected'}" /></a>
<a href="javascript:void(0)" onclick='cutSelected()' title="$text{'cut_selected'}"><img src='images/icons/quick/edit-cut.png' alt="$text{'cut_selected'}" /></a>
<a href='paste.cgi?path=$urlized_path' title="$text{'paste'}"><img src='images/icons/quick/edit-paste.png' alt="$text{'paste'}" /></a>
<a href="javascript:void(0)" onclick='createFolderDialog()' title="$text{'create_folder'}"><img src='images/icons/quick/folder-new.png' alt="$text{'create_folder'}" /></a>
<a href="javascript:void(0)" onclick='createFileDialog()' title="$text{'create_file'}"><img src='images/icons/quick/document-new.png' alt="$text{'create_file'}" /></a>
<a href="javascript:void(0)" onclick='compressDialog()' title="$text{'compress_selected'}"><img src='images/icons/quick/compress.png' alt="$text{'compress_selected'}" /></a>
<a href="javascript:void(0)" onclick='chmodDialog()' title="$text{'chmod_selected'}"><img src='images/icons/quick/chmod.png' alt="$text{'chmod_selected'}" /></a>
<a href="javascript:void(0)" onclick='chownDialog()' title="$text{'chown_selected'}"><img src='images/icons/quick/chown.png' alt="$text{'chown_selected'}" /></a>
<a href="javascript:void(0)" onclick='chattrDialog()' title="$text{'chattr_selected'}"><img src='images/icons/quick/chattr.png' alt="$text{'chattr_selected'}" /></a>
<a href="javascript:void(0)" onclick='chconDialog()' title="$text{'chcon_selected'}"><img src='images/icons/quick/chcon.png' alt="$text{'chcon_selected'}" /></a>
<a href="javascript:void(0)" onclick='aclsDialog()' title="$text{'acls_selected'}"><img src='images/icons/quick/acls.png' alt="$text{'acls_selected'}" /></a>
<a href="javascript:void(0)" onclick='removeSelected()' title="$text{'remove_selected'}"><img src='images/icons/quick/remove.png' alt="$text{'remove_selected'}" /></a>
<a href="javascript:void(0)" onclick='viewReadyForUpload()' title="$text{'upload_files'}"><img src='images/icons/quick/upload.png' alt="$text{'upload_files'}" /></a>
<a href="javascript:void(0)" onclick='downFromUrlDialog()' title="$text{'get_from_url'}"><img src='images/icons/quick/from-url.png' alt="$text{'get_from_url'}" /></a>
</div>
<div id="info" style="float:right"></div>
+115
View File
@@ -0,0 +1,115 @@
<div class="btn-group pull-right">
<button class="btn btn-inverse" onclick='selectAll()' title="$text{'select_all'}" data-toggle="tooltip" data-placement="bottom" data-container="body">
<i class="fa fa-check-square-o" aria-hidden="true"></i>
</button>
<button class="btn btn-inverse" onclick='invertSelection()' title="$text{'invert_selection'}" data-toggle="tooltip" data-placement="bottom" data-container="body">
<i class="fa fa-check-square" aria-hidden="true"></i>
</button>
<button class="btn btn-inverse" onclick='window.location.href="index.cgi?path=$urlized_path"' title="$text{'refresh'}" data-toggle="tooltip" data-placement="bottom" data-container="body">
<i class="fa fa-refresh" aria-hidden="true"></i>
</button>
<div class="btn-group">
<button type="button" class="btn btn-inverse dropdown-toggle" data-toggle="dropdown" data-hover="dropdown">
$text{'menu_file'} <span class="caret"></span></button>
<ul class="dropdown-menu" aria-labelledby="dropdownMenu1">
<li>
<a onclick='createFileDialog()'>
<i class="fa fa-file-o" aria-hidden="true"></i> $text{'create_file'}
</a>
</li>
<li>
<a onclick='createFolderDialog()'>
<i class="fa fa-folder-o" aria-hidden="true"></i> $text{'create_folder'}
</a>
</li>
<li>
<a onclick='viewReadyForUpload()'>
<i class="fa fa-upload" aria-hidden="true"></i> $text{'upload_files'}
</a>
</li>
<li>
<a onclick='downFromUrlDialog()'>
<i class="fa fa-globe" aria-hidden="true"></i> $text{'get_from_url'}
</a>
</li>
</ul>
</div>
<div class="btn-group">
<button type="button" class="btn btn-inverse dropdown-toggle" data-toggle="dropdown" data-hover="dropdown">
$text{'menu_edit'} <span class="caret"></span></button>
<ul class="dropdown-menu" aria-labelledby="dropdownMenu1">
<li>
<a onclick='copySelected()'>
<i class="fa fa-copy" aria-hidden="true"></i> $text{'copy_selected'}
</a>
</li>
<li>
<a onclick='cutSelected()'>
<i class="fa fa-cut" aria-hidden="true"></i> $text{'cut_selected'}
</a>
</li>
<li>
<a onclick="location.href='paste.cgi?path=$urlized_path'">
<i class="fa fa-paste" aria-hidden="true"></i> $text{'paste'}
</a>
</li>
</ul>
</div>
<div class="btn-group">
<button type="button" class="btn btn-inverse dropdown-toggle" data-toggle="dropdown" data-hover="dropdown">
$text{'menu_tools'} <span class="caret"></span></button>
<ul class="dropdown-menu" aria-labelledby="dropdownMenu1">
<li>
<a onclick='searchDialog()'>
<i class="fa fa-search" aria-hidden="true"></i> $text{'search'}
</a>
</li>
<li>
<a onclick='chmodDialog()'>
<i class="fa fa-gears" aria-hidden="true"></i> $text{'chmod_selected'}
</a>
</li>
<li>
<a onclick='chownDialog()'>
<i class="fa fa-users" aria-hidden="true"></i> $text{'chown_selected'}
</a>
</li>
<li>
<a onclick='chattrDialog()'>
<i class="fa fa-tags" aria-hidden="true"></i> $text{'chattr_selected'}
</a>
</li>
<li>
<a onclick='chconDialog()'>
<i class="fa fa-shield" aria-hidden="true"></i> $text{'chcon_selected'}
</a>
</li>
<li>
<a onclick='aclsDialog()'>
<i class="fa account-key" aria-hidden="true"></i> $text{'acls_selected'}
</a>
</li>
<li>
<a onclick='compressDialog()'>
<i class="fa fa-file-archive-o" aria-hidden="true"></i> $text{'compress_selected'}
</a>
</li>
</ul>
</div>
<div class="btn-group">
<button type="button" class="btn btn-inverse dropdown-toggle" data-toggle="dropdown" data-hover="dropdown">
$text{'menu_bookmarks'} <span class="caret"></span></button>
<ul class="dropdown-menu pull-right" aria-labelledby="dropdownMenu1">
<li>
<a href="bookmark.cgi?path=$urlized_path">
<i class="fa fa-bookmark-o" aria-hidden="true"></i> $text{'bookmark_folder'}
</a>
$bookmarks
</li>
</ul>
</div>
<button class="btn btn-danger" onclick='removeDialog()' title="$text{'remove_selected'}" data-toggle="tooltip" data-placement="bottom" data-container="body">
<i class="fa fa-trash-o" aria-hidden="true"></i>
</button>
</div>
@@ -0,0 +1,67 @@
<div class="btn-group pull-right" role="group">
<button class="btn btn-inverse" onclick='searchDialog()' title="$text{'search'}" data-toggle="tooltip" data-placement="bottom" data-container="body">
<i class="fa fa-search" aria-hidden="true"></i>
</button>
<button class="btn btn-inverse" onclick="location.href='bookmark.cgi?path=$urlized_path'" title="$text{'bookmark_folder'}" data-toggle="tooltip" data-placement="bottom" data-container="body">
<i class="fa fa-bookmark-o" aria-hidden="true"></i>
</button>
<div class="btn-group">
<button type="button" class="btn btn-inverse dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" title="$text{'config_bookmarks'}">
<i class="fa fa-book" aria-hidden="true"></i>
</button>
<ul class="dropdown-menu" aria-labelledby="dropdownMenu1">
$bookmarks
</ul>
</div>
<button class="btn btn-inverse" onclick='window.location.href="index.cgi?path=$urlized_path"' title="$text{'refresh'}" data-toggle="tooltip" data-placement="bottom" data-container="body">
<i class="fa fa-refresh" aria-hidden="true"></i>
</button>
<button class="btn btn-inverse" onclick='selectAll()' title="$text{'select_all'}" data-toggle="tooltip" data-placement="bottom" data-container="body">
<i class="fa fa-check-square-o" aria-hidden="true"></i>
</button>
<button class="btn btn-inverse" onclick='invertSelection()' title="$text{'invert_selection'}" data-toggle="tooltip" data-placement="bottom" data-container="body">
<i class="fa fa-check-square" aria-hidden="true"></i>
</button>
<button class="btn btn-inverse" onclick='copySelected()' title="$text{'copy_selected'}" data-toggle="tooltip" data-placement="bottom" data-container="body">
<i class="fa fa-copy" aria-hidden="true"></i>
</button>
<button class="btn btn-inverse" onclick='cutSelected()' title="$text{'cut_selected'}" data-toggle="tooltip" data-placement="bottom" data-container="body">
<i class="fa fa-cut" aria-hidden="true"></i>
</button>
<button class="btn btn-inverse" onclick="location.href='paste.cgi?path=$urlized_path'" title="$text{'paste'}" data-toggle="tooltip" data-placement="bottom" data-container="body">
<i class="fa fa-paste" aria-hidden="true"></i>
</button>
<button class="btn btn-inverse" onclick='createFolderDialog()' title="$text{'create_folder'}" data-toggle="tooltip" data-placement="bottom" data-container="body">
<i class="fa fa-folder-o" aria-hidden="true"></i>
</button>
<button class="btn btn-inverse" onclick='createFileDialog()' title="$text{'create_file'}" data-toggle="tooltip" data-placement="bottom" data-container="body">
<i class="fa fa-file-o" aria-hidden="true"></i>
</button>
<button class="btn btn-inverse" onclick='compressDialog()' title="$text{'compress_selected'}" data-toggle="tooltip" data-placement="bottom" data-container="body">
<i class="fa fa-file-archive-o" aria-hidden="true"></i>
</button>
<button class="btn btn-inverse" onclick='chmodDialog()' title="$text{'chmod_selected'}" data-toggle="tooltip" data-placement="bottom" data-container="body">
<i class="fa fa-gears" aria-hidden="true"></i>
</button>
<button class="btn btn-inverse" onclick='chownDialog()' title="$text{'chown_selected'}" data-toggle="tooltip" data-placement="bottom" data-container="body">
<i class="fa fa-users" aria-hidden="true"></i>
</button>
<button class="btn btn-inverse" onclick='chattrDialog()' title="$text{'chattr_selected'}" data-toggle="tooltip" data-placement="bottom" data-container="body">
<i class="fa fa-tags" aria-hidden="true"></i>
</button>
<button class="btn btn-inverse" onclick='chconDialog()' title="$text{'chcon_selected'}" data-toggle="tooltip" data-placement="bottom" data-container="body">
<i class="fa fa-shield" aria-hidden="true"></i>
</button>
<button class="btn btn-inverse" onclick='aclsDialog()' title="$text{'acls_selected'}" data-toggle="tooltip" data-placement="bottom" data-container="body">
<i class="fa fa-account-key" aria-hidden="true"></i>
</button>
<button class="btn btn-inverse" onclick='removeDialog()' title="$text{'remove_selected'}" data-toggle="tooltip" data-placement="bottom" data-container="body">
<i class="fa fa-trash-o" aria-hidden="true"></i>
</button>
<button class="btn btn-inverse" onclick='viewReadyForUpload()' title="$text{'upload_files'}" data-toggle="tooltip" data-placement="bottom" data-container="body">
<i class="fa fa-upload" aria-hidden="true"></i>
</button>
<button class="btn btn-inverse" onclick='downFromUrlDialog()' title="$text{'get_from_url'}" data-toggle="tooltip" data-placement="bottom" data-container="body">
<i class="fa fa-globe" aria-hidden="true"></i>
</button>
</div>