private string GetClickScript(BocBooleanValueRenderingContext renderingContext, BocBooleanValueResourceSet resourceSet, Image imageControl, Label labelControl, HiddenField hiddenFieldControl, bool isEnabled)
        {
            string script = "return false;";

            if (!isEnabled)
            {
                return(script);
            }

            string requiredFlag = renderingContext.Control.IsRequired ? "true" : "false";
            string image        = "document.getElementById ('" + imageControl.ClientID + "')";
            string label        = renderingContext.Control.ShowDescription ? "document.getElementById ('" + labelControl.ClientID + "')" : "null";
            string hiddenField  = "document.getElementById ('" + hiddenFieldControl.ClientID + "')";

            script = "BocBooleanValue_SelectNextCheckboxValue ("
                     + "'" + resourceSet.ResourceKey + "', "
                     + image + ", "
                     + label + ", "
                     + hiddenField + ", "
                     + requiredFlag + ", "
                     + (string.IsNullOrEmpty(renderingContext.Control.TrueDescription) ? "null" : "'" + ScriptUtility.EscapeClientScript(renderingContext.Control.TrueDescription) + "'")
                     + ", "
                     + (string.IsNullOrEmpty(renderingContext.Control.FalseDescription) ? "null" : "'" + ScriptUtility.EscapeClientScript(renderingContext.Control.FalseDescription) + "'")
                     + ", "
                     + (string.IsNullOrEmpty(renderingContext.Control.NullDescription) ? "null" : "'" + ScriptUtility.EscapeClientScript(renderingContext.Control.NullDescription) + "'")
                     + ");";

            if (renderingContext.Control.IsAutoPostBackEnabled)
            {
                script += renderingContext.Control.Page.ClientScript.GetPostBackEventReference(renderingContext.Control, "") + ";";
            }
            script += "return false;";
            return(script);
        }
        private void RegisterStarupScriptIfNeeded(BocBooleanValueRenderingContext renderingContext, BocBooleanValueResourceSet resourceSet)
        {
            string startUpScriptKey = s_startUpScriptKeyPrefix + resourceSet.ResourceKey;

            if (!renderingContext.Control.Page.ClientScript.IsStartupScriptRegistered(typeof(BocBooleanValueQuirksModeRenderer), startUpScriptKey))
            {
                string trueValue  = true.ToString();
                string falseValue = false.ToString();
                string nullValue  = c_nullString;

                string startupScript = string.Format(
                    "BocBooleanValue_InitializeGlobals ('{0}', '{1}', '{2}', '{3}', '{4}', '{5}', '{6}', '{7}', '{8}', '{9}');",
                    resourceSet.ResourceKey,
                    trueValue,
                    falseValue,
                    nullValue,
                    ScriptUtility.EscapeClientScript(resourceSet.DefaultTrueDescription),
                    ScriptUtility.EscapeClientScript(resourceSet.DefaultFalseDescription),
                    ScriptUtility.EscapeClientScript(resourceSet.DefaultNullDescription),
                    resourceSet.TrueIconUrl,
                    resourceSet.FalseIconUrl,
                    resourceSet.NullIconUrl);
                renderingContext.Control.Page.ClientScript.RegisterStartupScriptBlock(renderingContext.Control, typeof(BocBooleanValueQuirksModeRenderer), startUpScriptKey, startupScript);
            }
        }
 private void PrepareHiddenControl(BocBooleanValueRenderingContext renderingContext, HiddenField hiddenFieldControl, bool isReadOnly)
 {
     if (!isReadOnly)
     {
         hiddenFieldControl.Value = renderingContext.Control.Value.HasValue ? renderingContext.Control.Value.ToString() : c_nullString;
     }
     hiddenFieldControl.Visible = !isReadOnly;
 }
        private void PrepareLinkControl(BocBooleanValueRenderingContext renderingContext, HyperLink linkControl, bool isClientScriptEnabled)
        {
            if (!isClientScriptEnabled)
            {
                return;
            }

            linkControl.Attributes.Add("onkeydown", "BocBooleanValue_OnKeyDown (this);");
            linkControl.Style["padding"]          = "0px";
            linkControl.Style["border"]           = "none";
            linkControl.Style["background-color"] = "transparent";
            linkControl.Attributes.Add("href", "#");
            linkControl.Enabled = renderingContext.Control.Enabled;
        }
        /// <summary>
        /// Renders an image and a label. In edit mode, the image is wrapped in a hyperlink that is
        /// scripted to respond to clicks and change the "checkbox" state accordingly;
        /// in addition, the state is put into an additional hidden field.
        /// </summary>
        public void Render(BocBooleanValueRenderingContext renderingContext)
        {
            ArgumentUtility.CheckNotNull("renderingContext", renderingContext);

            var resourceSet = _resourceSetFactory.CreateResourceSet(renderingContext.Control);

            AddAttributesToRender(renderingContext, false);
            renderingContext.Writer.RenderBeginTag(HtmlTextWriterTag.Span);

            Label labelControl = new Label {
                ID = renderingContext.Control.ClientID + "_LabelValue"
            };
            Image imageControl = new Image {
                ID = renderingContext.Control.ClientID + "_Image"
            };
            HiddenField hiddenFieldControl = new HiddenField {
                ID = renderingContext.Control.GetValueName()
            };
            HyperLink linkControl = new HyperLink {
                ID = renderingContext.Control.GetDisplayValueName()
            };

            bool isClientScriptEnabled = DetermineClientScriptLevel(renderingContext);

            if (isClientScriptEnabled)
            {
                if (renderingContext.Control.Enabled)
                {
                    RegisterStarupScriptIfNeeded(renderingContext, resourceSet);
                }

                string script = GetClickScript(renderingContext, resourceSet, imageControl, labelControl, hiddenFieldControl, renderingContext.Control.Enabled);
                labelControl.Attributes.Add("onclick", script);
                linkControl.Attributes.Add("onclick", script);
            }

            PrepareLinkControl(renderingContext, linkControl, isClientScriptEnabled);
            PrepareHiddenControl(renderingContext, hiddenFieldControl, renderingContext.Control.IsReadOnly);
            PrepareVisibleControls(renderingContext, resourceSet, imageControl, labelControl);

            hiddenFieldControl.RenderControl(renderingContext.Writer);
            linkControl.Controls.Add(imageControl);
            linkControl.RenderControl(renderingContext.Writer);
            labelControl.RenderControl(renderingContext.Writer);

            renderingContext.Writer.RenderEndTag();
        }
        private void PrepareVisibleControls(BocBooleanValueRenderingContext renderingContext, BocBooleanValueResourceSet resourceSet, Image imageControl,
                                            Label labelControl)
        {
            string imageUrl;
            string description;

            if (!renderingContext.Control.Value.HasValue)
            {
                imageUrl    = resourceSet.NullIconUrl;
                description = string.IsNullOrEmpty(renderingContext.Control.NullDescription) ? resourceSet.DefaultNullDescription : renderingContext.Control.NullDescription;
            }
            else if (renderingContext.Control.Value.Value)
            {
                imageUrl    = resourceSet.TrueIconUrl;
                description = string.IsNullOrEmpty(renderingContext.Control.TrueDescription) ? resourceSet.DefaultTrueDescription : renderingContext.Control.TrueDescription;
            }
            else
            {
                imageUrl    = resourceSet.FalseIconUrl;
                description = string.IsNullOrEmpty(renderingContext.Control.FalseDescription) ? resourceSet.DefaultFalseDescription : renderingContext.Control.FalseDescription;
            }

            imageControl.AlternateText           = description;
            imageControl.Style["vertical-align"] = "middle";
            imageControl.Style["border-style"]   = "none";

            imageControl.ImageUrl = imageUrl;
            if (renderingContext.Control.ShowDescription)
            {
                labelControl.Text = description;
            }

            labelControl.Width  = Unit.Empty;
            labelControl.Height = Unit.Empty;
            labelControl.ApplyStyle(renderingContext.Control.LabelStyle);
        }
 private bool DetermineClientScriptLevel(BocBooleanValueRenderingContext renderingContext)
 {
     return(!renderingContext.Control.IsDesignMode && !renderingContext.Control.IsReadOnly);
 }