Skip to content

Commit

Permalink
Made default new item menu customizable as a DemeSetting, and created…
Browse files Browse the repository at this point in the history
… the 'new other' page that contains all possible item types to create.
  • Loading branch information
mikemintz committed Oct 29, 2011
1 parent e437a91 commit 95146ce
Show file tree
Hide file tree
Showing 5 changed files with 63 additions and 27 deletions.
32 changes: 7 additions & 25 deletions deme_django/cms/templates/default_layout.html
Expand Up @@ -228,7 +228,6 @@ <h3>Permissions</h3>
<div style="position: fixed; top: 0px; left: 215px; right: 10px; height: 50px; padding: 10px; background: #fff; border: thin ridge gray; -moz-box-shadow: 5px 3px 3px #ccc; -webkit-box-shadow: 5px 3px 3px #ccc;box-shadow: px 3px 3px #ccc;">

<div style="float: right;">
{% new_item_menu %}
<a href="#" class="fg-button fg-button-icon-right ui-widget ui-state-default ui-corner-all poll" onclick="toggleNewItemMenu('HiddenNewItemMenu'); return false;"> Create </a>
{% if item %}
<div style="float: left;">
Expand Down Expand Up @@ -310,31 +309,14 @@ <h3>Permissions</h3>
</div>

<div class="HiddenMenu" id="HiddenNewItemMenu" style="position: fixed; top: 73px; left: 220px; right: 20px; height: 70px; padding: 10px; background: #fff; border: thin ridge gray; -moz-box-shadow: 5px 3px 3px #ccc; -webkit-box-shadow: 5px 3px 3px #ccc;box-shadow: px 3px 3px #ccc; display: none;">
<span style="float:left;">
<div class="create_image" id="createDocument" style="float:left; margin-right: 2em;">
<a href="#" class="img_link"><img src="{{'TextDocument'|icon_url:64}}" title="Create New Document" /> <p> New Document </p></a>
<div style="float:left;">
{% defaultcreateitemtypes %}
<div class="create_image" style="float: left; margin-right: 2em;">
<a href="{% url item_type_url viewer=create_item_viewer_name,action="new"%}" class="img_link"><img src="{{create_item_type|icon_url:64}}" title="Create new {% item_type_verbose_name create_item_type %}" />New {% item_type_verbose_name create_item_type %}</a>
</div>
<div class="create_image" id="createProject" style="float:left; margin-right: 2em;">
<a href="#" class="img_link"><img src="{{'Project'|icon_url:64}}" title="Create New Project" /> <p>New Project </p> </a>
</div>
<div class="create_image" id="createPoll" style="float:left; margin-right: 2em;">
<a href="#" class="img_link"><img src="{{'Poll'|icon_url:64}}" title="Create New Poll" /> <p> New Poll </p></a>
</div>
<div class="create_image" id="createGroup" style="float:left; margin-right: 2em;">
<a href="#" class="img_link"><img src="{{'Group'|icon_url:64}}" title="Create New Group" /> <p> New Group </p></a>
</div>
<div class="create_image" id="createEvent" style="float:left; margin-right: 2em;">
<a href="#" class="img_link"><img src="{{'Event'|icon_url:64}}" title="Create New Event" /> <p> New Event</p></a>
</div>
<div class="create_image" id="createImageDocument" style="float:left; margin-right: 2em;">
<a href="#" class="img_link"><img src="{{'ImageDocument'|icon_url:64}}" title="Upload an Image" /> <p> Upload an Image</p></a>
</div>
<div class="create_image" id="createFileDocument" style="float:left; margin-right: 2em;">
<a href="#" class="img_link"><img src="{{'FileDocument'|icon_url:64}}" title="Upload a File" /> <p> Upload a File</p></a>
</div>
<a href="#" class="fg-button fg-button-icon-right ui-widget ui-state-default ui-corner-all poll" style="margin-top: 20px;"> Other </a>

</span>
{% enddefaultcreateitemtypes %}
<a href="{% url item_type_url viewer="item",action="newother"%}" class="fg-button fg-button-icon-right ui-widget ui-state-default ui-corner-all poll" style="margin-top: 20px;">Other</a>
</div>

