You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by je...@apache.org on 2015/08/13 15:43:22 UTC

[2/9] allura git commit: [#7924] ticket:830 Change some of the icons

[#7924] ticket:830 Change some of the icons


Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/1f52f23b
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/1f52f23b
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/1f52f23b

Branch: refs/heads/ib/7924
Commit: 1f52f23b3348f762a05aab0e7b7315386bee95d6
Parents: e8e7923
Author: Igor Bondarenko <je...@gmail.com>
Authored: Fri Aug 7 18:38:09 2015 +0300
Committer: Igor Bondarenko <je...@gmail.com>
Committed: Thu Aug 13 14:46:01 2015 +0300

----------------------------------------------------------------------
 .../user_profile/templates/send_message.html    |  2 +-
 .../ext/user_profile/templates/user_index.html  |  2 +-
 Allura/allura/lib/app_globals.py                | 53 ++++++++++++++------
 .../lib/widgets/resources/js/subscriptions.js   | 13 ++---
 Allura/allura/nf/allura/css/allura.css          |  6 ++-
 Allura/allura/nf/allura/css/site_style.css      |  4 ++
 Allura/allura/templates/discussion/index.html   |  7 ++-
 .../templates/jinja_master/sidebar_menu.html    | 11 ++--
 Allura/allura/templates/repo/merge_request.html |  2 +-
 .../templates/widgets/search_results.html       |  5 +-
 Allura/allura/templates/widgets/subscribe.html  |  1 -
 .../forgeactivity/templates/index.html          |  2 +-
 .../templates/widgets/profile_section.html      |  2 +-
 ForgeBlog/forgeblog/templates/blog/index.html   |  2 +-
 ForgeBlog/forgeblog/templates/blog/post.html    |  6 +--
 ForgeDiscussion/forgediscussion/forum_main.py   |  6 +--
 .../templates/discussionforums/index.html       |  2 +-
 .../templates/discussionforums/thread.html      |  6 +--
 .../forgeshorturl/templates/index.html          | 13 ++---
 .../forgetracker/templates/tracker/bin.html     | 18 +++++--
 .../forgetracker/templates/tracker/index.html   |  8 +--
 .../templates/tracker/mass_edit.html            |  3 +-
 .../templates/tracker/mass_move.html            |  3 +-
 .../templates/tracker/milestone.html            |  6 ++-
 .../templates/tracker/milestones.html           |  2 +-
 .../forgetracker/templates/tracker/search.html  | 15 ++++--
 .../forgetracker/templates/tracker/ticket.html  | 10 ++--
 .../tracker_widgets/ticket_search_results.html  |  2 +-
 ForgeTracker/forgetracker/tracker_main.py       |  2 +-
 .../forgewiki/templates/wiki/page_edit.html     |  4 +-
 .../forgewiki/templates/wiki/page_history.html  |  4 +-
 .../forgewiki/templates/wiki/page_view.html     | 10 ++--
 ForgeWiki/forgewiki/wiki_main.py                |  2 +-
 33 files changed, 141 insertions(+), 93 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/1f52f23b/Allura/allura/ext/user_profile/templates/send_message.html
----------------------------------------------------------------------
diff --git a/Allura/allura/ext/user_profile/templates/send_message.html b/Allura/allura/ext/user_profile/templates/send_message.html
index eb99f41..82fc3a9 100644
--- a/Allura/allura/ext/user_profile/templates/send_message.html
+++ b/Allura/allura/ext/user_profile/templates/send_message.html
@@ -28,7 +28,7 @@
   <link rel="alternate" type="application/atom+xml" title="Atom" href="feed.atom">
 {% endblock %}
 {% block actions %}
-  <a href="{{c.app.url}}feed.rss" title="Follow"><b data-icon="{{g.icons['feed'].char}}" class="ico {{g.icons['feed'].css}}"></b></a>
+  {{ g.icons['feed'].render(href=c.app.url + 'feed.rss', title='Follow') }}
 {% endblock %}
 
 {% block content %}

http://git-wip-us.apache.org/repos/asf/allura/blob/1f52f23b/Allura/allura/ext/user_profile/templates/user_index.html
----------------------------------------------------------------------
diff --git a/Allura/allura/ext/user_profile/templates/user_index.html b/Allura/allura/ext/user_profile/templates/user_index.html
index 3e4ed44..19cf1c1 100644
--- a/Allura/allura/ext/user_profile/templates/user_index.html
+++ b/Allura/allura/ext/user_profile/templates/user_index.html
@@ -29,7 +29,7 @@
 {% endblock %}
 
 {% block actions %}
-  <a href="{{c.app.url}}feed.rss" title="Follow"><b data-icon="{{g.icons['feed'].char}}" class="ico {{g.icons['feed'].css}}"></b></a>
+  {{ g.icons['feed'].render(href=c.app.url + 'feed.rss', title='Follow') }}
 {% endblock %}
 
 {% block nav_menu %}

http://git-wip-us.apache.org/repos/asf/allura/blob/1f52f23b/Allura/allura/lib/app_globals.py
----------------------------------------------------------------------
diff --git a/Allura/allura/lib/app_globals.py b/Allura/allura/lib/app_globals.py
index 5d262e8..3e7b27c 100644
--- a/Allura/allura/lib/app_globals.py
+++ b/Allura/allura/lib/app_globals.py
@@ -48,6 +48,7 @@ from pypeline.markup import markup as pypeline_markup
 import ew as ew_core
 import ew.jinja2_ew as ew
 from ming.utils import LazyProperty
+from jinja2 import Markup
 
 import allura.tasks.event_tasks
 from allura import model as M
@@ -221,27 +222,33 @@ class Globals(object):
         self.analytics = analytics.GoogleAnalytics(accounts=accounts)
 
         self.icons = dict(
-            admin=Icon('x', 'ico-admin'),
-            pencil=Icon('p', 'ico-pencil'),
-            help=Icon('h', 'ico-help'),
-            search=Icon('s', 'ico-search'),
-            history=Icon('N', 'ico-history'),
-            feed=Icon('f', 'ico-feed'),
-            mail=Icon('M', 'ico-mail'),
+            move=Icon('fa fa-arrows', 'Move'),
+            edit=Icon('fa fa-edit', 'Edit'),
+            admin=Icon('fa fa-gear', 'Admin'),
+            send=Icon('fa fa-send-o', 'Send'),
+            add=Icon('fa fa-plus-circle', 'Add'),
+            moderate=Icon('fa fa-hand-stop-o', 'Moderate'),
+            pencil=Icon('fa fa-pencil', 'Edit'),
+            help=Icon('fa fa-question-circle', 'Help'),
+            eye=Icon('fa fa-eye', 'View'),
+            search=Icon('fa fa-search', 'Search'),
+            history=Icon('fa fa-calendar', 'History'),
+            feed=Icon('fa fa-rss', 'Feed'),
+            mail=Icon('fa fa-envelope-o', 'Subscribe'),
             reply=Icon('w', 'ico-reply'),
-            tag=Icon('z', 'ico-tag'),
+            tag=Icon('fa fa-tag', 'Tag'),
             flag=Icon('^', 'ico-flag'),
-            undelete=Icon('+', 'ico-undelete'),
-            delete=Icon('#', 'ico-delete'),
+            undelete=Icon('fa fa-undo', 'Undelete'),
+            delete=Icon('fa fa-trash-o', 'Delete'),
             close=Icon('D', 'ico-close'),
             table=Icon('n', 'ico-table'),
-            stats=Icon('Y', 'ico-stats'),
+            stats=Icon('fa fa-line-chart', 'Stats'),
             pin=Icon('@', 'ico-pin'),
             folder=Icon('o', 'ico-folder'),
             fork=Icon('R', 'ico-fork'),
             merge=Icon('J', 'ico-merge'),
-            plus=Icon('+', 'ico-plus'),
-            conversation=Icon('q', 'ico-conversation'),
+            plus=Icon('fa fa-plus-circle', 'Add'),
+            conversation=Icon('fa fa-comments', 'Conversation'),
             group=Icon('g', 'ico-group'),
             user=Icon('U', 'ico-user'),
             secure=Icon('(', 'ico-lock'),
@@ -584,6 +591,22 @@ class Globals(object):
 
 class Icon(object):
 
-    def __init__(self, char, css):
-        self.char = char
+    def __init__(self, css, title=None):
         self.css = css
+        self.title = title or u''
+
+    def render(self, show_title=False, extra_css=None, closing_tag=True, **kw):
+        title = kw.get('title') or self.title
+        attrs = {
+            'href': '#',
+            'title': title,
+            'class': ' '.join(['icon', self.css, extra_css or '']).strip(),
+        }
+        attrs.update(kw)
+        attrs = ew._Jinja2Widget().j2_attrs(attrs)
+        visible_title = u''
+        if show_title:
+            visible_title = u'<span>&nbsp;{}</span>'.format(Markup.escape(title))
+        closing_tag = u'</a>' if closing_tag else u''
+        icon = u'<a {}>{}{}'.format(attrs, visible_title, closing_tag)
+        return Markup(icon)

http://git-wip-us.apache.org/repos/asf/allura/blob/1f52f23b/Allura/allura/lib/widgets/resources/js/subscriptions.js
----------------------------------------------------------------------
diff --git a/Allura/allura/lib/widgets/resources/js/subscriptions.js b/Allura/allura/lib/widgets/resources/js/subscriptions.js
index d5a7648..47407d8 100644
--- a/Allura/allura/lib/widgets/resources/js/subscriptions.js
+++ b/Allura/allura/lib/widgets/resources/js/subscriptions.js
@@ -37,22 +37,17 @@ SubscriptionForm = React.createClass({
   render: function() {
     var action = this.props.subscribed ? "Unsubscribe from" : "Subscribe to";
     var title = action + ' this ' + this.props.thing;
-    var link_opts = {
+    var opts = {
       ref: 'link',
-      className: this.props.subscribed ? 'active' : '',
+      className: this.props.icon.css + (this.props.subscribed ? ' active' : ''),
       href: '#',
       title: title,
       onClick: this.handleClick
     };
     if (this.props.in_progress) {
-      link_opts.style = {cursor: 'wait'};
+      opts.style = {cursor: 'wait'};
     }
-    var icon_opts = {
-      'data-icon': this.props.icon.char,
-      className: 'ico ' + this.props.icon.css,
-      title: title
-    };
-    return dom('a', link_opts, dom('b', icon_opts));
+    return dom('a', opts);
   },
 
   handleClick: function() {

http://git-wip-us.apache.org/repos/asf/allura/blob/1f52f23b/Allura/allura/nf/allura/css/allura.css
----------------------------------------------------------------------
diff --git a/Allura/allura/nf/allura/css/allura.css b/Allura/allura/nf/allura/css/allura.css
index 17ee342..495726c 100644
--- a/Allura/allura/nf/allura/css/allura.css
+++ b/Allura/allura/nf/allura/css/allura.css
@@ -30,6 +30,10 @@ b.ico {
     background-repeat: no-repeat;
     vertical-align: middle;
 }
+a.fa { color: rgb(85, 85, 85); }
+a.fa:hover { text-decoration: none; }
+a.btn.fa { font-family: FontAwesome; }
+a.fa > span { font-family: sans-serif; }
 h2.dark b.ico, .modal b.ico {background-image: url('../images/neo-icon-set-ffffff-256x350.png');}
 
 b.ico.ico-fork { background-position: -240px -16px; }
@@ -86,4 +90,4 @@ tr.rev div.markdown_content p {
 
 #phone_verification_overlay iframe {
     height: 320px;
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/allura/blob/1f52f23b/Allura/allura/nf/allura/css/site_style.css
----------------------------------------------------------------------
diff --git a/Allura/allura/nf/allura/css/site_style.css b/Allura/allura/nf/allura/css/site_style.css
index 5a6339c..dc944b0 100644
--- a/Allura/allura/nf/allura/css/site_style.css
+++ b/Allura/allura/nf/allura/css/site_style.css
@@ -1904,6 +1904,7 @@ nav .ico {
   -o-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4) inset,0 1px 0 rgba(255, 255, 255, 0.9);
   box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4) inset,0 1px 0 rgba(255, 255, 255, 0.9);
   border: medium none;
+  font-family: sans-serif;
   position: absolute;
   right: 5px;
   top: 4px;
@@ -1925,6 +1926,9 @@ nav .ico {
   display: block;
   padding: 5px 10px;
 }
+#sidebar li > a.fa {
+  padding: 8px 10px;
+}
 #sidebar li > a:hover {
   background: rgba(229, 229, 229, 0.9);
   text-decoration: none;

http://git-wip-us.apache.org/repos/asf/allura/blob/1f52f23b/Allura/allura/templates/discussion/index.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates/discussion/index.html b/Allura/allura/templates/discussion/index.html
index 11c987a..8d05ccd 100644
--- a/Allura/allura/templates/discussion/index.html
+++ b/Allura/allura/templates/discussion/index.html
@@ -24,9 +24,12 @@
 
 {% block actions %}
   {% if discussion.email_address and c.app.config.options.get('AllowEmailPosting', True) %}
-    <a href="{{h.really_unicode(discussion.email_link(subject=None))}}" class="email" title="Send Email to Create a New Topic" ><b data-icon="{{g.icons['pencil'].char}}" class="ico {{g.icons['pencil'].css}}"></b></a>
+    {{ g.icons['send'].render(
+          extra_css='email',
+          title='Send Email to Create a New Topic',
+          href=h.really_unicode(discussion.email_link(subject=None))) }}
   {% endif %}
-  <a href="feed" title="Feed" ><b data-icon="{{g.icons['feed'].char}}" class="ico {{g.icons['feed'].css}}"></b></a>
+  {{ g.icons['feed'].render(href='feed.rss') }}
 {% endblock %}
 
 {% block edit_box %}

http://git-wip-us.apache.org/repos/asf/allura/blob/1f52f23b/Allura/allura/templates/jinja_master/sidebar_menu.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates/jinja_master/sidebar_menu.html b/Allura/allura/templates/jinja_master/sidebar_menu.html
index b51a15b..35d0ebd 100644
--- a/Allura/allura/templates/jinja_master/sidebar_menu.html
+++ b/Allura/allura/templates/jinja_master/sidebar_menu.html
@@ -24,10 +24,13 @@
       {% do ul_active.append(True) %}
     {% endif %}
   <li{% if request.path.find(s.url,-s.url.__len__()) != -1 %} class="active"{% endif %}>
-      <a href="{{ s.url }}" {{ s.extra_html_attrs|xmlattr }} {% if s.className %} class="{{ s.className or '' }}" {% endif %} >
-      {% if s.ui_icon %} <b data-icon="{{ s.ui_icon.char }}" class="ico {{ s.ui_icon.css }}"></b>{% endif %}
+      {% if s.ui_icon %}
+        {{ s.ui_icon.render(href=s.url, extra_css=s.className, closing_tag=False, **s.extra_html_attrs) }}
+      {% else %}
+        <a href="{{ s.url }}" {{ s.extra_html_attrs|xmlattr }} {% if s.className %}class="{{ s.className or '' }}"{% endif %}>
+      {% endif %}
       <span{% if s.small != None %} class="has_small"{% endif %}>{{ h.really_unicode(s.label) }}</span>
-      {% if s.small != None %}<small>{{ s.small }}</small>{% endif %} </a>
+      {% if s.small != None %}<small>{{ s.small }}</small>{% endif %}</a>
   </li>
   {% else %}
     {% if ul_active[-1] %}
@@ -35,7 +38,7 @@
       {% do ul_active.append(False) %}
     {% endif %}
     {% if s.label %}
-      <h3 class="{{s.className or ''}}">{% if s.ui_icon %}<b data-icon="{{s.ui_icon.char}}" class="ico {{s.ui_icon.css}}"></b>{% endif %}{{s.label}}</h3>
+      <h3 class="{{s.className or ''}}">{% if s.ui_icon %}{{ s.ui_icon.render() }}{% endif %}{{s.label}}</h3>
     {% endif %}
   {% endif %}
 {%- endmacro %}

http://git-wip-us.apache.org/repos/asf/allura/blob/1f52f23b/Allura/allura/templates/repo/merge_request.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates/repo/merge_request.html b/Allura/allura/templates/repo/merge_request.html
index 3f5e894..a0fe3c5 100644
--- a/Allura/allura/templates/repo/merge_request.html
+++ b/Allura/allura/templates/repo/merge_request.html
@@ -28,7 +28,7 @@ Merge Request #{{req.request_number}}: {{req.summary}} ({{req.status}})
 
 {% block actions %}
   {% if h.has_access(req, 'write')() %}
-    <a href="edit" title="Edit"><b data-icon="{{g.icons['pencil'].char}}" class="ico {{g.icons['pencil'].css}}" title="Edit"></b></a>
+    {{ g.icons['edit'].render(href='edit', show_title=True) }}
   {% endif %}
 {% endblock %}
 

http://git-wip-us.apache.org/repos/asf/allura/blob/1f52f23b/Allura/allura/templates/widgets/search_results.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates/widgets/search_results.html b/Allura/allura/templates/widgets/search_results.html
index 464dab4..51d1c5f 100644
--- a/Allura/allura/templates/widgets/search_results.html
+++ b/Allura/allura/templates/widgets/search_results.html
@@ -25,10 +25,7 @@
   </div>
   {% if c.help_modal %}
   <div class="grid-6">
-    <a href="#" class="btn search_help_modal">
-      <b data-icon="{{g.icons['help'].char}}" class="ico {{g.icons['help'].css}}"></b>
-      Help
-    </a>
+    {{ g.icons['help'].render(extra_css='btn search_help_modal', show_title=True) }}
   </div>
   {% endif %}
   <div style="clear:both"></div>

http://git-wip-us.apache.org/repos/asf/allura/blob/1f52f23b/Allura/allura/templates/widgets/subscribe.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates/widgets/subscribe.html b/Allura/allura/templates/widgets/subscribe.html
index 2b61f71..2cfa681 100644
--- a/Allura/allura/templates/widgets/subscribe.html
+++ b/Allura/allura/templates/widgets/subscribe.html
@@ -34,7 +34,6 @@
     "subscribed_to_tool": {{"true" if tool_subscribed else "false"}},
     "url": "{{action}}",
     "icon": {
-      "char": "{{g.icons['mail'].char}}",
       "css": "{{g.icons['mail'].css}}"
     }
   };

http://git-wip-us.apache.org/repos/asf/allura/blob/1f52f23b/ForgeActivity/forgeactivity/templates/index.html
----------------------------------------------------------------------
diff --git a/ForgeActivity/forgeactivity/templates/index.html b/ForgeActivity/forgeactivity/templates/index.html
index 1cadb3f..c4a57a0 100644
--- a/ForgeActivity/forgeactivity/templates/index.html
+++ b/ForgeActivity/forgeactivity/templates/index.html
@@ -32,7 +32,7 @@
 {% endblock %}
 
 {% block actions %}
-    <a href="feed.rss" title="RSS"><b data-icon="{{g.icons['feed'].char}}" class="ico {{g.icons['feed'].css}}" title="Feed"></b></a>
+    {{ g.icons['feed'].render(href='feed.rss', title='RSS') }}
     {% if c.user and c.user != c.user.anonymous() and followee != c.user %}
         {{c.follow_toggle.display(following=following)}}
     {% endif %}

http://git-wip-us.apache.org/repos/asf/allura/blob/1f52f23b/ForgeActivity/forgeactivity/templates/widgets/profile_section.html
----------------------------------------------------------------------
diff --git a/ForgeActivity/forgeactivity/templates/widgets/profile_section.html b/ForgeActivity/forgeactivity/templates/widgets/profile_section.html
index 8d09ef3..5f6fbee 100644
--- a/ForgeActivity/forgeactivity/templates/widgets/profile_section.html
+++ b/ForgeActivity/forgeactivity/templates/widgets/profile_section.html
@@ -28,7 +28,7 @@
     {% if c.user and not c.user.is_anonymous() and c.user != user %}
         {{follow_toggle.display(following=following, action=activity_app.url+'follow')}}
     {% endif %}
-    <a href="feed.rss" title="RSS"><b data-icon="{{g.icons['feed'].char}}" class="ico {{g.icons['feed'].css}}" title="Feed"></b></a>
+    {{ g.icons['feed'].render(href='feed.rss', title='RSS') }}
 {% endblock %}
 
 {% block section_class %}activity{% endblock %}

http://git-wip-us.apache.org/repos/asf/allura/blob/1f52f23b/ForgeBlog/forgeblog/templates/blog/index.html
----------------------------------------------------------------------
diff --git a/ForgeBlog/forgeblog/templates/blog/index.html b/ForgeBlog/forgeblog/templates/blog/index.html
index 9a90f7b..5589d39 100644
--- a/ForgeBlog/forgeblog/templates/blog/index.html
+++ b/ForgeBlog/forgeblog/templates/blog/index.html
@@ -28,7 +28,7 @@
 {% endblock %}
 
 {% block actions %}
-    <a href="feed" title="RSS"><b data-icon="{{g.icons['feed'].char}}" class="ico {{g.icons['feed'].css}}" title="Feed"></b></a>
+    {{ g.icons['feed'].render(href='feed.rss', title='RSS') }}
 {% endblock %}
 
 {% block content %}

http://git-wip-us.apache.org/repos/asf/allura/blob/1f52f23b/ForgeBlog/forgeblog/templates/blog/post.html
----------------------------------------------------------------------
diff --git a/ForgeBlog/forgeblog/templates/blog/post.html b/ForgeBlog/forgeblog/templates/blog/post.html
index c0caad3..89e176d 100644
--- a/ForgeBlog/forgeblog/templates/blog/post.html
+++ b/ForgeBlog/forgeblog/templates/blog/post.html
@@ -24,11 +24,11 @@
 
 {% block actions %}
   {% if h.has_access(post, 'write')() %}
-    <a href="edit" title="Edit"><b data-icon="{{g.icons['pencil'].char}}" class="ico {{g.icons['pencil'].css}}"></b></a>
+    {{ g.icons['edit'].render(href='edit') }}
   {% endif %}
-  <a href="history" title="History"><b data-icon="{{g.icons['history'].char}}" class="ico {{g.icons['history'].css}}"></b></a>
+  {{ g.icons['history'].render(href='history') }}
   {{c.subscribe_form.display(value=subscribed, action='subscribe', style='icon')}}
-  <a href="feed" title="RSS"><b data-icon="{{g.icons['feed'].char}}" class="ico {{g.icons['feed'].css}}"></b></a>
+  {{ g.icons['feed'].render(href='feed.rss', title='RSS') }}
 {% endblock %}
 
 {% block content %}

http://git-wip-us.apache.org/repos/asf/allura/blob/1f52f23b/ForgeDiscussion/forgediscussion/forum_main.py
----------------------------------------------------------------------
diff --git a/ForgeDiscussion/forgediscussion/forum_main.py b/ForgeDiscussion/forgediscussion/forum_main.py
index 542b3f0..96c2389 100644
--- a/ForgeDiscussion/forgediscussion/forum_main.py
+++ b/ForgeDiscussion/forgediscussion/forum_main.py
@@ -164,7 +164,7 @@ class ForgeDiscussionApp(Application):
                             'deleted': False,
                         }).count()
                         moderate_link = SitemapEntry(
-                            'Moderate', "%smoderate/" % f.url(), ui_icon=g.icons['pencil'],
+                            'Moderate', "%smoderate/" % f.url(), ui_icon=g.icons['moderate'],
                             small=num_moderate)
                     forum_links.append(
                         SitemapEntry(f.name, f.url(), small=f.num_topics))
@@ -172,12 +172,12 @@ class ForgeDiscussionApp(Application):
             url = h.urlquote(
                 url + c.forum.shortname if getattr(c, 'forum', None) and c.forum else url)
             l.append(
-                SitemapEntry('Create Topic', url, ui_icon=g.icons['plus']))
+                SitemapEntry('Create Topic', url, ui_icon=g.icons['add']))
             if has_access(c.app, 'configure')():
                 l.append(SitemapEntry('Add Forum', c.app.url +
                          'new_forum', ui_icon=g.icons['conversation']))
                 l.append(SitemapEntry('Admin Forums', c.project.url() + 'admin/' +
-                         self.config.options.mount_point + '/forums', ui_icon=g.icons['pencil']))
+                         self.config.options.mount_point + '/forums', ui_icon=g.icons['admin']))
             if moderate_link:
                 l.append(moderate_link)
             # if we are in a thread and not anonymous, provide placeholder

