Exemplo n.º 1
0
    def __init__(self, bone, widgetFactory: callable, **kwargs):
        # language=HTML
        super().__init__("""
			<div [name]="widgets" class="vi-bone-widgets"></div>
			<div [name]="actions" class="vi-bone-actions input-group"></div>
		""")

        languages = bone.skelStructure[bone.boneName]["languages"]
        assert languages, "This parameter must not be empty!"

        self.bone = bone
        self.languages = languages
        self._languageWidgets = {}

        # Create widget for every language
        for lang in self.languages:
            assert not any([ch in lang for ch in "<>\"'/"
                            ]), "This is not a valid language identifier!"

            langBtn = Button(lang, callback=self.onLangBtnClick)
            langBtn.addClass("btn--lang", "btn--lang-" + lang)

            if lang == conf["defaultLanguage"]:
                langBtn.addClass("is-active")

            self.actions.appendChild(langBtn)

            kwargs["language"] = lang
            langWidget = widgetFactory(self.bone, **kwargs)

            if lang != conf["defaultLanguage"]:
                langWidget.hide()

            self.widgets.appendChild(langWidget)

            self._languageWidgets[lang] = (langBtn, langWidget)
Exemplo n.º 2
0
class ExportCsvStarter(html5.ext.Popup):
    def __init__(self, widget, *args, **kwargs):
        super(ExportCsvStarter, self).__init__(title=translate("CSV Export"))

        self.widget = widget

        if "viur.defaultlangsvalues" in conf["server"].keys():
            self.langSelect = html5.Select()
            self.langSelect.addClass("select")
            self.langSelect["id"] = "lang-select"

            lbl = html5.Label(translate("Language selection"))
            lbl.addClass("label")
            lbl["for"] = "lang-select"

            div = html5.Div()
            div.appendChild(lbl)
            div.appendChild(self.langSelect)
            div.addClass("input-group")

            self.popupBody.appendChild(div)

            for key, value in conf["server"]["viur.defaultlangsvalues"].items(
            ):
                opt = html5.Option()
                opt["value"] = key
                opt.appendChild(html5.TextNode(value))

                if key == conf["currentLanguage"]:
                    opt["selected"] = True

                self.langSelect.appendChild(opt)
        else:
            self.langSelect = None

        # Encoding
        self.encodingSelect = html5.Select()
        self.encodingSelect.addClass("select")
        self.encodingSelect["id"] = "encoding-select"

        lbl = html5.Label(translate("Encoding"))
        lbl.addClass("label")
        lbl["for"] = "encoding-select"

        div = html5.Div()
        div.appendChild(lbl)
        div.appendChild(self.encodingSelect)
        div.addClass("input-group")

        self.popupBody.appendChild(div)

        for i, (k, v) in enumerate([("iso-8859-15", "ISO-8859-15"),
                                    ("utf-8", "UTF-8")]):
            opt = html5.Option()
            opt["value"] = k

            if i == 0:
                opt["selected"] = True

            opt.appendChild(html5.TextNode(v))
            self.encodingSelect.appendChild(opt)

        self.cancelBtn = Button(translate("Cancel"),
                                self.close,
                                icon="icons-cancel")
        self.popupFoot.appendChild(self.cancelBtn)

        self.exportBtn = Button(translate("Export"),
                                self.onExportBtnClick,
                                icon="icons-download-file")
        self.exportBtn.addClass("btn--edit")
        self.popupFoot.appendChild(self.exportBtn)

    def onExportBtnClick(self, *args, **kwargs):
        encoding = self.encodingSelect["options"].item(
            self.encodingSelect["selectedIndex"]).value

        if self.langSelect:
            language = self.langSelect["options"].item(
                self.langSelect["selectedIndex"]).value
        else:
            language = None

        ExportCsv(self.widget,
                  self.widget.getCurrentSelection(),
                  encoding=encoding,
                  language=language)
        self.close()
Exemplo n.º 3
0
class SelectFieldsPopup(html5.ext.Popup):
    def __init__(self, listWdg, *args, **kwargs):
        if not listWdg._structure:
            return

        super(SelectFieldsPopup,
              self).__init__(title=translate("Select fields"), *args, **kwargs)

        self.removeClass("popup--center")
        self.addClass("popup--n popup--selectfields")
        self.listWdg = listWdg
        self.checkboxes = []

        ul = html5.Ul()
        ul.addClass("option-group")
        self.popupBody.appendChild(ul)

        for key, bone in self.listWdg._structure:
            li = html5.Li()
            li.addClass("check")

            ul.appendChild(li)

            chkBox = html5.Input()
            chkBox.addClass("check-input")
            chkBox["type"] = "checkbox"
            chkBox["value"] = key

            li.appendChild(chkBox)
            self.checkboxes.append(chkBox)

            if key in self.listWdg.getFields():
                chkBox["checked"] = True
            lbl = html5.Label(bone["descr"], forElem=chkBox)
            lbl.addClass("check-label")
            li.appendChild(lbl)

        # Functions for Selection
        div = html5.Div()
        div["class"].append("selectiontools input-group")

        self.popupBody.appendChild(div)

        self.selectAllBtn = Button(translate("Select all"),
                                   callback=self.doSelectAll)
        self.selectAllBtn["class"].append("btn--selectall")
        self.unselectAllBtn = Button(translate("Unselect all"),
                                     callback=self.doUnselectAll)
        self.unselectAllBtn["class"].append("btn--unselectall")
        self.invertSelectionBtn = Button(translate("Invert selection"),
                                         callback=self.doInvertSelection)
        self.invertSelectionBtn["class"].append("btn--selectinvert")

        div.appendChild(self.selectAllBtn)
        div.appendChild(self.unselectAllBtn)
        div.appendChild(self.invertSelectionBtn)

        # Function for Commit
        self.cancelBtn = Button(translate("Cancel"), callback=self.doCancel)
        self.cancelBtn.addClass("btn btn--danger")

        self.applyBtn = Button(translate("Apply"), callback=self.doApply)
        self.applyBtn.addClass("btn btn--primary")

        self.popupFoot.appendChild(self.cancelBtn)
        self.popupFoot.appendChild(self.applyBtn)

    def doApply(self, *args, **kwargs):
        self.applyBtn.addClass("is-loading")
        self.applyBtn["icon"] = "icons-loader"
        self.applyBtn["disabled"] = True

        res = []
        for c in self.checkboxes:
            if c["checked"]:
                res.append(c["value"])

        if not res:
            html5.ext.Alert(
                translate("You have to select at least on field to continue!"))
            return

        self.applyBtn["class"].append("is_loading")
        self.applyBtn["disabled"] = True

        DeferredCall(self.listWdg.setFields,
                     res,
                     _delay=100,
                     _callback=self.doSetFields)
        #self.listWdg.setFields( res )
        #self.applyBtn.resetIcon()
        #self.close()

    def doSetFields(self, *args, **kwargs):
        self.applyBtn.resetIcon()
        self.close()

    def doCancel(self, *args, **kwargs):
        self.close()

    def doSelectAll(self, *args, **kwargs):
        for cb in self.checkboxes:
            if cb["checked"] == False:
                cb["checked"] = True

    def doUnselectAll(self, *args, **kwargs):
        for cb in self.checkboxes:
            if cb["checked"] == True:
                cb["checked"] = False

    def doInvertSelection(self, *args, **kwargs):
        for cb in self.checkboxes:
            if cb["checked"] == False:
                cb["checked"] = True
            else:
                cb["checked"] = False