<span style="float:right; height: 5px; font-size: 20%;">
<a href="#" id="closebutton" onclick="toggleNewItemMenu('HiddenNewItemMenu'); return false;" class="fg-button ui-state-default fg-button-icon-solo ui-corner-all" title="Close"><span class="ui-icon ui-icon-close"></span> Close</a>
Expand Down
12 changes: 12 additions & 0 deletions deme_django/cms/templates/item/newother.html
@@ -0,0 +1,12 @@
{% extends layout %}
{% load item_tags %}
{% block content %}

{% for x in all_item_types_can_create %}
<div>
<a href="{{ x.url }}" class="img_link"><img src="{{x.item_type|icon_url:16}}" />New {% item_type_verbose_name x.item_type %}</a>
</div>
{% endfor %}

{% endblock content %}

36 changes: 34 additions & 2 deletions deme_django/cms/templatetags/item_tags.py
Expand Up @@ -2057,8 +2057,6 @@ def write_fragment(start_tag, end_tag, text):
result = u''.join(html)
return mark_safe(result)



@register.tag
def displaydiff(parser, token):
bits = list(token.split_contents())
Expand All @@ -2074,3 +2072,37 @@ def displaydiff(parser, token):
nodelist_same = template.NodeList()
return DisplayDiff(bits[1], bits[2], bits[3], nodelist_different, nodelist_same)


class DefaultCreateItemTypes(template.Node):
def __init__(self, nodelist):
self.nodelist = nodelist

def __repr__(self):
return "<DefaultCreateItemTypesNode>"

def render(self, context):
result = []
item_type_names_string = DemeSetting.get("cms.default_create_item_types") or ""
item_type_names = item_type_names_string.split(",")
item_types = [get_item_type_with_name(x.strip(), case_sensitive=False) for x in item_type_names]
item_types = [x for x in item_types if x]
item_types = [x for x in item_types if agentcan_global_helper(context, 'create %s' % x.__name__)]
for create_item_type in item_types:
context.update({
'create_item_type': create_item_type,
'create_item_viewer_name': create_item_type.__name__.lower()
})
result.append(self.nodelist.render(context))
context.pop()
return mark_safe(u'\n'.join(result))

@register.tag
def defaultcreateitemtypes(parser, token):
bits = list(token.split_contents())
if len(bits) != 1:
raise template.TemplateSyntaxError, "%r takes no arguments" % bits[0]
end_tag = 'end' + bits[0]
nodelist = parser.parse((end_tag,))
token = parser.next_token()
return DefaultCreateItemTypes(nodelist)

8 changes: 8 additions & 0 deletions deme_django/cms/views.py
Expand Up @@ -347,6 +347,14 @@ def item_pubdate(self, item):
return item.created_at
return django.contrib.syndication.views.feed(self.request, 'item_list', {'item_list': ItemListFeed})

def type_newother_html(self):
self.context['action_title'] = u'New'
sorted_item_types = sorted(all_item_types(), key=lambda x: x._meta.verbose_name_plural.lower())
all_item_types_can_create = [{'item_type': x, 'url': reverse('item_type_url', kwargs={'viewer': x.__name__.lower(), 'action': 'new'})} for x in sorted_item_types if self.cur_agent_can_global('create %s' % x.__name__)]
self.context['all_item_types_can_create'] = all_item_types_can_create
template = loader.get_template('item/newother.html')
return HttpResponse(template.render(self.context))

def type_new_html(self, form=None):
self.context['action_title'] = u'New %s' % self.accepted_item_type._meta.verbose_name
if not self.cur_agent_can_global('create %s' % self.accepted_item_type.__name__):
Expand Down
2 changes: 2 additions & 0 deletions deme_django/script/create_initial_data.py
Expand Up @@ -71,6 +71,8 @@

print 'Test stuff...'

DemeSetting.set("cms.default_create_item_types", "TextDocument,Project,Poll,Group,Event,ImageDocument,FileDocument", admin)

# Set the default layout
default_layout_code = open(os.path.join(os.path.dirname(__file__), '..', 'cms', 'templates', 'default_layout.html')).read()
default_layout = DjangoTemplateDocument(override_default_layout=True, name='Deme Layout', body=default_layout_code)
Expand Down

0 comments on commit 95146ce

Please sign in to comment.