public override void Process(TagHelperContext tagContext, TagHelperOutput output)
        {
            var model = new NccActionModel {
                TargetIds = NccFilterTargets.Split(',')
            };

            model.Parameters.Add($"{DefaultParameters.ActionType.ToString().NccAddPrefix()}", "Filter");

            if (string.IsNullOrEmpty(NccJsEvents))
            {
                if (output.TagName.ToLower() == "select")
                {
                    NccJsEvents = "onchange";
                }
                else if (output.TagName == "input" && output.Attributes["type"]?.Value.ToString() == "text")
                {
                    NccJsEvents = "onkeyup";
                }
                else
                {
                    NccJsEvents = "onclick";
                }
            }
            foreach (var jsEvent in NccJsEvents.Replace(" ", "").Split(','))
            {
                var existingJsEvent = "";
                if (output.Attributes.ContainsName(jsEvent.ToLower()))
                {
                    existingJsEvent = output.Attributes[jsEvent.ToLower()].Value.ToString();
                }

                output.Attributes.SetAttribute(jsEvent.ToLower(), $"{existingJsEvent} nccAction(null, " + (string.IsNullOrEmpty(NccFilterIds) ? "$(this)" : $"{JsonConvert.SerializeObject(NccFilterIds.Split(','))}") + $", '{JsonConvert.SerializeObject(model)}', '{NccConstants.AttributePrefix}');");
            }
        }
        public override void Process(TagHelperContext tagContext, TagHelperOutput output)
        {
            var model = new NccActionModel {
                TargetIds = NccEventTarget.Split(',')
            };

            model.Parameters.Add($"{DefaultParameters.ActionType.ToString().NccAddPrefix()}", "Event");
            model.Parameters.Add($"{DefaultParameters.EventName.ToString().NccAddPrefix()}", NccEvent);
            model.Parameters.Add($"{"RowNumber".NccAddPrefix()}", RowPos.ToString());

            if (output.TagName.ToLower() == "select")
            {
                var onchange = "";
                if (output.Attributes.ContainsName("onchange"))
                {
                    onchange = output.Attributes["onchange"].Value.ToString();
                }

                output.Attributes.SetAttribute("onchange", $"{onchange} nccAction(null, $(this), '{JsonConvert.SerializeObject(model)}', '{NccConstants.AttributePrefix}');");
            }
            else
            {
                var onclick = "";
                if (output.Attributes.ContainsName("onclick"))
                {
                    onclick = output.Attributes["onclick"].Value.ToString();
                }

                output.Attributes.SetAttribute("onclick", $"{onclick} nccAction(null, $(this), '{JsonConvert.SerializeObject(model)}', '{NccConstants.AttributePrefix}');");
            }
        }
예제 #3
0
        private static TagBuilder BuilPagerLink(int pageNumber, NccActionModel model, NccGridTagContext context, string htmlContent = null, bool active = false, bool disabled = false)
        {
            var li = new TagBuilder("li");

            if (!string.IsNullOrEmpty(context.CssClassPagerLi))
            {
                li.Attributes.Add("class", context.CssClassPagerLi);
            }
            var link = new TagBuilder("a")
            {
                Attributes =
                {
                    { "name",    "pageNumber"                                                                                           },
                    { "value",   pageNumber.ToString()                                                                                  },
                    { "onclick", $"nccAction(null, $(this), '{JsonConvert.SerializeObject(model)}', '{NccConstants.AttributePrefix}');" }
                }
            };

            link.InnerHtml.Append(string.IsNullOrEmpty(htmlContent) ? pageNumber.ToString() : htmlContent);
            if (active)
            {
                if (li.Attributes.ContainsKey("class"))
                {
                    li.Attributes["class"] = li.Attributes["class"] + " active";
                }
                else
                {
                    li.Attributes.Add("class", "active");
                }
            }
            else if (!disabled)
            {
                link.Attributes.Add("style", "cursor: pointer;");
            }
            if (!string.IsNullOrEmpty(context.CssClassPagerA))
            {
                link.Attributes.Add("class", context.CssClassPagerA);
            }
            if (disabled)
            {
                if (li.Attributes.ContainsKey("class"))
                {
                    li.Attributes["class"] = li.Attributes["class"] + " disabled";
                }
                else
                {
                    li.Attributes.Add("class", "disabled");
                }
                link.Attributes.Remove("onclick");
            }

            li.InnerHtml.AppendHtml(link);

            return(li);
        }
