/* A list of terms, where the size and color of each term is determined by a number (typically numebr of times it appears in some text). Uses the Google Visalization API. Data Format First column is the text (string) Second column is the weight (positive number) Third optional column ia a link (string) Configuration options: target Target for link: '_top' (default) '_blank' Methods getSelection Events select */ TermCloud = function(container) { this.container = container; } TermCloud.MIN_UNIT_SIZE = 1; TermCloud.MAX_UNIT_SIZE = 7; TermCloud.RANGE_UNIT_SIZE = TermCloud.MAX_UNIT_SIZE - TermCloud.MIN_UNIT_SIZE; TermCloud.nextId = 0; TermCloud.prototype.draw = function(data, options) { var cols = data.getNumberOfColumns(); var valid = (cols >= 2 && cols <= 3 && data.getColumnType(0) == 'string' && data.getColumnType(1) == 'number'); if (valid && cols == 3) { valid = data.getColumnType(2) == 'string'; } if (!valid) { this.container.innerHTML = 'TermCloud Error: Invalid data format. First column must be a string, second a number, and optional third column a string'; return; } options = options || {}; var linkTarget = options.target || '_top'; // Compute frequency range var minFreq = 999999; var maxFreq = 0; for (var rowInd = 0; rowInd < data.getNumberOfRows(); rowInd++) { var f = data.getValue(rowInd, 1); if (f > 0) { minFreq = Math.min(minFreq, f); maxFreq = Math.max(maxFreq, f); } } if (minFreq > maxFreq) { minFreq = maxFreq; } if (minFreq == maxFreq) { maxFreq++; } var range = maxFreq - minFreq; range = Math.max(range, 4); var html = []; var id = TermCloud.nextId++; html.push('