Skip to content

Commit

Permalink
Merge 878b6bc into 69cacec
Browse files Browse the repository at this point in the history
  • Loading branch information
vxsx committed Jul 21, 2017
2 parents 69cacec + 878b6bc commit 9f92dfc
Show file tree
Hide file tree
Showing 89 changed files with 4,236 additions and 4,525 deletions.
406 changes: 210 additions & 196 deletions .eslintrc.js

Large diffs are not rendered by default.

5 changes: 2 additions & 3 deletions .travis.yml
Expand Up @@ -65,11 +65,10 @@ before_install:

install:
- if [ "$UNIT" != 1 ] && [ "$LINT" != 1 ]; then pip install -r "test_requirements/django-$DJANGO.txt"; pip freeze; fi
- if [ "$FRONTEND" == 1 ] && [ "$ONLY_DOCS" != 0 ]; then nvm install 0.12.7 && nvm use 0.12.7; fi
- if [ "$FRONTEND" == 1 ] && [ "$ONLY_DOCS" != 0 ]; then nvm install 6 && nvm use 6; fi
# Disable the spinner, it looks bad on Travis
- if [ "$FRONTEND" == 1 ] && [ "$ONLY_DOCS" != 0 ]; then npm config set spin false; fi
- if [ "$FRONTEND" == 1 ] && [ "$ONLY_DOCS" != 0 ]; then npm install -g npm@2; fi
- if [ "$FRONTEND" == 1 ] && [ "$ONLY_DOCS" != 0 ]; then npm install -g gulp@3.9.0; fi
- if [ "$FRONTEND" == 1 ] && [ "$ONLY_DOCS" != 0 ]; then npm install -g gulp@3.9.1; fi
- if [ "$FRONTEND" == 1 ] && [ "$ONLY_DOCS" != 0 ]; then scripts/install-npm-dependencies.sh; fi
- if [ "$UNIT" != 1 ] && [ "$LINT" != 1 ] && [ "$DATABASE_URL" == 'postgres://postgres@127.0.0.1/djangocms_test' ]; then pip install psycopg2 ; fi
- if [ "$UNIT" != 1 ] && [ "$LINT" != 1 ] && [ "$DATABASE_URL" == 'mysql://root@127.0.0.1/djangocms_test' ]; then pip install mysqlclient ; fi
Expand Down
8 changes: 7 additions & 1 deletion cms/admin/settingsadmin.py
Expand Up @@ -87,8 +87,14 @@ def get_toolbar(self, request):
if attached_obj and current_page and not (attached_obj == current_page):
return HttpResponseBadRequest('Generic object does not match current page')

data = QueryDict(query_string=origin_url.query, mutable=True)
placeholders = request.GET.getlist("placeholders[]")

if placeholders:
data.setlist('placeholders[]', placeholders)

request = copy.copy(request)
request.GET = QueryDict(query_string=origin_url.query)
request.GET = data
request.current_page = current_page
request.toolbar = CMSToolbar(request, request_path=origin_url.path)
request.toolbar.set_object(attached_obj or current_page)
Expand Down
117 changes: 42 additions & 75 deletions cms/cms_toolbars.py
Expand Up @@ -48,81 +48,21 @@
REMOVE_PAGE_LANGUAGE_BREAK = "Remove page language Break"
COPY_PAGE_LANGUAGE_BREAK = "Copy page language Break"
TOOLBAR_DISABLE_BREAK = 'Toolbar disable Break'


class ToolbarBase(CMSToolbar):

def init_from_request(self):
self.page = get_page_draft(self.request.current_page)

def init_placeholders(self):
request = self.request
toolbar = self.toolbar

if request.method == 'GET':
is_api_call = 'placeholders[]' in request.GET and request.is_ajax()
else:
is_api_call = False

if is_api_call:
# AJAX request to reload page structure
placeholder_ids = request.GET.getlist("placeholders[]")
self.placeholders = Placeholder.objects.filter(pk__in=placeholder_ids)
self.statics = StaticPlaceholder.objects.filter(
Q(draft__in=placeholder_ids)|Q(public__in=placeholder_ids)
)
return

if toolbar.structure_mode_active and not toolbar.uses_legacy_structure_mode:
# User has explicitly requested structure mode
# and the object (page, blog, etc..) allows for the non-legacy structure mode
renderer = toolbar.structure_renderer
else:
renderer = toolbar.get_content_renderer()
self.editable_placeholders = renderer.get_rendered_editable_placeholders()
self.statics = renderer.get_rendered_static_placeholders()

def populate(self):
self.init_from_request()

def post_template_populate(self):
self.init_placeholders()
SHORTCUTS_BREAK = 'Shortcuts Break'


@toolbar_pool.register
class PlaceholderToolbar(ToolbarBase):
class PlaceholderToolbar(CMSToolbar):
"""
Adds placeholder edit buttons if placeholders or static placeholders are detected in the template
"""

def populate(self):
self.page = get_page_draft(self.request.current_page)

def post_template_populate(self):
super(PlaceholderToolbar, self).post_template_populate()
self.add_wizard_button()
self.add_structure_mode()

def add_structure_mode(self):
if self.page and not self.page.application_urls:
if page_permissions.user_can_change_page(self.request.user, page=self.page):
return self.add_structure_mode_item()

elif any(ph for ph in self.editable_placeholders if ph.has_change_permission(self.request.user)):
return self.add_structure_mode_item()

