Objeto Tag en javascript
Una de las características que necesitaba para Neurange era la posibilidad de crear una taxonomía con la que disponer de todos los contenidos etiquetados y clasificados.
En este punto se planteaban dos problemas:
- El sistema de taxonomía en sí
- La interfaz de usuario para el manejo de dicha taxonomía
El sistema por sí mismo no representaba gran dificultad. Bastaba con mantener una relación de los contenidos con sus etiquetas. Esto se ha escrito en base al modelo relacional de los datos que maneja Neurange.
La interfaz era otro cantar. Al principio escribí varias funciones en javascript que realizaban llamadas vía Ajax para comprobar cómo se estaban escribiendo las etiquetas. Esto era muy ineficiente y costoso de mantener.
Se me ocurrió entonces que podría escribir un objeto javascript que se encargara de ciertas operaciones básicas sobre las etiquetas insertadas en un cuadro de texto. Esas operaciones debían ser las siguientes:
- obtener una cadena con todas las etiquetas
- obtener un array de etiquetas
- contar el total de etiquetas
- obtener una etiqueta determinada del array de etiquetas
Finalmente conseguí una primera versión que pongo a disposición vuestra con licencia GPL. Una demostración se puede ver aquí.
El código se puede descargar aquí.
El código completo del objeto es este:
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 | /** * Tag object */ function Tag() { } /** * Tag members * * tagString is a string with all tags separated by comma. * tagArray is an array of tags */ Tag.prototype.tagString = ""; Tag.prototype.tagArray = new Array(); /** * Converts array of tags in a string of tags separated by comma. */ Tag.prototype.toString = function() { var str = ""; for (var i = 0; i < this.total(); i++) { if (this.tagArray[i] != "") { str += this.tagArray[i] + ","; } } return str; } /** * Converts a string of tags into an array. * Assumes comma is tag separator. */ Tag.prototype.toArray = function() { var a = this.tagString.split(","); return a; } /** * gets i-th tag. */ Tag.prototype.getTag = function (i) { if (i >= 0 && i < = this.tagArray.length) { return this.tagArray[i]; } } /** * Counts and return the number of tags. */ Tag.prototype.total = function() { return this.tagArray.length; } |