// Gonzalo Paniagua (gonzalo@ximian.com)
//
// (C) 2002 Ximian, Inc. (http://www.ximian.com)
-//
-
+// Copyright (C) 2005 Novell, Inc (http://www.novell.com)
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
-using System;
+using System.IO;
using System.Collections;
+using System.Security.Permissions;
using System.Text;
namespace System.Web.UI {
+ // CAS - no InheritanceDemand here as the class is sealed
+ [AspNetHostingPermission (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
public sealed class CssStyleCollection
{
- private StateBag bag;
- private StateBag style;
+ StateBag bag;
+ StateBag style;
+ string last_string;
internal CssStyleCollection (StateBag bag)
{
this.bag = bag;
- style = new StateBag ();
- string st_string = bag ["style"] as string;
- if (st_string != null)
- FillStyle (st_string);
+ if (bag != null) {
+ last_string = (string) bag ["style"];
+ style = new StateBag ();
+ if (last_string != null)
+ FillStyle (last_string);
+ }
}
- internal void FillStyle (string s)
+ void FillStyle (string s)
{
int mark = s.IndexOf (':');
if (mark == -1)
FillStyle (fullValue.Substring (mark + 1));
}
- private string BagToString ()
+ string BagToString ()
{
+ if (last_string != null)
+ return last_string;
+
StringBuilder sb = new StringBuilder ();
- foreach (string k in style.Keys)
- sb.AppendFormat ("{0}: {1}; ", k, style [k]);
- return sb.ToString ();
+ foreach (string key in Keys) {
+ if (key == "background-image")
+ sb.AppendFormat ("{0}:url({1});", key, HttpUtility.UrlPathEncode ((string) style [key]));
+ else
+ sb.AppendFormat ("{0}:{1};", key, style [key]);
+ }
+
+ last_string = sb.ToString ();
+ return last_string;
}
-
+
public int Count
{
- get { return style.Count; }
+ get {
+ if (bag == null)
+ throw new NullReferenceException ();
+ return style.Count;
+ }
}
- public string this [string key]
- {
+ public string this [string key] {
get {
return style [key] as string;
}
public void Add (string key, string value)
{
+ if (style == null)
+ style = new StateBag ();
style [key] = value;
+ last_string = null;
bag ["style"] = BagToString ();
}
+#if NET_2_0
+ public
+#else
+ internal
+#endif
+ void Add (HtmlTextWriterStyle key, string value)
+ {
+ Add (HtmlTextWriter.StaticGetStyleName (key), value);
+ }
+
public void Clear ()
{
+ if (style != null)
+ style.Clear ();
+ last_string = null;
bag.Remove ("style");
- style.Clear ();
}
public void Remove (string key)
{
- if (style [key] != null) {
+ if (style != null)
style.Remove (key);
- bag ["style"] = BagToString ();
+ last_string = null;
+ bag ["style"] = BagToString ();
+ }
+#if NET_2_0
+ public string this [HtmlTextWriterStyle key] {
+ get {
+ return style [HtmlTextWriter.StaticGetStyleName (key)] as string;
+ }
+ set {
+ Add (HtmlTextWriter.StaticGetStyleName (key), value);
+ }
+ }
+
+ public void Remove (HtmlTextWriterStyle key)
+ {
+ Remove (HtmlTextWriter.StaticGetStyleName (key));
+ }
+
+ public
+#else
+ internal
+#endif
+ string Value {
+ get { return BagToString (); }
+ set {
+ if (style != null)
+ style = new StateBag ();
+ style.Clear ();
+ last_string = value;
+ bag ["style"] = value;
+ if (value != null)
+ FillStyle (value);
}
}
}