initial support for the "emoticons" or "smileys" - defined the config file

here so we can change over all the custom venice-config.xml and ui-config.xml
files before going any further
This commit is contained in:
Eric J. Bowersox 2004-07-27 04:53:30 +00:00
parent 7060b5ff76
commit 8a745717e1
19 changed files with 333 additions and 3 deletions

79
etc/emoticon.xml Normal file
View File

@ -0,0 +1,79 @@
<?xml version="1.0"?>
<!--
The contents of this file are subject to the Mozilla Public License Version 1.1
(the "License"); you may not use this file except in compliance with the License.
You may obtain a copy of the License at <http://www.mozilla.org/MPL/>.
Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
WARRANTY OF ANY KIND, either express or implied. See the License for the specific
language governing rights and limitations under the License.
The Original Code is the Venice Web Communities System.
The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
Contributor(s):
-->
<!-- Configure the emoticons -->
<emoticon-config>
<prefix-chars>:;</prefix-chars>
<icon name="smile">
<pattern>:)</pattern>
<image width="15" height="15" fixup="true">emote/ei_smile.gif</image>
<text>Smile!</text>
</icon>
<icon name="frown">
<pattern>:(</pattern>
<image width="15" height="15" fixup="true">emote/ei_frown.gif</image>
<text>frown...</text>
</icon>
<icon name="redface">
<pattern>:o</pattern>
<pattern>:O</pattern>
<image width="15" height="15" fixup="true">emote/ei_redface.gif</image>
<text>Boy, is my face red!</text>
</icon>
<icon name="biggrin">
<pattern>:D</pattern>
<image width="15" height="15" fixup="true">emote/ei_biggrin.gif</image>
<text>Grinnin'...</text>
</icon>
<icon name="wink">
<pattern>;)</pattern>
<image width="15" height="15" fixup="true">emote/ei_wink.gif</image>
<text>Wink wink, nudge nudge</text>
</icon>
<icon name="tongue">
<pattern>:p</pattern>
<pattern>:P</pattern>
<image width="15" height="15" fixup="true">emote/ei_tongue.gif</image>
<text>Bleah!</text>
</icon>
<icon name="cool">
<pattern>:cool:</pattern>
<image width="15" height="15" fixup="true">emote/ei_cool.gif</image>
<text>Cool!</text>
</icon>
<icon name="rolleyes">
<pattern>:rolleyes:</pattern>
<image width="15" height="15" fixup="true">emote/ei_rolleyes.gif</image>
<text>Rolling my eyes</text>
</icon>
<icon name="mad">
<pattern>:mad:</pattern>
<image width="15" height="15" fixup="true">emote/ei_mad.gif</image>
<text>I'm mad!</text>
</icon>
<icon name="eek">
<pattern>:eek:</pattern>
<image width="15" height="15" fixup="true">emote/ei_eek.gif</image>
<text>EEK!</text>
</icon>
<icon name="confused">
<pattern>:confused:</pattern>
<image width="15" height="22" fixup="true">emote/ei_confused.gif</image>
<text>Huh???</text>
</icon>
</emoticon-config>

View File

@ -25,6 +25,9 @@
<!-- The location of the services configuration file, relative to the application root. -->
<services-config>WEB-INF/services-config.xml</services-config>
<!-- The pathname of the emoticons configuration file, relative to the Web application root directory. -->
<emoticon-config>WEB-INF/emoticon.xml</emoticon-config>
<!-- The location of the scripts directory, relative to the application root. -->
<script-dir>WEB-INF/scripts</script-dir>

View File

@ -30,6 +30,9 @@
<!-- The pathname of the services config file, relative to the Web application root directory. -->
<services-config>WEB-INF/services-config.xml</services-config>
<!-- The pathname of the emoticons configuration file, relative to the Web application root directory. -->
<emoticon-config>WEB-INF/emoticon.xml</emoticon-config>
<!-- If this property is set, these addresses are considered "privileged" and able to log in
as any user -->
<!-- <privileged-addresses>10.29.99.1,127.0.0.1</privileged-addresses> -->

View File

@ -293,5 +293,3 @@ public final class DOMElementHelper
} // end getAttributeBoolean
} // end DOMElementHelper

View File

