using System.Collections;
using System.Security.Permissions;
using System.Text;
+using System.Collections.Specialized;
+using System.Globalization;
namespace System.Web.UI {
[AspNetHostingPermission (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
public sealed class CssStyleCollection
{
- private StateBag bag;
- private StateBag style;
+ StateBag bag;
+ HybridDictionary style;
- internal CssStyleCollection ()
- {
- style = new StateBag ();
- }
-
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)
+ InitFromStyle ();
+ }
+
+ void InitFromStyle ()
+ {
+#if NET_2_0
+ style = new HybridDictionary (true);
+#else
+ style = new HybridDictionary (false);
+#endif
+ string att = (string) bag ["style"];
+ if (att != null) {
+ FillStyle (att);
+ }
}
- internal void FillStyle (string s)
+ void FillStyle (string s)
{
int mark = s.IndexOf (':');
if (mark == -1)
FillStyle (fullValue.Substring (mark + 1));
}
- internal string BagToString ()
+ string BagToString ()
{
- HtmlTextWriter writer = new HtmlTextWriter (new StringWriter ());
- foreach (string k in style.Keys)
- writer.WriteStyleAttribute ((k as string), (style [k] as string));
- return writer.InnerWriter.ToString ();
+ StringBuilder sb = new StringBuilder ();
+ foreach (string key in style.Keys) {
+ if (key == "background-image" && 0 != String.Compare ("url", ((string) style [key]).Substring (0, 3), true, CultureInfo.InvariantCulture))
+ sb.AppendFormat ("{0}:url({1});", key, HttpUtility.UrlPathEncode ((string) style [key]));
+ else
+ sb.AppendFormat ("{0}:{1};", key, style [key]);
+ }
+
+ return sb.ToString ();
}
-
- public int Count
- {
- get { return style.Count; }
+
+ public int Count {
+ get {
+ return style.Count;
+ }
}
- public string this [string key]
- {
+ public string this [string key] {
get {
return style [key] as string;
}
}
public ICollection Keys {
- get { return style.Keys; }
+ get {
+ return style.Keys;
+ }
}
public void Add (string key, string value)
{
style [key] = value;
- if (bag != null)
- bag ["style"] = BagToString ();
+ bag ["style"] = BagToString ();
}
-
+
#if NET_2_0
public
#else
public void Clear ()
{
- if (bag != null)
- bag.Remove ("style");
style.Clear ();
+ bag.Remove ("style");
}
public void Remove (string key)
{
- if (style [key] != null) {
- style.Remove (key);
- if (bag != null)
- bag ["style"] = BagToString ();
- }
+ if (style [key] == null)
+ return;
+ style.Remove (key);
+ bag ["style"] = BagToString ();
}
#if NET_2_0
public string this [HtmlTextWriterStyle key] {
}
}
- public string Value {
- get { return BagToString (); }
- set {
- Clear ();
- FillStyle (value);
- }
- }
-
public void Remove (HtmlTextWriterStyle key)
{
Remove (HtmlTextWriter.StaticGetStyleName (key));
}
+
+ public
+#else
+ internal
#endif
+ string Value {
+ get { return BagToString (); }
+ set {
+ bag ["style"] = value;
+ InitFromStyle ();
+ }
+ }
}
}