Esempio n. 1
0
        private void _AppendRenderFunction(Type modelType, string host, string tag, List <string> properties, bool hasUpdate, bool hasDelete, WrappedStringBuilder sb, List <string> viewIgnoreProperties, string editImage, string deleteImage, EditButtonDefinition edDef, DeleteButtonDefinition delDef, bool minimize)
        {
            bool hasUpdateFunction = true;

            if (modelType.GetCustomAttributes(typeof(ModelBlockJavascriptGeneration), false).Length > 0)
            {
                if (((int)((ModelBlockJavascriptGeneration)modelType.GetCustomAttributes(typeof(ModelBlockJavascriptGeneration), false)[0]).BlockType & (int)ModelBlockJavascriptGenerations.EditForm) == (int)ModelBlockJavascriptGenerations.EditForm)
                {
                    hasUpdateFunction = false;
                }
            }
            sb.AppendLine((minimize ? "render:function(){" : "\trender : function(){"));
            string fstring = "";

            switch (tag.ToLower())
            {
            case "tr":
                fstring = "'<td class=\"'+this.className+' {0}\">'+{1}+'</td>'{2}";
                break;

            case "ul":
            case "ol":
                fstring = "'<li class=\"'+this.className+' {0}\">'+{1}+'</li>'{2}";
                break;

            default:
                fstring = "'<" + tag + " class=\"'+this.className+' {0}\">'+{1}+'</" + tag + ">'{2}";
                break;
            }
            int arIndex = 0;
            WrappedStringBuilder sbHtml = new WrappedStringBuilder(minimize);

            sbHtml.Append((minimize ? "" : "\t\t") + "$(this.el).html(");
            foreach (string prop in properties)
            {
                if (!viewIgnoreProperties.Contains(prop) && prop != "id")
                {
                    Type PropType = modelType.GetProperty(prop).PropertyType;
                    bool array    = false;
                    if (PropType.FullName.StartsWith("System.Nullable"))
                    {
                        if (PropType.IsGenericType)
                        {
                            PropType = PropType.GetGenericArguments()[0];
                        }
                        else
                        {
                            PropType = PropType.GetElementType();
                        }
                    }
                    if (PropType.IsArray)
                    {
                        array    = true;
                        PropType = PropType.GetElementType();
                    }
                    else if (PropType.IsGenericType)
                    {
                        if (PropType.GetGenericTypeDefinition() == typeof(List <>))
                        {
                            array    = true;
                            PropType = PropType.GetGenericArguments()[0];
                        }
                    }
                    if (new List <Type>(PropType.GetInterfaces()).Contains(typeof(IModel)))
                    {
                        if (array)
                        {
                            string tsets = "";
                            string tcode = _RecurAddRenderModelPropertyCode(prop, PropType, host, "this.model.get('" + prop + "').at(x).get('{0}')", out tsets, true, minimize);
                            if (tsets != "")
                            {
                                sb.Append(tsets);
                            }
                            sb.AppendFormat((minimize ?
                                             "var ars{0}='';if(this.model.get('{1}')!=null){{for(var x=0;x<this.model.get('{1}').length;x++){{ars{0}+={2};}}}}"
                                :@"      var ars{0} = '';
        if(this.model.get('{1}')!=null){{
            for(var x=0;x<this.model.get('{1}').length;x++){{
                ars{0}+={2};
            }}
        }}"), arIndex, prop, string.Format(tcode, prop));
                            sbHtml.Append(string.Format(fstring, prop, "ars" + arIndex.ToString(), (properties.IndexOf(prop) == properties.Count - 1 ? "" : "+")));
                            arIndex++;
                        }
                        else
                        {
                            string tsets = "";
                            string code  = _RecurAddRenderModelPropertyCode(prop, PropType, host, "this.model.get('" + prop + "').get('{0}')", out tsets, false, minimize);
                            if (tsets != "")
                            {
                                sb.Append(tsets);
                            }
                            sbHtml.Append(string.Format(fstring, prop, "(this.model.get('" + prop + "') == null ? '' : " + code + ")", (properties.IndexOf(prop) == properties.Count - 1 ? "" : "+")));
                        }
                    }
                    else
                    {
                        if (array)
                        {
                            sb.AppendFormat((minimize?
                                             "var ars{0}='';if(this.model.get('{1}')!=null){{for(x in this.model.get('{1}')){{if(this.model.get('{1}')[x]!=null){{ars{0}+='<span class=\"'+this.className+' {1} els\">'+this.model.get('{1}')[x]+'</span>';}}}}}}"
                                :@"      var ars{0} = '';
        if(this.model.get('{1}')!=null){{
            for(x in this.model.get('{1}')){{
                if(this.model.get('{1}')[x]!=null){{
                    ars{0}+='<span class=""'+this.className+' {1} els"">'+this.model.get('{1}')[x]+'</span>';
                }}
            }}
        }}"), arIndex, prop);
                            sbHtml.Append(string.Format(fstring, prop, "ars" + arIndex.ToString(), (properties.IndexOf(prop) == properties.Count - 1 ? "" : "+")));
                            arIndex++;
                        }
                        else
                        {
                            sbHtml.Append(string.Format(fstring, prop, string.Format((minimize ? "(this.model.get('{0}')==null?'':this.model.get('{0}'))":"(this.model.get('{0}')==null ? '' : this.model.get('{0}'))"), prop), (properties.IndexOf(prop) == properties.Count - 1 ? "" : "+")));
                        }
                    }
                }
            }
            sb.Append(sbHtml.ToString().Trim('+'));
            if (hasUpdate || hasDelete)
            {
                switch (tag.ToLower())
                {
                case "tr":
                    sb.Append("+'<td class=\"'+this.className+' buttons\">'");
                    break;

                case "ul":
                case "ol":
                    sb.Append("+'<li class=\"'+this.className+' buttons\">'");
                    break;

                default:
                    sb.Append("+'<" + tag + " class=\"'+this.className+' buttons\">'");
                    break;
                }
            }
            if (hasUpdate)
            {
                if (edDef == null)
                {
                    sb.Append("+'<span class=\"'+this.className+' button edit\">" + (editImage == null ? "Edit" : "<img src=\"" + editImage + "\"/>") + "</span>'");
                }
                else
                {
                    sb.Append("+'<" + edDef.Tag + " class=\"'+this.className+' button edit");
                    if (edDef.Class != null)
                    {
                        foreach (string str in edDef.Class)
                        {
                            sb.Append(" " + str);
                        }
                    }
                    sb.Append("\">" + (editImage == null ? "" : "<img src=\"" + editImage + "\"/>") + (edDef.Text == null ? "" : edDef.Text) + "</" + edDef.Tag + ">'");
                }
            }
            if (hasDelete)
            {
                if (delDef == null)
                {
                    sb.Append("+'<span class=\"'+this.className+' button delete\">" + (deleteImage == null ? "Delete" : "<img src=\"" + deleteImage + "\"/>") + "</span>'");
                }
                else
                {
                    sb.Append("+'<" + delDef.Tag + " class=\"'+this.className+' button edit");
                    if (delDef.Class != null)
                    {
                        foreach (string str in delDef.Class)
                        {
                            sb.Append(" " + str);
                        }
                    }
                    sb.Append("\">" + (deleteImage == null ? "" : "<img src=\"" + deleteImage + "\"/>") + (delDef.Text == null ? "" : delDef.Text) + "</" + delDef.Tag + ">'");
                }
            }
            if (hasUpdate || hasDelete)
            {
                switch (tag.ToLower())
                {
                case "tr":
                    sb.Append("+'</td>'");
                    break;

                case "ul":
                case "ol":
                    sb.Append("+'</li>'");
                    break;

                default:
                    sb.Append("+'</" + tag + ">'");
                    break;
                }
            }
            sb.AppendLine((minimize ?
                           ");$(this.el).attr('name',this.model.id);this.trigger('pre_render_complete',this);this.trigger('render',this);return this;}"
                : @");
        $(this.el).attr('name',this.model.id);
        this.trigger('pre_render_complete',this);
        this.trigger('render',this);
        return this;
    }") + (hasUpdate || hasDelete ? "," : ""));
            if ((hasUpdate && hasUpdateFunction) || hasDelete)
            {
                sb.AppendLine((minimize ? "events:{" : "\tevents : {"));
                if (hasUpdate && hasUpdateFunction)
                {
                    sb.AppendLine((minimize ? "'click .button.edit':'editModel'" : "\t\t'click .button.edit' : 'editModel'") + (hasDelete ? "," : ""));
                }
                if (hasDelete)
                {
                    sb.AppendLine((minimize ? "'click .button.delete':'deleteModel'" : "\t\t'click .button.delete' : 'deleteModel'"));
                }
                sb.AppendLine((minimize ? "" : "\t") + "},");
                if (hasUpdate && hasUpdateFunction)
                {
                    sb.AppendLine(string.Format((minimize ?
                                                 "editModel:function(){{{0}.editModel(this);}}"
                        : @"    editModel : function(){{
        {0}.editModel(this);
    }}"), ModelNamespace.GetFullNameForModel(modelType, host)) + (hasDelete ? "," : ""));
                }
                if (hasDelete)
                {
                    sb.AppendLine((minimize ?
                                   "deleteModel:function(){this.model.destroy();}"
                        :@"  deleteModel : function(){
        this.model.destroy();
    }"));
                }
            }
        }
Esempio n. 2
0
 private void _LocateButtonImages(Type modelType, string host, out string editImage, out string deleteImage, out EditButtonDefinition edDef, out DeleteButtonDefinition delDef)
 {
     editImage   = null;
     deleteImage = null;
     delDef      = null;
     edDef       = null;
     foreach (EditButtonImagePath edip in modelType.GetCustomAttributes(typeof(EditButtonImagePath), false))
     {
         if (edip.Host == host)
         {
             editImage = edip.URL;
             break;
         }
     }
     if (editImage == null)
     {
         foreach (EditButtonImagePath edip in modelType.GetCustomAttributes(typeof(EditButtonImagePath), false))
         {
             if (edip.Host == "*")
             {
                 editImage = edip.URL;
                 break;
             }
         }
     }
     foreach (DeleteButtonImagePath dbip in modelType.GetCustomAttributes(typeof(DeleteButtonImagePath), false))
     {
         if (dbip.Host == host)
         {
             deleteImage = dbip.URL;
             break;
         }
     }
     if (deleteImage == null)
     {
         foreach (DeleteButtonImagePath dbip in modelType.GetCustomAttributes(typeof(DeleteButtonImagePath), false))
         {
             if (dbip.Host == "*")
             {
                 deleteImage = dbip.URL;
                 break;
             }
         }
     }
     foreach (EditButtonDefinition ebd in modelType.GetCustomAttributes(typeof(EditButtonDefinition), false))
     {
         if (ebd.Host == host)
         {
             edDef = ebd;
             break;
         }
     }
     if (edDef == null)
     {
         foreach (EditButtonDefinition ebd in modelType.GetCustomAttributes(typeof(EditButtonDefinition), false))
         {
             if (ebd.Host == "*")
             {
                 edDef = ebd;
                 break;
             }
         }
     }
     foreach (DeleteButtonDefinition dbd in modelType.GetCustomAttributes(typeof(DeleteButtonDefinition), false))
     {
         if (dbd.Host == host)
         {
             delDef = dbd;
             break;
         }
     }
     if (delDef == null)
     {
         foreach (DeleteButtonDefinition dbd in modelType.GetCustomAttributes(typeof(DeleteButtonDefinition), false))
         {
             if (dbd.Host == "*")
             {
                 delDef = dbd;
                 break;
             }
         }
     }
 }