http://git-wip-us.apache.org/repos/asf/allura/blob/1f52f23b/ForgeDiscussion/forgediscussion/templates/discussionforums/index.html
----------------------------------------------------------------------
diff --git a/ForgeDiscussion/forgediscussion/templates/discussionforums/index.html b/ForgeDiscussion/forgediscussion/templates/discussionforums/index.html
index 941975a..4de5b94 100644
--- a/ForgeDiscussion/forgediscussion/templates/discussionforums/index.html
+++ b/ForgeDiscussion/forgediscussion/templates/discussionforums/index.html
@@ -24,7 +24,7 @@
 {% block header %}{{c.app.config.options.mount_label}}{% endblock %}
 
 {% block actions %}
-  <a href="feed" class="follow" title="Follow"><b data-icon="{{g.icons['feed'].char}}" class="ico {{g.icons['feed'].css}}"></b></a>
+  {{ g.icons['feed'].render(href='feed.rss', extra_css='follow', title='Follow') }}
 {% endblock %}
 
 {% if h.has_access(c.app, 'configure')() and (not hide_forum) %}

http://git-wip-us.apache.org/repos/asf/allura/blob/1f52f23b/ForgeDiscussion/forgediscussion/templates/discussionforums/thread.html
----------------------------------------------------------------------
diff --git a/ForgeDiscussion/forgediscussion/templates/discussionforums/thread.html b/ForgeDiscussion/forgediscussion/templates/discussionforums/thread.html
index 6bd6fec..076790a 100644
--- a/ForgeDiscussion/forgediscussion/templates/discussionforums/thread.html
+++ b/ForgeDiscussion/forgediscussion/templates/discussionforums/thread.html
@@ -27,10 +27,10 @@
 
 {% block actions %}
   {% if show_moderate and h.has_access(thread, 'moderate')() %}
