[239] | 1 | <?php
|
---|
| 2 |
|
---|
| 3 | /** This file is part of KCFinder project
|
---|
| 4 | *
|
---|
| 5 | * @desc Toolbar 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.initToolbar = function() {
|
---|
| 16 | $('#toolbar a').click(function() {
|
---|
| 17 | browser.hideDialog();
|
---|
| 18 | });
|
---|
| 19 |
|
---|
| 20 | if (!_.kuki.isSet('displaySettings'))
|
---|
| 21 | _.kuki.set('displaySettings', 'off');
|
---|
| 22 |
|
---|
| 23 | if (_.kuki.get('displaySettings') == 'on') {
|
---|
| 24 | $('#toolbar a[href="kcact:settings"]').addClass('selected');
|
---|
| 25 | $('#settings').css('display', 'block');
|
---|
| 26 | browser.resize();
|
---|
| 27 | }
|
---|
| 28 |
|
---|
| 29 | $('#toolbar a[href="kcact:settings"]').click(function () {
|
---|
| 30 | if ($('#settings').css('display') == 'none') {
|
---|
| 31 | $(this).addClass('selected');
|
---|
| 32 | _.kuki.set('displaySettings', 'on');
|
---|
| 33 | $('#settings').css('display', 'block');
|
---|
| 34 | browser.fixFilesHeight();
|
---|
| 35 | } else {
|
---|
| 36 | $(this).removeClass('selected');
|
---|
| 37 | _.kuki.set('displaySettings', 'off');
|
---|
| 38 | $('#settings').css('display', 'none');
|
---|
| 39 | browser.fixFilesHeight();
|
---|
| 40 | }
|
---|
| 41 | return false;
|
---|
| 42 | });
|
---|
| 43 |
|
---|
| 44 | $('#toolbar a[href="kcact:refresh"]').click(function() {
|
---|
| 45 | browser.refresh();
|
---|
| 46 | return false;
|
---|
| 47 | });
|
---|
| 48 |
|
---|
| 49 | if (window.opener || this.opener.TinyMCE || $('iframe', window.parent.document).get(0))
|
---|
| 50 | $('#toolbar a[href="kcact:maximize"]').click(function() {
|
---|
| 51 | browser.maximize(this);
|
---|
| 52 | return false;
|
---|
| 53 | });
|
---|
| 54 | else
|
---|
| 55 | $('#toolbar a[href="kcact:maximize"]').css('display', 'none');
|
---|
| 56 |
|
---|
| 57 | $('#toolbar a[href="kcact:about"]').click(function() {
|
---|
| 58 | var html = '<div class="box about">' +
|
---|
| 59 | '<div class="head"><a href="http://kcfinder.sunhater.com" target="_blank">KCFinder</a> ' + browser.version + '</div>';
|
---|
| 60 | if (browser.support.check4Update)
|
---|
| 61 | html += '<div id="checkver"><span class="loading"><span>' + browser.label("Checking for new version...") + '</span></span></div>';
|
---|
| 62 | html +=
|
---|
| 63 | '<div>' + browser.label("Licenses:") + ' GPLv2 & LGPLv2</div>' +
|
---|
| 64 | '<div>Copyright ©2010, 2011 Pavel Tzonkov</div>' +
|
---|
| 65 | '<button>' + browser.label("OK") + '</button>' +
|
---|
| 66 | '</div>';
|
---|
| 67 | $('#dialog').html(html);
|
---|
| 68 | $('#dialog').data('title', browser.label("About"));
|
---|
| 69 | browser.showDialog();
|
---|
| 70 | var close = function() {
|
---|
| 71 | browser.hideDialog();
|
---|
| 72 | browser.unshadow();
|
---|
| 73 | }
|
---|
| 74 | $('#dialog button').click(close);
|
---|
| 75 | var span = $('#checkver > span');
|
---|
| 76 | setTimeout(function() {
|
---|
| 77 | $.ajax({
|
---|
| 78 | dataType: 'json',
|
---|
| 79 | url: browser.baseGetData('check4Update'),
|
---|
| 80 | async: true,
|
---|
| 81 | success: function(data) {
|
---|
| 82 | if (!$('#dialog').html().length)
|
---|
| 83 | return;
|
---|
| 84 | span.removeClass('loading');
|
---|
| 85 | if (!data.version) {
|
---|
| 86 | span.html(browser.label("Unable to connect!"));
|
---|
| 87 | browser.showDialog();
|
---|
| 88 | return;
|
---|
| 89 | }
|
---|
| 90 | if (browser.version < data.version)
|
---|
| 91 | span.html('<a href="http://kcfinder.sunhater.com/download" target="_blank">' + browser.label("Download version {version} now!", {version: data.version}) + '</a>');
|
---|
| 92 | else
|
---|
| 93 | span.html(browser.label("KCFinder is up to date!"));
|
---|
| 94 | browser.showDialog();
|
---|
| 95 | },
|
---|
| 96 | error: function() {
|
---|
| 97 | if (!$('#dialog').html().length)
|
---|
| 98 | return;
|
---|
| 99 | span.removeClass('loading');
|
---|
| 100 | span.html(browser.label("Unable to connect!"));
|
---|
| 101 | browser.showDialog();
|
---|
| 102 | }
|
---|
| 103 | });
|
---|
| 104 | }, 1000);
|
---|
| 105 | $('#dialog').unbind();
|
---|
| 106 |
|
---|
| 107 | return false;
|
---|
| 108 | });
|
---|
| 109 |
|
---|
| 110 | this.initUploadButton();
|
---|
| 111 | };
|
---|
| 112 |
|
---|
| 113 | browser.initUploadButton = function() {
|
---|
| 114 | var btn = $('#toolbar a[href="kcact:upload"]');
|
---|
| 115 | if (!this.access.files.upload) {
|
---|
| 116 | btn.css('display', 'none');
|
---|
| 117 | return;
|
---|
| 118 | }
|
---|
| 119 | var top = btn.get(0).offsetTop;
|
---|
| 120 | var width = btn.outerWidth();
|
---|
| 121 | var height = btn.outerHeight();
|
---|
| 122 | $('#toolbar').prepend('<div id="upload" style="top:' + top + 'px;width:' + width + 'px;height:' + height + 'px">' +
|
---|
| 123 | '<form enctype="multipart/form-data" method="post" target="uploadResponse" action="' + browser.baseGetData('upload') + '">' +
|
---|
| 124 | '<input type="file" name="upload[]" onchange="browser.uploadFile(this.form)" style="height:' + height + 'px" multiple="multiple" />' +
|
---|
| 125 | '<input type="hidden" name="dir" value="" />' +
|
---|
| 126 | '</form>' +
|
---|
| 127 | '</div>');
|
---|
| 128 | $('#upload input').css('margin-left', "-" + ($('#upload input').outerWidth() - width) + 'px');
|
---|
| 129 | $('#upload').mouseover(function() {
|
---|
| 130 | $('#toolbar a[href="kcact:upload"]').addClass('hover');
|
---|
| 131 | });
|
---|
| 132 | $('#upload').mouseout(function() {
|
---|
| 133 | $('#toolbar a[href="kcact:upload"]').removeClass('hover');
|
---|
| 134 | });
|
---|
| 135 | };
|
---|
| 136 |
|
---|
| 137 | browser.uploadFile = function(form) {
|
---|
| 138 | if (!this.dirWritable) {
|
---|
| 139 | browser.alert(this.label("Cannot write to upload folder."));
|
---|
| 140 | $('#upload').detach();
|
---|
| 141 | browser.initUploadButton();
|
---|
| 142 | return;
|
---|
| 143 | }
|
---|
| 144 | form.elements[1].value = browser.dir;
|
---|
| 145 | $('<iframe id="uploadResponse" name="uploadResponse" src="javascript:;"></iframe>').prependTo(document.body);
|
---|
| 146 | $('#loading').html(this.label("Uploading file..."));
|
---|
| 147 | $('#loading').css('display', 'inline');
|
---|
| 148 | form.submit();
|
---|
| 149 | $('#uploadResponse').load(function() {
|
---|
| 150 | var response = $(this).contents().find('body').html();
|
---|
| 151 | $('#loading').css('display', 'none');
|
---|
| 152 | response = response.split("\n");
|
---|
| 153 | var selected = [], errors = [];
|
---|
| 154 | $.each(response, function(i, row) {
|
---|
| 155 | if (row.substr(0, 1) == '/')
|
---|
| 156 | selected[selected.length] = row.substr(1, row.length - 1)
|
---|
| 157 | else
|
---|
| 158 | errors[errors.length] = row;
|
---|
| 159 | });
|
---|
| 160 | if (errors.length)
|
---|
| 161 | browser.alert(errors.join("\n"));
|
---|
| 162 | if (!selected.length)
|
---|
| 163 | selected = null
|
---|
| 164 | browser.refresh(selected);
|
---|
| 165 | $('#upload').detach();
|
---|
| 166 | setTimeout(function() {
|
---|
| 167 | $('#uploadResponse').detach();
|
---|
| 168 | }, 1);
|
---|
| 169 | browser.initUploadButton();
|
---|
| 170 | });
|
---|
| 171 | };
|
---|
| 172 |
|
---|
| 173 | browser.maximize = function(button) {
|
---|
| 174 | if (window.opener) {
|
---|
| 175 | window.moveTo(0, 0);
|
---|
| 176 | width = screen.availWidth;
|
---|
| 177 | height = screen.availHeight;
|
---|
| 178 | if ($.browser.opera)
|
---|
| 179 | height -= 50;
|
---|
| 180 | window.resizeTo(width, height);
|
---|
| 181 |
|
---|
| 182 | } else if (browser.opener.TinyMCE) {
|
---|
| 183 | var win, ifr, id;
|
---|
| 184 |
|
---|
| 185 | $('iframe', window.parent.document).each(function() {
|
---|
| 186 | if (/^mce_\d+_ifr$/.test($(this).attr('id'))) {
|
---|
| 187 | id = parseInt($(this).attr('id').replace(/^mce_(\d+)_ifr$/, "$1"));
|
---|
| 188 | win = $('#mce_' + id, window.parent.document);
|
---|
| 189 | ifr = $('#mce_' + id + '_ifr', window.parent.document);
|
---|
| 190 | }
|
---|
| 191 | });
|
---|
| 192 |
|
---|
| 193 | if ($(button).hasClass('selected')) {
|
---|
| 194 | $(button).removeClass('selected');
|
---|
| 195 | win.css({
|
---|
| 196 | left: browser.maximizeMCE.left + 'px',
|
---|
| 197 | top: browser.maximizeMCE.top + 'px',
|
---|
| 198 | width: browser.maximizeMCE.width + 'px',
|
---|
| 199 | height: browser.maximizeMCE.height + 'px'
|
---|
| 200 | });
|
---|
| 201 | ifr.css({
|
---|
| 202 | width: browser.maximizeMCE.width - browser.maximizeMCE.Hspace + 'px',
|
---|
| 203 | height: browser.maximizeMCE.height - browser.maximizeMCE.Vspace + 'px'
|
---|
| 204 | });
|
---|
| 205 |
|
---|
| 206 | } else {
|
---|
| 207 | $(button).addClass('selected')
|
---|
| 208 | browser.maximizeMCE = {
|
---|
| 209 | width: _.nopx(win.css('width')),
|
---|
| 210 | height: _.nopx(win.css('height')),
|
---|
| 211 | left: win.position().left,
|
---|
| 212 | top: win.position().top,
|
---|
| 213 | Hspace: _.nopx(win.css('width')) - _.nopx(ifr.css('width')),
|
---|
| 214 | Vspace: _.nopx(win.css('height')) - _.nopx(ifr.css('height'))
|
---|
| 215 | };
|
---|
| 216 | var width = $(window.parent).width();
|
---|
| 217 | var height = $(window.parent).height();
|
---|
| 218 | win.css({
|
---|
| 219 | left: $(window.parent).scrollLeft() + 'px',
|
---|
| 220 | top: $(window.parent).scrollTop() + 'px',
|
---|
| 221 | width: width + 'px',
|
---|
| 222 | height: height + 'px'
|
---|
| 223 | });
|
---|
| 224 | ifr.css({
|
---|
| 225 | width: width - browser.maximizeMCE.Hspace + 'px',
|
---|
| 226 | height: height - browser.maximizeMCE.Vspace + 'px'
|
---|
| 227 | });
|
---|
| 228 | }
|
---|
| 229 |
|
---|
| 230 | } else if ($('iframe', window.parent.document).get(0)) {
|
---|
| 231 | var ifrm = $('iframe[name="' + window.name + '"]', window.parent.document);
|
---|
| 232 | var parent = ifrm.parent();
|
---|
| 233 | var width, height;
|
---|
| 234 | if ($(button).hasClass('selected')) {
|
---|
| 235 | $(button).removeClass('selected');
|
---|
| 236 | if (browser.maximizeThread) {
|
---|
| 237 | clearInterval(browser.maximizeThread);
|
---|
| 238 | browser.maximizeThread = null;
|
---|
| 239 | }
|
---|
| 240 | if (browser.maximizeW) browser.maximizeW = null;
|
---|
| 241 | if (browser.maximizeH) browser.maximizeH = null;
|
---|
| 242 | $.each($('*', window.parent.document).get(), function(i, e) {
|
---|
| 243 | e.style.display = browser.maximizeDisplay[i];
|
---|
| 244 | });
|
---|
| 245 | ifrm.css({
|
---|
| 246 | display: browser.maximizeCSS.display,
|
---|
| 247 | position: browser.maximizeCSS.position,
|
---|
| 248 | left: browser.maximizeCSS.left,
|
---|
| 249 | top: browser.maximizeCSS.top,
|
---|
| 250 | width: browser.maximizeCSS.width,
|
---|
| 251 | height: browser.maximizeCSS.height
|
---|
| 252 | });
|
---|
| 253 | $(window.parent).scrollLeft(browser.maximizeLest);
|
---|
| 254 | $(window.parent).scrollTop(browser.maximizeTop);
|
---|
| 255 |
|
---|
| 256 | } else {
|
---|
| 257 | $(button).addClass('selected');
|
---|
| 258 | browser.maximizeCSS = {
|
---|
| 259 | display: ifrm.css('display'),
|
---|
| 260 | position: ifrm.css('position'),
|
---|
| 261 | left: ifrm.css('left'),
|
---|
| 262 | top: ifrm.css('top'),
|
---|
| 263 | width: ifrm.outerWidth() + 'px',
|
---|
| 264 | height: ifrm.outerHeight() + 'px'
|
---|
| 265 | };
|
---|
| 266 | browser.maximizeTop = $(window.parent).scrollTop();
|
---|
| 267 | browser.maximizeLeft = $(window.parent).scrollLeft();
|
---|
| 268 | browser.maximizeDisplay = [];
|
---|
| 269 | $.each($('*', window.parent.document).get(), function(i, e) {
|
---|
| 270 | browser.maximizeDisplay[i] = $(e).css('display');
|
---|
| 271 | $(e).css('display', 'none');
|
---|
| 272 | });
|
---|
| 273 |
|
---|
| 274 | ifrm.css('display', 'block');
|
---|
| 275 | ifrm.parents().css('display', 'block');
|
---|
| 276 | var resize = function() {
|
---|
| 277 | width = $(window.parent).width();
|
---|
| 278 | height = $(window.parent).height();
|
---|
| 279 | if (!browser.maximizeW || (browser.maximizeW != width) ||
|
---|
| 280 | !browser.maximizeH || (browser.maximizeH != height)
|
---|
| 281 | ) {
|
---|
| 282 | browser.maximizeW = width;
|
---|
| 283 | browser.maximizeH = height;
|
---|
| 284 | ifrm.css({
|
---|
| 285 | width: width + 'px',
|
---|
| 286 | height: height + 'px'
|
---|
| 287 | });
|
---|
| 288 | browser.resize();
|
---|
| 289 | }
|
---|
| 290 | }
|
---|
| 291 | ifrm.css('position', 'absolute');
|
---|
| 292 | if ((ifrm.offset().left == ifrm.position().left) &&
|
---|
| 293 | (ifrm.offset().top == ifrm.position().top)
|
---|
| 294 | )
|
---|
| 295 | ifrm.css({left: '0', top: '0'});
|
---|
| 296 | else
|
---|
| 297 | ifrm.css({
|
---|
| 298 | left: - ifrm.offset().left + 'px',
|
---|
| 299 | top: - ifrm.offset().top + 'px'
|
---|
| 300 | });
|
---|
| 301 |
|
---|
| 302 | resize();
|
---|
| 303 | browser.maximizeThread = setInterval(resize, 250);
|
---|
| 304 | }
|
---|
| 305 | }
|
---|
| 306 | };
|
---|
| 307 |
|
---|
| 308 | browser.refresh = function(selected) {
|
---|
| 309 | this.fadeFiles();
|
---|
| 310 | $.ajax({
|
---|
| 311 | type: 'POST',
|
---|
| 312 | dataType: 'json',
|
---|
| 313 | url: browser.baseGetData('chDir'),
|
---|
| 314 | data: {dir:browser.dir},
|
---|
| 315 | async: false,
|
---|
| 316 | success: function(data) {
|
---|
| 317 | if (browser.check4errors(data))
|
---|
| 318 | return;
|
---|
| 319 | browser.dirWritable = data.dirWritable;
|
---|
| 320 | browser.files = data.files ? data.files : [];
|
---|
| 321 | browser.orderFiles(null, selected);
|
---|
| 322 | browser.statusDir();
|
---|
| 323 | },
|
---|
| 324 | error: function() {
|
---|
| 325 | $('#files > div').css({opacity:'', filter:''});
|
---|
| 326 | $('#files').html(browser.label("Unknown error."));
|
---|
| 327 | }
|
---|
| 328 | });
|
---|
| 329 | };
|
---|