@ -143,9 +143,14 @@ public class GlobalSiteImpl implements GlobalSite
// Get the <engine/> section.
DOMElementHelper config_h = new DOMElementHelper(config);
Element sect = loader.configGetSubSection(config_h,"database");
Element sect = loader.configGetSubSection(config_h,"engine");
DOMElementHelper sect_h = new DOMElementHelper(sect);
// Get the name of the emoticons configuration file.
String emoticon_config = loader.configGetSubElementText(sect_h,"emoticon-config");
if (!(emoticon_config.startsWith("/")))
emoticon_config = application_root + emoticon_config;
// Get the <privileged-addresses/> value.
String s = sect_h.getSubElementText("privileged-addresses");
if (!(StringUtil.isStringEmpty(s)))
@ -225,6 +230,8 @@ public class GlobalSiteImpl implements GlobalSite
intermediate_map.put(postlink_rewriter.getClass().getName(),postlink_rewriter);
UserNameRewriter username_rewriter = new UserNameRewriter(this);
intermediate_map.put(username_rewriter.getClass().getName(),username_rewriter);
EmoticonRewriter emoticon_rewriter = new EmoticonRewriter(emoticon_config);
intermediate_map.put(emoticon_rewriter.getClass().getName(),emoticon_rewriter);
// Get the <html-checker/> section.
sect = loader.configGetSubSection(config_h,"html-checker");

View File

@ -0,0 +1,111 @@
/*
* The contents of this file are subject to the Mozilla Public License Version 1.1
* (the "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at <http://www.mozilla.org/MPL/>.
*
* Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
* WARRANTY OF ANY KIND, either express or implied. See the License for the specific
* language governing rights and limitations under the License.
*
* The Original Code is the Venice Web Community System.
*
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
* Copyright (C) 2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
*
* Contributor(s):
*/
package com.silverwrist.venice.htmlcheck.filters;
import java.util.*;
import org.w3c.dom.*;
import com.silverwrist.util.*;
import com.silverwrist.venice.except.*;
import com.silverwrist.venice.htmlcheck.Rewriter;
import com.silverwrist.venice.htmlcheck.RewriterServices;
import com.silverwrist.venice.htmlcheck.MarkupData;
import com.silverwrist.venice.util.XMLLoader;
public class EmoticonRewriter implements Rewriter
{
/*--------------------------------------------------------------------------------
* Attributes
*--------------------------------------------------------------------------------
*/
private String m_prefixchars;
private Map m_patmap;
/*--------------------------------------------------------------------------------
* Constructor
*--------------------------------------------------------------------------------
*/
public EmoticonRewriter(String config_file) throws ConfigException
{
// Load the configuration file.
XMLLoader loader = XMLLoader.get();
Document config = loader.loadConfigDocument(config_file);
Element root = loader.configGetRootElement(config,"emoticon-config");
// Get the set of prefix characters.
m_prefixchars = loader.configGetSubElementText(root,"prefix-chars");
HashMap tmp = new HashMap();
// Look for all associated icons.
NodeList nl = root.getChildNodes();
for (int i=0; i<nl.getLength(); i++)
{ // look through all the child nodes...
Node n = nl.item(i);
if ((n.getNodeType()==Node.ELEMENT_NODE) && n.getNodeName().equals("icon"))
{ // load the icon name
String icon_name = loader.configGetAttribute((Element)n,"name").intern();
// get the associated patterns
NodeList nl2 = n.getChildNodes();
for (int j=0; j<nl2.getLength(); j++)
{ // look for <pattern/> elements
Node n2 = nl2.item(i);
if ((n2.getNodeType()==Node.ELEMENT_NODE) && n2.getNodeName().equals("pattern"))
{ // get the element text
DOMElementHelper h = new DOMElementHelper((Element)n2);
String pattern = h.getElementText();
if (m_prefixchars.indexOf(pattern.charAt(0))>=0)
tmp.put(pattern,icon_name);
} // end if
// else skip this element
} // end for
} // end if
// else skip this element
} // end for
if (tmp.isEmpty())
m_patmap = Collections.EMPTY_MAP;
else
m_patmap = Collections.unmodifiableMap(tmp);
} // end constructor
/*--------------------------------------------------------------------------------
* Implementations from interface Rewriter
*--------------------------------------------------------------------------------
*/
public String getName()
{
return "emoticon";
} // end getName
public MarkupData rewrite(String data, RewriterServices svc)
{
return null;
} // end rewrite
} // end class EmoticonRewriter

View File

