コード例 #1
0
    def log(self, type, msg, icon=None, date=None):
        """
			Adds a message to the log
			:param type: The type of the message.
			:type type: "success", "error", "warning", "info", "progress"
			:param msg: The message to append
			:type msg: str
		"""
        assert type in ["success", "error", "warning", "info", "progress"]

        msgWrap = html5.Li()
        msgWrap.addClass("msg--" + type, "msg", "is-active")
        msgWrap.addClass("is-new popup popup--s")

        if icon:
            svg = embedsvg.get(icon)
        else:
            svg = embedsvg.get("icons-%s" % type)

        if not svg:
            svg = embedsvg.get("icons-message-news")

        if svg:
            msgWrap.element.innerHTML = svg + msgWrap.element.innerHTML

        msgContent = html5.Div()
        msgContent.addClass("msg-content")
        msgWrap.appendChild(msgContent)
        if not date:
            adate = datetime.now().strftime("%d. %b. %Y, %H:%M:%S")
        else:
            adate = date
        msgDate = html5.Span()
        msgDate.appendChild(html5.TextNode(adate))
        msgDate.addClass("msg-date")
        msgContent.appendChild(msgDate)

        if isinstance(msg, html5.Widget):
            #Append that widget directly
            msgContent.appendChild(msg)

        else:
            #Create a span element for that message
            msgDescr = html5.Span()
            msgDescr.appendChild(html5.TextNode(html5.utils.unescape(msg)))
            msgDescr.addClass("msg-descr")
            msgContent.appendChild(msgDescr)

        DeferredCall(self.removeNewCls, msgWrap, _delay=2500)
        self.logUL.appendChild(msgWrap)

        if len(self.logUL._children) > 1:
            self.logUL.element.removeChild(msgWrap.element)
            self.logUL.element.insertBefore(
                msgWrap.element, self.logUL.element.children.item(0))
コード例 #2
0
    def invoke(self):
        self.iconnav.removeAllChildren()

        newBtn = html5.A()
        newBtn["href"] = "https://www.viur.is"
        newBtn["target"] = "_blank"
        newBtn.addClass("btn")
        svg = embedsvg.get("icons-ribbon")
        if svg:
            newBtn.element.innerHTML = svg + newBtn.element.innerHTML
        newBtn.appendChild(translate("vi.topbar.newbtn"))
        #self.iconnav.appendChild(newBtn)

        newMarker = html5.Span()
        newMarker.addClass("marker")
        newMarker.appendChild(translate("vi.topbar.new"))
        newBtn.appendChild(newMarker)

        for icon in conf["toplevelactions"]:
            widget = toplevelActionSelector.select(icon)
            # register log Button as Loghandler
            if widget == LogButton:
                conf["mainWindow"].logWdg = widget()
                self.iconnav.appendChild(conf["mainWindow"].logWdg)
            elif widget:
                self.iconnav.appendChild(widget())
コード例 #3
0
    def __init__(self):
        super(TopBarWidget, self).__init__()

        self["class"] = "vi-topbar bar"

        self.sinkEvent("onClick")

        # language=HTML
        self.fromHTML("""
			<div class="vi-tb-left bar-group bar-group--left" [name]="topbarLeft">
				<div class="vi-tb-logo" [name]="topbarLogo"></div>
				<h1 class="vi-tb-title" [name]="moduleH1"></h1>
				<div class="item" [name]="moduleContainer">
					<div [name]="modulImg"></div>
					<div class="item-content" [name]="moduleName"></div>
				</div>
			</div>
			<nav class="vi-tb-right bar-group bar-group--right" [name]="topbarRight">
				<div class="input-group input-group--bar" [name]="iconnav">
				</div>
			</nav>
		""")

        if not conf["theApp"].isFramed:
            svg = embedsvg.get("logos-vi")
            if svg:
                self.topbarLogo.element.innerHTML = svg + self.topbarLogo.element.innerHTML
        else:
            self.topbarLogo.hide()
            self.moduleH1.hide()

        DeferredCall(self.setTitle, _delay=500)
コード例 #4
0
ファイル: accordion.py プロジェクト: przybyla86/viur-vi
    def __init__(self, ident, title=None):
        super(AccordionSegment, self).__init__()
        self.sinkEvent("onClick")

        self.addClass("vi-accordion-segment")
        self["name"] = ident

        legend = html5.Legend()
        legend.addClass("vi-accordion-legend")
        self.appendChild(legend)

        self.title = html5.Span()
        embedSvg = embedsvg.get("icons-arrow-right")
        if embedSvg:
            self.title.element.innerHTML = embedSvg
        self.title.appendChild(html5.TextNode(title or ident))
        self.title.addClass("vi-accordion-title")
        self.title["role"] = "button"
        legend.appendChild(self.title)

        # icon = html5.Div()
        # icon.addClass("vi-accordion-icon")
        # self.title.appendChild()

        self._section = html5.Section()
        self._section.addClass("vi-accordion-section")
        self.appendChild(self._section)
