Remove more table actions dropdown

Add spatial index action icons
This commit is contained in:
2025-04-21 00:26:28 -07:00
parent 083031170c
commit fa1b8d5c94
7 changed files with 66 additions and 257 deletions

View File

@@ -1922,78 +1922,6 @@ $(document).ready(function() {
$("input[id='" + values_id + "']").attr("value", value_array.join(","));
disable_popup();
});
/**
* Hides certain table structure actions, replacing them with the word "More". They are displayed
* in a dropdown menu when the user hovers over the word "More."
*/
// Remove the actions from the table cells (they are available by default for JavaScript-disabled browsers)
// if the table is not a view or information_schema (otherwise there is only one action to hide and there's no point)
if($("input[type='hidden'][name='table_type']").val() == "table") {
var $table = $("table[id='tablestructure']");
$table.find("td[class='browse']").remove();
$table.find("td[class='primary']").remove();
$table.find("td[class='unique']").remove();
$table.find("td[class='index']").remove();
$table.find("td[class='fulltext']").remove();
$table.find("th[class='action']").attr("colspan", 3);
// Display the "more" text
$table.find("td[class='more_opts']").show();
// Position the dropdown
$(".structure_actions_dropdown").each(function() {
// Optimize DOM querying
var $this_dropdown = $(this);
// The top offset must be set for IE even if it didn't change
var cell_right_edge_offset = $this_dropdown.parent().offset().left + $this_dropdown.parent().innerWidth();
var left_offset = cell_right_edge_offset - $this_dropdown.innerWidth();
var top_offset = $this_dropdown.parent().offset().top + $this_dropdown.parent().innerHeight();
$this_dropdown.offset({ top: top_offset, left: left_offset });
});
// A hack for IE6 to prevent the after_field select element from being displayed on top of the dropdown by
// positioning an iframe directly on top of it
var $after_field = $("select[name='after_field']");
$("iframe[class='IE_hack']")
.width($after_field.width())
.height($after_field.height())
.offset({
top: $after_field.offset().top,
left: $after_field.offset().left
});
// When "more" is hovered over, show the hidden actions
$table.find("td[class='more_opts']")
.mouseenter(function() {
if($.browser.msie && $.browser.version == "6.0") {
$("iframe[class='IE_hack']")
.show()
.width($after_field.width()+4)
.height($after_field.height()+4)
.offset({
top: $after_field.offset().top,
left: $after_field.offset().left
});
}
$(".structure_actions_dropdown").hide(); // Hide all the other ones that may be open
$(this).children(".structure_actions_dropdown").show();
// Need to do this again for IE otherwise the offset is wrong
if($.browser.msie) {
var left_offset_IE = $(this).offset().left + $(this).innerWidth() - $(this).children(".structure_actions_dropdown").innerWidth();
var top_offset_IE = $(this).offset().top + $(this).innerHeight();
$(this).children(".structure_actions_dropdown").offset({
top: top_offset_IE,
left: left_offset_IE });
}
})
.mouseleave(function() {
$(this).children(".structure_actions_dropdown").hide();
if($.browser.msie && $.browser.version == "6.0") {
$("iframe[class='IE_hack']").hide();
}
});
}
});
/* Displays tooltips */

View File

