1 function resizeIframe(obj) {
6 function _resizeIframe(obj, desth) {
7 var h = obj.style.height;
8 var ch = obj.contentWindow.document.body.scrollHeight + 'px';
12 console.log("_resizeIframe", obj, desth, ch);
14 setTimeout(_resizeIframe, 500, obj, ch);
16 obj.style.height = ch;
17 setTimeout(_resizeIframe, 1000, obj, ch);
21 function openClose(theID) {
22 if(document.getElementById(theID).style.display == "block") {
23 document.getElementById(theID).style.display = "none"
26 document.getElementById(theID).style.display = "block"
30 function openMenu(theID) {
31 document.getElementById(theID).style.display = "block"
34 function closeMenu(theID) {
35 document.getElementById(theID).style.display = "none"
43 var force_update = false;
45 var totStopped = false;
49 var in_progress = false;
50 var langSelect = false;
51 var commentBusy = false;
52 var last_popup_menu = null;
53 var last_popup_button = null;
56 $.ajaxSetup({cache: false});
58 /* setup tooltips *//*
59 $("a,.tt").each(function(){
62 if (e.hasClass("tttop")) pos="top";
63 if (e.hasClass("ttbottom")) pos="bottom";
64 if (e.hasClass("ttleft")) pos="left";
65 if (e.hasClass("ttright")) pos="right";
66 e.tipTip({defaultPosition: pos, edgeOffset: 8});
69 /* setup comment textarea buttons */
70 /* comment textarea buttons needs some "data-*" attributes to work:
71 * data-role="insert-formatting" : to mark the element as a formatting button
72 * data-comment="<string>" : string for "Comment", used by insertFormatting() function
73 * data-bbcode="<string>" : name of the bbcode element to insert. insertFormatting() will insert it as "[name][/name]"
74 * data-id="<string>" : id of the comment, used to find other comment-related element, like the textarea
76 $('body').on('click','[data-role="insert-formatting"]', function(e) {
79 var comment = o.data('comment');
80 var bbcode = o.data('bbcode');
81 var id = o.data('id');
83 Dialog.doImageBrowser("comment", id);
86 insertFormatting(comment, bbcode, id);
89 /* event from comment textarea button popups */
90 /* insert returned bbcode at cursor position or replace selected text */
91 $("body").on("fbrowser.image.comment", function(e, filename, bbcode, id) {
92 console.log("on", id);
94 var textarea = document.getElementById("comment-edit-text-" +id);
95 var start = textarea.selectionStart;
96 var end = textarea.selectionEnd;
97 textarea.value = textarea.value.substring(0, start) + bbcode + textarea.value.substring(end, textarea.value.length);
102 /* setup onoff widgets */
103 $(".onoff input").each(function(){
105 id = $(this).attr("id");
106 $("#"+id+"_onoff ."+ (val==0?"on":"off")).addClass("hidden");
109 $(".onoff > a").click(function(event){
110 event.preventDefault();
111 var input = $(this).siblings("input");
112 var val = 1-input.val();
113 var id = input.attr("id");
114 $("#"+id+"_onoff ."+ (val==0?"on":"off")).addClass("hidden");
115 $("#"+id+"_onoff ."+ (val==1?"on":"off")).removeClass("hidden");
120 /* setup field_richtext */
121 setupFieldRichtext();
124 function close_last_popup_menu() {
125 if(last_popup_menu) {
126 last_popup_menu.hide();
127 last_popup_button.removeClass("selected");
128 last_popup_menu = null;
129 last_popup_button = null;
132 $('a[rel^=#]').click(function(e){
134 var parent = $(this).parent();
135 var isSelected = (last_popup_button && parent.attr('id') == last_popup_button.attr('id'));
136 close_last_popup_menu();
137 if(isSelected) return false;
138 menu = $( $(this).attr('rel') );
141 if (menu.attr('popup')=="false") return false;
142 parent.toggleClass("selected");
144 if (menu.css("display") == "none") {
145 last_popup_menu = null;
146 last_popup_button = null;
148 last_popup_menu = menu;
149 last_popup_button = parent;
153 $('html').click(function() {
154 close_last_popup_menu();
158 $("a.popupbox").colorbox({
160 'transition' : 'elastic'
164 /* notifications template */
165 var notifications_tpl= unescape($("#nav-notifications-template[rel=template]").html());
166 var notifications_all = unescape($('<div>').append( $("#nav-notifications-see-all").clone() ).html()); //outerHtml hack
167 var notifications_mark = unescape($('<div>').append( $("#nav-notifications-mark-all").clone() ).html()); //outerHtml hack
168 var notifications_empty = unescape($("#nav-notifications-menu").html());
170 /* nav update event */
171 $('nav').bind('nav-update', function(e,data){
172 var invalid = $(data).find('invalid').text();
173 if(invalid == 1) { window.location.href=window.location.href }
175 var net = $(data).find('net').text();
176 if(net == 0) { net = ''; $('#net-update').removeClass('show') } else { $('#net-update').addClass('show') }
177 $('#net-update').html(net);
179 var home = $(data).find('home').text();
180 if(home == 0) { home = ''; $('#home-update').removeClass('show') } else { $('#home-update').addClass('show') }
181 $('#home-update').html(home);
183 var intro = $(data).find('intro').text();
184 if(intro == 0) { intro = ''; $('#intro-update').removeClass('show') } else { $('#intro-update').addClass('show') }
185 $('#intro-update').html(intro);
187 var mail = $(data).find('mail').text();
188 if(mail == 0) { mail = ''; $('#mail-update').removeClass('show') } else { $('#mail-update').addClass('show') }
189 $('#mail-update').html(mail);
191 var intro = $(data).find('intro').text();
192 if(intro == 0) { intro = ''; $('#intro-update-li').removeClass('show') } else { $('#intro-update-li').addClass('show') }
193 $('#intro-update-li').html(intro);
195 var mail = $(data).find('mail').text();
196 if(mail == 0) { mail = ''; $('#mail-update-li').removeClass('show') } else { $('#mail-update-li').addClass('show') }
197 $('#mail-update-li').html(mail);
200 var allevents = $(data).find('all-events').text();
201 if(allevents == 0) { allevents = ''; $('#allevents-update').removeClass('show') } else { $('#allevents-update').addClass('show') }
202 $('#allevents-update').html(allevents);
204 var alleventstoday = $(data).find('all-events-today').text();
205 if(alleventstoday == 0) { $('#allevents-update').removeClass('notif-allevents-today') } else { $('#allevents-update').addClass('notif-allevents-today') }
207 var events = $(data).find('events').text();
208 if(events == 0) { events = ''; $('#events-update').removeClass('show') } else { $('#events-update').addClass('show') }
209 $('#events-update').html(events);
211 var eventstoday = $(data).find('events-today').text();
212 if(eventstoday == 0) { $('#events-update').removeClass('notif-events-today') } else { $('#events-update').addClass('notif-events-today') }
214 var birthdays = $(data).find('birthdays').text();
215 if(birthdays == 0) {birthdays = ''; $('#birthdays-update').removeClass('show') } else { $('#birthdays-update').addClass('show') }
216 $('#birthdays-update').html(birthdays);
218 var birthdaystoday = $(data).find('birthdays-today').text();
219 if(birthdaystoday == 0) { $('#birthdays-update').removeClass('notif-birthdays-today') } else { $('#birthdays-update').addClass('notif-birthdays-today') }
221 $(".sidebar-group-li .notify").removeClass("show");
222 $(data).find("group").each(function() {
224 var gcount = this.innerHTML;
225 $(".group-"+gid+" .notify").addClass("show").text(gcount);
228 $(".forum-widget-entry .notify").removeClass("show");
229 $(data).find("forum").each(function() {
231 var fcount = this.innerHTML;
232 $(".forum-"+fid+" .notify").addClass("show").text(fcount);
236 var eNotif = $(data).find('notif')
238 if (eNotif.children("note").length==0){
239 $("#nav-notifications-menu").html(notifications_empty);
241 nnm = $("#nav-notifications-menu");
242 nnm.html(notifications_all + notifications_mark);
243 //nnm.attr('popup','true');
245 var notification_lastitem = parseInt(localStorage.getItem("notification-lastitem"));
246 var notification_id = 0;
247 eNotif.children("note").each(function(){
249 var text = e.text().format("<span class='contactname'>"+e.attr('name')+"</span>");
250 var seenclass = (e.attr('seen')==1)?"notify-seen":"notify-unseen";
251 var html = notifications_tpl.format(e.attr('href'),
252 e.attr('photo'), // {0}
254 e.attr('date'), // {2}
256 new Date(e.attr('timestamp')*1000) // {4}
260 $(eNotif.children("note").get().reverse()).each(function(){
262 notification_id = parseInt(e.attr('timestamp'));
263 if (notification_lastitem!== null && notification_id > notification_lastitem) {
264 if (getNotificationPermission()==="granted") {
265 var notification = new Notification(document.title, {
266 body: e.text().replace('→ ','').format(e.attr('name')),
267 icon: e.attr('photo'),
269 notification['url'] = e.attr('href');
270 notification.addEventListener("click", function(ev){
271 window.location = ev.target.url;
277 notification_lastitem = notification_id;
278 localStorage.setItem("notification-lastitem", notification_lastitem)
280 $("img[data-src]", nnm).each(function(i, el){
281 // Add src attribute for images with a data-src attribute
282 // However, don't bother if the data-src attribute is empty, because
283 // an empty "src" tag for an image will cause some browsers
284 // to prefetch the root page of the Friendica hub, which will
285 // unnecessarily load an entire profile/ or network/ page
286 if($(el).data("src") != '') $(el).attr('src', $(el).data("src"));
290 notif = eNotif.attr('count');
292 $("#nav-notifications-linkmenu").addClass("on");
294 $("#nav-notifications-linkmenu").removeClass("on");
296 if(notif == 0) { notif = ''; $('#notify-update').removeClass('show') } else { $('#notify-update').addClass('show') }
297 $('#notify-update').html(notif);
299 var eSysmsg = $(data).find('sysmsgs');
300 eSysmsg.children("notice").each(function(){
301 text = $(this).text();
302 $.jGrowl(text, { sticky: true, theme: 'notice' });
304 eSysmsg.children("info").each(function(){
305 text = $(this).text();
306 $.jGrowl(text, { sticky: false, theme: 'info', life: 5000 });
312 // Allow folks to stop the ajax page updates with the pause/break key
313 $(document).keydown(function(event) {
314 if(event.keyCode == '8') {
315 var target = event.target || event.srcElement;
316 if (!/input|textarea/i.test(target.nodeName)) {
320 if(event.keyCode == '19' || (event.ctrlKey && event.which == '32')) {
321 event.preventDefault();
322 if(stopped == false) {
327 $('#pause').html('<img src="images/pause.gif" alt="pause" style="border: 1px solid black;" />');
341 function NavUpdate() {
344 var pingCmd = 'ping' + ((localUser != 0) ? '?f=&uid=' + localUser : '');
345 $.get(pingCmd,function(data) {
346 $(data).find('result').each(function() {
347 // send nav-update event
348 $('nav').trigger('nav-update', this);
353 if($('#live-network').length) { src = 'network'; liveUpdate(); }
354 if($('#live-profile').length) { src = 'profile'; liveUpdate(); }
355 if($('#live-community').length) { src = 'community'; liveUpdate(); }
356 if($('#live-notes').length) { src = 'notes'; liveUpdate(); }
357 if($('#live-display').length) { src = 'display'; liveUpdate(); }
358 /* if($('#live-display').length) {
361 window.location.href=window.location.href
364 if($('#live-photos').length) {
367 window.location.href=window.location.href
377 timer = setTimeout(NavUpdate,updateInterval);
380 function liveUpdate() {
381 if((src == null) || (stopped) || (! profile_uid)) { $('.like-rotator').hide(); return; }
382 if(($('.comment-edit-text-full').length) || (in_progress)) {
384 clearTimeout(livetime);
386 livetime = setTimeout(liveUpdate, 5000);
392 prev = 'live-' + src;
396 if ($(document).scrollTop() == 0)
399 var udargs = ((netargs.length) ? '/' + netargs : '');
400 var update_url = 'update_' + src + udargs + '&p=' + profile_uid + '&page=' + profile_page + '&force=' + ((force_update) ? 1 : 0);
402 $.get(update_url,function(data) {
404 force_update = false;
405 // $('.collapsed-comments',data).each(function() {
406 // var ident = $(this).attr('id');
407 // var is_hidden = $('#' + ident).is(':hidden');
408 // if($('#' + ident).length) {
409 // $('#' + ident).replaceWith($(this));
411 // $('#' + ident).hide();
416 $('.toplevel_item',data).each(function() {
417 var ident = $(this).attr('id');
419 if($('#' + ident).length == 0 && profile_page == 1) {
420 $('img',this).each(function() {
421 $(this).attr('src',$(this).attr('dst'));
423 $('#' + prev).after($(this));
426 // Find out if the hidden comments are open, so we can keep it that way
427 // if a new comment has been posted
428 var id = $('.hide-comments-total', this).attr('id');
429 if(typeof id != 'undefined') {
430 id = id.split('-')[3];
431 var commentsOpen = $("#collapsed-comments-" + id).is(":visible");
434 $('img',this).each(function() {
435 $(this).attr('src',$(this).attr('dst'));
437 //vScroll = $(document).scrollTop();
438 $('html').height($('html').height());
439 $('#' + ident).replaceWith($(this));
441 if(typeof id != 'undefined') {
442 if(commentsOpen) showHideComments(id);
444 $('html').height('auto');
445 //$(document).scrollTop(vScroll);
450 // reset vars for inserting individual items
452 /* prev = 'live-' + src;
454 $('.wall-item-outside-wrapper',data).each(function() {
455 var ident = $(this).attr('id');
457 if($('#' + ident).length == 0 && prev != 'live-' + src) {
458 $('img',this).each(function() {
459 $(this).attr('src',$(this).attr('dst'));
461 $('#' + prev).after($(this));
464 $('#' + ident + ' ' + '.wall-item-ago').replaceWith($(this).find('.wall-item-ago'));
465 if($('#' + ident + ' ' + '.comment-edit-text-empty').length)
466 $('#' + ident + ' ' + '.wall-item-comment-wrapper').replaceWith($(this).find('.wall-item-comment-wrapper'));
467 $('#' + ident + ' ' + '.hide-comments-total').replaceWith($(this).find('.hide-comments-total'));
468 $('#' + ident + ' ' + '.wall-item-like').replaceWith($(this).find('.wall-item-like'));
469 $('#' + ident + ' ' + '.wall-item-dislike').replaceWith($(this).find('.wall-item-dislike'));
470 $('#' + ident + ' ' + '.my-comment-photo').each(function() {
471 $(this).attr('src',$(this).attr('dst'));
477 $('.like-rotator').hide();
480 $('body').css('cursor', 'auto');
482 /* autocomplete @nicknames */
483 $(".comment-edit-form textarea").contact_autocomplete(baseurl+"/acl");
485 // setup videos, since VideoJS won't take care of any loaded via AJAX
486 if(typeof videojs != 'undefined') videojs.autoSetup();
490 function imgbright(node) {
491 $(node).removeClass("drophide").addClass("drop");
494 function imgdull(node) {
495 $(node).removeClass("drop").addClass("drophide");
498 // Since our ajax calls are asynchronous, we will give a few
499 // seconds for the first ajax call (setting like/dislike), then
500 // run the updater to pick up any changes and display on the page.
501 // The updater will turn any rotators off when it's done.
502 // This function will have returned long before any of these
503 // events have completed and therefore there won't be any
504 // visible feedback that anything changed without all this
505 // trickery. This still could cause confusion if the "like" ajax call
506 // is delayed and NavUpdate runs before it completes.
508 function dolike(ident,verb) {
510 $('#like-rotator-' + ident.toString()).show();
511 $.get('like/' + ident.toString() + '?verb=' + verb, NavUpdate );
516 function dosubthread(ident) {
518 $('#like-rotator-' + ident.toString()).show();
519 $.get('subthread/' + ident.toString(), NavUpdate );
524 function dostar(ident) {
525 ident = ident.toString();
526 $('#like-rotator-' + ident).show();
527 $.get('starred/' + ident, function(data) {
528 if(data.match(/1/)) {
529 $('#starred-' + ident).addClass('starred');
530 $('#starred-' + ident).removeClass('unstarred');
531 $('#star-' + ident).addClass('hidden');
532 $('#unstar-' + ident).removeClass('hidden');
535 $('#starred-' + ident).addClass('unstarred');
536 $('#starred-' + ident).removeClass('starred');
537 $('#star-' + ident).removeClass('hidden');
538 $('#unstar-' + ident).addClass('hidden');
540 $('#like-rotator-' + ident).hide();
544 function doignore(ident) {
545 ident = ident.toString();
546 $('#like-rotator-' + ident).show();
547 $.get('ignored/' + ident, function(data) {
548 if(data.match(/1/)) {
549 $('#ignored-' + ident).addClass('ignored');
550 $('#ignored-' + ident).removeClass('unignored');
551 $('#ignore-' + ident).addClass('hidden');
552 $('#unignore-' + ident).removeClass('hidden');
555 $('#ignored-' + ident).addClass('unignored');
556 $('#ignored-' + ident).removeClass('ignored');
557 $('#ignore-' + ident).removeClass('hidden');
558 $('#unignore-' + ident).addClass('hidden');
560 $('#like-rotator-' + ident).hide();
564 function getPosition(e) {
565 var cursor = {x:0, y:0};
566 if ( e.pageX || e.pageY ) {
571 if( e.clientX || e.clientY ) {
572 cursor.x = e.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft) - document.documentElement.clientLeft;
573 cursor.y = e.clientY + (document.documentElement.scrollTop || document.body.scrollTop) - document.documentElement.clientTop;
585 var lockvisible = false;
587 function lockview(event,id) {
588 event = event || window.event;
589 cursor = getPosition(event);
595 $.get('lockview/' + id, function(data) {
596 $('#panel').html(data);
597 $('#panel').css({ 'left': cursor.x + 5 , 'top': cursor.y + 5});
603 function lockviewhide() {
608 function post_comment(id) {
611 $('body').css('cursor', 'wait');
612 $("#comment-preview-inp-" + id).val("0");
615 $("#comment-edit-form-" + id).serialize(),
618 $("#comment-edit-wrapper-" + id).hide();
619 $("#comment-edit-text-" + id).val('');
620 var tarea = document.getElementById("comment-edit-text-" + id);
622 commentClose(tarea,id);
623 if(timer) clearTimeout(timer);
624 timer = setTimeout(NavUpdate,10);
628 window.location.href=data.reload;
637 function preview_comment(id) {
638 $("#comment-preview-inp-" + id).val("1");
639 $("#comment-edit-preview-" + id).show();
642 $("#comment-edit-form-" + id).serialize(),
645 $("#comment-edit-preview-" + id).html(data.preview);
646 $("#comment-edit-preview-" + id + " a").click(function() { return false; });
656 function showHideComments(id) {
657 if( $("#collapsed-comments-" + id).is(":visible")) {
658 $("#collapsed-comments-" + id).hide();
659 $("#hide-comments-" + id).html(window.showMore);
662 $("#collapsed-comments-" + id).show();
663 $("#hide-comments-" + id).html(window.showFewer);
669 function preview_post() {
670 $("#jot-preview").val("1");
671 $("#jot-preview-content").show();
672 tinyMCE.triggerSave();
675 $("#profile-jot-form").serialize(),
678 $("#jot-preview-content").html(data.preview);
679 $("#jot-preview-content" + " a").click(function() { return false; });
684 $("#jot-preview").val("0");
690 // unpause auto reloads if they are currently stopped
693 $('#pause').html('');
698 // Converts the binary representation of data to hex
701 // discuss at: http://phpjs.org/functions/bin2hex
702 // + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
703 // + bugfixed by: Onno Marsman
704 // + bugfixed by: Linuxworld
705 // * example 1: bin2hex('Kev');
706 // * returns 1: '4b6576'
707 // * example 2: bin2hex(String.fromCharCode(0x00));
709 var v,i, f = 0, a = [];
713 for (i = 0; i<f; i++) {
714 a[i] = s.charCodeAt(i).toString(16).replace(/^([\da-f])$/,"0$1");
720 function groupChangeMember(gid, cid, sec_token) {
721 $('body .fakelink').css('cursor', 'wait');
722 $.get('group/' + gid + '/' + cid + "?t=" + sec_token, function(data) {
723 $('#group-update-wrapper').html(data);
724 $('body .fakelink').css('cursor', 'auto');
728 function profChangeMember(gid,cid) {
729 $('body .fakelink').css('cursor', 'wait');
730 $.get('profperm/' + gid + '/' + cid, function(data) {
731 $('#prof-update-wrapper').html(data);
732 $('body .fakelink').css('cursor', 'auto');
736 function contactgroupChangeMember(gid,cid) {
737 $('body').css('cursor', 'wait');
738 $.get('contactgroup/' + gid + '/' + cid, function(data) {
739 $('body').css('cursor', 'auto');
744 function checkboxhighlight(box) {
745 if($(box).is(':checked')) {
746 $(box).addClass('checkeditem');
749 $(box).removeClass('checkeditem');
753 function notifyMarkAll() {
754 $.get('notify/mark/all', function(data) {
755 if(timer) clearTimeout(timer);
756 timer = setTimeout(NavUpdate,1000);
762 // code from http://www.tinymce.com/wiki.php/How-to_implement_a_custom_file_browser
763 function fcFileBrowser (field_name, url, type, win) {
764 /* TODO: If you work with sessions in PHP and your client doesn't accept cookies you might need to carry
765 the session name and session ID in the request string (can look like this: "?PHPSESSID=88p0n70s9dsknra96qhuk6etm5").
766 These lines of code extract the necessary parameters and add them back to the filebrowser URL again. */
769 var cmsURL = baseurl+"/fbrowser/"+type+"/";
771 tinyMCE.activeEditor.windowManager.open({
773 title : 'File Browser',
774 width : 420, // Your dimensions may differ - toy around with them!
777 inline : "yes", // This parameter only has an effect if you use the inlinepopups plugin!
778 close_previous : "no"
786 function setupFieldRichtext(){
789 mode : "specific_textareas",
790 editor_selector: "fieldRichtext",
791 plugins : "bbcode,paste, inlinepopups",
792 theme_advanced_buttons1 : "bold,italic,underline,undo,redo,link,unlink,image,forecolor,formatselect,code",
793 theme_advanced_buttons2 : "",
794 theme_advanced_buttons3 : "",
795 theme_advanced_toolbar_location : "top",
796 theme_advanced_toolbar_align : "center",
797 theme_advanced_blockformats : "blockquote,code",
798 theme_advanced_resizing : true,
799 paste_text_sticky : true,
800 entity_encoding : "raw",
801 add_unload_trigger : false,
802 remove_linebreaks : false,
803 //force_p_newlines : false,
804 //force_br_newlines : true,
805 forced_root_block : 'div',
807 content_css: baseurl+"/view/custom_tinymce.css",
808 theme_advanced_path : false,
809 file_browser_callback : "fcFileBrowser",
815 * sprintf in javascript
816 * "{0} and {1}".format('zero','uno');
818 String.prototype.format = function() {
819 var formatted = this;
820 for (var i = 0; i < arguments.length; i++) {
821 var regexp = new RegExp('\\{'+i+'\\}', 'gi');
822 formatted = formatted.replace(regexp, arguments[i]);
827 Array.prototype.remove = function(item) {
828 to=undefined; from=this.indexOf(item);
829 var rest = this.slice((to || from) + 1 || this.length);
830 this.length = from < 0 ? this.length + from : from;
831 return this.push.apply(this, rest);
834 function previewTheme(elm) {
835 theme = $(elm).val();
836 $.getJSON('pretheme?f=&theme=' + theme,function(data) {
837 $('#theme-preview').html('<div id="theme-desc">' + data.desc + '</div><div id="theme-version">' + data.version + '</div><div id="theme-credits">' + data.credits + '</div><a href="' + data.img + '"><img src="' + data.img + '" width="320" height="240" alt="' + theme + '" /></a>');
842 // notification permission settings in localstorage
843 // set by settings page
844 function getNotificationPermission() {
845 if (window["Notification"] === undefined) {
848 if (Notification.permission === 'granted') {
849 var val = localStorage.getItem('notification-permissions');
850 if (val === null) return 'denied';
853 return Notification.permission;
858 * Show a dialog loaded from an url
859 * By defaults this load the url in an iframe in colorbox
860 * Themes can overwrite `show()` function to personalize it
867 * @return object colorbox
869 show : function (url) {
870 var size = Dialog._get_size();
871 return $.colorbox({href: url, iframe:true,innerWidth: size.width+'px',innerHeight: size.height+'px'})
875 * Show the Image browser dialog
878 * @param string id (optional)
881 * The name will be used to build the event name
882 * fired by image browser dialog when the user select
883 * an image. The optional id will be passed as argument
884 * to the event handler
886 doImageBrowser : function (name, id) {
887 var url = Dialog._get_url("image",name,id);
888 return Dialog.show(url);
892 * Show the File browser dialog
895 * @param string id (optional)
898 * The name will be used to build the event name
899 * fired by file browser dialog when the user select
900 * a file. The optional id will be passed as argument
901 * to the event handler
903 doFileBrowser : function (name, id) {
904 var url = Dialog._get_url("file",name,id);
905 return Dialog.show(url);
908 _get_url : function(type, name, id) {
910 if (id !== undefined) hash = hash + "-" + id;
911 return baseurl + "/fbrowser/"+type+"/?mode=minimal#"+hash;
914 _get_size: function() {
916 width: window.innerWidth-50,
917 height: window.innerHeight-100