r115462 MediaWiki - Code Review archive

Repository:MediaWiki
Revision:r115461‎ | r115462 | r115463 >
Date:14:22, 30 May 2012
Author:fptc
Status:new
Tags:
Comment:
FreqPatternTagCloud: Bugfixes, Support of all attribute types, Make Specialpage includable
Modified paths:
  • /trunk/extensions/FreqPatternTagCloud/FreqPatternTagCloud.body.php (modified) (history)
  • /trunk/extensions/FreqPatternTagCloud/freqpatterntagcloud.sql (modified) (history)
  • /trunk/extensions/FreqPatternTagCloud/includes/FrequentPattern.php (modified) (history)
  • /trunk/extensions/FreqPatternTagCloud/includes/TagCloud.php (modified) (history)
  • /trunk/extensions/FreqPatternTagCloud/includes/computation/FrequentPatternAlgorithm.php (modified) (history)
  • /trunk/extensions/FreqPatternTagCloud/includes/computation/FrequentPatternApriori.php (modified) (history)
  • /trunk/extensions/FreqPatternTagCloud/javascripts/jquery.parseJSON.js (added) (history)
  • /trunk/extensions/FreqPatternTagCloud/javascripts/main.js (modified) (history)

Diff [purge]

Index: trunk/extensions/FreqPatternTagCloud/FreqPatternTagCloud.body.php
@@ -3,7 +3,7 @@
44 * Frequent Pattern Tag Cloud Plug-in
55 * Special page
66 *
7 - * @author Tobias Beck, University of Heidelberg
 7+ * @author Tobias Beck (TB), University of Heidelberg