-  <a href="#" title="Moderate" id="mod_thread_link"><b data-icon="{{g.icons['pencil'].char}}" class="ico {{g.icons['pencil'].css}}"></b></a>
+    {{ g.icons['moderate'].render(id='mod_thread_link') }}
   {% endif %}
-  <a href="#" title="Label This" class="thread_tag"><b data-icon="z" class="ico ico-tag"></b></a>
-  <a href="feed.rss" class="thread_feed0" title="Follow This"><b data-icon="{{g.icons['feed'].char}}" class="ico {{g.icons['feed'].css}}"></b></a>
+  {{ g.icons['tag'].render(title='Label This', extra_css='thread_tag') }}
+  {{ g.icons['feed'].render(href='feed.rss', title='Follow This', extra_css='thread_feed0') }}
 {% endblock %}
 
 {% block edit_box %}

http://git-wip-us.apache.org/repos/asf/allura/blob/1f52f23b/ForgeShortUrl/forgeshorturl/templates/index.html
----------------------------------------------------------------------
diff --git a/ForgeShortUrl/forgeshorturl/templates/index.html b/ForgeShortUrl/forgeshorturl/templates/index.html
index e370812..178345b 100644
--- a/ForgeShortUrl/forgeshorturl/templates/index.html
+++ b/ForgeShortUrl/forgeshorturl/templates/index.html
@@ -23,15 +23,12 @@
 
 {% block actions %}
   {% if can_create %}
