def get_header_wdg(my): div = DivWdg() div.add("<hr/>") dots_div = DivWdg() dots_div.add_style("margin-top: -12px") div.add(dots_div) left = 50 width = 60 for i, widget in enumerate(my.widgets): on_dot = IconWdg("", IconWdg.DOT_GREEN) on_dot.add_class("spt_wizard_on_dot") off_dot = IconWdg("", IconWdg.DOT_GREY) off_dot.add_class("spt_wizard_off_dot") if i == 0: off_dot.add_style("display: none") else: on_dot.add_style("display: none") dot_div = DivWdg() dots_div.add(dot_div) dot_div.add(on_dot) dot_div.add(off_dot) dot_div.add_style("width: %spx" % width) dot_div.add_style("float: left") dot_div.add_style("margin-left: %spx" % left) dot_div.add_style("text-align: center") if (i+1) < len(my.widgets): arrow_div = DivWdg() dots_div.add(arrow_div) arrow_div.add_style("float: left") arrow_div.add_style("position: absolute") arrow_div.add_style("margin-left: %spx" % ((width+left)*(i+1.2))) arrow_div.add_style("margin-top: -3px") arrow_div.add_style("text-align: center") icon = IconWdg("", IconWdg.ARROWHEAD_DARK_RIGHT) arrow_div.add(icon) dots_div.add("<br clear='all'/>") for widget in my.widgets: name_div = DivWdg() div.add(name_div) name_div.add_style("float: left") name_div.add_style("margin-left: %spx" % left) name = widget.get_name() name_div.add(name) name_div.add_style("width: %spx" % width) name_div.add_style("text-align: center") div.add("<br clear='all'/>") return div
def get_header_wdg(my): div = DivWdg() div.add("<hr/>") dots_div = DivWdg() dots_div.add_style("margin-top: -12px") div.add(dots_div) left = 50 width = 60 for i, widget in enumerate(my.widgets): on_dot = IconWdg("", IconWdg.DOT_GREEN) on_dot.add_class("spt_wizard_on_dot") off_dot = IconWdg("", IconWdg.DOT_GREY) off_dot.add_class("spt_wizard_off_dot") if i == 0: off_dot.add_style("display: none") else: on_dot.add_style("display: none") dot_div = DivWdg() dots_div.add(dot_div) dot_div.add(on_dot) dot_div.add(off_dot) dot_div.add_style("width: %spx" % width) dot_div.add_style("float: left") dot_div.add_style("margin-left: %spx" % left) dot_div.add_style("text-align: center") if (i + 1) < len(my.widgets): arrow_div = DivWdg() dots_div.add(arrow_div) arrow_div.add_style("float: left") arrow_div.add_style("position: absolute") arrow_div.add_style("margin-left: %spx" % ((width + left) * (i + 1.2))) arrow_div.add_style("margin-top: -3px") arrow_div.add_style("text-align: center") icon = IconWdg("", IconWdg.ARROWHEAD_DARK_RIGHT) arrow_div.add(icon) dots_div.add("<br clear='all'/>") for widget in my.widgets: name_div = DivWdg() div.add(name_div) name_div.add_style("float: left") name_div.add_style("margin-left: %spx" % left) name = widget.get_name() name_div.add(name) name_div.add_style("width: %spx" % width) name_div.add_style("text-align: center") div.add("<br clear='all'/>") return div
def get_display(my): widget = my.widget widget.set_box_shadow() widget.add_class("spt_dialog_top") widget.add_class("spt_popup") z_index = my.kwargs.get("z_index") if not z_index: z_index = "500" widget.add_style("z-index: %s" % z_index) web = WebContainer.get_web() widget.set_id(my.name) widget.add_attr("spt_dialog_id", my.name) if my.kwargs.get("display") not in [True, "true"]: widget.add_style("display: none") widget.add_style("position: absolute") widget.add_behavior({ 'type': 'listen', 'event_name': '%s|dialog_close' % my.name, 'cbjs_action': my.get_cancel_script() }) offset = my.kwargs.get("offset") if not offset: offset = my.offset show_header = True show_resize = False drag_div = DivWdg() if show_header: widget.add(drag_div) show_pointer = my.kwargs.get("show_pointer") if show_pointer not in [False, 'false']: from tactic.ui.container import ArrowWdg offset_x = 15 - offset.get('x') offset_y = offset.get("y") arrow = ArrowWdg(offset_x=offset_x, offset_y=offset_y, color=widget.get_color("background", -10)) arrow.add_class("spt_popup_pointer") arrow.add_style("z-index: 10") widget.add(arrow) # create the 'close' button ... close_wdg = SpanWdg() close_wdg.add(IconWdg("Close", "BS_REMOVE")) close_wdg.add_style("float: right") close_wdg.add_class("hand") close_wdg.add_style("margin: 3px 1px 3px 1px") close_wdg.add_behavior({ 'type': 'click_up', 'cbjs_action': my.get_cancel_script() }) drag_div.add(close_wdg) anchor_wdg = SpanWdg() drag_div.add(anchor_wdg) anchor_wdg.add_style("margin: 5px 5px 3px 1px") anchor_wdg.add(IconWdg("Anchor Dialog", "BS_PUSHPIN")) anchor_wdg.add_style("float: right") anchor_wdg.add_class("hand") anchor_wdg.add_behavior({ 'type': 'click_up', 'cbjs_action': ''' var top = bvr.src_el.getParent(".spt_dialog_top"); var position = top.getStyle("position"); if (position == 'fixed') { top.setStyle("position", "absolute"); bvr.src_el.setStyle("opacity", "1.0"); } else { top.setStyle("position", "fixed"); bvr.src_el.setStyle("opacity", "0.5"); } ''' }) width = my.kwargs.get("width") if not width: width = "100px" if width: drag_div.add_style("min-width: %s" % width) # style #drag_div.add_looks("popup") drag_div.add_style("text-align: left") drag_div.add_class("spt_popup_width") drag_div.add_style("border-style: solid") drag_div.add_color("border-color", "border") drag_div.add_style("border-size: 0 0 1 0") drag_handle_div = DivWdg(id='%s_title' % my.name) drag_div.add(drag_handle_div) drag_handle_div.add_style("padding: 3px;") #drag_handle_div.add_gradient("background", "background", +10) drag_handle_div.add_color("background", "background", -10) drag_handle_div.add_color("color", "color") drag_handle_div.add_style("padding: 8px 5px 8px 8px") drag_handle_div.add_behavior({ 'type': 'double_click', 'cbjs_action': my.get_cancel_script() }) # add the drag capability drag_handle_div.add_behavior({ 'type': 'smart_drag', 'drag_el': 'spt.popup.get_popup(@);', 'options': { 'z_sort': 'bring_forward' }, 'ignore_default_motion': 'false', 'cbjs_setup': ''' var pointer = bvr.drag_el.getElement(".spt_popup_pointer"); if (pointer) { spt.hide(pointer); } ''' }) # add the content content_div = DivWdg() title_wdg = my.title_wdg if not title_wdg: title_wdg = "No Title" # if the title is empty, just don't show if my.kwargs.get("show_title") in [False, 'false']: drag_div.add_style("display: none") #else: # content_div.add_style("margin-top: -1px") drag_handle_div.add(title_wdg) drag_handle_div.add_class("spt_popup_title") drag_handle_div.add_style("font-weight: bold") widget.add(content_div) content_div.add_color("color", "color2") content_div.add_gradient("background", "background2") content_div.set_id("%s_content" % my.name) content_div.add_class("spt_popup_content") content_div.add_class("spt_dialog_content") content_div.add_style("overflow: hidden") content_div.add_style("display: block") #content_div.add_style("padding: 5px") view = my.kwargs.get("view") if view: from tactic.ui.panel import CustomLayoutWdg my.add(CustomLayoutWdg(view=view)) if not my.content_wdg: my.content_wdg = "No Content" content_div.add(my.content_wdg) # add the resize icon if show_resize: icon = IconWdg("Resize", IconWdg.RESIZE_CORNER) icon.add_style("cursor: nw-resize") icon.add_style("z-index: 1000") icon.add_class("spt_popup_resize") icon.add_style("float: right") icon.add_style("margin-top: -25px") icon.add_style("margin-right: 5px") icon.add_behavior({ 'type': 'drag', "drag_el": '@', "cb_set_prefix": 'spt.popup.resize_drag' }) widget.add(icon) return widget
def get_display(my): widget = my.widget widget.set_box_shadow() widget.add_class("spt_dialog_top") widget.add_class("spt_popup") z_index = my.kwargs.get("z_index") if not z_index: z_index = "500" widget.add_style("z-index: %s" % z_index) web = WebContainer.get_web() widget.set_id(my.name) widget.add_attr("spt_dialog_id", my.name); if my.kwargs.get("display") not in [True, "true"]: widget.add_style("display: none") widget.add_style("position: absolute") widget.add_behavior( { 'type': 'listen', 'event_name': '%s|dialog_close' % my.name, 'cbjs_action': my.get_cancel_script() } ) offset = my.kwargs.get("offset") if not offset: offset = my.offset show_header = True show_resize = False drag_div = DivWdg() if show_header: widget.add(drag_div) show_pointer = my.kwargs.get("show_pointer") if show_pointer not in [False, 'false']: from tactic.ui.container import ArrowWdg offset_x = 15 - offset.get('x') offset_y = offset.get("y") arrow = ArrowWdg( offset_x=offset_x, offset_y=offset_y, color=widget.get_color("background", -10) ) arrow.add_class("spt_popup_pointer") arrow.add_style("z-index: 10") widget.add(arrow) # create the 'close' button ... close_wdg = SpanWdg() close_wdg.add( IconWdg("Close", "BS_REMOVE") ) close_wdg.add_style("float: right") close_wdg.add_class("hand") close_wdg.add_style("margin: 3px 1px 3px 1px") close_wdg.add_behavior({ 'type': 'click_up', 'cbjs_action': my.get_cancel_script() }) drag_div.add(close_wdg) anchor_wdg = SpanWdg() drag_div.add(anchor_wdg) anchor_wdg.add_style("margin: 5px 5px 3px 1px") anchor_wdg.add( IconWdg("Anchor Dialog", "BS_PUSHPIN") ) anchor_wdg.add_style("float: right") anchor_wdg.add_class("hand") anchor_wdg.add_behavior({ 'type': 'click_up', 'cbjs_action': ''' var top = bvr.src_el.getParent(".spt_dialog_top"); var position = top.getStyle("position"); if (position == 'fixed') { top.setStyle("position", "absolute"); bvr.src_el.setStyle("opacity", "1.0"); } else { top.setStyle("position", "fixed"); bvr.src_el.setStyle("opacity", "0.5"); } ''' }) width = my.kwargs.get("width") if not width: width = "100px" if width: drag_div.add_style("min-width: %s" % width) # style #drag_div.add_looks("popup") drag_div.add_style("text-align: left") drag_div.add_class("spt_popup_width") drag_div.add_style("border-style: solid") drag_div.add_color("border-color", "border") drag_div.add_style("border-size: 0 0 1 0") drag_handle_div = DivWdg(id='%s_title' %my.name) drag_div.add( drag_handle_div ) drag_handle_div.add_style("padding: 3px;") #drag_handle_div.add_gradient("background", "background", +10) drag_handle_div.add_color("background", "background", -10) drag_handle_div.add_color("color", "color") drag_handle_div.add_style("padding: 8px 5px 8px 8px") drag_handle_div.add_behavior({ 'type': 'double_click', 'cbjs_action': my.get_cancel_script() }) # add the drag capability drag_handle_div.add_behavior( { 'type':'smart_drag', 'drag_el': 'spt.popup.get_popup(@);', 'options': {'z_sort': 'bring_forward'}, 'ignore_default_motion': 'false', 'cbjs_setup': ''' var pointer = bvr.drag_el.getElement(".spt_popup_pointer"); if (pointer) { spt.hide(pointer); } ''' } ) # add the content content_div = DivWdg() title_wdg = my.title_wdg if not title_wdg: title_wdg = "No Title" # if the title is empty, just don't show if my.kwargs.get("show_title") in [False, 'false']: drag_div.add_style("display: none") #else: # content_div.add_style("margin-top: -1px") drag_handle_div.add(title_wdg) drag_handle_div.add_class("spt_popup_title") drag_handle_div.add_style("font-weight: bold") widget.add(content_div) content_div.add_color("color", "color2") content_div.add_gradient( "background", "background2" ) content_div.set_id("%s_content" % my.name) content_div.add_class("spt_popup_content") content_div.add_class("spt_dialog_content") content_div.add_style("overflow: hidden") content_div.add_style("display: block") #content_div.add_style("padding: 5px") view = my.kwargs.get("view") if view: from tactic.ui.panel import CustomLayoutWdg my.add( CustomLayoutWdg(view=view) ) if not my.content_wdg: my.content_wdg = "No Content" content_div.add(my.content_wdg) # add the resize icon if show_resize: icon = IconWdg( "Resize", IconWdg.RESIZE_CORNER ) icon.add_style("cursor: nw-resize") icon.add_style("z-index: 1000") icon.add_class("spt_popup_resize") icon.add_style("float: right") icon.add_style("margin-top: -25px") icon.add_style("margin-right: 5px") icon.add_behavior( { 'type': 'drag', "drag_el": '@', "cb_set_prefix": 'spt.popup.resize_drag' } ) widget.add(icon) return widget
def get_display(my): my.sobject_data = {} top = my.top top.add_style top.add_class("spt_gallery_top") inner = DivWdg() top.add(inner) inner.add_style("position: fixed") inner.add_style("top: 0") inner.add_style("left: 0") inner.add_style("width: 100%") #inner.add_style("height: 100%") inner.add_style("bottom: 0px") inner.add_style("padding-bottom: 40px") #inner.add_style("background: rgba(0,0,0,0.5)") inner.add_style("background: rgba(0,0,0,1)") inner.add_style("z-index: 1000") width = my.kwargs.get("width") height = my.kwargs.get("height") if not width: width = 1300 else: width = int(width) paths = my.get_paths(file_type='main') # icon type may be too small thumb_paths = my.get_paths(file_type='web') descriptions = [] for path in paths: sobject = my.sobject_data.get(path) if not sobject: descriptions.append("") else: description = sobject.get("description") if not description: description = "" descriptions.append(description) total_width = width * len(paths) inner.add_behavior({ 'type': 'load', 'width': width, 'total_width': total_width, 'descriptions': descriptions, 'cbjs_action': ''' spt.gallery = {}; // 1250 is defined also in the css styles spt.gallery.portrait = window.innerWidth < 1250; spt.gallery.top = bvr.src_el; spt.gallery.content = spt.gallery.top.getElement(".spt_gallery_content"); spt.gallery.content.setStyle('opacity','0.1') spt.gallery.desc_el = spt.gallery.top.getElement(".spt_gallery_description"); var height_factor = '100%'; if (spt.gallery.portrait) { bvr.width = bvr.width * 0.8; var scroll = bvr.src_el.getElement('.spt_gallery_scroll'); scroll.setStyle('width', bvr.width); scroll.setStyle('height', '80%'); scroll.setStyle('position', 'relative'); scroll.setStyle('top', '500px'); var items = bvr.src_el.getElements('.spt_gallery_item'); for (var k=0; k < items.length; k++) { items[k].setStyle('width', bvr.width); items[k].setStyle('height', '80%'); } var left = bvr.src_el.getElement('.spt_left_arrow'); var right = bvr.src_el.getElement('.spt_right_arrow'); left.setStyle('top','88%') left.setStyle('left','35%') right.setStyle('top','88%') right.setStyle('right','35%') height_factor = '70%'; } //window.addEvent('domready', function() { setTimeout(function() { // set the img h or w directly var items = bvr.src_el.getElements('.spt_gallery_item img'); // fade in spt.gallery.content.set('tween', {duration: 250}).fade('in'); for (var k=0; k < items.length; k++) { var sizes = items[k].getSize(); var item_h = sizes.y; var item_w = sizes.x; if (item_h >= item_w){ items[k].setStyle('width', ''); items[k].setStyle('height', height_factor); } else { items[k].setStyle('width','100%'); items[k].setStyle('height',''); } } }, 50) spt.gallery.width = bvr.width; spt.gallery.descriptions = bvr.descriptions; spt.gallery.index = 0; spt.gallery.total = bvr.descriptions.length; spt.gallery.left_arrow = bvr.src_el.getElement('.spt_left_arrow'); spt.gallery.right_arrow = bvr.src_el.getElement('.spt_right_arrow'); spt.gallery.videos = {}; spt.gallery.init = function() { } spt.gallery.stack = []; spt.gallery.push_stack = function(key) { spt.gallery.stack.push(key); } spt.gallery.show_next = function(src_el) { if (!src_el) src_el = spt.gallery.right_arrow; if (spt.gallery.index >= spt.gallery.total-2) { spt.hide(src_el); } if (spt.gallery.index == spt.gallery.total-1) { return; } spt.gallery.index += 1; spt.gallery.show_index(spt.gallery.index); } spt.gallery.show_prev = function(src_el) { if (!src_el) src_el = spt.gallery.left_arrow; if (spt.gallery.index <= 1) { spt.hide(src_el); } if (spt.gallery.index == 0) { return; } spt.gallery.index -= 1; spt.gallery.show_index(spt.gallery.index); } spt.gallery.show_index = function(index) { // stop all videos var videos = spt.gallery.top.getElements(".video-js"); for (var i = 0; i < videos.length; i++) { try { var video = videos[i]; var video_id = video.get("id"); var video_obj = videojs(video_id, {"nativeControlsForTouch": false}); video_obj.pause(); } catch(e) { } } var width = spt.gallery.width; var margin = - width * index; var content = spt.gallery.content; //content.setStyle("margin-left", margin + "px"); new Fx.Tween(content,{duration: 250}).start("margin-left", margin); spt.gallery.index = index; var total = spt.gallery.total; if (index == 0) { spt.hide(spt.gallery.left_arrow); spt.show(spt.gallery.right_arrow); } else if (index == total - 1) { spt.show(spt.gallery.left_arrow); spt.hide(spt.gallery.right_arrow); } else { spt.show(spt.gallery.left_arrow); spt.show(spt.gallery.right_arrow); } var description = spt.gallery.descriptions[index]; if (!description) { description = (index+1)+" of "+total; } else { description = (index+1)+" of "+total+" - " + description; } spt.gallery.set_description(description); } spt.gallery.close = function() { var content = spt.gallery.content; var top = content.getParent(".spt_gallery_top"); spt.behavior.destroy_element(top); } spt.gallery.set_description = function(desc) { var desc_el = spt.gallery.desc_el; desc_el.innerHTML = desc; } ''' }) scroll = DivWdg(css='spt_gallery_scroll') inner.add(scroll) scroll.set_box_shadow() scroll.add_style("width: %s" % width) if height: scroll.add_style("height: %s" % height) scroll.add_style("overflow-x: hidden") scroll.add_style("overflow-y: hidden") scroll.add_style("background: #000") #scroll.add_style("position: absolute") scroll.add_style("margin-left: auto") scroll.add_style("margin-right: auto") content = DivWdg() top.add_attr('tabindex', '-1') scroll.add(content) content.add_class("spt_gallery_content") # make the itesm vertically align to bottom content.add_styles( "display: flex; flex-flow: row nowrap; align-items: flex-end;") content.add_style("width: %s" % total_width) top.add_behavior({ 'type': 'load', 'cbjs_action': ''' bvr.src_el.focus(); ''' }) top.add_behavior({ 'type': 'mouseenter', 'cbjs_action': ''' bvr.src_el.focus(); ''' }) top.add_behavior({ 'type': 'mouseleave', 'cbjs_action': ''' bvr.src_el.blur(); ''' }) """ input = TextWdg("keydown") content.add(input) input.add_style("position: absolute") input.add_style("left: -5000px") """ top.add_behavior({ 'type': 'keydown', 'cbjs_action': ''' var key = evt.key; if (key == "left") { spt.gallery.push_stack(key); spt.gallery.show_prev(); } else if (key == "right") { spt.gallery.push_stack(key); spt.gallery.show_next(); } else if (key == "esc" || key == "enter") { var top = bvr.src_el spt.behavior.destroy_element(top); } ''' }) curr_index = 0 for i, path in enumerate(paths): path_div = DivWdg(css='spt_gallery_item') content.add(path_div) path_div.add_style("float: left") if path == my.curr_path: curr_index = i try: thumb_path = thumb_paths[i] except IndexError: print "Cannot find the thumb_path [%s] " % i thumb_path = '' path_div.add_style("width: %s" % width) if height: path_div.add_style("height: %s" % height) from tactic.ui.widget import EmbedWdg embed = EmbedWdg(src=path, click=False, thumb_path=thumb_path, index=i) path_div.add(embed) #img = HtmlElement.img(path) #path_div.add(img) #img.add_style("width: 100%") content.add_behavior({ 'type': 'load', 'index': curr_index, 'cbjs_action': ''' if (!bvr.index) bvr.index = 0; spt.gallery.show_index(bvr.index); ''' }) #icon = IconWdg(title="Close", icon="/plugins/remington/pos/icons/close.png") icon = IconWdg(title="Close", icon="/context/icons/glyphs/close.png", width="40px") inner.add(icon) #icon = DivWdg() #icon.add("X") #icon.add_style("font-size: 42px") #icon.add_style("color: #ddd") #icon.add_style("width: 48px") #icon.add_style("height: 48px") #icon.add_style("text-align: center") #icon.add_style("border-radius: 30px") #icon.add_style("border: solid 3px #ddd") icon.add_style("position: absolute") icon.add_style("cursor: pointer") icon.add_style("bottom: 80px") icon.add_style("left: 38px") icon.add_style("opacity: 0.5") icon.add_behavior({ 'type': 'click_up', 'cbjs_action': ''' var top = bvr.src_el.getParent(".spt_gallery_top"); spt.behavior.destroy_element(top); ''' }) icon = IconWdg(title="Previous", icon="/context/icons/glyphs/chevron_left.png") inner.add(icon) icon.add_class('spt_left_arrow') icon.add_style("cursor: pointer") icon.add_style("position: absolute") icon.add_style("top: 40%") icon.add_style("left: 0px") icon.add_style("opacity: 0.5") icon.add_behavior({ 'type': 'click_up', 'cbjs_action': ''' var arrow = bvr.src_el; spt.gallery.show_prev(arrow); ''' }) icon = IconWdg(title="Next", icon="/context/icons/glyphs/chevron_right.png") inner.add(icon) icon.add_class('spt_right_arrow') icon.add_style("position: absolute") icon.add_style("cursor: pointer") icon.add_style("top: 40%") icon.add_style("right: 0px") icon.add_style("opacity: 0.5") icon.add_behavior({ 'type': 'click_up', 'cbjs_action': ''' var arrow = bvr.src_el; spt.gallery.show_next(arrow); ''' }) desc_div = DivWdg() desc_div.add_class("spt_gallery_description") desc_div.add_style("height: 30px") desc_div.add_style("width: %s" % width) desc_div.add_style("text-align: center") desc_div.add_style("background: rgba(0,0,0,1)") desc_div.add_style("color: #bbb") desc_div.add_style("font-weight: bold") desc_div.add_style("font-size: 16px") desc_div.add_style("padding-top: 10px") desc_div.add_style("margin-left: -%s" % (width / 2)) desc_div.add_style("z-index: 1000") desc_div.add("") desc_outer_div = DivWdg() inner.add(desc_outer_div) desc_outer_div.add_style("position: fixed") desc_outer_div.add(desc_div) desc_outer_div.add_style("bottom: 0px") desc_outer_div.add_style("left: 50%") return top
def get_display(my): smenu_div = DivWdg() smenu_div.add_class("SPT_SMENU") smenu_div.add_class("SPT_SMENU_%s" % my.menu_tag_suffix) smenu_div.set_box_shadow() smenu_div.add_border() smenu_div.add_color("background", "background") smenu_div.add_color("color", "color") smenu_div.add_behavior({ 'type': 'load', 'cbjs_action': ''' spt.dom.load_js( ["ctx_menu.js"], function() { spt.dom.load_js( ["smart_menu.js"], function() { } ) } ); ''' }) if my.setup_cbfn: smenu_div.set_attr("SPT_SMENU_SETUP_CBFN", my.setup_cbfn) smenu_div.set_z_start(300) #smenu_div.add_looks( "smenu border curs_default" ) # smenu_div.add_styles( "padding-top: 3px; padding-bottom: 5px;" ) m_width = my.width - 2 smenu_div.add_style(("width: %spx" % m_width)) smenu_div.add_style("overflow-x: hidden") icon_width = 16 icon_col_width = 0 if my.allow_icons: icon_col_width = icon_width + 2 label_width = m_width - icon_col_width - icon_width menu_table = Table() menu_table.add_styles( "text-align: left; text-indent: 3px; border-collapse: collapse;") #menu_table.add_color("background", "background") menu_table.add_color("color", "color") options = my.opt_spec_list opt_count = 0 if options[0].get('type') != 'title': my._add_spacer_row(menu_table, 3, icon_width, icon_col_width, label_width) """ menu_table.add_relay_behavior( { 'type': 'mouseenter', 'bvr_match_class': 'SPT_SMENU_ENTRY', 'bgcolor': menu_table.get_color("side_bar_title", -15, default="background3"), 'cbjs_action': ''' bvr.src_el.setStyle("background-color", bvr.bgcolor); bvr.src_el.setStyle("color", bvr.bgcolor); spt.smenu.entry_over( evt, bvr ); ''' } ) menu_table.add_relay_behavior( { 'type': 'mouseleave', 'bvr_match_class': 'SPT_SMENU_ENTRY', 'cbjs_action': ''' bvr.src_el.setStyle("background-color", ""); spt.smenu.entry_out( evt, bvr ); ''' } ) """ for opt in options: # if entry is a title, then add a spacer before if opt.get('type') == 'title' and opt_count: my._add_spacer_row(menu_table, 6, icon_width, icon_col_width, label_width) tbody = menu_table.add_tbody() tbody.add_style("display", "table-row-group") tr = menu_table.add_row() #tr.add_looks( "smenu" ) tr.add_class("SPT_SMENU_ENTRY") tr.add_class("SPT_SMENU_ENTRY_%s" % opt['type'].upper()) if opt.has_key('enabled_check_setup_key'): tr.set_attr("SPT_ENABLED_CHECK_SETUP_KEY", opt.get('enabled_check_setup_key')) if opt.has_key('hide_when_disabled') and opt.get( 'hide_when_disabled'): tr.set_attr("SPT_HIDE_WHEN_DISABLED", "true") if opt['type'] in ['action', 'toggle']: hover_bvr = { 'type': 'hover', 'add_looks': 'smenu_hilite', 'cbjs_action_over': 'spt.smenu.entry_over( evt, bvr );', 'cbjs_action_out': 'spt.smenu.entry_out( evt, bvr );' } if opt.has_key('hover_bvr_cb'): hover_bvr.update(opt.get('hover_bvr_cb')) tr.add_behavior(hover_bvr) tr.add_class("hand") if opt['type'] == 'action': if opt.has_key('bvr_cb') and type(opt['bvr_cb']) == dict: bvr = {} bvr.update(opt['bvr_cb']) bvr['cbjs_action_for_menu_item'] = bvr['cbjs_action'] bvr['cbjs_action'] = 'spt.smenu.cbjs_action_wrapper( evt, bvr );' bvr.update({'type': 'click_up'}) tr.add_behavior(bvr) if opt['type'] == 'submenu': hover_bvr = { 'type': 'hover', 'add_looks': 'smenu_hilite', 'cbjs_action_over': 'spt.smenu.submenu_entry_over( evt, bvr );', 'cbjs_action_out': 'spt.smenu.submenu_entry_out( evt, bvr );', 'submenu_tag': "SPT_SMENU_%s" % opt['submenu_tag_suffix'], } if opt.has_key('hover_bvr_cb'): hover_bvr.update(opt.get('hover_bvr_cb')) tr.add_behavior(hover_bvr) # now trap click on submenu, so that it doesn't make the current menu disappear ... tr.add_behavior({ 'type': 'click', 'cbjs_action': ';', 'activator_type': 'smart_menu' }) tr.add_looks("curs_default") # Left icon cell ... if my.allow_icons: td = menu_table.add_cell() td.add_styles( "text-align: center; vertical-align: middle; width: %spx;" % icon_col_width) #td.add_looks("smenu_icon_column") td.add_color("color", "color3") td.add_color("background", "background3") if opt.has_key('icon'): icon_wdg = IconWdg("", opt['icon']) icon_wdg.add_class("SPT_ENABLED_ICON_LOOK") td.add(icon_wdg) # if disabled: # icon_wdg.add_style( "opacity: .4" ) # icon_wdg.add_style( "filter: alpha(opacity=40)" ) # Menu option label cell ... td = menu_table.add_cell() td.add_style("width", ("%spx" % label_width)) td.add_style("height", ("%spx" % icon_col_width)) if opt.get('type') != 'title': td.add_style("padding-left: 6px") td.add_style("padding-top: 2px") if opt.has_key('label'): label_str = opt.get('label').replace('"', '"') td.add_class("SPT_LABEL") td.add(label_str) td.set_attr("SPT_ORIG_LABEL", label_str) #td.add_looks("fnt_text") td.add_style("font-size: 11px") if opt.get('type') == 'title': #td.add_looks("smenu_title") td.add_color("background", "background2") td.add_color("color", "color2") td.add_style("font-weight", "bold") td.add_style("padding", "3px") elif opt.get('type') == 'separator': hr = HtmlElement("hr") hr.add_looks("smenu_separator") td.add(hr) td.add_class("SPT_ENABLED_LOOK") # if disabled: # td.add_style( "opacity: .2" ) # td.add_style( "filter: alpha(opacity=20)" ) # Submenu arrow icon cell ... td = menu_table.add_cell() td.add_style("width", ("%spx" % icon_width)) if opt['type'] == 'submenu': icon_wdg = IconWdg("", IconWdg.ARROWHEAD_DARK_RIGHT) td.add(icon_wdg) td.add_class("SPT_ENABLED_ICON_LOOK") # extend title entry styling into the submenu arrow cell and add some spacing after if opt.get('type') == 'title': #td.add_looks("smenu_title") td.add_color("background", "background2") td.add_color("color", "color2") td.add_style("font-weight", "bold") td.add_style("padding", "3px") my._add_spacer_row(menu_table, 3, icon_width, icon_col_width, label_width) # if disabled: # td.add_style( "opacity: .4" ) # td.add_style( "filter: alpha(opacity=40)" ) opt_count += 1 my._add_spacer_row(menu_table, 5, icon_width, icon_col_width, label_width) smenu_div.add(menu_table) smenu_div.add_style("display: none") smenu_div.add_style("position: absolute") return smenu_div
def get_display(self): element_data_dict = {} config = self.get_config() element_names = config.get_element_names() content_wdg = DivWdg() content_wdg.add_class("spt_simple_search_top") onload_js = DivWdg() content_wdg.add(onload_js) onload_js.add_behavior( { 'type': 'load', 'cbjs_action': self.get_onload_js() } ) if not element_names: element_names = ['keywords'] self.set_content(content_wdg) # this is somewhat duplicated logic from alter_search, but since this is called # in ViewPanelWdg, it's a diff instance and needs to retrieve again filter_data = FilterData.get() filter_view = self.kwargs.get("filter_view") if filter_view: search = Search("config/widget_config") search.add_filter("view", filter_view) search.add_filter("category", "search_filter") search.add_filter("search_type", self.search_type) filter_config = search.get_sobject() if filter_config: filter_xml = filter_config.get_xml_value("config") filter_value = filter_xml.get_value("config/filter/values") if filter_value: data_list = jsonloads(filter_value) else: data_list = filter_data.get_values_by_prefix(self.prefix) for data in data_list: handler = data.get("handler") element_name = data.get("element_name") if not element_name: continue element_data_dict[element_name] = data elements_wdg = DivWdg() content_wdg.add(elements_wdg) elements_wdg.add_color("color", "color") elements_wdg.add_style("padding-top: 10px") elements_wdg.add_style("padding-bottom: 15px") #elements_wdg.add_color("background", "background3", 0) elements_wdg.add_color("background", "background", -3) elements_wdg.add_border() if len(element_names) == 1: elements_wdg.add_style("border-width: 0px 0px 0px 0px" ) elements_wdg.add_style("padding-right: 50px" ) else: elements_wdg.add_style("border-width: 0px 0px 0px 0px" ) table = Table() table.add_color("color", "color") elements_wdg.add(table) table.add_class("spt_simple_search_table") columns = self.kwargs.get("columns") if not columns: columns = 2 else: columns = int(columns) num_rows = int(len(element_names)/columns)+1 tot_rows = int(len(element_names)/columns)+1 project_code = Project.get_project_code() # self.search_type could be the same as self.base_search_type full_search_type = SearchType.build_search_type(self.search_type, project_code) visible_rows = self.kwargs.get("visible_rows") if visible_rows: visible_rows = int(visible_rows) num_rows = visible_rows else: visible_rows = 0 titles = config.get_element_titles() row_count = 0 for i, element_name in enumerate(element_names): attrs = config.get_element_attributes(element_name) if i % columns == 0: if visible_rows and row_count == visible_rows: tr, td = table.add_row_cell("+ more ...") td.add_class("hand") td.add_class("SPT_DTS") td.add_class("spt_toggle") td.add_style("padding-left: 10px") td.add_behavior( { 'type': 'click_up', 'visible_rows': visible_rows, 'cbjs_action': ''' var top = bvr.src_el.getParent(".spt_simple_search_table"); var expand = true; var rows = top.getElements(".spt_simple_search_row"); for (var i = 0; i < rows.length; i++) { var row = rows[i]; if (row.getStyle("display") == "none") { row.setStyle("display", ""); } else { row.setStyle("display", "none"); expand = false; } } var spacer = top.getElements(".spt_spacer"); var cell = top.getElement(".spt_toggle"); if (expand) { spacer.setStyle("height", (rows.length+bvr.visible_rows)*20); cell.innerHTML = "- less ..."; } else { spacer.setStyle("height", bvr.visible_rows*20); cell.innerHTML = "+ more ..."; } ''' } ) tr = table.add_row() if visible_rows and row_count >= visible_rows: tr.add_class("spt_simple_search_row") tr.add_style("display: none") tr.add_style("height: 0px") row_count += 1 icon_td = table.add_cell() title_td = table.add_cell() element_td = table.add_cell() # need to add these to all the elements because it is all separated # by table tds icon_td.add_class("spt_element_item") icon_td.add_attr("spt_element_name", element_name) title_td.add_class("spt_element_item") title_td.add_attr("spt_element_name", element_name) element_td.add_class("spt_element_item") element_td.add_attr("spt_element_name", element_name) # show the title title_td.add_style("text-align: left") title_td.add_style("padding-right: 5px") title_td.add_style("min-width: 60px") element_wdg = DivWdg() if attrs.get('view') == 'false': element_wdg.add_style('display: none') element_td.add(element_wdg) if i >= 0 and i < columns -1 and len(element_names) > 1: spacer = DivWdg() spacer.add_class("spt_spacer") spacer.add_style("border-style: solid") spacer.add_style("border-width: 0 0 0 0") #spacer.add_style("height: %spx" % (num_rows*20)) spacer.add_style("height: %spx" % (num_rows*10)) spacer.add_style("width: 10px") spacer.add_style("border-color: %s" % spacer.get_color("border") ) spacer.add(" ") td = table.add_cell(spacer) td.add_attr("rowspan", tot_rows) element_wdg.add_style("padding: 4px 10px 4px 5px") element_wdg.add_class("spt_table_search") element_wdg.add_style("margin: 1px") element_wdg.add_style("min-height: 20px") element_wdg.add_style("min-width: 250px") # this is done at get_top() #element_wdg.add_class("spt_search") element_wdg.add( HiddenWdg("prefix", self.prefix)) display_handler = config.get_display_handler(element_name) element_wdg.add( HiddenWdg("handler", display_handler)) element_wdg.add( HiddenWdg("element_name", element_name)) from pyasm.widget import ExceptionWdg try: widget = config.get_display_widget(element_name) if widget: widget.set_title(titles[i]) except Exception as e: element_wdg.add(ExceptionWdg(e)) continue if not widget: # the default for KeywordFilterElementWdg is mode=keyword if not self.column_choice: self.column_choice = self.get_search_col(self.search_type) widget = KeywordFilterElementWdg(column=self.column_choice) widget.set_name(element_name) from pyasm.widget import IconWdg icon_div = DivWdg() icon_td.add(icon_div) icon_div.add_style("width: 20px") icon_div.add_style("margin-top: -2px") icon_div.add_style("padding-left: 6px") icon_div.add_class("spt_filter_top") widget.set_show_title(False) #element_wdg.add("%s: " % title) data = element_data_dict.get(element_name) view_panel_keywords = self.kwargs.get("keywords") #user data takes precedence over view_panel_keywords if isinstance(widget, KeywordFilterElementWdg): if view_panel_keywords: widget.set_value("value", view_panel_keywords) if data: widget.set_values(data) if isinstance(widget, KeywordFilterElementWdg) and not full_search_type.startswith('sthpw/sobject_list'): widget.set_option('filter_search_type', full_search_type) try: if attrs.get('view') != 'false': title_td.add(widget.get_title_wdg()) element_wdg.add(widget.get_buffer_display()) except Exception as e: element_wdg.add(ExceptionWdg(e)) continue icon = IconWdg("Filter Set", "BS_ASTERISK") #icon.add_style("color", "#393") icon_div.add(icon) icon.add_class("spt_filter_set") icon.add_class("hand") icon.add_attr("spt_element_name", element_name) icon.add_behavior( { 'type': 'click', 'cbjs_action': ''' var element_name = bvr.src_el.getAttribute("spt_element_name"); spt.simple_search.clear_element(element_name); ''' } ) if not widget.is_set(): icon.add_style("display: none") else: color = icon_div.get_color("background", -10) icon_td.add_style("background-color", color) title_td.add_style("background-color", color) element_td.add_style("background-color", color) #elements_wdg.add("<br clear='all'/>") top = self.get_top() return top
def get_display(my): top = my.top top.add_style("white-space: nowrap") #top.add_style("position: relative") base = "%s/%s" % (BASE, my.top.get_theme() ) show_menu = my.kwargs.get("show_menu") is_disabled = my.kwargs.get("is_disabled") button = DivWdg() button.add_style("float: left") my.inner = button top.add(button) my.inner.add_class("hand") button.add_class("spt_button_top") button.add_style("position: relative") #img = "<img src='%s/MainButtonSlices_button.png'/>" % base #img_div = DivWdg(img) #button.add(img_div) #img_div.add_style("opacity", ALPHA) img_div = DivWdg() button.add(img_div) img_div.add_style("width: 30px") img_div.add_style("height: 35px") over_div = DivWdg() button.add(over_div) over_div.add_class("spt_button_over") over_img = "<img src='%s/MainButton_over.png'/>" % base over_div.add(over_img) over_div.add_style("position: absolute") over_div.add_style("top: 0px") over_div.add_style("left: 0px") over_div.add_style("display: none") click_div = DivWdg() button.add(click_div) click_div.add_class("spt_button_click") click_img = "<img src='%s/MainButton_click.png'/>" % base click_div.add(click_img) click_div.add_style("position: absolute") click_div.add_style("top: 0px") click_div.add_style("left: 0px") click_div.add_style("display: none") title = my.kwargs.get("title") tip = my.kwargs.get("tip") if not tip: tip = title icon_div = my.icon_div button.add(icon_div) #icon_div.add_class("spt_button_click") icon_str = my.kwargs.get("icon") icon = IconWdg(tip, icon_str, right_margin=0, width=16) icon.add_class("spt_button_icon") icon_div.add(icon) icon_div.add_style("position: absolute") #TODO: removed this top attr after we trim the top and bottom whitespace of the over image icon_div.add_style("top: 12px") icon_div.add_style("left: 6px") if my.is_disabled: icon_div.add_style("opacity: 0.5") my.icon_div = icon_div sub_icon = my.kwargs.get("sub_icon") if sub_icon: sub_icon = IconWdg(icon=sub_icon, size="8") button.add(sub_icon) sub_icon.add_style("position: absolute") sub_icon.add_style("bottom: 4px") sub_icon.add_style("right: 0px") my.show_arrow = my.kwargs.get("show_arrow") in [True, 'true'] if my.show_arrow or my.dialog: arrow_div = DivWdg() button.add(arrow_div) arrow_div.add_style("position: absolute") arrow_div.add_style("top: 24px") arrow_div.add_style("left: 20px") arrow = IconWdg(tip, IconWdg.ARROW_MORE_INFO) arrow_div.add(arrow) web = WebContainer.get_web() is_IE = web.is_IE() #my.hit_wdg.add_style("height: 100%") my.hit_wdg.add_style("width: 100%") if is_IE: my.hit_wdg.add_style("filter: alpha(opacity=0)") my.hit_wdg.add_style("height: 40px") else: my.hit_wdg.add_style("height: 100%") my.hit_wdg.add_style("opacity: 0.0") if my.is_disabled: my.hit_wdg.add_style("display: none") button.add(my.hit_wdg) my.hit_wdg.add_style("position: absolute") my.hit_wdg.add_style("top: 0px") my.hit_wdg.add_style("left: 0px") my.hit_wdg.add_attr("title", tip) """ my.hit_wdg.add_behavior( { 'type': 'hover', 'cbjs_action_over': ''' var top = bvr.src_el.getParent(".spt_button_top") var over = top.getElement(".spt_button_over"); var click = top.getElement(".spt_button_click"); over.setStyle("display", ""); click.setStyle("display", "none"); ''', 'cbjs_action_out': ''' var top = bvr.src_el.getParent(".spt_button_top") var over = top.getElement(".spt_button_over"); var click = top.getElement(".spt_button_click"); over.setStyle("display", "none"); click.setStyle("display", "none"); ''' } ) """ # add a second arrow widget if my.show_arrow_menu: my.inner.add(my.arrow_div) my.arrow_div.add_attr("title", "More Options") my.arrow_div.add_style("position: absolute") my.arrow_div.add_style("top: 11px") my.arrow_div.add_style("left: 20px") my.arrow_div.add(my.arrow_menu) if my.dialog: top.add(my.dialog) dialog_id = my.dialog.get_id() my.hit_wdg.add_behavior( { 'type': 'click_up', 'dialog_id': dialog_id, 'cbjs_action': ''' var dialog = $(bvr.dialog_id); var pos = bvr.src_el.getPosition(); var size = bvr.src_el.getSize(); //var dialog = $(bvr.dialog_id); dialog.setStyle("left", pos.x); dialog.setStyle("top", pos.y+size.y); spt.toggle_show_hide(dialog); ''' } ) return top
def get_display(my): my.collection_key = my.kwargs.get("collection_key") collection = Search.get_by_search_key(my.collection_key) top = my.top my.kwargs["scale"] = 75; my.kwargs["show_scale"] = False; my.kwargs["expand_mode"] = "plain" from tile_layout_wdg import TileLayoutWdg tile = TileLayoutWdg( **my.kwargs ) parent_dict = my.kwargs.get("parent_dict") has_parent=False if parent_dict: has_parent = True path = my.kwargs.get("path") if collection and path: title_div = DivWdg() top.add(title_div) title_div.add_style("float: left") title_div.add_style("margin: 15px 0px 15px 30px") asset_lib_span_div = SpanWdg() title_div.add(asset_lib_span_div) icon = IconWdg(name="Asset Library", icon="BS_FOLDER_OPEN") asset_lib_span_div.add(icon) asset_lib_span_div.add(" <a><b>Asset Library</b></a> ") path = path.strip("/") parts = path.split("/") for idx, part in enumerate(parts): title_div.add(" / ") # the last spt_collection_link does not need a search_key if has_parent and (idx is not len(parts) - 1): search_key = parent_dict.get(part) title_div.add(" <a class='spt_collection_link' search_key=%s><b>%s</b></a> " % (search_key, part)) else: title_div.add(" <a class='spt_collection_link'><b>%s</b></a> " % part) title_div.add_style("margin-top: 10px") # Adding behavior to collections link parts = my.kwargs.get("search_type").split("/") collection_type = "%s/%s_in_%s" % (parts[0], parts[1], parts[1]) exists = SearchType.get(collection_type, no_exception=True) if not exists: title_div.add("SearchType %s is not registered." % collection_type) return top # These behaviors are only activated if the view is within collection layout, # "is_new_tab" is a kwargs set to true, if opening a new tab if not my.kwargs.get("is_new_tab"): icon.add_class("hand") icon.add_behavior( { 'type': 'mouseover', 'cbjs_action': ''' bvr.src_el.setStyle('opacity', 1.0); ''' } ) icon.add_behavior( { 'type': 'mouseout', 'cbjs_action': ''' bvr.src_el.setStyle('opacity', 0.6); ''' } ) # make icon and All Assets title clickable to return to view all assets asset_lib_span_div.add_class("hand") asset_lib_span_div.add_behavior( { 'type': 'click_up', 'cbjs_action': ''' var top = bvr.src_el.getParent(".spt_collection_top"); var content = top.getElements(".spt_collection_content"); spt.panel.refresh(top); ''' } ) title_div.add_class("hand") title_div.add_relay_behavior( { 'type': 'mouseup', 'search_type': my.kwargs.get("search_type"), 'collection_type': collection_type, 'bvr_match_class': 'spt_collection_link', 'cbjs_action': ''' var top = bvr.src_el.getParent(".spt_collection_top"); var content = top.getElement(".spt_collection_content"); var collection_key = bvr.src_el.getAttribute("search_key"); if (!collection_key) { spt.notify.show_message("Already in the Collection."); } else { var collection_code = collection_key.split("workflow/asset?project=workflow&code=")[1]; var collection_path = bvr.src_el.innerText; var expr = "@SEARCH("+bvr.collection_type+"['parent_code','"+collection_code+"']."+bvr.search_type+")"; var cls = "tactic.ui.panel.CollectionContentWdg"; var kwargs = { collection_key: collection_key, path: collection_path, search_type: bvr.search_type, show_shelf: false, show_search_limit: true, expression: expr } spt.panel.load(content, cls, kwargs); bvr.src_el.setStyle("box-shadow", "0px 0px 3px rgba(0,0,0,0.5)"); } ''' } ) #title_div.add("/ %s" % collection.get_value("name") ) #scale_wdg = tile.get_scale_wdg() #top.add(scale_wdg) #scale_wdg.add_style("float: right") top.add(my.get_header_wdg()) top.add(tile) return top
def get_displayxx(my): show_menu = my.kwargs.get("show_menu") is_disabled = my.kwargs.get("is_disabled") show_title = my.kwargs.get("show_title") show_title = show_title in ['True', True] width = 35 if show_title: height = 26 else: height = 20 height = 30 top = my.top top.add_class("spt_button_top") top.add_style("overflow: hidden") #border = top.get_color("border") #top.add_border(-20) top.add_gradient("background", "background", 20, -35) top.add_style("border-width: 1px 0 1px 0") top.add_style("border-style: solid") top.add_style("border-color: %s" % top.get_color('border')) #top.add_style("margin-left: -1px") inner = my.inner top.add(inner) inner.add_color("color", "color3") inner.add_style("padding-top: 3px") inner.add_style("overflow: hidden") title = my.kwargs.get("title") inner.add_class("hand") inner.add_style("z-index: 20") #inner.add_style("overflow: hidden") #inner.add_style("opacity: 0.5") inner.add_attr("title", title) my.button.add_style("margin-top: 5px") inner.add(my.button) icon_str = my.kwargs.get("icon") icon = IconWdg(title, icon_str) my.button.add(icon) icon.add_class("spt_button_icon") my.show_arrow = my.kwargs.get("show_arrow") in [True, 'true'] if my.show_arrow or my.dialog: arrow = IconWdg(title, IconWdg.ARROW_MORE_INFO) inner.add(arrow) arrow.add_style("position: absolute") arrow.add_style("float: left") arrow.add_style("margin-left: 2px") arrow.add_style("margin-top: -10px") inner.add_style("font-size: 8px") inner.add_style("height: %spx" % height) inner.add_style("width: %spx" % width) inner.add_style("text-align: center") show_title = False if show_title: title_div = DivWdg() title_div.add(title) inner.add(title_div) inner.add_behavior({ 'type': 'click', 'width': width, 'cbjs_action': ''' var button = bvr.src_el; button.setStyle("border-style", "ridge"); button.setStyle("width", bvr.width-2); ''' }) inner.add_behavior({ 'type': 'click_up', 'width': width, 'cbjs_action': ''' var button = bvr.src_el; button.setStyle("border-style", "none"); button.setStyle("width", bvr.width); ''' }) inner.add_behavior({ 'type': 'hover', 'width': width, 'cbjs_action_over': ''' var button = bvr.src_el; var icon = button.getElement(".spt_button_icon"); icon.setStyle('opacity', '1'); ''', 'cbjs_action_out': ''' var button = bvr.src_el; button.setStyle("border-style", "none"); var icon = button.getElement(".spt_button_icon"); icon.setStyle('opacity', '0.5'); button.setStyle("width", bvr.width); ''' }) if show_menu in ['true', True]: inner.add_style("float: left") arrow_div = DivWdg() top.add(arrow_div) arrow_div.add_style("opacity: 0.5") arrow_div.add_style("z-index: 100") arrow_div.add_style("height: %spx" % height) arrow_div.add_style("border-left: dotted 1px %s" % arrow_div.get_color("border")) #arrow_div.add_style("margin-left: -15px") arrow_div.add_style("float: left") arrow = DivWdg(IconWdg("More Options", IconWdg.ARROW_MORE_INFO)) arrow.add_style("margin-top: 8px") arrow_div.add(arrow) arrow_div.add_style("position: relative") arrow_div.add_behavior({ 'type': 'hover', 'cbjs_action_over': ''' var button = bvr.src_el; var height = parseInt(button.getStyle("height").replace("px","")); var width = parseInt(button.getStyle("width").replace("px","")); button.setStyle('opacity', '1'); button.setStyle('border', 'solid 1px red'); button.setStyle("height", height-2); button.setStyle("width", width-2); ''', 'cbjs_action_out': ''' var button = bvr.src_el; var height = parseInt(button.getStyle("height").replace("px","")); var width = parseInt(button.getStyle("width").replace("px","")); button.setStyle('opacity', '0.5'); button.setStyle('border', ''); button.setStyle("height", height+2); button.setStyle("width", width+2); ''' }) my.add_menu_wdg(arrow_div) if is_disabled in ['true', True]: disabled_div = DivWdg() disabled_div.add_class("spt_save_button_disabled") disabled_div.set_attr("title", "%s (Disabled)" % title) disabled_div.add_style("position: relative") disabled_div.add_style("height: %spx" % (height + 3)) disabled_div.add_style("width: %spx" % width) #disabled_div.add_style("margin-left: -%spx" % width) disabled_div.add_style("margin-top: -%spx" % (height + 3)) disabled_div.add_style("opacity", "0.6") disabled_div.add_style("background", "#AAA") inner.add_style("opacity", "1") top.add(disabled_div) if my.dialog: top.add(my.dialog) dialog_id = my.dialog.get_id() inner.add_behavior({ 'type': 'load', 'height': height, 'dialog_id': dialog_id, 'cbjs_action': ''' var pos = bvr.src_el.getPosition(); var el = $(bvr.dialog_id); el.setStyle("left", pos.x); el.setStyle("top", pos.y+bvr.height+13); ''' }) my.inner.add_behavior({ 'type': 'click_up', 'dialog_id': dialog_id, 'cbjs_action': ''' var dialog = $(bvr.dialog_id); spt.toggle_show_hide(dialog); ''' }) return top
def get_display(my): top = my.top top.add_style("white-space: nowrap") #top.add_style("position: relative") base = "%s/%s" % (BASE, my.top.get_theme()) show_menu = my.kwargs.get("show_menu") is_disabled = my.kwargs.get("is_disabled") button = DivWdg() button.add_style("float: left") my.inner = button top.add(button) my.inner.add_class("hand") button.add_class("spt_button_top") button.add_style("position: relative") #img = "<img src='%s/MainButtonSlices_button.png'/>" % base #img_div = DivWdg(img) #button.add(img_div) #img_div.add_style("opacity", ALPHA) img_div = DivWdg() button.add(img_div) img_div.add_style("width: 30px") img_div.add_style("height: 35px") over_div = DivWdg() button.add(over_div) over_div.add_class("spt_button_over") over_img = "<img src='%s/MainButton_over.png'/>" % base over_div.add(over_img) over_div.add_style("position: absolute") over_div.add_style("top: 0px") over_div.add_style("left: 0px") over_div.add_style("display: none") click_div = DivWdg() button.add(click_div) click_div.add_class("spt_button_click") click_img = "<img src='%s/MainButton_click.png'/>" % base click_div.add(click_img) click_div.add_style("position: absolute") click_div.add_style("top: 0px") click_div.add_style("left: 0px") click_div.add_style("display: none") title = my.kwargs.get("title") tip = my.kwargs.get("tip") if not tip: tip = title icon_div = my.icon_div button.add(icon_div) #icon_div.add_class("spt_button_click") icon_str = my.kwargs.get("icon") icon = IconWdg(tip, icon_str, right_margin=0, width=16) icon.add_class("spt_button_icon") icon_div.add(icon) icon_div.add_style("position: absolute") #TODO: removed this top attr after we trim the top and bottom whitespace of the over image icon_div.add_style("top: 12px") icon_div.add_style("left: 6px") if my.is_disabled: icon_div.add_style("opacity: 0.5") my.icon_div = icon_div sub_icon = my.kwargs.get("sub_icon") if sub_icon: sub_icon = IconWdg(icon=sub_icon, size="8") button.add(sub_icon) sub_icon.add_style("position: absolute") sub_icon.add_style("bottom: 4px") sub_icon.add_style("right: 0px") my.show_arrow = my.kwargs.get("show_arrow") in [True, 'true'] if my.show_arrow or my.dialog: arrow_div = DivWdg() button.add(arrow_div) arrow_div.add_style("position: absolute") arrow_div.add_style("top: 24px") arrow_div.add_style("left: 20px") arrow = IconWdg(tip, IconWdg.ARROW_MORE_INFO) arrow_div.add(arrow) web = WebContainer.get_web() is_IE = web.is_IE() #my.hit_wdg.add_style("height: 100%") my.hit_wdg.add_style("width: 100%") if is_IE: my.hit_wdg.add_style("filter: alpha(opacity=0)") my.hit_wdg.add_style("height: 40px") else: my.hit_wdg.add_style("height: 100%") my.hit_wdg.add_style("opacity: 0.0") if my.is_disabled: my.hit_wdg.add_style("display: none") button.add(my.hit_wdg) my.hit_wdg.add_style("position: absolute") my.hit_wdg.add_style("top: 0px") my.hit_wdg.add_style("left: 0px") my.hit_wdg.add_attr("title", tip) """ my.hit_wdg.add_behavior( { 'type': 'hover', 'cbjs_action_over': ''' var top = bvr.src_el.getParent(".spt_button_top") var over = top.getElement(".spt_button_over"); var click = top.getElement(".spt_button_click"); over.setStyle("display", ""); click.setStyle("display", "none"); ''', 'cbjs_action_out': ''' var top = bvr.src_el.getParent(".spt_button_top") var over = top.getElement(".spt_button_over"); var click = top.getElement(".spt_button_click"); over.setStyle("display", "none"); click.setStyle("display", "none"); ''' } ) """ # add a second arrow widget if my.show_arrow_menu: my.inner.add(my.arrow_div) my.arrow_div.add_attr("title", "More Options") my.arrow_div.add_style("position: absolute") my.arrow_div.add_style("top: 11px") my.arrow_div.add_style("left: 20px") my.arrow_div.add(my.arrow_menu) if my.dialog: top.add(my.dialog) dialog_id = my.dialog.get_id() my.hit_wdg.add_behavior({ 'type': 'click_up', 'dialog_id': dialog_id, 'cbjs_action': ''' var dialog = $(bvr.dialog_id); var pos = bvr.src_el.getPosition(); var size = bvr.src_el.getSize(); //var dialog = $(bvr.dialog_id); dialog.setStyle("left", pos.x); dialog.setStyle("top", pos.y+size.y); spt.toggle_show_hide(dialog); ''' }) return top
def get_display(my): my.collection_key = my.kwargs.get("collection_key") collection = Search.get_by_search_key(my.collection_key) top = my.top top.add_style("min-height: 400px") my.kwargs["scale"] = 75 my.kwargs["show_scale"] = False my.kwargs["expand_mode"] = "plain" my.kwargs["show_search_limit"] = False from tile_layout_wdg import TileLayoutWdg tile = TileLayoutWdg(**my.kwargs) parent_dict = my.kwargs.get("parent_dict") has_parent = False if parent_dict: has_parent = True path = my.kwargs.get("path") if collection and path: title_div = DivWdg() top.add(title_div) title_div.add_style("float: left") title_div.add_style("margin: 15px 0px 15px 30px") asset_lib_span_div = SpanWdg() title_div.add(asset_lib_span_div) icon = IconWdg(name="Asset Library", icon="BS_FOLDER_OPEN") asset_lib_span_div.add(icon) asset_lib_span_div.add(" <a><b>Asset Library</b></a> ") path = path.strip("/") parts = path.split("/") for idx, part in enumerate(parts): title_div.add(" / ") # the last spt_collection_link does not need a search_key if has_parent and (idx is not len(parts) - 1): search_key = parent_dict.get(part) title_div.add( " <a class='spt_collection_link' search_key=%s><b>%s</b></a> " % (search_key, part)) else: title_div.add( " <a class='spt_collection_link'><b>%s</b></a> " % part) title_div.add_style("margin-top: 10px") # Adding behavior to collections link parts = my.kwargs.get("search_type").split("/") collection_type = "%s/%s_in_%s" % (parts[0], parts[1], parts[1]) exists = SearchType.get(collection_type, no_exception=True) if not exists: title_div.add("SearchType %s is not registered." % collection_type) return top # These behaviors are only activated if the view is within collection layout, # "is_new_tab" is a kwargs set to true, if opening a new tab if not my.kwargs.get("is_new_tab"): icon.add_class("hand") icon.add_behavior({ 'type': 'mouseover', 'cbjs_action': ''' bvr.src_el.setStyle('opacity', 1.0); ''' }) icon.add_behavior({ 'type': 'mouseout', 'cbjs_action': ''' bvr.src_el.setStyle('opacity', 0.6); ''' }) # make icon and All Assets title clickable to return to view all assets asset_lib_span_div.add_class("hand") asset_lib_span_div.add_behavior({ 'type': 'click_up', 'cbjs_action': ''' var top = bvr.src_el.getParent(".spt_collection_top"); var view_panel = top.getParent(".spt_view_panel"); spt.panel.refresh(view_panel); ''' }) title_div.add_class("hand") title_div.add_relay_behavior({ 'type': 'mouseup', 'search_type': my.kwargs.get("search_type"), 'collection_type': collection_type, 'bvr_match_class': 'spt_collection_link', 'cbjs_action': ''' var top = bvr.src_el.getParent(".spt_collection_top"); var content = top.getElement(".spt_collection_content"); var collection_key = bvr.src_el.getAttribute("search_key"); if (!collection_key) { spt.notify.show_message("Already in the Collection."); } else { var collection_code = collection_key.split("workflow/asset?project=workflow&code=")[1]; var collection_path = bvr.src_el.innerText; var expr = "@SEARCH("+bvr.collection_type+"['parent_code','"+collection_code+"']."+bvr.search_type+")"; var cls = "tactic.ui.panel.CollectionContentWdg"; var kwargs = { collection_key: collection_key, path: collection_path, search_type: bvr.search_type, show_shelf: false, show_search_limit: true, expression: expr } spt.panel.load(content, cls, kwargs); bvr.src_el.setStyle("box-shadow", "0px 0px 3px rgba(0,0,0,0.5)"); } ''' }) #title_div.add("/ %s" % collection.get_value("name") ) #scale_wdg = tile.get_scale_wdg() #top.add(scale_wdg) #scale_wdg.add_style("float: right") top.add(my.get_header_wdg()) top.add(tile) return top
def get_display(self): element_data_dict = {} config = self.get_config() element_names = config.get_element_names() content_wdg = DivWdg() content_wdg.add_class("spt_simple_search_top") onload_js = DivWdg() content_wdg.add(onload_js) onload_js.add_behavior({ 'type': 'load', 'cbjs_action': self.get_onload_js() }) if not element_names: element_names = ['keywords'] self.set_content(content_wdg) # this is somewhat duplicated logic from alter_search, but since this is called # in ViewPanelWdg, it's a diff instance and needs to retrieve again filter_data = FilterData.get() filter_view = self.kwargs.get("filter_view") if filter_view: search = Search("config/widget_config") search.add_filter("view", filter_view) search.add_filter("category", "search_filter") search.add_filter("search_type", self.search_type) filter_config = search.get_sobject() if filter_config: filter_xml = filter_config.get_xml_value("config") filter_value = filter_xml.get_value("config/filter/values") if filter_value: data_list = jsonloads(filter_value) else: data_list = filter_data.get_values_by_prefix(self.prefix) for data in data_list: handler = data.get("handler") element_name = data.get("element_name") if not element_name: continue element_data_dict[element_name] = data elements_wdg = DivWdg() content_wdg.add(elements_wdg) elements_wdg.add_color("color", "color") elements_wdg.add_style("padding-top: 10px") elements_wdg.add_style("padding-bottom: 15px") #elements_wdg.add_color("background", "background3", 0) elements_wdg.add_color("background", "background", -3) elements_wdg.add_border() if len(element_names) == 1: elements_wdg.add_style("border-width: 0px 0px 0px 0px") elements_wdg.add_style("padding-right: 50px") else: elements_wdg.add_style("border-width: 0px 0px 0px 0px") table = Table() table.add_color("color", "color") elements_wdg.add(table) table.add_class("spt_simple_search_table") columns = self.kwargs.get("columns") if not columns: columns = 2 else: columns = int(columns) num_rows = int(len(element_names) / columns) + 1 tot_rows = int(len(element_names) / columns) + 1 project_code = Project.get_project_code() # self.search_type could be the same as self.base_search_type full_search_type = SearchType.build_search_type( self.search_type, project_code) visible_rows = self.kwargs.get("visible_rows") if visible_rows: visible_rows = int(visible_rows) num_rows = visible_rows else: visible_rows = 0 titles = config.get_element_titles() row_count = 0 for i, element_name in enumerate(element_names): attrs = config.get_element_attributes(element_name) if i % columns == 0: if visible_rows and row_count == visible_rows: tr, td = table.add_row_cell("+ more ...") td.add_class("hand") td.add_class("SPT_DTS") td.add_class("spt_toggle") td.add_style("padding-left: 10px") td.add_behavior({ 'type': 'click_up', 'visible_rows': visible_rows, 'cbjs_action': ''' var top = bvr.src_el.getParent(".spt_simple_search_table"); var expand = true; var rows = top.getElements(".spt_simple_search_row"); for (var i = 0; i < rows.length; i++) { var row = rows[i]; if (row.getStyle("display") == "none") { row.setStyle("display", ""); } else { row.setStyle("display", "none"); expand = false; } } var spacer = top.getElements(".spt_spacer"); var cell = top.getElement(".spt_toggle"); if (expand) { spacer.setStyle("height", (rows.length+bvr.visible_rows)*20); cell.innerHTML = "- less ..."; } else { spacer.setStyle("height", bvr.visible_rows*20); cell.innerHTML = "+ more ..."; } ''' }) tr = table.add_row() if visible_rows and row_count >= visible_rows: tr.add_class("spt_simple_search_row") tr.add_style("display: none") tr.add_style("height: 0px") row_count += 1 icon_td = table.add_cell() title_td = table.add_cell() element_td = table.add_cell() # need to add these to all the elements because it is all separated # by table tds icon_td.add_class("spt_element_item") icon_td.add_attr("spt_element_name", element_name) title_td.add_class("spt_element_item") title_td.add_attr("spt_element_name", element_name) element_td.add_class("spt_element_item") element_td.add_attr("spt_element_name", element_name) # show the title title_td.add_style("text-align: left") title_td.add_style("padding-right: 5px") title_td.add_style("min-width: 60px") element_wdg = DivWdg() if attrs.get('view') == 'false': element_wdg.add_style('display: none') element_td.add(element_wdg) if i >= 0 and i < columns - 1 and len(element_names) > 1: spacer = DivWdg() spacer.add_class("spt_spacer") spacer.add_style("border-style: solid") spacer.add_style("border-width: 0 0 0 0") #spacer.add_style("height: %spx" % (num_rows*20)) spacer.add_style("height: %spx" % (num_rows * 10)) spacer.add_style("width: 10px") spacer.add_style("border-color: %s" % spacer.get_color("border")) spacer.add(" ") td = table.add_cell(spacer) td.add_attr("rowspan", tot_rows) element_wdg.add_style("padding: 4px 10px 4px 5px") element_wdg.add_class("spt_table_search") element_wdg.add_style("margin: 1px") element_wdg.add_style("min-height: 20px") element_wdg.add_style("min-width: 250px") # this is done at get_top() #element_wdg.add_class("spt_search") element_wdg.add(HiddenWdg("prefix", self.prefix)) display_handler = config.get_display_handler(element_name) element_wdg.add(HiddenWdg("handler", display_handler)) element_wdg.add(HiddenWdg("element_name", element_name)) from pyasm.widget import ExceptionWdg try: widget = config.get_display_widget(element_name) if widget: widget.set_title(titles[i]) except Exception as e: element_wdg.add(ExceptionWdg(e)) continue if not widget: # the default for KeywordFilterElementWdg is mode=keyword if not self.column_choice: self.column_choice = self.get_search_col(self.search_type) widget = KeywordFilterElementWdg(column=self.column_choice) widget.set_name(element_name) from pyasm.widget import IconWdg icon_div = DivWdg() icon_td.add(icon_div) icon_div.add_style("width: 20px") icon_div.add_style("margin-top: -2px") icon_div.add_style("padding-left: 6px") icon_div.add_class("spt_filter_top") widget.set_show_title(False) #element_wdg.add("%s: " % title) data = element_data_dict.get(element_name) view_panel_keywords = self.kwargs.get("keywords") #user data takes precedence over view_panel_keywords if isinstance(widget, KeywordFilterElementWdg): if view_panel_keywords: widget.set_value("value", view_panel_keywords) if data: widget.set_values(data) if isinstance( widget, KeywordFilterElementWdg ) and not full_search_type.startswith('sthpw/sobject_list'): widget.set_option('filter_search_type', full_search_type) try: if attrs.get('view') != 'false': title_td.add(widget.get_title_wdg()) element_wdg.add(widget.get_buffer_display()) except Exception as e: element_wdg.add(ExceptionWdg(e)) continue icon = IconWdg("Filter Set", "BS_ASTERISK") #icon.add_style("color", "#393") icon_div.add(icon) icon.add_class("spt_filter_set") icon.add_class("hand") icon.add_attr("spt_element_name", element_name) icon.add_behavior({ 'type': 'click', 'cbjs_action': ''' var element_name = bvr.src_el.getAttribute("spt_element_name"); spt.simple_search.clear_element(element_name); ''' }) if not widget.is_set(): icon.add_style("display: none") else: color = icon_div.get_color("background", -10) icon_td.add_style("background-color", color) title_td.add_style("background-color", color) element_td.add_style("background-color", color) #elements_wdg.add("<br clear='all'/>") top = self.get_top() return top
def get_display(my): smenu_div = DivWdg() smenu_div.add_class( "SPT_SMENU" ) smenu_div.add_class( "SPT_SMENU_%s" % my.menu_tag_suffix ) smenu_div.set_box_shadow() smenu_div.add_border() smenu_div.add_color("background", "background") smenu_div.add_color("color", "color") smenu_div.add_behavior( { 'type': 'load', 'cbjs_action': ''' spt.dom.load_js( ["ctx_menu.js"], function() { spt.dom.load_js( ["smart_menu.js"], function() { } ) } ); ''' } ) if my.setup_cbfn: smenu_div.set_attr( "SPT_SMENU_SETUP_CBFN", my.setup_cbfn ) smenu_div.set_z_start( 300 ) #smenu_div.add_looks( "smenu border curs_default" ) # smenu_div.add_styles( "padding-top: 3px; padding-bottom: 5px;" ) m_width = my.width - 2 smenu_div.add_style( ("width: %spx" % m_width) ) smenu_div.add_style("overflow-x: hidden") icon_width = 16 icon_col_width = 0 if my.allow_icons: icon_col_width = icon_width + 2 label_width = m_width - icon_col_width - icon_width menu_table = Table() menu_table.add_styles( "text-align: left; text-indent: 3px; border-collapse: collapse;" ) #menu_table.add_color("background", "background") menu_table.add_color("color", "color") options = my.opt_spec_list opt_count = 0 if options[0].get('type') != 'title': my._add_spacer_row(menu_table, 3, icon_width, icon_col_width, label_width) """ menu_table.add_relay_behavior( { 'type': 'mouseenter', 'bvr_match_class': 'SPT_SMENU_ENTRY', 'bgcolor': menu_table.get_color("side_bar_title", -15, default="background3"), 'cbjs_action': ''' bvr.src_el.setStyle("background-color", bvr.bgcolor); bvr.src_el.setStyle("color", bvr.bgcolor); spt.smenu.entry_over( evt, bvr ); ''' } ) menu_table.add_relay_behavior( { 'type': 'mouseleave', 'bvr_match_class': 'SPT_SMENU_ENTRY', 'cbjs_action': ''' bvr.src_el.setStyle("background-color", ""); spt.smenu.entry_out( evt, bvr ); ''' } ) """ for opt in options: # if entry is a title, then add a spacer before if opt.get('type') == 'title' and opt_count: my._add_spacer_row(menu_table, 6, icon_width, icon_col_width, label_width) tbody = menu_table.add_tbody() tbody.add_style("display","table-row-group") tr = menu_table.add_row() #tr.add_looks( "smenu" ) tr.add_class( "SPT_SMENU_ENTRY" ) tr.add_class( "SPT_SMENU_ENTRY_%s" % opt['type'].upper() ) if opt.has_key('enabled_check_setup_key'): tr.set_attr( "SPT_ENABLED_CHECK_SETUP_KEY", opt.get('enabled_check_setup_key') ) if opt.has_key('hide_when_disabled') and opt.get('hide_when_disabled'): tr.set_attr( "SPT_HIDE_WHEN_DISABLED", "true" ) if opt['type'] in [ 'action', 'toggle' ]: hover_bvr = {'type':'hover', 'add_looks': 'smenu_hilite', 'cbjs_action_over': 'spt.smenu.entry_over( evt, bvr );', 'cbjs_action_out': 'spt.smenu.entry_out( evt, bvr );' } if opt.has_key('hover_bvr_cb'): hover_bvr.update( opt.get('hover_bvr_cb') ) tr.add_behavior( hover_bvr ) tr.add_class("hand") if opt['type'] == 'action': if opt.has_key('bvr_cb') and type(opt['bvr_cb']) == dict: bvr = {} bvr.update( opt['bvr_cb'] ) bvr['cbjs_action_for_menu_item'] = bvr['cbjs_action'] bvr['cbjs_action'] = 'spt.smenu.cbjs_action_wrapper( evt, bvr );' bvr.update( { 'type': 'click_up' } ) tr.add_behavior( bvr ) if opt['type'] == 'submenu': hover_bvr = { 'type': 'hover', 'add_looks': 'smenu_hilite', 'cbjs_action_over': 'spt.smenu.submenu_entry_over( evt, bvr );', 'cbjs_action_out': 'spt.smenu.submenu_entry_out( evt, bvr );', 'submenu_tag': "SPT_SMENU_%s" % opt['submenu_tag_suffix'], } if opt.has_key('hover_bvr_cb'): hover_bvr.update( opt.get('hover_bvr_cb') ) tr.add_behavior( hover_bvr ) # now trap click on submenu, so that it doesn't make the current menu disappear ... tr.add_behavior( { 'type': 'click', 'cbjs_action': ';', 'activator_type': 'smart_menu' } ) tr.add_looks( "curs_default" ) # Left icon cell ... if my.allow_icons: td = menu_table.add_cell() td.add_styles("text-align: center; vertical-align: middle; width: %spx;" % icon_col_width) #td.add_looks("smenu_icon_column") td.add_color("color", "color3") td.add_color("background", "background3") if opt.has_key( 'icon' ): icon_wdg = IconWdg("", opt['icon']) icon_wdg.add_class("SPT_ENABLED_ICON_LOOK") td.add( icon_wdg ) # if disabled: # icon_wdg.add_style( "opacity: .4" ) # icon_wdg.add_style( "filter: alpha(opacity=40)" ) # Menu option label cell ... td = menu_table.add_cell() td.add_style("width", ("%spx" % label_width)) td.add_style("height", ("%spx" % icon_col_width)) #if opt.get('type') != 'title': # td.add_style( "padding-left: 6px" ) #td.add_style( "padding-top: 2px" ) td.add_style("padding: 6px 4px") if opt.has_key( 'label' ): label_str = opt.get('label').replace('"','"') td.add_class("SPT_LABEL") td.add( label_str ) td.set_attr( "SPT_ORIG_LABEL", label_str ) #td.add_looks("fnt_text") td.add_style("font-size: 1.0em") if opt.get('type') == 'title': #td.add_looks("smenu_title") td.add_color("background", "background2") td.add_color("color", "color2") td.add_style("font-weight", "bold") td.add_style("padding", "3px") elif opt.get('type') == 'separator': hr = HtmlElement("hr") hr.add_looks( "smenu_separator" ) td.add( hr ) td.add_class("SPT_ENABLED_LOOK") # if disabled: # td.add_style( "opacity: .2" ) # td.add_style( "filter: alpha(opacity=20)" ) # Submenu arrow icon cell ... td = menu_table.add_cell() td.add_style("width", ("%spx" % icon_width)) if opt['type'] == 'submenu': icon_wdg = IconWdg("", IconWdg.ARROWHEAD_DARK_RIGHT) td.add(icon_wdg) td.add_class("SPT_ENABLED_ICON_LOOK") # extend title entry styling into the submenu arrow cell and add some spacing after if opt.get('type') == 'title': #td.add_looks("smenu_title") td.add_color("background", "background2") td.add_color("color", "color2") td.add_style("font-weight", "bold") td.add_style("padding", "3px") my._add_spacer_row(menu_table, 3, icon_width, icon_col_width, label_width) # if disabled: # td.add_style( "opacity: .4" ) # td.add_style( "filter: alpha(opacity=40)" ) opt_count += 1 my._add_spacer_row(menu_table, 5, icon_width, icon_col_width, label_width) smenu_div.add( menu_table ) smenu_div.add_style( "display: none" ) smenu_div.add_style( "position: absolute" ) return smenu_div
def get_display(my): div = DivWdg() if not Container.get_dict("JSLibraries", "spt_popup"): div.add_style("position: fixed") div.add_style("top: 0px") div.add_style("left: 0px") div.add_style("opacity: 0.4") div.add_style("background", "#000") div.add_style("padding: 100px") div.add_style("height: 100%") div.add_style("width: 100%") div.add_class("spt_popup_background") div.add_style("display: none") div.add_behavior( { 'type': 'click_up', 'cbjs_action': ''' spt.hide(bvr.src_el); ''' } ) Container.put("PopupWdg:background", True) # This is the absolute outside of a popup, including the drop shadow widget = DivWdg() div.add(widget) widget.add_class("spt_popup") if not Container.get_dict("JSLibraries", "spt_popup"): widget.add_behavior( { 'type': 'load', 'cbjs_action': my.get_onload_js() } ) width = my.kwargs.get("width") if not width: width = 10 #widget.add_behavior( { # 'type': 'load', # 'cbjs_action': 'bvr.src_el.makeResizable({handle:bvr.src_el.getElement(".spt_popup_resize")})' #} ) web = WebContainer.get_web() widget.set_id(my.name) if my.kwargs.get("display") == "true": pass else: widget.add_style("display: none") widget.add_style("position: absolute") widget.add_style("left: 400px") widget.add_style("top: 100px") widget.add_border() widget.add_color("background", "background") #widget.set_box_shadow(color="#000") widget.set_box_shadow() table = Table() table.add_behavior( { 'type': 'load', 'width': width, 'cbjs_action': ''' bvr.src_el.setStyle("width", bvr.width) var popup = bvr.src_el.getParent(".spt_popup"); var window_size = $(window).getSize(); var size = bvr.src_el.getSize(); var left = window_size.x/2 - size.x/2; var top = window_size.y/2 - size.y/2; popup.setStyle("left", left); //popup.setStyle("top", top); ''' } ) table.add_row() """ # Qt doesn't support shadows very well if web.get_browser() == 'Qtx': # dynamically add css files table.add_class("css_shadow_table") td = table.add_cell() td.add_class("css_shadow_td css_shadow_top_left SPT_POPUP_SHADOW") td = table.add_cell() td.add_class("css_shadow_td css_shadow_top SPT_POPUP_SHADOW") td = table.add_cell() td.add_class("css_shadow_td css_shadow_top_right SPT_POPUP_SHADOW") # Middle (Content) Row of Shadow table ... table.add_row() td = table.add_cell() td.add_class("css_shadow_td css_shadow_left SPT_POPUP_SHADOW") """ content_td = table.add_cell() content_td.add_class("css_shadow_td") """ if web.get_browser() == 'Qtx': td = table.add_cell() td.add_class("css_shadow_td css_shadow_right SPT_POPUP_SHADOW") # Bottom Row of Shadow table ... table.add_row() td = table.add_cell() td.add_class("css_shadow_td css_shadow_bottom_left SPT_POPUP_SHADOW") td = table.add_cell() td.add_class("css_shadow_td css_shadow_bottom SPT_POPUP_SHADOW") td = table.add_cell() td.add_class("css_shadow_td css_shadow_bottom_right SPT_POPUP_SHADOW") """ drag_div = DivWdg() #from tactic.ui.container import ArrowWdg #arrow = ArrowWdg() #drag_div.add(arrow) # FIXME: for some reason, this causes popups to stop functioning after # close a couple of times my.add_header_context_menu(drag_div) # create the 'close' button ... if my.allow_close: close_wdg = SpanWdg(css='spt_popup_close') #close_wdg.add( IconWdg("Close", IconWdg.POPUP_WIN_CLOSE) ) close_wdg.add( IconWdg("Close", "BS_REMOVE") ) close_wdg.add_style("margin: 5px 1px 3px 1px") close_wdg.add_style("float: right") close_wdg.add_class("hand") close_wdg.add_behavior({ 'type': 'click_up', 'cbjs_action': my.get_cancel_script() }) drag_div.add(close_wdg) # create the 'minimize' button ... minimize_wdg = SpanWdg(css='spt_popup_min') minimize_wdg.add_style("margin: 5px 1px 3px 1px") #minimize_wdg.add( IconWdg("Minimize", IconWdg.POPUP_WIN_MINIMIZE) ) minimize_wdg.add( IconWdg("Minimize", "BS_MINUS") ) minimize_wdg.add_style("float: right") minimize_wdg.add_class("hand") behavior = { 'type': 'click_up', 'cbjs_action': "spt.popup.toggle_minimize( bvr.src_el );" } minimize_wdg.add_behavior( behavior ); drag_div.add(minimize_wdg) #-- TO ADD SOON -- create the 'refresh' button ... # refresh_wdg = SpanWdg() # refresh_wdg.add( IconWdg("Refresh Popup", IconWdg.POPUP_WIN_REFRESH) ) # refresh_wdg.add_style("float: right") # refresh_wdg.add_class("hand") # behavior = { # 'type': 'click_up', # 'cbjs_action': "spt.popup.toggle_minimize( bvr.src_el );" # } # refresh_wdg.add_behavior( behavior ); # drag_div.add(refresh_wdg) width = my.kwargs.get("width") # style drag_div.add_style("font-size: 1.1em") drag_div.add_style("text-align: left") drag_div.add_class("spt_popup_width") drag_handle_div = DivWdg(id='%s_title' %my.name) drag_handle_div.add_style("padding: 12px;") #drag_handle_div.add_gradient("background", "background", +10) drag_handle_div.add_color("background", "background", -5) drag_handle_div.add_color("color", "color") drag_handle_div.add_style("font-weight", "bold") drag_handle_div.add_style("font-size", "12px") # add the drag capability. # NOTE: need to use getParent because spt.popup has not yet been # initialized when this is processed shadow_color = drag_div.get_color("shadow") drag_div.add_behavior( { 'type':'smart_drag', 'shadow_color': shadow_color, 'drag_el': "@.getParent('.spt_popup')", 'bvr_match_class': 'spt_popup_title', 'options': {'z_sort': 'bring_forward'}, 'ignore_default_motion': 'true', "cbjs_setup": ''' if (spt.popup.is_background_visible) { spt.popup.offset_x = document.body.scrollLeft; spt.popup.offset_y = document.body.scrollTop; spt.popup.hide_background(); var parent = bvr.src_el.getParent(".spt_popup"); parent.setStyle("box-shadow","0px 0px 20px " + bvr.shadow_color); } else { spt.popup.offset_x = 0; spt.popup.offset_y = 0; } ''', "cbjs_motion": ''' mouse_411.curr_x += spt.popup.offset_x; mouse_411.curr_y += spt.popup.offset_y; spt.mouse.default_drag_motion(evt, bvr, mouse_411); ''', "cbjs_action": '' } ) title_wdg = my.title_wdg if not title_wdg: title_wdg = "No Title" #else: # title_wdg = title_wdg drag_handle_div.add_behavior({ 'type': 'double_click', 'cbjs_action': my.get_cancel_script() }) drag_handle_div.add(title_wdg) drag_handle_div.add_class("spt_popup_title") # add a context menu from tactic.ui.container.smart_menu_wdg import SmartMenu SmartMenu.assign_as_local_activator( drag_handle_div, 'HEADER_CTX' ) drag_handle_div.add_attr("spt_element_name", "Test Dock") # add the content content_div = DivWdg() content_div.add_color("color", "color2") #content_div.add_color("background", "background2") from pyasm.web.palette import Palette palette = Palette.get() content_div.add_color("color", "color2") content_div.add_color("background", "background2") content_div.add_style("margin", "0px, -1px -0px -1px") content_div.set_id("%s_content" % my.name) content_div.add_class("spt_popup_content") content_div.add_style("overflow: hidden") content_div.add_style("display: block") #content_div.add_style("padding: 10px") if not my.content_wdg: my.content_wdg = "No Content" content_div.add(my.content_wdg) drag_div.add( drag_handle_div ) my.position_aux_div(drag_div, content_div) content_td.add(drag_div) widget.add(table) # ALWAYS make the Popup a Page Utility Widget (now processed client side) widget.add_class( "SPT_PUW" ) if my.z_start: widget.set_z_start( my.z_start ) widget.add_style("z-index: %s" % my.z_start) else: widget.add_style("z-index: 102") # add the resize icon icon = IconWdg( "Resize", IconWdg.RESIZE_CORNER ) icon.add_style("cursor: nw-resize") icon.add_style("z-index: 1000") icon.add_class("spt_popup_resize") icon.add_style("float: right") icon.add_style("margin-top: -15px") icon.add_behavior( { 'type': 'drag', "drag_el": '@', "cb_set_prefix": 'spt.popup.resize_drag' } ) content_td.add(icon) #return widget return div
def get_display(my): div = DivWdg() if not Container.get_dict("JSLibraries", "spt_popup"): div.add_style("position: fixed") div.add_style("top: 0px") div.add_style("left: 0px") div.add_style("opacity: 0.4") div.add_style("background", "#000") div.add_style("padding: 100px") div.add_style("height: 100%") div.add_style("width: 100%") div.add_class("spt_popup_background") div.add_style("display: none") div.add_behavior({ 'type': 'click_up', 'cbjs_action': ''' spt.hide(bvr.src_el); ''' }) Container.put("PopupWdg:background", True) # This is the absolute outside of a popup, including the drop shadow widget = DivWdg() div.add(widget) widget.add_class("spt_popup") if not Container.get_dict("JSLibraries", "spt_popup"): widget.add_behavior({ 'type': 'load', 'cbjs_action': my.get_onload_js() }) width = my.kwargs.get("width") if not width: width = 10 #widget.add_behavior( { # 'type': 'load', # 'cbjs_action': 'bvr.src_el.makeResizable({handle:bvr.src_el.getElement(".spt_popup_resize")})' #} ) web = WebContainer.get_web() widget.set_id(my.name) if my.kwargs.get("display") == "true": pass else: widget.add_style("display: none") widget.add_style("position: absolute") widget.add_style("left: 400px") widget.add_style("top: 100px") widget.add_border() widget.add_color("background", "background") #widget.set_box_shadow(color="#000") widget.set_box_shadow() table = Table() table.add_behavior({ 'type': 'load', 'width': width, 'cbjs_action': ''' bvr.src_el.setStyle("width", bvr.width) var popup = bvr.src_el.getParent(".spt_popup"); var window_size = $(window).getSize(); var size = bvr.src_el.getSize(); var left = window_size.x/2 - size.x/2; var top = window_size.y/2 - size.y/2; popup.setStyle("left", left); //popup.setStyle("top", top); ''' }) table.add_row() """ # Qt doesn't support shadows very well if web.get_browser() == 'Qtx': # dynamically add css files table.add_class("css_shadow_table") td = table.add_cell() td.add_class("css_shadow_td css_shadow_top_left SPT_POPUP_SHADOW") td = table.add_cell() td.add_class("css_shadow_td css_shadow_top SPT_POPUP_SHADOW") td = table.add_cell() td.add_class("css_shadow_td css_shadow_top_right SPT_POPUP_SHADOW") # Middle (Content) Row of Shadow table ... table.add_row() td = table.add_cell() td.add_class("css_shadow_td css_shadow_left SPT_POPUP_SHADOW") """ content_td = table.add_cell() content_td.add_class("css_shadow_td") """ if web.get_browser() == 'Qtx': td = table.add_cell() td.add_class("css_shadow_td css_shadow_right SPT_POPUP_SHADOW") # Bottom Row of Shadow table ... table.add_row() td = table.add_cell() td.add_class("css_shadow_td css_shadow_bottom_left SPT_POPUP_SHADOW") td = table.add_cell() td.add_class("css_shadow_td css_shadow_bottom SPT_POPUP_SHADOW") td = table.add_cell() td.add_class("css_shadow_td css_shadow_bottom_right SPT_POPUP_SHADOW") """ drag_div = DivWdg() #from tactic.ui.container import ArrowWdg #arrow = ArrowWdg() #drag_div.add(arrow) # FIXME: for some reason, this causes popups to stop functioning after # close a couple of times my.add_header_context_menu(drag_div) # create the 'close' button ... if my.allow_close: close_wdg = SpanWdg() #close_wdg.add( IconWdg("Close", IconWdg.POPUP_WIN_CLOSE) ) close_wdg.add(IconWdg("Close", "BS_REMOVE")) close_wdg.add_style("margin: 5px 1px 3px 1px") close_wdg.add_style("float: right") close_wdg.add_class("hand") close_wdg.add_behavior({ 'type': 'click_up', 'cbjs_action': my.get_cancel_script() }) drag_div.add(close_wdg) # create the 'minimize' button ... minimize_wdg = SpanWdg() minimize_wdg.add_style("margin: 5px 1px 3px 1px") #minimize_wdg.add( IconWdg("Minimize", IconWdg.POPUP_WIN_MINIMIZE) ) minimize_wdg.add(IconWdg("Minimize", "BS_MINUS")) minimize_wdg.add_style("float: right") minimize_wdg.add_class("hand") behavior = { 'type': 'click_up', 'cbjs_action': "spt.popup.toggle_minimize( bvr.src_el );" } minimize_wdg.add_behavior(behavior) drag_div.add(minimize_wdg) #-- TO ADD SOON -- create the 'refresh' button ... # refresh_wdg = SpanWdg() # refresh_wdg.add( IconWdg("Refresh Popup", IconWdg.POPUP_WIN_REFRESH) ) # refresh_wdg.add_style("float: right") # refresh_wdg.add_class("hand") # behavior = { # 'type': 'click_up', # 'cbjs_action': "spt.popup.toggle_minimize( bvr.src_el );" # } # refresh_wdg.add_behavior( behavior ); # drag_div.add(refresh_wdg) width = my.kwargs.get("width") # style drag_div.add_style("font-size: 1.1em") drag_div.add_style("text-align: left") drag_div.add_class("spt_popup_width") drag_handle_div = DivWdg(id='%s_title' % my.name) drag_handle_div.add_style("padding: 12px;") #drag_handle_div.add_gradient("background", "background", +10) drag_handle_div.add_color("background", "background", -5) drag_handle_div.add_color("color", "color") drag_handle_div.add_style("font-weight", "bold") drag_handle_div.add_style("font-size", "12px") # add the drag capability. # NOTE: need to use getParent because spt.popup has not yet been # initialized when this is processed shadow_color = drag_div.get_color("shadow") drag_div.add_behavior({ 'type': 'smart_drag', 'shadow_color': shadow_color, 'drag_el': "@.getParent('.spt_popup')", 'bvr_match_class': 'spt_popup_title', 'options': { 'z_sort': 'bring_forward' }, 'ignore_default_motion': 'true', "cbjs_setup": ''' if (spt.popup.is_background_visible) { spt.popup.offset_x = document.body.scrollLeft; spt.popup.offset_y = document.body.scrollTop; spt.popup.hide_background(); var parent = bvr.src_el.getParent(".spt_popup"); parent.setStyle("box-shadow","0px 0px 20px " + bvr.shadow_color); } else { spt.popup.offset_x = 0; spt.popup.offset_y = 0; } ''', "cbjs_motion": ''' mouse_411.curr_x += spt.popup.offset_x; mouse_411.curr_y += spt.popup.offset_y; spt.mouse.default_drag_motion(evt, bvr, mouse_411); ''', "cbjs_action": '' }) title_wdg = my.title_wdg if not title_wdg: title_wdg = "No Title" #else: # title_wdg = title_wdg drag_handle_div.add_behavior({ 'type': 'double_click', 'cbjs_action': my.get_cancel_script() }) drag_handle_div.add(title_wdg) drag_handle_div.add_class("spt_popup_title") # add a context menu from tactic.ui.container.smart_menu_wdg import SmartMenu SmartMenu.assign_as_local_activator(drag_handle_div, 'HEADER_CTX') drag_handle_div.add_attr("spt_element_name", "Test Dock") # add the content content_div = DivWdg() content_div.add_color("color", "color2") #content_div.add_color("background", "background2") from pyasm.web.palette import Palette palette = Palette.get() content_div.add_color("color", "color2") content_div.add_color("background", "background2") content_div.add_style("margin", "0px, -1px -0px -1px") content_div.set_id("%s_content" % my.name) content_div.add_class("spt_popup_content") content_div.add_style("overflow: hidden") content_div.add_style("display: block") #content_div.add_style("padding: 10px") if not my.content_wdg: my.content_wdg = "No Content" content_div.add(my.content_wdg) drag_div.add(drag_handle_div) my.position_aux_div(drag_div, content_div) content_td.add(drag_div) widget.add(table) # ALWAYS make the Popup a Page Utility Widget (now processed client side) widget.add_class("SPT_PUW") if my.z_start: widget.set_z_start(my.z_start) widget.add_style("z-index: %s" % my.z_start) else: widget.add_style("z-index: 102") # add the resize icon icon = IconWdg("Resize", IconWdg.RESIZE_CORNER) icon.add_style("cursor: nw-resize") icon.add_style("z-index: 1000") icon.add_class("spt_popup_resize") icon.add_style("float: right") icon.add_style("margin-top: -15px") icon.add_behavior({ 'type': 'drag', "drag_el": '@', "cb_set_prefix": 'spt.popup.resize_drag' }) content_td.add(icon) #return widget return div
def get_display(self): self.sobject_data = {} top = self.top top.add_style top.add_class("spt_gallery_top") inner = DivWdg() top.add(inner) # make the whole Gallery unselectable inner.add_class('unselectable') inner.add_style("position: fixed") inner.add_style("top: 0px") inner.add_style("left: 0px") inner.add_style("width: 100%") #inner.add_style("height: 100%") inner.add_style("bottom: 0px") inner.add_style("padding-bottom: 40px") #inner.add_style("background: rgba(0,0,0,0.5)") inner.add_style("background: rgba(0,0,0,1)") inner.add_style("z-index: 2000") width = self.kwargs.get("width") height = self.kwargs.get("height") # default to top. align = self.kwargs.get("align") if not align: align = "top" if not width: width = 1300 else: width = int(width) paths = self.get_paths(file_type='main') # icon type may be too small thumb_paths = self.get_paths(file_type='web') descriptions = [] for path in paths: sobject = self.sobject_data.get(path) if not sobject: descriptions.append("") else: description = sobject.get("description") if not description: description = "" descriptions.append(description) total_width = width * len(paths) inner.add_behavior( { 'type': 'load', 'width': width, 'total_width': total_width, 'descriptions': descriptions, 'cbjs_action': ''' spt.gallery = {}; // 1250 is defined also in the css styles spt.gallery.portrait = window.innerWidth < 1250; spt.gallery.portrait = false spt.gallery.top = bvr.src_el; spt.gallery.content = spt.gallery.top.getElement(".spt_gallery_content"); spt.gallery.content.setStyle('opacity','0.1') spt.gallery.desc_el = spt.gallery.top.getElement(".spt_gallery_description"); //window.addEvent('domready', function() { setTimeout(function() { // set the img h or w directly var items = bvr.src_el.getElements('.spt_gallery_item img'); // fade in spt.gallery.content.set('tween', {duration: 250}).fade('in'); /* for (var k=0; k < items.length; k++) { var sizes = items[k].getSize(); var item_h = sizes.y; var item_w = sizes.x; if (item_h >= item_w){ //items[k].setStyle('width', 'auto'); //items[k].setStyle('height', '100%'); } else { //items[k].setStyle('width','auto'); //items[k].setStyle('height','100%'); } } */ }, 50) spt.gallery.width = bvr.width; spt.gallery.descriptions = bvr.descriptions; spt.gallery.index = 0; spt.gallery.total = bvr.descriptions.length; spt.gallery.left_arrow = bvr.src_el.getElement('.spt_left_arrow'); spt.gallery.right_arrow = bvr.src_el.getElement('.spt_right_arrow'); spt.gallery.videos = {}; spt.gallery.init = function() { } spt.gallery.stack = []; spt.gallery.push_stack = function(key) { spt.gallery.stack.push(key); } spt.gallery.show_next = function(src_el) { if (!src_el) src_el = spt.gallery.right_arrow; if (spt.gallery.index >= spt.gallery.total-2) { spt.hide(src_el); } if (spt.gallery.index == spt.gallery.total-1) { return; } spt.gallery.index += 1; spt.gallery.show_index(spt.gallery.index); } spt.gallery.show_prev = function(src_el) { if (!src_el) src_el = spt.gallery.left_arrow; if (spt.gallery.index <= 1) { spt.hide(src_el); } if (spt.gallery.index == 0) { return; } spt.gallery.index -= 1; spt.gallery.show_index(spt.gallery.index); } spt.gallery.show_index = function(index) { // stop all videos var videos = spt.gallery.top.getElements(".video-js"); for (var i = 0; i < videos.length; i++) { try { var video = videos[i]; var video_id = video.get("id"); var video_obj = videojs(video_id, {"nativeControlsForTouch": false}); video_obj.pause(); } catch(e) { } } // can't tween percentage with this library??? var width = spt.gallery.width; var margin = - width * index; var content = spt.gallery.content; //content.setStyle("margin-left", margin + "px"); new Fx.Tween(content,{duration: 250}).start("margin-left", margin); spt.gallery.index = index; var total = spt.gallery.total; if (index == 0) { spt.hide(spt.gallery.left_arrow); spt.show(spt.gallery.right_arrow); } else if (index == total - 1) { spt.show(spt.gallery.left_arrow); spt.hide(spt.gallery.right_arrow); } else { spt.show(spt.gallery.left_arrow); spt.show(spt.gallery.right_arrow); } var description = spt.gallery.descriptions[index]; if (!description) { description = (index+1)+" of "+total; } else { description = (index+1)+" of "+total+" - " + description; } spt.gallery.set_description(description); } spt.gallery.close = function() { var content = spt.gallery.content; var top = content.getParent(".spt_gallery_top"); spt.behavior.destroy_element(top); } spt.gallery.set_description = function(desc) { var desc_el = spt.gallery.desc_el; desc_el.innerHTML = desc; } ''' } ) scroll = DivWdg(css='spt_gallery_scroll') inner.add(scroll) scroll.set_box_shadow() scroll.add_style("width: %s" % width) if height: scroll.add_style("height: %s" % height) scroll.add_style("overflow-x: hidden") scroll.add_style("overflow-y: hidden") scroll.add_style("background: #000") #scroll.add_style("position: absolute") scroll.add_style("margin-left: auto") scroll.add_style("margin-right: auto") content = DivWdg() top.add_attr('tabindex','-1') scroll.add(content) content.add_class("spt_gallery_content") # make the items vertically align to bottom (flex-emd) # on a regular monitor, align to top (flex-start) is better if align == 'bottom': align_items = 'flex-end' else: align_items = 'flex-start' content.add_styles("display: flex; flex-flow: row nowrap; align-items: %s; justify-content: center;"%align_items) content.add_style("width: %s" % total_width) top.add_behavior( { 'type': 'load', 'cbjs_action': ''' bvr.src_el.focus(); ''' } ) top.add_behavior( { 'type': 'mouseenter', 'cbjs_action': ''' bvr.src_el.focus(); ''' } ) top.add_behavior( { 'type': 'mouseleave', 'cbjs_action': ''' bvr.src_el.blur(); ''' } ) """ input = TextWdg("keydown") content.add(input) input.add_style("position: absolute") input.add_style("left: -5000px") """ top.add_behavior( { 'type': 'keydown', 'cbjs_action': ''' var key = evt.key; if (key == "left") { spt.gallery.push_stack(key); spt.gallery.show_prev(); } else if (key == "right") { spt.gallery.push_stack(key); spt.gallery.show_next(); } else if (key == "esc" || key == "enter") { var top = bvr.src_el spt.behavior.destroy_element(top); } ''' } ) curr_index = 0 for i, path in enumerate(paths): path_div = DivWdg(css='spt_gallery_item') content.add(path_div) #path_div.add_style("float: left") path_div.add_style("display: inline-block") path_div.add_style("vertical-align: middle") if path == self.curr_path: curr_index = i try: thumb_path = thumb_paths[i] except IndexError: print "Cannot find the thumb_path [%s] "%i thumb_path = '' #path_div.add_style("width: %s" % width) #if height: # path_div.add_style("height: %s" % height) path_div.add_style("width: 100%") path_div.add_style("height: 100%") path_div.add_style("overflow-x: hidden") path_div.add_style("overflow-y: hidden") from tactic.ui.widget import EmbedWdg embed = EmbedWdg(src=path, click=False, thumb_path=thumb_path, index=i, controls="true") path_div.add(embed) content.add_behavior({ 'type': 'load', 'index': curr_index, 'cbjs_action': ''' if (!bvr.index) bvr.index = 0; spt.gallery.show_index(bvr.index); ''' } ) #icon = IconWdg(title="Close", icon="/plugins/remington/pos/icons/close.png") icon = IconWdg(title="Close", icon="/context/icons/glyphs/close.png", width="40px") inner.add(icon) icon.add_style("position: absolute") icon.add_style("cursor: pointer") icon.add_style("top: 30px") icon.add_style("right: 38px") icon.add_style("opacity: 0.5") icon.add_behavior( { 'type': 'click_up' , 'cbjs_action': ''' var top = bvr.src_el.getParent(".spt_gallery_top"); spt.behavior.destroy_element(top); ''' } ) icon.add_style("background", "rgba(48,48,48,0.7)") icon.add_style("border-radius", "5px") icon = IconWdg(title="Previous", icon="/context/icons/glyphs/chevron_left.png") inner.add(icon) icon.add_class('spt_left_arrow') icon.add_style("cursor: pointer") icon.add_style("position: absolute") icon.add_style("top: 40%") icon.add_style("left: 0px") icon.add_style("opacity: 0.5") icon.add_behavior( { 'type': 'click_up' , 'cbjs_action': ''' var arrow = bvr.src_el; spt.gallery.show_prev(arrow); ''' } ) icon.add_style("background", "rgba(48,48,48,0.7)") icon.add_style("border-radius", "5px") icon = IconWdg(title="Next", icon="/context/icons/glyphs/chevron_right.png") inner.add(icon) icon.add_class('spt_right_arrow') icon.add_style("position: absolute") icon.add_style("cursor: pointer") icon.add_style("top: 40%") icon.add_style("right: 0px") icon.add_style("opacity: 0.5") icon.add_behavior( { 'type': 'click_up', 'cbjs_action': ''' var arrow = bvr.src_el; spt.gallery.show_next(arrow); ''' } ) icon.add_style("background", "rgba(48,48,48,0.7)") icon.add_style("border-radius", "5px") desc_div = DivWdg() desc_div.add_class("spt_gallery_description") desc_div.add_style("height: 30px") desc_div.add_style("width: %s" % width) desc_div.add_style("text-align: center") desc_div.add_style("background: rgba(0,0,0,1)") desc_div.add_style("color: #bbb") desc_div.add_style("font-weight: bold") desc_div.add_style("font-size: 16px") desc_div.add_style("padding-top: 10px") desc_div.add_style("margin-left: -%s" % (width/2)) desc_div.add_style("z-index: 1000") desc_div.add("") desc_outer_div = DivWdg() inner.add(desc_outer_div) desc_outer_div.add_style("position: fixed") desc_outer_div.add(desc_div) desc_outer_div.add_style("bottom: 0px") desc_outer_div.add_style("left: 50%") return top
def get_displayxx(my): show_menu = my.kwargs.get("show_menu") is_disabled = my.kwargs.get("is_disabled") show_title = my.kwargs.get("show_title") show_title = show_title in ['True', True] width = 35 if show_title: height = 26 else: height = 20 height = 30 top = my.top top.add_class("spt_button_top") top.add_style("overflow: hidden") #border = top.get_color("border") #top.add_border(-20) top.add_gradient("background", "background", 20, -35) top.add_style("border-width: 1px 0 1px 0") top.add_style("border-style: solid") top.add_style("border-color: %s" % top.get_color('border')) #top.add_style("margin-left: -1px") inner = my.inner top.add(inner) inner.add_color("color", "color3") inner.add_style("padding-top: 3px") inner.add_style("overflow: hidden") title = my.kwargs.get("title") inner.add_class("hand") inner.add_style("z-index: 20") #inner.add_style("overflow: hidden") #inner.add_style("opacity: 0.5") inner.add_attr("title", title) my.button.add_style("margin-top: 5px") inner.add(my.button) icon_str = my.kwargs.get("icon") icon = IconWdg(title, icon_str) my.button.add(icon) icon.add_class("spt_button_icon") my.show_arrow = my.kwargs.get("show_arrow") in [True, 'true'] if my.show_arrow or my.dialog: arrow = IconWdg(title, IconWdg.ARROW_MORE_INFO) inner.add(arrow) arrow.add_style("position: absolute") arrow.add_style("float: left") arrow.add_style("margin-left: 2px") arrow.add_style("margin-top: -10px") inner.add_style("font-size: 8px") inner.add_style("height: %spx" % height) inner.add_style("width: %spx" % width) inner.add_style("text-align: center") show_title = False if show_title: title_div = DivWdg() title_div.add(title) inner.add(title_div) inner.add_behavior( { 'type': 'click', 'width': width, 'cbjs_action': ''' var button = bvr.src_el; button.setStyle("border-style", "ridge"); button.setStyle("width", bvr.width-2); ''' } ) inner.add_behavior( { 'type': 'click_up', 'width': width, 'cbjs_action': ''' var button = bvr.src_el; button.setStyle("border-style", "none"); button.setStyle("width", bvr.width); ''' } ) inner.add_behavior( { 'type': 'hover', 'width': width, 'cbjs_action_over': ''' var button = bvr.src_el; var icon = button.getElement(".spt_button_icon"); icon.setStyle('opacity', '1'); ''', 'cbjs_action_out': ''' var button = bvr.src_el; button.setStyle("border-style", "none"); var icon = button.getElement(".spt_button_icon"); icon.setStyle('opacity', '0.5'); button.setStyle("width", bvr.width); ''' } ) if show_menu in ['true', True]: inner.add_style("float: left") arrow_div = DivWdg() top.add(arrow_div) arrow_div.add_style("opacity: 0.5") arrow_div.add_style("z-index: 100") arrow_div.add_style("height: %spx" % height) arrow_div.add_style("border-left: dotted 1px %s" % arrow_div.get_color("border") ) #arrow_div.add_style("margin-left: -15px") arrow_div.add_style("float: left") arrow = DivWdg(IconWdg("More Options", IconWdg.ARROW_MORE_INFO)) arrow.add_style("margin-top: 8px") arrow_div.add(arrow) arrow_div.add_style("position: relative") arrow_div.add_behavior( { 'type': 'hover', 'cbjs_action_over': ''' var button = bvr.src_el; var height = parseInt(button.getStyle("height").replace("px","")); var width = parseInt(button.getStyle("width").replace("px","")); button.setStyle('opacity', '1'); button.setStyle('border', 'solid 1px red'); button.setStyle("height", height-2); button.setStyle("width", width-2); ''', 'cbjs_action_out': ''' var button = bvr.src_el; var height = parseInt(button.getStyle("height").replace("px","")); var width = parseInt(button.getStyle("width").replace("px","")); button.setStyle('opacity', '0.5'); button.setStyle('border', ''); button.setStyle("height", height+2); button.setStyle("width", width+2); ''' } ) my.add_menu_wdg(arrow_div) if is_disabled in ['true', True]: disabled_div = DivWdg() disabled_div.add_class("spt_save_button_disabled") disabled_div.set_attr("title", "%s (Disabled)" % title) disabled_div.add_style("position: relative") disabled_div.add_style("height: %spx" % (height+3)) disabled_div.add_style("width: %spx" % width) #disabled_div.add_style("margin-left: -%spx" % width) disabled_div.add_style("margin-top: -%spx" % (height+3)) disabled_div.add_style("opacity", "0.6") disabled_div.add_style("background", "#AAA") inner.add_style("opacity", "1") top.add(disabled_div) if my.dialog: top.add(my.dialog) dialog_id = my.dialog.get_id() inner.add_behavior( { 'type': 'load', 'height': height, 'dialog_id': dialog_id, 'cbjs_action': ''' var pos = bvr.src_el.getPosition(); var el = $(bvr.dialog_id); el.setStyle("left", pos.x); el.setStyle("top", pos.y+bvr.height+13); ''' } ) my.inner.add_behavior( { 'type': 'click_up', 'dialog_id': dialog_id, 'cbjs_action': ''' var dialog = $(bvr.dialog_id); spt.toggle_show_hide(dialog); ''' } ) return top
def get_display(self): """ Handles how the widget will be displayed. :return: a button widget """ top = self.top top.add_style("white-space: nowrap") base = "{0}/{1}".format(BASE, self.top.get_theme()) button = DivWdg() button.add_style("float: left") self.inner = button top.add(button) self.inner.add_class("hand") button.add_class("spt_button_top") button.add_style("position: relative") img_div = DivWdg() button.add(img_div) img_div.add_style("width: 20px") img_div.add_style("height: 20px") over_div = DivWdg() button.add(over_div) over_div.add_class("spt_button_over") over_img = "<img src='{0}/SmallButton_over.png'/>".format(base) over_div.add(over_img) over_div.add_style("position: absolute") over_div.add_style("top: -7px") over_div.add_style("left: -2px") over_div.add_style("display: none") click_div = DivWdg() button.add(click_div) click_div.add_class("spt_button_click") click_img = "<img src='{0}/SmallButton_click.png'/>".format(base) click_div.add(click_img) click_div.add_style("position: absolute") click_div.add_style("top: -7px") click_div.add_style("left: -2px") click_div.add_style("display: none") title = self.kwargs.get("title") tip = self.kwargs.get("tip") if not tip: tip = title icon_div = self.icon_div button.add(icon_div) icon_str = self.kwargs.get("icon") icon = IconWdg(tip, icon_str, right_margin=0) icon.add_class("spt_button_icon") icon_div.add(icon) icon_div.add_style("position: absolute") icon_div.add_style("top: 2px") icon_div.add_style("left: 2px") if self.is_disabled: icon_div.add_style("opacity: 0.5") self.icon_div = icon_div self.show_arrow = self.kwargs.get("show_arrow") in [True, 'true'] if self.show_arrow or self.dialog: arrow_div = DivWdg() button.add(arrow_div) arrow_div.add_style("position: absolute") arrow_div.add_style("top: 24px") arrow_div.add_style("left: 20px") arrow = IconWdg(tip, IconWdg.ARROW_MORE_INFO) arrow_div.add(arrow) web = WebContainer.get_web() is_ie = web.is_IE() self.hit_wdg.add_style("width: 100%") if is_ie: self.hit_wdg.add_style("filter: alpha(opacity=0)") self.hit_wdg.add_style("height: 40px") else: self.hit_wdg.add_style("height: 100%") self.hit_wdg.add_style("opacity: 0.0") if self.is_disabled: self.hit_wdg.add_style("display: none") button.add(self.hit_wdg) self.hit_wdg.add_style("position: absolute") self.hit_wdg.add_style("top: 0px") self.hit_wdg.add_style("left: 0px") self.hit_wdg.add_attr("title", tip) self.hit_wdg.add_behavior({ 'type': 'hover', 'cbjs_action_over': ''' var top = bvr.src_el.getParent(".spt_button_top") var over = top.getElement(".spt_button_over"); var click = top.getElement(".spt_button_click"); over.setStyle("display", ""); click.setStyle("display", "none"); ''', 'cbjs_action_out': ''' var top = bvr.src_el.getParent(".spt_button_top") var over = top.getElement(".spt_button_over"); var click = top.getElement(".spt_button_click"); over.setStyle("display", "none"); click.setStyle("display", "none"); ''' }) self.hit_wdg.add_behavior({ 'type': 'click', 'cbjs_action': ''' var top = bvr.src_el.getParent(".spt_button_top") var over = top.getElement(".spt_button_over"); var click = top.getElement(".spt_button_click"); over.setStyle("display", "none"); click.setStyle("display", ""); ''' }) self.hit_wdg.add_behavior({ 'type': 'click_up', 'cbjs_action': ''' var top = bvr.src_el.getParent(".spt_button_top") var over = top.getElement(".spt_button_over"); var click = top.getElement(".spt_button_click"); over.setStyle("display", ""); click.setStyle("display", "none"); ''' }) # add a second arrow widget if self.show_arrow_menu: self.inner.add(self.arrow_div) self.arrow_div.add_attr("title", "More Options") self.arrow_div.add_style("position: absolute") self.arrow_div.add_style("top: 11px") self.arrow_div.add_style("left: 20px") self.arrow_div.add(self.arrow_menu) if self.dialog: top.add(self.dialog) dialog_id = self.dialog.get_id() self.hit_wdg.add_behavior({ 'type': 'click_up', 'dialog_id': dialog_id, 'cbjs_action': ''' var dialog = $(bvr.dialog_id); var pos = bvr.src_el.getPosition(); var size = bvr.src_el.getSize(); //var dialog = $(bvr.dialog_id); dialog.setStyle("left", pos.x); dialog.setStyle("top", pos.y+size.y); spt.toggle_show_hide(dialog); ''' }) return top