88 * @author Andreas Fay, University of Heidelberg
99 * @version 1.0
1010 */
@@ -129,7 +129,8 @@
130130 public static function getSearchSuggestions( $currentSearchValue ) {
131131 $dbr = wfGetDB( DB_SLAVE );
132132
133 - // Get possible attribute values
 133+ // Get possible attribute values
 134+ // TB: Include attribute values from table smw_atts2
134135 $res = $dbr->query(
135136 "(SELECT DISTINCT vals.smw_title AS val, atts.smw_title AS att
136137 FROM ".$dbr->tableName("smw_ids")." vals, ".$dbr->tableName("smw_ids")." atts, ".$dbr->tableName("smw_rels2")." rels
@@ -141,8 +142,18 @@
142143 AND LENGTH(atts.smw_iw) = 0
143144 AND vals.smw_title LIKE '%".mysql_real_escape_string($currentSearchValue)."%'
144145 ORDER BY vals.smw_title
145 - LIMIT 20) UNION (
146 - SELECT smw_title AS val, '".mysql_real_escape_string(wfMsg("fptc-categoryname"))."' AS att
 146+ LIMIT 14)
 147+ UNION (
 148+ SELECT DISTINCT vals.value_xsd AS val, atts.smw_title AS att
 149+ FROM ".$dbr->tableName("smw_atts2")." AS vals, ".$dbr->tableName("smw_ids")." AS atts
 150+ WHERE vals.p_id = atts.smw_id
 151+ AND atts.smw_namespace = 102
 152+ AND LENGTH(atts.smw_iw) = 0
 153+ AND value_xsd LIKE '%".mysql_real_escape_string($currentSearchValue)."%'
 154+ ORDER BY value_xsd
 155+ LIMIT 14)
 156+ UNION (
 157+ SELECT smw_title AS val, '".mysql_real_escape_string(wfMsg("fptc-categoryname"))."' AS att
147158 FROM ".$dbr->tableName("smw_ids")."
148159 WHERE smw_title LIKE '%".mysql_real_escape_string($currentSearchValue)."%'
149160 AND smw_namespace = 14
@@ -247,7 +258,8 @@
248259
249260 // Context menu
250261 $wgOut->addHTML(
251 - '<ul id="fptc_contextMenu" class="contextMenu">
 262+ '<div id="fptc_baseAttribute" style="display:none">' . $attribute . '</div>
 263+ <ul id="fptc_contextMenu" class="contextMenu">
252264 <li class="browse">
253265 <a href="#browse">' . wfMsg( 'fptc-context-menu-browse' ) . '</a>
254266 </li>
@@ -284,32 +296,39 @@
285297 private function printTag( Tag $tag, $attribute ) {
286298 global $wgOut;
287299
288 - $wgOut->addHTML(
 300+ if ($attribute == wfMsg( 'fptc-categoryname' )) {
 301+ $wgOut->addHTML(
289302 sprintf(
290 - '<div class="fptc_tag" style="font-size:%dpx;">%s</div>',
291 - $this->fontSizeMin + ( $this->fontSizeMax - $this->fontSizeMin ) * $tag->getRate(),
292 - $attribute == wfMsg( 'fptc-categoryname' )
293 - ? $wgOut->parseInline(
 303+ '<div class="fptc_tag" style="font-size:%dpx;">',
 304+ $this->fontSizeMin + ( $this->fontSizeMax - $this->fontSizeMin ) * $tag->getRate()) .
 305+ $this->sandboxParse(
 306+ // $wgOut->parseInline(
294307 sprintf(
295308 '[[:%s:%s|%s]]',
296309 self::CATEGORY_PAGE,
297310 $tag->getValue(),
298311 $tag->getValue()
299312 )
300 - )
301 - : $wgOut->parseInline(
302 - sprintf(
303 - '[[:%s:%s/%s/%s|%s]]',
304 - self::SPECIALPAGE_PREFIX,
305 - self::ATTRIBUTE_VALUE_INDEX_SPECIALPAGE,
306 - $attribute,
307 - $tag->getValue(),
308 - $tag->getValue()
309 - )
310 - )
311 - )
312 - );
 313+ ) . '</div>');
 314+ } else {
 315+ $wgOut->addHTML(
 316+ sprintf('<div class="fptc_tag" style="font-size:%dpx;">',
 317+ $this->fontSizeMin + ( $this->fontSizeMax - $this->fontSizeMin ) * $tag->getRate()) .
 318+ html::element( 'a', array('href' =>
 319+ SpecialPage::getTitleFor( self::ATTRIBUTE_VALUE_INDEX_SPECIALPAGE)->getLinkURL(
 320+ array('property' => $attribute, 'value' => $tag->getValue()))), $tag->getValue()) .
 321+ '</div>'
 322+ );
 323+ }
313324 }
 325+
 326+ private function sandboxParse($wikiText) {
 327+ global $wgTitle, $wgUser;
 328+ $myParser = new Parser();
 329+ $myParserOptions = ParserOptions::newFromUser($wgUser);
 330+ $result = $myParser->parse($wikiText, $wgTitle, $myParserOptions);
 331+ return $result->getText();
 332+ }
314333
315334 /**
316335 * Prints the result of the search for attribute <code>attribute</code> to
@@ -343,6 +362,7 @@
344363 '<a href=' . $possibleAttribute . '>' .
345364 $possibleAttribute . '</a>'
346365 );
 366+
347367 if ( $w < count( $proposal->getProposal() ) ) {
348368 $wgOut->addHTML( ', ' );
349369 }
Index: trunk/extensions/FreqPatternTagCloud/includes/computation/FrequentPatternApriori.php
@@ -21,55 +21,58 @@
2222 return array();
2323 }
2424 else {
25 - // Get all 1-frequent itemsets
26 - foreach ($items as $item) {
27 - $freq = 0;
28 - foreach ($transactions as $transaction) {
29 - if (in_array($item, $transaction)) {
30 - $freq++;
31 - }
32 - }
33 -
34 - if ((float)$freq / $numTransactions >= $minSupport) {
35 - $allFrequentItemsets[] = new FrequentItemset(array($item), (float)$freq / $numTransactions);
36 - }
37 - }
38 -
39 - // Now compute all k-frequent itemsets
40 - $freqK_1Itemsets = $allFrequentItemsets;
41 - while (count($freqK_1Itemsets) > 0) {
42 - $freqKItemsets = $this->generateCandidates($freqK_1Itemsets);
43 -
44 - $freqK_1Itemsets = array();
45 -
46 - // Check support for each candidate
47 - foreach ($freqKItemsets as $freqItemset) {
 25+ // Get all 1-frequent itemsets
 26+ foreach ($items as $item) {
 27+ set_time_limit(0);
4828 $freq = 0;
4929 foreach ($transactions as $transaction) {
50 - $inArray = true;
51 - foreach ($freqItemset->getItems() as $item) {
52 - if (!in_array($item, $transaction)) {
53 - $inArray = false;
54 - break;
55 - }
56 - }
57 -
58 - if ($inArray) {
 30+ if (in_array($item, $transaction)) {
5931 $freq++;
6032 }
6133 }
6234
6335 if ((float)$freq / $numTransactions >= $minSupport) {
64 - $freqItemset->setSupport((float)$freq / $numTransactions);
65 - $freqK_1Itemsets[] = $allFrequentItemsets[] = $freqItemset;
66 - } else {
67 - unset($freqItemset);
 36+ $allFrequentItemsets[] = new FrequentItemset(array($item), (float)$freq / $numTransactions);
6837 }
6938 }
 39+
 40+ // Now compute all k-frequent itemsets
 41+ $freqK_1Itemsets = $allFrequentItemsets;
 42+ while (count($freqK_1Itemsets) > 0) {
 43+ $freqKItemsets = $this->generateCandidates($freqK_1Itemsets);
 44+
 45+ $freqK_1Itemsets = array();
 46+
 47+ // Check support for each candidate
 48+ foreach ($freqKItemsets as $freqItemset) {
 49+ set_time_limit(0);
 50+ $freq = 0;
 51+ foreach ($transactions as $transaction) {
 52+ set_time_limit(0);
 53+ $inArray = true;
 54+ foreach ($freqItemset->getItems() as $item) {
 55+ if (!in_array($item, $transaction)) {
 56+ $inArray = false;
 57+ break;
 58+ }
 59+ }
 60+
 61+ if ($inArray) {
 62+ $freq++;
 63+ }
 64+ }
 65+
 66+ if ((float)$freq / $numTransactions >= $minSupport) {
 67+ $freqItemset->setSupport((float)$freq / $numTransactions);
 68+ $freqK_1Itemsets[] = $allFrequentItemsets[] = $freqItemset;
 69+ } else {
 70+ unset($freqItemset);
 71+ }
 72+ }
 73+ }
 74+
 75+ return $allFrequentItemsets;
7076 }
71 -
72 - return $allFrequentItemsets;
73 - }
7477 }
7578
7679
@@ -85,6 +88,7 @@
8689 $freqItemsetA = $freqK_1Itemsets[$a];
8790
8891 for ($b = $a + 1; $b < count($freqK_1Itemsets); $b++) {
 92+ set_time_limit(0);
8993 $freqItemsetB = $freqK_1Itemsets[$b];
9094
9195 // Check whether they have i=k-2 items in common
Index: trunk/extensions/FreqPatternTagCloud/includes/computation/FrequentPatternAlgorithm.php
@@ -26,7 +26,8 @@
2727 $numerator = 0;
2828 $denominator = 0;
2929 foreach ($transactions as $transaction) {
30 - // For each occurrence of the assumption -> increase denominator
 30+ set_time_limit(0);
 31+ // For each occurence of the assumption -> increase denominator
3132 // If the conclusion occurs too -> increase numerator
3233
3334 // Check if transaction contains assumption
@@ -84,7 +85,8 @@
8586 $count = count($itemset);
8687 $members = pow(2,$count);
8788 $powerset = array();
88 - for ($i = 0; $i < $members; $i++) {
 89+ for ($i = 0; $i < $members; $i++) {
 90+ set_time_limit(0);
8991 $b = sprintf("%0".$count."b",$i);
9092 $out = array();
9193 for ($j = 0; $j < $count; $j++) {
@@ -122,6 +124,7 @@
123125
124126 // Generate subset A of X where X is frequent itemset such that A => (X-A)
125127 foreach ($this->computePowerSet($itemset->getItems()) as $subsetOfX) {
 128+ set_time_limit(0);
126129 if (count($subsetOfX) == 0 || $subsetOfX == $itemset->getItems()) {
127130 // Ignore empty set and identity
128131 continue;
Index: trunk/extensions/FreqPatternTagCloud/includes/TagCloud.php
@@ -4,7 +4,7 @@
55 * Frequent Pattern Tag Cloud Plug-in
66 * TagCloud
77 *
8 - * @author Tobias Beck, University of Heidelberg
 8+ * @author Tobias Beck (TB), University of Heidelberg
99 * @author Andreas Fay, University of Heidelberg
1010 * @version 1.0
1111 */
@@ -94,9 +94,12 @@
9595 $res = $dbr->query("SELECT SUM(cat_pages)
9696 FROM ".$dbr->tableName("category"));
9797 } else {
98 - $res = $dbr->query("SELECT COUNT(1)
99 - FROM ".$dbr->tableName("smw_rels2")."
100 - WHERE p_id = ".mysql_real_escape_string($this->_attributeId));
 98+ // TB: Select only relevant tags in table smw_atts2 through JOIN with table smw_ids
 99+ $res = $dbr->query("SELECT SUM(num)
 100+ FROM ((SELECT COUNT(1) num FROM ".$dbr->tableName("smw_rels2")." WHERE p_id = ".mysql_real_escape_string($this->_attributeId).")
 101+ UNION (SELECT COUNT(1) num FROM ".$dbr->tableName("smw_atts2")." AS a
 102+ INNER JOIN ".$dbr->tableName("smw_ids")." AS i ON i.smw_id = a.p_id
 103+ WHERE (i.smw_namespace <> 102 OR length(i.smw_iw) = 0) AND p_id = ".mysql_real_escape_string($this->_attributeId).")) t");
101104 }
102105
103106 $row = $res->fetchRow();
@@ -116,11 +119,17 @@
117120 AND LENGTH(smw_iw) = 0
118121 ORDER BY smw_title");
119122 } else {
 123+ // TB: Get tags also from table smw_atts2
120124 $res = $dbr->query("SELECT smw_id, smw_title, (SELECT COUNT(1) FROM ".$dbr->tableName("smw_rels2")." WHERE o_id = smw_id AND p_id = ".mysql_real_escape_string($this->_attributeId).")/$numValues AS rate
121 - FROM ".$dbr->tableName("smw_ids")."
122 - WHERE smw_namespace = 0
123 - AND LENGTH(smw_iw) = 0
124 - AND smw_id <> ".mysql_real_escape_string($this->_attributeId)."
 125+ FROM ".$dbr->tableName("smw_ids")."
 126+ WHERE smw_namespace = 0
 127+ AND LENGTH(smw_iw) = 0
 128+ AND smw_id <> ".mysql_real_escape_string($this->_attributeId)."
 129+ UNION
 130+ SELECT 'atts2', a.value_xsd as smw_title, (SELECT COUNT(1) FROM ".$dbr->tableName("smw_atts2")." WHERE value_xsd = a.value_xsd AND p_id = ".mysql_real_escape_string($this->_attributeId).")/$numValues AS rate
 131+ FROM ".$dbr->tableName("smw_atts2")." AS a INNER JOIN
 132+ ".$dbr->tableName("smw_ids")." AS i ON i.smw_id = a.p_id
 133+ WHERE (i.smw_namespace <> 102 OR length(i.smw_iw) = 0) AND p_id = ".mysql_real_escape_string($this->_attributeId)."
125134 ORDER BY smw_title");
126135 }
127136
Index: trunk/extensions/FreqPatternTagCloud/includes/FrequentPattern.php
@@ -4,7 +4,7 @@
55 * Frequent Pattern Tag Cloud Plug-in
66 * Frequent pattern functions
77 *
8 - * @author Tobias Beck, University of Heidelberg
 8+ * @author Tobias Beck (TB), University of Heidelberg
99 * @author Andreas Fay, University of Heidelberg
1010 * @version 1.0
1111 */
@@ -80,6 +80,10 @@
8181 $res = $dbr->query("SELECT GROUP_CONCAT(DISTINCT o_id)
8282 FROM ".$dbr->tableName("smw_rels2")."
8383 WHERE p_id = ".mysql_real_escape_string($attributeId)."
 84+ GROUP BY p_id
 85+ UNION SELECT GROUP_CONCAT(DISTINCT value_xsd)
 86+ FROM ".$dbr->tableName("smw_atts2")."
 87+ WHERE p_id = ".mysql_real_escape_string($attributeId)."
8488 GROUP BY p_id");
8589 }
8690 $row = $res->fetchRow();
@@ -94,9 +98,15 @@
9599 AND ids.smw_namespace = 14
96100 GROUP BY catlinks.cl_from");
97101 } else {
 102+ // TB: Table smw_rels2 and smw_atts2 are independent because s_id appears only in one of both tables at a time
98103 $res = $dbr->query("SELECT GROUP_CONCAT(o_id)
99104 FROM ".$dbr->tableName("smw_rels2")."
100105 WHERE p_id = ".mysql_real_escape_string($attributeId)."
 106+ GROUP BY s_id
 107+ UNION SELECT GROUP_CONCAT(value_xsd)
 108+ FROM ".$dbr->tableName("smw_atts2")." As a
 109+ INNER JOIN ".$dbr->tableName("smw_ids")." AS i ON i.smw_id = a.p_id
 110+ WHERE (i.smw_namespace <> 102 OR length(i.smw_iw) = 0) AND p_id = ".mysql_real_escape_string($attributeId)."
101111 GROUP BY s_id");
102112 }
103113 $transactions = array();
@@ -116,12 +126,12 @@
117127
118128 foreach ($rule->getAssumption() as $item) {
119129 $dbw->query("INSERT INTO ".$dbw->tableName("fptc_items")." (o_id, rule_id, item_order)
120 - VALUES (".mysql_real_escape_string($item).", ".mysql_real_escape_string($ruleId).", 0)");
 130+ VALUES ('".mysql_real_escape_string($item)."', ".mysql_real_escape_string($ruleId).", 0)");
121131 }
122132
123133 foreach ($rule->getConclusion() as $item) {
124134 $dbw->query("INSERT INTO ".$dbw->tableName("fptc_items")." (o_id, rule_id, item_order)
125 - VALUES (".mysql_real_escape_string($item).", ".mysql_real_escape_string($ruleId).", 1)");
 135+ VALUES ('".mysql_real_escape_string($item)."', ".mysql_real_escape_string($ruleId).", 1)");
126136 }
127137 }
128138
@@ -166,7 +176,8 @@
167177 $attributeId = $row[0];
168178 $res->free();
169179
170 - // Get id of assumption
 180+ // Get id of assumption from table smw_ids
 181+ // TB: Or name of assumtion from table smw_atts2
171182 if (wfMsg("fptc-categoryname") == $attribute) {
172183 $res = $dbr->query("SELECT smw_id
173184 FROM ".$dbr->tableName("smw_ids")."
@@ -174,11 +185,15 @@
175186 AND smw_namespace = 14
176187 AND LENGTH(smw_iw) = 0");
177188 } else {
178 - $res = $dbr->query("SELECT smw_id
179 - FROM ".$dbr->tableName("smw_ids")."
180 - WHERE smw_title = '".mysql_real_escape_string($assumption)."'
181 - AND smw_namespace = 0
182 - AND LENGTH(smw_iw) = 0");
 189+ $res = $dbr->query("(SELECT smw_id
 190+ FROM ".$dbr->tableName("smw_ids")."
 191+ WHERE smw_title = '".mysql_real_escape_string($assumption)."'
 192+ AND smw_namespace = 0
 193+ AND LENGTH(smw_iw) = 0)
 194+ UNION
 195+ (SELECT a.value_xsd FROM ".$dbr->tableName("smw_atts2")." AS a INNER JOIN ".$dbr->tableName("smw_ids")." AS i ON i.smw_id = a.p_id
 196+ WHERE (i.smw_namespace <> 102 OR length(i.smw_iw) = 0) AND a.value_xsd = '".mysql_real_escape_string($assumption)."')
 197+ ORDER BY smw_id desc");
183198 }
184199 $row = $res->fetchRow();
185200 $assumptionId = $row[0];
@@ -189,18 +204,23 @@
190205 FROM ".$dbr->tableName("fptc_associationrules")." rules, ".$dbr->tableName("fptc_items")." items
191206 WHERE rules.rule_id = items.rule_id
192207 AND item_order = 0
193 - AND o_id = ".mysql_real_escape_string($assumptionId)."
 208+ AND o_id = '".mysql_real_escape_string($assumptionId)."'
194209 AND NOT EXISTS( SELECT 1 FROM ".$dbr->tableName("fptc_items")." WHERE rule_id = rules.rule_id AND item_order = 0 AND o_id != items.o_id )
195210 ORDER BY rule_support DESC, rule_confidence DESC");
196211 $conclusions = array();
197212 while ($row = $res->fetchRow()) {
198213 // Get conclusions
199 - $resItems = $dbr->query("SELECT smw_title
 214+ $resItems = $dbr->query("(SELECT smw_title
200215 FROM ".$dbr->tableName("smw_ids")." ids, ".$dbr->tableName("fptc_items")." items
201216 WHERE ids.smw_id = items.o_id
202217 AND item_order = 1
203 - AND rule_id = ".mysql_real_escape_string($row['rule_id']));
204 -
 218+ AND rule_id = ".mysql_real_escape_string($row['rule_id']).")
 219+ UNION
 220+ (SELECT value_xsd AS smw_title FROM ".$dbr->tableName("smw_atts2")." atts2, ".$dbr->tableName("fptc_items")." items
 221+ WHERE atts2.value_xsd = items.o_id
 222+ AND item_order = 1
 223+ AND rule_id = ".mysql_real_escape_string($row['rule_id']).")");
 224+
205225 // Only consider rules with single conclusion
206226 if ($resItems->numRows() > 1) {
207227 continue;
@@ -217,6 +237,7 @@
218238
219239 /**
220240 * Shows all rules (for debugging purposes)
 241+ * TB: Attention, attribute types which are saved in table smw_atts2 are not yet considered here
221242 *
222243 * @return void
223244 * @throws SQLException
Index: trunk/extensions/FreqPatternTagCloud/javascripts/main.js
@@ -2,7 +2,7 @@
33 * Frequent Pattern Tag Cloud Plug-in
44 * Main javascript
55 *
6 - * @author Tobias Beck, University of Heidelberg
 6+ * @author Tobias Beck (TB), University of Heidelberg
77 * @author Andreas Fay, University of Heidelberg
88 * @version 1.0
99 */
@@ -28,7 +28,7 @@
2929 }
3030 });
3131
32 - var attribute = $j("#fptc_attributeName").val();
 32+ var attribute = $j("#fptc_baseAttribute").text();
3333
3434 // Context menu for tag cloud
3535 $j(".fptc_tag a").contextMenu({
@@ -46,9 +46,14 @@
4747 }
4848 }, function(action, el, pos, menu) {
4949 if (action == "browse") {
50 - window.location = el.attr("href");
 50+ window.location = el.attr("href");
5151 } else if (action == "browse_similar_tag") {
52 - window.location = el.attr("href").replace(new RegExp(encodeURI(el.text())), menu.attr("title"));
 52+ // TB: Changes due to the support of all attribute types
 53+ var newDirName = menu.attr("title");
 54+ var oldDirName = el.text();
 55+ // Construct the corresponding URL
 56+ // window.location = el.attr("href").replace(new RegExp(encodeURI(el.text())), menu.attr("title"));
 57+ window.location = el.attr("href").replace(oldDirName, newDirName);
5358 }
5459 });
5560
@@ -62,4 +67,4 @@
6368 });
6469 }
6570 });
66 -});
\ No newline at end of file
 71+});
