Index: trunk/core/admin_templates/js/script.js =================================================================== diff -u -N -r6782 -r7391 --- trunk/core/admin_templates/js/script.js (.../script.js) (revision 6782) +++ trunk/core/admin_templates/js/script.js (.../script.js) (revision 7391) @@ -4,6 +4,7 @@ var $Menus = new Array(); var $ViewMenus = new Array(); var $nls_menus = new Array(); + var $MenuNames = new Array(); var $form_name = 'kernel_form'; if(!$fw_menus) var $fw_menus = new Array(); @@ -19,6 +20,10 @@ var $hooks = new Array(); } +function use_popups($prefix_special, $event) { + return $use_popups; +} + function getArrayValue() { var $value = arguments[0]; @@ -157,7 +162,7 @@ $form.submit(); processHooks('SubmitKF', hAFTER); $form.target = ''; - $form.t.value = t; + set_hidden_field('t', t); window.setTimeout(function() {submitted = false}, 500); } @@ -308,54 +313,18 @@ } // in-portal compatibility functions: end -function openSelector($prefix, $url, $dst_field, $window_size, $event) -{ - var $kf = document.getElementById($form_name); - var $regex = new RegExp('(.*)\?env=(' + document.getElementById('sid').value + ')?-(.*?):(m[^:]+)'); - $regex = $regex.exec($url); - - var $t = $regex[3]; - var $window_name = 'select_'+$t.replace(/(\/|-)/g, '_'); - set_hidden_field('return_m', $regex[4]); - - if (!isset($window_size)) $window_size = '750x400'; - - $window_size = $window_size.split('x'); - - if (!isset($event)) $event = ''; - processHooks('openSelector', hBEFORE); - - var $prev_action = $kf.action; - var $prev_opener = get_hidden_field('m_opener'); - - set_hidden_field('m_opener', 'p'); - set_hidden_field('main_prefix', $prefix); - set_hidden_field('dst_field', $dst_field); - set_hidden_field('return_template', $kf.elements['t'].value); // where should return after popup is done - - openwin('', $window_name, $window_size[0], $window_size[1]); - $kf.action = $url; - $kf.target = $window_name; - - submit_event($prefix, $event, $t); - - processHooks('openSelector', hAFTER); - $kf.action = $prev_action; - set_hidden_field('m_opener', $prev_opener); -} - function InitTranslator(prefix, field, t, multi_line) { var $kf = document.getElementById($form_name); var $window_name = 'select_'+t.replace(/(\/|-)/g, '_'); var $regex = new RegExp('(.*)\?env=(' + document.getElementById('sid').value + ')?-(.*?):(m[^:]+)'); $regex = $regex.exec($kf.action); - set_hidden_field('return_m', $regex[4]); +// set_hidden_field('return_m', $regex[4]); var $prev_opener = get_hidden_field('m_opener'); if (!isset(multi_line)) multi_line = 0; openwin('', $window_name, 750, 400); - set_hidden_field('return_template', $kf.elements['t'].value); // where should return after popup is done +// set_hidden_field('return_template', $kf.elements['t'].value); // where should return after popup is done set_hidden_field('m_opener', 'p'); set_hidden_field('translator_wnd_name', $window_name); @@ -406,39 +375,166 @@ function openwin($url,$name,$width,$height) { - var $window_params = 'width='+$width+',height='+$height+',status=yes,resizable=yes,menubar=no,scrollbars=yes,toolbar=no'; + // prevent window from opening larger, then screen resolution on user's computer (to Kostja) + + // alert('openwin: name = ['+$name+']'); + var left = Math.round((screen.width - $width)/2); + var top = Math.round((screen.height - $height)/2); + + cur_x = is.ie ? window.screenLeft : window.screenX; + cur_y = is.ie ? window.screenTop : window.screenY; + +// alert('current X,Y: '+cur_x+','+cur_y+' target x,y: '+left+','+top); + var $window_params = 'left='+left+',top='+top+',width='+$width+',height='+$height+',status=yes,resizable=yes,menubar=no,scrollbars=yes,toolbar=no'; return window.open($url,$name,$window_params); } +function OnResizePopup(e) { + if (!document.all) { + var $winW = window.innerWidth; + var $winH = window.innerHeight; + } + else { + var $winW = window.document.body.offsetWidth; + var $winH = window.document.body.offsetHeight; + } + + window.status = '[width: ' + $winW + '; height: ' + $winH + ']'; +} + function opener_action(new_action) { + var $prev_opener = get_hidden_field('m_opener'); set_hidden_field('m_opener', new_action); + return $prev_opener; } +function open_popup($prefix_special, $event, $t, $window_size) { + if (!$window_size) { + // if no size given, then query it from ajax + var $default_size = '750x400'; + var $pm = getFrame('head').$popup_manager; + if ($pm) { + // popup manager was found in head frame + $pm.ResponceFunction = function ($responce) { + if (!$responce.match(/([\d]+)x([\d]+)/)) { + // invalid responce was received, may be php fatal error during AJAX request + $responce = $default_size; + } + open_popup($prefix_special, $event, $t, $responce); + } + $pm.GetSize($t); + return ; + } + $window_size = $default_size; + } + var $kf = document.getElementById($form_name); + + var $window_name = $t.replace(/(\/|-)/g, '_'); // replace "/" and "-" with "_" + $window_size = $window_size.split('x'); + + openwin('', $window_name, $window_size[0], $window_size[1]); + $kf.target = $window_name; + + var $prev_opener = opener_action('p'); + event_bak = get_hidden_field('events[' + $prefix_special + ']') + submit_event($prefix_special, $event, $t); + opener_action($prev_opener); // restore opener in parent window + set_hidden_field('events[' + $prefix_special + ']', event_bak); // restore event + set_hidden_field($prefix_special+'_mode', mode_bak) +} + +function openSelector($prefix, $url, $dst_field, $window_size, $event) +{ + // if url has additional params - store it and make hidden fields from it (later, below) + var $additional = []; + if ($url.match('(.*)&(.*)')) { + $url = RegExp.$1; + var tmp = RegExp.$2; + var pairs = tmp.split('&'); + + for (var i in pairs) { + var data = pairs[i].split('='); + $additional[data[0]] = data[1]; + } + } + + // get template name from url + var $regex = new RegExp('(.*)\?env=(' + document.getElementById('sid').value + ')?-(.*?):(m[^:]+)'); + $regex = $regex.exec($url); + var $t = $regex[3]; + + // substitute form action with selector's url + var $kf = document.getElementById($form_name); + var $prev_action = $kf.action; + $kf.action = $url; + + // check parameter values + if (!isset($event)) $event = ''; + + // set variables need for selector to work + processHooks('openSelector', hBEFORE); + set_hidden_field('main_prefix', $prefix); + set_hidden_field('dst_field', $dst_field); + + for (var i in $additional) + { + set_hidden_field(i, $additional[i]); + } + + open_popup($prefix, $event, $t); + + // restore form action back + processHooks('openSelector', hAFTER); + $kf.action = $prev_action; +} + function std_precreate_item(prefix_special, edit_template) { - opener_action('d'); set_hidden_field(prefix_special+'_mode', 't'); - submit_event(prefix_special,'OnPreCreate', edit_template) + if (use_popups(prefix_special, 'OnPreCreate')) { + open_popup(prefix_special, 'OnPreCreate', edit_template); + } + else { + opener_action('d'); + submit_event(prefix_special,'OnPreCreate', edit_template); + } } function std_new_item(prefix_special, edit_template) { - opener_action('d'); - submit_event(prefix_special,'OnNew', edit_template) + if (use_popups(prefix_special, 'OnNew')) { + open_popup(prefix_special, 'OnNew', edit_template); + } + else { + opener_action('d'); + submit_event(prefix_special,'OnNew', edit_template); + } } +var mode_bak = null; function std_edit_item(prefix_special, edit_template) - { - opener_action('d'); +{ + mode_bak = get_hidden_field(prefix_special+'_mode'); set_hidden_field(prefix_special+'_mode', 't'); - submit_event(prefix_special,'OnEdit',edit_template) + if (use_popups(prefix_special, 'OnEdit')) { + open_popup(prefix_special, 'OnEdit', edit_template); + } + else { + opener_action('d'); + submit_event(prefix_special,'OnEdit',edit_template); + } } function std_edit_temp_item(prefix_special, edit_template) { - opener_action('d'); - submit_event(prefix_special,'',edit_template) + if (use_popups(prefix_special, '')) { + open_popup(prefix_special, '', edit_template); + } + else { + opener_action('d'); + submit_event(prefix_special,'',edit_template); + } } function std_delete_items(prefix_special, t, $ajax) @@ -448,7 +544,6 @@ } } - // set current form base on ajax function set_form($prefix_special, $ajax) { @@ -507,14 +602,27 @@ submit_event($prefix_special, 'OnSearchReset', null, null, $ajax); } -function search_keydown($event) +function search_keydown($event, $prefix_special, $grid, $ajax) { $event = $event ? $event : event; - if ($event.keyCode == 13) { - var $prefix_special = this.getAttribute('PrefixSpecial'); - var $grid = this.getAttribute('Grid'); - search($prefix_special, $grid, parseInt(this.getAttribute('ajax'))); + + if (window.event) {// IE + var $key_code = $event.keyCode; } + else if($event.which) { // Netscape/Firefox/Opera + var $key_code = $event.which; + } + + switch ($key_code) { + case 13: + search($prefix_special, $grid, parseInt($ajax)); + break; + + case 27: + search_reset($prefix_special, $grid, parseInt($ajax)); + break; + + } } function getRealLeft(el) @@ -550,7 +658,7 @@ return yPos; } -function show_viewmenu($toolbar, $button_id) +function show_viewmenu_old($toolbar, $button_id) { var $img = $toolbar.GetButtonImage($button_id); var $pos_x = getRealLeft($img) - ((document.all) ? 6 : -2); @@ -588,6 +696,44 @@ } } +var nlsMenuRendered = false; +function show_viewmenu($toolbar, $button_id) +{ + if($ViewMenus.length == 1) { + $prefix_special = $ViewMenus[$ViewMenus.length-1]; + menu_to_show = $prefix_special+'_view_menu'; + } + else + { + mixed_menu = menuMgr.createMenu(rs('mixed_menu')); + mixed_menu.applyBorder(false, false, false, false); + mixed_menu.dropShadow("none"); + mixed_menu.showIcon = true; + + // merge menus into new one + for(var $i in $ViewMenus) + { + $prefix_special = $ViewMenus[$i]; + mixed_menu.addItem( rs($prefix_special+'.view.menu.mixed'), + $MenuNames[$prefix_special+'_view_menu'], + 'javascript:void()', null, true, null, + rs($prefix_special+'.view.menu'),$MenuNames[$prefix_special+'_view_menu'] ); + } + + menu_to_show = 'mixed_menu'; + } + + renderMenus(); + + nls_showMenu(rs(menu_to_show), $toolbar.GetButtonImage($button_id)) +} + +function renderMenus() +{ + menuMgr.renderMenus('nlsMenuPlace'); + nlsMenuRendered = true; +} + function set_window_title($title) { var $window = window; @@ -1038,6 +1184,63 @@ // remove spaces and underscores from a string, used for nls_menu function rs(str) { - return str.replace(/[ _]+/g, '.'); + return str.replace(/[ _\']+/g, '.'); } + function getFrame($name) + { + var $main_window = window; + + // 1. cycle through popups to get main window + try { + // will be error, when other site is opened in parent window + while ($main_window.opener) { + $main_window = $main_window.opener; + } + } + catch (err) { + // catch Access/Permission Denied error +// alert('getFrame.Error: [' + err.description + ']'); + return window; + } + + var $frameset = $main_window.parent.frames; + for ($i = 0; $i < $frameset.length; $i++) { + if ($frameset[$i].name == $name) { + return $frameset[$i]; + } + } + return $main_window.parent; + } + + function ClearBrowserSelection() + { + if (window.getSelection) { + // removeAllRanges will be supported by Opera from v 9+, do nothing by now + var selection = window.getSelection(); + if (selection.removeAllRanges) { // Mozilla & Opera 9+ +// alert('clearing FF') + window.getSelection().removeAllRanges(); + } + } else if (document.selection && !is.opera) { // IE +// alert('clearing IE') + document.selection.empty(); + } + } + + function reset_form(prefix, event, msg) + { + if (confirm(msg)) { + submit_event(prefix, event) + } + } + + function cancel_edit(prefix, cancel_ev, save_ev, msg) + { + if (confirm(msg)) { + submit_event(prefix, save_ev) + } + else { + submit_event(prefix, cancel_ev) + } + } \ No newline at end of file