-  <a href="{{ '{}admin/{}/add/'.format(c.project.url(), c.app.config.options.mount_point) }}"
-     title="Add Short URL"
-     class="add-short-url">
-    <b data-icon="{{g.icons['plus'].char}}" class="ico {{g.icons['plus'].css}}"></b>
-  </a>
+  {{ g.icons['plus'].render(
+      href='{}admin/{}/add/'.format(c.project.url(), c.app.config.options.mount_point),
+      title="Add Short URL",
+      extra_css="add-short-url") }}
   {% endif %}
-  <a href="search/" title="Search">
-    <b data-icon="{{g.icons['search'].char}}" class="ico {{g.icons['search'].css}}"></b>
-  </a>
+  {{ g.icons['search'].render(href='search/') }}
 {% endblock %}
 
 {% block content %}

http://git-wip-us.apache.org/repos/asf/allura/blob/1f52f23b/ForgeTracker/forgetracker/templates/tracker/bin.html
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/templates/tracker/bin.html b/ForgeTracker/forgetracker/templates/tracker/bin.html
index 4badd12..efbab68 100644
--- a/ForgeTracker/forgetracker/templates/tracker/bin.html
+++ b/ForgeTracker/forgetracker/templates/tracker/bin.html
@@ -50,12 +50,17 @@
             <td class="edit" style="{% if not bin.error %}display:none{% else %}vertical-align:top{% endif %}"><input type="text" name="bins-{{loop.index0}}.summary" value="{{bin.summary}}"></td>
             <td class="edit" {% if not bin.error %}style="display:none"{% endif %}>
                 <input class="grid-8" type="text" name="bins-{{loop.index0}}.terms" value="{{bin.terms}}">