Index: trunk/extensions/FreqPatternTagCloud/javascripts/jquery.parseJSON.js
@@ -0,0 +1,36 @@
 2+jQuery( document ).ready( function( $ ) {
 3+
 4+/**
 5+ * Frequent Pattern Tag Cloud Plug-in
 6+ * Addition of parseJSON for older jQuery versions
 7+ *
 8+ * @author Tobias Beck, University of Heidelberg
 9+ * @author Andreas Fay, University of Heidelberg
 10+ * @version 1.0
 11+ */
 12+
 13+/**
 14+ * Enable parseJSON
 15+ */
 16+ if (!$j.parseJSON) { ( function() {
 17+ $j.extend({
 18+ parseJSON: function( data ) {
 19+ if ( typeof data !== "string" || !data ) {
 20+ return null;
 21+ }
 22+ data = jQuery.trim( data );
 23+ if ( /^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@")
 24+ .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]")
 25+ .replace(/(?:^|:|,)(?:\s*\[)+/g, "")) ) {
 26+ return window.JSON && window.JSON.parse ?
 27+ window.JSON.parse( data ) :
 28+ (new Function("return " + data))();
 29+ } else {
 30+ jQuery.error( "Invalid JSON: " + data );
 31+ }
 32+ }
 33+ });
 34+
 35+ })(jQuery);
 36+}
 37+});
Property changes on: trunk/extensions/FreqPatternTagCloud/javascripts/jquery.parseJSON.js
___________________________________________________________________
Added: svn:eol-style
138 + native
Index: trunk/extensions/FreqPatternTagCloud/freqpatterntagcloud.sql
@@ -8,7 +8,7 @@
99 CREATE INDEX /*i*/p_id ON /*_*/fptc_associationrules (p_id);
1010
1111 CREATE TABLE IF NOT EXISTS /*_*/fptc_items (
12 - `o_id` INT(8) NOT NULL,
 12+ `o_id` varbinary(255) NOT NULL,
1313 `rule_id` INT NOT NULL,
1414 `item_order` TINYINT(1) NOT NULL,
1515 PRIMARY KEY ( `o_id` , `rule_id` )