Index: openacs-4/packages/xowiki/xowiki.info =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/xowiki.info,v diff -u -r1.104 -r1.105 --- openacs-4/packages/xowiki/xowiki.info 21 Nov 2008 11:50:48 -0000 1.104 +++ openacs-4/packages/xowiki/xowiki.info 23 Nov 2008 18:43:42 -0000 1.105 @@ -8,11 +8,11 @@ f xowiki - + Gustaf Neumann A more generic xotcl-based wikis example with object types and subtypes based on the content repository (with category support) - 2008-11-21 + 2008-11-23 Gustaf Neumann, WU Wien <pre> XoWiki is a Wiki implementation for OpenACS in XOTcl. Instead of @@ -54,12 +54,12 @@ BSD-Style 0 - + - + @@ -68,6 +68,7 @@ + Index: openacs-4/packages/xowiki/tcl/adp-generator-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/tcl/adp-generator-procs.tcl,v diff -u -r1.26 -r1.27 --- openacs-4/packages/xowiki/tcl/adp-generator-procs.tcl 30 Oct 2008 22:54:59 -0000 1.26 +++ openacs-4/packages/xowiki/tcl/adp-generator-procs.tcl 23 Nov 2008 18:43:42 -0000 1.27 @@ -91,10 +91,12 @@ } ADP_Generator instproc content_part {} { - return "@top_includelets;noquote@\n

@title@

\n@content;noquote@" + return "@top_includelets;noquote@\n\ +

@title@ (@page_context@)

\n\ +

@title@

\n\ + @content;noquote@" } - ADP_Generator instproc generate {} { my instvar master wikicmds footer set _ "\n" Index: openacs-4/packages/xowiki/tcl/includelet-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/tcl/includelet-procs.tcl,v diff -u -r1.77 -r1.78 --- openacs-4/packages/xowiki/tcl/includelet-procs.tcl 11 Nov 2008 12:25:35 -0000 1.77 +++ openacs-4/packages/xowiki/tcl/includelet-procs.tcl 23 Nov 2008 18:43:42 -0000 1.78 @@ -230,8 +230,24 @@ return [list $cnames $extra_where_clause] } + ::xowiki::Includelet proc parent_id_clause { + {-bt bt} + -base_package_id:required + } { + # + # Get the package path and from it, the folder_ids. The parent_id + # of the returned pages should be a direct child of the folder. + # + set packages [$base_package_id package_path] + if {[llength $packages] > 0} { + set parent_ids [list [$base_package_id folder_id]] + foreach p [$packages] {lappend parent_ids [$p folder_id]} + return "$bt.parent_id in ([join $parent_ids ,])" + } else { + return "$bt.parent_id = [$base_package_id folder_id]" + } + } - ::xowiki::Includelet instproc resolve_page_name {page_name} { return [[my set __including_page] resolve_included_page_name $page_name] } @@ -772,14 +788,22 @@ recent instproc render {} { my get_parameters ::xo::Page requireCSS "/resources/acs-templating/lists.css" + set admin_p [::xo::cc permission -object_id $package_id -privilege admin \ + -party_id [::xo::cc set untrusted_user_id]] + set show_heritage $admin_p + TableWidget t1 -volatile \ -set allow_edit $allow_edit \ -set allow_delete $allow_delete \ + -set show_heritage $admin_p \ -columns { Field date -label [_ xowiki.Page-last_modified] if {[[my info parent] set allow_edit]} { ImageField_EditIcon edit -label "" -html {style "padding-right: 2px;"} } + if {[[my info parent] set show_heritage]} { + AnchorField inherited -label "" + } AnchorField title -label [::xowiki::Page::slot::title set pretty_name] if {[[my info parent] set allow_delete]} { ImageField_DeleteIcon delete -label "" @@ -788,17 +812,18 @@ db_foreach [my qn get_pages] \ [::xo::db::sql select \ - -vars "i.name, r.title, p.page_id, r.publish_date, i.parent_id, \ + -vars "i.name, r.title, p.page_id, r.publish_date, i.parent_id, o.package_id, \ to_char(r.publish_date,'YYYY-MM-DD HH24:MI:SS') as formatted_date" \ - -from "cr_items i, cr_revisions r, xowiki_page p" \ - -where "i.parent_id = [$package_id folder_id] \ + -from "cr_items i, cr_revisions r, xowiki_page p, acs_objects o" \ + -where "[::xowiki::Includelet parent_id_clause -bt i -base_package_id $package_id] \ and r.revision_id = i.live_revision \ + and i.item_id = o.object_id \ and p.page_id = r.revision_id \ and i.publish_status <> 'production'" \ -orderby "publish_date desc" \ -limit $max_entries ] { - set page_link [$package_id pretty_link -parent_id $parent_id $name] + set page_link [[my package_id] pretty_link -parent_id $parent_id $name] t1 add \ -title $title \ -title.href $page_link \ @@ -817,6 +842,26 @@ set delete_link [$package_id make_link -link $page_link $p delete return_url] [t1 last_child] set delete.href $delete_link } + if {$show_heritage} { + if {$package_id == [my package_id]} { + set href "" + set title "" + set alt "" + set class "" + set label "" + } else { + # provide a link to the original + set href [$package_id pretty_link -parent_id $parent_id $name] + set label [$package_id instance_name] + set title [_ xowiki.view_in_context [list context $label]] + set alt $title + set class "inherited" + } + [t1 last_child] set inherited $label + [t1 last_child] set inherited.href $href + [t1 last_child] set inherited.title $title + [t1 last_child] set inherited.CSSclass $class + } } return [t1 asHTML] } Index: openacs-4/packages/xowiki/tcl/link-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/tcl/link-procs.tcl,v diff -u -r1.54 -r1.55 --- openacs-4/packages/xowiki/tcl/link-procs.tcl 4 Nov 2008 20:45:38 -0000 1.54 +++ openacs-4/packages/xowiki/tcl/link-procs.tcl 23 Nov 2008 18:43:43 -0000 1.55 @@ -72,7 +72,7 @@ } Link instproc resolve {} { #my msg "--lookup of [my name] -page [my page]" - return [::xo::db::CrClass lookup -name [my name] -parent_id [my parent_id]] + return [[my package_id] lookup -name [my name] -parent_id [my parent_id]] } Link instproc render_found {href label} { return "$label" @@ -257,7 +257,7 @@ set item_id [next] # my log "-- file, lookup of [my name] returned $item_id" if {$item_id == 0 && [regsub {^file:} [my name] image: name]} { - set item_id [::xo::db::CrClass lookup -name $name -parent_id [my parent_id]] + set item_id [[my package_id] lookup -name $name -parent_id [my parent_id]] } return $item_id } @@ -313,7 +313,7 @@ set item_id [next] my log "--file, lookup of [my name] returned $item_id" if {$item_id == 0 && [regsub {^swf:} [my name] file: name]} { - set item_id [::xo::db::CrClass lookup -name $name -parent_id [my parent_id]] + set item_id [[my package_id] lookup -name $name -parent_id [my parent_id]] my log "--file, 2nd lookup of $name returned $item_id" } return $item_id Index: openacs-4/packages/xowiki/tcl/package-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/tcl/package-procs.tcl,v diff -u -r1.151 -r1.152 --- openacs-4/packages/xowiki/tcl/package-procs.tcl 16 Nov 2008 01:18:58 -0000 1.151 +++ openacs-4/packages/xowiki/tcl/package-procs.tcl 23 Nov 2008 18:43:43 -0000 1.152 @@ -146,8 +146,12 @@ # handle different parent_ids # if {$parent_id ne "" && $parent_id != [my folder_id]} { - ::xo::db::CrClass get_instance_from_db -item_id $parent_id - return [$parent_id name]/ + if {[::xo::db::sql::content_folder is_folder -item_id $parent_id]} { + return "" + } else { + ::xo::db::CrClass get_instance_from_db -item_id $parent_id + return [$parent_id name]/ + } } else { return "" } @@ -417,6 +421,7 @@ my instvar id set computed_link "" + #my msg "obj=$object, [$object info class]" if {[$object istype ::xowiki::Package]} { set base [my package_url] if {[info exists link]} { @@ -430,15 +435,17 @@ set base $link } else { set base [my url] + #my msg "base = '[my url]'" } lappend args [list m $method] set computed_link [uplevel export_vars -base [list $base] [list $args]] + #my msg "computed_link = '$computed_link'" } if {$with_entities} { regsub -all & $computed_link "&" computed_link } - #set party_id [::xo::cc user_id] + # provide links based in untrusted_user_id set party_id [::xo::cc set untrusted_user_id] if {[info exists privilege]} { #my log "-- checking priv $privilege for [self args]" @@ -522,17 +529,22 @@ Package instproc resolve_page {{-simple false} -lang object method_var} { my log "resolve_page '$object'" upvar $method_var method - my instvar folder_id id policy + my instvar id # get the default language if not specified if {![info exists lang]} { set lang [my default_language] } + + # stripped object is the object without a language prefix + set stripped_object $object + regexp {^..:(.*)$} $object _ stripped_object + # # first, resolve package level methods # if {$object eq ""} { - set exported [$policy defined_methods Package] + set exported [[my set policy] defined_methods Package] foreach m $exported { #my log "--QP my exists_query_parameter $m = [my exists_query_parameter $m]" if {[my exists_query_parameter $m]} { @@ -555,64 +567,94 @@ #my log "--o object is now '$object'" } # - # second, resolve object level methods + # second, resolve object level # set page [my resolve_request -default_lang $lang -simple $simple -path $object method] - #my msg "--o try '$object' -default_lang $lang -simple $simple returns '$page'" + #my log "--o resolving object '$object' -default_lang $lang -simple $simple returns '$page'" if {$simple || $page ne ""} { - if {$page ne ""} { - } return $page } - # - # Make a second attempt in the default language, if it is diffent - # from the connection language. This is not optimal, since it is - # just relevant for the cases, where the language was not - # explicitely given. It would be nice to have e.g. a list of - # language preferences which could be checked, but this would - # require a different structure. The underlying methods are used - # for two different cases: (a) complete an non-fully specified - # entry, and (b) search whether such an entry exists. Not - # undoable, but this should wait for the next release. -# if {[::xo::cc lang] ne [my default_language]} { -# set page [my resolve_request -default_lang [my default_language] -simple $simple -path $object method] -# if {$simple || $page ne ""} { -# if {$page ne ""} { -# } -# return $page -# } -# } - # stripped object is the object without a language prefix - set stripped_object $object - regexp {^..:(.*)$} $object _ stripped_object - # try standard page set standard_page [$id get_parameter ${object}_page] - #my msg "--o standard_page '$standard_page'" if {$standard_page ne ""} { set page [my resolve_request -default_lang [::xo::cc lang] -path $standard_page method] + #my msg "--o resolving standard_page '$standard_page' returns $page" if {$page ne ""} { return $page } - # maybe we are calling from a different language, but the - # standard page with en: was already instantiated + # Maybe we are calling from a different language, but the + # standard page with en: was already instantiated. set standard_page "en:$stripped_object" set page [my resolve_request -default_lang en -path $standard_page method] #my msg "resolve -default_lang en -path $standard_page returns --> $page" if {$page ne ""} { return $page } } - #my msg "we have to import a prototype page for $stripped_object" + + foreach package [my package_path] { + set page [$package resolve_page -simple $simple -lang $lang $object $method_var] + if {$page ne ""} { + return $page + } + } + + my msg "we have to try to import a prototype page for $stripped_object" set page [my import_prototype_page $stripped_object] - if {$page eq ""} { - my log "no prototype for '$object' found" + if {$page ne ""} { + return $page } + my log "no prototype for '$object' found" return $page } + Package instproc package_path {} { + # + # Compute a list fo package objects which should be used for + # resolving ("inheriance of objects from other instances"). + # + set packages [list] + set package_url [string trimright [my package_url] /] + set package_path [my get_parameter PackagePath] + # + # To avoid recursions, remove the current package from the list of + # packages if was accidentally included. Get the package objects + # from the remaining URLs. + # + foreach package_instance_url $package_path { + #my msg "compare $package_instance_url eq $package_url" + if {$package_instance_url eq $package_url} continue + lappend packages ::[::xowiki::Package initialize -url $package_instance_url/[my set object] -keep_cc true] + } + + # final sanity check, in case package->initialize is broken + set p [lsearch $packages ::[my id]] + if {$p > -1} {set packages [lreplace $packages $p $p]} + + #my msg "[my id] packages=$packages, p=$p" + return $packages + } + + Package instproc lookup {-name:required -parent_id} { + # + # Lookup of names from a given parent_id or from the list of + # configured instances (obtained via package_path). + # + if {![info exists parent_id]} {set parent_id [my folder_id]} + set item_id [::xo::db::CrClass lookup -name $name -parent_id $parent_id] + my msg "lookup $name $parent_id returns $item_id" + if {$item_id == 0} { + foreach package [my package_path] { + set item_id [$package lookup -name $name] + my msg "lookup from package $package $name returns $item_id" + if {$item_id != 0} break + } + } + return $item_id + } + Package instproc import_prototype_page {{prototype_name ""}} { set page "" if {$prototype_name eq ""} { Index: openacs-4/packages/xowiki/tcl/xowiki-www-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/tcl/xowiki-www-procs.tcl,v diff -u -r1.199 -r1.200 --- openacs-4/packages/xowiki/tcl/xowiki-www-procs.tcl 6 Nov 2008 20:53:45 -0000 1.199 +++ openacs-4/packages/xowiki/tcl/xowiki-www-procs.tcl 23 Nov 2008 18:43:43 -0000 1.200 @@ -89,12 +89,13 @@ # The method "view" is used primarily for the toplevel call, when # the xowiki page is viewed. It is not intended for e.g. embedded # wiki pages (see include), since it contains full framing, etc. - my instvar package_id item_id - $package_id instvar folder_id ;# this is the root folder + my instvar item_id ::xowiki::Page set recursion_count 0 + set page_package_id [my package_id] + set context_package_id [::xo::cc package_id] set template_file [my query_parameter "template_file" \ - [::$package_id get_parameter template_file view-default]] + [::$context_package_id get_parameter template_file view-default]] if {[my isobject ::xowiki::$template_file]} { $template_file before_render [self] @@ -109,17 +110,17 @@ set footer [my htmlFooter -content $content] set top_includelets "" - set vp [string trim [$package_id get_parameter "top_includelet" ""]] + set vp [string trim [$context_package_id get_parameter "top_includelet" ""]] if {$vp ne ""} { set top_includelets [my include $vp] } - if {[$package_id get_parameter "with_user_tracking" 1]} { + if {[$context_package_id get_parameter "with_user_tracking" 1]} { my record_last_visited } # Deal with the views package (many thanks to Malte for this snippet!) - if {[$package_id get_parameter with_views_package_if_available 1] + if {[$context_package_id get_parameter with_views_package_if_available 1] && [apm_package_installed_p "views"]} { views::record_view -object_id $item_id -viewer_id [::xo::cc user_id] array set views_data [views::get -object_id $item_id] @@ -132,7 +133,7 @@ set return_url [my query_parameter return_url] } - if {[$package_id get_parameter "with_notifications" 1]} { + if {[$context_package_id get_parameter "with_notifications" 1]} { if {[::xo::cc user_id] != 0} { ;# notifications require login set notifications_return_url [expr {[info exists return_url] ? $return_url : [ad_return_url]}] set notification_type [notification::type::get_type_id -short_name xowiki_notif] @@ -142,56 +143,60 @@ {{return_url $notifications_return_url} {pretty_name $notification_text} {type_id $notification_type} - {object_id $package_id}}] + {object_id $context_package_id}}] set notification_image \ "$notification_text" } } #my log "--after notifications [info exists notification_image]" - set master [$package_id get_parameter "master" 1] + set master [$context_package_id get_parameter "master" 1] #if {[my exists_query_parameter "edit_return_url"]} { # set return_url [my query_parameter "edit_return_url"] #} #my log "--after options master=$master" if {$master} { set context [list $title] - ::xo::Page set_property doc title "[$package_id instance_name] - $title" - set autoname [$package_id get_parameter autoname 0] - set object_type [$package_id get_parameter object_type [my info class]] - set rev_link [$package_id make_link -with_entities 0 [self] revisions] - if {[$package_id query_parameter m ""] eq "edit"} { - set view_link [$package_id make_link -with_entities 0 [self] view return_url] + #my msg "$context_package_id title=[$context_package_id instance_name] - $title" + #my msg "::xo::cc package_id = [::xo::cc package_id] ::xo::cc url= [::xo::cc url] " + ::xo::Page set_property doc title "[$context_package_id instance_name] - $title" + set autoname [$page_package_id get_parameter autoname 0] + set object_type [$page_package_id get_parameter object_type [my info class]] + set rev_link [$page_package_id make_link -with_entities 0 [self] revisions] + + if {[$context_package_id query_parameter m ""] eq "edit"} { + set view_link [$page_package_id make_link -with_entities 0 [self] view return_url] } else { - set edit_link [$package_id make_link -with_entities 0 [self] edit return_url] + set edit_link [$page_package_id make_link -with_entities 0 [self] edit return_url] } - set delete_link [$package_id make_link -with_entities 0 [self] delete return_url] + set delete_link [$page_package_id make_link -with_entities 0 [self] delete return_url] if {[my exists __link(new)]} { set new_link [my set __link(new)] } else { if {[my istype ::xowiki::FormPage]} { set template_id [my page_template] - set form [$package_id pretty_link [$template_id name]] - set new_link [$package_id make_link -with_entities 0 -link $form $template_id create-new return_url] + set form [$page_package_id pretty_link [$template_id name]] + set new_link [$page_package_id make_link -with_entities 0 -link $form $template_id create-new return_url] } else { - set new_link [$package_id make_link -with_entities 0 $package_id edit-new object_type return_url autoname] + set new_link [$page_package_id make_link -with_entities 0 $page_package_id edit-new object_type return_url autoname] } } - set admin_link [$package_id make_link -privilege admin -link admin/ $package_id {} {}] - set index_link [$package_id make_link -privilege public -link "" $package_id {} {}] + set admin_link [$context_package_id make_link -privilege admin -link admin/ $context_package_id {} {}] + set index_link [$context_package_id make_link -privilege public -link "" $context_package_id {} {}] set create_in_req_locale_link "" - if {[$package_id get_parameter use_connection_locale 0]} { - $package_id get_lang_and_name -path [$package_id set object] req_lang req_local_name - set default_lang [$package_id default_language] + $context_package_id instvar folder_id ;# this is the root folder + if {[$context_package_id get_parameter use_connection_locale 0]} { + $context_package_id get_lang_and_name -path [$context_package_id set object] req_lang req_local_name + set default_lang [$page_package_id default_language] if {$req_lang ne $default_lang} { set l [Link create new -destroy_on_cleanup \ -page [self] -type language -stripped_name $req_local_name \ -name ${default_lang}:$req_local_name -lang $default_lang \ -label $req_local_name -parent_id $folder_id \ - -package_id $package_id -init \ + -package_id $context_package_id -init \ -return_only undefined] $l render } @@ -213,10 +218,10 @@ } else { # use adp file #my log "use adp" - foreach css [$package_id get_parameter extra_css ""] {::xo::Page requireCSS -order 10 $css} + foreach css [$context_package_id get_parameter extra_css ""] {::xo::Page requireCSS -order 10 $css} # refetch it, since it might have been changed via set-parameter set template_file [my query_parameter "template_file" \ - [::$package_id get_parameter template_file view-default]] + [::$context_package_id get_parameter template_file view-default]] # if the template_file does not have a path, assume it in xowiki/www if {![regexp {^[./]} $template_file]} { @@ -227,7 +232,7 @@ if {[info command ::template::head::add_meta] ne ""} { template::head::add_meta -name language -content [my lang] template::head::add_meta -name description -content [my description] - template::head::add_meta -name keywords -content [$package_id get_parameter keywords ""] + template::head::add_meta -name keywords -content [$context_package_id get_parameter keywords ""] } # @@ -236,10 +241,14 @@ # array set property_body [::xo::Page get_property body] array set property_doc [::xo::Page get_property doc] - # ns_log notice "XOWIKI body=[::xo::Page get_property body]" - $package_id return_page -adp $template_file -variables { + + if {$page_package_id != $context_package_id} { + set page_context [$page_package_id instance_name] + } + + $context_package_id return_page -adp $template_file -variables { name title item_id context header_stuff return_url - content footer package_id + content footer {package_id $context_package_id} page_package_id page_context rev_link edit_link delete_link new_link admin_link index_link view_link notification_subscribe_link notification_image top_includelets page Index: openacs-4/packages/xowiki/www/oacs-view.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/www/Attic/oacs-view.adp,v diff -u -r1.53 -r1.54 --- openacs-4/packages/xowiki/www/oacs-view.adp 30 Oct 2008 22:54:59 -0000 1.53 +++ openacs-4/packages/xowiki/www/oacs-view.adp 23 Nov 2008 18:43:43 -0000 1.54 @@ -1,4 +1,4 @@ - + @title;noquote@ @context;noquote@ @@ -83,8 +83,9 @@
@top_includelets;noquote@ -

@title@

-@content;noquote@ +

@title@ (@page_context@)

+

@title@

+ @content;noquote@
@footer;noquote@ Index: openacs-4/packages/xowiki/www/oacs-view2.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/www/Attic/oacs-view2.adp,v diff -u -r1.32 -r1.33 --- openacs-4/packages/xowiki/www/oacs-view2.adp 30 Oct 2008 22:54:59 -0000 1.32 +++ openacs-4/packages/xowiki/www/oacs-view2.adp 23 Nov 2008 18:43:43 -0000 1.33 @@ -1,4 +1,4 @@ - + @title;noquote@ @context;noquote@ @@ -90,8 +90,9 @@
@top_includelets;noquote@ -

@title@

-@content;noquote@ +

@title@ (@page_context@)

+

@title@

+ @content;noquote@
@top_includelets;noquote@ -

@title@

-@content;noquote@ +

@title@ (@page_context@)

+

@title@

+ @content;noquote@ @footer;noquote@ Index: openacs-4/packages/xowiki/www/view-links.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/www/Attic/view-links.adp,v diff -u -r1.39 -r1.40 --- openacs-4/packages/xowiki/www/view-links.adp 30 Oct 2008 22:54:59 -0000 1.39 +++ openacs-4/packages/xowiki/www/view-links.adp 23 Nov 2008 18:43:43 -0000 1.40 @@ -1,4 +1,4 @@ - +
@@ -18,7 +18,8 @@
@top_includelets;noquote@ -

@title@

-@content;noquote@ +

@title@ (@page_context@)

+

@title@

+ @content;noquote@ Index: openacs-4/packages/xowiki/www/view-plain.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/www/Attic/view-plain.adp,v diff -u -r1.35 -r1.36 --- openacs-4/packages/xowiki/www/view-plain.adp 30 Oct 2008 22:54:59 -0000 1.35 +++ openacs-4/packages/xowiki/www/view-plain.adp 23 Nov 2008 18:43:43 -0000 1.36 @@ -1,10 +1,11 @@ - +
@top_includelets;noquote@ -

@title@

-@content;noquote@ +

@title@ (@page_context@)

+

@title@

+ @content;noquote@
Index: openacs-4/packages/xowiki/www/resources/xowiki.css =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/www/resources/xowiki.css,v diff -u -r1.35 -r1.36 --- openacs-4/packages/xowiki/www/resources/xowiki.css 31 Oct 2008 02:01:30 -0000 1.35 +++ openacs-4/packages/xowiki/www/resources/xowiki.css 23 Nov 2008 18:43:43 -0000 1.36 @@ -216,3 +216,12 @@ /* the body-part of the calendar */ .weblog-mini-calendar #at-a-glance td { text-align: right; padding-right: 3px;} .weblog-mini-calendar #at-a-glance td.active:hover { text-align: right; } + +div.recent div.portlet .list-table td.list { + padding: 8px 4px; +} +div.xowiki-content a.inherited { + background: url(/resources/acs-subsite/arrow-down.gif) right center no-repeat; + padding-right: 14px; + font-size: 65%; +} \ No newline at end of file