-                <span class="grid-3"><a href="{{tg.url(app.url + 'search_help/')}}" target="_blank" class="btn search_help_modal"><b data-icon="{{g.icons['help'].char}}" class="ico {{g.icons['help'].css}}"></b> Help</a></span>
+                <span class="grid-3">
+                  {{ g.icons['help'].render(
+                      show_title=True,
+                      target='_blank',
+                      href=tg.url(app.url + 'search_help/'),
+                      extra_css='btn search_help_modal') }}
                 {% if bin.error %}<br/><span style="color:red">{{bin.error}}</span>{% endif %}
             </td>
             <td style="width:40px;">
-              <a href="#" title="Delete" class="del_bin"><b data-icon="{{g.icons['delete'].char}}" class="ico {{g.icons['delete'].css}}"></b></a>
-              <a href="#" title="Edit" class="edit_bin"><b data-icon="{{g.icons['pencil'].char}}" class="ico {{g.icons['pencil'].css}}"></b></a>
+              {{ g.icons['delete'].render(extra_css='del_bin') }}
+              {{ g.icons['edit'].render(extra_css='edit_bin') }}
               <input type="hidden" name="bins-{{loop.index0}}.id" value="{{bin._id | string}}">
               <input type="hidden" name="bins-{{loop.index0}}.delete" value="False" class="delete_flag">
             </td>
@@ -70,7 +75,12 @@
           </td>
           <td>
             <input class="grid-8" type="text" name="bins-{{num_bins}}.terms" placeholder="Terms" {% if new_bin %}value="{{new_bin.terms}}"{% endif %}>
-            <span class="grid-3"><a href="{{tg.url(app.url + 'search_help/')}}" target="_blank" class="btn search_help_modal"><b data-icon="{{g.icons['help'].char}}" class="ico {{g.icons['help'].css}}"></b> Help</a></span>
+            <span class="grid-3">
+              {{ g.icons['help'].render(
+                  show_title=True,
+                  target='_blank',
+                  href=tg.url(app.url + 'search_help/'),
+                  extra_css='btn search_help_modal') }}
             {% if new_bin and new_bin.error %}<br/><span class="err" style="color:red">{{new_bin.error}}</span>{% endif %}
           </td>
           <td>&nbsp;</td>

http://git-wip-us.apache.org/repos/asf/allura/blob/1f52f23b/ForgeTracker/forgetracker/templates/tracker/index.html
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/templates/tracker/index.html b/ForgeTracker/forgetracker/templates/tracker/index.html
index 3d7c5d1..c759c15 100644
--- a/ForgeTracker/forgetracker/templates/tracker/index.html
+++ b/ForgeTracker/forgetracker/templates/tracker/index.html
@@ -31,15 +31,17 @@
 
 {% block actions %}
   {{ lib.maximize_content_button() }}
