Author: MichaelDaum Date: 2008-04-28 12:09:42 -0500 (Mon, 28 Apr 2008) New Revision: 16740 Trac url: http://develop.twiki.org/trac/changeset/16740 Added: twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/CategorizedTopicRenderIndexItem.txt twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/CategoryRenderIndexItem.txt twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/ClassifiedTopicRenderIndexItem.txt twiki/trunk/ClassificationPlugin/pub/TWiki/ClassificationPlugin/FormDotPm-4_1_2.patch Modified: twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/CategorizedTopic.txt twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/Category.txt twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/CategoryBrowser.txt twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/ClassifiedTopic.txt twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/RenderCategory.txt twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/RenderEditTagCloud.txt twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/TaggedTopic.txt twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/TestCategorizedTopic1.txt twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/TestTopic0.txt twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/WebClassSearch.txt twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/WebHome.txt twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/WebPreferences.txt twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/WebStatistics.txt twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/WebTagCloud.txt twiki/trunk/ClassificationPlugin/lib/TWiki/Plugins/ClassificationPlugin/Core.pm twiki/trunk/ClassificationPlugin/lib/TWiki/Plugins/ClassificationPlugin/Hierarchy.pm twiki/trunk/ClassificationPlugin/lib/TWiki/Plugins/ClassificationPlugin/MANIFEST twiki/trunk/ClassificationPlugin/pub/TWiki/ClassificationPlugin/jquery.tagselector.js twiki/trunk/ClassificationPlugin/pub/TWiki/ClassificationPlugin/styles.css Log: Item4912: * lazy compilation * delay compilation of distance matrix * added patch for Form.pm TWiki-4.1.2 to implement the cat and tag formfield types * pattern skin css tweaks * using TopicMethods in RenderCategory to make its appearance type dependent * added parameter to configure the number of columns in a category topic * fixed sorting of categorized items according to their topic title, which isn't necessarily the topic name * fixed TopicType installers to include the TopicStub tag * usability improvements for topic creator Modified: twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/CategorizedTopic.txt =================================================================== --- twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/CategorizedTopic.txt 2008-04-28 16:58:56 UTC (rev 16739) +++ twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/CategorizedTopic.txt 2008-04-28 17:09:42 UTC (rev 16740) @@ -13,7 +13,7 @@ %ENDSECTION{name="documentation" type="section"}% ---++ Installation -%DBCALL{"Applications.RenderTopicInstaller" TEXT="Install '%TOPIC%' TopicType in" TYPE="TopicType" PARENT="TopicType"}% +%DBCALL{"Applications.RenderTopicInstaller" TEXT="Install '%TOPIC%' TopicType in" TYPE="TopicType, TopicStub" PARENT="TopicType"}% %STARTINCLUDE% Added: twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/CategorizedTopicRenderIndexItem.txt =================================================================== --- twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/CategorizedTopicRenderIndexItem.txt (rev 0) +++ twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/CategorizedTopicRenderIndexItem.txt 2008-04-28 17:09:42 UTC (rev 16740) @@ -0,0 +1,59 @@ +%META:TOPICINFO{author="TWikiContributor" date="1206371854" format="1.1" reprev="1.1" version="$Rev$"}% +%META:TOPICPARENT{name="TopicFunction"}% +---+!! Function: %TOPIC% +%FORMFIELD{"Summary"}% + +%TOC{depth="2"}% + +---++ Documentation +%STARTSECTION{name="documentation" type="section"}% +This method is called by RenderCategory to display +a summary for an object listed within the Category topic. + +---+++++ Parameters + * OBJECT + +%ENDSECTION{name="documentation" type="section"}% + +---++ Implementation +<verbatim> +%STARTINCLUDE%<!-- ClassifiedTopicRenderIndexItem --> +%~~ DBQUERY{topic="%OBJECT%" +~~~ format="<div class='clsIndexItem'>[[$web.$topic][$expand(TopicTitle or topic)]] +*~~ $percntREDDOT{$web.$topic}$percnt +~~~ <div class='clsTopicInfo'>$expand(Summary) +~~~ <div class='clsAuthorDateInfo'>last modified $formatTime(info.date) +~~~ by $percntSPACEOUT{$expand(info.author)}$percnt</div> +~~~ </div></div> +~~~ " +~~~ }% +<!-- //ClassifiedTopicRenderIndexItem -->%STOPINCLUDE% +</verbatim> + +<!-- interrupt glue --> + +---++ Test +<div class="alt"> +%DBCALL{"%TOPIC%"}% +</div> + +%DBCALL{"Applications.RenderFunctionCallers"}% + +---++ Copyright +<div style="text-align:justify;margin:1em;"> +© 2008 Michael Daum in...@mi... + +%DBCALL{"Applications.GnuGeneralPublicLicense" section="notice"}% +</div> +<!-- + * Set DEPENDENCIES = TopicFunction +--> + + + +%META:FORM{name="Applications.ApplicationTopic"}% +%META:FIELD{name="TopicType" attributes="" title="TopicType" value="DocuTopic, TopicFunction"}% +%META:FIELD{name="TopicTitle" attributes="" title="<nop>TopicTitle" value=""}% +%META:FIELD{name="Summary" attributes="" title="Summary" value="Render a summary for a ClassifiedTopic in a category index"}% +%META:FIELD{name="TWikiApplication" attributes="" title="TWikiApplication" value="ClassificationApp"}% +%META:TOPICMOVED{by="micha" date="1206371685" from="Applications/ClassificationApp.ClassifiedTopicRenderIndexItem" to="Applications/ClassificationApp.CategorizedTopicRenderIndexItem"}% Modified: twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/Category.txt =================================================================== --- twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/Category.txt 2008-04-28 16:58:56 UTC (rev 16739) +++ twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/Category.txt 2008-04-28 17:09:42 UTC (rev 16740) @@ -1,4 +1,4 @@ -%META:TOPICINFO{author="TWikiContributor" date="1198968754" format="1.1" version="$Rev$"}% +%META:TOPICINFO{author="TWikiContributor" date="1205883674" format="1.1" reprev="1.29" version="$Rev$"}% %META:TOPICPARENT{name="TopicType"}% ---+!! %TOPIC% %FORMFIELD{"Summary"}% @@ -19,7 +19,7 @@ %ENDSECTION{name="documentation" type="section"}% ---++ Installation -%DBCALL{"Applications.RenderTopicInstaller" TEXT="Install '%TOPIC%' TopicType in" TYPE="TopicStub, TopicType, AdminTool"}% +%DBCALL{"Applications.RenderTopicInstaller" TEXT="Install '%TOPIC%' TopicType in" TYPE="TopicType, TopicStub, AdminTool"}% %STARTINCLUDE% ---++ Create a new category @@ -34,7 +34,7 @@ <input type="hidden" name="action" value="form" /> <input type="hidden" name="TopicType" value="Category, CategorizedTopic" /> <input type="hidden" name="topicparent" value="%BASEWEB%.%BASETOPIC%" /> -<input type="hidden" name="redirectto" value="%BASEWEB%.%BASETOPIC%" /> +<input type="hidden" name="redirectto" value="%SCRIPTURL{"view"}%/%BASEWEB%/%BASETOPIC%?refresh=on" /> <table> <tr> <th class="twikiFirstCol">Title:</th> @@ -53,7 +53,8 @@ <td> %~~ DBCALL{"Applications.ClassificationApp.RenderEditCategoryBrowser" ~~~ NAME="Category" -~~~ VALUE="%IFDEFINED{"%BASETOPIC%" as="Category" then="TopCategory" else="$test"}%" +~~~ VALUE="%IFDEFINED{"%VALUE%" then="%VALUE%" else="TopCategory"}%" +~~~ TOP="%IFDEFINED{"%TOP%" then="%TOP%" else="TopCategory"}%" ~~~ BUTTONS="off" ~~~ }% </td> @@ -79,10 +80,10 @@ ~~~ top="TopCategory" ~~~ exclude="TopCategory" ~~~ depth="2" -~~~ format="$name;$web;$title;$summary;$leafs$n" +~~~ format="$title;$topic;$web;$summary;$leafs$n" ~~~ }% *~~ " -~~~ cols="3" +~~~ cols="%IFDEFINED{"%CLASSIFICATIONPLUGIN_NRCOLS%" then="$test" else="3"}%" ~~~ header="<h2>Top categories</h2> ~~~ There ~~~ $percntIFDEFINED{\"$count\" as=\"1\" @@ -91,9 +92,10 @@ ~~~ }$percnt in this web." ~~~ split="\n" ~~~ pattern="(.*);(.*);(.*);(.*);(.*)" -~~~ format="[[$2.$1][$3]] +~~~ unique="on" +~~~ format="[[$3.$2][$1]] ~~~ $percntIFDEFINED{\"$5\" then=\" ($5)\"}$percnt -*~~ $percntREDDOT{$2.$1}$percnt +*~~ $percntREDDOT{$3.$2}$percnt ~~~ <div class='clsTopicInfo'>$4</div> ~~~ " ~~~ }% @@ -105,10 +107,10 @@ ~~~ top="TopCategory" ~~~ exclude="TopCategory" ~~~ mindepth="1" -~~~ format="$name;$web;$title;$summary;$leafs$n$children" +~~~ format="$title;$topic;$web;$summary;$leafs$n$children" ~~~ }% *~~ " -~~~ cols="3" +~~~ cols="%IFDEFINED{"%CLASSIFICATIONPLUGIN_NRCOLS%" then="$test" else="3"}%" ~~~ header="<h2>List of all child categories</h2> ~~~ There ~~~ $percntIFDEFINED{\"$count\" as=\"1\" @@ -116,10 +118,11 @@ ~~~ else=\" are $count child categories \" ~~~ }$percnt in this web." ~~~ split="\n" +~~~ unique="on" ~~~ pattern="(.*);(.*);(.*);(.*);(.*)" -~~~ format="[[$2.$1][$3]] +~~~ format="[[$3.$2][$1]] ~~~ $percntIFDEFINED{\"$5\" then=\" ($5)\"}$percnt -*~~ $percntREDDOT{$2.$1}$percnt +*~~ $percntREDDOT{$3.$2}$percnt ~~~ <div class='clsTopicInfo'>$4</div> ~~~ " ~~~ }% Modified: twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/CategoryBrowser.txt =================================================================== --- twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/CategoryBrowser.txt 2008-04-28 16:58:56 UTC (rev 16739) +++ twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/CategoryBrowser.txt 2008-04-28 17:09:42 UTC (rev 16740) @@ -4,7 +4,7 @@ %FORMFIELD{"Summary"}% ---++ Installation -%DBCALL{"Applications.RenderTopicInstaller" TEXT="Install '%TOPIC%' in" TYPE="AdminTool"}% +%DBCALL{"Applications.RenderTopicInstaller" TEXT="Install '%TOPIC%' in" TYPE="AdminTool, TopicStub"}% %STARTINCLUDE% See the list of all [[%BASEWEB%.Categories][Categories]] Added: twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/CategoryRenderIndexItem.txt =================================================================== --- twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/CategoryRenderIndexItem.txt (rev 0) +++ twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/CategoryRenderIndexItem.txt 2008-04-28 17:09:42 UTC (rev 16740) @@ -0,0 +1,58 @@ +%META:TOPICINFO{author="TWikiContributor" date="1206372857" format="1.1" reprev="1.1" version="$Rev$"}% +%META:TOPICPARENT{name="TopicFunction"}% +---+!! Function: %TOPIC% +%FORMFIELD{"Summary"}% + +%TOC{depth="2"}% + +---++ Documentation +%STARTSECTION{name="documentation" type="section"}% +%RED%TODO%ENDCOLOR% + +---+++++ Parameters + * OBJECT + * LEAFS + +---+++++ Css + * +%ENDSECTION{name="documentation" type="section"}% + +---++ Implementation +<verbatim> +%STARTINCLUDE%<!-- CategoryRenderIndexItem --> +%~~ DBQUERY{topic="%OBJECT%" +~~~ format="<div class='clsIndexItem'>[[$web.$topic][$expand(TopicTitle or topic)]] +~~~ $percntIFDEFINED{\"%LEAFS%\" then=\" (%LEAFS%)\"}$percnt +*~~ $percntREDDOT{$web.$topic}$percnt +~~~ <div class='clsTopicInfo'>$expand(Summary)</div></div> +~~~ " +~~~ }% +<!-- //CategoryRenderIndexItem -->%STOPINCLUDE% +</verbatim> + +<!-- interrupt glue --> + +---++ Test +<div class="alt"> +%DBCALL{"%TOPIC%"}% +</div> + +%DBCALL{"Applications.RenderFunctionCallers"}% + +---++ Copyright +<div style="text-align:justify;margin:1em;"> +© 2007 MichaelDaum in...@mi... + +%DBCALL{"Applications.GnuGeneralPublicLicense" section="notice"}% +</div> +<!-- + * Set DEPENDENCIES = TopicFunction +--> + + + +%META:FORM{name="Applications.ApplicationTopic"}% +%META:FIELD{name="TopicType" attributes="" title="TopicType" value="DocuTopic, TopicFunction"}% +%META:FIELD{name="TopicTitle" attributes="" title="<nop>TopicTitle" value=""}% +%META:FIELD{name="Summary" attributes="" title="Summary" value="Render a summary for a Category in a category index"}% +%META:FIELD{name="TWikiApplication" attributes="" title="TWikiApplication" value="ClassificationApp"}% Modified: twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/ClassifiedTopic.txt =================================================================== --- twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/ClassifiedTopic.txt 2008-04-28 16:58:56 UTC (rev 16739) +++ twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/ClassifiedTopic.txt 2008-04-28 17:09:42 UTC (rev 16740) @@ -1,4 +1,4 @@ -%META:TOPICINFO{author="TWikiContributor" date="1202208130" format="1.1" version="$Rev$"}% +%META:TOPICINFO{author="TWikiContributor" date="1207038788" format="1.1" version="$Rev$"}% %META:TOPICPARENT{name="TopicType"}% ---+!! %TOPIC% %FORMFIELD{"Summary"}% @@ -14,14 +14,14 @@ %ENDSECTION{name="documentation" type="section"}% ---++ Installation -%DBCALL{"Applications.RenderTopicInstaller" TEXT="Install '%TOPIC%' TopicType in" TYPE="TopicType" PARENT="TopicType"}% +%DBCALL{"Applications.RenderTopicInstaller" TEXT="Install '%TOPIC%' TopicType in" TYPE="TopicType, TopicStub" PARENT="TopicType"}% -%STARTINCLUDE% +%STARTINCLUDE%<!-- classified topic --> ---++ Create a new topic %STARTSECTION{"factory"}%<!-- factory --> <div class="twikiPageForm"> <form action="%SCRIPTURLPATH{"edit"}%/%BASEWEB%/" method="post"> -<input type="hidden" name="topicparent" value="%BASEWEB%.%BASETOPIC%" /> +<input type="hidden" name="topicparent" value="%BASEWEB%.WebHome" /> <input type="hidden" name="web" value="%BASEWEB%" /> <input type="hidden" name="onlynewtopic" value="on" /> <input type="hidden" name="formtemplate" value="Applications.ClassificationApp.ClassifiedTopic" /> @@ -39,14 +39,15 @@ <th class="twikiFirstCol"> </th> <td style="padding-top:1em"> <input type="submit" class="twikiSubmit natOkButton" value="Submit" /> - <input type="reset" class="twikiButton natCancelButton" value="Reset" /> + <input type="reset" class="twikiButton natAltButton" value="Reset" /> + <input type="button" class="twikiButton natCancelButton" value="Cancel" onclick="window.location.href='%SCRIPTURLPATH{"view"}%/%BASEWEB%/%HOMETOPIC%';" /> </td> </tr> </table> </form> </div> <!-- //factory -->%ENDSECTION{"factory"}% -%STOPINCLUDE% +<!-- //classified topic -->%STOPINCLUDE% ---++ %TOPIC% form | *Name:*| *Type:* | *Size:* | *Values:* | *Tooltip message:* | *Attributes:* | Added: twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/ClassifiedTopicRenderIndexItem.txt =================================================================== --- twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/ClassifiedTopicRenderIndexItem.txt (rev 0) +++ twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/ClassifiedTopicRenderIndexItem.txt 2008-04-28 17:09:42 UTC (rev 16740) @@ -0,0 +1,58 @@ +%META:TOPICINFO{author="TWikiContributor" date="1206371854" format="1.1" reprev="1.1" version="$Rev$"}% +%META:TOPICPARENT{name="TopicFunction"}% +---+!! Function: %TOPIC% +%FORMFIELD{"Summary"}% + +%TOC{depth="2"}% + +---++ Documentation +%STARTSECTION{name="documentation" type="section"}% +This method is called by RenderCategory to display +a summary for an object listed within the Category topic. + +---+++++ Parameters + * OBJECT + +%ENDSECTION{name="documentation" type="section"}% + +---++ Implementation +<verbatim> +%STARTINCLUDE%<!-- ClassifiedTopicRenderIndexItem --> +%~~ DBQUERY{topic="%OBJECT%" +~~~ format="<div class='clsIndexItem'>[[$web.$topic][$expand(TopicTitle or topic)]] +*~~ $percntREDDOT{$web.$topic}$percnt +~~~ <div class='clsTopicInfo'>$expand(Summary) +~~~ <div class='clsAuthorDateInfo'>last modified $formatTime(info.date) +~~~ by $percntSPACEOUT{$expand(info.author)}$percnt</div> +~~~ </div></div> +~~~ " +~~~ }% +<!-- //ClassifiedTopicRenderIndexItem -->%STOPINCLUDE% +</verbatim> + +<!-- interrupt glue --> + +---++ Test +<div class="alt"> +%DBCALL{"%TOPIC%"}% +</div> + +%DBCALL{"Applications.RenderFunctionCallers"}% + +---++ Copyright +<div style="text-align:justify;margin:1em;"> +© 2008 Michael Daum in...@mi... + +%DBCALL{"Applications.GnuGeneralPublicLicense" section="notice"}% +</div> +<!-- + * Set DEPENDENCIES = TopicFunction +--> + + + +%META:FORM{name="Applications.ApplicationTopic"}% +%META:FIELD{name="TopicType" attributes="" title="TopicType" value="DocuTopic, TopicFunction"}% +%META:FIELD{name="TopicTitle" attributes="" title="<nop>TopicTitle" value=""}% +%META:FIELD{name="Summary" attributes="" title="Summary" value="Render a summary for a ClassifiedTopic in a category index"}% +%META:FIELD{name="TWikiApplication" attributes="" title="TWikiApplication" value="ClassificationApp"}% Modified: twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/RenderCategory.txt =================================================================== --- twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/RenderCategory.txt 2008-04-28 16:58:56 UTC (rev 16739) +++ twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/RenderCategory.txt 2008-04-28 17:09:42 UTC (rev 16740) @@ -1,4 +1,4 @@ -%META:TOPICINFO{author="TWikiContributor" date="1198969439" format="1.1" reprev="1.35" version="$Rev$"}% +%META:TOPICINFO{author="TWikiContributor" date="1206372853" format="1.1" reprev="1.36" version="$Rev$"}% %META:TOPICPARENT{name="TopicFunction"}% ---+!! Function: %TOPIC% %FORMFIELD{"Summary"}% @@ -26,10 +26,10 @@ ~~~ top="%BASETOPIC%" ~~~ exclude="%BASETOPIC%" ~~~ depth="2" -~~~ format="$name;$web;$title;$summary;$leafs$n" +~~~ format="$title;$topic;$web;$leafs$n" ~~~ }% *~~ " -~~~ cols="3" +~~~ cols="%IFDEFINED{"%CLASSIFICATIONPLUGIN_NRCOLS%" then="$test" else="3"}%" ~~~ header="<h2>Sub categories</h2> ~~~ There ~~~ $percntIFDEFINED{\"$count\" as=\"1\" @@ -37,12 +37,8 @@ ~~~ else=\" are $count subcategories \" ~~~ }$percnt in this category." ~~~ split="\n" -~~~ pattern="(.*);(.*);(.*);(.*);(.*)" -~~~ format="[[$2.$1][$3]] -~~~ $percntIFDEFINED{\"$5\" then=\" ($5)\"}$percnt -*~~ $percntREDDOT{$2.$1}$percnt -~~~ <div class='clsTopicInfo'>$4</div> -~~~ " +~~~ pattern="(.*);(.*);(.*);(.*)" +~~~ format="$percntDBCALL{\"$3.$2->RenderIndexItem\" LEAFS=\"$4\"}$percnt" ~~~ }% %~~ MAKEINDEX{" @@ -51,11 +47,11 @@ ~~~ "!(TopicType=~'\bCategory\b') AND ('%BASETOPIC%' DISTANCE topic) = 0" ~~~ web="%BASEWEB%" ~~~ hidenull="on" -~~~ format="$topic;$web;$expand(Summary and ',<br />');$expand(info.author);$formatTime(info.date);$expand(TopicTitle or topic)" +~~~ format="$expand(TopicTitle or topic);$topic;$web" ~~~ separator="$n" ~~~ }% *~~ " -~~~ cols="3" +~~~ cols="%IFDEFINED{"%CLASSIFICATIONPLUGIN_NRCOLS%" then="$test" else="3"}%" ~~~ header="<h2>Topics in $percntTOPICTITLE$percnt</h2> ~~~ There ~~~ $percntIFDEFINED{\"$count\" as=\"1\" @@ -63,11 +59,8 @@ ~~~ else=\" are $count topics \" ~~~ }$percnt in this category." ~~~ split="\n" -~~~ pattern="(.*);(.*);(.*);(.*);(.*);(.*)" -~~~ format="[[$2.$1][$6]] -*~~ $percntREDDOT{$2.$1}$percnt -~~~ <div class='clsTopicInfo'>$3 last modified $5 by $percntSPACEOUT{$4}$percnt</div> -~~~ " +~~~ pattern="(.*);(.*);(.*)" +~~~ format="$percntDBCALL{\"$3.$2->RenderIndexItem\"}$percnt" ~~~ }% --- Modified: twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/RenderEditTagCloud.txt =================================================================== --- twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/RenderEditTagCloud.txt 2008-04-28 16:58:56 UTC (rev 16739) +++ twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/RenderEditTagCloud.txt 2008-04-28 17:09:42 UTC (rev 16740) @@ -56,7 +56,7 @@ ~~~ }$percnt" ~~~ buckets="200" ~~~ offset="100" -~~~ separator=" " +~~~ separator="$n" ~~~ warn="off" ~~~ group=" <strong>$group</strong> " ~~~ format="<span Modified: twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/TaggedTopic.txt =================================================================== --- twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/TaggedTopic.txt 2008-04-28 16:58:56 UTC (rev 16739) +++ twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/TaggedTopic.txt 2008-04-28 17:09:42 UTC (rev 16740) @@ -14,7 +14,7 @@ %ENDSECTION{name="documentation" type="section"}% ---++ Installation -%DBCALL{"Applications.RenderTopicInstaller" TEXT="Install '%TOPIC%' TopicType in" TYPE="TopicType" PARENT="TopicType"}% +%DBCALL{"Applications.RenderTopicInstaller" TEXT="Install '%TOPIC%' TopicType in" TYPE="TopicType, TopicStub" PARENT="TopicType"}% %STARTINCLUDE% ---+++ Create a new topic Modified: twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/TestCategorizedTopic1.txt =================================================================== --- twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/TestCategorizedTopic1.txt 2008-04-28 16:58:56 UTC (rev 16739) +++ twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/TestCategorizedTopic1.txt 2008-04-28 17:09:42 UTC (rev 16740) @@ -1,9 +1,10 @@ -%META:TOPICINFO{author="TWikiContributor" date="1182157189" format="1.1" version="$Rev$"}% -%META:TOPICPARENT{name="CategorizedTopic"}% +%META:TOPICINFO{author="TWikiContributor" date="1204297462" format="1.1" version="$Rev$"}% +%META:TOPICPARENT{name="TestCategory3"}% -- Main.MichaelDaum - 27 Oct 2006 %META:FORM{name="Applications.ClassificationApp.CategorizedTopic"}% %META:FIELD{name="TopicType" attributes="" title="TopicType" value="CategorizedTopic"}% -%META:FIELD{name="Summary" attributes="" title="Summary" value="This is a test topic with a <nop> in it"}% -%META:FIELD{name="Category" attributes="" title="Category" value="TestCategory3, TestCategory4, TestCategory8"}% +%META:FIELD{name="TopicTitle" attributes="" title="<nop>TopicTitle" value=""}% +%META:FIELD{name="Summary" attributes="" title="Summary" value="This is a test topic with a nop in it"}% +%META:FIELD{name="Category" attributes="" title="Category" value="TestCategory3, TestCategory8, TestCategory4"}% %META:PREFERENCE{name="VIEW_TEMPLATE" title="VIEW_TEMPLATE" type="Set" value="Applications.ClassificationApp.CategorizedTopicView"}% Modified: twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/TestTopic0.txt =================================================================== --- twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/TestTopic0.txt 2008-04-28 16:58:56 UTC (rev 16739) +++ twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/TestTopic0.txt 2008-04-28 17:09:42 UTC (rev 16740) @@ -1,16 +1,17 @@ -%META:TOPICINFO{author="TWikiContributor" date="1196775404" format="1.1" version="$Rev$"}% -%META:TOPICPARENT{name="TestCategory13"}% +%META:TOPICINFO{author="TWikiContributor" date="1204297357" format="1.1" reprev="1.9" version="$Rev$"}% +%META:TOPICPARENT{name="TestCategory11"}% <!-- * Set VIEW_TEMPLATE = Applications.ClassificationApp.ClassifiedTopicView --> - * DISTANCE('TOP','BOTTOM') = %DISTANCE{from="TOP" to="BOTTOM"}% + * DISTANCE{from="TopCategory" to="BottomCategory" format="min=$min, max=$max"} = %DISTANCE{from="TopCategory" to="BottomCategory" format="min=$min, max=$max"}% * DISTANCE{from="%TOPIC%" to="TestCategory13"}: %DISTANCE{from="%TOPIC%" to="TestCategory13"}% * DISTANCE{from="%TOPIC%" to="TestCategory3"}: %DISTANCE{from="%TOPIC%" to="TestCategory3"}% %META:FORM{name="Applications.ClassificationApp.ClassifiedTopic"}% %META:FIELD{name="TopicType" attributes="" title="TopicType" value="ClassifiedTopic, TaggedTopic, CategorizedTopic"}% +%META:FIELD{name="TopicTitle" attributes="" title="<nop>TopicTitle" value=""}% %META:FIELD{name="Summary" attributes="" title="Summary" value="foo bar"}% %META:FIELD{name="Tag" attributes="" title="Tag" value="client, fat, foo, sql"}% -%META:FIELD{name="Category" attributes="" title="Category" value="TestCategory13"}% +%META:FIELD{name="Category" attributes="" title="Category" value="TestCategory13, TestCategory11"}% Modified: twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/WebClassSearch.txt =================================================================== --- twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/WebClassSearch.txt 2008-04-28 16:58:56 UTC (rev 16739) +++ twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/WebClassSearch.txt 2008-04-28 17:09:42 UTC (rev 16740) @@ -6,7 +6,7 @@ See also: RenderWebClassSearch ---++ Installation -%DBCALL{"Applications.RenderTopicInstaller"}% +%DBCALL{"Applications.RenderTopicInstaller" TYPE="TopicStub"}% ---++ Implementation %STARTINCLUDE%<!-- --> Modified: twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/WebHome.txt =================================================================== --- twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/WebHome.txt 2008-04-28 16:58:56 UTC (rev 16739) +++ twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/WebHome.txt 2008-04-28 17:09:42 UTC (rev 16740) @@ -1,4 +1,4 @@ -%META:TOPICINFO{author="TWikiContributor" date="1184006605" format="1.1" version="$Rev$"}% +%META:TOPICINFO{author="TWikiContributor" date="1206370768" format="1.1" reprev="1.4" version="$Rev$"}% ---+!! Welcome to the %WEB% web The ClassificationApp offers two things: traditional content categorization as well as folksomony using @@ -6,46 +6,35 @@ <noautolink> -%~~ DBQUERY{"TopicType=~'\bAuthorTool\b'" +%~~ DBQUERY{"TopicType=~'\bAuthorTool\b' AND TWikiApplication='ClassificationApp' " ~~~ hidenull="on" -~~~ header="---++ Author Tools$n" +~~~ header="---++ [[AuthorTools]]$n" ~~~ format=" * [[$web.$topic][$topic]]: $formfield(Summary)" ~~~ }% - -%~~ DBQUERY{"TopicType=~'\bDevelopmentTool\b'" +%~~ DBQUERY{"TopicType=~'\bTopicType\b' AND TWikiApplication='ClassificationApp'" ~~~ hidenull="on" -~~~ header="---++ Development Tools$n" +~~~ header="---++ [[TopicTypes]]$n" ~~~ format=" * [[$web.$topic][$topic]]: $formfield(Summary)" ~~~ }% - -%~~ DBQUERY{"TopicType=~'\bAdminTool\b'" +%~~ DBQUERY{"TopicType=~'\bTopicFunction\b' AND TWikiApplication='ClassificationApp'" ~~~ hidenull="on" -~~~ header="---++ Admin Tools$n" +~~~ header="---++ [[TopicFunctions]]$n" ~~~ format=" * [[$web.$topic][$topic]]: $formfield(Summary)" ~~~ }% +%~~ DBQUERY{"TopicType=~'\bTopicView\b' AND TWikiApplication='ClassificationApp'" +~~~ hidenull="on" +~~~ header="---++ [[TopicViews]]$n" +~~~ format=" * [[$web.$topic][$topic]]: $formfield(Summary)" +~~~ }% +%~~ DBQUERY{"TopicType=~'\bTopicTemplate\b' AND TWikiApplication='ClassificationApp'" +~~~ hidenull="on" +~~~ header="---++ [[TopicTemplates]]$n" +~~~ format=" * [[$web.$topic][$topic]]: $formfield(Summary)" +~~~ }% + </noautolink> -<!-- -%!TOC% -%!DBCALL{"Applications.RenderTopicTypeCloud" TYPE="TWikiApplication"}% -%!DBCALL{"Applications.RenderTopicTypeCloud" TYPE="TopicType"}% -%!DBCALL{"Applications.RenderTopicTypeCloud" TYPE="TWikiForm"}% -%!DBCALL{"Applications.RenderTopicTypeCloud" - TYPE="TopicFunction" - FILTER="\bRender" - FORMAT="[[%BASEWEB%.Render$term][Render$term]]" -}% -%!DBCALL{"Applications.RenderTopicTypeCloud" TYPE="TopicView"}% -%!DBCALL{"Applications.RenderTopicTypeCloud" TYPE="TopicTemplate"}% ---> -<style type="text/css"> -.twbGroup { - font-size:1.1em; - font-weight:bold; -} -</style> - <!-- * Set VIEW_TEMPLATE = Applications.HiddenFormView --> @@ -53,5 +42,6 @@ %META:FORM{name="Applications.ApplicationTopic"}% %META:FIELD{name="TopicType" attributes="" title="TopicType" value="FrontPage"}% +%META:FIELD{name="TopicTitle" attributes="" title="<nop>TopicTitle" value=""}% %META:FIELD{name="Summary" attributes="" title="Summary" value="%25SITEMAPWHAT%25"}% %META:FIELD{name="TWikiApplication" attributes="" title="TWikiApplication" value="TWikiWorkbench"}% Modified: twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/WebPreferences.txt =================================================================== --- twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/WebPreferences.txt 2008-04-28 16:58:56 UTC (rev 16739) +++ twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/WebPreferences.txt 2008-04-28 17:09:42 UTC (rev 16740) @@ -1,8 +1,7 @@ -%META:TOPICINFO{author="TWikiContributor" date="1195762468" format="1.1" version="$Rev$"}% +%META:TOPICINFO{author="TWikiContributor" date="1204299508" format="1.1" reprev="1.7" version="$Rev$"}% ---+!! <nop>%WEB% Web Preferences %TOC% -<br clear="all" /> ---+++ Naming Text to be displayed on the sitemap and in the headerbar describing this web @@ -27,7 +26,7 @@ * Set ALLOWTOPICCHANGE = %MAINWEB%.TWikiAdminGroup ---+++ Application Pointer -<nop>DBCachePlugin settings registering the WebDB +<nop>DBCachePlugin settings registering the !WebDB implementation for this web (don't change): * Set WEBDB = TWiki::Plugins::DBCachePlugin::WebDB * Set CLASSIFICATIONPLUGIN_AUTOREPARENT = 1 @@ -53,5 +52,6 @@ %META:FORM{name="Applications.ApplicationTopic"}% %META:FIELD{name="TopicType" attributes="" title="TopicType" value="AdminTool"}% +%META:FIELD{name="TopicTitle" attributes="" title="<nop>TopicTitle" value=""}% %META:FIELD{name="Summary" attributes="" title="Summary" value="Preferences of the <nop>%25WEB%25 web"}% -%META:FIELD{name="TWikiApplication" attributes="" title="TWikiApplication" value="TWikiWorkbench"}% +%META:FIELD{name="TWikiApplication" attributes="" title="TWikiApplication" value="ClassificationApp"}% Modified: twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/WebStatistics.txt =================================================================== --- twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/WebStatistics.txt 2008-04-28 16:58:56 UTC (rev 16739) +++ twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/WebStatistics.txt 2008-04-28 17:09:42 UTC (rev 16740) @@ -1,9 +1,11 @@ -%META:TOPICINFO{author="TWikiContributor" date="1202853666" format="1.1" reprev="1.255" version="$Rev$"}% +%META:TOPICINFO{author="TWikiContributor" date="1207515695" format="1.1" reprev="1.309" version="$Rev$"}% %META:TOPICPARENT{name="WebHome"}% ---++ Statistics for <nop>%BASEWEB% Web | *Month:* | *Topic <br /> views:* | *Topic <br /> saves:* | *File <br /> uploads:* | *Most popular <br /> topic views:* | *Top contributors for <br /> topic save and uploads:* | | <!--statDate--> | <!--statViews--> | <!--statSaves--> | <!--statUploads--> | <!--statTopViews--> | <!--statTopContributors--> | +| Apr 2008 | 0 | 0 | 0 | | | +| Mar 2008 | 52 | 6 | 0 | 15 [[Category]]<br /> 7 [[RenderCategory]]<br /> 6 [[WebHome]]<br /> 6 [[TopicType]]<br /> 3 [[ClassifiedTopic]]<br /> 3 [[WebTagCloud]]<br /> 3 [[RenderClassifiedTopicView]]<br /> 2 [[NatSkinClassifiedTopicViewTemplate]]<br /> 2 [[TaggedTopic]]<br /> 1 [[WebClassSearch]]<br /> 1 [[CategorizedTopic]] | 6 Main.MichaelDaum | | Feb 2008 | 0 | 0 | 0 | | | | Jan 2008 | 0 | 0 | 0 | | | Modified: twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/WebTagCloud.txt =================================================================== --- twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/WebTagCloud.txt 2008-04-28 16:58:56 UTC (rev 16739) +++ twiki/trunk/ClassificationPlugin/data/Applications/ClassificationApp/WebTagCloud.txt 2008-04-28 17:09:42 UTC (rev 16740) @@ -5,7 +5,7 @@ See also: RenderWebTagCloud ---++ Installation -%DBCALL{"Applications.RenderTopicInstaller"}% +%DBCALL{"Applications.RenderTopicInstaller" TYPE="TopicStub"}% ---++ Implementation %STARTINCLUDE%<!-- --> Modified: twiki/trunk/ClassificationPlugin/lib/TWiki/Plugins/ClassificationPlugin/Core.pm =================================================================== --- twiki/trunk/ClassificationPlugin/lib/TWiki/Plugins/ClassificationPlugin/Core.pm 2008-04-28 16:58:56 UTC (rev 16739) +++ twiki/trunk/ClassificationPlugin/lib/TWiki/Plugins/ClassificationPlugin/Core.pm 2008-04-28 17:09:42 UTC (rev 16740) @@ -15,9 +15,6 @@ package TWiki::Plugins::ClassificationPlugin::Core; use strict; -use TWiki::Plugins::DBCachePlugin::Core; -use TWiki::Contrib::DBCacheContrib::Search; -use TWiki::Plugins::ClassificationPlugin::Hierarchy; use vars qw(%hierarchies $baseWeb $baseTopic); @@ -32,7 +29,7 @@ sub init { ($baseWeb, $baseTopic) = @_; - + require TWiki::Contrib::DBCacheContrib::Search; TWiki::Contrib::DBCacheContrib::Search::addOperator( name=>'SUBSUMES', prec=>4, @@ -325,8 +322,10 @@ #writeDebug("called handleISA()"); my $thisWeb = $params->{web} || $baseWeb; my $thisTopic = $params->{_DEFAULT} || $params->{topic} || $baseTopic; - my $theCategory = $params->{cat} || ''; + my $theCategory = $params->{cat} || 'TopCategpory'; + return 1 if $theCategory =~ /^TOP|TopCategory$/o; + return 0 if $theCategory =~ /^BOTTOM|BottomCategory$/o; return 0 unless $theCategory; ($thisWeb, $thisTopic) = @@ -519,6 +518,7 @@ my $theFooter = $params->{footer} || ''; my $thisWeb = $params->{web} || $baseWeb; my $thisTopic = $params->{_DEFAULT} || $params->{topic} || $baseTopic; + my $theSubsumes = $params->{subsumes} || ''; $theSep = ', ' unless defined $theSep; @@ -528,10 +528,16 @@ my $hierarchy = getHierarchy($thisWeb); return '' unless $hierarchy; + $theSubsumes =~ s/^\s+//go; + $theSubsumes =~ s/\s+$//go; + my $subsumesCat = $hierarchy->getCategory($theSubsumes); + my $categories; - $categories = $hierarchy->getCategoriesOfTopic($thisTopic) - unless defined $theCat; - $categories->{$theCat} = 1 if defined $theCat; + if ($theCat) { # cats mode + $categories->{$theCat} = 1; + } else { # dogs mode + $categories = $hierarchy->getCategoriesOfTopic($thisTopic); + } my @categories = keys %$categories; #@categories = grep (!/^(TopCategory|BottomCategory)$/, @categories); @@ -544,15 +550,35 @@ next; } my $category = $hierarchy->getCategory($catName); + + # skip catinfo from another branch of the hierarchy + next if $subsumesCat && !$hierarchy->subsumes($subsumesCat, $category); + my $line = $theFormat; my $parents = ''; - if ($line =~ /\$parents/) { + my $parentsName = ''; + my $parentsTitle = ''; + if ($line =~ /\$parents?\b/) { my @links = (); foreach my $parent ($category->getParents()) { push @links, "[[$thisWeb.$parent->{name}][$parent->{title}]]"; } $parents = join(', ', @links); } + if ($line =~ /\$parents?name/) { + my @names = (); + foreach my $parent ($category->getParents()) { + push @names, $parent->{name}; + } + $parentsName = join(', ', @names); + } + if ($line =~ /\$parents?title/) { + my @titles = (); + foreach my $parent ($category->getParents()) { + push @titles, $parent->{title}; + } + $parentsTitle = join(', ', @titles); + } my $isCyclic = 0; $isCyclic = $category->isCyclic() if $theFormat =~ /\$cyclic/; my $title = $category->{title} || $catName; @@ -565,7 +591,9 @@ $line =~ s/\$name/$catName/g; $line =~ s/\$title/$title/g; $line =~ s/\$summary/$summary/g; - $line =~ s/\$parents/$parents/g; + $line =~ s/\$parents?name/$parentsName/g; + $line =~ s/\$parents?title/$parentsTitle/g; + $line =~ s/\$parents?/$parents/g; $line =~ s/\$cyclic/$isCyclic/g; push @result, $line; } @@ -596,6 +624,7 @@ TWiki::Func::normalizeWebTopicName($thisWeb, $thisTopic); # get tags + require TWiki::Plugins::DBCachePlugin::Core; my $db = TWiki::Plugins::DBCachePlugin::Core::getDB($thisWeb); return '' unless $db; my $topicObj = $db->fastget($thisTopic); @@ -670,17 +699,17 @@ } # set the new parent topic - $meta->remove('TOPICPARENT'); if (@allCats) { @allCats = sort @allCats; my $firstCat = shift @allCats; # TODO: check if the firstCat exists and only then set the parent # don't autoset to HomeTopic if TopCategory $firstCat = $TWiki::cfg{HomeTopic} if $firstCat eq 'TopCategory'; + $meta->remove('TOPICPARENT'); $meta->putKeyed('TOPICPARENT', {name=>$firstCat}); } else { - $meta->putKeyed('TOPICPARENT', {name=>''}); + #$meta->putKeyed('TOPICPARENT', {name=>''}); } } @@ -759,6 +788,7 @@ sub getTopicTypes { my ($web, $topic) = @_; + require TWiki::Plugins::DBCachePlugin::Core; my $db = TWiki::Plugins::DBCachePlugin::Core::getDB($web); return undef unless $db; @@ -787,6 +817,7 @@ my $web = shift; unless (defined $hierarchies{$web}) { + require TWiki::Plugins::ClassificationPlugin::Hierarchy; $hierarchies{$web} = new TWiki::Plugins::ClassificationPlugin::Hierarchy($web); } Modified: twiki/trunk/ClassificationPlugin/lib/TWiki/Plugins/ClassificationPlugin/Hierarchy.pm =================================================================== --- twiki/trunk/ClassificationPlugin/lib/TWiki/Plugins/ClassificationPlugin/Hierarchy.pm 2008-04-28 16:58:56 UTC (rev 16739) +++ twiki/trunk/ClassificationPlugin/lib/TWiki/Plugins/ClassificationPlugin/Hierarchy.pm 2008-04-28 17:09:42 UTC (rev 16740) @@ -19,7 +19,7 @@ use TWiki::Plugins::ClassificationPlugin::Category; use Storable; -use constant OBJECTVERSION => 0.42; +use constant OBJECTVERSION => 0.43; use constant DEBUG => 0; # toggle me ############################################################################### @@ -63,10 +63,10 @@ } if ($this && $this->{_version} == OBJECTVERSION) { - writeDebug("restored hierarchy object (v$this->{_version}) from $cacheFile"); + #writeDebug("restored hierarchy object (v$this->{_version}) from $cacheFile"); return $this; } else { - writeDebug("creating new object"); + #writeDebug("creating new object"); } $this = { @@ -99,7 +99,7 @@ } if ($gotUpdate) { - writeDebug("saving hierarchy"); + #writeDebug("saving hierarchy"); my $cacheFile = getCacheFile($this->{web}); Storable::lock_store($this, $cacheFile); } @@ -111,7 +111,7 @@ my $this = shift; my $cacheFile = getCacheFile($this->{web}); - writeDebug("invalidating hierarchy in web $this->{web}"); + #writeDebug("invalidating hierarchy in web $this->{web}"); unlink $cacheFile; } @@ -172,10 +172,10 @@ } else { # process all categories of this topic and add the topic to the category - writeDebug("found categorized topic $topicName"); + #writeDebug("found categorized topic $topicName"); if ($cats) { foreach my $name (keys %$cats) { - writeDebug("adding it to category $name"); + #writeDebug("adding it to category $name"); my $cat = $this->getCategory($name); $cat = $this->createCategory($name) unless $cat; $cat->addTopic($topicName); @@ -186,7 +186,7 @@ } } - writeDebug("checking for default categories"); + #writeDebug("checking for default categories"); $this->createCategory('TopCategory', title=>'TOP') unless defined $this->getCategory('TopCategory'); ; # every hierarchy has one top node @@ -198,8 +198,9 @@ $cat->init(); } - # compute distances - $this->computeDistance(); + # reset distances, delay computeDistance til we need it + undef $this->{_distance}; + $this->{gotUpdate} = 1; if (0) { foreach my $cat ($this->getCategories()) { @@ -219,7 +220,9 @@ my ($this, $distance) = @_; - $distance ||= $this->{_distance}; + unless ($distance) { + $distance = $this->{_distance} || $this->computeDistance(); + } foreach my $catName1 (sort $this->getCategoryNames()) { my $cat1 = $this->{categories}{$catName1}; @@ -230,7 +233,7 @@ my $distance = $$distance[$catId1][$catId2]; next unless $distance; my ($min, $max) = @$distance; - writeDebug("distance($catName1/$catId1, $catName2/$catId2) = $min,$max"); + #writeDebug("distance($catName1/$catId1, $catName2/$catId2) = $min,$max"); } } } @@ -241,17 +244,16 @@ sub computeDistance { my $this = shift; - writeDebug("start computeDistance"); + writeDebug("called computeDistance()"); # init matrix my @distance; my $bottomCategory = $this->getCategory('BottomCategory'); my $bottomId = $bottomCategory->{id}; - my %seen = (); + for my $cat ($this->getCategories()) { my $id = $cat->{id}; - $seen{$id} = $cat->{name}; @{$distance[$id][$id]} = (0,0); # diagonal my @children = $cat->getChildren(); @@ -261,7 +263,7 @@ } } else { unless ($id == $bottomId) { # bottom - @{$distance[$id][$bottomId]} = (1, 1); # leave nodes + @{$distance[$id][$bottomId]} = (1, 1); # leaf nodes } } } @@ -269,8 +271,7 @@ # floyd-warshall algorithm for transitive closure # used to computing min- and max distances, reused in # subsumption and partof relations - my $maxId = $this->{idCounter}; - #writeDebug("maxId=$maxId"); + my $maxId = $this->{idCounter}-1; foreach my $catIId (0..$maxId) { foreach my $catJId (0..$maxId) { @@ -279,7 +280,7 @@ my $distIJ = $distance[$catIId][$catJId]; foreach my $catKId (0..$maxId) { - next if $catKId == $catIId; # skip current row + next if $catKId == $catIId || $catKId == $catJId; # skip current row my $distIK = $distance[$catIId][$catKId]; next unless $distIK; @@ -292,6 +293,7 @@ if (!$distIJ) { @$distIJ = ($minSum, $maxSum); + $distance[$catIId][$catJId] = $distIJ; } else { $$distIJ[0] = $minSum if $$distIJ[0] > $minSum; @@ -317,7 +319,9 @@ $this->{_distance} = \@distance; $this->{gotUpdate} = 1; - writeDebug("stop computeDistance"); + #writeDebug("done computeDistance"); + + return \@distance; } ################################################################################ @@ -373,10 +377,11 @@ } # gather the min and max distances between the two category sets + my $distance = $this->{_distance} || $this->computeDistance(); my ($min, $max); foreach my $id1 (values %catSet1) { foreach my $id2 (values %catSet2) { - my $dist = $this->{_distance}[$id1][$id2]; + my $dist = $$distance[$id1][$id2]; next unless $dist; $min = abs($dist->[0]) if !defined($min) || abs($min) > abs($dist->[0]); $max = abs($dist->[1]) if !defined($max) || abs($max) < abs($dist->[1]); @@ -419,6 +424,7 @@ $id2 = $catObj->{id}; } + $this->computeDistance() unless $this->{_distance}; return $this->{_distance}[$id1][$id2]; } @@ -426,7 +432,7 @@ sub computeCoocurrence { my $this = shift; - writeDebug("called computeCooccurrence()"); + #writeDebug("called computeCooccurrence()"); my $coocc = {}; my $db = TWiki::Plugins::DBCachePlugin::Core::getDB($this->{web}); @@ -483,7 +489,7 @@ $this->{_coOccurrence} = $coocc; $this->{gotUpdate} = 1; - writeDebug("done computeCooccurrence()"); + #writeDebug("done computeCooccurrence()"); return $coocc; } @@ -896,7 +902,6 @@ #writeDebug("result=$result"); #writeDebug("done toHTML"); - return $header.$result.$footer; } Modified: twiki/trunk/ClassificationPlugin/lib/TWiki/Plugins/ClassificationPlugin/MANIFEST =================================================================== --- twiki/trunk/ClassificationPlugin/lib/TWiki/Plugins/ClassificationPlugin/MANIFEST 2008-04-28 16:58:56 UTC (rev 16739) +++ twiki/trunk/ClassificationPlugin/lib/TWiki/Plugins/ClassificationPlugin/MANIFEST 2008-04-28 17:09:42 UTC (rev 16740) @@ -4,10 +4,12 @@ data/Applications/ClassificationApp/ApplicationTopic.txt 0644 data/Applications/ClassificationApp/AuthorTool.txt 0644 data/Applications/ClassificationApp/CascadingStyleSheet.txt 0644 +data/Applications/ClassificationApp/CategorizedTopicRenderIndexItem.txt 0644 data/Applications/ClassificationApp/CategorizedTopicTemplate.txt 0644 data/Applications/ClassificationApp/CategorizedTopicViewTemplate.txt 0644 data/Applications/ClassificationApp/CategorizedTopic.txt 0644 data/Applications/ClassificationApp/CategoryBrowser.txt 0644 +data/Applications/ClassificationApp/CategoryRenderIndexItem.txt 0644 data/Applications/ClassificationApp/CategoryTemplate.txt 0644 data/Applications/ClassificationApp/CategoryViewTemplate.txt 0644 data/Applications/ClassificationApp/Category.txt 0644 @@ -111,11 +113,10 @@ lib/TWiki/Plugins/ClassificationPlugin/Access.pm 0644 lib/TWiki/Plugins/ClassificationPlugin/Category.pm 0644 lib/TWiki/Plugins/ClassificationPlugin/Core.pm 0644 -lib/TWiki/Plugins/ClassificationPlugin/DEPENDENCIES 0644 lib/TWiki/Plugins/ClassificationPlugin/Hierarchy.pm 0644 -lib/TWiki/Plugins/ClassificationPlugin/MANIFEST 0644 lib/TWiki/Plugins/ClassificationPlugin/build.pl 0644 lib/TWiki/Plugins/ClassificationPlugin.pm 0644 +pub/TWiki/ClassificationPlugin/FormDotPm-4_1_2.patch 0644 pub/TWiki/ClassificationPlugin/aqua-pill-18.gif 0644 pub/TWiki/ClassificationPlugin/classification.js 0644 pub/TWiki/ClassificationPlugin/jquery.tagselector.js 0644 Added: twiki/trunk/ClassificationPlugin/pub/TWiki/ClassificationPlugin/FormDotPm-4_1_2.patch =================================================================== --- twiki/trunk/ClassificationPlugin/pub/TWiki/ClassificationPlugin/FormDotPm-4_1_2.patch (rev 0) +++ twiki/trunk/ClassificationPlugin/pub/TWiki/ClassificationPlugin/FormDotPm-4_1_2.patch 2008-04-28 17:09:42 UTC (rev 16740) @@ -0,0 +1,56 @@ +Index: Form.pm +=================================================================== +--- Form.pm (revision 13543) ++++ Form.pm (working copy) +@@ -763,6 +763,35 @@ + } + } + ++ # category values ++ if ($fieldDef->{type} eq 'cat') { ++ my @values = $query->param( $param ); ++ if ($#values>=0) { ++ if ($#values==0) { ++ @values = split /\,|%2C/, $values[0]; ++ } ++ my %vset = (); ++ foreach my $val (@values) { ++ $val =~ s/^\s*//o; ++ $val =~ s/\s*$//o; ++ $vset{$val} = (defined $val && $val =~ /\S/); # skip empty values ++ } ++ ++ my $baseWeb = $this->{session}->{SESSION_TAGS}{BASEWEB}; ++ my $params = new TWiki::Attrs($fieldDef->{value}); ++ my $web = $params->{web} || $baseWeb; ++ ++ require TWiki::Plugins::ClassificationPlugin; ++ my $hierarchy = TWiki::Plugins::ClassificationPlugin::getHierarchy($web); ++ my @cats = keys %{$hierarchy->{categories}}; ++ my @newValues = (); ++ foreach my $cat (@cats) { ++ push @newValues, $cat if $vset{$cat}; ++ } ++ $value = join(", ", sort @newValues); ++ } ++ } ++ + my $preDef; + foreach my $item ( @old ) { + if( $item->{name} eq $fieldDef->{name} ) { +@@ -782,10 +811,14 @@ + if( defined( $value ) ) { + # NOTE: title and name are stored in the topic so that it can be + # viewed without reading in the form definition ++ my $title = $fieldDef->{title}; ++ if( $fieldDef->{definingTopic} ) { ++ $title = '[['.$fieldDef->{definingTopic}.']['.$title.']]'; ++ } + $def = + { + name => $fieldDef->{name}, +- title => $fieldDef->{title}, ++ title => $title, + value => $value, + attributes => $fieldDef->{attributes}, + }; Modified: twiki/trunk/ClassificationPlugin/pub/TWiki/ClassificationPlugin/jquery.tagselector.js =================================================================== --- twiki/trunk/ClassificationPlugin/pub/TWiki/ClassificationPlugin/jquery.tagselector.js 2008-04-28 16:58:56 UTC (rev 16739) +++ twiki/trunk/ClassificationPlugin/pub/TWiki/ClassificationPlugin/jquery.tagselector.js 2008-04-28 17:09:42 UTC (rev 16740) @@ -271,6 +271,7 @@ // add a tag to the selection ****************************************** function setTags(tags, doSort) { //writeDebug("called setTags("+tags+")"); + clearSelection(); var values; if (typeof(tags) == 'object') { @@ -278,8 +279,11 @@ } else { values = tags.split(/[, ]+/); } + if (!values.length) { + return; + } var filter = "#"+values.join(",#"); - //writeDebug("filter="+filter); + writeDebug("filter="+filter); $(filter, $tagCloud).addClass("current"); if (doSort) { values = values.sort(); @@ -312,7 +316,6 @@ }); initialTags = new Array(); - // tag cloud links $("a", $tagCloud).click(function() { this.blur(); @@ -321,6 +324,7 @@ var term = $(this).attr('id'); initialTags.push(term); }); + resetSelection(); } Modified: twiki/trunk/ClassificationPlugin/pub/TWiki/ClassificationPlugin/styles.css =================================================================== --- twiki/trunk/ClassificationPlugin/pub/TWiki/ClassificationPlugin/styles.css 2008-04-28 16:58:56 UTC (rev 16739) +++ twiki/trunk/ClassificationPlugin/pub/TWiki/ClassificationPlugin/styles.css 2008-04-28 17:09:42 UTC (rev 16740) @@ -128,3 +128,13 @@ .fltMakeIndexWrapper table td { width:40em; } + +/* pattern skin tweaks */ +.patternTopic h1 a, +.patternTopic h2 a, +.patternTopic h3 a, +.patternTopic h4 a, +.patternTopic h5 a, +.patternTopic h6 a { + text-decoration:none; +} |