コード例 #5
0
    def onAttach(self):
        super(FilterSelector, self).onAttach()

        activeFilter = self.parent().parent().filterID
        isSearchDisabled = False

        if self.module in conf["modules"].keys():
            modulConfig = conf["modules"][self.module]
            if "views" in modulConfig.keys() and modulConfig["views"]:
                for view in modulConfig["views"]:
                    self.appendChild(CompoundFilter(view, self.module))
            if "disabledFunctions" in modulConfig.keys() and modulConfig["disabledFunctions"] and "fulltext-search" in \
              modulConfig["disabledFunctions"]:
                isSearchDisabled = True

        if not isSearchDisabled:
            self.search = Search()
            self.search.addClass("item", "has-hover", "is-collapsed")
            self.appendChild(self.search)
            self.search.startSearchEvent.register(self)

            filterImage = html5.Div()
            filterImage.addClass("item-image")
            self.search.prependChild(filterImage)

            self.filterIcon = html5.I()
            self.filterIcon.addClass("i")
            filterImage.appendChild(self.filterIcon)

            self.search.searchLbl.addClass("item-content")

            embedSvg = embedsvg.get("icons-search")
            if embedSvg:
                self.filterIcon.element.innerHTML = embedSvg + self.filterIcon.element.innerHTML
コード例 #6
0
ファイル: icon.py プロジェクト: przybyla86/viur-vi
	def __init__(self, descr, icon=None):
		super(Icon, self).__init__()
		self._icon = icon
		self._descr = descr

		self.addClass("item-image")

		self.modulIcon = html5.I()
		self.modulIcon.addClass("i")

		if icon:
			embedSvg = embedsvg.get(self._icon)

			if embedSvg:
				self.modulIcon.element.innerHTML = embedSvg + self.modulIcon.element.innerHTML
				self.appendChild(self.modulIcon)

			else:
				img = html5.Img()
				img.onError = lambda e: self.onError(e)
				img.sinkEvent("onError")
				img["src"] = self._icon
				self.modulIcon["style"]["background"] = "none"
				self.modulIcon.appendChild(img)

		else:
			self.modulIcon.appendChild(self._descr[:1])

		self.appendChild(self.modulIcon)
コード例 #7
0
 def EntryIcon(self):
     self.nodeImage.removeClass("is-hidden")
     svg = embedsvg.get("icons-folder")
     if svg:
         nodeIcon = html5.I()
         nodeIcon.addClass("i")
         nodeIcon.element.innerHTML = svg + nodeIcon.element.innerHTML
         self.nodeImage.appendChild(nodeIcon)
コード例 #8
0
    def msgOverlay(self, logObj):
        assert logObj["type"] in [
            "success", "error", "warning", "info", "progress"
        ]

        msgwrap = html5.Div()
        msgwrap["class"] = [
            "msg", "is-active", "popup", "popup--se",
            "msg--%s" % logObj["type"]
        ]

        msgcontent = html5.Div()
        msgcontent["class"] = ["msg-content"]
        msgwrap.appendChild(msgcontent)

        date = html5.Span()
        date["class"] = ["msg-date"]
        date.appendChild(html5.TextNode(logObj["date"]))
        msgcontent.appendChild(date)

        msgdescr = html5.Div()
        msgdescr["class"] = ["msg-descr"]
        msgcontent.appendChild(msgdescr)

        if isinstance(logObj["msg"], html5.Widget):
            msgdescr.appendChild(logObj["msg"])
        else:
            msgdescr.appendChild(
                html5.TextNode(html5.utils.unescape(logObj["msg"])))

        if logObj["icon"]:
            svg = embedsvg.get(logObj["icon"])
        else:
            svg = embedsvg.get("icons-%s" % logObj["type"])

        if not svg:
            svg = embedsvg.get("icons-message-news")

        if svg:
            msgwrap.element.innerHTML = svg + msgwrap.element.innerHTML

        self.appendChild(msgwrap)
        DeferredCall(self.removeInfo, msgwrap, _delay=2500)
コード例 #9
0
    def EntryIcon(self):
        '''
			Leafs have a different Icon
		'''
        self.nodeImage.removeClass("is-hidden")
        svg = embedsvg.get("icons-file")
        if svg:
            nodeIcon = html5.I()
            nodeIcon.addClass("i")
            nodeIcon.element.innerHTML = svg + nodeIcon.element.innerHTML
            self.nodeImage.appendChild(nodeIcon)