-  <a href="{{c.app.url}}feed.rss" title="Follow"><b data-icon="{{g.icons['feed'].char}}" class="ico {{g.icons['feed'].css}}"></b></a>
+    {{ g.icons['feed'].render(href=c.app.url + 'feed.rss', title='Follow') }}
   {% if c.user and c.user != c.user.anonymous() %}
     {{c.subscribe_form.display(value=subscribed, action='subscribe', style='icon')}}
   {% endif %}
   {% if allow_edit %}
-    <a href="{{tg.url(c.app.url+'edit/', dict(q=url_q, limit=limit, sort=url_sort, page=page, filter=filter))}}" title="Bulk Edit"><b data-icon="{{g.icons['pencil'].char}}" class="ico {{g.icons['pencil'].css}}"></b></a>
+    {% set bulk_edit_url = tg.url(c.app.url+'edit/', dict(q=url_q, limit=limit, sort=url_sort, page=page, filter=filter)) %}
+    {{ g.icons['edit'].render(href=bulk_edit_url, title='Bulk Edit') }}
   {% endif %}
   {% if allow_move %}
-    <a href="{{tg.url(c.app.url + 'move/', dict(q=url_q, limit=limit, sort=url_sort, page=page, filter=filter))}}" title="Bulk Move"><b data-icon="" class=""></b>Bulk Move</a>
+    {% set move_url = tg.url(c.app.url + 'move/', dict(q=url_q, limit=limit, sort=url_sort, page=page, filter=filter)) %}
+    {{ g.icons['move'].render(href=move_url, title='Bulk Move', show_title=True) }}
   {% endif %}
 {% endblock %}
 

http://git-wip-us.apache.org/repos/asf/allura/blob/1f52f23b/ForgeTracker/forgetracker/templates/tracker/mass_edit.html
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/templates/tracker/mass_edit.html b/ForgeTracker/forgetracker/templates/tracker/mass_edit.html
index e3a3ee2..b98862f 100644
--- a/ForgeTracker/forgetracker/templates/tracker/mass_edit.html
+++ b/ForgeTracker/forgetracker/templates/tracker/mass_edit.html
@@ -31,7 +31,8 @@
 {% block header %}ForgeTracker for {{c.project.shortname}}{% endblock %}
 
 {% block actions %}
-    <a href="{{tg.url(c.app.url+'edit/', dict(q=q, limit=limit, sort=sort, page=page))}}" title="Bulk Edit"><b data-icon="{{g.icons['pencil'].char}}" class="ico {{g.icons['pencil'].css}} active"></b></a>
+  {% set edit_url = tg.url(c.app.url+'edit/', dict(q=q, limit=limit, sort=sort, page=page)) %}
+  {{ g.icons['edit'].render(href=edit_url, title='Bulk Edit', extra_css='active') }}
 {% endblock %}
 
 {% block edit_box %}

http://git-wip-us.apache.org/repos/asf/allura/blob/1f52f23b/ForgeTracker/forgetracker/templates/tracker/mass_move.html
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/templates/tracker/mass_move.html b/ForgeTracker/forgetracker/templates/tracker/mass_move.html
index ac5c515..a4b24ca 100644
--- a/ForgeTracker/forgetracker/templates/tracker/mass_move.html
+++ b/ForgeTracker/forgetracker/templates/tracker/mass_move.html
@@ -19,7 +19,8 @@
 {% extends 'forgetracker:templates/tracker/mass_edit.html' %}
 
 {% block actions %}
-<a href="{{tg.url(c.app.url+'move/', dict(q=q, limit=limit, sort=sort, page=page))}}" title="Bulk Move" class="active"><b data-icon="" class=""></b>Bulk Move</a>
+{% set move_url = tg.url(c.app.url+'move/', dict(q=q, limit=limit, sort=sort, page=page)) %}
+{{ g.icons['move'].render(href=move_url, title='Bulk Move', extra_css='active', show_title=True) }}
 {% endblock %}
 
 {% block edit_box %}

http://git-wip-us.apache.org/repos/asf/allura/blob/1f52f23b/ForgeTracker/forgetracker/templates/tracker/milestone.html
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/templates/tracker/milestone.html b/ForgeTracker/forgetracker/templates/tracker/milestone.html
index 6107486..bb695f1 100644
--- a/ForgeTracker/forgetracker/templates/tracker/milestone.html
+++ b/ForgeTracker/forgetracker/templates/tracker/milestone.html
@@ -28,10 +28,12 @@
 {% block actions %}
 {{ lib.maximize_content_button() }}
 {% if allow_edit %}
-  <a href="{{tg.url(c.app.url+'edit/', dict(q=q, limit=limit, sort=url_sort, page=page, filter=filter))}}" title="Bulk Edit"><b data-icon="{{g.icons['pencil'].char}}" class="ico {{g.icons['pencil'].css}}"></b></a>
+  {% set bulk_edit_url = tg.url(c.app.url+'edit/', dict(q=q, limit=limit, sort=url_sort, page=page, filter=filter)) %}
+  {{ g.icons['edit'].render(href=bulk_edit_url, title='Bulk Edit') }}
 {% endif %}
 {% if allow_move %}
-  <a href="{{tg.url(c.app.url + 'move/', dict(q=q, limit=limit, sort=url_sort, page=page, filter=filter))}}" title="Bulk Move"><b data-icon="" class=""></b>Bulk Move</a>
+  {% set bulk_move_url = tg.url(c.app.url + 'move/', dict(q=q, limit=limit, sort=url_sort, page=page, filter=filter)) %}
+  {{ g.icons['move'].render(href=bulk_move_url, title='Bulk Move', show_title=True) }}
 {% endif %}
 {% endblock %}
 

http://git-wip-us.apache.org/repos/asf/allura/blob/1f52f23b/ForgeTracker/forgetracker/templates/tracker/milestones.html
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/templates/tracker/milestones.html b/ForgeTracker/forgetracker/templates/tracker/milestones.html
index a5e6db9..c8585b6 100644
--- a/ForgeTracker/forgetracker/templates/tracker/milestones.html
+++ b/ForgeTracker/forgetracker/templates/tracker/milestones.html
@@ -65,7 +65,7 @@
           {{c.date_field.display(value=m.due_date)}}
         </td>
         <td>{{m.closed}} / {{m.total}}</td>
-        <td style="width:20px;"><a href="#" title="Edit" class="edit_milestone"><b data-icon="{{g.icons['pencil'].char}}" class="ico {{g.icons['pencil'].css}}"></b></a></td>
+        <td style="width:20px;">{{ g.icons['edit'].render(extra_css='edit_milestone') }}</td>
       </tr>
       {% else %}
       <tr class="empty_message">