@ -0,0 +1,109 @@
/*
* The contents of this file are subject to the Mozilla Public License Version 1.1
* (the "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at <http://www.mozilla.org/MPL/>.
*
* Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
* WARRANTY OF ANY KIND, either express or implied. See the License for the specific
* language governing rights and limitations under the License.
*
* The Original Code is the Venice Web Communities System.
*
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
* Copyright (C) 2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
*
* Contributor(s):
*/
package com.silverwrist.venice.ui.config;
import java.util.*;
import org.w3c.dom.*;
import com.silverwrist.util.*;
import com.silverwrist.venice.except.*;
import com.silverwrist.venice.util.XMLLoader;
public class EmoticonManager
{
/*--------------------------------------------------------------------------------
* Internal class that contains the icon data.
*--------------------------------------------------------------------------------
*/
private static class IconDefinition
{
/*====================================================================
* Attributes
*====================================================================
*/
private int m_width;
private int m_height;
private boolean m_fixup;
private String m_path;
private String m_text;
/*====================================================================
* Constructor
*====================================================================
*/
IconDefinition(Element icon_elt) throws ConfigException
{
XMLLoader loader = XMLLoader.get();
DOMElementHelper h = new DOMElementHelper(icon_elt);
// Get the icon image data.
Element img_elt = loader.configGetSubSection(h,"image");
m_width = loader.configGetAttributeInt(img_elt,"width");
m_height = loader.configGetAttributeInt(img_elt,"height");
DOMElementHelper h2 = new DOMElementHelper(img_elt);
m_fixup = h2.getAttributeBoolean("fixup",false).booleanValue();
m_path = h2.getElementText();
// Get the text data.
m_text = h.getSubElementText("text");
} // end constructor
} // end class IconDefinition
/*--------------------------------------------------------------------------------
* Attributes
*--------------------------------------------------------------------------------
*/
private Map m_iconmap;
/*--------------------------------------------------------------------------------
* Constructor
*--------------------------------------------------------------------------------
*/
EmoticonManager(Element config) throws ConfigException
{
XMLLoader loader = XMLLoader.get();
HashMap tmp = new HashMap();
NodeList nl = config.getChildNodes();
for (int i=0; i<nl.getLength(); i++)
{ // get the element
Node n = nl.item(i);
if ((n.getNodeType()==Node.ELEMENT_NODE) && n.getNodeName().equals("icon"))
{ // load the emoticon
Element elt = (Element)n;
String icon_name = loader.configGetAttribute(elt,"name").intern();
IconDefinition defn = new IconDefinition(elt);
tmp.put(icon_name,defn);
} // end if
} // end for
if (tmp.isEmpty())
m_iconmap = Collections.EMPTY_MAP;
else
m_iconmap = Collections.unmodifiableMap(tmp);
} // end constructor
} // end class EmoticonManager

View File

@ -92,6 +92,7 @@ public class RootConfig implements LinkTypes, ColorSelectors
private DialogManager m_dialogs; // the dialog manager
private SideBoxManager m_sideboxes; // the sidebox manager
private CommunityMenuFactory m_comm_menu_fact; // the community menu factory
private EmoticonManager m_emoticons; // the emoticon manager
/*--------------------------------------------------------------------------------
* Constructor
@ -120,6 +121,11 @@ public class RootConfig implements LinkTypes, ColorSelectors
if (!(services_config.startsWith("/")))
services_config = root_file_path + services_config;
// Get the full pathname of the emoticon configuration file.
String emoticon_config = loader.configGetSubElementText(sect_h,"emoticon-config");
if (!(emoticon_config.startsWith("/")))
emoticon_config = root_file_path + emoticon_config;
// Get the full pathname of the script directory.
m_script_directory = getRelativeDirectory(sect_h,"script-dir",root_file_path,true);
@ -511,6 +517,14 @@ public class RootConfig implements LinkTypes, ColorSelectors
// Get the community section and pass it to the CommunityMenuFactory.
m_comm_menu_fact = new CommunityMenuFactory(root_h.getSubElement("community"),this);
// done with the services-config.xml file
// Load up the emoticon.xml file.
doc = loader.loadConfigDocument(emoticon_config);
root = loader.configGetRootElement(doc,"emoticon-config");
// Load the emoticon manager.
m_emoticons = new EmoticonManager(root);
} // end constructor
/*--------------------------------------------------------------------------------
@ -892,6 +906,12 @@ public class RootConfig implements LinkTypes, ColorSelectors
} // end addFormatParams
public final EmoticonManager getEmoticonManager()
{
return m_emoticons;
} // end getEmoticonManager
/*--------------------------------------------------------------------------------
* Static initializer
*--------------------------------------------------------------------------------

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 B

BIN
web/images/emote/ei_eek.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 B

BIN
web/images/emote/ei_mad.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 154 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 338 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 135 B