1 | <?php
|
---|
2 |
|
---|
3 | /** This file is part of KCFinder project
|
---|
4 | *
|
---|
5 | * @desc Miscellaneous functionality
|
---|
6 | * @package KCFinder
|
---|
7 | * @version 2.51
|
---|
8 | * @author Pavel Tzonkov <pavelc@users.sourceforge.net>
|
---|
9 | * @copyright 2010, 2011 KCFinder Project
|
---|
10 | * @license http://www.opensource.org/licenses/gpl-2.0.php GPLv2
|
---|
11 | * @license http://www.opensource.org/licenses/lgpl-2.1.php LGPLv2
|
---|
12 | * @link http://kcfinder.sunhater.com
|
---|
13 | */?>
|
---|
14 |
|
---|
15 | browser.drag = function(ev, dd) {
|
---|
16 | var top = dd.offsetY,
|
---|
17 | left = dd.offsetX;
|
---|
18 | if (top < 0) top = 0;
|
---|
19 | if (left < 0) left = 0;
|
---|
20 | if (top + $(this).outerHeight() > $(window).height())
|
---|
21 | top = $(window).height() - $(this).outerHeight();
|
---|
22 | if (left + $(this).outerWidth() > $(window).width())
|
---|
23 | left = $(window).width() - $(this).outerWidth();
|
---|
24 | $(this).css({
|
---|
25 | top: top,
|
---|
26 | left: left
|
---|
27 | });
|
---|
28 | };
|
---|
29 |
|
---|
30 | browser.showDialog = function(e) {
|
---|
31 | $('#dialog').css({left: 0, top: 0});
|
---|
32 | this.shadow();
|
---|
33 | if ($('#dialog div.box') && !$('#dialog div.title').get(0)) {
|
---|
34 | var html = $('#dialog div.box').html();
|
---|
35 | var title = $('#dialog').data('title') ? $('#dialog').data('title') : "";
|
---|
36 | html = '<div class="title"><span class="close"></span>' + title + '</div>' + html;
|
---|
37 | $('#dialog div.box').html(html);
|
---|
38 | $('#dialog div.title span.close').mousedown(function() {
|
---|
39 | $(this).addClass('clicked');
|
---|
40 | });
|
---|
41 | $('#dialog div.title span.close').mouseup(function() {
|
---|
42 | $(this).removeClass('clicked');
|
---|
43 | });
|
---|
44 | $('#dialog div.title span.close').click(function() {
|
---|
45 | browser.hideDialog();
|
---|
46 | browser.hideAlert();
|
---|
47 | });
|
---|
48 | }
|
---|
49 | $('#dialog').drag(browser.drag, {handle: '#dialog div.title'});
|
---|
50 | $('#dialog').css('display', 'block');
|
---|
51 |
|
---|
52 | if (e) {
|
---|
53 | var left = e.pageX - parseInt($('#dialog').outerWidth() / 2);
|
---|
54 | var top = e.pageY - parseInt($('#dialog').outerHeight() / 2);
|
---|
55 | if (left < 0) left = 0;
|
---|
56 | if (top < 0) top = 0;
|
---|
57 | if (($('#dialog').outerWidth() + left) > $(window).width())
|
---|
58 | left = $(window).width() - $('#dialog').outerWidth();
|
---|
59 | if (($('#dialog').outerHeight() + top) > $(window).height())
|
---|
60 | top = $(window).height() - $('#dialog').outerHeight();
|
---|
61 | $('#dialog').css({
|
---|
62 | left: left + 'px',
|
---|
63 | top: top + 'px'
|
---|
64 | });
|
---|
65 | } else
|
---|
66 | $('#dialog').css({
|
---|
67 | left: parseInt(($(window).width() - $('#dialog').outerWidth()) / 2) + 'px',
|
---|
68 | top: parseInt(($(window).height() - $('#dialog').outerHeight()) / 2) + 'px'
|
---|
69 | });
|
---|
70 | $(document).unbind('keydown');
|
---|
71 | $(document).keydown(function(e) {
|
---|
72 | if (e.keyCode == 27)
|
---|
73 | browser.hideDialog();
|
---|
74 | });
|
---|
75 | };
|
---|
76 |
|
---|
77 | browser.hideDialog = function() {
|
---|
78 | this.unshadow();
|
---|
79 | if ($('#clipboard').hasClass('selected'))
|
---|
80 | $('#clipboard').removeClass('selected');
|
---|
81 | $('#dialog').css('display', 'none');
|
---|
82 | $('div.folder > a > span.folder').removeClass('context');
|
---|
83 | $('#dialog').html('');
|
---|
84 | $('#dialog').data('title', null);
|
---|
85 | $('#dialog').unbind();
|
---|
86 | $('#dialog').click(function() {
|
---|
87 | return false;
|
---|
88 | });
|
---|
89 | $(document).unbind('keydown');
|
---|
90 | $(document).keydown(function(e) {
|
---|
91 | return !browser.selectAll(e);
|
---|
92 | });
|
---|
93 | browser.hideAlert();
|
---|
94 | };
|
---|
95 |
|
---|
96 | browser.showAlert = function(shadow) {
|
---|
97 | $('#alert').css({left: 0, top: 0});
|
---|
98 | if (typeof shadow == 'undefined')
|
---|
99 | shadow = true;
|
---|
100 | if (shadow)
|
---|
101 | this.shadow();
|
---|
102 | var left = parseInt(($(window).width() - $('#alert').outerWidth()) / 2),
|
---|
103 | top = parseInt(($(window).height() - $('#alert').outerHeight()) / 2);
|
---|
104 | var wheight = $(window).height();
|
---|
105 | if (top < 0)
|
---|
106 | top = 0;
|
---|
107 | $('#alert').css({
|
---|
108 | left: left + 'px',
|
---|
109 | top: top + 'px',
|
---|
110 | display: 'block'
|
---|
111 | });
|
---|
112 | if ($('#alert').outerHeight() > wheight) {
|
---|
113 | $('#alert div.message').css({
|
---|
114 | height: wheight - $('#alert div.title').outerHeight() - $('#alert div.ok').outerHeight() - 20 + 'px'
|
---|
115 | });
|
---|
116 | }
|
---|
117 | $(document).unbind('keydown');
|
---|
118 | $(document).keydown(function(e) {
|
---|
119 | if (e.keyCode == 27) {
|
---|
120 | browser.hideDialog();
|
---|
121 | browser.hideAlert();
|
---|
122 | $(document).unbind('keydown');
|
---|
123 | $(document).keydown(function(e) {
|
---|
124 | return !browser.selectAll(e);
|
---|
125 | });
|
---|
126 | }
|
---|
127 | });
|
---|
128 | };
|
---|
129 |
|
---|
130 | browser.hideAlert = function(shadow) {
|
---|
131 | if (typeof shadow == 'undefined')
|
---|
132 | shadow = true;
|
---|
133 | if (shadow)
|
---|
134 | this.unshadow();
|
---|
135 | $('#alert').css('display', 'none');
|
---|
136 | $('#alert').html('');
|
---|
137 | $('#alert').data('title', null);
|
---|
138 | };
|
---|
139 |
|
---|
140 | browser.alert = function(msg, shadow) {
|
---|
141 | msg = msg.replace(/\r?\n/g, "<br />");
|
---|
142 | var title = $('#alert').data('title') ? $('#alert').data('title') : browser.label("Attention");
|
---|
143 | $('#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>');
|
---|
144 | $('#alert div.ok button').click(function() {
|
---|
145 | browser.hideAlert(shadow);
|
---|
146 | });
|
---|
147 | $('#alert div.title span.close').mousedown(function() {
|
---|
148 | $(this).addClass('clicked');
|
---|
149 | });
|
---|
150 | $('#alert div.title span.close').mouseup(function() {
|
---|
151 | $(this).removeClass('clicked');
|
---|
152 | });
|
---|
153 | $('#alert div.title span.close').click(function() {
|
---|
154 | browser.hideAlert(shadow);
|
---|
155 | });
|
---|
156 | $('#alert').drag(browser.drag, {handle: "#alert div.title"});
|
---|
157 | browser.showAlert(shadow);
|
---|
158 | };
|
---|
159 |
|
---|
160 | browser.confirm = function(question, callBack) {
|
---|
161 | $('#dialog').data('title', browser.label("Question"));
|
---|
162 | $('#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>');
|
---|
163 | browser.showDialog();
|
---|
164 | $('#dialog div.buttons button').first().click(function() {
|
---|
165 | browser.hideDialog();
|
---|
166 | });
|
---|
167 | $('#dialog div.buttons button').last().click(function() {
|
---|
168 | if (callBack)
|
---|
169 | callBack(function() {
|
---|
170 | browser.hideDialog();
|
---|
171 | });
|
---|
172 | else
|
---|
173 | browser.hideDialog();
|
---|
174 | });
|
---|
175 | $('#dialog div.buttons button').get(1).focus();
|
---|
176 | };
|
---|
177 |
|
---|
178 | browser.shadow = function() {
|
---|
179 | $('#shadow').css('display', 'block');
|
---|
180 | };
|
---|
181 |
|
---|
182 | browser.unshadow = function() {
|
---|
183 | $('#shadow').css('display', 'none');
|
---|
184 | };
|
---|
185 |
|
---|
186 | browser.showMenu = function(e) {
|
---|
187 | var left = e.pageX;
|
---|
188 | var top = e.pageY;
|
---|
189 | if (($('#dialog').outerWidth() + left) > $(window).width())
|
---|
190 | left = $(window).width() - $('#dialog').outerWidth();
|
---|
191 | if (($('#dialog').outerHeight() + top) > $(window).height())
|
---|
192 | top = $(window).height() - $('#dialog').outerHeight();
|
---|
193 | $('#dialog').css({
|
---|
194 | left: left + 'px',
|
---|
195 | top: top + 'px',
|
---|
196 | display: 'none'
|
---|
197 | });
|
---|
198 | $('#dialog').fadeIn();
|
---|
199 | };
|
---|
200 |
|
---|
201 | browser.fileNameDialog = function(e, post, inputName, inputValue, url, labels, callBack, selectAll) {
|
---|
202 | var html = '<form method="post" action="javascript:;">' +
|
---|
203 | '<div class="box">' +
|
---|
204 | '<input name="' + inputName + '" type="text" /><br />' +
|
---|
205 | '<div style="text-align:right">' +
|
---|
206 | '<input type="submit" value="' + _.htmlValue(this.label("OK")) + '" /> ' +
|
---|
207 | '<input type="button" value="' + _.htmlValue(this.label("Cancel")) + '" onclick="browser.hideDialog(); browser.hideAlert(); return false" />' +
|
---|
208 | '</div></div></form>';
|
---|
209 | $('#dialog').html(html);
|
---|
210 | $('#dialog').data('title', this.label(labels.title));
|
---|
211 | $('#dialog input[name="' + inputName + '"]').attr('value', inputValue);
|
---|
212 | $('#dialog').unbind();
|
---|
213 | $('#dialog').click(function() {
|
---|
214 | return false;
|
---|
215 | });
|
---|
216 | $('#dialog form').submit(function() {
|
---|
217 | var name = this.elements[0];
|
---|
218 | name.value = $.trim(name.value);
|
---|
219 | if (name.value == '') {
|
---|
220 | browser.alert(browser.label(labels.errEmpty), false);
|
---|
221 | name.focus();
|
---|
222 | return;
|
---|
223 | } else if (/[\/\\]/g.test(name.value)) {
|
---|
224 | browser.alert(browser.label(labels.errSlash), false);
|
---|
225 | name.focus();
|
---|
226 | return;
|
---|
227 | } else if (name.value.substr(0, 1) == ".") {
|
---|
228 | browser.alert(browser.label(labels.errDot), false);
|
---|
229 | name.focus();
|
---|
230 | return;
|
---|
231 | }
|
---|
232 | eval('post.' + inputName + ' = name.value;');
|
---|
233 | $.ajax({
|
---|
234 | type: 'POST',
|
---|
235 | dataType: 'json',
|
---|
236 | url: url,
|
---|
237 | data: post,
|
---|
238 | async: false,
|
---|
239 | success: function(data) {
|
---|
240 | if (browser.check4errors(data, false))
|
---|
241 | return;
|
---|
242 | if (callBack) callBack(data);
|
---|
243 | browser.hideDialog();
|
---|
244 | },
|
---|
245 | error: function() {
|
---|
246 | browser.alert(browser.label("Unknown error."), false);
|
---|
247 | }
|
---|
248 | });
|
---|
249 | return false;
|
---|
250 | });
|
---|
251 | browser.showDialog(e);
|
---|
252 | $('#dialog').css('display', 'block');
|
---|
253 | $('#dialog input[type="submit"]').click(function() {
|
---|
254 | return $('#dialog form').submit();
|
---|
255 | });
|
---|
256 | var field = $('#dialog input[type="text"]');
|
---|
257 | var value = field.attr('value');
|
---|
258 | if (!selectAll && /^(.+)\.[^\.]+$/ .test(value)) {
|
---|
259 | value = value.replace(/^(.+)\.[^\.]+$/, "$1");
|
---|
260 | _.selection(field.get(0), 0, value.length);
|
---|
261 | } else {
|
---|
262 | field.get(0).focus();
|
---|
263 | field.get(0).select();
|
---|
264 | }
|
---|
265 | };
|
---|
266 |
|
---|
267 | browser.orderFiles = function(callBack, selected) {
|
---|
268 | var order = _.kuki.get('order');
|
---|
269 | var desc = (_.kuki.get('orderDesc') == 'on');
|
---|
270 |
|
---|
271 | if (!browser.files || !browser.files.sort)
|
---|
272 | browser.files = [];
|
---|
273 |
|
---|
274 | browser.files = browser.files.sort(function(a, b) {
|
---|
275 | var a1, b1, arr;
|
---|
276 | if (!order) order = 'name';
|
---|
277 |
|
---|
278 | if (order == 'date') {
|
---|
279 | a1 = a.mtime;
|
---|
280 | b1 = b.mtime;
|
---|
281 | } else if (order == 'type') {
|
---|
282 | a1 = _.getFileExtension(a.name);
|
---|
283 | b1 = _.getFileExtension(b.name);
|
---|
284 | } else if (order == 'size') {
|
---|
285 | a1 = a.size;
|
---|
286 | b1 = b.size;
|
---|
287 | } else
|
---|
288 | eval('a1 = a.' + order + '.toLowerCase(); b1 = b.' + order + '.toLowerCase();');
|
---|
289 |
|
---|
290 | if ((order == 'size') || (order == 'date')) {
|
---|
291 | if (a1 < b1) return desc ? 1 : -1;
|
---|
292 | if (a1 > b1) return desc ? -1 : 1;
|
---|
293 | }
|
---|
294 |
|
---|
295 | if (a1 == b1) {
|
---|
296 | a1 = a.name.toLowerCase();
|
---|
297 | b1 = b.name.toLowerCase();
|
---|
298 | arr = [a1, b1];
|
---|
299 | arr = arr.sort();
|
---|
300 | return (arr[0] == a1) ? -1 : 1;
|
---|
301 | }
|
---|
302 |
|
---|
303 | arr = [a1, b1];
|
---|
304 | arr = arr.sort();
|
---|
305 | if (arr[0] == a1) return desc ? 1 : -1;
|
---|
306 | return desc ? -1 : 1;
|
---|
307 | });
|
---|
308 |
|
---|
309 | browser.showFiles(callBack, selected);
|
---|
310 | browser.initFiles();
|
---|
311 | };
|
---|
312 |
|
---|
313 | browser.humanSize = function(size) {
|
---|
314 | if (size < 1024) {
|
---|
315 | size = size.toString() + ' B';
|
---|
316 | } else if (size < 1048576) {
|
---|
317 | size /= 1024;
|
---|
318 | size = parseInt(size).toString() + ' KB';
|
---|
319 | } else if (size < 1073741824) {
|
---|
320 | size /= 1048576;
|
---|
321 | size = parseInt(size).toString() + ' MB';
|
---|
322 | } else if (size < 1099511627776) {
|
---|
323 | size /= 1073741824;
|
---|
324 | size = parseInt(size).toString() + ' GB';
|
---|
325 | } else {
|
---|
326 | size /= 1099511627776;
|
---|
327 | size = parseInt(size).toString() + ' TB';
|
---|
328 | }
|
---|
329 | return size;
|
---|
330 | };
|
---|
331 |
|
---|
332 | browser.baseGetData = function(act) {
|
---|
333 | var data = 'browse.php?type=' + encodeURIComponent(this.type) + '&lng=' + this.lang;
|
---|
334 | if (act)
|
---|
335 | data += "&act=" + act;
|
---|
336 | if (this.cms)
|
---|
337 | data += "&cms=" + this.cms;
|
---|
338 | return data;
|
---|
339 | };
|
---|
340 |
|
---|
341 | browser.label = function(index, data) {
|
---|
342 | var label = this.labels[index] ? this.labels[index] : index;
|
---|
343 | if (data)
|
---|
344 | $.each(data, function(key, val) {
|
---|
345 | label = label.replace('{' + key + '}', val);
|
---|
346 | });
|
---|
347 | return label;
|
---|
348 | };
|
---|
349 |
|
---|
350 | browser.check4errors = function(data, shadow) {
|
---|
351 | if (!data.error)
|
---|
352 | return false;
|
---|
353 | var msg;
|
---|
354 | if (data.error.join)
|
---|
355 | msg = data.error.join("\n");
|
---|
356 | else
|
---|
357 | msg = data.error;
|
---|
358 | browser.alert(msg, shadow);
|
---|
359 | return true;
|
---|
360 | };
|
---|
361 |
|
---|
362 | browser.post = function(url, data) {
|
---|
363 | var html = '<form id="postForm" method="POST" action="' + url + '">';
|
---|
364 | $.each(data, function(key, val) {
|
---|
365 | if ($.isArray(val))
|
---|
366 | $.each(val, function(i, aval) {
|
---|
367 | html += '<input type="hidden" name="' + _.htmlValue(key) + '[]" value="' + _.htmlValue(aval) + '" />';
|
---|
368 | });
|
---|
369 | else
|
---|
370 | html += '<input type="hidden" name="' + _.htmlValue(key) + '" value="' + _.htmlValue(val) + '" />';
|
---|
371 | });
|
---|
372 | html += '</form>';
|
---|
373 | $('#dialog').html(html);
|
---|
374 | $('#dialog').css('display', 'block');
|
---|
375 | $('#postForm').get(0).submit();
|
---|
376 | };
|
---|
377 |
|
---|
378 | browser.fadeFiles = function() {
|
---|
379 | $('#files > div').css({
|
---|
380 | opacity: '0.4',
|
---|
381 | filter: 'alpha(opacity:40)'
|
---|
382 | });
|
---|
383 | };
|
---|