You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@roller.apache.org by el...@apache.org on 2006/10/06 23:20:27 UTC
svn commit: r453774 [1/4] - in /incubator/roller/trunk: metadata/database/
metadata/database/hibernate/ src/org/apache/roller/business/hibernate/
src/org/apache/roller/model/ src/org/apache/roller/pojos/
src/org/apache/roller/ui/rendering/model/ src/or...
Author: eliast
Date: Fri Oct 6 14:20:26 2006
New Revision: 453774
URL: http://svn.apache.org/viewvc?view=rev&rev=453774
Log:
More on tagging...
- Renamed weblogtagagg back to weblogentrytagagg
- Added lastused column to weblogentrytagagg
- Updated 300-to-310 migration scripts
- Renamed WeblogTagAggregateData to WeblogEntryTagAggregateData
- Changed FeedModel to support tags in the request params
- Refactored getTags() and getPopularTags() in SiteModel,PageModel and WeblogEntryData
- Added scriptaculous for tag type-ahead in WeblogEdit.jsp
- Improved TagStatsServlet
- Removed Tags tab in frontpage theme, moved it to the sidebar only
- Renamed getTagSet() to getTags() and getTags() to getTagsAsString()
- Updated Velocity macros to the changes and simplified #showTagCloud macro
- Solved world hunger (mostly in Latin America, Africa is next) [jk]
Added:
incubator/roller/trunk/src/org/apache/roller/pojos/WeblogEntryTagAggregateData.java
- copied, changed from r453438, incubator/roller/trunk/src/org/apache/roller/pojos/WeblogTagAggregateData.java
incubator/roller/trunk/web/roller-ui/scripts/roller-autocomplete.js (with props)
incubator/roller/trunk/web/roller-ui/scripts/scriptaculous/
incubator/roller/trunk/web/roller-ui/scripts/scriptaculous/builder.js (with props)
incubator/roller/trunk/web/roller-ui/scripts/scriptaculous/controls.js (with props)
incubator/roller/trunk/web/roller-ui/scripts/scriptaculous/dragdrop.js (with props)
incubator/roller/trunk/web/roller-ui/scripts/scriptaculous/effects.js (with props)
incubator/roller/trunk/web/roller-ui/scripts/scriptaculous/prototype.js (with props)
incubator/roller/trunk/web/roller-ui/scripts/scriptaculous/scriptaculous.js (with props)
incubator/roller/trunk/web/roller-ui/scripts/scriptaculous/slider.js (with props)
Removed:
incubator/roller/trunk/src/org/apache/roller/pojos/WeblogTagAggregateData.java
incubator/roller/trunk/web/themes/frontpage/tags.vm
Modified:
incubator/roller/trunk/metadata/database/300-to-310-migration.vm
incubator/roller/trunk/metadata/database/createdb.vm
incubator/roller/trunk/metadata/database/hibernate/hibernate.cfg.xml
incubator/roller/trunk/src/org/apache/roller/business/hibernate/HibernateWeblogManagerImpl.java
incubator/roller/trunk/src/org/apache/roller/model/WeblogManager.java
incubator/roller/trunk/src/org/apache/roller/pojos/TagStat.java
incubator/roller/trunk/src/org/apache/roller/pojos/WeblogEntryData.java
incubator/roller/trunk/src/org/apache/roller/pojos/WebsiteData.java
incubator/roller/trunk/src/org/apache/roller/ui/rendering/model/FeedModel.java
incubator/roller/trunk/src/org/apache/roller/ui/rendering/model/PageModel.java
incubator/roller/trunk/src/org/apache/roller/ui/rendering/model/SiteModel.java
incubator/roller/trunk/src/org/apache/roller/ui/rendering/util/WeblogFeedRequest.java
incubator/roller/trunk/src/org/apache/roller/ui/rendering/util/WeblogPageRequest.java
incubator/roller/trunk/src/org/apache/roller/webservices/json/TagStatsServlet.java
incubator/roller/trunk/testdata/WEB-INF/classes/hibernate.cfg.xml
incubator/roller/trunk/tests/org/apache/roller/business/WeblogEntryTest.java
incubator/roller/trunk/web/WEB-INF/jsps/authoring/WeblogEdit.jsp
incubator/roller/trunk/web/WEB-INF/velocity/weblog.vm
incubator/roller/trunk/web/roller-ui/scripts/calendar.js
incubator/roller/trunk/web/roller-ui/styles/roller.css
incubator/roller/trunk/web/themes/frontpage/Weblog.vm
incubator/roller/trunk/web/themes/frontpage/_css.vm
incubator/roller/trunk/web/themes/frontpage/_entry.vm
incubator/roller/trunk/web/themes/frontpage/directory.vm
Modified: incubator/roller/trunk/metadata/database/300-to-310-migration.vm
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/metadata/database/300-to-310-migration.vm?view=diff&rev=453774&r1=453773&r2=453774
==============================================================================
--- incubator/roller/trunk/metadata/database/300-to-310-migration.vm (original)
+++ incubator/roller/trunk/metadata/database/300-to-310-migration.vm Fri Oct 6 14:20:26 2006
@@ -12,18 +12,22 @@
websiteid varchar(48) not null,
userid varchar(48) not null,
name varchar(255) not null,
- time $TIMESTAMP_SQL_TYPE not null
+ time $TIMESTAMP_SQL_TYPE not null
);
+
create index wet_entryid_idx on weblogentrytag( entryid );
create index wet_websiteid_idx on weblogentrytag( websiteid );
create index wet_userid_idx on weblogentrytag( userid );
create index wet_name_idx on weblogentrytag( name );
-create table weblogtagagg (
+create table weblogentrytagagg (
id varchar(48) not null primary key,
websiteid varchar(48) ,
name varchar(255) not null,
- count integer not null
+ count integer not null,
+ lastused $TIMESTAMP_SQL_TYPE not null
);
-create index weta_websiteid_idx on weblogtagagg( websiteid );
-create index weta_name_idx on weblogtagagg( name );
\ No newline at end of file
+
+create index weta_websiteid_idx on weblogentrytagagg( websiteid );
+create index weta_name_idx on weblogentrytagagg( name );
+create index weta_lastused_idx on weblogentrytagagg( lastused );
\ No newline at end of file
Modified: incubator/roller/trunk/metadata/database/createdb.vm
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/metadata/database/createdb.vm?view=diff&rev=453774&r1=453773&r2=453774
==============================================================================
--- incubator/roller/trunk/metadata/database/createdb.vm (original)
+++ incubator/roller/trunk/metadata/database/createdb.vm Fri Oct 6 14:20:26 2006
@@ -212,9 +212,9 @@
id varchar(48) not null primary key,
entryid varchar(48) not null,
websiteid varchar(48) not null,
- userid varchar(48) not null,
+ userid varchar(48) not null,
name varchar(255) not null,
- time $TIMESTAMP_SQL_TYPE not null
+ time $TIMESTAMP_SQL_TYPE not null
);
create index wet_entryid_idx on weblogentrytag( entryid );
@@ -222,15 +222,17 @@
create index wet_userid_idx on weblogentrytag( userid );
create index wet_name_idx on weblogentrytag( name );
-create table weblogtagagg (
+create table weblogentrytagagg (
id varchar(48) not null primary key,
websiteid varchar(48) ,
name varchar(255) not null,
- count integer not null
+ count integer not null,
+ lastused $TIMESTAMP_SQL_TYPE not null
);
-create index weta_websiteid_idx on weblogtagagg( websiteid );
-create index weta_name_idx on weblogtagagg( name );
+create index weta_websiteid_idx on weblogentrytagagg( websiteid );
+create index weta_name_idx on weblogentrytagagg( name );
+create index weta_lastused_idx on weblogentrytagagg( lastused );
create table newsfeed (
id varchar(48) not null primary key,
Modified: incubator/roller/trunk/metadata/database/hibernate/hibernate.cfg.xml
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/metadata/database/hibernate/hibernate.cfg.xml?view=diff&rev=453774&r1=453773&r2=453774
==============================================================================
--- incubator/roller/trunk/metadata/database/hibernate/hibernate.cfg.xml (original)
+++ incubator/roller/trunk/metadata/database/hibernate/hibernate.cfg.xml Fri Oct 6 14:20:26 2006
@@ -95,7 +95,7 @@
<mapping resource="org/apache/roller/pojos/WeblogEntryData.hbm.xml" />
<mapping resource="org/apache/roller/pojos/WeblogEntryTagData.hbm.xml" />
- <mapping resource="org/apache/roller/pojos/WeblogTagAggregateData.hbm.xml" />
+ <mapping resource="org/apache/roller/pojos/WeblogEntryTagAggregateData.hbm.xml" />
<mapping resource="org/apache/roller/pojos/EntryAttributeData.hbm.xml" />
<mapping resource="org/apache/roller/pojos/WeblogCategoryData.hbm.xml" />
<mapping resource="org/apache/roller/pojos/WeblogCategoryAssoc.hbm.xml" />
Modified: incubator/roller/trunk/src/org/apache/roller/business/hibernate/HibernateWeblogManagerImpl.java
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/src/org/apache/roller/business/hibernate/HibernateWeblogManagerImpl.java?view=diff&rev=453774&r1=453773&r2=453774
==============================================================================
--- incubator/roller/trunk/src/org/apache/roller/business/hibernate/HibernateWeblogManagerImpl.java (original)
+++ incubator/roller/trunk/src/org/apache/roller/business/hibernate/HibernateWeblogManagerImpl.java Fri Oct 6 14:20:26 2006
@@ -18,6 +18,7 @@
package org.apache.roller.business.hibernate;
+import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
@@ -47,7 +48,7 @@
import org.apache.roller.pojos.WeblogCategoryData;
import org.apache.roller.pojos.WeblogEntryData;
import org.apache.roller.pojos.WeblogEntryTagData;
-import org.apache.roller.pojos.WeblogTagAggregateData;
+import org.apache.roller.pojos.WeblogEntryTagAggregateData;
import org.apache.roller.pojos.WebsiteData;
import org.apache.roller.util.DateUtil;
import org.apache.roller.util.Utilities;
@@ -245,8 +246,8 @@
}
// remove tags aggregates
- if(entry.getTagSet() != null) {
- for(Iterator it = entry.getTagSet().iterator(); it.hasNext(); ) {
+ if(entry.getTags() != null) {
+ for(Iterator it = entry.getTags().iterator(); it.hasNext(); ) {
WeblogEntryTagData tag = (WeblogEntryTagData) it.next();
updateTagCount(tag.getName(), entry.getWebsite(), -1);
}
@@ -427,7 +428,7 @@
if (tags != null && tags.size() > 0) {
for(int i = 0; i < tags.size(); i++) {
- queryString.append(" and tagSet.name = ?");
+ queryString.append(" and tags.name = ?");
params.add(tags.get(i));
}
}
@@ -1176,30 +1177,104 @@
}
}
- public List getTags(WebsiteData website, String sortBy, String startsWith, int limit)
+ /* (non-Javadoc)
+ * @see org.apache.roller.model.WeblogManager#getPopularTags(org.apache.roller.pojos.WebsiteData, java.util.Date, int)
+ */
+ public List getPopularTags(WebsiteData website, Date startDate, int limit)
throws RollerException {
try {
List results = new ArrayList();
Session session = ((HibernatePersistenceStrategy) strategy)
.getSession();
+
+ ArrayList params = new ArrayList();
+ StringBuffer queryString = new StringBuffer();
+ queryString.append("select a.name, a.count ");
+ queryString.append("from WeblogEntryTagAggregateData a where ");
+ if (website != null) {
+ queryString.append("a.website.id = ? ");
+ params.add(website.getId());
+ } else {
+ queryString.append("a.website = NULL ");
+ }
+ if (startDate != null) {
+ queryString.append("and a.lastUsed >= ? ");
+ params.add(startDate);
+ }
+
+ queryString.append("order by a.count desc");
+
+ Query query = session.createQuery(queryString.toString());
+ if (limit > 0)
+ query.setMaxResults(limit);
+
+ // set params
+ for (int i = 0; i < params.size(); i++) {
+ query.setParameter(i, params.get(i));
+ }
+
+ double min = Integer.MAX_VALUE;
+ double max = Integer.MIN_VALUE;
+
+ for (Iterator iter = query.list().iterator(); iter.hasNext();) {
+ Object[] row = (Object[]) iter.next();
+ TagStat t = new TagStat();
+ t.setName((String) row[0]);
+ t.setCount(((Integer) row[1]).intValue());
+
+ min = Math.min(min, t.getCount());
+ max = Math.max(max, t.getCount());
+ results.add(t);
+ }
+ min = Math.log(1+min);
+ max = Math.log(1+max);
+
+ double range = Math.max(.01, max - min) * 1.0001;
+
+ for (Iterator iter = results.iterator(); iter.hasNext(); )
+ {
+ TagStat t = (TagStat) iter.next();
+ t.setIntensity((int) (1 + Math.floor(5 * (Math.log(1+t.getCount()) - min) / range)));
+ }
+
+ return results;
+
+ } catch (HibernateException e) {
+ throw new RollerException(e);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.roller.model.WeblogManager#getTags(org.apache.roller.pojos.WebsiteData,
+ * java.lang.String, java.lang.String, int)
+ */
+ public List getTags(WebsiteData website, String sortBy, String startsWith, int limit) throws RollerException {
+ try {
+ List results = new ArrayList();
+
+ Session session = ((HibernatePersistenceStrategy) strategy)
+ .getSession();
+
if (sortBy != null && sortBy.equals("count")) {
- sortBy = "a.count desc";
+ sortBy = "a.count desc";
} else {
sortBy = "a.name";
}
-
+
StringBuffer queryString = new StringBuffer();
queryString.append("select a.name, a.count ");
- queryString.append("from WeblogTagAggregateData a where ");
+ queryString.append("from WeblogEntryTagAggregateData a where ");
if (website != null)
queryString.append("a.website.id = '" + website.getId() + "' ");
else
queryString.append("a.website = NULL ");
if (startsWith != null && startsWith.length() > 0)
queryString.append("and a.name like '" + startsWith + "%' ");
-
+
queryString.append("order by " + sortBy);
Query query = session.createQuery(queryString.toString());
@@ -1222,6 +1297,7 @@
}
+
public void updateTagCount(String name, WebsiteData website, int amount) throws RollerException {
@@ -1240,49 +1316,48 @@
conjunction.add(Expression.eq("name", name));
conjunction.add(Expression.eq("website", website));
- Criteria criteria = session.createCriteria(WeblogTagAggregateData.class)
+ Criteria criteria = session.createCriteria(WeblogEntryTagAggregateData.class)
.add(conjunction);
- WeblogTagAggregateData weblogTagData = (WeblogTagAggregateData) criteria.uniqueResult();
+ WeblogEntryTagAggregateData weblogTagData = (WeblogEntryTagAggregateData) criteria.uniqueResult();
conjunction = Expression.conjunction();
conjunction.add(Restrictions.eq("name", name));
conjunction.add(Restrictions.isNull("website"));
- criteria = session.createCriteria(WeblogTagAggregateData.class)
+ criteria = session.createCriteria(WeblogEntryTagAggregateData.class)
.add(conjunction);
- WeblogTagAggregateData siteTagData = (WeblogTagAggregateData) criteria.uniqueResult();
+ WeblogEntryTagAggregateData siteTagData = (WeblogEntryTagAggregateData) criteria.uniqueResult();
+
+ Timestamp lastUsed = new Timestamp((new Date()).getTime());
// create it only if we are going to need it.
if(weblogTagData == null && amount > 0) {
- weblogTagData = new WeblogTagAggregateData(null, website, name, 0);
+ weblogTagData = new WeblogEntryTagAggregateData(null, website, name, amount);
+ weblogTagData.setLastUsed(lastUsed);
+ session.save(weblogTagData);
+ } else {
+ session.createQuery("update WeblogEntryTagAggregateData a set a.count = a.count + ?, a.lastUsed = current_time() where a.name = ? and a.website = ?")
+ .setInteger(0, amount)
+ .setString(1, weblogTagData.getName())
+ .setParameter(2, website)
+ .executeUpdate();
}
// create it only if we are going to need it.
if(siteTagData == null && amount > 0) {
- siteTagData = new WeblogTagAggregateData(null, null, name, 0);
- }
-
- //
- if(weblogTagData != null) {
- if ((amount + weblogTagData.getCount()) <= 0) {
- if(weblogTagData.getId() != null)
- session.delete(weblogTagData);
- } else {
- weblogTagData.setCount(weblogTagData.getCount() + amount);
- session.save(weblogTagData);
- }
- }
+ siteTagData = new WeblogEntryTagAggregateData(null, null, name, amount);
+ siteTagData.setLastUsed(lastUsed);
+ session.save(siteTagData);
+ } else {
+ session.createQuery("update WeblogEntryTagAggregateData a set a.count = a.count + ?, a.lastUsed = current_time() where a.name = ? and a.website is null")
+ .setInteger(0, amount)
+ .setString(1, weblogTagData.getName())
+ .executeUpdate();
+ }
- if(siteTagData != null) {
- if ((amount + siteTagData.getCount()) <= 0) {
- if(siteTagData.getId() != null)
- session.delete(siteTagData);
- } else {
- siteTagData.setCount(siteTagData.getCount() + amount);
- session.save(siteTagData);
- }
- }
+ // delete all bad counts
+ session.createQuery("delete from WeblogEntryTagAggregateData a where a.count <= 0").executeUpdate();
}
}
Modified: incubator/roller/trunk/src/org/apache/roller/model/WeblogManager.java
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/src/org/apache/roller/model/WeblogManager.java?view=diff&rev=453774&r1=453773&r2=453774
==============================================================================
--- incubator/roller/trunk/src/org/apache/roller/model/WeblogManager.java (original)
+++ incubator/roller/trunk/src/org/apache/roller/model/WeblogManager.java Fri Oct 6 14:20:26 2006
@@ -385,15 +385,25 @@
/**
* Get list of TagStat. There's no offset/length params just a limit.
* @param website Weblog or null to get for all weblogs.
- * @param sortBy Sort by either 'name' or 'count' (null for name)
- * @param startsWith Prefix for tags to be returned (null or a string of length > 0)
+ * @param startDate Date or null of the most recent time a tag was used.
* @param limit Max TagStats to return (or -1 for no limit)
* @return
* @throws RollerException
*/
- public List getTags(WebsiteData website, String sortBy,
- String startsWith, int limit)
+ public List getPopularTags(WebsiteData website, Date startDate, int limit)
throws RollerException;
+
+ /**
+ * Get list of TagStat. There's no offset/length params just a limit.
+ * @param website Weblog or null to get for all weblogs.
+ * @param sortBy Sort by either 'name' or 'count' (null for name)
+ * @param startsWith Prefix for tags to be returned (null or a string of length > 0)
+ * @param limit Max TagStats to return (or -1 for no limit)
+ * @return
+ * @throws RollerException
+ */
+ public List getTags(WebsiteData website, String sortBy, String startsWith, int limit)
+ throws RollerException;
/**
* This method maintains the tag aggregate table up-to-date with total counts. More
Modified: incubator/roller/trunk/src/org/apache/roller/pojos/TagStat.java
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/src/org/apache/roller/pojos/TagStat.java?view=diff&rev=453774&r1=453773&r2=453774
==============================================================================
--- incubator/roller/trunk/src/org/apache/roller/pojos/TagStat.java (original)
+++ incubator/roller/trunk/src/org/apache/roller/pojos/TagStat.java Fri Oct 6 14:20:26 2006
@@ -29,38 +29,47 @@
*/
public class TagStat implements java.io.Serializable {
- private static final long serialVersionUID = 1142064841813545198L;
+ private static final long serialVersionUID = 1142064841813545198L;
- private java.lang.String name = null;
+ private java.lang.String name;
- private int count = 0;
+ private int count;
+
+ private int intensity;
- public TagStat() {
- }
+ public TagStat() {
+ }
- public String getName() {
- return this.name;
- }
+ public String getName() {
+ return this.name;
+ }
- public void setName(String name) {
- this.name = name;
- }
+ public void setName(String name) {
+ this.name = name;
+ }
- public int getCount() {
- return this.count;
- }
+ public int getCount() {
+ return this.count;
+ }
- public void setCount(int count) {
- this.count = count;
- }
+ public void setCount(int count) {
+ this.count = count;
+ }
- public String toString() {
- StringBuffer str = new StringBuffer("{");
+ public String toString() {
+ StringBuffer str = new StringBuffer("{");
- str.append("name=" + name + " " + "count=" + count);
- str.append('}');
+ str.append("name=" + name + " " + "count=" + count);
+ str.append('}');
- return (str.toString());
- }
+ return (str.toString());
+ }
+ public int getIntensity() {
+ return intensity;
+ }
+
+ public void setIntensity(int intensity) {
+ this.intensity = intensity;
+ }
}
Modified: incubator/roller/trunk/src/org/apache/roller/pojos/WeblogEntryData.java
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/src/org/apache/roller/pojos/WeblogEntryData.java?view=diff&rev=453774&r1=453773&r2=453774
==============================================================================
--- incubator/roller/trunk/src/org/apache/roller/pojos/WeblogEntryData.java (original)
+++ incubator/roller/trunk/src/org/apache/roller/pojos/WeblogEntryData.java Fri Oct 6 14:20:26 2006
@@ -43,6 +43,7 @@
import org.apache.commons.logging.LogFactory;
import org.apache.roller.RollerException;
import org.apache.roller.config.RollerRuntimeConfig;
+import org.apache.roller.model.Roller;
import org.apache.roller.model.RollerFactory;
import org.apache.roller.model.UserManager;
import org.apache.roller.model.WeblogEntryPlugin;
@@ -611,12 +612,12 @@
* @hibernate.collection-key column="entryid"
* @hibernate.collection-one-to-many class="org.apache.roller.pojos.WeblogEntryTagData"
*/
- public Set getTagSet()
+ public Set getTags()
{
return tagSet;
}
- private void setTagSet(Set tagSet) throws RollerException
+ private void setTags(Set tagSet) throws RollerException
{
this.tagSet = tagSet;
this.removedTags = new HashSet();
@@ -713,9 +714,9 @@
/**
* @roller.wrapPojoMethod type="simple"
*/
- public String getTags() {
+ public String getTagsAsString() {
StringBuffer sb = new StringBuffer();
- for (Iterator it = getTagSet().iterator(); it.hasNext();) {
+ for (Iterator it = getTags().iterator(); it.hasNext();) {
sb.append(((WeblogEntryTagData) it.next()).getName()).append(" ");
}
if (sb.length() > 0) {
@@ -725,7 +726,7 @@
return sb.toString();
}
- public void setTags(String tags) throws RollerException {
+ public void setTagsAsString(String tags) throws RollerException {
if (tags == null) {
tagSet.clear();
return;
@@ -739,7 +740,7 @@
}
updateTags(Arrays.asList(tagsarr));
- }
+ }
// ------------------------------------------------------------------------
Copied: incubator/roller/trunk/src/org/apache/roller/pojos/WeblogEntryTagAggregateData.java (from r453438, incubator/roller/trunk/src/org/apache/roller/pojos/WeblogTagAggregateData.java)
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/src/org/apache/roller/pojos/WeblogEntryTagAggregateData.java?view=diff&rev=453774&p1=incubator/roller/trunk/src/org/apache/roller/pojos/WeblogTagAggregateData.java&r1=453438&p2=incubator/roller/trunk/src/org/apache/roller/pojos/WeblogEntryTagAggregateData.java&r2=453774
==============================================================================
--- incubator/roller/trunk/src/org/apache/roller/pojos/WeblogTagAggregateData.java (original)
+++ incubator/roller/trunk/src/org/apache/roller/pojos/WeblogEntryTagAggregateData.java Fri Oct 6 14:20:26 2006
@@ -20,31 +20,34 @@
*/
package org.apache.roller.pojos;
+import java.sql.Timestamp;
+
import org.apache.roller.util.PojoUtil;
/**
* @author Elias Torres
*
- * @ejb:bean name="WeblogTagAggregateData"
+ * @ejb:bean name="WeblogEntryTagAggregateData"
* @struts.form include-all="true"
- * @hibernate.class lazy="false" table="weblogtagagg"
+ * @hibernate.class lazy="false" table="weblogentrytagagg"
* @hibernate.cache usage="read-write"
*/
-public class WeblogTagAggregateData extends PersistentObject
+public class WeblogEntryTagAggregateData extends PersistentObject
implements java.io.Serializable
{
private static final long serialVersionUID = -4343500268898106982L;
private java.lang.String id = null;
private java.lang.String name = null;
private WebsiteData website = null;
+ private Timestamp lastUsed = null;
private int count = 0;
- public WeblogTagAggregateData()
+ public WeblogEntryTagAggregateData()
{
}
- public WeblogTagAggregateData(java.lang.String id,
+ public WeblogEntryTagAggregateData(java.lang.String id,
WebsiteData website,
java.lang.String name, int count)
{
@@ -54,7 +57,7 @@
this.count = count;
}
- public WeblogTagAggregateData(WeblogTagAggregateData otherData)
+ public WeblogEntryTagAggregateData(WeblogEntryTagAggregateData otherData)
{
setData(otherData);
}
@@ -115,6 +118,21 @@
{
return this.count;
}
+
+ /**
+ *
+ * @roller.wrapPojoMethod type="simple"
+ * @ejb:persistent-field
+ * @hibernate.property column="lastused" non-null="true" unique="false"
+ */
+ public Timestamp getLastUsed() {
+ return this.lastUsed;
+ }
+
+ /** @ejb:persistent-field */
+ public void setLastUsed(Timestamp lastUsed) {
+ this.lastUsed = lastUsed;
+ }
/** @ejb:persistent-field */
public void setCount(int count)
@@ -128,15 +146,16 @@
str.append("id=" + id + " " +
"website=" + website +
"name=" + name + " " +
- "count=" + count);
+ "count=" + count + " " +
+ "lastUsed=" + lastUsed);
str.append('}');
return (str.toString());
}
public boolean equals(Object pOther) {
- if (pOther instanceof WeblogTagAggregateData) {
- WeblogTagAggregateData lTest = (WeblogTagAggregateData) pOther;
+ if (pOther instanceof WeblogEntryTagAggregateData) {
+ WeblogEntryTagAggregateData lTest = (WeblogEntryTagAggregateData) pOther;
boolean lEquals = true;
lEquals = PojoUtil.equals(lEquals, this.id, lTest.getId());
@@ -164,11 +183,12 @@
*/
public void setData(org.apache.roller.pojos.PersistentObject otherData)
{
- WeblogTagAggregateData data = (WeblogTagAggregateData) otherData;
+ WeblogEntryTagAggregateData data = (WeblogEntryTagAggregateData) otherData;
this.id = data.getId();
this.website = data.getWebsite();
this.name = data.getName();
this.count = data.getCount();
+ this.lastUsed = data.getLastUsed();
}
}
Modified: incubator/roller/trunk/src/org/apache/roller/pojos/WebsiteData.java
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/src/org/apache/roller/pojos/WebsiteData.java?view=diff&rev=453774&r1=453773&r2=453774
==============================================================================
--- incubator/roller/trunk/src/org/apache/roller/pojos/WebsiteData.java (original)
+++ incubator/roller/trunk/src/org/apache/roller/pojos/WebsiteData.java Fri Oct 6 14:20:26 2006
@@ -20,6 +20,7 @@
import java.io.Serializable;
import java.util.ArrayList;
+import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.Iterator;
@@ -1307,6 +1308,34 @@
}
return 0;
}
+
+
+
+ /**
+ * Get a list of TagStats objects for the most popular tags
+ *
+ * @param sinceDays
+ * @param length
+ * @return
+ */
+ public List getPopularTags(int sinceDays, int length) {
+ List results = new ArrayList();
+ Date startDate = null;
+ if(sinceDays > 0) {
+ Calendar cal = Calendar.getInstance();
+ cal.setTime(new Date());
+ cal.add(Calendar.DATE, -1 * sinceDays);
+ startDate = cal.getTime();
+ }
+ try {
+ Roller roller = RollerFactory.getRoller();
+ WeblogManager wmgr = roller.getWeblogManager();
+ results = wmgr.getPopularTags(this, startDate, length);
+ } catch (Exception e) {
+ log.error("ERROR: fetching weblog tags list", e);
+ }
+ return results;
+ }
/** No-op method to please XDoclet */
public void setTodaysHits(int ignored) {}
Modified: incubator/roller/trunk/src/org/apache/roller/ui/rendering/model/FeedModel.java
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/src/org/apache/roller/ui/rendering/model/FeedModel.java?view=diff&rev=453774&r1=453773&r2=453774
==============================================================================
--- incubator/roller/trunk/src/org/apache/roller/ui/rendering/model/FeedModel.java (original)
+++ incubator/roller/trunk/src/org/apache/roller/ui/rendering/model/FeedModel.java Fri Oct 6 14:20:26 2006
@@ -131,7 +131,7 @@
null,
new Date(),
feedRequest.getWeblogCategoryName(),
- null,
+ feedRequest.getTags(),
WeblogEntryData.PUBLISHED,
"pubTime",
feedRequest.getLocale(),
Modified: incubator/roller/trunk/src/org/apache/roller/ui/rendering/model/PageModel.java
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/src/org/apache/roller/ui/rendering/model/PageModel.java?view=diff&rev=453774&r1=453773&r2=453774
==============================================================================
--- incubator/roller/trunk/src/org/apache/roller/ui/rendering/model/PageModel.java (original)
+++ incubator/roller/trunk/src/org/apache/roller/ui/rendering/model/PageModel.java Fri Oct 6 14:20:26 2006
@@ -273,34 +273,10 @@
}
/**
- * @param sinceDay
+ * Returns the list of tags specified in the request /tags/foo+bar or /?tags=foo+bar
* @return
*/
public List getTags() {
- List results = new ArrayList();
- try {
- Roller roller = RollerFactory.getRoller();
- WeblogManager wmgr = roller.getWeblogManager();
- results = wmgr.getTags(weblog, null, null, -1);
- } catch (Exception e) {
- log.error("ERROR: fetching site tags list", e);
- }
- return results;
- }
-
- /**
- * @param sinceDay
- * @return
- */
- public List getHotTags(int length) {
- List results = new ArrayList();
- try {
- Roller roller = RollerFactory.getRoller();
- WeblogManager wmgr = roller.getWeblogManager();
- results = wmgr.getTags(weblog, "count", null, length);
- } catch (Exception e) {
- log.error("ERROR: fetching site tags list", e);
- }
- return results;
- }
+ return pageRequest.getTags();
+ }
}
Modified: incubator/roller/trunk/src/org/apache/roller/ui/rendering/model/SiteModel.java
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/src/org/apache/roller/ui/rendering/model/SiteModel.java?view=diff&rev=453774&r1=453773&r2=453774
==============================================================================
--- incubator/roller/trunk/src/org/apache/roller/ui/rendering/model/SiteModel.java (original)
+++ incubator/roller/trunk/src/org/apache/roller/ui/rendering/model/SiteModel.java Fri Oct 6 14:20:26 2006
@@ -478,31 +478,33 @@
}
/**
- * @param sinceDay
+ * Returns the list of tags specified in the request /tags/foo+bar or /?tags=foo+bar
* @return
*/
public List getTags() {
- List results = new ArrayList();
- try {
- Roller roller = RollerFactory.getRoller();
- WeblogManager wmgr = roller.getWeblogManager();
- results = wmgr.getTags(null, null, null, -1);
- } catch (Exception e) {
- log.error("ERROR: fetching site tags list", e);
- }
- return results;
+ return tags;
}
/**
- * @param sinceDay
+ *
+ * @param sinceDays
+ * @param length
* @return
*/
- public List getHotTags(int length) {
+ public List getPopularTags(int sinceDays, int length) {
List results = new ArrayList();
+ Date startDate = null;
+ if(sinceDays > 0) {
+ Calendar cal = Calendar.getInstance();
+ cal.setTime(new Date());
+ cal.add(Calendar.DATE, -1 * sinceDays);
+ startDate = cal.getTime();
+ }
+
try {
Roller roller = RollerFactory.getRoller();
WeblogManager wmgr = roller.getWeblogManager();
- results = wmgr.getTags(null, "count", null, length);
+ results = wmgr.getPopularTags(null, startDate, length);
} catch (Exception e) {
log.error("ERROR: fetching site tags list", e);
}
Modified: incubator/roller/trunk/src/org/apache/roller/ui/rendering/util/WeblogFeedRequest.java
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/src/org/apache/roller/ui/rendering/util/WeblogFeedRequest.java?view=diff&rev=453774&r1=453773&r2=453774
==============================================================================
--- incubator/roller/trunk/src/org/apache/roller/ui/rendering/util/WeblogFeedRequest.java (original)
+++ incubator/roller/trunk/src/org/apache/roller/ui/rendering/util/WeblogFeedRequest.java Fri Oct 6 14:20:26 2006
@@ -31,6 +31,7 @@
import org.apache.roller.model.WeblogManager;
import org.apache.roller.pojos.WeblogCategoryData;
import org.apache.roller.util.URLUtilities;
+import org.apache.roller.util.Utilities;
/**
@@ -130,16 +131,23 @@
if(request.getParameter("tags") != null) {
this.tags = Arrays.asList(StringUtils.split(URLUtilities.decode(request.getParameter("tags")),"+"));
+ if(this.tags.size() > 3)
+ throw new InvalidRequestException("max number of tags allowed is 3, " + request.getRequestURL());
}
if(request.getParameter("excerpts") != null) {
this.excerpts = Boolean.valueOf(request.getParameter("excerpts")).booleanValue();
}
+ if(this.tags.size() > 0 && this.weblogCategoryName != null) {
+ throw new InvalidRequestException("please specify either category or tags but not both, " + request.getRequestURL());
+ }
+
if(log.isDebugEnabled()) {
log.debug("type = "+this.type);
log.debug("format = "+this.format);
log.debug("weblogCategory = "+this.weblogCategoryName);
+ log.debug("tags = "+ Utilities.stringArrayToString((String[])this.tags.toArray(), ","));
log.debug("excerpts = "+this.excerpts);
}
}
Modified: incubator/roller/trunk/src/org/apache/roller/ui/rendering/util/WeblogPageRequest.java
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/src/org/apache/roller/ui/rendering/util/WeblogPageRequest.java?view=diff&rev=453774&r1=453773&r2=453774
==============================================================================
--- incubator/roller/trunk/src/org/apache/roller/ui/rendering/util/WeblogPageRequest.java (original)
+++ incubator/roller/trunk/src/org/apache/roller/ui/rendering/util/WeblogPageRequest.java Fri Oct 6 14:20:26 2006
@@ -145,6 +145,8 @@
} else if("tags".equals(this.context)) {
this.tags = Arrays.asList(StringUtils.split(pathElements[1],"+"));
+ if(this.tags.size() > 3)
+ throw new InvalidRequestException("max number of tags allowed is 3, " + request.getRequestURL());
} else {
throw new InvalidRequestException("context "+this.context+
@@ -210,10 +212,6 @@
this.weblogCategoryName = "/"+this.weblogCategoryName;
}
}
-
- if(request.getParameter("tags") != null) {
- this.tags = Arrays.asList(StringUtils.split(URLUtilities.decode(request.getParameter("tags")),"+"));
- }
}
}
@@ -236,6 +234,10 @@
customParams.remove("cat");
customParams.remove("page");
customParams.remove("tags");
+
+ if(this.tags.size() > 0 && this.weblogCategoryName != null) {
+ throw new InvalidRequestException("please specify either category or tags but not both, " + request.getRequestURL());
+ }
if(log.isDebugEnabled()) {
log.debug("context = "+this.context);
Modified: incubator/roller/trunk/src/org/apache/roller/webservices/json/TagStatsServlet.java
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/src/org/apache/roller/webservices/json/TagStatsServlet.java?view=diff&rev=453774&r1=453773&r2=453774
==============================================================================
--- incubator/roller/trunk/src/org/apache/roller/webservices/json/TagStatsServlet.java (original)
+++ incubator/roller/trunk/src/org/apache/roller/webservices/json/TagStatsServlet.java Fri Oct 6 14:20:26 2006
@@ -48,6 +48,10 @@
private final int MAX_LENGTH = 100;
+ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+ doGet(request, response);
+ }
+
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
@@ -62,46 +66,48 @@
if(!StringUtils.isEmpty(pathInfo)) {
path = StringUtils.split(pathInfo, '/');
}
-
- if(path == null || path.length == 0 || path.length > 2) {
- response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Missing either weblog handle or tag prefix.");
- return;
- }
-
+
Roller roller = RollerFactory.getRoller();
try {
response.setContentType("text/html; charset=utf-8");
WeblogManager wmgr = roller.getWeblogManager();
WebsiteData website = null;
- String startsWith = null;
- if(path.length == 2) {
- startsWith = path[1];
+ String startsWith = null;
+
+ // website handle is always the first path segment,
+ // only throw an exception when not found if we have a tag prefix
+ if(path.length > 0) {
try {
UserManager umgr = RollerFactory.getRoller().getUserManager();
website = umgr.getWebsiteByHandle(path[0], Boolean.TRUE);
- if (website == null)
- throw new RollerException();
-
+ if (website == null && path.length > 1)
+ throw new RollerException();
} catch (RollerException ex) {
response.sendError(HttpServletResponse.SC_NOT_FOUND, "Weblog handle not found.");
return;
- }
- } else {
- startsWith = path[0];
+ }
}
- if(startsWith == null || startsWith.trim().length() < 1) {
- response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Missing tag prefix.");
- return;
+ if(path.length == 2) {
+ startsWith = path[1].trim();
+ } else if(path.length == 1 && website == null) {
+ startsWith = path[0].trim();
}
+
+ List tags = wmgr.getTags(website, null, startsWith, limit);
- List tags = wmgr.getTags(website, null, startsWith.trim(), limit);
-
- response.getWriter().println("[");
+ response.getWriter().println("{");
+ response.getWriter().print(" prefix : \"");
+ response.getWriter().print(startsWith);
+ response.getWriter().println("\",");
+ response.getWriter().print(" weblog : \"");
+ response.getWriter().print(website != null ? website.getHandle() : "");
+ response.getWriter().println("\",");
+ response.getWriter().println(" tagcounts : [");
for(Iterator it = tags.iterator(); it.hasNext();) {
TagStat stat = (TagStat) it.next();
- response.getWriter().print("\t{ name : \"");
+ response.getWriter().print(" { tag : \"");
response.getWriter().print(stat.getName());
response.getWriter().print("\", ");
response.getWriter().print("count : ");
@@ -110,7 +116,7 @@
if(it.hasNext())
response.getWriter().println(", ");
}
- response.getWriter().println("\n]");
+ response.getWriter().println("\n ]\n}");
response.flushBuffer();
} catch (RollerException e) {
Modified: incubator/roller/trunk/testdata/WEB-INF/classes/hibernate.cfg.xml
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/testdata/WEB-INF/classes/hibernate.cfg.xml?view=diff&rev=453774&r1=453773&r2=453774
==============================================================================
--- incubator/roller/trunk/testdata/WEB-INF/classes/hibernate.cfg.xml (original)
+++ incubator/roller/trunk/testdata/WEB-INF/classes/hibernate.cfg.xml Fri Oct 6 14:20:26 2006
@@ -66,7 +66,7 @@
<mapping resource="org/apache/roller/pojos/WeblogEntryData.hbm.xml" />
<mapping resource="org/apache/roller/pojos/WeblogEntryTagData.hbm.xml" />
- <mapping resource="org/apache/roller/pojos/WeblogTagAggregateData.hbm.xml" />
+ <mapping resource="org/apache/roller/pojos/WeblogEntryTagAggregateData.hbm.xml" />
<mapping resource="org/apache/roller/pojos/EntryAttributeData.hbm.xml" />
<mapping resource="org/apache/roller/pojos/WeblogCategoryData.hbm.xml" />
<mapping resource="org/apache/roller/pojos/WeblogCategoryAssoc.hbm.xml" />
Modified: incubator/roller/trunk/tests/org/apache/roller/business/WeblogEntryTest.java
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/tests/org/apache/roller/business/WeblogEntryTest.java?view=diff&rev=453774&r1=453773&r2=453774
==============================================================================
--- incubator/roller/trunk/tests/org/apache/roller/business/WeblogEntryTest.java (original)
+++ incubator/roller/trunk/tests/org/apache/roller/business/WeblogEntryTest.java Fri Oct 6 14:20:26 2006
@@ -347,7 +347,7 @@
tag.setUser(testUser);
tag.setTime(new java.sql.Timestamp(new java.util.Date().getTime()));
- testEntry.getTagSet().add(tag);
+ testEntry.getTags().add(tag);
// create a weblog entry
mgr.saveWeblogEntry(testEntry);
@@ -358,9 +358,9 @@
entry = mgr.getWeblogEntry(id);
assertNotNull(entry);
assertEquals(testEntry, entry);
- assertNotNull(entry.getTagSet());
- assertEquals(1, entry.getTagSet().size());
- assertEquals("testTag",((WeblogEntryTagData) entry.getTagSet().iterator().next()).getName());
+ assertNotNull(entry.getTags());
+ assertEquals(1, entry.getTags().size());
+ assertEquals("testTag",((WeblogEntryTagData) entry.getTags().iterator().next()).getName());
// teardown our test entries
TestUtils.teardownWeblogEntry(id);
@@ -395,9 +395,9 @@
entry = mgr.getWeblogEntry(id);
assertNotNull(entry);
assertEquals(testEntry, entry);
- assertNotNull(entry.getTagSet());
- assertEquals(1, entry.getTagSet().size());
- assertEquals("testTag",((WeblogEntryTagData) entry.getTagSet().iterator().next()).getName());
+ assertNotNull(entry.getTags());
+ assertEquals(1, entry.getTags().size());
+ assertEquals("testTag",((WeblogEntryTagData) entry.getTags().iterator().next()).getName());
// teardown our test entry
TestUtils.teardownWeblogEntry(id);
@@ -416,19 +416,19 @@
entry = mgr.getWeblogEntry(id);
assertNotNull(entry);
- assertNotNull(entry.getTagSet());
- assertEquals(1, entry.getTagSet().size());
- assertEquals("testTag",((WeblogEntryTagData) entry.getTagSet().iterator().next()).getName());
+ assertNotNull(entry.getTags());
+ assertEquals(1, entry.getTags().size());
+ assertEquals("testTag",((WeblogEntryTagData) entry.getTags().iterator().next()).getName());
// update a weblog entry tag
- WeblogEntryTagData tag = ((WeblogEntryTagData) entry.getTagSet().iterator().next());
+ WeblogEntryTagData tag = ((WeblogEntryTagData) entry.getTags().iterator().next());
tag.setName("updatedTestTag");
TestUtils.endSession(true);
entry = mgr.getWeblogEntry(id);
assertNotNull(entry);
- assertEquals(1, entry.getTagSet().size());
- assertEquals("updatedTestTag",((WeblogEntryTagData) entry.getTagSet().iterator().next()).getName());
+ assertEquals(1, entry.getTags().size());
+ assertEquals("updatedTestTag",((WeblogEntryTagData) entry.getTags().iterator().next()).getName());
// teardown our test entry
TestUtils.teardownWeblogEntry(id);
@@ -452,7 +452,7 @@
TestUtils.endSession(true);
entry = mgr.getWeblogEntry(id);
- assertEquals(3, entry.getTagSet().size());
+ assertEquals(3, entry.getTags().size());
// teardown our test entry
TestUtils.teardownWeblogEntry(id);
@@ -474,7 +474,7 @@
TestUtils.endSession(true);
entry = mgr.getWeblogEntry(id);
- assertEquals(1, entry.getTagSet().size());
+ assertEquals(1, entry.getTags().size());
// teardown our test entry
TestUtils.teardownWeblogEntry(id);
@@ -497,15 +497,15 @@
TestUtils.endSession(true);
entry = mgr.getWeblogEntry(id);
- assertEquals(2, entry.getTagSet().size());
+ assertEquals(2, entry.getTags().size());
TestUtils.endSession(true);
entry = mgr.getWeblogEntry(id);
- entry.getTagSet().clear();
+ entry.getTags().clear();
TestUtils.endSession(true);
entry = mgr.getWeblogEntry(id);
- assertEquals(0, entry.getTagSet().size());
+ assertEquals(0, entry.getTags().size());
TestUtils.endSession(true);
// teardown our test entry
@@ -525,7 +525,7 @@
TestUtils.endSession(true);
entry = mgr.getWeblogEntry(id);
- assertEquals(2, entry.getTagSet().size());
+ assertEquals(2, entry.getTags().size());
TestUtils.endSession(true);
entry = mgr.getWeblogEntry(id);
@@ -534,7 +534,7 @@
TestUtils.endSession(true);
entry = mgr.getWeblogEntry(id);
- assertEquals(0, entry.getTagSet().size());
+ assertEquals(0, entry.getTags().size());
TestUtils.endSession(true);
// teardown our test entry
@@ -601,7 +601,7 @@
TestUtils.endSession(true);
entry = mgr.getWeblogEntry(id);
- assertEquals(2, entry.getTagSet().size());
+ assertEquals(2, entry.getTags().size());
List updateTags = new ArrayList();
updateTags.add("testWillStayTag");
@@ -612,12 +612,12 @@
entry = mgr.getWeblogEntry(id);
HashSet tagNames = new HashSet();
- for(Iterator it = entry.getTagSet().iterator(); it.hasNext();) {
+ for(Iterator it = entry.getTags().iterator(); it.hasNext();) {
WeblogEntryTagData tagData = (WeblogEntryTagData) it.next();
tagNames.add(tagData.getName());
}
- assertEquals(3, entry.getTagSet().size());
+ assertEquals(3, entry.getTags().size());
assertEquals(3, tagNames.size());
assertEquals(true, tagNames.contains("testWillStayTag"));
assertEquals(true, tagNames.contains("testNewTag"));
@@ -647,11 +647,11 @@
TestUtils.endSession(true);
entry = mgr.getWeblogEntry(id);
- assertEquals(2, entry.getTagSet().size());
+ assertEquals(2, entry.getTags().size());
Timestamp original = null;
- for (Iterator it = entry.getTagSet().iterator(); it.hasNext();) {
+ for (Iterator it = entry.getTags().iterator(); it.hasNext();) {
WeblogEntryTagData tagData = (WeblogEntryTagData) it.next();
if (tagData.getName().equals("testWillStayTag"))
original = tagData.getTime();
@@ -666,14 +666,14 @@
entry = mgr.getWeblogEntry(id);
HashSet tagNames = new HashSet();
- for (Iterator it = entry.getTagSet().iterator(); it.hasNext();) {
+ for (Iterator it = entry.getTags().iterator(); it.hasNext();) {
WeblogEntryTagData tagData = (WeblogEntryTagData) it.next();
tagNames.add(tagData.getName());
if (tagData.getName().equals("testWillStayTag"))
assertEquals(original, tagData.getTime());
}
- assertEquals(3, entry.getTagSet().size());
+ assertEquals(3, entry.getTags().size());
assertEquals(3, tagNames.size());
assertEquals(true, tagNames.contains("testWillStayTag"));
assertEquals(true, tagNames.contains("testNewTag"));
Modified: incubator/roller/trunk/web/WEB-INF/jsps/authoring/WeblogEdit.jsp
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/web/WEB-INF/jsps/authoring/WeblogEdit.jsp?view=diff&rev=453774&r1=453773&r2=453774
==============================================================================
--- incubator/roller/trunk/web/WEB-INF/jsps/authoring/WeblogEdit.jsp (original)
+++ incubator/roller/trunk/web/WEB-INF/jsps/authoring/WeblogEdit.jsp Fri Oct 6 14:20:26 2006
@@ -22,7 +22,10 @@
<%
WeblogEntryPageModel model = (WeblogEntryPageModel)request.getAttribute("model");
try {
-%>
+%>
+<script type="text/javascript" src="<%= request.getContextPath() %>/roller-ui/scripts/scriptaculous/prototype.js" ></script>
+<script type="text/javascript" src="<%= request.getContextPath() %>/roller-ui/scripts/scriptaculous/scriptaculous.js" ></script>
+<script type="text/javascript" src="<%= request.getContextPath() %>/roller-ui/scripts/roller-autocomplete.js" ></script>
<script type="text/javascript">
<!--
function postWeblogEntry() {
@@ -153,9 +156,14 @@
<tr><td class="entryEditFormLabel">
<label style="width:10%; float:left;" for="title"><fmt:message key="weblogEdit.tags" /></label>
</td><td>
- <html:text property="tags" size="70" maxlength="255" tabindex="2" /><br/>
- </td></tr>
-
+ <html:text styleId="entryEditTags" property="tagsAsString" size="70" maxlength="255" tabindex="2" />
+ <div id="entryEditTagsChoices" style="display:none" class="autocomplete"></div>
+ <br/>
+ <script type="text/javascript">
+ <!--
+ new RollerTagsAutoCompleter("entryEditTags", "entryEditTagsChoices", "<%= request.getContextPath() %>/roller-services/json/tags/<%= model.getWeblogEntry().getWebsite().getHandle() %>", { tokens : [' ',','], minChars: 2 });
+ // --></script>
+ </td></tr>
<c:choose>
<c:when test="${model.weblog.enableMultiLang}">
<tr><td class="entryEditFormLabel">
Modified: incubator/roller/trunk/web/WEB-INF/velocity/weblog.vm
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/web/WEB-INF/velocity/weblog.vm?view=diff&rev=453774&r1=453773&r2=453774
==============================================================================
--- incubator/roller/trunk/web/WEB-INF/velocity/weblog.vm (original)
+++ incubator/roller/trunk/web/WEB-INF/velocity/weblog.vm Fri Oct 6 14:20:26 2006
@@ -794,39 +794,19 @@
*#
#macro(showTagCloud $tags)
- <center>
- #set ( $minSize = 12 )
- #set ( $maxSize = 28 )
-
- #set ( $max = 0 )
- #foreach ( $tag in $tags )
- #if ( $tag.count > $max )
- #set ( $max = $tag.count )
- #end
- #end
-
- #set ( $step = $max / ($maxSize - $minSize) )
-
- #set ( $step = $max / ($maxSize - $minSize) )
- #if ( $step < 1 )
- #set ( $step = 1 )
+ #foreach ($tag in $tags)
+ <a class="tag s${tag.intensity}" href="$url.tag($tag.name)" title="$tag.count">$tag.name</a>
#end
- #foreach ($tag in $tags)
- #set( $size = $minSize + ($tag.count / $step) )
- <span class="tag" style="font-size:${size}px"><a href="$url.tag($tag.name)" title="$tag.count">$tag.name</a></span>
- #end
- </center>
-
+
#end
#macro(showEntryTags $entry)
- #set ( $tags = $entry.tagSet )
- Tags:
+ #set ( $tags = $entry.tags )
#foreach($tag in $tags)
<a href="$url.tag($tag.name)" title="$tag.count" rel="tag">$tag.name</a>
#end
-
+
#end
Modified: incubator/roller/trunk/web/roller-ui/scripts/calendar.js
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/web/roller-ui/scripts/calendar.js?view=diff&rev=453774&r1=453773&r2=453774
==============================================================================
--- incubator/roller/trunk/web/roller-ui/scripts/calendar.js (original)
+++ incubator/roller/trunk/web/roller-ui/scripts/calendar.js Fri Oct 6 14:20:26 2006
@@ -688,7 +688,7 @@
return false;
}
else if (this.use_gebi && e) {
- var t = e.originalTarget;
+ var t = e.target;
while (t.parentNode != null) {
if (t.id==this.divName) {
return true;
Added: incubator/roller/trunk/web/roller-ui/scripts/roller-autocomplete.js
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/web/roller-ui/scripts/roller-autocomplete.js?view=auto&rev=453774
==============================================================================
--- incubator/roller/trunk/web/roller-ui/scripts/roller-autocomplete.js (added)
+++ incubator/roller/trunk/web/roller-ui/scripts/roller-autocomplete.js Fri Oct 6 14:20:26 2006
@@ -0,0 +1,46 @@
+RollerTagsAutoCompleter = Class.create();
+Object.extend(Object.extend(RollerTagsAutoCompleter.prototype, Ajax.Autocompleter.prototype), {
+
+ initialize: function(element, update, url, options) {
+ this.baseInitialize(element, update, options);
+ this.options.asynchronous = true;
+ this.options.onComplete = this.onComplete.bind(this)
+ this.options.method = 'get';
+ this.options.defaultParams = this.options.parameters || null;
+ this.url = url;
+ this.cache = {};
+ this.options.mine = options.mine || [];
+ },
+
+ getUpdatedChoices: function() {
+
+ var t = this.getToken();
+ if (this.cache[t])
+ {
+ this.updateChoices(this.cache[t]);
+ return;
+ }
+
+ this.options.parameters = this.options.callback ?
+ this.options.callback(this.element, entry) : "";
+
+ if(this.options.defaultParams)
+ this.options.parameters += '&' + this.options.defaultParams;
+
+ new Ajax.Request(this.url + "/" + encodeURIComponent(t), this.options);
+ },
+
+ onComplete: function(request) {
+ eval("var results = " + request.responseText + ";");
+ var buf = "<ul>\n";
+ for (var i = 0; i < results.tagcounts.length; i++)
+ {
+ var tc = results.tagcounts[i];
+ buf += "<li>" + tc.tag + "</li>\n";
+ }
+ buf += "</ul>";
+ this.cache[results.prefix] = buf;
+ this.updateChoices(buf);
+ }
+
+});
\ No newline at end of file
Propchange: incubator/roller/trunk/web/roller-ui/scripts/roller-autocomplete.js
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/roller/trunk/web/roller-ui/scripts/roller-autocomplete.js
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: incubator/roller/trunk/web/roller-ui/scripts/roller-autocomplete.js
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: incubator/roller/trunk/web/roller-ui/scripts/scriptaculous/builder.js
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/web/roller-ui/scripts/scriptaculous/builder.js?view=auto&rev=453774
==============================================================================
--- incubator/roller/trunk/web/roller-ui/scripts/scriptaculous/builder.js (added)
+++ incubator/roller/trunk/web/roller-ui/scripts/scriptaculous/builder.js Fri Oct 6 14:20:26 2006
@@ -0,0 +1,119 @@
+// script.aculo.us builder.js v1.6.4, Wed Sep 06 11:30:58 CEST 2006
+
+// Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+//
+// See scriptaculous.js for full license.
+
+var Builder = {
+ NODEMAP: {
+ AREA: 'map',
+ CAPTION: 'table',
+ COL: 'table',
+ COLGROUP: 'table',
+ LEGEND: 'fieldset',
+ OPTGROUP: 'select',
+ OPTION: 'select',
+ PARAM: 'object',
+ TBODY: 'table',
+ TD: 'table',
+ TFOOT: 'table',
+ TH: 'table',
+ THEAD: 'table',
+ TR: 'table'
+ },
+ // note: For Firefox < 1.5, OPTION and OPTGROUP tags are currently broken,
+ // due to a Firefox bug
+ node: function(elementName) {
+ elementName = elementName.toUpperCase();
+
+ // try innerHTML approach
+ var parentTag = this.NODEMAP[elementName] || 'div';
+ var parentElement = document.createElement(parentTag);
+ try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707
+ parentElement.innerHTML = "<" + elementName + "></" + elementName + ">";
+ } catch(e) {}
+ var element = parentElement.firstChild || null;
+
+ // see if browser added wrapping tags
+ if(element && (element.tagName != elementName))
+ element = element.getElementsByTagName(elementName)[0];
+
+ // fallback to createElement approach
+ if(!element) element = document.createElement(elementName);
+
+ // abort if nothing could be created
+ if(!element) return;
+
+ // attributes (or text)
+ if(arguments[1])
+ if(this._isStringOrNumber(arguments[1]) ||
+ (arguments[1] instanceof Array)) {
+ this._children(element, arguments[1]);
+ } else {
+ var attrs = this._attributes(arguments[1]);
+ if(attrs.length) {
+ try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707
+ parentElement.innerHTML = "<" +elementName + " " +
+ attrs + "></" + elementName + ">";
+ } catch(e) {}
+ element = parentElement.firstChild || null;
+ // workaround firefox 1.0.X bug
+ if(!element) {
+ element = document.createElement(elementName);
+ for(attr in arguments[1])
+ element[attr == 'class' ? 'className' : attr] = arguments[1][attr];
+ }
+ if(element.tagName != elementName)
+ element = parentElement.getElementsByTagName(elementName)[0];
+ }
+ }
+
+ // text, or array of children
+ if(arguments[2])
+ this._children(element, arguments[2]);
+
+ return element;
+ },
+ _text: function(text) {
+ return document.createTextNode(text);
+ },
+ _attributes: function(attributes) {
+ var attrs = [];
+ for(attribute in attributes)
+ attrs.push((attribute=='className' ? 'class' : attribute) +
+ '="' + attributes[attribute].toString().escapeHTML() + '"');
+ return attrs.join(" ");
+ },
+ _children: function(element, children) {
+ if(typeof children=='object') { // array can hold nodes and text
+ children.flatten().each( function(e) {
+ if(typeof e=='object')
+ element.appendChild(e)
+ else
+ if(Builder._isStringOrNumber(e))
+ element.appendChild(Builder._text(e));
+ });
+ } else
+ if(Builder._isStringOrNumber(children))
+ element.appendChild(Builder._text(children));
+ },
+ _isStringOrNumber: function(param) {
+ return(typeof param=='string' || typeof param=='number');
+ },
+ dump: function(scope) {
+ if(typeof scope != 'object' && typeof scope != 'function') scope = window; //global scope
+
+ var tags = ("A ABBR ACRONYM ADDRESS APPLET AREA B BASE BASEFONT BDO BIG BLOCKQUOTE BODY " +
+ "BR BUTTON CAPTION CENTER CITE CODE COL COLGROUP DD DEL DFN DIR DIV DL DT EM FIELDSET " +
+ "FONT FORM FRAME FRAMESET H1 H2 H3 H4 H5 H6 HEAD HR HTML I IFRAME IMG INPUT INS ISINDEX "+
+ "KBD LABEL LEGEND LI LINK MAP MENU META NOFRAMES NOSCRIPT OBJECT OL OPTGROUP OPTION P "+
+ "PARAM PRE Q S SAMP SCRIPT SELECT SMALL SPAN STRIKE STRONG STYLE SUB SUP TABLE TBODY TD "+
+ "TEXTAREA TFOOT TH THEAD TITLE TR TT U UL VAR").split(/\s+/);
+
+ tags.each( function(tag){
+ scope[tag] = function() {
+ return Builder.node.apply(Builder, [tag].concat($A(arguments)));
+ }
+ });
+ }
+}
\ No newline at end of file
Propchange: incubator/roller/trunk/web/roller-ui/scripts/scriptaculous/builder.js
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/roller/trunk/web/roller-ui/scripts/scriptaculous/builder.js
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: incubator/roller/trunk/web/roller-ui/scripts/scriptaculous/builder.js
------------------------------------------------------------------------------
svn:mime-type = text/plain