http://git-wip-us.apache.org/repos/asf/allura/blob/1f52f23b/ForgeTracker/forgetracker/templates/tracker/search.html
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/templates/tracker/search.html b/ForgeTracker/forgetracker/templates/tracker/search.html
index 8c651a7..f2b83ab 100644
--- a/ForgeTracker/forgetracker/templates/tracker/search.html
+++ b/ForgeTracker/forgetracker/templates/tracker/search.html
@@ -31,12 +31,15 @@
 
 {% block actions %}
   {{ lib.maximize_content_button() }}
-  <a href="{{tg.url(c.app.url+'search_feed/', dict(q=q, limit=limit, sort=sort))}}" title="Feed"><b data-icon="{{g.icons['feed'].char}}" class="ico {{g.icons['feed'].css}}"></b></a>
+  {% set feed_url = tg.url(c.app.url+'search_feed/', dict(q=q, limit=limit, sort=sort)) %}
+  {{ g.icons['feed'].render(href=feed_url) }}
 {% if allow_edit and count != 0 %}
-  <a href="{{tg.url(c.app.url+'edit/', dict(q=q, limit=limit, sort=sort, page=page, filter=filter))}}" title="Bulk Edit"><b data-icon="{{g.icons['pencil'].char}}" class="ico {{g.icons['pencil'].css}}"></b></a>
+  {% set bulk_edit_url = tg.url(c.app.url+'edit/', dict(q=q, limit=limit, sort=sort, page=page, filter=filter)) %}
+  {{ g.icons['edit'].render(href=bulk_edit_url, title='Bulk Edit') }}
 {% endif %}
 {% if allow_move and count != 0 %}
-  <a href="{{tg.url(c.app.url + 'move/', dict(q=q, limit=limit, sort=sort, page=page, filter=filter))}}" title="Bulk Move"><b data-icon="" class=""></b>Bulk Move</a>
+  {% set bulk_move_url = tg.url(c.app.url+'move/', dict(q=q, limit=limit, sort=sort, page=page, filter=filter)) %}
+  {{ g.icons['move'].render(href=bulk_move_url, title='Bulk Move', show_title=True) }}
 {% endif %}
 {% endblock %}
 
@@ -75,7 +78,11 @@
   {% endif %}
   <input type="submit" value="Search"/>
 </form>
-<a href="{{tg.url(c.app.url + 'search_help/')}}" target="_blank" class="btn search_help_modal"><b data-icon="{{g.icons['help'].char}}" class="ico {{g.icons['help'].css}}"></b> Help</a>
+{{ g.icons['help'].render(
+    show_title=True,
+    target='_blank',
+    href=tg.url(c.app.url + 'search_help/'),
+    extra_css='btn search_help_modal') }}
 
 </div>
 <div style="clear:both"></div>

http://git-wip-us.apache.org/repos/asf/allura/blob/1f52f23b/ForgeTracker/forgetracker/templates/tracker/ticket.html
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/templates/tracker/ticket.html b/ForgeTracker/forgetracker/templates/tracker/ticket.html
index a68e723..d3b0342 100644
--- a/ForgeTracker/forgetracker/templates/tracker/ticket.html
+++ b/ForgeTracker/forgetracker/templates/tracker/ticket.html
@@ -34,20 +34,20 @@
 {% set editable = h.has_access(ticket, 'update') and not ticket.deleted %}
 
 {% block actions %}
-<a href="{{ticket.url()}}feed.rss" title="Follow this Ticket"><b data-icon="{{g.icons['feed'].char}}" class="ico {{g.icons['feed'].css}}"></b></a>
+  {{ g.icons['feed'].render(href='feed.rss', title='Follow this Ticket') }}
 {% if c.user and c.user != c.user.anonymous() %}
   {{c.subscribe_form.display(value=subscribed, tool_subscribed=tool_subscribed, action='subscribe', style='icon')}}
 {% endif %}
 {% if h.has_access(ticket.app, 'admin') %}
-  <a href="move" title="Move"><b data-icon="{{g.icons['pencil'].char}}" class="ico {{g.icons['pencil'].css}}"></b> Move</a>
+  {{ g.icons['move'].render(show_title=True, href='move') }}
 {% endif %}
 {% if editable %}
-  <a href="#" title="Edit" class="edit_ticket"><b data-icon="{{g.icons['pencil'].char}}" class="ico {{g.icons['pencil'].css}}"></b> Edit</a>
+  {{ g.icons['edit'].render(show_title=True, extra_css='edit_ticket') }}
   {%if h.has_access(ticket, 'delete') and not ticket.deleted%}
-    <a class="post-link" href="./delete" title="Delete"><b data-icon="{{g.icons['delete'].char}}" class="ico {{g.icons['delete'].css}}" title="Delete"></b></a>
+    {{ g.icons['delete'].render(href='delete', extra_css='post-link') }}
   {% endif %}
 {%elif h.has_access(ticket, 'delete') and ticket.deleted%}
-  <a class="post-link" href="undelete" title="Undelete"><b data-icon="{{g.icons['undelete'].char}}" class="ico {{g.icons['undelete'].css}}" title="Undelete"></b></a>
+  {{ g.icons['undelete'].render(href='undelete', extra_css='post-link') }}
 {% endif %}
 {% endblock %}
 

http://git-wip-us.apache.org/repos/asf/allura/blob/1f52f23b/ForgeTracker/forgetracker/templates/tracker_widgets/ticket_search_results.html
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/templates/tracker_widgets/ticket_search_results.html b/ForgeTracker/forgetracker/templates/tracker_widgets/ticket_search_results.html
index 2634bbe..1266e08 100644
--- a/ForgeTracker/forgetracker/templates/tracker_widgets/ticket_search_results.html
+++ b/ForgeTracker/forgetracker/templates/tracker_widgets/ticket_search_results.html
@@ -51,7 +51,7 @@
             </th>
           {% endfor %}
           <th id="select_col_menu">
-            <a href="#" id="col_menu" title="Select Columns"><b data-icon="{{g.icons['admin'].char}}" class="ico {{g.icons['admin'].css}}"></b></a>
+            {{ g.icons['admin'].render(id='col_menu', title='Select Columns') }}
           </th>
         </tr>
       </thead>

