"""A file handler for Cioset XML files."""
from os.path import join, dirname, normpath
from ciowarehouse.lib.handler import LAYOUT_VIEW_PT, LAYOUT_EDIT_PT
from ciowarehouse.lib.handler import CHRYSALIO_JS
from cioprocessor.relaxng import RELAXNG_CIOSET
from ..handler_xml import HANDLER_XML_CSS, CODEMIRROR_CSS
from ...lib.i18n import _, translate
from ...lib.cioset import cioset_update
from ..handler_xml import HandlerXml
from .panel_cioset import PanelCioset
CIOSET_CSS = ('/cioxml/css/handler_cioset.css',)
CIOSET_JS = ('/js/jquery-ui.js', '/cioxml/js/cioset.js')
CIOSET_MASK_CSS = ('/cioxml/css/handler_cioset_mask.css',)
CIOSET_CXE_CSS = ('/cioxml/css/handler_cioset_cxe.css',)
CIOSET_CXE_JS = ('/cioxml/js/cxe4cioset.js',)
CODEMIRROR_JS = ('/cioxml/js/cm4cioset.js',)
IMAGE_PATHS = ('{directory}',)
FILE_PATHS = ('{directory}',)
# =============================================================================
[docs]def includeme(configurator):
"""Function to include WBWarehouse a handler.
:type configurator: pyramid.config.Configurator
:param configurator:
Object used to do configuration declaration within the application.
"""
HandlerXml.register(configurator, HandlerCioset)
# =============================================================================
[docs]class HandlerCioset(HandlerXml):
"""Class to manage a Cioset XML file."""
uid = 'cioset'
label = _('Cioset XML file handling')
extensions = ('.cioset',)
seeds = {
'cioset': (
'/cioxml/images/seed_cioset.png', _('Assembly'),
join('Seeds', 'cioset.cioset'))}
viewings = (
{'name': 'preview', 'label': _('Preview'),
'template': LAYOUT_VIEW_PT,
'css': CIOSET_CSS,
'js': CHRYSALIO_JS + CIOSET_JS,
'xsl': join('Xsl', 'cioset_preview.xsl'),
'image_paths': IMAGE_PATHS},
{'name': 'xml', 'label': _('XML'),
'template': LAYOUT_VIEW_PT,
'css': HANDLER_XML_CSS,
'js': CHRYSALIO_JS})
editings = (
{'name': 'cxe', 'label': _('Wysiwym'),
'template': LAYOUT_EDIT_PT,
'css': CIOSET_CXE_CSS,
'js': CHRYSALIO_JS + CIOSET_CXE_JS,
'xsl': (join('Xsl', 'cioset_cxe_in.xsl'),
join('Xsl', 'cioset_cxe_out.xsl')),
'regex': (None, join('Regex', 'cioset_cxe_out.regex')),
'image_paths': IMAGE_PATHS,
'file_paths': FILE_PATHS},
# {'name': 'mask', 'label': _('Mask'),
# 'template': LAYOUT_EDIT_PT,
# 'css': CIOSET_MASK_CSS,
# 'js': CHRYSALIO_JS + CIOSET_JS,
# 'xsl': join('Xsl', 'cioset_mask.xsl'),
# 'image_paths': IMAGE_PATHS},
{'name': 'xml', 'label': _('XML'),
'template': LAYOUT_EDIT_PT,
'css': CODEMIRROR_CSS,
'js': CHRYSALIO_JS + CODEMIRROR_JS})
thumbnailing = {
'css': normpath(join(
dirname(__file__), '..', '..', 'Static', 'Css',
'handler_cioset.css')),
'xsl': join('Xsl', 'cioset_thumbnail.xsl')}
panel = PanelCioset
relaxng = RELAXNG_CIOSET
class_xpath = '/*/@class'
_home = dirname(__file__)
# -------------------------------------------------------------------------
def _save_mask(self, request, warehouse, path, original, values, go_on):
"""Update XML according to a mask.
See: :meth:`cioxml.handlers.handler_xml.HandlerXml._save_mask`
"""
# pylint: disable = too-many-arguments
# Update XML
updated = cioset_update(original, values)
if updated is None:
return translate(_('Cannot be updated!'), request=request)
# Validate and save XML
return super(HandlerCioset, self)._save_mask(
request, warehouse, path, updated, values, go_on)
# -------------------------------------------------------------------------
@classmethod
def _edit_cxe_i18n(cls, request):
"""Return a string of data-i18n_* attributes for translations in
CioXmlEditor.
See: :meth:.handlers.handler_xml.HandlerXml._edit_cse_i18n
"""
return '{data}'\
' data-i18n_tag_title_head="{tag_title_head}"'\
' data-i18n_tag_picture="{tag_picture}"'\
' data-i18n_files="{files}"'\
' data-i18n_assembly="{assembly}"'\
' data-i18n_defines="{defines}"'\
' data-i18n_tag_define="{tag_define}"'\
' data-i18n_tag_define_files="{tag_define_files}"'\
' data-i18n_tag_define_text_files="{tag_define_text_files}"'\
' data-i18n_tag_define_boolean_files="{tag_define_boolean_files}"'\
' data-i18n_tag_define_list_files="{tag_define_list_files}"'\
' data-i18n_attr_name="{attr_name}"'\
' data-i18n_attr_type="{attr_type}"'\
' data-i18n_options_list="{options_list}"'\
' data-i18n_tag_division="{tag_division}"'\
' data-i18n_tag_define_division="{tag_define_division}"'\
' data-i18n_tag_define_text_division="{tag_define_text_division}"'\
' data-i18n_tag_define_boolean_division="{tag_define_bool_div}"'\
' data-i18n_tag_define_list_division="{tag_define_list_division}"'\
' data-i18n_tag_title_division="{tag_title_division}"'\
' data-i18n_tag_file="{tag_file}"'\
' data-i18n_tag_title_file="{tag_title_file}"'\
' data-i18n_tag_define_file="{tag_define_file}"'\
' data-i18n_tag_define_text_file="{tag_define_text_file}"'\
' data-i18n_tag_define_boolean_file="{tag_define_boolean_file}"'\
' data-i18n_tag_define_list_file="{tag_define_list_file}"'\
' data-i18n_tag_path="{tag_path}"'\
' data-i18n_resources="{resources}"'\
' data-i18n_tag_resources="{tag_resources}"'\
' data-i18n_tag_resource="{tag_resource}"'\
' data-i18n_copies="{copies}"'\
' data-i18n_tag_copies="{tag_copies}"'\
' data-i18n_tag_copy="{tag_copy}"'\
' data-i18n_values="{values}"'\
' data-i18n_tag_values="{tag_values}"'\
' data-i18n_tag_value="{tag_value}"'\
' data-i18n_tag_value_text="{tag_value_text}"'\
' data-i18n_tag_value_boolean="{tag_value_boolean}"'\
' data-i18n_tag_value_list="{tag_value_list}"'\
' data-i18n_attr_src="{attr_src}"'\
' data-i18n_attr_for="{attr_for}"'.format(
data=HandlerXml._edit_cxe_i18n(request),
tag_title_head=translate(_('Assembly title'), request=request),
tag_picture=translate(_('Cover'), request=request),
files=translate(_('Files'), request=request),
assembly=translate(_('Assembly: '), request=request),
defines=translate(_('Constants'), request=request),
tag_define=translate(_('Constant'), request=request),
tag_define_files=translate(
_('Global constant'), request=request),
tag_define_text_files=translate(
_('Global text constant'), request=request),
tag_define_boolean_files=translate(
_('Global boolean constant'), request=request),
tag_define_list_files=translate(
_('Global constant from a list'), request=request),
attr_name=translate(_('name'), request=request),
attr_type=translate(_('type'), request=request),
options_list=translate(
_('‖ separated options'), request=request),
tag_division=translate(
_('Division (Ctrl- above, Shift- sub-division)'),
request=request),
tag_define_division=translate(
_('Division constant'), request=request),
tag_define_text_division=translate(
_('Division text constant'), request=request),
tag_define_bool_div=translate(
_('Division boolean constant'), request=request),
tag_define_list_division=translate(
_('Division constant from a list'), request=request),
tag_title_division=translate(
_('Division title'), request=request),
tag_file=translate(_('File'), request=request),
tag_define_file=translate(_('File constant'), request=request),
tag_define_text_file=translate(
_('File text constant'), request=request),
tag_define_boolean_file=translate(
_('File boolean constant'), request=request),
tag_define_list_file=translate(
_('File constant from a list'), request=request),
tag_title_file=translate(_('File title'), request=request),
tag_path=translate(_('File path'), request=request),
resources=translate(_('Resources'), request=request),
tag_resources=translate(
_('Group of resources'), request=request),
tag_resource=translate(_('Resource'), request=request),
copies=translate(_('Copies'), request=request),
tag_copies=translate(_('Groupe of copies'), request=request),
tag_copy=translate(_('Copy'), request=request),
values=translate(_('Values'), request=request),
tag_values=translate(_('Group of values'), request=request),
tag_value=translate(_('Value'), request=request),
tag_value_text=translate(_('Text value'), request=request),
tag_value_boolean=translate(
_('Boolean value'), request=request),
tag_value_list=translate(
_('Value from a list'), request=request),
attr_src=translate(_('Source'), request=request),
attr_for=translate(_('For'), request=request))