/* vim: set expandtab sw=4 ts=4 sts=4: */ /** * Handles the resizing of a menu according to the available screen width * * Uses themes/original/css/resizable-menu.css.php * * To initialise: * $('#myMenu').menuResizer(function () { * // This function will be called to find out how much * // available horizontal space there is for the menu * return $('body').width() - 5; // Some extra margin for good measure * }); * * To trigger a resize operation: * $('#myMenu').menuResizer('resize'); // Bind this to $(window).resize() * * To restore the menu to a state like before it was initialized: * $('#myMenu').menuResizer('destroy'); * * @package PhpMyAdmin */ (function ($) { function MenuResizer($container, widthCalculator) { var self = this; self.$container = $container; self.widthCalculator = widthCalculator; // create submenu container var link = $('<a />', {href: '#', 'class': 'tab nowrap'}) .text(PMA_messages.strMore) .bind('click', false); // same as event.preventDefault() var img = $container.find('li img'); if (img.length) { $(PMA_getImage('b_more.png').toString()).prependTo(link); } var $submenu = $('<li />', {'class': 'submenu'}) .append(link) .append($('<ul />')) .mouseenter(function() { if ($(this).find('ul .tabactive').length === 0) { $(this) .addClass('submenuhover') .find('> a') .addClass('tabactive'); } }) .mouseleave(function() { if ($(this).find('ul .tabactive').length === 0) { $(this) .removeClass('submenuhover') .find('> a') .removeClass('tabactive'); } }); $container.children('.clearfloat').remove(); $container.append($submenu).append("<div class='clearfloat'></div>"); setTimeout(function () { self.resize(); }, 4); } MenuResizer.prototype.resize = function () { var wmax = this.widthCalculator.call(this.$container); var $submenu = this.$container.find('.submenu:last'); var submenu_w = $submenu.outerWidth(true); var $submenu_ul = $submenu.find('ul'); var $li = this.$container.find('> li'); var $li2 = $submenu_ul.find('li'); var more_shown = $li2.length > 0; // Calculate the total width used by all the shown tabs var total_len = more_shown ? submenu_w : 0; var l = $li.length - 1; var i; for (i = 0; i < l; i++) { total_len += $($li[i]).outerWidth(true); } // Now hide menu elements that don't fit into the menubar var hidden = false; // Whether we have hidden any tabs while (total_len >= wmax && --l >= 0) { // Process the tabs backwards hidden = true; var el = $($li[l]); var el_width = el.outerWidth(true); el.data('width', el_width); if (! more_shown) { total_len -= el_width; el.prependTo($submenu_ul); total_len += submenu_w; more_shown = true; } else { total_len -= el_width; el.prependTo($submenu_ul); } } // If we didn't hide any tabs, then there might be some space to show some if (! hidden) { // Show menu elements that do fit into the menubar for (i = 0, l = $li2.length; i < l; i++) { total_len += $($li2[i]).data('width'); // item fits or (it is the last item // and it would fit if More got removed) if (total_len < wmax || (i == $li2.length - 1 && total_len - submenu_w < wmax) ) { $($li2[i]).insertBefore($submenu); } else { break; } } } // Show/hide the "More" tab as needed if ($submenu_ul.find('li').length > 0) { $submenu.addClass('shown'); } else { $submenu.removeClass('shown'); } if (this.$container.find('> li').length == 1) { // If there is only the "More" tab left, then we need // to align the submenu to the left edge of the tab $submenu_ul.removeClass().addClass('only'); } else { // Otherwise we align the submenu to the right edge of the tab $submenu_ul.removeClass().addClass('notonly'); } if ($submenu.find('.tabactive').length) { $submenu .addClass('active') .find('> a') .removeClass('tab') .addClass('tabactive'); } else { $submenu .removeClass('active') .find('> a') .addClass('tab') .removeClass('tabactive'); } }; MenuResizer.prototype.destroy = function () { var $submenu = this.$container.find('li.submenu').removeData(); $submenu.find('li').appendTo(this.$container); $submenu.remove(); }; /** Public API */ var methods = { init: function(widthCalculator) { return this.each(function () { var $this = $(this); if (! $this.data('menuResizer')) { $this.data( 'menuResizer', new MenuResizer($this, widthCalculator) ); } }); }, resize: function () { return this.each(function () { var self = $(this).data('menuResizer'); if (self) { self.resize(); } }); }, destroy: function () { return this.each(function () { var self = $(this).data('menuResizer'); if (self) { self.destroy(); } }); } }; /** Extend jQuery */ $.fn.menuResizer = function(method) { if (methods[method]) { return methods[method].call(this); } else if (typeof method === 'function') { return methods.init.apply(this, [method]); } else { $.error('Method ' + method + ' does not exist on jQuery.menuResizer'); } }; })(jQuery);
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
codemirror | Folder | 0755 |
|
|
jqplot | Folder | 0755 |
|
|
jquery | Folder | 0755 |
|
|
openlayers | Folder | 0755 |
|
|
pmd | Folder | 0755 |
|
|
tracekit | Folder | 0755 |
|
|
transformations | Folder | 0755 |
|
|
ajax.js | File | 28.9 KB | 0644 |
|
big_ints.js | File | 1.88 KB | 0644 |
|
chart.js | File | 17.84 KB | 0644 |
|
common.js | File | 18.36 KB | 0644 |
|
config.js | File | 25.86 KB | 0644 |
|
console.js | File | 57.53 KB | 0644 |
|
cross_framing_protection.js | File | 468 B | 0644 |
|
db_central_columns.js | File | 10.63 KB | 0644 |
|
db_operations.js | File | 5.76 KB | 0644 |
|
db_qbe.js | File | 2.04 KB | 0644 |
|
db_search.js | File | 8.42 KB | 0644 |
|
db_structure.js | File | 15.42 KB | 0644 |
|
db_tracking.js | File | 3.22 KB | 0644 |
|
doclinks.js | File | 20.16 KB | 0644 |
|
error_report.js | File | 9.87 KB | 0644 |
|
export.js | File | 28.66 KB | 0644 |
|
functions.js | File | 162.06 KB | 0644 |
|
get_image.js.php | File | 4.65 KB | 0644 |
|
get_scripts.js.php | File | 1.93 KB | 0644 |
|
gis_data_editor.js | File | 14.33 KB | 0644 |
|
import.js | File | 5.49 KB | 0644 |
|
indexes.js | File | 26.3 KB | 0644 |
|
keyhandler.js | File | 3.25 KB | 0644 |
|
line_counts.php | File | 36.92 KB | 0644 |
|
makegrid.js | File | 95.13 KB | 0644 |
|
menu-resizer.js | File | 6.48 KB | 0644 |
|
messages.php | File | 38.55 KB | 0644 |
|
microhistory.js | File | 11.22 KB | 0644 |
|
multi_column_sort.js | File | 2.83 KB | 0644 |
|
navigation.js | File | 53.8 KB | 0644 |
|
normalization.js | File | 26.39 KB | 0644 |
|
page_settings.js | File | 1.66 KB | 0644 |
|
replication.js | File | 3.03 KB | 0644 |
|
rte.js | File | 46.45 KB | 0644 |
|
server_databases.js | File | 4.96 KB | 0644 |
|
server_plugins.js | File | 525 B | 0644 |
|
server_privileges.js | File | 16.23 KB | 0644 |
|
server_status_advisor.js | File | 3.6 KB | 0644 |
|
server_status_monitor.js | File | 84.43 KB | 0644 |
|
server_status_processes.js | File | 5.97 KB | 0644 |
|
server_status_queries.js | File | 950 B | 0644 |
|
server_status_sorter.js | File | 2.51 KB | 0644 |
|
server_status_variables.js | File | 3.57 KB | 0644 |
|
server_user_groups.js | File | 1.34 KB | 0644 |
|
server_variables.js | File | 5.93 KB | 0644 |
|
sprintf.js | File | 7.21 KB | 0644 |
|
sql.js | File | 32.71 KB | 0644 |
|
tbl_change.js | File | 27.8 KB | 0644 |
|
tbl_chart.js | File | 13.61 KB | 0644 |
|
tbl_find_replace.js | File | 1.55 KB | 0644 |
|
tbl_gis_visualization.js | File | 10.64 KB | 0644 |
|
tbl_operations.js | File | 12.99 KB | 0644 |
|
tbl_relation.js | File | 8.35 KB | 0644 |
|
tbl_select.js | File | 15.07 KB | 0644 |
|
tbl_structure.js | File | 20.41 KB | 0644 |
|
tbl_tracking.js | File | 3.44 KB | 0644 |
|
tbl_zoom_plot_jqplot.js | File | 22.55 KB | 0644 |
|
whitelist.php | File | 1.1 KB | 0644 |
|