コード例 #10
0
ファイル: list.py プロジェクト: przybyla86/viur-vi
 def onClick(self, sender=None):
     if isinstance(self.parent().parent().sideBar.getWidget(),
                   FilterSelector):
         self.parent().parent().sideBar.setWidget(None)
         self.filterSelector = None
     else:
         self.filterSelector = FilterSelector(self.parent().parent().module)
         self.parent().parent(
         ).sideBar.sidebarHeadline.element.innerHTML = translate(
             "vi.sidebar.filterselector")
         svg = embedsvg.get("icons-search")
         if svg:
             self.parent().parent(
             ).sideBar.sidebarIcon.element.innerHTML = svg
         self.parent().parent().sideBar.setWidget(self.filterSelector)
コード例 #11
0
ファイル: tooltip.py プロジェクト: przybyla86/viur-vi
    def __init__(self, shortText="", longText="", *args, **kwargs):
        super(ToolTip, self).__init__(*args, **kwargs)
        self["class"] = "vi-tooltip msg is-active"
        self.sinkEvent("onClick")
        svg = embedsvg.get("icons-arrow-right")
        if svg:
            self.element.innerHTML = svg

        self.fromHTML("""
			<div class="msg-content" [name]="tooltipMsg">
				<h2 class="msg-headline" [name]="tooltipHeadline"></h2>
				<div class="msg-descr" [name]="tooltipDescr"></div>
			</div>
		""")

        self.tooltipHeadline.element.innerHTML = translate(
            "vi.tooltip.headline")
        self.tooltipDescr.element.innerHTML = longText.replace("\n", "<br />")
コード例 #12
0
ファイル: list.py プロジェクト: przybyla86/viur-vi
 def toggleIntPrev(self):
     intPrevActive = self.intPrevActive
     selection = self.parent().parent().getCurrentSelection()
     if len(selection) == 1 and intPrevActive == True:
         preview = InternalPreview(self.parent().parent().module,
                                   self.parent().parent()._structure,
                                   selection[0])
         self.parent().parent(
         ).sideBar.sidebarHeadline.element.innerHTML = translate(
             "vi.sidebar.internalpreview")
         svg = embedsvg.get("icons-list-item")
         if svg:
             self.parent().parent(
             ).sideBar.sidebarIcon.element.innerHTML = svg
         self.parent().parent().sideBar.setWidget(preview)
     else:
         if isinstance(self.parent().parent().sideBar.getWidget(),
                       InternalPreview):
             self.parent().parent().sideBar.setWidget(None)
コード例 #13
0
ファイル: list.py プロジェクト: przybyla86/viur-vi
    def __init__(self,
                 module,
                 filter=None,
                 columns=None,
                 filterID=None,
                 filterDescr=None,
                 batchSize=None,
                 context=None,
                 autoload=True,
                 *args,
                 **kwargs):
        """
			:param module: Name of the module we shall handle. Must be a list application!
			:type module: str
		"""

        if not module in conf["modules"].keys():
            conf["mainWindow"].log(
                "error",
                translate("The module '{module}' does not exist.",
                          module=module))
            assert module in conf["modules"].keys()

        super(ListWidget, self).__init__()
        self.addClass("vi-widget vi-widget--list")
        self._batchSize = batchSize or conf[
            "batchSize"]  # How many rows do we fetch at once?
        self.isDetaching = False  #If set, this widget is beeing about to be removed - dont issue nextBatchNeeded requests
        self.module = module
        self.context = context

        self.loadedPages = 0  # Amount of Pages which are currently loaded
        self.currentPage = self.loadedPages  # last loaded page
        self.targetPage = 1  #the page which we want to show next if we set this to currentPage +1 and call setPage next page will be loaded

        #List actions
        self.actionBar = ActionBar(module, "list", currentAction="list")
        self.appendChild(self.actionBar)

        #Entry Actions
        self.entryActionBar = ActionBar(module, "list", currentAction="list")
        self.entryActionBar["class"] = ["bar", "vi-entryactionbar"]
        self.appendChild(self.entryActionBar)

        self.sideBar = SideBar()
        self.appendChild(self.sideBar)

        self.widgetContent = html5.Div()
        self.widgetContent.addClass("vi-widget-content")
        self.appendChild(self.widgetContent)

        myView = None

        if filterID:
            if conf["modules"] and module in conf["modules"].keys():
                if "views" in conf["modules"][module].keys(
                ) and conf["modules"][module]["views"]:
                    for v in conf["modules"][module]["views"]:
                        if v["__id"] == filterID:
                            myView = v
                            break
            if myView and "extendedFilters" in myView.keys(
            ) and myView["extendedFilters"]:

                #fixme
                #self.appendChild(CompoundFilter(myView, module, embed=True))
                logging.error("#fixme CompoundFilter")

        self._checkboxes = (conf["modules"]
                            and module in conf["modules"].keys()
                            and "checkboxSelection"
                            in conf["modules"][module].keys()
                            and conf["modules"][module]["checkboxSelection"])
        self._indexes = (conf["modules"] and module in conf["modules"].keys()
                         and "indexes" in conf["modules"][module].keys()
                         and conf["modules"][module]["indexes"])

        self._currentCursor = None
        self._structure = None
        self._currentRequests = []
        self.columns = []

        self.selectionMulti = True
        self.selectionAllow = None
        self.selectionCallback = None

        self.filter = filter.copy() if isinstance(filter, dict) else {}
        self.columns = columns[:] if isinstance(columns, list) else []
        self.filterID = filterID  #Hint for the sidebarwidgets which predefined filter is currently active
        self.filterDescr = filterDescr  #Human-readable description of the current filter
        self._tableHeaderIsValid = False

        #build Table
        self.tableInitialization(*args, **kwargs)
        self.selectionActivatedEvent = EventDispatcher("selectionActivated")

        self.actionBar.setActions(self.getActions(myView), widget=self)
        self.entryActionBar.setActions(self.getDefaultEntryActions(myView),
                                       widget=self)

        self.emptyNotificationDiv = html5.Div()
        svg = embedsvg.get("icons-error-file")
        if svg:
            self.emptyNotificationDiv.element.innerHTML = svg + self.emptyNotificationDiv.element.innerHTML

        self.emptyNotificationDiv.appendChild(
            html5.TextNode(translate("Currently no entries")))
        self.emptyNotificationDiv.addClass(
            "popup popup--center popup--local msg emptynotification")
        self.widgetContent.appendChild(self.emptyNotificationDiv)
        self.emptyNotificationDiv.removeClass("is-active")

        self.setTableActionBar()

        if autoload:
            self.reloadData()

        self.sinkEvent("onClick")
