Palabras reservadas
Publicado por Eduardo (1 intervención) el 05/06/2023 18:33:10
Estoy haciendo un proyecto de JavaScript que funciona como un tipo de compilador SQL. Estoy utilizando palabras reservadas para que funcionen como una selección. Tú escribes en el cuadro de texto y automáticamente salen sugerencias de lo que quieras escribir. El problema es que quiero que esas palabras reservadas, cuando sean seleccionadas al momento de escribirse en el cuadro de texto, sean de un color distinto.
Soy algo nuevo programando
Javascript
Soy algo nuevo programando
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
// Lista de sugerencias
var suggestions = ["SELECT", "FROM", "WHERE", "INSERT", "UPDATE", "DELETE", "CREATE", "ALTER", "DROP", "INDEX",
"AND", "OR", "NOT","ALL", "ALTER", "ANALYZE", "AND", "AS", "ASC", "ASENSITIVE", "BEFORE", "BETWEEN", "BIGINT",
"BINARY", "BLOB", "BOTH", "BY", "CALL", "CASCADE", "CASE", "CHANGE", "CHAR", "CHARACTER", "CHECK", "COLLATE",
"COLUMN", "CONDITION", "CONNECTION", "CONSTRAINT", "CONTINUE", "CONVERT", "CROSS", "CURRENT_DATE",
"CURRENT_TIME", "CURRENT_TIMESTAMP", "CURRENT_USER", "CURSOR", "DATABASE", "DATABASES", "DAY_HOUR", "DAY_MICROSECOND",
"DAY_MINUTE", "DAY_SECOND", "DEC", "DECIMAL", "DECLARE", "DEFAULT", "DELAYED", "DELETE", "DESC", "DESCRIBE", "DETERMINISTIC",
"DISTINCT", "DISTINCTROW", "DIV", "DOUBLE", "DROP", "DUAL", "EACH", "ELSE", "ELSEIF", "ENCLOSED", "ESCAPED", "EXISTS", "EXIT", "EXPLAIN",
"FALSE", "FETCH", "FLOAT", "FOR", "FORCE", "FOREIGN", "FROM", "FULLTEXT", "GOTO", "GRANT", "GROUP", "HAVING", "HIGH_PRIORITY", "HOUR_MICROSECOND",
"HOUR_MINUTE", "HOUR_SECOND", "IF", "IGNORE", "IN", "INDEX", "INFILE", "INNER", "INOUT", "INSENSITIVE", "INSERT", "INT", "INTEGER", "INTERVAL",
"INTO", "IS", "ITERATE", "JOIN", "KEY", "KEYS", "KILL", "LEADING", "LEAVE", "LEFT", "LIKE", "LIMIT", "LINES", "LOAD", "LOCALTIME", "LOCALTIMESTAMP",
"LOCK", "LONG", "LONGBLOB", "LONGTEXT", "LOOP", "LOW_PRIORITY", "MATCH", "MEDIUMBLOB", "MEDIUMINT", "MEDIUMTEXT", "MIDDLEINT", "MINUTE_MICROSECOND",
"MINUTE_SECOND", "MOD", "MODIFIES", "NATURAL", "NOT", "NO_WRITE_TO_BINLOG", "NULL", "NUMERIC", "ON", "OPTIMIZE", "OPTION", "OPTIONALLY", "OR",
"ORDER", "OUT", "OUTER", "OUTFILE", "PRECISION", "PRIMARY", "PROCEDURE", "PURGE", "READ", "READS", "REAL", "REFERENCES", "REGEXP", "RENAME",
"REPEAT", "REPLACE", "REQUIRE", "RESTRICT", "RETURN", "REVOKE", "RIGHT", "RLIKE", "SCHEMA", "SCHEMAS", "SECOND_MICROSECOND", "SELECT",
"SENSITIVE", "SEPARATOR", "SET", "SHOW", "SMALLINT", "SONAME", "SPATIA", "SPECIFIC", "SQL", "SQLEXCEPTION", "SQLSTATE", "SQLWARNING",
"SQL_BIG_RESULT", "SQL_CALC_FOUND_ROWS", "SQL_SMALL_RESULT", "SSL", "STARTING", "STRAIGHT_JOIN", "TABLE", "TERMINATED", "THEN", "TINYBLOB",
"TINYINT", "TINYTEXT", "TO", "TRAILING", "TRIGGER", "TRUE", "UNDO", "UNION", "UNIQUE", "UNLOCK", "UNSIGNED", "UPDATE", "USAGE", "USE", "USING",
"UTC_DATE", "UTC_TIME", "UTC_TIMESTAMP", "VALUES", "VARBINARY", "VARCHAR", "VARCHARACTER", "VARYING", "WHEN", "WHERE", "WHILE", "WITH", "WRITE",
"XOR", "YEAR_MONTH", "ZEROFILL"];
// Detectar la entrada del usuario
var codeInput = document.getElementById("code-input");
var suggestionsList = document.getElementById("suggestions");
codeInput.addEventListener("keydown", function(event) {
var key = event.keyCode || event.which;
if (key === 9) { // Tab key
event.preventDefault();
var input = this.value;
var lastWord = getLastWord(input);
for (var i = 0; i < suggestions.length; i++) {
if (suggestions[i].toLowerCase().startsWith(lastWord.toLowerCase())) {
var suggestion = suggestions[i];
var updatedInput = input.substr(0, input.lastIndexOf(lastWord)) + suggestion;
this.value = updatedInput;
break;
}
}
}
});
codeInput.addEventListener("input", function() {
var input = this.value;
var lastWord = getLastWord(input);
var matchingSuggestions = [];
for (var i = 0; i < suggestions.length; i++) {
if (suggestions[i].toLowerCase().startsWith(lastWord.toLowerCase())) {
matchingSuggestions.push(suggestions[i]);
}
}
showSuggestions(matchingSuggestions);
});
function showSuggestions(matchingSuggestions) {
suggestionsList.innerHTML = "";
for (var i = 0; i < matchingSuggestions.length; i++) {
var suggestion = document.createElement("a");
suggestion.innerHTML = matchingSuggestions[i];
suggestion.addEventListener("click", function() {
var input = codeInput.value;
var lastWord = getLastWord(input);
var updatedInput = input.substr(0, input.lastIndexOf(lastWord)) + this.innerHTML;
codeInput.value = updatedInput;
suggestionsList.style.display = "none";
});
suggestionsList.appendChild(suggestion);
}
if (matchingSuggestions.length > 0) {
suggestionsList.style.display = "block";
} else {
suggestionsList.style.display = "none";
}
}
// Obtener la última palabra ingresada por el usuario, incluso si está dentro de símbolos
function getLastWord(input) {
var words = input.split(" ");
var lastWord = words[words.length - 1];
// Verificar si la última palabra está dentro de símbolos
var symbols = ["(", ")", "{", "}", "[", "]", ";", ",", ".", "'", "\""];
while (symbols.includes(lastWord.charAt(0))) {
lastWord = lastWord.substr(1);
}
return lastWord;
}
// Botón para descargar en .sql
document.getElementById("download-btn").addEventListener("click", function() {
var content = codeInput.value;
var filename = "archivo.sql";
var blob = new Blob([content], {type: "text/plain;charset=utf-8"});
var link = document.createElement("a");
link.setAttribute("href", window.URL.createObjectURL(blob));
link.setAttribute("download", filename);
link.click();
});
// Quitar linea roja de ortografia
var textInputs = document.querySelectorAll('input[type="text"], textarea');
textInputs.forEach(input => {
input.spellcheck = false;
});
Valora esta pregunta


0