@@ -123,6 +123,25 @@ function PMA_getIcon($icon, $alternate = '', $container = false, $force_text = f
return $button;
}
/**
* Creates a span with only an icon
*
* @uses $GLOBALS['pmaThemeImage']
* @uses htmlspecialchars()
* @param string $icon name of icon file
* @param string $alternate alternate text
* @return string span with icon
*/
function PMA_getOnlyIcon($icon, $alternate = '') {
$alternate = htmlspecialchars($alternate);
return '<span class="nowrap">'
. '<img src="' . $GLOBALS['pmaThemeImage'] . $icon . '"'
. ' title="' . $alternate . '" alt="' . $alternate . '"'
. ' class="icon" width="16" height="16" />';
}
/**
* Displays the maximum size for an upload
*

View File

@@ -147,36 +147,18 @@ $analyzed_sql = PMA_SQP_analyze(PMA_SQP_parse($show_create_table));
/**
* prepare table infos
*/
// action titles (image or string)
$titles = array();
$titles['Change'] = PMA_getIcon('b_edit.png', __('Change'), true);
$titles['Drop'] = PMA_getIcon('b_drop.png', __('Drop'), true);
$titles['NoDrop'] = PMA_getIcon('b_drop.png', __('Drop'), true);
$titles['Primary'] = PMA_getIcon('b_primary.png', __('Primary'), true);
$titles['Index'] = PMA_getIcon('b_index.png', __('Index'), true);
$titles['Unique'] = PMA_getIcon('b_unique.png', __('Unique'), true);
$titles['Spatial'] = PMA_getIcon('b_ftext.png', __('Spatial'), true);
$titles['IdxFulltext'] = PMA_getIcon('b_ftext.png', __('Fulltext'), true);
$titles['NoPrimary'] = PMA_getIcon('bd_primary.png', __('Primary'), true);
$titles['NoIndex'] = PMA_getIcon('bd_index.png', __('Index'), true);
$titles['NoUnique'] = PMA_getIcon('bd_unique.png', __('Unique'), true);
$titles['NoSpatial'] = PMA_getIcon('bd_ftext.png', __('Spatial'), true);
$titles['NoIdxFulltext'] = PMA_getIcon('bd_ftext.png', __('Fulltext'), true);
$titles['BrowseDistinctValues'] = PMA_getIcon('b_browse.png', __('Browse distinct values'), true);
// hidden action titles (image and string)
$hidden_titles = array();
$hidden_titles['BrowseDistinctValues'] = PMA_getIcon('b_browse.png', __('Browse distinct values'), false, true);
$hidden_titles['Primary'] = PMA_getIcon('b_primary.png', __('Add primary key'), false, true);
$hidden_titles['NoPrimary'] = PMA_getIcon('bd_primary.png', __('Add primary key'), false, true);
$hidden_titles['Index'] = PMA_getIcon('b_index.png', __('Add index'), false, true);
$hidden_titles['NoIndex'] = PMA_getIcon('bd_index.png', __('Add index'), false, true);
$hidden_titles['Unique'] = PMA_getIcon('b_unique.png', __('Add unique index'), false, true);
$hidden_titles['NoUnique'] = PMA_getIcon('bd_unique.png', __('Add unique index'), false, true);
$hidden_titles['Spatial'] = PMA_getIcon('b_ftext.png', __('Add SPATIAL index'), false, true);
$hidden_titles['NoSpatial'] = PMA_getIcon('bd_ftext.png', __('Add SPATIAL index'), false, true);
$hidden_titles['IdxFulltext'] = PMA_getIcon('b_ftext.png', __('Add FULLTEXT index'), false, true);
$hidden_titles['NoIdxFulltext'] = PMA_getIcon('bd_ftext.png', __('Add FULLTEXT index'), false, true);
// action icons
$titles = [
'Change' => PMA_getOnlyIcon('b_edit.png', __('Change')),
'Drop' => PMA_getOnlyIcon('b_drop.png', __('Drop')),
'NoDrop' => PMA_getOnlyIcon('b_drop.png', __('Drop')),
'Primary' => PMA_getOnlyIcon('b_primary.png', __('Primary')),
'Index' => PMA_getOnlyIcon('b_index.png', __('Index')),
'Unique' => PMA_getOnlyIcon('b_unique.png', __('Unique')),
'Spatial' => PMA_getOnlyIcon('bd_spatial.png', __('Spatial')),
'IdxFulltext' => PMA_getOnlyIcon('b_ftext.png', __('Fulltext')),
'BrowseDistinctValues' => PMA_getOnlyIcon('b_browse.png', __('Browse distinct values'))
];
/**
* Displays the table structure ('show table' works correct since 3.23.03)
@@ -211,7 +193,7 @@ $i = 0;
<?php if ($db_is_information_schema || $tbl_is_view) { ?>
<th id="th<?php echo ++$i; ?>" class="view"><?php echo __('View'); ?></th>
<?php } else { ?>
<th colspan="7" id="th<?php echo ++$i; ?>" class="action"><?php echo __('Action'); ?></th>
<th colspan="8" id="th<?php echo ++$i; ?>" class="action"><?php echo __('Action'); ?></th>
<?php } ?>
</tr>
</thead>
@@ -411,169 +393,66 @@ while ($row = PMA_DBI_fetch_assoc($fields_rs)) {
<td align="center" class="primary">
<?php
if ($type == 'text' || $type == 'blob' || 'ARCHIVE' == $tbl_type || ($primary && $primary->hasColumn($field_name))) {
echo $titles['NoPrimary'] . "\n";
$primary_enabled = false;
} else {
echo "\n";
?>
<a class="add_primary_key_anchor" href="sql.php?<?php echo $url_query; ?>&amp;sql_query=<?php echo urlencode('ALTER TABLE ' . PMA_backquote($table) . ($primary ? ' DROP PRIMARY KEY,' : '') . ' ADD PRIMARY KEY(' . PMA_backquote($row['Field']) . ')'); ?>&amp;message_to_show=<?php echo urlencode(sprintf(__('A primary key has been added on %s'), htmlspecialchars($row['Field']))); ?>" >
<?php echo $titles['Primary']; ?></a>
<?php $primary_enabled = true;
$primary_enabled = true;
}
echo "\n";
?>
?>
<a class="add_primary_key_anchor<?php echo $primary_enabled ? '' : ' disabled' ?>" href="sql.php?<?php echo $url_query; ?>&amp;sql_query=<?php echo urlencode('ALTER TABLE ' . PMA_backquote($table) . ($primary ? ' DROP PRIMARY KEY,' : '') . ' ADD PRIMARY KEY(' . PMA_backquote($row['Field']) . ')'); ?>&amp;message_to_show=<?php echo urlencode(sprintf(__('A primary key has been added on %s'), htmlspecialchars($row['Field']))); ?>" >
<?php echo $titles['Primary']; ?></a>
</td>
<td align="center" class="unique">
<?php
if ($type == 'text' || $type == 'blob' || 'ARCHIVE' == $tbl_type || isset($columns_with_unique_index[$field_name])) {
echo $titles['NoUnique'] . "\n";
$unique_enabled = false;
} else {
echo "\n";
?>
<a href="sql.php?<?php echo $url_query; ?>&amp;sql_query=<?php echo urlencode('ALTER TABLE ' . PMA_backquote($table) . ' ADD UNIQUE(' . PMA_backquote($row['Field']) . ')'); ?>&amp;message_to_show=<?php echo urlencode(sprintf(__('An index has been added on %s'), htmlspecialchars($row['Field']))); ?>">
<?php echo $titles['Unique']; ?></a>
<?php $unique_enabled = true;
$unique_enabled = true;
}
echo "\n";
?>
?>
<a <?php echo $unique_enabled ? '' : ' class="disabled"'; ?>href="sql.php?<?php echo $url_query; ?>&amp;sql_query=<?php echo urlencode('ALTER TABLE ' . PMA_backquote($table) . ' ADD UNIQUE(' . PMA_backquote($row['Field']) . ')'); ?>&amp;message_to_show=<?php echo urlencode(sprintf(__('An index has been added on %s'), htmlspecialchars($row['Field']))); ?>">
<?php echo $titles['Unique']; ?></a>
</td>
<td align="center" class="index">
<?php
if ($type == 'text' || $type == 'blob' || 'ARCHIVE' == $tbl_type) {
echo $titles['NoIndex'] . "\n";
$index_enabled = false;
} else {
echo "\n";
?>
<a href="sql.php?<?php echo $url_query; ?>&amp;sql_query=<?php echo urlencode('ALTER TABLE ' . PMA_backquote($table) . ' ADD INDEX(' . PMA_backquote($row['Field']) . ')'); ?>&amp;message_to_show=<?php echo urlencode(sprintf(__('An index has been added on %s'), htmlspecialchars($row['Field']))); ?>">
<?php echo $titles['Index']; ?></a>
<?php
$index_enabled = true;
}
echo "\n";
?>
<a <?php echo $index_enabled ? '' : ' class="disabled"'; ?>href="sql.php?<?php echo $url_query; ?>&amp;sql_query=<?php echo urlencode('ALTER TABLE ' . PMA_backquote($table) . ' ADD INDEX(' . PMA_backquote($row['Field']) . ')'); ?>&amp;message_to_show=<?php echo urlencode(sprintf(__('An index has been added on %s'), htmlspecialchars($row['Field']))); ?>">
<?php echo $titles['Index']; ?></a>
</td>
<td align="center" class="index">
<td align="center" class="spatial">
<?php
$spatial_types = array(
'geometry', 'point', 'linestring', 'polygon', 'multipoint',
'multilinestring', 'multipolygon', 'geomtrycollection'
);
if (! in_array($type, $spatial_types) || 'MYISAM' != $tbl_type) {
echo $titles['NoSpatial'] . "\n";
$spatial_enabled = false;
} else {
echo "\n";
?>
<a href="sql.php?<?php echo $url_query; ?>&amp;sql_query=<?php echo urlencode('ALTER TABLE ' . PMA_backquote($table) . ' ADD SPATIAL(' . PMA_backquote($row['Field']) . ')'); ?>&amp;message_to_show=<?php echo urlencode(sprintf(__('An index has been added on %s'), htmlspecialchars($row['Field']))); ?>"></a>
<?php echo $titles['Spatial']; ?></a>
<?php
$spatial_enabled = true;
}
echo "\n";
?>
<a <?php echo $spatial_enabled ? '' : ' class="disabled"'; ?>href="sql.php?<?php echo $url_query; ?>&amp;sql_query=<?php echo urlencode('ALTER TABLE ' . PMA_backquote($table) . ' ADD SPATIAL(' . PMA_backquote($row['Field']) . ')'); ?>&amp;message_to_show=<?php echo urlencode(sprintf(__('An index has been added on %s'), htmlspecialchars($row['Field']))); ?>">
<?php echo $titles['Spatial']; ?></a>
</td>
<?php
<td align="center" nowrap="nowrap" class="fulltext">
<?php
if (! empty($tbl_type) && ($tbl_type == 'MYISAM' || $tbl_type == 'ARIA' || $tbl_type == 'MARIA')
// FULLTEXT is possible on TEXT, CHAR and VARCHAR
&& (strpos(' ' . $type, 'text') || strpos(' ' . $type, 'char'))) {
echo "\n";
?>
<td align="center" nowrap="nowrap" class="fulltext">
<a href="sql.php?<?php echo $url_query; ?>&amp;sql_query=<?php echo urlencode('ALTER TABLE ' . PMA_backquote($table) . ' ADD FULLTEXT(' . PMA_backquote($row['Field']) . ')'); ?>&amp;message_to_show=<?php echo urlencode(sprintf(__('An index has been added on %s'), htmlspecialchars($row['Field']))); ?>">
<?php echo $titles['IdxFulltext']; ?></a>
<?php $fulltext_enabled = true; ?>
</td>
<?php
$fulltext_enabled = true;
} else {
echo "\n";
$fulltext_enabled = false;
}
?>
<td align="center" nowrap="nowrap" class="fulltext">
<?php echo $titles['NoIdxFulltext'] . "\n"; ?>
<?php $fulltext_enabled = false; ?>
<a <?php echo $fulltext_enabled ? '' : ' class="disabled"' ?>href="sql.php?<?php echo $url_query; ?>&amp;sql_query=<?php echo urlencode('ALTER TABLE ' . PMA_backquote($table) . ' ADD FULLTEXT(' . PMA_backquote($row['Field']) . ')'); ?>&amp;message_to_show=<?php echo urlencode(sprintf(__('An index has been added on %s'), htmlspecialchars($row['Field']))); ?>">
<?php echo $titles['IdxFulltext']; ?></a>
</td>
<?php
} // end if... else...
echo "\n";
?>
<td class="more_opts" id="more_opts<?php echo $rownum; ?>">
<?php echo __('More'); ?> <img src="<?php echo $pmaThemeImage . 'more.png'; ?>" alt="<?php echo __('Show more actions'); ?>" />
<div class="structure_actions_dropdown" id="row_<?php echo $rownum; ?>">
<div class="action_browse">
<a href="sql.php?<?php echo $url_query; ?>&amp;sql_query=<?php echo urlencode('SELECT COUNT(*) AS ' . PMA_backquote(__('Rows')) . ', ' . PMA_backquote($row['Field']) . ' FROM ' . PMA_backquote($table) . ' GROUP BY ' . PMA_backquote($row['Field']) . ' ORDER BY ' . PMA_backquote($row['Field'])); ?>">
<?php echo $hidden_titles['BrowseDistinctValues']; ?>
</a>
</div>
<div <?php echo ($GLOBALS['cfg']['AjaxEnable'] ? ' class="action_primary"' : ''); ?>>
<?php
if(isset($primary_enabled)) {
if($primary_enabled) { ?>
<a href="sql.php?<?php echo $url_query; ?>&amp;sql_query=<?php echo urlencode('ALTER TABLE ' . PMA_backquote($table) . ($primary ? ' DROP PRIMARY KEY,' : '') . ' ADD PRIMARY KEY(' . PMA_backquote($row['Field']) . ')'); ?>&amp;message_to_show=<?php echo urlencode(sprintf(__('A primary key has been added on %s'), htmlspecialchars($row['Field']))); ?>">
<?php echo $hidden_titles['Primary']; ?>
</a>
<?php
} else {
echo $hidden_titles['NoPrimary'];
}
} ?>
</div>
<div class="action_unique">
<?php
if(isset($unique_enabled)) {
if($unique_enabled) { ?>
<a href="sql.php?<?php echo $url_query; ?>&amp;sql_query=<?php echo urlencode('ALTER TABLE ' . PMA_backquote($table) . ' ADD UNIQUE(' . PMA_backquote($row['Field']) . ')'); ?>&amp;message_to_show=<?php echo urlencode(sprintf(__('An index has been added on %s'), htmlspecialchars($row['Field']))); ?>">
<?php echo $hidden_titles['Unique']; ?>
</a>
<?php
} else {
echo $hidden_titles['NoUnique'];
}
} ?>
</div>
<div class="action_index">
<?php
if(isset($index_enabled)) {
if($index_enabled) { ?>
<a href="sql.php?<?php echo $url_query; ?>&amp;sql_query=<?php echo urlencode('ALTER TABLE ' . PMA_backquote($table) . ' ADD INDEX(' . PMA_backquote($row['Field']) . ')'); ?>&amp;message_to_show=<?php echo urlencode(sprintf(__('An index has been added on %s'), htmlspecialchars($row['Field']))); ?>">
<?php echo $hidden_titles['Index']; ?>
</a>
<?php
} else {
echo $hidden_titles['NoIndex'];
}
} ?>
</div>
<div class="action_spatial">
<?php
if(isset($spatial_enabled)) {
if($spatial_enabled) { ?>
<a href="sql.php?<?php echo $url_query; ?>&amp;sql_query=<?php echo urlencode('ALTER TABLE ' . PMA_backquote($table) . ' ADD SPATIAL(' . PMA_backquote($row['Field']) . ')'); ?>&amp;message_to_show=<?php echo urlencode(sprintf(__('An index has been added on %s'), htmlspecialchars($row['Field']))); ?>">
<?php echo $hidden_titles['Spatial']; ?>
</a>
<?php
} else {
echo $hidden_titles['NoSpatial'];
}
} ?>
</div>
<div class="action_fulltext">
<?php
if(isset($fulltext_enabled)) {
if($fulltext_enabled) { ?>
<a href="sql.php?<?php echo $url_query; ?>&amp;sql_query=<?php echo urlencode('ALTER TABLE ' . PMA_backquote($table) . ' ADD FULLTEXT(' . PMA_backquote($row['Field']) . ')'); ?>&amp;message_to_show=<?php echo urlencode(sprintf(__('An index has been added on %s'), htmlspecialchars($row['Field']))); ?>">
<?php echo $hidden_titles['IdxFulltext']; ?>
</a>
<?php
} else {
echo $hidden_titles['NoIdxFulltext'];
}
} ?>
</div>
</div>
</td>
<?php
} // end if (! $tbl_is_view && ! $db_is_information_schema)
?>
</tr>
@@ -612,7 +491,7 @@ if (! $tbl_is_view && ! $db_is_information_schema) {
}
if (! empty($tbl_type) && $tbl_type == 'MYISAM') {
PMA_buttonOrImage('submit_mult', 'mult_submit', 'submit_mult_spatial', __('Spatial'), 'b_ftext.png', 'spatial');
PMA_buttonOrImage('submit_mult', 'mult_submit', 'submit_mult_spatial', __('Spatial'), 'b_spatial.png', 'spatial');
}
if (! empty($tbl_type) && ($tbl_type == 'MYISAM' || $tbl_type == 'ARIA' || $tbl_type == 'MARIA')) {
PMA_buttonOrImage('submit_mult', 'mult_submit', 'submit_mult_fulltext', __('Fulltext'), 'b_ftext.png', 'ftext');
@@ -701,7 +580,6 @@ if (! $tbl_is_view && ! $db_is_information_schema) {
?>
<input type="submit" value="<?php echo __('Go'); ?>" />
</form>
<iframe class="IE_hack" scrolling="no"></iframe>
<hr />
<?php
}

View File

@@ -43,6 +43,12 @@ a:active {
color: #0000FF;
}
a.disabled {
cursor: default;
opacity: 0.5;
filter: grayscale(1);
}
ul {
margin:0;
}

View File

@@ -72,6 +72,12 @@ a:hover {
color: #FF0000;
}
a.disabled {
cursor: default;
opacity: 0.5;
filter: grayscale(1);
}
dfn {
font-style: normal;
}
@@ -229,8 +235,7 @@ table tr.marked {
/* hovered items */
.odd:hover,
.even:hover,
.hover,
.structure_actions_dropdown {
.hover {
background: <?php echo $GLOBALS['cfg']['BrowsePointerBackground']; ?>;
color: <?php echo $GLOBALS['cfg']['BrowsePointerColor']; ?>;
}
@@ -1525,33 +1530,6 @@ a.close_enum_editor {
margin-top: 50px;
}
/**
* Table structure styles
*/
.structure_actions_dropdown {
position: absolute;
padding: 3px;
display: none;
z-index: 100;
}
.structure_actions_dropdown a {
display: block;
}
td.more_opts {
display: none;
white-space: nowrap;
}
iframe.IE_hack {
z-index: 1;
position: absolute;
display: none;
border: 0;
filter: alpha(opacity=0);
}
/* config forms */
.config-form ul.tabs {
margin: 1.1em 0.2em 0;

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 344 B