您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Highlights index fields, adds a link to the related table to foreign keys
- // ==UserScript==
- // @name phpmyadmin index highlighter
- // @author ameboide
- // @namespace http://userscripts.org/scripts/show/117633
- // @description Highlights index fields, adds a link to the related table to foreign keys
- // @include */phpmyadmin/tbl_properties_structure.php*
- // @include */phpmyadmin/tbl_structure.php*
- // @include */phpmyadmin/db_structure.php*
- // @version 0.0.1.20140705013815
- // ==/UserScript==
- //campos['nombre_del_campo'] = td
- var listaCampos = document.querySelectorAll('#tablestructure tbody th');
- var campos = {};
- for(var i=0; i<listaCampos.length; i++){
- var campo = listaCampos[i];
- var txt = campo.textContent.trim();
- campos[txt] = campo;
- //id sin indice -> rojo claro / codigo sin indice -> rojo oscuro
- if(txt.match(/^id_|_id$/i)) campo.style.color = '#f00';
- else if(txt.match(/^codigo_|_codigo$/i)) campo.style.color = '#800';
- }
- //idx -> azul oscuro
- var idxs = document.querySelectorAll('#table_indexes tbody tr:not(.tblFooters) td:last-of-type');
- for(i=0; i<idxs.length; i++){
- var campo = campos[idxs[i].textContent.trim()];
- if(campo) campo.style.color = '#008';
- }
- var urlBase = document.querySelector('[href^="tbl_relation.php"]').href;
- var matches = document.location.href.match(/\/(\w+\.php).*token=(\w+)/);
- var url = matches[1];
- var token = matches[2];
- //FK -> link azul claro
- function rellenar(claves){
- for(var campo in claves){
- if(!campos[campo]) continue;
- var s = claves[campo].split('.');
- var db = s[0];
- var tabla = s[1];
- var campo_fk = s[2];
- var a = document.createElement('a');
- a.href = url+'?db='+db+'&token='+token+'&table='+tabla;
- a.title = tabla+' . '+campo_fk;
- a.id = 'link_fk_' + campo;
- a.innerHTML = ' ->';
- var link_viejo = document.getElementById(a.id);
- if(link_viejo) campos[campo].removeChild(link_viejo);
- campos[campo].appendChild(a);
- campos[campo].style.color = '#00f';
- }
- }
- //si ya habia visitado esta tabla, tengo las claves foraneas guardadas
- var codigo_cache = document.location.host + ' : ' +
- urlBase.match(/(\?|&)db=(\w+)/)[2] + ' . ' +
- urlBase.match(/(\?|&)table=(\w+)/)[2];
- var cache = GM_getValue(codigo_cache, null);
- if(cache) rellenar(JSON.parse(cache));
- //leer la pag de las claves foraneas (si estaba cacheado, leo igual para actualizar)
- var xhr = new XMLHttpRequest();
- xhr.onreadystatechange = function(){
- if (xhr.readyState == 4 && xhr.status == 200){
- try{
- var div = document.createElement('div');
- div.innerHTML = xhr.responseText;
- var claves = {};
- var opts = div.querySelectorAll('select[name^="destination"] option[selected]');
- for(var i=0; i<opts.length; i++){
- var opt = opts[i];
- var val = opt.value;
- while(opt.nodeName != 'TR') opt = opt.parentNode;
- var campo = opt.firstElementChild.textContent.trim();
- claves[campo] = val;
- }
- var claves_str = JSON.stringify(claves);
- //si no es lo mismo q tenia cacheado, vuelvo a rellenar con la info nueva
- if(claves_str != cache){
- //workaround para error raro
- setTimeout(function() {
- GM_setValue(codigo_cache, claves_str);
- }, 0);
- rellenar(claves);
- }
- }
- catch(e){}
- }
- }
- xhr.open('GET', urlBase, true);
- xhr.send(null);