예제 #4
0
        public override void Process(TagHelperContext tagContext, TagHelperOutput output)
        {
            var model = new NccActionModel
            {
                TargetIds = LinkTargets.Split(',')
            };

            model.Parameters.Add($"{DefaultParameters.ActionType.ToString().NccAddPrefix()}", "LinkAction");
            model.Parameters.Add($"{DefaultParameters.EventName.ToString().NccAddPrefix()}", "OnChange");


            var onchange = "";

            if (output.Attributes.ContainsName("onchange"))
            {
                onchange = output.Attributes["onchange"].Value.ToString();
            }

            output.Attributes.SetAttribute("onchange", $"{onchange} nccAction(event, $(this), '{JsonConvert.SerializeObject(model)}', '{NccConstants.AttributePrefix}');");
        }
        public override void Process(TagHelperContext tagContext, TagHelperOutput output)
        {
            var exportFormats = new string[] { "exportExcel" };

            if (!exportFormats.Any(NccExportFormat.Contains))
            {
                NccExportFormat = "exportExcel";
            }
            var model = new NccActionModel {
                TargetIds = NccTargetIds.Split(',')
            };

            model.Parameters.Add($"{DefaultParameters.ActionType.ToString().NccAddPrefix()}", NccExportFormat);

            var existingJsEvent = "";

            if (output.Attributes.ContainsName("onclick"))
            {
                existingJsEvent = output.Attributes["onclick"].Value.ToString();
            }

            output.Attributes.SetAttribute("onclick", $"{existingJsEvent} nccAction(null, null, '{JsonConvert.SerializeObject(model)}', '{NccConstants.AttributePrefix}');");
        }
        public override async Task ProcessAsync(TagHelperContext tagContext, TagHelperOutput output)
        {
            output.SuppressOutput();

            if (tagContext.Items.ContainsKey(typeof(NccGridContext)))
            {
                _context = (NccGridContext)tagContext.Items[typeof(NccGridContext)];
            }
            else
            {
                return;
            }

            var gridViewContext = (NccGridContext)tagContext.Items[typeof(NccGridContext)];

            var global = ViewContext.ViewData.Model;

            output.TagName = null;

            var data = gridViewContext.DataObjects as IList;

            _nccTagContext.RowNumber      = 0;
            ViewContext.ViewBag.EmptyData = false;

            if (data != null && data.Count > 0)
            {
                object service = null;
                if (!string.IsNullOrEmpty(_context.EventHandlerClass))
                {
                    service = NccReflectionService.NccGetClassInstance(_context.EventHandlerClass, null);
                }

                _nccTagContext.GridRows = new List <GridRow>();

                if (data.Count > _context.PageSize)
                {
                    if (_context.Filters.ContainsKey("pageSize"))
                    {
                        var pageSize = Convert.ToInt32(_context.Filters["pageSize"]);
                        data = new List <object>(data.Cast <object>()).Skip(pageSize * (_context.PageNumber - 1)).Take(pageSize).ToList();
                    }
                    else
                    {
                        data = new List <object>(data.Cast <object>()).Skip(_context.PageSize * (_context.PageNumber - 1)).Take(_context.PageSize).ToList();
                    }
                }

                _context.DataObjects = data;

                var dataKeys = _context.DataKeys?.Split(',')?.ToList();
                if (dataKeys != null)
                {
                    _context.DataKeysValues = new List <Dictionary <string, object> >();
                }

                foreach (var row in data)
                {
                    if (dataKeys != null)
                    {
                        var dataKeysRow = new Dictionary <string, object>();
                        foreach (var dataKey in dataKeys)
                        {
                            var keyValue = row.NccGetPropertyValue <object>(dataKey);
                            if (keyValue != null)
                            {
                                dataKeysRow[dataKey] = keyValue;
                            }
                        }
                        _context.DataKeysValues.Add(dataKeysRow);
                    }

                    service?.NccInvokeMethod(NccGridEventsEnum.RowDataBound.ToString(), new object[] { new NccEventArgs {
                                                                                                           NccTagContext = _nccTagContext, NccControlContext = _context, DataObjects = data
                                                                                                       }, row });

                    _nccTagContext.GridRows.Add(new GridRow {
                        Cells = new List <GridCell>(), RowNumber = _nccTagContext.RowNumber
                    });

                    var rowData = row.NccToExpando() as IDictionary <string, object>;
                    rowData["NccRowNumber"] = _nccTagContext.RowNumber;

                    ViewContext.ViewData.Model = rowData.NccToExpando();

                    await output.GetChildContentAsync(false);

                    if (_context.AutoGenerateEditButton)
                    {
                        var rowModel = _nccTagContext.GridRows.LastOrDefault();

                        if (_context.AdditionalData.ContainsKey("EditRowNumber") && _context.AdditionalData["EditRowNumber"].ToString() == _nccTagContext.RowNumber.ToString())
                        {
                            var model = new NccActionModel
                            {
                                TargetIds = new[] { _context.Id }
                            };
                            model.Parameters.Add($"{DefaultParameters.ActionType.ToString().NccAddPrefix()}", "GridAction");
                            model.Parameters.Add($"{DefaultParameters.EventName.ToString().NccAddPrefix()}", "CancelEditRow");
                            model.Parameters.Add($"{NccGridParametersEnum.RowNumber.ToString().NccAddPrefix()}", _nccTagContext.RowNumber.ToString());
                            var link = new TagBuilder("a")
                            {
                                Attributes =
                                {
                                    { "style",   "cursor:pointer;"                                                                                      },
                                    { "onclick", $"nccAction(null, $(this), '{JsonConvert.SerializeObject(model)}', '{NccConstants.AttributePrefix}');" }
                                }
                            };
                            link.InnerHtml.AppendHtml("Cancel");

                            model.Parameters[$"{DefaultParameters.EventName.ToString().NccAddPrefix()}"] = "UpdateRow";
                            var link2 = new TagBuilder("a")
                            {
                                Attributes =
                                {
                                    { "style",   "cursor:pointer;"                                                                                      },
                                    { "onclick", $"nccAction(null, $(this), '{JsonConvert.SerializeObject(model)}', '{NccConstants.AttributePrefix}');" }
                                }
                            };
                            link2.InnerHtml.AppendHtml("Save");

                            var cell = new GridCell();
                            cell.Value.AppendHtml(link);
                            rowModel?.Cells.Add(cell);
                            var cell2 = new GridCell();
                            cell2.Value.SetHtmlContent(link2);
                            rowModel?.Cells.Add(cell2);
                        }
                        else
                        {
                            var model = new NccActionModel
                            {
                                TargetIds = new[] { _context.Id }
                            };
                            model.Parameters.Add($"{DefaultParameters.ActionType.ToString().NccAddPrefix()}", "GridAction");
                            model.Parameters.Add($"{DefaultParameters.EventName.ToString().NccAddPrefix()}", "EditRow");
                            model.Parameters.Add($"{NccGridParametersEnum.RowNumber.ToString().NccAddPrefix()}", _nccTagContext.RowNumber.ToString());

                            var link = new TagBuilder("a")
                            {
                                Attributes =
                                {
                                    { "style",   "cursor:pointer;"                                                                                      },
                                    { "onclick", $"nccAction(null, $(this), '{JsonConvert.SerializeObject(model)}', '{NccConstants.AttributePrefix}');" }
                                }
                            };
                            link.InnerHtml.AppendHtml("Edit");

                            var cell = new GridCell();
                            cell.Value.AppendHtml(link);
                            rowModel?.Cells.Add(cell);
                        }
                    }
                    //ViewContext.ViewBag.RowCount
                    _nccTagContext.RowNumber++;
                    _nccTagContext.ColCountComplete = true;

                    service?.NccInvokeMethod(NccGridEventsEnum.RowCreated.ToString(), new object[] { new NccEventArgs {
                                                                                                         NccTagContext = _nccTagContext, NccControlContext = _context, DataObjects = data
                                                                                                     }, _nccTagContext.GridRows.LastOrDefault() });
                }
            }
        }
