Module: Zena::Use::Display::ZafuMethods
- Includes:
- RubyLess, Common
- Defined in:
- lib/zena/use/display.rb
Overview
ViewMethods
Constant Summary collapse
- SHOW_KEYS =
[:tz, :tformat, :format, :lang, :zero]
Class Method Summary collapse
-
.included(base) ⇒ Object
As a last resort, if the method does not compile try to use <r:show eval=‘…’/>.
Instance Method Summary collapse
- #extract_label(res, attribute) ⇒ Object
-
#r_add_document ⇒ Object
Show html to add open a popup window to add a document.
-
#r_content_for_layout ⇒ Object
Used by zafu templates that act as layouts (adminLayout for example) to insert the content if present or render.
-
#r_icon ⇒ Object
Find icon through a relation named ‘icon’ or use first image child.
-
#r_img ⇒ Object
Display an image.
-
#r_javascripts ⇒ Object
Insert javascript asset tags.
- #r_prop_grid ⇒ Object
-
#r_show(code = nil) ⇒ Object
Display an attribute or RubyLess code.
-
#r_stylesheets ⇒ Object
Insert stylesheet asset tags.
-
#r_title_for_layout ⇒ Object
Display the page’s default title.
-
#r_zazen(signature = nil) ⇒ Object
Parse text with zazen helper.
-
#r_zena ⇒ Object
Shows a ‘made with Zena’ link or logo.
-
#show_eval ⇒ Object
Transform <p do=‘created_at’ format=‘%d’/> into <p do=‘show’ eval=‘created_at’ format=‘%d’/>.
-
#show_string(method) ⇒ Object
Also used by rubyless_expand.
Methods included from Common
Class Method Details
.included(base) ⇒ Object
As a last resort, if the method does not compile try to use <r:show eval=‘…’/>
435 436 437 |
# File 'lib/zena/use/display.rb', line 435 def self.included(base) base.process_unknown :show_eval end |
Instance Method Details
#extract_label(res, attribute) ⇒ Object
524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 |
# File 'lib/zena/use/display.rb', line 524 def extract_label(res, attribute) return res if @params[:type] == 'hidden' attribute ||= @params[:param] if (label = param(:label) || param(:tlabel)) && attribute case label when 'true' "<label>#{attribute}</label> <span>#{res}</span>" when 't' "<label>#{trans(attribute)}</label> <span>#{res}</span>" when '','false' # no label res else if @params[:tlabel] code = ::RubyLess.translate(self, "t(%Q{#{label}})") else code = ::RubyLess.translate_string(self, label) end if code.literal "<label>#{code.literal}</label> <span>#{res}</span>" else "<label><%= #{code} %></label> <span>#{res}</span>" end end else res end end |
#r_add_document ⇒ Object
Show html to add open a popup window to add a document. TODO: inline ajax for upload ?
633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 |
# File 'lib/zena/use/display.rb', line 633 def r_add_document return parser_error("only works with nodes (not with #{node.klass})") unless node.will_be?(Node) @markup.append_param(:class, 'btn_add') node = self.node.list_context? ? self.node.up : self.node params = {} @params.each do |k,v| next if [:attr, :eval, :text, :t].include?(k) v = RubyLess.translate_string(self, v) if v.literal params[k] = CGI.escape(v.literal) else params[k] = "<%= CGI.escape(#{v}) %>" end end res = node_action_link('add_doc', "<%= #{node}.zip %>", :text => text_for_link(''), :params => params) "<% if #{node}.can_write? %>#{wrap(res)}<% end %>" end |
#r_content_for_layout ⇒ Object
Used by zafu templates that act as layouts (adminLayout for example) to insert the content if present or render.
618 619 620 621 622 |
# File 'lib/zena/use/display.rb', line 618 def r_content_for_layout "<% if content_for_layout = yield %><%= content_for_layout %><% else %>" + + "<% end %>" end |
#r_icon ⇒ Object
Find icon through a relation named ‘icon’ or use first image child
654 655 656 657 658 659 660 661 |
# File 'lib/zena/use/display.rb', line 654 def r_icon if node.will_be?(Node) finder = build_finder(:first, icon_finder) (finder) else rubyless_eval end end |
#r_img ⇒ Object
Display an image
664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 |
# File 'lib/zena/use/display.rb', line 664 def r_img if node.will_be?(VirtualClass) return "<img src='<%= #{node}.prop['icon'] %>'/>" elsif !node.will_be?(Node) return end if src = @params[:src] finder = ::RubyLess.translate(self, @params[:src]) #build_finder(:first, @params[:src]) return parser_error("invalid class (#{finder.klass})") unless finder.klass <= Node img = finder else img = node end mode = @params[:mode] || 'std' # FIXME: replace this call by something that integrates better with html_tag_params and such. res = "img_tag(#{img}, :mode=>#{mode.inspect}" [:class, :alt_src, :id, :border, :style].each do |k| res += ", :#{k}=>#{@params[k].inspect}" if @params[k] end if host = param(:host) res += ", :host => #{::RubyLess.translate_string(self, host)}" end res += ")" if finder = @params[:link] finder = ::RubyLess.translate(self, finder) return parser_error("Invalid class (#{finder.klass})") unless finder.klass <= Node opts_str = @context["exp_host"] ? ", :host => #{@context["exp_host"]}" : "" "<a href='<%= zen_path(#{finder}#{opts_str}) %>'><%= #{res} %></a>" else "<%= #{res} %>" end end |
#r_javascripts ⇒ Object
Insert javascript asset tags
559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 |
# File 'lib/zena/use/display.rb', line 559 def r_javascripts if @params[:list] == 'all' || @params[:list].nil? list = %w{ prototype effects dragdrop window zena grid upload-progress } else list = @params[:list].split(',').map{|e| e.strip} end out helper.javascript_include_tag(*list) return # Experimental: move all scripts at end of file if list.include?('prototype') list -= ['prototype'] out helper.javascript_include_tag('prototype') end return if list.empty? list = list.map do |e| "Script.load('#{helper.javascript_path(e)}');" end code = %Q{ var Script = { _loadedScripts: [], load: function(script){ if (this._loadedScripts.include(script)){ return false; } var code = new Ajax.Request(script, { asynchronous: false, method: "GET", evalJS: false, evalJSON: false }).transport.responseText; if (Prototype.Browser.IE) { window.execScript(code); } else if (Prototype.Browser.WebKit){ $$("head").first().insert(Object.extend( new Element("script", {type: "text/javascript"}), {text: code} )); } else { window.eval(code); } this._loadedScripts.push(script); } }; #{list.join("\n ")} } out "<% js_data.unshift #{code.inspect} -%>" end |
#r_prop_grid ⇒ Object
722 723 724 725 726 727 728 729 730 731 732 |
# File 'lib/zena/use/display.rb', line 722 def r_prop_grid return parser_error("not in a list context") unless node.list_context? return parser_error("not a Node list") unless node.single_class <= Node klass = "#{node.single_class.name}" add_block %Q{<table class='prop_grid'> <tr do='#{klass}' do='roles'><th class='role' colspan='\#{columns.size}' do='each' do='name'/></tr> <tr do='#{klass}' do='roles' do='each' do='columns'><th do='each' do='name'/></tr> <tr do='each'><r:#{klass} do='roles' do='each' do='columns'><td do='each' do='@node.send(name)'/></r:#{klass}></tr> </table>} end |
#r_show(code = nil) ⇒ Object
Display an attribute or RubyLess code
487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 |
# File 'lib/zena/use/display.rb', line 487 def r_show(code = nil) if code.nil? && node.list_context? @context[:node] = node.move_to("#{node}.first", node.klass.first, :query => node.opts[:query]) return r_show end if method = code || get_attribute_or_eval(false) # ok elsif node.will_be?(String) || node.will_be?(Time) method = RubyLess.translate(self, 'this') else return nil end klass = method.klass if klass.kind_of?(Array) res = show_string(method) elsif klass <= String res = show_string(method) elsif klass <= Number res = show_number(method) elsif klass <= Time res = show_time(method) else res = show_string(method) end res = extract_label(res, @params[:attr]) if param(:blank) == 'hide' "<% if !#{method}.blank? %>#{@markup.wrap(res)}<% end %>" else res end end |
#r_stylesheets ⇒ Object
Insert stylesheet asset tags
606 607 608 609 610 611 612 613 614 |
# File 'lib/zena/use/display.rb', line 606 def r_stylesheets if @params[:list] == 'all' || @params[:list].nil? list = %w{ reset window zena code grid upload-progress } else list = @params[:list].split(',').map{|e| e.strip} end list << {:media => @params[:media]} if @params[:media] helper.stylesheet_link_tag(*list) end |
#r_title_for_layout ⇒ Object
Display the page’s default title
625 626 627 628 629 |
# File 'lib/zena/use/display.rb', line 625 def r_title_for_layout "<% if @title_for_layout %><%= @title_for_layout %><% elsif @node && [email protected]_record? %><%= @node.title %><% elsif @node.parent %><%= @node.parent.short_path %><% else %>" + + "<% end %>" end |
#r_zazen(signature = nil) ⇒ Object
Parse text with zazen helper
454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 |
# File 'lib/zena/use/display.rb', line 454 def r_zazen(signature = nil) if signature.nil? || @markup.tag # Do not create markup when using RubyLess @markup.prepend_param(:class, 'zazen') @markup.tag ||= 'div' end if signature # TODO: Get 'notextile' param from rubyless. if node = node(Node) { :class => String, :method => 'zazen', :accept_nil => true, :html_safe => true, :append_hash => {:node => ::RubyLess::TypedString.new(node.to_s, :class => node.klass)} } else nil end else node = node(Node) || '@node' return nil unless attribute = get_attribute_or_eval hash_arguments = extract_from_params(:code, :notextile, :host, :line_numbers, :theme, :target) || [] hash_arguments.insert(0, ":node => #{node}") "<%= zazen(#{attribute}, #{hash_arguments.join(', ')}) %>" end end |
#r_zena ⇒ Object
Shows a ‘made with Zena’ link or logo. ;-) Thanks for using this !
704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 |
# File 'lib/zena/use/display.rb', line 704 def r_zena if logo = @params[:logo] # FIXME case logo when 'tiny' else end else text = case @params[:type] when 'garden' _("a Zen garden") else _("made with Zena") end "<a class='zena' href='http://zenadmin.org' title='Zena <%= Zena::VERSION %>'>#{text}</a>" end end |
#show_eval ⇒ Object
Transform <p do=‘created_at’ format=‘%d’/> into
<p do='show' eval='created_at' format='%d'/>
441 442 443 444 445 446 447 448 449 450 451 |
# File 'lib/zena/use/display.rb', line 441 def show_eval if !@params.empty? && !(@method =~ /. ./) && (@params.keys - SHOW_KEYS == []) # try to use r_show without using params as arguments code = RubyLess.translate(self, @method) r_show(code) else nil end rescue RubyLess::Error nil end |
#show_string(method) ⇒ Object
Also used by rubyless_expand
735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 |
# File 'lib/zena/use/display.rb', line 735 def show_string(method) if method.kind_of?(RubyLess::TypedString) if lit = method.literal if method.opts[:html_safe] lit elsif param(:h) == 'false' erb_escape(lit) else ::ERB::Util.html_escape(lit) end elsif param(:h) == 'false' || method.opts[:html_safe] "<%= #{method} %>" else "<%=h #{method} %>" end elsif param(:h) == 'false' "<%= #{method} %>" else "<%=h #{method} %>" end end |