/assets/addons/kcfinder/js/browser/misc.js
JavaScript | 381 lines | 344 code | 27 blank | 10 comment | 75 complexity | b04a17d90d3c3aadc39003ef6210010f MD5 | raw file
- <?php
- /** This file is part of KCFinder project
- *
- * @desc Miscellaneous functionality
- * @package KCFinder
- * @version 2.4
- * @author Pavel Tzonkov <pavelc@users.sourceforge.net>
- * @copyright 2010, 2011 KCFinder Project
- * @license http://www.opensource.org/licenses/gpl-2.0.php GPLv2
- * @license http://www.opensource.org/licenses/lgpl-2.1.php LGPLv2
- * @link http://kcfinder.sunhater.com
- */?>
- browser.drag = function(ev, dd) {
- var top = dd.offsetY,
- left = dd.offsetX;
- if (top < 0) top = 0;
- if (left < 0) left = 0;
- if (top + $(this).outerHeight() > $(window).height())
- top = $(window).height() - $(this).outerHeight();
- if (left + $(this).outerWidth() > $(window).width())
- left = $(window).width() - $(this).outerWidth();
- $(this).css({
- top: top,
- left: left
- });
- };
- browser.showDialog = function(e) {
- $('#dialog').css({left: 0, top: 0});
- this.shadow();
- if ($('#dialog div.box') && !$('#dialog div.title').get(0)) {
- var html = $('#dialog div.box').html();
- var title = $('#dialog').data('title') ? $('#dialog').data('title') : "";
- html = '<div class="title"><span class="close"></span>' + title + '</div>' + html;
- $('#dialog div.box').html(html);
- $('#dialog div.title span.close').mousedown(function() {
- $(this).addClass('clicked');
- });
- $('#dialog div.title span.close').mouseup(function() {
- $(this).removeClass('clicked');
- });
- $('#dialog div.title span.close').click(function() {
- browser.hideDialog();
- browser.hideAlert();
- });
- }
- $('#dialog').drag(browser.drag, {handle: '#dialog div.title'});
- $('#dialog').css('display', 'block');
- if (e) {
- var left = e.pageX - parseInt($('#dialog').outerWidth() / 2);
- var top = e.pageY - parseInt($('#dialog').outerHeight() / 2);
- if (left < 0) left = 0;
- if (top < 0) top = 0;
- if (($('#dialog').outerWidth() + left) > $(window).width())
- left = $(window).width() - $('#dialog').outerWidth();
- if (($('#dialog').outerHeight() + top) > $(window).height())
- top = $(window).height() - $('#dialog').outerHeight();
- $('#dialog').css({
- left: left + 'px',
- top: top + 'px'
- });
- } else
- $('#dialog').css({
- left: parseInt(($(window).width() - $('#dialog').outerWidth()) / 2) + 'px',
- top: parseInt(($(window).height() - $('#dialog').outerHeight()) / 2) + 'px'
- });
- $(document).unbind('keydown');
- $(document).keydown(function(e) {
- if (e.keyCode == 27)
- browser.hideDialog();
- });
- };
- browser.hideDialog = function() {
- this.unshadow();
- if ($('#clipboard').hasClass('selected'))
- $('#clipboard').removeClass('selected');
- $('#dialog').css('display', 'none');
- $('div.folder > a > span.folder').removeClass('context');
- $('#dialog').html('');
- $('#dialog').data('title', null);
- $('#dialog').unbind();
- $('#dialog').click(function() {
- return false;
- });
- $(document).unbind('keydown');
- $(document).keydown(function(e) {
- return !browser.selectAll(e);
- });
- browser.hideAlert();
- };
- browser.showAlert = function(shadow) {
- $('#alert').css({left: 0, top: 0});
- if (typeof shadow == 'undefined')
- shadow = true;
- if (shadow)
- this.shadow();
- var left = parseInt(($(window).width() - $('#alert').outerWidth()) / 2),
- top = parseInt(($(window).height() - $('#alert').outerHeight()) / 2);
- var wheight = $(window).height();
- if (top < 0)
- top = 0;
- $('#alert').css({
- left: left + 'px',
- top: top + 'px',
- display: 'block'
- });
- if ($('#alert').outerHeight() > wheight) {
- $('#alert div.message').css({
- height: wheight - $('#alert div.title').outerHeight() - $('#alert div.ok').outerHeight() - 20 + 'px'
- });
- }
- $(document).unbind('keydown');
- $(document).keydown(function(e) {
- if (e.keyCode == 27) {
- browser.hideDialog();
- browser.hideAlert();
- $(document).unbind('keydown');
- $(document).keydown(function(e) {
- return !browser.selectAll(e);
- });
- }
- });
- };
- browser.hideAlert = function(shadow) {
- if (typeof shadow == 'undefined')
- shadow = true;
- if (shadow)
- this.unshadow();
- $('#alert').css('display', 'none');
- $('#alert').html('');
- $('#alert').data('title', null);
- };
- browser.alert = function(msg, shadow) {
- msg = msg.replace(/\r?\n/g, "<br />");
- var title = $('#alert').data('title') ? $('#alert').data('title') : browser.label("Attention");
- $('#alert').html('<div class="title"><span class="close"></span>' + title + '</div><div class="message">' + msg + '</div><div class="ok"><button>' + browser.label("OK") + '</button></div>');
- $('#alert div.ok button').click(function() {
- browser.hideAlert(shadow);
- });
- $('#alert div.title span.close').mousedown(function() {
- $(this).addClass('clicked');
- });
- $('#alert div.title span.close').mouseup(function() {
- $(this).removeClass('clicked');
- });
- $('#alert div.title span.close').click(function() {
- browser.hideAlert(shadow);
- });
- $('#alert').drag(browser.drag, {handle: "#alert div.title"});
- browser.showAlert(shadow);
- };
- browser.confirm = function(question, callBack) {
- $('#dialog').data('title', browser.label("Question"));
- $('#dialog').html('<div class="box"><div class="question">' + browser.label(question) + '<div class="buttons"><button>' + browser.label("No") + '</button> <button>' + browser.label("Yes") + '</button></div></div></div>');
- browser.showDialog();
- $('#dialog div.buttons button').first().click(function() {
- browser.hideDialog();
- });
- $('#dialog div.buttons button').last().click(function() {
- if (callBack)
- callBack(function() {
- browser.hideDialog();
- });
- else
- browser.hideDialog();
- });
- $('#dialog div.buttons button').get(1).focus();
- };
- browser.shadow = function() {
- $('#shadow').css('display', 'block');
- };
- browser.unshadow = function() {
- $('#shadow').css('display', 'none');
- };
- browser.showMenu = function(e) {
- var left = e.pageX;
- var top = e.pageY;
- if (($('#dialog').outerWidth() + left) > $(window).width())
- left = $(window).width() - $('#dialog').outerWidth();
- if (($('#dialog').outerHeight() + top) > $(window).height())
- top = $(window).height() - $('#dialog').outerHeight();
- $('#dialog').css({
- left: left + 'px',
- top: top + 'px',
- display: 'none'
- });
- $('#dialog').fadeIn();
- };
- browser.fileNameDialog = function(e, post, inputName, inputValue, url, labels, callBack, selectAll) {
- var html = '<form method="post" action="javascript:;">' +
- '<div class="box">' +
- '<input name="' + inputName + '" type="text" /><br />' +
- '<div style="text-align:right">' +
- '<input type="submit" value="' + _.htmlValue(this.label("OK")) + '" /> ' +
- '<input type="button" value="' + _.htmlValue(this.label("Cancel")) + '" onclick="browser.hideDialog(); browser.hideAlert(); return false" />' +
- '</div></div></form>';
- $('#dialog').html(html);
- $('#dialog').data('title', this.label(labels.title));
- $('#dialog input[name="' + inputName + '"]').attr('value', inputValue);
- $('#dialog').unbind();
- $('#dialog').click(function() {
- return false;
- });
- $('#dialog form').submit(function() {
- var name = this.elements[0];
- name.value = $.trim(name.value);
- if (name.value == '') {
- browser.alert(browser.label(labels.errEmpty), false);
- name.focus();
- return;
- } else if (/[\/\\]/g.test(name.value)) {
- browser.alert(browser.label(labels.errSlash), false);
- name.focus();
- return;
- } else if (name.value.substr(0, 1) == ".") {
- browser.alert(browser.label(labels.errDot), false);
- name.focus();
- return;
- }
- eval('post.' + inputName + ' = name.value;');
- $.ajax({
- type: 'POST',
- dataType: 'json',
- url: url,
- data: post,
- async: false,
- success: function(data) {
- if (browser.check4errors(data, false))
- return;
- if (callBack) callBack(data);
- browser.hideDialog();
- },
- error: function() {
- browser.alert(browser.label("Unknown error."), false);
- }
- });
- return false;
- });
- browser.showDialog(e);
- $('#dialog').css('display', 'block');
- $('#dialog input[type="submit"]').click(function() {
- return $('#dialog form').submit();
- });
- var field = $('#dialog input[type="text"]');
- var value = field.attr('value');
- if (!selectAll && /^(.+)\.[^\.]+$/ .test(value)) {
- value = value.replace(/^(.+)\.[^\.]+$/, "$1");
- _.selection(field.get(0), 0, value.length);
- } else {
- field.get(0).focus();
- field.get(0).select();
- }
- };
- browser.orderFiles = function(callBack, selected) {
- var order = _.kuki.get('order');
- var desc = (_.kuki.get('orderDesc') == 'on');
- if (!browser.files || !browser.files.sort)
- browser.files = [];
- browser.files = browser.files.sort(function(a, b) {
- var a1, b1, arr;
- if (!order) order = 'name';
- if (order == 'date') {
- a1 = a.mtime;
- b1 = b.mtime;
- } else if (order == 'type') {
- a1 = _.getFileExtension(a.name);
- b1 = _.getFileExtension(b.name);
- } else if (order == 'size') {
- a1 = a.size;
- b1 = b.size;
- } else
- eval('a1 = a.' + order + '.toLowerCase(); b1 = b.' + order + '.toLowerCase();');
- if ((order == 'size') || (order == 'date')) {
- if (a1 < b1) return desc ? 1 : -1;
- if (a1 > b1) return desc ? -1 : 1;
- }
- if (a1 == b1) {
- a1 = a.name.toLowerCase();
- b1 = b.name.toLowerCase();
- arr = [a1, b1];
- arr = arr.sort();
- return (arr[0] == a1) ? -1 : 1;
- }
- arr = [a1, b1];
- arr = arr.sort();
- if (arr[0] == a1) return desc ? 1 : -1;
- return desc ? -1 : 1;
- });
- browser.showFiles(callBack, selected);
- browser.initFiles();
- };
- browser.humanSize = function(size) {
- if (size < 1024) {
- size = size.toString() + ' B';
- } else if (size < 1048576) {
- size /= 1024;
- size = parseInt(size).toString() + ' KB';
- } else if (size < 1073741824) {
- size /= 1048576;
- size = parseInt(size).toString() + ' MB';
- } else if (size < 1099511627776) {
- size /= 1073741824;
- size = parseInt(size).toString() + ' GB';
- } else {
- size /= 1099511627776;
- size = parseInt(size).toString() + ' TB';
- }
- return size;
- };
- browser.baseGetData = function(act) {
- var data = 'browse.php?type=' + encodeURIComponent(this.type) + '&lng=' + this.lang;
- if (act)
- data += "&act=" + act;
- return data;
- };
- browser.label = function(index, data) {
- var label = this.labels[index] ? this.labels[index] : index;
- if (data)
- $.each(data, function(key, val) {
- label = label.replace('{' + key + '}', val);
- });
- return label;
- };
- browser.check4errors = function(data, shadow) {
- if (!data.error)
- return false;
- var msg;
- if (data.error.join)
- msg = data.error.join("\n");
- else
- msg = data.error;
- browser.alert(msg, shadow);
- return true;
- };
- browser.post = function(url, data) {
- var html = '<form id="postForm" method="POST" action="' + url + '">';
- $.each(data, function(key, val) {
- if ($.isArray(val))
- $.each(val, function(i, aval) {
- html += '<input type="hidden" name="' + _.htmlValue(key) + '[]" value="' + _.htmlValue(aval) + '" />';
- });
- else
- html += '<input type="hidden" name="' + _.htmlValue(key) + '" value="' + _.htmlValue(val) + '" />';
- });
- html += '</form>';
- $('#dialog').html(html);
- $('#dialog').css('display', 'block');
- $('#postForm').get(0).submit();
- };
- browser.fadeFiles = function() {
- $('#files > div').css({
- opacity: '0.4',
- filter: 'alpha(opacity:40)'
- });
- };