3 /** This file is part of KCFinder project
5 * @desc Toolbar functionality
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
15 browser.initToolbar = function() {
16 $('#toolbar a').click(function() {
20 if (!_.kuki.isSet('displaySettings'))
21 _.kuki.set('displaySettings', 'off');
23 if (_.kuki.get('displaySettings') == 'on') {
24 $('#toolbar a[href="kcact:settings"]').addClass('selected');
25 $('#settings').css('display', 'block');
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();
36 $(this).removeClass('selected');
37 _.kuki.set('displaySettings', 'off');
38 $('#settings').css('display', 'none');
39 browser.fixFilesHeight();
44 $('#toolbar a[href="kcact:refresh"]').click(function() {
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);
55 $('#toolbar a[href="kcact:maximize"]').css('display', 'none');
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>';
63 '<div>' + browser.label("Licenses:") + ' GPLv2 & LGPLv2</div>' +
64 '<div>Copyright ©2010, 2011 Pavel Tzonkov</div>' +
65 '<button>' + browser.label("OK") + '</button>' +
67 $('#dialog').html(html);
68 $('#dialog').data('title', browser.label("About"));
70 var close = function() {
74 $('#dialog button').click(close);
75 var span = $('#checkver > span');
76 setTimeout(function() {
79 url: browser.baseGetData('check4Update'),
81 success: function(data) {
82 if (!$('#dialog').html().length)
84 span.removeClass('loading');
86 span.html(browser.label("Unable to connect!"));
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>');
93 span.html(browser.label("KCFinder is up to date!"));
97 if (!$('#dialog').html().length)
99 span.removeClass('loading');
100 span.html(browser.label("Unable to connect!"));
101 browser.showDialog();
105 $('#dialog').unbind();
110 this.initUploadButton();
113 browser.initUploadButton = function() {
114 var btn = $('#toolbar a[href="kcact:upload"]');
115 if (!this.access.files.upload) {
116 btn.css('display', 'none');
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="" />' +
128 $('#upload input').css('margin-left', "-" + ($('#upload input').outerWidth() - width) + 'px');
129 $('#upload').mouseover(function() {
130 $('#toolbar a[href="kcact:upload"]').addClass('hover');
132 $('#upload').mouseout(function() {
133 $('#toolbar a[href="kcact:upload"]').removeClass('hover');
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();
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');
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)
158 errors[errors.length] = row;
161 browser.alert(errors.join("\n"));
162 if (!selected.length)
164 browser.refresh(selected);
165 $('#upload').detach();
166 setTimeout(function() {
167 $('#uploadResponse').detach();
169 browser.initUploadButton();
173 browser.maximize = function(button) {
176 width = screen.availWidth;
177 height = screen.availHeight;
180 window.resizeTo(width, height);
182 } else if (browser.opener.TinyMCE) {
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);
193 if ($(button).hasClass('selected')) {
194 $(button).removeClass('selected');
196 left: browser.maximizeMCE.left + 'px',
197 top: browser.maximizeMCE.top + 'px',
198 width: browser.maximizeMCE.width + 'px',
199 height: browser.maximizeMCE.height + 'px'
202 width: browser.maximizeMCE.width - browser.maximizeMCE.Hspace + 'px',
203 height: browser.maximizeMCE.height - browser.maximizeMCE.Vspace + 'px'
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'))
216 var width = $(window.parent).width();
217 var height = $(window.parent).height();
219 left: $(window.parent).scrollLeft() + 'px',
220 top: $(window.parent).scrollTop() + 'px',
222 height: height + 'px'
225 width: width - browser.maximizeMCE.Hspace + 'px',
226 height: height - browser.maximizeMCE.Vspace + 'px'
230 } else if ($('iframe', window.parent.document).get(0)) {
231 var ifrm = $('iframe[name="' + window.name + '"]', window.parent.document);
232 var parent = ifrm.parent();
234 if ($(button).hasClass('selected')) {
235 $(button).removeClass('selected');
236 if (browser.maximizeThread) {
237 clearInterval(browser.maximizeThread);
238 browser.maximizeThread = null;
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];
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
253 $(window.parent).scrollLeft(browser.maximizeLest);
254 $(window.parent).scrollTop(browser.maximizeTop);
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'
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');
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)
282 browser.maximizeW = width;
283 browser.maximizeH = height;
286 height: height + 'px'
291 ifrm.css('position', 'absolute');
292 if ((ifrm.offset().left == ifrm.position().left) &&
293 (ifrm.offset().top == ifrm.position().top)
295 ifrm.css({left: '0', top: '0'});
298 left: - ifrm.offset().left + 'px',
299 top: - ifrm.offset().top + 'px'
303 browser.maximizeThread = setInterval(resize, 250);
308 browser.refresh = function(selected) {
313 url: browser.baseGetData('chDir'),
314 data: {dir:browser.dir},
316 success: function(data) {
317 if (browser.check4errors(data))
319 browser.dirWritable = data.dirWritable;
320 browser.files = data.files ? data.files : [];
321 browser.orderFiles(null, selected);
325 $('#files > div').css({opacity:'', filter:''});
326 $('#files').html(browser.label("Unknown error."));