コード例 #14
0
 def toggleArrow(self):
     self.nodeToggle["title"] = translate("Expand/Collapse")
     embedSvg = embedsvg.get("icons-arrow-right")
     if embedSvg:
         self.nodeToggle.element.innerHTML = embedSvg + self.nodeToggle.element.innerHTML
コード例 #15
0
    def __init__(self, view, module, embed=False, *args, **kwargs):
        super(CompoundFilter, self).__init__(*args, **kwargs)
        self.addClass("vi-sb-compoundfilter item has-hover")

        self.view = view
        self.module = module
        self.embed = embed

        if embed:
            self.addClass("vi-sb-compoundfilter--embed")
            self.addClass("is-expanded", "is-active")
        else:
            self.addClass("vi-sb-compoundfilter--standalone")
            self.addClass("is-collapsed")

        self.filterheader = html5.Div()
        self.filterheader["class"] = "vi-sb-compoundfilter-header"

        filterImage = html5.Div()
        filterImage.addClass("item-image")
        self.filterheader.appendChild(filterImage)

        self.filterIcon = html5.I()
        self.filterIcon.addClass("i")
        filterImage.appendChild(self.filterIcon)

        if "icon" in view.keys():
            embedSvg = embedsvg.get(view["icon"])
            if embedSvg:
                self.filterIcon.element.innerHTML = embedSvg + self.filterIcon.element.innerHTML
            else:
                img = html5.Img()
                img["src"] = view["icon"]
                self.filterIcon.appendChild(img)
        else:
            self.filterIcon.appendChild(view["name"][:1])

        if "name" in view.keys():
            h2 = html5.H2()
            h2.addClass("vi-sb-compoundfilter-name item-content")
            h2.appendChild(html5.TextNode(view["name"]))
            self.filterheader.appendChild(h2)

        self.appendChild(self.filterheader)

        self.extendedFilters = []
        self.mutualExclusiveFilters = {}

        for extension in (view["extendedFilters"]
                          if "extendedFilters" in view.keys() else []):

            wdg = extendedSearchWidgetSelector.select(extension, view, module)

            if wdg is not None:
                container = html5.Div()
                container.addClass("vi-sb-compoundfilter-extended")
                wdg = wdg(extension, view, module)
                container.appendChild(wdg)
                self.appendChild(container)
                self.extendedFilters.append(wdg)
                if hasattr(wdg, "mutualExclusiveGroupTarget"):
                    if not self.mutualExclusiveFilters.has_key(
                            "wdg.mutualExclusiveGroupTarget"):
                        self.mutualExclusiveFilters[
                            wdg.mutualExclusiveGroupTarget] = {}
                    self.mutualExclusiveFilters[
                        wdg.mutualExclusiveGroupTarget][
                            wdg.mutualExclusiveGroupKey] = wdg
                wdg.filterChangedEvent.register(self)