}
end
view :menu, :tags=>:unknown_ok do |args|
disc_tagname = Card.fetch(:discussion, :skip_modules=>true).cardname
disc_card = unless card.new_card? or card.junction? && card.cardname.tag_name.key == disc_tagname.key
Card.fetch "#{card.name}+#{disc_tagname}", :skip_virtual=>true, :skip_modules=>true, :new=>{}
end
@menu_vars = {
:self => card.name,
:type => card.type_name,
:structure => card.structure && card.template.ok?(:update) && card.template.name,
:discuss => disc_card && disc_card.ok?( disc_card.new_card? ? :comment : :read ),
:piecenames => card.junction? && card.cardname.piece_names[0..-2].map { |n| { :item=>n.to_s } },
:related_sets => card.related_sets.map { |name,label| { :text=>label, :path_opts=>{ :current_set => name } } }
}
if card.real?
@menu_vars.merge!({
:edit => card.ok?(:update),
:account => card.account && card.update_account_ok?,
:watch => Account.logged_in? && render_watch,
:creator => card.creator.name,
:updater => card.updater.name,
:delete => card.ok?(:delete) && link_to( 'delete', path(:action=>:delete),
:class => 'slotter standard-delete', :remote => true, :'data-confirm' => "Are you sure you want to delete #{card.name}?"
)
})
end
json = html_escape_except_quotes JSON( @menu_vars )
%{#{_render_menu_link}}
end
view :menu_link do |args|
''
end
view :type do |args|
klasses = ['cardtype']
klass = args[:type_class] and klasses << klass
link_to_page card.type_name, nil, :class=>klasses
end
view :closed do |args|
frame args.merge(:content=>true, :body_class=>'closed-content', :toggle_mode=>:close, :optional_toggle=>:show ) do
_optional_render :closed_content, args
end
end
###---( TOP_LEVEL (used by menu) NEW / EDIT VIEWS )
view :new, :perms=>:create, :tags=>:unknown_ok do |args|
frame_and_form :create, args, 'main-success'=>'REDIRECT' do |form|
[
_optional_render( :name_fieldset, args ),
_optional_render( :type_fieldset, args ),
_optional_render( :content_fieldsets, args ),
_optional_render( :button_fieldset, args )
]
end
end
def default_new_args args
hidden = args[:hidden] ||= {}
hidden[:success] ||= card.rule(:thanks) || '_self'
hidden[:card ] ||={}
args[:optional_help] = :show
# name field / title
if !params[:name_prompt] and !card.cardname.blank?
# name is ready and will show up in title
hidden[:card][:name] ||= card.name
else
# name is not ready; need generic title
args[:title] ||= "New #{ card.type_name unless card.type_id == Card.default_type_id }" #fixme - overrides nest args
unless card.rule_card :autoname
# prompt for name
hidden[:name_prompt] = true unless hidden.has_key? :name_prompt
args[:optional_name_fieldset] ||= :show
end
end
args[:optional_name_fieldset] ||= :hide
# type field
if ( !params[:type] and !args[:type] and
( main? || card.simple? || card.is_template? ) and
Card.new( :type_id=>card.type_id ).ok? :create #otherwise current type won't be on menu
)
args[:optional_type_fieldset] = :show
else
hidden[:card][:type_id] ||= card.type_id
args[:optional_type_fieldset] = :hide
end
cancel = if main?
{ :class=>'redirecter', :href=>Card.path_setting('/*previous') }
else
{ :class=>'slotter', :href=>path( :view=>:missing ) }
end
args[:buttons] ||= %{
#{ submit_tag 'Submit', :class=>'create-submit-button', :disable_with=>'Submitting' }
#{ button_tag 'Cancel', :type=>'button', :class=>"create-cancel-button #{cancel[:class]}", :href=>cancel[:href] }
}
end
view :edit, :perms=>:update, :tags=>:unknown_ok do |args|
frame_and_form :update, args do |form|
[
_optional_render( :content_fieldsets, args ),
_optional_render( :button_fieldset, args )
]
end
end
def default_edit_args args
args[:optional_help] = :show
args[:buttons] = %{
#{ submit_tag 'Submit', :class=>'submit-button' }
#{ button_tag 'Cancel', :class=>'cancel-button slotter', :href=>path, :type=>'button' }
}
end
view :edit_name, :perms=>:update do |args|
frame_and_form( { :action=>:update, :id=>card.id }, args, 'main-success'=>'REDIRECT' ) do
[
_render_name_fieldset( args ),
_optional_render( :confirm_rename, args ),
_optional_render( :button_fieldset, args )
]
end
end
view :confirm_rename do |args|
referers = args[:referers]
dependents = card.dependents
wrap args do
%{
Are you sure you want to rename #{card.name}?
#{ %{
This change will...
} if referers.any? || dependents.any? }
#{ %{
automatically alter #{ dependents.size } related name(s). } if dependents.any? }
#{ %{
affect at least #{referers.size} reference(s) to "#{card.name}".} if referers.any? }
#{ %{
You may choose to update or ignore the references.
} if referers.any? }
}
end
end
def default_edit_name_args args
referers = args[:referers] = card.extended_referencers
args[:hidden] ||= {}
args[:hidden].reverse_merge!(
:success => '_self',
:old_name => card.name,
:referers => referers.size,
:card => { :update_referencers => false }
)
args[:buttons] = %{
#{ submit_tag 'Rename and Update', :class=>'renamer-updater' }
#{ submit_tag 'Rename', :class=>'renamer' }
#{ button_tag 'Cancel', :class=>'slotter', :type=>'button', :href=>path(:view=>:edit, :id=>card.id)}
}
end
view :edit_type, :perms=>:update do |args|
frame_and_form :update, args do
#'main-success'=>'REDIRECT: _self', # adding this back in would make main cards redirect on cardtype changes
[
_render_type_fieldset( args ),
optional_render( :button_fieldset, args )
]
end
end
def default_edit_type_args args
args[:variety] = :edit #YUCK!
args[:hidden] ||= { :view=>:edit }
args[:buttons] = %{
#{ submit_tag 'Submit', :disable_with=>'Submitting' }
#{ button_tag 'Cancel', :href=>path(:view=>:edit), :type=>'button', :class=>'slotter' }
}
end
view :missing do |args|
return '' unless card.ok? :create #this should be moved into ok_view
new_args = { :view=>:new, 'card[name]'=>card.name }
new_args['card[type]'] = args[:type] if args[:type]
wrap args do
link_to raw("Add #{ fancy_title args[:title] }"), path(new_args),
:class=>"slotter missing-#{ args[:denied_view] || args[:home_view]}", :remote=>true
end
end
view :closed_missing, :perms=>:none do |args|
%{ #{ showname } }
end
# FIELDSET VIEWS
view :name_fieldset do |args|
fieldset 'name', raw( name_field form ), :editor=>'name', :help=>args[:help]
end
view :type_fieldset do |args|
field = if args[:variety] == :edit #FIXME dislike this api -ef
type_field :class=>'type-field edit-type-field'
else
type_field :class=>"type-field live-type-field", :href=>path(:view=>:new), 'data-remote'=>true
end
fieldset 'type', field, :editor => 'type', :attribs => { :class=>'type-fieldset'}
end
view :button_fieldset do |args|
%{
}
end
view :content_fieldsets do |args|
%{
#{ edit_slot args }
}
end
# FIELD VIEWS
view :editor do |args|
form.text_area :content, :rows=>3, :class=>'tinymce-textarea card-content', :id=>unique_id
end
view :edit_in_form, :perms=>:update, :tags=>:unknown_ok do |args| #fixme. why is this a view??
eform = form_for_multi
content = content_field eform, args.merge( :nested=>true )
opts = { :editor=>'content', :help=>true, :attribs =>
{ :class=> "card-editor RIGHT-#{ card.cardname.tag_name.safe_key }" }
}
if card.new_card?
content += raw( "\n #{ eform.hidden_field :type_id }" )
else
opts[:attribs].merge! :card_id=>card.id, :card_name=>(h card.name)
end
fieldset fancy_title( args[:title] ), content, opts
end
view :options, :tags=>:unknown_ok do |args|
current_set = Card.fetch( params[:current_set] || card.related_sets[0][0] )
frame args do
%{
#{ subformat( current_set ).render_content }
#{
if card.accountable? && !card.account
%{
#{ link_to %{Add a sign-in account for "#{card.name}"}, path(:view=>:new_account),
:class=>'slotter new-account-link', :remote=>true }
}
end
}
}
end
end
view :related do |args|
if rparams = params[:related]
rcardname = rparams[:name].to_name.to_absolute_name( card.cardname)
rcard = Card.fetch rcardname, :new=>{}
nest_args = {
:view => ( rparams[:view] || :titled ),
:optional_help => :show,
:optional_menu => :show
}
nest_args[:optional_comment_box] = :show if rparams[:name] == '+discussion' #fixme. yuck!
frame args do
process_inclusion rcard, nest_args
end
end
end
view :help, :tags=>:unknown_ok do |args|
text = if args[:help_text]
args[:help_text]
else
setting = card.new_card? ? :add_help : :help
setting = [ :add_help, { :fallback => :help } ] if setting == :add_help
if help_card = card.rule_card( *setting ) and help_card.ok? :read
with_inclusion_mode :normal do
_final_core args.merge( :structure=>help_card.name )
end
end
end
%{
#{raw text}
} if text
end
view :conflict, :error_code=>409 do |args|
load_revisions
wrap args.merge( :slot_class=>'error-view' ) do
%{Conflict!#{@revision.id}
#{ link_to_page @revision.creator.name } has also been making changes.
Please examine below, resolve above, and re-submit.
#{ wrap do |args| _render_diff end } }
end
end
view :change do |args|
wrap args do
%{
#{ link_to_page card.name, nil, :class=>'change-card' }
#{ _optional_render :menu, args, :hide }
#{
if rev = card.current_revision and !rev.new_record?
# this check should be unnecessary once we fix search result bug
%{ #{
case card.updated_at.to_s
when card.created_at.to_s; 'added'
when rev.created_at.to_s; link_to('edited', path(:view=>:history), :class=>'last-edited', :rel=>'nofollow')
else; 'updated'
end} #{
time_ago_in_words card.updated_at } ago by #{ #ENGLISH
link_to_page card.updater.name, nil, :class=>'last-editor'}
}
end
}
}
end
end
view :errors, :perms=>:none do |args|
#Rails.logger.debug "errors #{args.inspect}, #{card.inspect}, #{caller[0..3]*", "}"
if card.errors.any?
wrap args do
%{
Problems #{%{ with #{card.name}} unless card.name.blank?}
} +
card.errors.map { |attrib, msg| "
#{attrib.to_s.upcase}: #{msg}
" } * ''
end
end
end
view :not_found do |args| #ug. bad name.
sign_in_or_up_links = if !Account.logged_in?
%{
#{link_to "Sign In", :controller=>'account', :action=>'signin'} or
#{link_to 'Sign Up', :controller=>'account', :action=>'signup'} to create it.
}
end
frame args.merge(:title=>'Not Found', :optional_menu=>:never) do
%{
Could not find #{card.name.present? ? "#{card.name}" : 'that'}.
#{sign_in_or_up_links}
}
end
end
view :denial do |args|
to_task = if task = args[:denied_task]
%{to #{task} this.}
else
'to do that.'
end
if !focal?
%{}
else
frame args do #ENGLISH below
message = case
when task != :read && Wagn.config.read_only
"We are currently in read-only mode. Please try again later."
when Account.logged_in?
"You need permission #{to_task}"
else
or_signup = if Card.new(:type_id=>Card::AccountRequestID).ok? :create
"or #{ link_to 'sign up', wagn_url('new/:account_request') }"
end
"You have to #{ link_to 'sign in', wagn_url('account/signin') } #{or_signup} #{to_task}"
end
%{