http://git-wip-us.apache.org/repos/asf/allura/blob/1f52f23b/ForgeTracker/forgetracker/tracker_main.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tracker_main.py b/ForgeTracker/forgetracker/tracker_main.py
index ddf570d..8498275 100644
--- a/ForgeTracker/forgetracker/tracker_main.py
+++ b/ForgeTracker/forgetracker/tracker_main.py
@@ -364,7 +364,7 @@ class ForgeTrackerApp(Application):
         if pending_mod_count and has_access(discussion, 'moderate')():
             links.append(
                 SitemapEntry(
-                    'Moderate', discussion.url() + 'moderate', ui_icon=g.icons['pencil'],
+                    'Moderate', discussion.url() + 'moderate', ui_icon=g.icons['moderate'],
                     small=pending_mod_count))
 
         links += milestones

http://git-wip-us.apache.org/repos/asf/allura/blob/1f52f23b/ForgeWiki/forgewiki/templates/wiki/page_edit.html
----------------------------------------------------------------------
diff --git a/ForgeWiki/forgewiki/templates/wiki/page_edit.html b/ForgeWiki/forgewiki/templates/wiki/page_edit.html
index 4e9584b..5b3bada 100644
--- a/ForgeWiki/forgewiki/templates/wiki/page_edit.html
+++ b/ForgeWiki/forgewiki/templates/wiki/page_edit.html
@@ -32,9 +32,9 @@
 {% endblock %}
 
 {% block actions %}
-  <a href="." title="View Page"><b data-icon="{{g.icons['search'].char}}" class="ico {{g.icons['search'].css}}" title="View Page"></b></a>
+  {{ g.icons['eye'].render(href='.', title='View Page') }}
   {% if page_exists and h.has_access(page, 'delete')() %}
-    <a class="post-link" href="#" title="Delete"><b data-icon="{{g.icons['delete'].char}}" class="ico {{g.icons['delete'].css}}" title="Delete"></b></a>
+    {{ g.icons['delete'].render(extra_css='post-link') }}
     <div class="confirmation_dialog" style="display:none">
         <b class="ico ico-close close" data-icon="D"></b>
 

http://git-wip-us.apache.org/repos/asf/allura/blob/1f52f23b/ForgeWiki/forgewiki/templates/wiki/page_history.html
----------------------------------------------------------------------
diff --git a/ForgeWiki/forgewiki/templates/wiki/page_history.html b/ForgeWiki/forgewiki/templates/wiki/page_history.html
index 41ff4ba..d191337 100644
--- a/ForgeWiki/forgewiki/templates/wiki/page_history.html
+++ b/ForgeWiki/forgewiki/templates/wiki/page_history.html
@@ -24,7 +24,7 @@
 {% block header %}{{title}}{% endblock %}
 
 {% block actions %}
-  <a href="." title="View Page"><b data-icon="{{g.icons['search'].char}}" class="ico {{g.icons['search'].css}}" title="View Page"></b></a>
+  {{ g.icons['eye'].render(href='.', title='View Page') }}
 {% endblock %}
 
 {% block wiki_content %}
@@ -67,7 +67,7 @@
                 </p>
               </div>
             {% endif %}
-            <a href="./?version={{p.version}}"><b data-icon="{{g.icons['search'].char}}" class="ico {{g.icons['search'].css}}" title="View Revision"></b></a>
+            {{ g.icons['eye'].render(href='./?version={}'.format(p.version), title='View Revision') }}
           </td>
         </tr>
         {% set i = i+1 %}

http://git-wip-us.apache.org/repos/asf/allura/blob/1f52f23b/ForgeWiki/forgewiki/templates/wiki/page_view.html
----------------------------------------------------------------------
diff --git a/ForgeWiki/forgewiki/templates/wiki/page_view.html b/ForgeWiki/forgewiki/templates/wiki/page_view.html
index 7a6135e..6fdb1f7 100644
--- a/ForgeWiki/forgewiki/templates/wiki/page_view.html
+++ b/ForgeWiki/forgewiki/templates/wiki/page_view.html
@@ -42,11 +42,11 @@
 {% block actions %}
   {% if not page['deleted'] %}
     {% if c.user and c.user != c.user.anonymous() %}
-      <a href="edit" title="Edit"><b data-icon="{{g.icons['pencil'].char}}" class="ico {{g.icons['pencil'].css}}" title="Edit"></b>&nbsp;Edit</a>
+      {{ g.icons['edit'].render(href='edit', show_title=True) }}
     {% endif %}
-    <a href="history" title="History"><b data-icon="{{g.icons['history'].char}}" class="ico {{g.icons['history'].css}}" title="History"></b></a>
+      {{ g.icons['history'].render(href='history') }}
   {% elif h.has_access(page, 'delete')() %}
-    <a class="post-link" href="#" title="Undelete"><b data-icon="{{g.icons['undelete'].char}}" class="ico {{g.icons['undelete'].css}}" title="Undelete"></b></a>
+    {{ g.icons['undelete'].render(extra_css='post-link') }}
     <div class="confirmation_dialog" style="display:none">
         <b class="ico ico-close close" data-icon="D"></b>
         <h1>Confirm page restoration</h1>
@@ -64,8 +64,8 @@
   {% if c.user and c.user != c.user.anonymous() %}
     {{c.subscribe_form.display(value=page_subscribed, action='subscribe', style='icon')}}
   {% endif %}
-	<a href="feed" title="RSS"><b data-icon="{{g.icons['feed'].char}}" class="ico {{g.icons['feed'].css}}" title="Feed"></b></a>
-  <a href="../search" title="Search"><b data-icon="{{g.icons['search'].char}}" class="ico {{g.icons['search'].css}}" title="Search"></b></a>
+  {{ g.icons['feed'].render(href='feed', title='RSS') }}
+  {{ g.icons['search'].render(href='../search') }}
 {% endblock %}
 
 {% block wiki_content %}

http://git-wip-us.apache.org/repos/asf/allura/blob/1f52f23b/ForgeWiki/forgewiki/wiki_main.py
----------------------------------------------------------------------
diff --git a/ForgeWiki/forgewiki/wiki_main.py b/ForgeWiki/forgewiki/wiki_main.py
index 513b1e2..63de953 100644
--- a/ForgeWiki/forgewiki/wiki_main.py
+++ b/ForgeWiki/forgewiki/wiki_main.py
@@ -241,7 +241,7 @@ The wiki uses [Markdown](%s) syntax.
         if pending_mod_count and h.has_access(discussion, 'moderate')():
             links.append(
                 SitemapEntry(
-                    'Moderate', discussion.url() + 'moderate', ui_icon=g.icons['pencil'],
+                    'Moderate', discussion.url() + 'moderate', ui_icon=g.icons['moderate'],
                     small=pending_mod_count))
         if not c.user.is_anonymous():
             subscribed = M.Mailbox.subscribed()