Brew.Webforms.Widget.ParseEvents C# (CSharp) Method

ParseEvents() private method

private ParseEvents ( ) : object>>.List
return object>>.List
        private List<KeyValuePair<String, object>> ParseEvents()
        {
            var result = new List<KeyValuePair<String, object>>();
            var type = this.GetType();
            var auto = typeof(IAutoPostBack).IsAssignableFrom(type);
            var events = GetEvents();
            var postbacks = new Dictionary<String, String>();

            foreach (var e in events) {
                var @event = type.GetEvents().Where(ev => ev.Name.ToLower() == e.Name || ev.Name == e.EventName).FirstOrDefault();

                if (@event == null || !auto) {
                    continue;
                    //throw new ArgumentException("Brew Error: Widget has event defined with no matching EventHandler.");
                }

                if (auto) {
                    var iauto = this as IAutoPostBack;
                    if (!iauto.AutoPostBack) {
                        continue;
                    }
                }

                var field = type.GetField(@event.Name, BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public | BindingFlags.FlattenHierarchy);
                var del = (Delegate)field.GetValue(this);

                if (del != null) {
                    var list = del.GetInvocationList();

                    // add only those for which event handlers are assigned
                    if (list != null && list.Length > 0 && e.CausesPostBack) {
                        postbacks.Add(e.Name, e.DataChangedEvent ? @event.Name : null);
                    }
                }
            }

            var js = new System.Web.Script.Serialization.JavaScriptSerializer();
            var json = js.Serialize(postbacks);
            var pair = new KeyValuePair<string, object>("postbacks", json);

            result.Add(pair);

            return result;
        }