for sp in self.statics:
if sp.has_change_permission(self.request):
return self.add_structure_mode_item()

def add_structure_mode_item(self, extra_classes=('cms-toolbar-item-cms-mode-switcher',)):
structure_active = self.toolbar.structure_mode_active
edit_mode_active = (not structure_active and self.toolbar.edit_mode_active)
build_url = '{}?{}'.format(self.toolbar.request_path, get_cms_setting('CMS_TOOLBAR_URL__BUILD'))
edit_url = '{}?{}'.format(self.toolbar.request_path, get_cms_setting('CMS_TOOLBAR_URL__EDIT_ON'))

if self.request.user.has_perm("cms.use_structure"):
switcher = self.toolbar.add_button_list('Mode Switcher', side=self.toolbar.RIGHT,
extra_classes=extra_classes)
switcher.add_button(_('Structure'), build_url, active=structure_active, disabled=False)
switcher.add_button(_('Content'), edit_url, active=edit_mode_active, disabled=False)

def add_wizard_button(self):
from cms.wizards.wizard_pool import entry_choices
Expand Down Expand Up @@ -209,6 +149,9 @@ def add_admin_menu(self):
# Disable toolbar
self._admin_menu.add_link_item(_('Disable toolbar'), url='?%s' % get_cms_setting('CMS_TOOLBAR_URL__DISABLE'))
self._admin_menu.add_break(TOOLBAR_DISABLE_BREAK)
self._admin_menu.add_link_item(_('Shortcuts...'), url='#',
extra_classes=('cms-show-shortcuts',))
self._admin_menu.add_break(SHORTCUTS_BREAK)

# logout
self.add_logout_button(self._admin_menu)
Expand Down Expand Up @@ -268,17 +211,10 @@ def get_username(self, user=None, default=''):


@toolbar_pool.register
class PageToolbar(ToolbarBase):
class PageToolbar(CMSToolbar):
_changed_admin_menu = None
watch_models = [Page]

# Helpers

def init_from_request(self):
super(PageToolbar, self).init_from_request()
self.title = self.get_title()
self.permissions_activated = get_cms_setting('PERMISSION')

def init_placeholders(self):
request = self.request
toolbar = self.toolbar
Expand All @@ -295,6 +231,7 @@ def init_placeholders(self):
self.statics = StaticPlaceholder.objects.filter(
Q(draft__in=placeholder_ids) | Q(public__in=placeholder_ids)
)
self.dirty_statics = [sp for sp in self.statics if sp.dirty]
return

if toolbar.structure_mode_active and not toolbar.uses_legacy_structure_mode:
Expand All @@ -303,10 +240,37 @@ def init_placeholders(self):
renderer = toolbar.structure_renderer
else:
renderer = toolbar.get_content_renderer()

self.placeholders = renderer.get_rendered_placeholders()
self.statics = renderer.get_rendered_static_placeholders()
self.dirty_statics = [sp for sp in self.statics if sp.dirty]

def add_structure_mode(self):
if self.page and not self.page.application_urls:
if page_permissions.user_can_change_page(self.request.user, page=self.page):
return self.add_structure_mode_item()

elif any(ph for ph in self.placeholders if ph.has_change_permission(self.request.user)):
return self.add_structure_mode_item()

for sp in self.statics:
if sp.has_change_permission(self.request):
return self.add_structure_mode_item()

def add_structure_mode_item(self, extra_classes=('cms-toolbar-item-cms-mode-switcher',)):
structure_active = self.toolbar.structure_mode_active
edit_mode_active = (not structure_active and self.toolbar.edit_mode_active)
build_url = '{}?{}'.format(self.toolbar.request_path, get_cms_setting('CMS_TOOLBAR_URL__BUILD'))
edit_url = '{}?{}'.format(self.toolbar.request_path, get_cms_setting('CMS_TOOLBAR_URL__EDIT_ON'))

if self.request.user.has_perm("cms.use_structure"):
switcher = self.toolbar.add_button_list('Mode Switcher', side=self.toolbar.RIGHT,
extra_classes=extra_classes)
switcher.add_button(_('Structure'), build_url, active=structure_active, disabled=False,
extra_classes='cms-structure-btn')
switcher.add_button(_('Content'), edit_url, active=edit_mode_active, disabled=False,
extra_classes='cms-content-btn')

def get_title(self):
try:
return Title.objects.get(page=self.page, language=self.current_lang, publisher_is_draft=True)
Expand Down Expand Up @@ -373,15 +337,18 @@ def get_on_delete_redirect_url(self):
# Populate

def populate(self):
super(PageToolbar, self).populate()
self.page = get_page_draft(self.request.current_page)
self.title = self.get_title()
self.permissions_activated = get_cms_setting('PERMISSION')
self.change_admin_menu()
self.add_page_menu()
self.change_language_menu()

def post_template_populate(self):
super(PageToolbar, self).post_template_populate()
self.init_placeholders()
self.add_draft_live()
self.add_publish_button()
self.add_structure_mode()

def has_dirty_objects(self):
language = self.current_lang
Expand Down
2 changes: 1 addition & 1 deletion cms/static/cms/css/3.4.3/cms.base.css

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion cms/static/cms/css/3.4.3/cms.pagetree.css

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion cms/static/cms/css/3.4.3/cms.welcome.css

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Binary file modified cms/static/cms/fonts/3.4.3/django-cms-iconfont.eot
Binary file not shown.

0 comments on commit 9f92dfc

Please sign in to comment.