예제 #7
0
        public static TagBuilder BuildTablePager(NccGridTagContext context, NccGridContext gridContext)
        {
            var pageSize = gridContext.PageSize;

            if (gridContext.Filters.ContainsKey("pageSize"))
            {
                pageSize = Convert.ToInt32(gridContext.Filters["pageSize"]);
            }

            var totalPages = gridContext.TotalItems % pageSize > 0
                ? gridContext.TotalItems / pageSize + 1
                : gridContext.TotalItems / pageSize;

            if (totalPages <= 1)
            {
                return(null);
            }

            var model = new NccActionModel {
                TargetIds = new [] { gridContext.Id }
            };

            model.Parameters.Add($"{DefaultParameters.ActionType.ToString().NccAddPrefix()}", "Filter");

            var footerContainerDiv = new TagBuilder("div")
            {
                Attributes = { { "class", context.CssClassFooterContainer ?? "row" } }
            };

            var divColLeft = new TagBuilder("div")
            {
                Attributes = { { "class", "col-sm-12 col-md-6" } }
            };
            var divColRight = new TagBuilder("div")
            {
                Attributes = { { "class", "col-sm-12 col-md-6" } }
            };
            var divRecordCount = new TagBuilder("div");

            if (!string.IsNullOrEmpty(context.CssClassRecordCountDiv))
            {
                divRecordCount.Attributes.Add("class", context.CssClassRecordCountDiv);
            }
            //TODO: Add RecordCount html

            var div = new TagBuilder("div")
            {
                Attributes = { { "class", context.CssClassPagerDiv ?? "nccGridPagerContainer" } }
            };
            var ul = new TagBuilder("ul")
            {
                Attributes = { { "class", context.CssClassPagerUl ?? "nccGridPagerPagination" } }
            };

            var firstLink = BuilPagerLink(1, model, context, "<<", false, gridContext.PageNumber == 1);
            var prevLink  = BuilPagerLink(gridContext.PageNumber - 1, model, context, "<", false, gridContext.PageNumber == 1);

            ul.InnerHtml.AppendHtml(firstLink);
            ul.InnerHtml.AppendHtml(prevLink);

            var nextLink = BuilPagerLink(gridContext.PageNumber + 1, model, context, ">", false, gridContext.PageNumber == totalPages);
            var lastLink = BuilPagerLink(totalPages, model, context, ">>", false, gridContext.PageNumber == totalPages);

            var navSize     = gridContext.PagerNavigationSize >= totalPages ? totalPages : gridContext.PagerNavigationSize;
            var linksBefore = navSize / 2 < gridContext.PageNumber
                ? navSize / 2
                : gridContext.PageNumber - 1;
            var linksAfter = navSize / 2 <= totalPages - gridContext.PageNumber
                ? navSize - linksBefore
                : totalPages - gridContext.PageNumber;

            if (navSize / 2 > linksAfter)
            {
                linksBefore = linksBefore + (navSize / 2 - linksAfter);
            }
            if (navSize % 2 == 0)
            {
                if (linksBefore > 0 && linksBefore >= navSize / 2)
                {
                    linksBefore--;
                }
                else
                {
                    linksAfter--;
                }
            }
            else if (navSize < linksBefore + linksAfter + 1)
            {
                linksAfter--;
            }

            for (var i = 0; i < linksBefore; i++)
            {
                var link = BuilPagerLink(gridContext.PageNumber - linksBefore + i, model, context);
                ul.InnerHtml.AppendHtml(link);
            }
            ul.InnerHtml.AppendHtml(BuilPagerLink(gridContext.PageNumber, model, context, null, true));
            for (var i = 0; i < linksAfter; i++)
            {
                var link = BuilPagerLink(gridContext.PageNumber + i + 1, model, context);
                ul.InnerHtml.AppendHtml(link);
            }

            ul.InnerHtml.AppendHtml(nextLink);
            ul.InnerHtml.AppendHtml(lastLink);

            div.InnerHtml.AppendHtml(ul);
            if (gridContext.GridPagerPosition == NccGridPagerPositionEnum.Left)
            {
                divColLeft.InnerHtml.AppendHtml(div);
                if (gridContext.ShowRecordsCount && gridContext.GridRecordCountPosition == NccGridPagerPositionEnum.Left)
                {
                    divColLeft.InnerHtml.AppendHtml(divRecordCount);
                }
                else if (gridContext.ShowRecordsCount && gridContext.GridRecordCountPosition == NccGridPagerPositionEnum.Right)
                {
                    divColRight.InnerHtml.AppendHtml(divRecordCount);
                }
            }
            else
            {
                if (gridContext.ShowRecordsCount && gridContext.GridRecordCountPosition == NccGridPagerPositionEnum.Left)
                {
                    divColLeft.InnerHtml.AppendHtml(divRecordCount);
                }
                else if (gridContext.ShowRecordsCount && gridContext.GridRecordCountPosition == NccGridPagerPositionEnum.Right)
                {
                    divColRight.InnerHtml.AppendHtml(divRecordCount);
                }
                divColRight.InnerHtml.AppendHtml(div);
            }

            if (gridContext.ShowRecordsCount && string.IsNullOrEmpty(context.PagerRecordsCountContent))
            {
                var firstRecord = pageSize * (gridContext.PageNumber - 1) + 1;
                var lastRecord  = pageSize * (gridContext.PageNumber - 1) + pageSize;
                if (lastRecord > gridContext.TotalItems)
                {
                    lastRecord = gridContext.TotalItems;
                }

                divRecordCount.InnerHtml.AppendHtml(string.Format($"<span>{gridContext.GridRecordsTemplate}</span>", firstRecord, lastRecord, gridContext.TotalItems));
            }

            footerContainerDiv.InnerHtml.AppendHtml(divColLeft);
            footerContainerDiv.InnerHtml.AppendHtml(divColRight);

            return(footerContainerDiv);
        }