def testSelectedSkinHasProperCSSClass(self): st = getToolByName(self.folder, "portal_skins") skins = st.getSkinSelections() actions = self.menu.getMenuItems(self.folder, self.request) action = [a for a in actions if a["title"] == skins[0]][0] self.assertEqual("actionMenu", action["extra"]["class"]) set_selected_default_skin(self.folder, skins[0]) self.assertEqual(skins[0], get_selected_default_skin(self.folder)) actions = self.menu.getMenuItems(self.folder, self.request) action = [a for a in actions if a["title"] == skins[0]][0] self.assertEqual("actionMenuSelected", action["extra"]["class"])
def update(self): """Set selected skin as the default for the current folder.""" context = aq_inner(self.context) utils = getToolByName(context, "plone_utils") # Which skin is requested? skin_name = self.request.form.get("skin_name", None) if skin_name is not None: skins_tool = getToolByName(context, 'portal_skins') if skin_name not in skins_tool.getSkinSelections(): skin_name = None # Which skin is currently used as default skin, if any? current_skin = get_selected_default_skin(context) # Determine what needs to be done, and create or remove a # local site hook when needed. if skin_name is None and current_skin is None: utils.addPortalMessage(_(u"Nothing changed.")) elif skin_name == current_skin: utils.addPortalMessage(_(u"Nothing changed.")) elif skin_name is None and current_skin is not None: # Need to remove the hook. utils.addPortalMessage(_(u"No default skin selected anymore.")) remove_hook(context) else: # The normal case: a change to the default skin. utils.addPortalMessage(_(u"Skin changed.")) add_hook(context) # Finally set the default skin. Note that this is safe to # call when skin_name is None as well, as this cleans up a # possible earlier setting. set_selected_default_skin(context, skin_name) return self.request.RESPONSE.redirect(context.absolute_url())