init: initial commit

This commit is contained in:
2025-11-22 16:55:24 +03:30
commit 4afb545253
194 changed files with 94247 additions and 0 deletions

370
.gitignore vendored Normal file
View File

@ -0,0 +1,370 @@
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Mono auto generated files
mono_crash.*
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Ww][Ii][Nn]32/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Oo]ut/
[Ll]og/
[Ll]ogs/
# Visual Studio 2015/2017 cache/options directory
.vs/
.idea/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# Visual Studio 2017 auto generated files
Generated\ Files/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUnit
*.VisualState.xml
TestResult.xml
nunit-*.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# Benchmark Results
BenchmarkDotNet.Artifacts/
# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/
# ASP.NET Scaffolding
ScaffoldingReadMe.txt
# StyleCop
StyleCopReport.xml
# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# Visual Studio Trace Files
*.e2e
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json
# Coverlet is a free, cross platform Code Coverage Tool
coverage*.json
coverage*.xml
coverage*.info
# Visual Studio code coverage results
*.coverage
*.coveragexml
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# NuGet Symbol Packages
*.snupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
*.appxbundle
*.appxupload
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs
# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak
# SQL Server files
*.mdf
*.ldf
*.ndf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
*- [Bb]ackup.rdl
*- [Bb]ackup ([0-9]).rdl
*- [Bb]ackup ([0-9][0-9]).rdl
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# CodeRush personal settings
.cr/personal
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config
# Tabs Studio
*.tss
# Telerik's JustMock configuration file
*.jmconfig
# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs
# OpenCover UI analysis results
OpenCover/
# Azure Stream Analytics local run output
ASALocalRun/
# MSBuild Binary and Structured Log
*.binlog
# NVidia Nsight GPU debugger configuration file
*.nvuser
# MFractors (Xamarin productivity tool) working folder
.mfractor/
# Local History for Visual Studio
.localhistory/
# BeatPulse healthcheck temp database
healthchecksdb
# Backup folder for Package Reference Convert tool in Visual Studio 2017
MigrationBackup/
# Ionide (cross platform F# VS Code tools) working folder
.ionide/
# Fody - auto-generated XML schema
FodyWeavers.xsd
/src/Presentation/Server/Database.db
/src/Presentation/Server/Database.db-shm
/src/Presentation/Server/Database.db-wal
/DocProject
/dist
/src/Presentation/Server/wwwroot/dist/

BIN
db/database.db Normal file

Binary file not shown.

BIN
db/database.db-shm Normal file

Binary file not shown.

0
db/database.db-wal Normal file
View File

View File

@ -0,0 +1,94 @@
using Application.Aggregates.Users.ViewModels;
using Domain.Aggregates.Users;
using Domain.Aggregates.Users.Data;
using Mapster;
using Resources.Messages;
namespace Application.Aggregates.Users;
public class UsersApplication
(IUserRepository userRepository)
{
public async Task<UserViewModel> CreateAsync(CreateUserViewModel viewModel)
{
var user = User.Create(
username: viewModel.Username,
password: viewModel.Password,
mobile: viewModel.Mobile);
if (viewModel.IsActive == true)
{
user.Activate();
}
await userRepository.AddAsync(user);
await userRepository.SaveChangesAsync();
return user.Adapt<UserViewModel>();
}
public async Task<List<UserViewModel>> GetUsers()
{
var users =
await userRepository.GetAllAsync();
return users.Adapt<List<UserViewModel>>();
}
public async Task<UserViewModel> GetAsync(Guid userId)
{
var user =
await userRepository.GetAsync(userId);
return user.Adapt<UserViewModel>();
}
public async Task<UserViewModel> UpdateAsync(UpdateUserViewModel updateViewModel)
{
var userForUpdate =
await userRepository.GetAsync(updateViewModel.Id);
if (userForUpdate == null || userForUpdate.Id == Guid.Empty)
{
var message =
string.Format(Errors.NotFound, Resources.DataDictionary.User);
throw new Exception(message);
}
userForUpdate.Update(
username: updateViewModel.Username,
password: updateViewModel.Password,
mobile: updateViewModel.Mobile);
if (updateViewModel.IsActive == true)
{
userForUpdate.Activate();
}
else
{
userForUpdate.Deactivate();
}
await userRepository.SaveChangesAsync();
return userForUpdate.Adapt<UserViewModel>();
}
public async Task DeleteAsync(Guid userId)
{
var userForUpdate =
await userRepository.GetAsync(userId);
if (userForUpdate == null || userForUpdate.Id == Guid.Empty)
{
var message =
string.Format(Errors.NotFound, Resources.DataDictionary.User);
throw new Exception(message);
}
userRepository.Remove(userForUpdate);
await userRepository.SaveChangesAsync();
}
}

View File

@ -0,0 +1,14 @@
namespace Application.Aggregates.Users.ViewModels;
public class CreateUserViewModel
{
public CreateUserViewModel()
{
}
public string Username { get; set; }
public string Password { get; set; }
public string Mobile { get; set; }
public bool IsActive { get; set; }
}

View File

@ -0,0 +1,11 @@
namespace Application.Aggregates.Users.ViewModels;
public class UpdateUserViewModel : CreateUserViewModel
{
public UpdateUserViewModel()
{
}
public Guid Id { get; set; }
}

View File

@ -0,0 +1,8 @@
namespace Application.Aggregates.Users.ViewModels;
public class UserViewModel : UpdateUserViewModel
{
public UserViewModel()
{
}
}

View File

@ -0,0 +1,18 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Mapster" Version="7.4.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\Persistence\Persistence\Persistence.csproj" />
<ProjectReference Include="..\Domain\Domain.csproj" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,6 @@
namespace Constants;
public class BasketConstants
{
public const string BASKET = "basketId";
}

View File

@ -0,0 +1,48 @@
namespace Constants;
public static class CommonRouting
{
static CommonRouting()
{
}
/// <summary>
/// Root Index
/// </summary>
public const string RootIndex = "/Index";
/// <summary>
/// Current Index
/// </summary>
public const string CurrentIndex = "Index";
/// <summary>
/// Error 400
/// </summary>
public const string BadRequest = "/Errors/Error400";
/// <summary>
/// Error 403
/// </summary>
public const string Forbidden = "/Errors/Error403";
/// <summary>
/// Error 404
/// </summary>
public const string NotFound = "/Errors/Error404";
/// <summary>
/// Error 500
/// </summary>
public const string InternalServerError = "/Errors/Error500";
/// <summary>
/// Login
/// </summary>
public const string Login = "/Account/Login";
/// <summary>
/// Logout
/// </summary>
public const string Logout = "/Account/Logout";
}

View File

@ -0,0 +1,9 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>

View File

@ -0,0 +1,17 @@
namespace Constants;
public static class FixedLength
{
static FixedLength()
{
}
public const int NationalCode = 10;
public const int CellPhoneNumberIran = 11;
/// <summary>
/// TODO
/// </summary>
public const int DatabasePassword = 44;
}

View File

@ -0,0 +1,57 @@
namespace Constants;
public static class Format
{
static Format()
{
}
//public const string Integer = "#,##0";
//public const string NullValue = "-----";
//public const string Time = "HH:mm:ss";
//public const string Date = "yyyy/MM/dd";
//public const string DateTime = "yyyy/MM/dd - HH:mm:ss";
public static string NullValue
{
get
{
//return null;
//return string.Empty;
return "-----";
}
}
public static string Integer
{
get
{
return "#,##0";
}
}
public static string Time
{
get
{
return "HH:mm:ss";
}
}
public static string Date
{
get
{
return "yyyy/MM/dd";
}
}
public static string DateTime
{
get
{
return $"{Date} - {Time}";
}
}
}

View File

@ -0,0 +1,69 @@
using System;
using System.Globalization;
namespace JalaliCalendar
{
public static class Jalali
{
private static readonly PersianCalendar persiancalendar = new PersianCalendar();
public static string ToPersianDate(this DateTime date)
{
return $"{persiancalendar.GetYear(date)}/{persiancalendar.GetMonth(date):00}/{persiancalendar.GetDayOfMonth(date):00}";
}
public static DateTime ToGregorianDate(string persianDate)
{
persianDate = ConvertToEnglishDigits(persianDate);
var parts = persianDate.Split('/');
if (parts.Length != 3)
throw new FormatException($"فرمت تاریخ اشتباه است. ورودی: {persianDate}. مثال صحیح: 1404/07/15");
if (!int.TryParse(parts[0], out int year) ||
!int.TryParse(parts[1], out int month) ||
!int.TryParse(parts[2], out int day))
{
throw new FormatException($"تاریخ نامعتبر: {persianDate}");
}
return persiancalendar.ToDateTime(year, month, day, 0, 0, 0, 0);
}
public static DateTime ToGregorianDate(DateTime persianDateTime)
{
var persianCalendar = new PersianCalendar();
int year = persianCalendar.GetYear(persianDateTime);
int month = persianCalendar.GetMonth(persianDateTime);
int day = persianCalendar.GetDayOfMonth(persianDateTime);
return persianCalendar.ToDateTime(year, month, day,
persianDateTime.Hour, persianDateTime.Minute, persianDateTime.Second, 0);
}
private static string ConvertToEnglishDigits(string input)
{
if (string.IsNullOrEmpty(input))
return input;
var result = input;
char[] persianDigits = { '۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹' };
char[] englishDigits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
for (int i = 0; i < 10; i++)
{
result = result.Replace(persianDigits[i], englishDigits[i]);
}
char[] arabicDigits = { '٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩' };
for (int i = 0; i < 10; i++)
{
result = result.Replace(arabicDigits[i], englishDigits[i]);
}
return result;
}
}
}

View File

@ -0,0 +1,21 @@
namespace Constants;
public static class Logger
{
static Logger()
{
}
public const string ErrorMessage = "Error Message: {Message}";
/// <summary>
/// Note: Below Code Generates Some Warning!
/// </summary>
//public static string ErrorMessage
//{
// get
// {
// return "Error Message: {Message}";
// }
//}
}

View File

@ -0,0 +1,35 @@
namespace Constants;
public static class MaxLength
{
static MaxLength()
{
}
public const int IP = 15;
public const int Name = 100;
public const int Title = 100;
public const int Prefix = 100;
public const int NativeName = 50;
public const int CultureName = 5;
public const int Link = 500;
public const int Path = 200;
public const int Icon = 100;
public const int Username = 20;
public const int Password = 20;
public const int LastName = 50;
public const int FirstName = 50;
public const int EmailAddress = 254;
public const int CellPhoneNumber = 11;
public const int MetaTitle = 70;
public const int MetaDescription = 155;
public const int CellPhoneNumberVerificationKey = 10;
}

View File

@ -0,0 +1,10 @@
namespace Constants;
public static class MaxValue
{
static MaxValue()
{
}
public const int Ordering = 100_000;
}

View File

@ -0,0 +1,11 @@
namespace Constants;
public static class MinLength
{
static MinLength()
{
}
public const int CellPhoneNumber = 13;
public const int CellPhoneNumberVerificationKey = 6;
}

View File

@ -0,0 +1,10 @@
namespace Constants;
public static class MinValue
{
static MinValue()
{
}
public const int Ordering = 1;
}

View File

@ -0,0 +1,35 @@
namespace Constants;
/// <summary>
/// https://regex101.com/
/// </summary>
public static class RegularExpression
{
static RegularExpression()
{
}
public const string NationalCode = @"^\d{10}$";
//public const string NationalCode = @"^\d{10,12}$";
public const string CellPhoneNumber = @"^09\d{9}$";
//public const string CellPhoneNumber = @"^076\d{7}"; // برای سوئد
// 0046762122002 : 13
// 00989121087461 : 14
/*public const string CellPhoneNumber = @"^00\d{11,12}$";*/ // برای سایت‌های چند ملیتی
public const string PostalCode = @"^\d{10}$";
public const string Username = @"^[a-zA-Z0-9_]{6,20}$";
public const string Password = @"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&#])[A-Za-z\d@$!%*?&#]{8,}$";
public const string AToZDigitsUnderline = @"^[a-zA-Z][a-zA-Z0-9_]*$";
public const string EmailAddress =
@"^[a-zA-Z0-9_.-]+@[a-zA-Z0-9_.-]+$";
public const string IP =
@"^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$";
public const string Url =
@"https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)";
}

View File

@ -0,0 +1,21 @@
namespace Constants;
/// <summary>
/// TODO: بعد از داینامیک کردن سیستم، باید حذف شود
/// </summary>
public static class Role
{
static Role()
{
}
public const string SimpleUser = nameof(SimpleUser);
public const string SpecialUser = nameof(SpecialUser);
public const string Supervisor = nameof(Supervisor);
public const string Administrator = nameof(Administrator);
public const string ApplicationOwner = nameof(ApplicationOwner);
public const string Programmer = nameof(Programmer);
}

View File

@ -0,0 +1,22 @@
namespace Constants;
public static class Storage
{
static Storage()
{
}
public const string SliderPrefix = "SLD";
public const string SliderPath = "SliderImages";
public const string ImagePrefix = "IMG";
public const string ImagePath = "ImageViews";
public const string ProductImagePrefix = "IMG";
public const string ProductImagesPath = "ProductImages";
public const string PosLogoPrefix = "IMG";
public const string PosImagePath = "PosImages";
}

View File

@ -0,0 +1,25 @@
namespace Constants;
public static class TagHelper
{
static TagHelper()
{
}
public const string Prefix = "ub-";
public const string Label = Prefix + "simple-label";
public const string Input = Prefix + "simple-input";
public const string CheckBox = Prefix + "simple-checkbox";
public const string TextArea = Prefix + "simple-textarea";
public const string FullInput = Prefix + "full-input";
public const string FullSelect = Prefix + "full-select";
public const string FullCheckBox = Prefix + "full-checkbox";
public const string FullTextArea = Prefix + "full-textarea";
public const string FullPasswordInput = Prefix + "full-password-input";
public const string ReadOnlyInput = Prefix + "readonly-input";
public const string ReadOnlyCheckBox = Prefix + "readonly-checkbox";
public const string ReadOnlyTextArea = Prefix + "readonly-textarea";
}

View File

@ -0,0 +1,44 @@
namespace Constants;
public static class ViewDataKeyName
{
static ViewDataKeyName()
{
}
//public const string PageTitle = "PageTitle";
//public static string PageTitle = "PageTitle";
public static string PageTitle
{
get
{
return "PageTitle";
}
}
public static string PageAuthor
{
get
{
return "PageAuthor";
}
}
public static string PageImageUrl
{
get
{
return "PageImageUrl";
}
}
public static string PageDescription
{
get
{
return "PageDescription";
}
}
}

View File

@ -0,0 +1,10 @@
namespace Domain.Aggregates.Users.Data;
public interface IUserRepository
{
Task AddAsync(User user);
Task<List<User>> GetAllAsync();
Task<User?> GetAsync(Guid userId);
void Remove(User user);
Task SaveChangesAsync();
}

View File

@ -0,0 +1,60 @@
using Domain.SeedWork;
using Framework.DataType;
using Resources.Messages;
namespace Domain.Aggregates.Users;
public class User : Entity
{
public User()
{
// FOR EF!
}
private User(string username, string password, string mobile)
{
Username = username;
Password = password;
Mobile = mobile;
}
public string Username { get; private set; }
public string Password { get; private set; }
public string Mobile { get; private set; }
public static User Create(string username, string password, string mobile)
{
if (!mobile.IsValidMobile())
{
var message =
string.Format(Errors.Invalid, Resources.DataDictionary.CellPhonenumber);
throw new InvalidDataException(message);
}
var user = new User(
username: username.Fix() ?? "",
password: password.Fix() ?? "",
mobile: mobile);
return user;
}
public void Update(string username, string password, string mobile)
{
if (!mobile.IsValidMobile())
{
var message =
string.Format(Errors.Invalid, Resources.DataDictionary.CellPhonenumber);
throw new InvalidDataException(message);
}
Username = username.Fix() ?? "";
Password = password.Fix() ?? "";
Mobile = mobile;
SetUpdateDateTime();
}
}

View File

@ -0,0 +1,14 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\..\Framework\Framework.DataType\Framework.DataType.csproj" />
<ProjectReference Include="..\Resources\Resources.csproj" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,59 @@
using System.ComponentModel.DataAnnotations.Schema;
namespace Domain.SeedWork;
public class Entity
{
public Entity()
{
Id = Guid.CreateVersion7();
SetInsertDateTime();
}
[DatabaseGenerated
(DatabaseGeneratedOption.None)]
public Guid Id { get; protected set; }
public long InsertDateTime { get; protected set; }
public long UpdateDateTime { get; protected set; }
public long? DeleteDateTime { get; protected set; }
public bool IsActive { get; protected set; }
public bool IsDeleted { get; protected set; }
public void SetInsertDateTime()
{
InsertDateTime =
DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
}
public void SetUpdateDateTime()
{
UpdateDateTime =
DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
}
public void SetDeleteDateTime()
{
DeleteDateTime =
DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
}
public void Activate()
{
IsActive = true;
}
public void Deactivate()
{
IsActive = false;
}
public void Delete()
{
IsDeleted = true;
SetDeleteDateTime();
}
}

View File

@ -0,0 +1,369 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Resources {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
public class ButtonCaptions {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal ButtonCaptions() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
public static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Resources.ButtonCaptions", typeof(ButtonCaptions).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
public static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Looks up a localized string similar to Actions.
/// </summary>
public static string Actions {
get {
return ResourceManager.GetString("Actions", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to addressmanagement.
/// </summary>
public static string AddressManagement {
get {
return ResourceManager.GetString("AddressManagement", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Back.
/// </summary>
public static string Back {
get {
return ResourceManager.GetString("Back", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Back to List.
/// </summary>
public static string BackToList {
get {
return ResourceManager.GetString("BackToList", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Cancel.
/// </summary>
public static string Cancel {
get {
return ResourceManager.GetString("Cancel", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Confirm Delete.
/// </summary>
public static string ConfirmDelete {
get {
return ResourceManager.GetString("ConfirmDelete", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Create.
/// </summary>
public static string Create {
get {
return ResourceManager.GetString("Create", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Create new {0}.
/// </summary>
public static string CreateNew {
get {
return ResourceManager.GetString("CreateNew", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Delete.
/// </summary>
public static string Delete {
get {
return ResourceManager.GetString("Delete", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Details.
/// </summary>
public static string Details {
get {
return ResourceManager.GetString("Details", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Edit.
/// </summary>
public static string Edit {
get {
return ResourceManager.GetString("Edit", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Export Excel.
/// </summary>
public static string ExportExcel {
get {
return ResourceManager.GetString("ExportExcel", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Forgot Password.
/// </summary>
public static string ForgotPassword {
get {
return ResourceManager.GetString("ForgotPassword", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Fotgot Username.
/// </summary>
public static string ForgotUsername {
get {
return ResourceManager.GetString("ForgotUsername", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Home.
/// </summary>
public static string Home {
get {
return ResourceManager.GetString("Home", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to List of.
/// </summary>
public static string ListOf {
get {
return ResourceManager.GetString("ListOf", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Login.
/// </summary>
public static string Login {
get {
return ResourceManager.GetString("Login", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Login with Google.
/// </summary>
public static string LoginWithGoogle {
get {
return ResourceManager.GetString("LoginWithGoogle", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Manage of.
/// </summary>
public static string ManageOf {
get {
return ResourceManager.GetString("ManageOf", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to More.
/// </summary>
public static string More {
get {
return ResourceManager.GetString("More", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Next.
/// </summary>
public static string Next {
get {
return ResourceManager.GetString("Next", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to No.
/// </summary>
public static string No {
get {
return ResourceManager.GetString("No", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to OK.
/// </summary>
public static string OK {
get {
return ResourceManager.GetString("OK", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to OR.
/// </summary>
public static string OR {
get {
return ResourceManager.GetString("OR", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Previous.
/// </summary>
public static string Previous {
get {
return ResourceManager.GetString("Previous", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Refresh.
/// </summary>
public static string Refresh {
get {
return ResourceManager.GetString("Refresh", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Register.
/// </summary>
public static string Register {
get {
return ResourceManager.GetString("Register", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Register rating and comment.
/// </summary>
public static string RegisterRatingAndComment {
get {
return ResourceManager.GetString("RegisterRatingAndComment", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Reset.
/// </summary>
public static string Reset {
get {
return ResourceManager.GetString("Reset", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Save.
/// </summary>
public static string Save {
get {
return ResourceManager.GetString("Save", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Send.
/// </summary>
public static string Send {
get {
return ResourceManager.GetString("Send", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Send Again Email Address Verification Key.
/// </summary>
public static string SendAgainEmailAddressVerificationKey {
get {
return ResourceManager.GetString("SendAgainEmailAddressVerificationKey", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Update.
/// </summary>
public static string Update {
get {
return ResourceManager.GetString("Update", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Update of.
/// </summary>
public static string UpdateOf {
get {
return ResourceManager.GetString("UpdateOf", resourceCulture);
}
}
}
}

View File

@ -0,0 +1,222 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Actions" xml:space="preserve">
<value>عملیات</value>
</data>
<data name="Back" xml:space="preserve">
<value>بازگشت</value>
</data>
<data name="BackToList" xml:space="preserve">
<value>بازگشت به فهرست</value>
</data>
<data name="Cancel" xml:space="preserve">
<value>منصرف شدم</value>
</data>
<data name="ConfirmDelete" xml:space="preserve">
<value>تایید حذف</value>
</data>
<data name="Create" xml:space="preserve">
<value>ایجاد</value>
</data>
<data name="CreateNew" xml:space="preserve">
<value>ایجاد {0} جدید</value>
</data>
<data name="Delete" xml:space="preserve">
<value>حذف</value>
</data>
<data name="Details" xml:space="preserve">
<value>جزئیات</value>
</data>
<data name="Edit" xml:space="preserve">
<value>ویرایش</value>
</data>
<data name="ExportExcel" xml:space="preserve">
<value>خروجی اکسل</value>
</data>
<data name="ForgotPassword" xml:space="preserve">
<value>فراموشی گذرواژه</value>
</data>
<data name="ForgotUsername" xml:space="preserve">
<value>فراموشی شناسه‌کاربری</value>
</data>
<data name="Home" xml:space="preserve">
<value>خانه</value>
</data>
<data name="ListOf" xml:space="preserve">
<value>فهرست</value>
</data>
<data name="Login" xml:space="preserve">
<value>ورود</value>
</data>
<data name="LoginWithGoogle" xml:space="preserve">
<value>ورود از طریق گوگل</value>
</data>
<data name="ManageOf" xml:space="preserve">
<value>مدیریت</value>
</data>
<data name="More" xml:space="preserve">
<value>بیشتر</value>
</data>
<data name="Next" xml:space="preserve">
<value>بعدی</value>
</data>
<data name="No" xml:space="preserve">
<value>خیر</value>
</data>
<data name="OK" xml:space="preserve">
<value>تایید</value>
</data>
<data name="OR" xml:space="preserve">
<value>یا</value>
</data>
<data name="Previous" xml:space="preserve">
<value>قبلی</value>
</data>
<data name="Refresh" xml:space="preserve">
<value>بازیابی</value>
</data>
<data name="Register" xml:space="preserve">
<value>ثبت‌نام</value>
</data>
<data name="Reset" xml:space="preserve">
<value>حالت اولیه</value>
</data>
<data name="Save" xml:space="preserve">
<value>ذخیره</value>
</data>
<data name="Send" xml:space="preserve">
<value>ارسال</value>
</data>
<data name="SendAgainEmailAddressVerificationKey" xml:space="preserve">
<value>ارسال مجدد کد تایید نشانی پست الکترونیکی</value>
</data>
<data name="Update" xml:space="preserve">
<value>ویرایش</value>
</data>
<data name="UpdateOf" xml:space="preserve">
<value>ویرایش</value>
</data>
<data name="AddressManagement" xml:space="preserve">
<value>مدیریت آدرس ها</value>
</data>
<data name="RegisterRatingAndComment" xml:space="preserve">
<value>ثبت امتیاز و دیدگاه</value>
</data>
</root>

View File

@ -0,0 +1,222 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Actions" xml:space="preserve">
<value>Actions</value>
</data>
<data name="Back" xml:space="preserve">
<value>Back</value>
</data>
<data name="BackToList" xml:space="preserve">
<value>Back to List</value>
</data>
<data name="Cancel" xml:space="preserve">
<value>Cancel</value>
</data>
<data name="ConfirmDelete" xml:space="preserve">
<value>Confirm Delete</value>
</data>
<data name="Create" xml:space="preserve">
<value>Create</value>
</data>
<data name="CreateNew" xml:space="preserve">
<value>Create new {0}</value>
</data>
<data name="Delete" xml:space="preserve">
<value>Delete</value>
</data>
<data name="Details" xml:space="preserve">
<value>Details</value>
</data>
<data name="Edit" xml:space="preserve">
<value>Edit</value>
</data>
<data name="ExportExcel" xml:space="preserve">
<value>Export Excel</value>
</data>
<data name="ForgotPassword" xml:space="preserve">
<value>Forgot Password</value>
</data>
<data name="ForgotUsername" xml:space="preserve">
<value>Fotgot Username</value>
</data>
<data name="Home" xml:space="preserve">
<value>Home</value>
</data>
<data name="ListOf" xml:space="preserve">
<value>List of</value>
</data>
<data name="Login" xml:space="preserve">
<value>Login</value>
</data>
<data name="LoginWithGoogle" xml:space="preserve">
<value>Login with Google</value>
</data>
<data name="ManageOf" xml:space="preserve">
<value>Manage of</value>
</data>
<data name="More" xml:space="preserve">
<value>More</value>
</data>
<data name="Next" xml:space="preserve">
<value>Next</value>
</data>
<data name="No" xml:space="preserve">
<value>No</value>
</data>
<data name="OK" xml:space="preserve">
<value>OK</value>
</data>
<data name="OR" xml:space="preserve">
<value>OR</value>
</data>
<data name="Previous" xml:space="preserve">
<value>Previous</value>
</data>
<data name="Refresh" xml:space="preserve">
<value>Refresh</value>
</data>
<data name="Register" xml:space="preserve">
<value>Register</value>
</data>
<data name="Reset" xml:space="preserve">
<value>Reset</value>
</data>
<data name="Save" xml:space="preserve">
<value>Save</value>
</data>
<data name="Send" xml:space="preserve">
<value>Send</value>
</data>
<data name="SendAgainEmailAddressVerificationKey" xml:space="preserve">
<value>Send Again Email Address Verification Key</value>
</data>
<data name="Update" xml:space="preserve">
<value>Update</value>
</data>
<data name="UpdateOf" xml:space="preserve">
<value>Update of</value>
</data>
<data name="AddressManagement" xml:space="preserve">
<value>addressmanagement</value>
</data>
<data name="RegisterRatingAndComment" xml:space="preserve">
<value>Register rating and comment</value>
</data>
</root>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,615 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="ActivePriceListId" xml:space="preserve">
<value>شناسه لیست ‌قیمت فعال</value>
</data>
<data name="BaseUnit" xml:space="preserve">
<value>واحد اصلی</value>
</data>
<data name="BasicInformation" xml:space="preserve">
<value>اطلاعات پایه</value>
</data>
<data name="CategoryId" xml:space="preserve">
<value>شناسه دسته‌بندی</value>
</data>
<data name="CellPhonenumber" xml:space="preserve">
<value>شماره همراه</value>
</data>
<data name="CreateOf" xml:space="preserve">
<value>ایجاد</value>
</data>
<data name="DeleteOf" xml:space="preserve">
<value>حذف </value>
</data>
<data name="DownloadUrl" xml:space="preserve">
<value>لینک دانلود</value>
</data>
<data name="FullDescription" xml:space="preserve">
<value>توضیحات</value>
</data>
<data name="Id" xml:space="preserve">
<value>شناسه</value>
</data>
<data name="IsPinned" xml:space="preserve">
<value>سنجاق شده</value>
</data>
<data name="Name" xml:space="preserve">
<value>نام</value>
</data>
<data name="Order" xml:space="preserve">
<value>تراز</value>
</data>
<data name="Parent" xml:space="preserve">
<value>والد</value>
</data>
<data name="Price" xml:space="preserve">
<value>قیمت</value>
</data>
<data name="Product" xml:space="preserve">
<value>کالا</value>
</data>
<data name="Features" xml:space="preserve">
<value>ویژگی‌ها</value>
</data>
<data name="ProductId" xml:space="preserve">
<value>شناسه کالا</value>
</data>
<data name="Products" xml:space="preserve">
<value>کالا ها</value>
</data>
<data name="ProductType" xml:space="preserve">
<value>نوع محصول</value>
</data>
<data name="ShortDescription" xml:space="preserve">
<value>خلاصه توضیحات</value>
</data>
<data name="SKU" xml:space="preserve">
<value>کد کالا</value>
</data>
<data name="StoreId" xml:space="preserve">
<value>شناسه فروشگاه</value>
</data>
<data name="Title" xml:space="preserve">
<value>عنوان</value>
</data>
<data name="Unit" xml:space="preserve">
<value>واحد</value>
</data>
<data name="UnitId" xml:space="preserve">
<value>شناسه واحد</value>
</data>
<data name="UnitRatio" xml:space="preserve">
<value>ضریب واحد</value>
</data>
<data name="Units" xml:space="preserve">
<value>واحد ها</value>
</data>
<data name="UpdateOf" xml:space="preserve">
<value>ویرایش </value>
</data>
<data name="Value" xml:space="preserve">
<value>مقدار</value>
</data>
<data name="ProductFeatures" xml:space="preserve">
<value>ویژگی های محصول</value>
</data>
<data name="ProductFeature" xml:space="preserve">
<value>ویژگی محصول</value>
</data>
<data name="FeaturesOf" xml:space="preserve">
<value>ویژگی های</value>
</data>
<data name="Family" xml:space="preserve">
<value>نام خانوادگی</value>
</data>
<data name="NationalCode" xml:space="preserve">
<value>کد ملی</value>
</data>
<data name="Mobile" xml:space="preserve">
<value>شماره همراه</value>
</data>
<data name="Email" xml:space="preserve">
<value>ایمیل</value>
</data>
<data name="Password" xml:space="preserve">
<value>رمز عبور</value>
</data>
<data name="Customers" xml:space="preserve">
<value>مشتری ها</value>
</data>
<data name="CustomersInformation" xml:space="preserve">
<value>اطلاعات مشتری ها</value>
</data>
<data name="ConfirmPassword" xml:space="preserve">
<value>تایید رمز</value>
</data>
<data name="Province" xml:space="preserve">
<value>استان</value>
</data>
<data name="City" xml:space="preserve">
<value>شهر</value>
</data>
<data name="Address" xml:space="preserve">
<value>آدرس</value>
</data>
<data name="PostalCode" xml:space="preserve">
<value>کد پستی</value>
</data>
<data name="Shippingaddress" xml:space="preserve">
<value>آدرس حمل و نقل</value>
</data>
<data name="AddressInformation" xml:space="preserve">
<value>اطلاعات آدرس ها</value>
</data>
<data name="AddressManagement" xml:space="preserve">
<value>مدیریت آدرس ها</value>
</data>
<data name="IconClass" xml:space="preserve">
<value>کلاس آیکون</value>
</data>
<data name="SubCategories" xml:space="preserve">
<value>زیر دسته‌بندی ها</value>
</data>
<data name="Categories" xml:space="preserve">
<value>دسته‌بندی ها</value>
</data>
<data name="Category" xml:space="preserve">
<value>دسته‌بندی</value>
</data>
<data name="SubCategoriesOf" xml:space="preserve">
<value>زیر دسته‌بندی های</value>
</data>
<data name="SubCategoriesCount" xml:space="preserve">
<value>تعداد زیر دسته‌بندی ها</value>
</data>
<data name="AdminPanel" xml:space="preserve">
<value>پنل مدیریت</value>
</data>
<data name="POS" xml:space="preserve">
<value>فروشگاهی</value>
</data>
<data name="Logo" xml:space="preserve">
<value>لوگو</value>
</data>
<data name="IsActive" xml:space="preserve">
<value>فعال</value>
</data>
<data name="Store" xml:space="preserve">
<value>فروشگاه</value>
</data>
<data name="culture" xml:space="preserve">
<value>زبان</value>
</data>
<data name="Stores" xml:space="preserve">
<value>فروشگاه ها</value>
</data>
<data name="Dashboard" xml:space="preserve">
<value>داشبورد</value>
</data>
<data name="Picture" xml:space="preserve">
<value>تصویر</value>
</data>
<data name="ProductImage" xml:space="preserve">
<value>عکس کالا</value>
</data>
<data name="Pictures" xml:space="preserve">
<value>عکس ها</value>
</data>
<data name="PicturesOf" xml:space="preserve">
<value>عکس های</value>
</data>
<data name="PriceLists" xml:space="preserve">
<value>لیست قیمت ها</value>
</data>
<data name="PriceListsOf" xml:space="preserve">
<value>لیست قیمت های</value>
</data>
<data name="Users" xml:space="preserve">
<value>کاربرها</value>
</data>
<data name="Sellers" xml:space="preserve">
<value>فروشنده ها</value>
</data>
<data name="User" xml:space="preserve">
<value>کاربر</value>
</data>
<data name="UserName" xml:space="preserve">
<value>نام کاربری</value>
</data>
<data name="EmailOrMobile" xml:space="preserve">
<value>ایمیل یا شماره همراه</value>
</data>
<data name="LogIn" xml:space="preserve">
<value>ورود</value>
</data>
<data name="Register" xml:space="preserve">
<value>ثبت نام</value>
</data>
<data name="Role" xml:space="preserve">
<value>نقش</value>
</data>
<data name="Customer" xml:space="preserve">
<value>مشتری</value>
</data>
<data name="Branch" xml:space="preserve">
<value>شعبه</value>
</data>
<data name="Branches" xml:space="preserve">
<value>شعبه ها</value>
</data>
<data name="NothingFound" xml:space="preserve">
<value>هیج موردی پیدا نشد...</value>
</data>
<data name="Searching" xml:space="preserve">
<value>در حال جستجو...</value>
</data>
<data name="ProductSearch" xml:space="preserve">
<value>جستجو در کالا ها</value>
</data>
<data name="CustomerSearch" xml:space="preserve">
<value>جستجوی مشتری...</value>
</data>
<data name="CustomerInformation" xml:space="preserve">
<value>اطلاعات مشتری</value>
</data>
<data name="CheckoutCounters" xml:space="preserve">
<value>صندوقدار ها</value>
</data>
<data name="Discount" xml:space="preserve">
<value>تخفیف</value>
</data>
<data name="DiscountCode" xml:space="preserve">
<value>کد تخفیف</value>
</data>
<data name="InsertDateTime" xml:space="preserve">
<value>زمان درج</value>
</data>
<data name="InsertedBy" xml:space="preserve">
<value>ایجاد شده توسط</value>
</data>
<data name="OwnerId" xml:space="preserve">
<value>کد مالک</value>
</data>
<data name="UpdateDateTime" xml:space="preserve">
<value>زمان ویرایش</value>
</data>
<data name="UpdatedBy" xml:space="preserve">
<value>ویرایش شده توسط</value>
</data>
<data name="DiscountCodes" xml:space="preserve">
<value>کد های تخفیف</value>
</data>
<data name="Slug" xml:space="preserve">
<value>Slug</value>
</data>
<data name="Settings" xml:space="preserve">
<value>تنظیمات</value>
</data>
<data name="SiteSetting" xml:space="preserve">
<value>تنظیمات سایت</value>
</data>
<data name="Catalog" xml:space="preserve">
<value>کاتالوگ</value>
</data>
<data name="Basket" xml:space="preserve">
<value>سبد خرید</value>
</data>
<data name="Amount" xml:space="preserve">
<value>هزینه</value>
</data>
<data name="DiscountType" xml:space="preserve">
<value>نوع تخفیف</value>
</data>
<data name="End" xml:space="preserve">
<value>پایان</value>
</data>
<data name="Maximum" xml:space="preserve">
<value>حداکثر</value>
</data>
<data name="Minimum" xml:space="preserve">
<value>حداقل</value>
</data>
<data name="Start" xml:space="preserve">
<value>شروع</value>
</data>
<data name="Type" xml:space="preserve">
<value>نوع</value>
</data>
<data name="DiscountFixed" xml:space="preserve">
<value>تخفیف مبلغی</value>
</data>
<data name="DiscountPercentage" xml:space="preserve">
<value>تخفیف درصدی</value>
</data>
<data name="Actions" xml:space="preserve">
<value>عملیات</value>
</data>
<data name="PriceList" xml:space="preserve">
<value>لیست قیمت</value>
</data>
<data name="Addto" xml:space="preserve">
<value>افزودن به</value>
</data>
<data name="OtpCode" xml:space="preserve">
<value>کد</value>
</data>
<data name="Quantity" xml:space="preserve">
<value>تعداد</value>
</data>
<data name="UnitPrice" xml:space="preserve">
<value>قیمت واحد</value>
</data>
<data name="TotalPrice" xml:space="preserve">
<value>قیمت کل</value>
</data>
<data name="SubTotal" xml:space="preserve">
<value>جمع کل</value>
</data>
<data name="TotalDiscount" xml:space="preserve">
<value>تخفیف کل</value>
</data>
<data name="FinalPrice" xml:space="preserve">
<value>قیمت نهایی</value>
</data>
<data name="Text" xml:space="preserve">
<value>متن</value>
</data>
<data name="Comment" xml:space="preserve">
<value>نظرات</value>
</data>
<data name="FullName" xml:space="preserve">
<value>نام و نام خانوادگی</value>
</data>
<data name="NotRegistered" xml:space="preserve">
<value>ثبت نشده</value>
</data>
<data name="FirstName" xml:space="preserve">
<value>نام</value>
</data>
<data name="LastName" xml:space="preserve">
<value>نام خانوادگی</value>
</data>
<data name="MyAddress" xml:space="preserve">
<value>آدرس های من</value>
</data>
<data name="LogoutOfAccount" xml:space="preserve">
<value>خروج از حساب کاربری</value>
</data>
<data name="AccountInformation" xml:space="preserve">
<value>اطلاعات حساب کاربری</value>
</data>
<data name="Attribute" xml:space="preserve">
<value>ویژگی</value>
</data>
<data name="AttributeValue" xml:space="preserve">
<value>سایر ویژگی ها</value>
</data>
<data name="PriceAdjustment" xml:space="preserve">
<value>تنظیم قیمت</value>
</data>
<data name="WeightAdjustment" xml:space="preserve">
<value>تنظیم وزن</value>
</data>
<data name="IsPreSelected" xml:space="preserve">
<value>تنظیم پیش فرض</value>
</data>
<data name="HomeView" xml:space="preserve">
<value>آلبوم</value>
</data>
<data name="HomeViews" xml:space="preserve">
<value>آلبوم ها</value>
</data>
<data name="ProductView" xml:space="preserve">
<value>آلبوم کالا</value>
</data>
<data name="ImageView" xml:space="preserve">
<value>آلبوم عکس</value>
</data>
<data name="Interval" xml:space="preserve">
<value>فاصله زمانی</value>
</data>
<data name="NavigationUrl" xml:space="preserve">
<value>لینک</value>
</data>
<data name="SliderItems" xml:space="preserve">
<value>اسلاید ها</value>
</data>
<data name="SliderView" xml:space="preserve">
<value>آلبوم اسلاید</value>
</data>
<data name="Items" xml:space="preserve">
<value>آیتم‌ها</value>
</data>
<data name="SliderItem" xml:space="preserve">
<value>اسلاید</value>
</data>
<data name="Column" xml:space="preserve">
<value>اندازه در صفحه</value>
</data>
<data name="ImageItem" xml:space="preserve">
<value>عکس</value>
</data>
<data name="ImageItems" xml:space="preserve">
<value>عکس‌ها</value>
</data>
<data name="ProductItem" xml:space="preserve">
<value>کالا</value>
</data>
<data name="ProductItems" xml:space="preserve">
<value>کالاها</value>
</data>
<data name="Orders" xml:space="preserve">
<value>سفارشات</value>
</data>
<data name="FullScreen" xml:space="preserve">
<value>کل صفحه</value>
</data>
<data name="SplitScreen" xml:space="preserve">
<value>نصف صفحه</value>
</data>
<data name="Cms" xml:space="preserve">
<value>مدیریت محتوا</value>
</data>
<data name="PublicCustomer" xml:space="preserve">
<value>مشتری عمومی</value>
</data>
<data name="Description" xml:space="preserve">
<value>توضیحات</value>
</data>
<data name="LogoURL" xml:space="preserve">
<value>آدرس لوگو</value>
</data>
<data name="PhoneNumber" xml:space="preserve">
<value>شماره همراه</value>
</data>
<data name="PosSetting" xml:space="preserve">
<value>تنظیمات پایانه فروش</value>
</data>
<data name="AccessToken" xml:space="preserve">
<value>توکن دسترسی</value>
</data>
<data name="Gateway" xml:space="preserve">
<value>درگاه</value>
</data>
<data name="Country" xml:space="preserve">
<value>کشور</value>
</data>
<data name="TerminalId" xml:space="preserve">
<value>شماره ترمینال</value>
</data>
<data name="Favorites" xml:space="preserve">
<value>علاقه مندی ها</value>
</data>
<data name="ourproducts" xml:space="preserve">
<value>محصولات</value>
</data>
<data name="salesmanagement" xml:space="preserve">
<value>مدیریت فروش</value>
</data>
<data name="Dark" xml:space="preserve">
<value>تاریک</value>
</data>
<data name="Light" xml:space="preserve">
<value>روشن</value>
</data>
<data name="Invoicenumber" xml:space="preserve">
<value>شماره فاکتور</value>
</data>
</root>

View File

@ -0,0 +1,615 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="ActivePriceListId" xml:space="preserve">
<value>Active Price List Id</value>
</data>
<data name="BaseUnit" xml:space="preserve">
<value>Base Unit</value>
</data>
<data name="BasicInformation" xml:space="preserve">
<value>Basic Information</value>
</data>
<data name="CategoryId" xml:space="preserve">
<value>Category Id</value>
</data>
<data name="CellPhonenumber" xml:space="preserve">
<value>CellPhoneNumber</value>
</data>
<data name="CreateOf" xml:space="preserve">
<value>Create Of</value>
</data>
<data name="DeleteOf" xml:space="preserve">
<value>Delete Of</value>
</data>
<data name="DownloadUrl" xml:space="preserve">
<value>Download Url</value>
</data>
<data name="FullDescription" xml:space="preserve">
<value>Full Description</value>
</data>
<data name="Id" xml:space="preserve">
<value>Id</value>
</data>
<data name="IsPinned" xml:space="preserve">
<value>Is Pinned</value>
</data>
<data name="Name" xml:space="preserve">
<value>First Name</value>
</data>
<data name="Order" xml:space="preserve">
<value>Order</value>
</data>
<data name="Parent" xml:space="preserve">
<value>Parent</value>
</data>
<data name="Price" xml:space="preserve">
<value>Price</value>
</data>
<data name="Product" xml:space="preserve">
<value>Product</value>
</data>
<data name="Features" xml:space="preserve">
<value>Features</value>
</data>
<data name="ProductId" xml:space="preserve">
<value>Product Id</value>
</data>
<data name="Products" xml:space="preserve">
<value>Products</value>
</data>
<data name="ProductType" xml:space="preserve">
<value>Product Type</value>
</data>
<data name="ShortDescription" xml:space="preserve">
<value>Short Description</value>
</data>
<data name="SKU" xml:space="preserve">
<value>SKU</value>
</data>
<data name="StoreId" xml:space="preserve">
<value>Store Id</value>
</data>
<data name="Title" xml:space="preserve">
<value>Title</value>
</data>
<data name="Unit" xml:space="preserve">
<value>Unit</value>
</data>
<data name="UnitId" xml:space="preserve">
<value>Unit Id</value>
</data>
<data name="UnitRatio" xml:space="preserve">
<value>Unit Ratio </value>
</data>
<data name="Units" xml:space="preserve">
<value>Units</value>
</data>
<data name="UpdateOf" xml:space="preserve">
<value>Update Of</value>
</data>
<data name="Value" xml:space="preserve">
<value>Value</value>
</data>
<data name="ProductFeatures" xml:space="preserve">
<value>Product Features</value>
</data>
<data name="ProductFeature" xml:space="preserve">
<value>Product Feature</value>
</data>
<data name="FeaturesOf" xml:space="preserve">
<value>Features of</value>
</data>
<data name="Family" xml:space="preserve">
<value>Last Name</value>
</data>
<data name="NationalCode" xml:space="preserve">
<value>National Code</value>
</data>
<data name="Mobile" xml:space="preserve">
<value>Mobile</value>
</data>
<data name="Email" xml:space="preserve">
<value>Email</value>
</data>
<data name="Password" xml:space="preserve">
<value>Password</value>
</data>
<data name="Customers" xml:space="preserve">
<value>Customers</value>
</data>
<data name="CustomersInformation" xml:space="preserve">
<value>Customer Information</value>
</data>
<data name="ConfirmPassword" xml:space="preserve">
<value>confirm password</value>
</data>
<data name="Province" xml:space="preserve">
<value>province</value>
</data>
<data name="City" xml:space="preserve">
<value>city</value>
</data>
<data name="Address" xml:space="preserve">
<value>address</value>
</data>
<data name="PostalCode" xml:space="preserve">
<value>postalCode</value>
</data>
<data name="Shippingaddress" xml:space="preserve">
<value>shipping address</value>
</data>
<data name="AddressInformation" xml:space="preserve">
<value>addressInformation</value>
</data>
<data name="AddressManagement" xml:space="preserve">
<value>Address management</value>
</data>
<data name="IconClass" xml:space="preserve">
<value>Icon Class</value>
</data>
<data name="SubCategories" xml:space="preserve">
<value>Sub Categories</value>
</data>
<data name="Categories" xml:space="preserve">
<value>Categories</value>
</data>
<data name="Category" xml:space="preserve">
<value>Category</value>
</data>
<data name="SubCategoriesOf" xml:space="preserve">
<value>Sub Categories of</value>
</data>
<data name="SubCategoriesCount" xml:space="preserve">
<value>Sub Categories Count</value>
</data>
<data name="AdminPanel" xml:space="preserve">
<value>Admin Panel</value>
</data>
<data name="POS" xml:space="preserve">
<value>POS</value>
</data>
<data name="Logo" xml:space="preserve">
<value>Logo</value>
</data>
<data name="IsActive" xml:space="preserve">
<value>Active</value>
</data>
<data name="Store" xml:space="preserve">
<value>Store</value>
</data>
<data name="culture" xml:space="preserve">
<value>Culture</value>
</data>
<data name="Stores" xml:space="preserve">
<value>Stores</value>
</data>
<data name="Dashboard" xml:space="preserve">
<value>Dashboard</value>
</data>
<data name="Picture" xml:space="preserve">
<value>Picture</value>
</data>
<data name="ProductImage" xml:space="preserve">
<value>ProductImage</value>
</data>
<data name="Pictures" xml:space="preserve">
<value>Pictures</value>
</data>
<data name="PicturesOf" xml:space="preserve">
<value>PicturesOf</value>
</data>
<data name="PriceLists" xml:space="preserve">
<value>PriceLists</value>
</data>
<data name="PriceListsOf" xml:space="preserve">
<value>PriceListsOf</value>
</data>
<data name="Users" xml:space="preserve">
<value>Users</value>
</data>
<data name="Sellers" xml:space="preserve">
<value>Sellers</value>
</data>
<data name="User" xml:space="preserve">
<value>User</value>
</data>
<data name="UserName" xml:space="preserve">
<value>Username</value>
</data>
<data name="EmailOrMobile" xml:space="preserve">
<value>Email Or Mobile</value>
</data>
<data name="LogIn" xml:space="preserve">
<value>LogIn</value>
</data>
<data name="Register" xml:space="preserve">
<value>Register</value>
</data>
<data name="Role" xml:space="preserve">
<value>Role</value>
</data>
<data name="Customer" xml:space="preserve">
<value>Customer</value>
</data>
<data name="Branch" xml:space="preserve">
<value>branch</value>
</data>
<data name="Branches" xml:space="preserve">
<value>branches</value>
</data>
<data name="NothingFound" xml:space="preserve">
<value>Nothing Found</value>
</data>
<data name="Searching" xml:space="preserve">
<value>Searching</value>
</data>
<data name="ProductSearch" xml:space="preserve">
<value>Search In Products ...</value>
</data>
<data name="CustomerSearch" xml:space="preserve">
<value>Customer Search...</value>
</data>
<data name="CustomerInformation" xml:space="preserve">
<value>Customer Information</value>
</data>
<data name="CheckoutCounters" xml:space="preserve">
<value>Checkout Counters</value>
</data>
<data name="Discount" xml:space="preserve">
<value>Discount</value>
</data>
<data name="DiscountCode" xml:space="preserve">
<value>DiscountCode</value>
</data>
<data name="InsertDateTime" xml:space="preserve">
<value>InsertDateTime</value>
</data>
<data name="InsertedBy" xml:space="preserve">
<value>InsertedBy</value>
</data>
<data name="OwnerId" xml:space="preserve">
<value>OwnerId</value>
</data>
<data name="UpdateDateTime" xml:space="preserve">
<value>UpdateDateTime</value>
</data>
<data name="UpdatedBy" xml:space="preserve">
<value>UpdatedBy</value>
</data>
<data name="DiscountCodes" xml:space="preserve">
<value>DiscountCodes</value>
</data>
<data name="Slug" xml:space="preserve">
<value>Slug</value>
</data>
<data name="Settings" xml:space="preserve">
<value>Settings</value>
</data>
<data name="SiteSetting" xml:space="preserve">
<value>Site Setting</value>
</data>
<data name="Catalog" xml:space="preserve">
<value>Catalog</value>
</data>
<data name="Basket" xml:space="preserve">
<value>Basket</value>
</data>
<data name="Amount" xml:space="preserve">
<value>Amount</value>
</data>
<data name="DiscountType" xml:space="preserve">
<value>Discount Type</value>
</data>
<data name="End" xml:space="preserve">
<value>End</value>
</data>
<data name="Maximum" xml:space="preserve">
<value>Maximum</value>
</data>
<data name="Minimum" xml:space="preserve">
<value>Minimum</value>
</data>
<data name="Start" xml:space="preserve">
<value>Start</value>
</data>
<data name="Type" xml:space="preserve">
<value>Type</value>
</data>
<data name="DiscountFixed" xml:space="preserve">
<value>Discount Fixed</value>
</data>
<data name="DiscountPercentage" xml:space="preserve">
<value>Discount Percentage</value>
</data>
<data name="Actions" xml:space="preserve">
<value>Actions</value>
</data>
<data name="PriceList" xml:space="preserve">
<value>PriceList</value>
</data>
<data name="Addto" xml:space="preserve">
<value>Add to</value>
</data>
<data name="OtpCode" xml:space="preserve">
<value>Code</value>
</data>
<data name="Quantity" xml:space="preserve">
<value>Quantity</value>
</data>
<data name="UnitPrice" xml:space="preserve">
<value>Unit Price</value>
</data>
<data name="TotalPrice" xml:space="preserve">
<value>Total Price</value>
</data>
<data name="SubTotal" xml:space="preserve">
<value>Sub Total</value>
</data>
<data name="TotalDiscount" xml:space="preserve">
<value>Total Discount</value>
</data>
<data name="FinalPrice" xml:space="preserve">
<value>Final Price</value>
</data>
<data name="Text" xml:space="preserve">
<value>text</value>
</data>
<data name="Comment" xml:space="preserve">
<value>comment</value>
</data>
<data name="FullName" xml:space="preserve">
<value>FullName</value>
</data>
<data name="NotRegistered" xml:space="preserve">
<value>Not Registered</value>
</data>
<data name="FirstName" xml:space="preserve">
<value>First Name</value>
</data>
<data name="LastName" xml:space="preserve">
<value>LastName</value>
</data>
<data name="MyAddress" xml:space="preserve">
<value>My Address</value>
</data>
<data name="LogoutOfAccount" xml:space="preserve">
<value>Logout of account</value>
</data>
<data name="AccountInformation" xml:space="preserve">
<value>AccountInformation</value>
</data>
<data name="Attribute" xml:space="preserve">
<value>attribute</value>
</data>
<data name="AttributeValue" xml:space="preserve">
<value>attribute value</value>
</data>
<data name="PriceAdjustment" xml:space="preserve">
<value>price adjustment</value>
</data>
<data name="WeightAdjustment" xml:space="preserve">
<value>weight adjustment</value>
</data>
<data name="IsPreSelected" xml:space="preserve">
<value>is pre selected</value>
</data>
<data name="HomeView" xml:space="preserve">
<value>Home View</value>
</data>
<data name="HomeViews" xml:space="preserve">
<value>Home Views</value>
</data>
<data name="ProductView" xml:space="preserve">
<value>Product View</value>
</data>
<data name="ImageView" xml:space="preserve">
<value>Image View</value>
</data>
<data name="Interval" xml:space="preserve">
<value>Interval</value>
</data>
<data name="NavigationUrl" xml:space="preserve">
<value>Navigation URL</value>
</data>
<data name="SliderItems" xml:space="preserve">
<value>Slider Items</value>
</data>
<data name="SliderView" xml:space="preserve">
<value>Slider View</value>
</data>
<data name="Items" xml:space="preserve">
<value>Items</value>
</data>
<data name="SliderItem" xml:space="preserve">
<value>Slider Item</value>
</data>
<data name="Column" xml:space="preserve">
<value>column</value>
</data>
<data name="ImageItem" xml:space="preserve">
<value>image item</value>
</data>
<data name="ImageItems" xml:space="preserve">
<value>image items</value>
</data>
<data name="ProductItem" xml:space="preserve">
<value>product item</value>
</data>
<data name="ProductItems" xml:space="preserve">
<value>product items</value>
</data>
<data name="Orders" xml:space="preserve">
<value>orders</value>
</data>
<data name="FullScreen" xml:space="preserve">
<value>Full Screen</value>
</data>
<data name="SplitScreen" xml:space="preserve">
<value>Split Screen</value>
</data>
<data name="Cms" xml:space="preserve">
<value>Cms</value>
</data>
<data name="PublicCustomer" xml:space="preserve">
<value>PublicCustomer</value>
</data>
<data name="Description" xml:space="preserve">
<value>Description</value>
</data>
<data name="LogoURL" xml:space="preserve">
<value>LogoURL</value>
</data>
<data name="PhoneNumber" xml:space="preserve">
<value>PhoneNumber</value>
</data>
<data name="PosSetting" xml:space="preserve">
<value>Pos Setting</value>
</data>
<data name="AccessToken" xml:space="preserve">
<value>accestoken</value>
</data>
<data name="Gateway" xml:space="preserve">
<value>gateway</value>
</data>
<data name="Country" xml:space="preserve">
<value>country</value>
</data>
<data name="TerminalId" xml:space="preserve">
<value>terminal id</value>
</data>
<data name="Favorites" xml:space="preserve">
<value>Favorites</value>
</data>
<data name="ourproducts" xml:space="preserve">
<value>ourproducts</value>
</data>
<data name="salesmanagement" xml:space="preserve">
<value>salesmanagement</value>
</data>
<data name="Dark" xml:space="preserve">
<value>Dark</value>
</data>
<data name="Light" xml:space="preserve">
<value>Light</value>
</data>
<data name="Invoicenumber" xml:space="preserve">
<value>Invoicenumber</value>
</data>
</root>

View File

@ -0,0 +1,351 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Resources.Messages {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
public class Errors {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Errors() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
public static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Resources.Messages.Errors", typeof(Errors).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
public static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Looks up a localized string similar to The {0} already exists!.
/// </summary>
public static string AlreadyExists {
get {
return ResourceManager.GetString("AlreadyExists", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to You should just use digits!.
/// </summary>
public static string Captcha {
get {
return ResourceManager.GetString("Captcha", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to There are some related data to this {0}, So you can not delete this item!.
/// </summary>
public static string CascadeDelete {
get {
return ResourceManager.GetString("CascadeDelete", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Are you sure to delete this item?.
/// </summary>
public static string ConfirmDelete {
get {
return ResourceManager.GetString("ConfirmDelete", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Current password is not correct!.
/// </summary>
public static string CurrentPasswordIsNotCorrect {
get {
return ResourceManager.GetString("CurrentPasswordIsNotCorrect", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Email address is not verified yet! An email sent to your inbox..
/// </summary>
public static string EmailAddressIsNotVerified {
get {
return ResourceManager.GetString("EmailAddressIsNotVerified", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Id is null!.
/// </summary>
public static string IdIsNull {
get {
return ResourceManager.GetString("IdIsNull", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to An internal server error has occurred. Our team has been notified..
/// </summary>
public static string InternalError {
get {
return ResourceManager.GetString("InternalError", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to {0} is not valid!.
/// </summary>
public static string Invalid {
get {
return ResourceManager.GetString("Invalid", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Invalid Action!.
/// </summary>
public static string InvalidAction {
get {
return ResourceManager.GetString("InvalidAction", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to OTP Code is not correct!.
/// </summary>
public static string InvalidOTPCode {
get {
return ResourceManager.GetString("InvalidOTPCode", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Buxie Account is not valid!.
/// </summary>
public static string InvalidTenant {
get {
return ResourceManager.GetString("InvalidTenant", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to User Account is not valid!.
/// </summary>
public static string InvalidUser {
get {
return ResourceManager.GetString("InvalidUser", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Invalid Username or Password!.
/// </summary>
public static string InvalidUsernameOrPassword {
get {
return ResourceManager.GetString("InvalidUsernameOrPassword", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Invalid Verification Key.
/// </summary>
public static string InvalidVerificationKey {
get {
return ResourceManager.GetString("InvalidVerificationKey", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to This {0} is used in {1} , So you can not delete this item!.
/// </summary>
public static string IsUsed {
get {
return ResourceManager.GetString("IsUsed", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to New password can not be same as current password!.
/// </summary>
public static string NewPasswordCanNotBeSameAsCurrentPassword {
get {
return ResourceManager.GetString("NewPasswordCanNotBeSameAsCurrentPassword", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to There is no {0} with this information!.
/// </summary>
public static string NotFound {
get {
return ResourceManager.GetString("NotFound", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to No Information Found!.
/// </summary>
public static string NotFoundGeneral {
get {
return ResourceManager.GetString("NotFoundGeneral", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Update in offline mode is not avaliable.
/// </summary>
public static string OnlyOnlineUpdate {
get {
return ResourceManager.GetString("OnlyOnlineUpdate", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Your changes have not been saved. Another User has updated the data since you retrieved it. Please refresh and try again..
/// </summary>
public static string OptimisticConcurrency {
get {
return ResourceManager.GetString("OptimisticConcurrency", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Please login first..
/// </summary>
public static string PleaseLoginFirst {
get {
return ResourceManager.GetString("PleaseLoginFirst", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Tenant Id Not Found!.
/// </summary>
public static string TenantIdNotFound {
get {
return ResourceManager.GetString("TenantIdNotFound", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Tenant Is not multi User!.
/// </summary>
public static string TenantIsNotMultiUser {
get {
return ResourceManager.GetString("TenantIsNotMultiUser", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to There is not any data with this id!.
/// </summary>
public static string ThereIsNotAnyDataWithThisId {
get {
return ResourceManager.GetString("ThereIsNotAnyDataWithThisId", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to We are unable to {0} this {1}!.
/// </summary>
public static string UnableTo {
get {
return ResourceManager.GetString("UnableTo", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Unable to change systematic {0}..
/// </summary>
public static string UnableToDeleteSystematice {
get {
return ResourceManager.GetString("UnableToDeleteSystematice", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Unable to update parent!.
/// </summary>
public static string UnableToUpdateParent {
get {
return ResourceManager.GetString("UnableToUpdateParent", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Unauthorized Access.
/// </summary>
public static string UnauthorizedAccess {
get {
return ResourceManager.GetString("UnauthorizedAccess", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Unexpected error! Our team informed about the error, If needed contact us with error code [{0}].
/// </summary>
public static string UnexpectedError {
get {
return ResourceManager.GetString("UnexpectedError", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Your account is not active!.
/// </summary>
public static string UserAccountIsNotActive {
get {
return ResourceManager.GetString("UserAccountIsNotActive", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to You have not registered an address yet..
/// </summary>
public static string YouHaveNotRegisteredAnAddressYet {
get {
return ResourceManager.GetString("YouHaveNotRegisteredAnAddressYet", resourceCulture);
}
}
}
}

View File

@ -0,0 +1,216 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="AlreadyExists" xml:space="preserve">
<value>{0} تکراری است!</value>
</data>
<data name="Captcha" xml:space="preserve">
<value>شما باید عدد فوق را با دقت و با ارقام انگلیسی وارد نمایید!</value>
</data>
<data name="CascadeDelete" xml:space="preserve">
<value>از این {0} در جای دیگری استفاده شده است، لذا شما قادر به حذف آن نمی‌باشید!</value>
</data>
<data name="ConfirmDelete" xml:space="preserve">
<value>آیا از حذف این آیتم اطمینان دارید؟</value>
</data>
<data name="CurrentPasswordIsNotCorrect" xml:space="preserve">
<value>گذرواژه جاری صحیح نمی‌باشد!</value>
</data>
<data name="EmailAddressIsNotVerified" xml:space="preserve">
<value>نشانی پست الکترونیکی هنوز تایید نشده است! برای شما ایمیلی ارسال شده است</value>
</data>
<data name="IdIsNull" xml:space="preserve">
<value>شناسه اطلاعات باید مشخص شده باشد!</value>
</data>
<data name="InternalError" xml:space="preserve">
<value>خطایی داخلی رخ داده، تیم ما از این خطا مطلع شده است</value>
</data>
<data name="Invalid" xml:space="preserve">
<value>{0} معتبر نمی باشد!</value>
</data>
<data name="InvalidAction" xml:space="preserve">
<value>عملیات غیرمجاز!</value>
</data>
<data name="InvalidOTPCode" xml:space="preserve">
<value>کد صحیح نمی باشد</value>
</data>
<data name="InvalidTenant" xml:space="preserve">
<value>باکسی اکانت شما معتبر نمی باشد</value>
</data>
<data name="InvalidUser" xml:space="preserve">
<value>حساب کاربری شما معتبر نمی باشد</value>
</data>
<data name="InvalidUsernameOrPassword" xml:space="preserve">
<value>شناسه‌کاربری و یا گذرواژه صحیح نمی‌باشد!</value>
</data>
<data name="InvalidVerificationKey" xml:space="preserve">
<value>کد نامعتبر میبباشد</value>
</data>
<data name="IsUsed" xml:space="preserve">
<value>این {0} در {1} استفاده شده، لذا نمیتوان آن را حذف کرد</value>
</data>
<data name="NewPasswordCanNotBeSameAsCurrentPassword" xml:space="preserve">
<value>گذرواژه جدید نمی‌تواند با گذرواژه جاری یکسان باشد!</value>
</data>
<data name="NotFound" xml:space="preserve">
<value>{0} مورد نظر یافت نشد!</value>
</data>
<data name="NotFoundGeneral" xml:space="preserve">
<value>اطلاعات مورد نظر وجود ندارد!</value>
</data>
<data name="OnlyOnlineUpdate" xml:space="preserve">
<value>در حالت آفلاین امکان ویرایش نمی باشد، لطفا پس از اتصال به اینترنت دوباره تلاش کنید</value>
</data>
<data name="OptimisticConcurrency" xml:space="preserve">
<value>تغییرات شما ذخیره نشده است. کاربر دیگری داده‌ها را از زمانی که شما آن‌ها را بازیابی کرده‌اید، به‌روزرسانی کرده است. لطفاً صفحه را تازه کنید و دوباره تلاش کنید.</value>
</data>
<data name="PleaseLoginFirst" xml:space="preserve">
<value>لطفا ابتدا وارد شوید</value>
</data>
<data name="TenantIdNotFound" xml:space="preserve">
<value>شناسه یکتای کاربر پیدا نشد</value>
</data>
<data name="TenantIsNotMultiUser" xml:space="preserve">
<value>این حساب کاربری، چند کاربره نمی باشد</value>
</data>
<data name="ThereIsNotAnyDataWithThisId" xml:space="preserve">
<value>اطلاعاتی با چنین شناسه‌ای وجود ندارد!</value>
</data>
<data name="UnableTo" xml:space="preserve">
<value>در حال حاضر امکان {0} این {1} وجود ندارد!</value>
</data>
<data name="UnableToDeleteSystematice" xml:space="preserve">
<value>امکان تغییر {0} های سیستمی نمیباشد</value>
</data>
<data name="UnableToUpdateParent" xml:space="preserve">
<value>امکان تعریف والد برای این آیتم، به علت وجود زیر مجموعه وجود ندارد!</value>
</data>
<data name="UnauthorizedAccess" xml:space="preserve">
<value>شما به این بخش دسترسی ندارید</value>
</data>
<data name="UnexpectedError" xml:space="preserve">
<value>خطای ناشناخته‌ای صورت گرفته است! تیم ما از این خطا مطلع شده، در صورت نیاز کد {0} را به پشتیبانی اعلام کنید</value>
</data>
<data name="UserAccountIsNotActive" xml:space="preserve">
<value>دسترسی شما به سامانه تا اطلاع ثانوی مسدود می‌باشد!</value>
</data>
<data name="YouHaveNotRegisteredAnAddressYet" xml:space="preserve">
<value>هنوز آدرس ثبت نکرده اید</value>
</data>
</root>

View File

@ -0,0 +1,216 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="AlreadyExists" xml:space="preserve">
<value>The {0} already exists!</value>
</data>
<data name="Captcha" xml:space="preserve">
<value>You should just use digits!</value>
</data>
<data name="CascadeDelete" xml:space="preserve">
<value>There are some related data to this {0}, So you can not delete this item!</value>
</data>
<data name="ConfirmDelete" xml:space="preserve">
<value>Are you sure to delete this item?</value>
</data>
<data name="CurrentPasswordIsNotCorrect" xml:space="preserve">
<value>Current password is not correct!</value>
</data>
<data name="EmailAddressIsNotVerified" xml:space="preserve">
<value>Email address is not verified yet! An email sent to your inbox.</value>
</data>
<data name="IdIsNull" xml:space="preserve">
<value>Id is null!</value>
</data>
<data name="InternalError" xml:space="preserve">
<value>An internal server error has occurred. Our team has been notified.</value>
</data>
<data name="Invalid" xml:space="preserve">
<value>{0} is not valid!</value>
</data>
<data name="InvalidAction" xml:space="preserve">
<value>Invalid Action!</value>
</data>
<data name="InvalidOTPCode" xml:space="preserve">
<value>OTP Code is not correct!</value>
</data>
<data name="InvalidTenant" xml:space="preserve">
<value>Buxie Account is not valid!</value>
</data>
<data name="InvalidUser" xml:space="preserve">
<value>User Account is not valid!</value>
</data>
<data name="InvalidUsernameOrPassword" xml:space="preserve">
<value>Invalid Username or Password!</value>
</data>
<data name="InvalidVerificationKey" xml:space="preserve">
<value>Invalid Verification Key</value>
</data>
<data name="IsUsed" xml:space="preserve">
<value>This {0} is used in {1} , So you can not delete this item!</value>
</data>
<data name="NewPasswordCanNotBeSameAsCurrentPassword" xml:space="preserve">
<value>New password can not be same as current password!</value>
</data>
<data name="NotFound" xml:space="preserve">
<value>There is no {0} with this information!</value>
</data>
<data name="NotFoundGeneral" xml:space="preserve">
<value>No Information Found!</value>
</data>
<data name="OnlyOnlineUpdate" xml:space="preserve">
<value>Update in offline mode is not avaliable</value>
</data>
<data name="OptimisticConcurrency" xml:space="preserve">
<value>Your changes have not been saved. Another User has updated the data since you retrieved it. Please refresh and try again.</value>
</data>
<data name="PleaseLoginFirst" xml:space="preserve">
<value>Please login first.</value>
</data>
<data name="TenantIdNotFound" xml:space="preserve">
<value>Tenant Id Not Found!</value>
</data>
<data name="TenantIsNotMultiUser" xml:space="preserve">
<value>Tenant Is not multi User!</value>
</data>
<data name="ThereIsNotAnyDataWithThisId" xml:space="preserve">
<value>There is not any data with this id!</value>
</data>
<data name="UnableTo" xml:space="preserve">
<value>We are unable to {0} this {1}!</value>
</data>
<data name="UnableToDeleteSystematice" xml:space="preserve">
<value>Unable to change systematic {0}.</value>
</data>
<data name="UnableToUpdateParent" xml:space="preserve">
<value>Unable to update parent!</value>
</data>
<data name="UnauthorizedAccess" xml:space="preserve">
<value>Unauthorized Access</value>
</data>
<data name="UnexpectedError" xml:space="preserve">
<value>Unexpected error! Our team informed about the error, If needed contact us with error code [{0}]</value>
</data>
<data name="UserAccountIsNotActive" xml:space="preserve">
<value>Your account is not active!</value>
</data>
<data name="YouHaveNotRegisteredAnAddressYet" xml:space="preserve">
<value>You have not registered an address yet.</value>
</data>
</root>

View File

@ -0,0 +1,126 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Resources.Messages {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
public class Successes {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Successes() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
public static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Resources.Messages.Successes", typeof(Successes).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
public static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Looks up a localized string similar to The {0} successfully added..
/// </summary>
public static string Added {
get {
return ResourceManager.GetString("Added", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Please check your inbox..
/// </summary>
public static string CheckInbox {
get {
return ResourceManager.GetString("CheckInbox", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to The {0} successfully created..
/// </summary>
public static string Created {
get {
return ResourceManager.GetString("Created", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to The {0} successfully deleted..
/// </summary>
public static string Deleted {
get {
return ResourceManager.GetString("Deleted", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to The Opration Successfuly.
/// </summary>
public static string Success {
get {
return ResourceManager.GetString("Success", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to The {0} successfully updated..
/// </summary>
public static string Updated {
get {
return ResourceManager.GetString("Updated", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to The {0} successfully verified..
/// </summary>
public static string Verified {
get {
return ResourceManager.GetString("Verified", resourceCulture);
}
}
}
}

View File

@ -0,0 +1,138 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Added" xml:space="preserve">
<value>{0} با موفقیت اضافه گردید.</value>
</data>
<data name="CheckInbox" xml:space="preserve">
<value>لطفا پست الکترونیکی خود را بررسی کنید</value>
</data>
<data name="Created" xml:space="preserve">
<value>{0} با موفقیت ایجاد گردید.</value>
</data>
<data name="Deleted" xml:space="preserve">
<value>{0} با موفقیت حذف گردید.</value>
</data>
<data name="Success" xml:space="preserve">
<value>عملیات با موفقیت انجام شد</value>
</data>
<data name="Updated" xml:space="preserve">
<value>{0} با موفقیت ویرایش گردید.</value>
</data>
</root>

View File

@ -0,0 +1,141 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Added" xml:space="preserve">
<value>The {0} successfully added.</value>
</data>
<data name="CheckInbox" xml:space="preserve">
<value>Please check your inbox.</value>
</data>
<data name="Created" xml:space="preserve">
<value>The {0} successfully created.</value>
</data>
<data name="Deleted" xml:space="preserve">
<value>The {0} successfully deleted.</value>
</data>
<data name="Success" xml:space="preserve">
<value>The Opration Successfuly</value>
</data>
<data name="Updated" xml:space="preserve">
<value>The {0} successfully updated.</value>
</data>
<data name="Verified" xml:space="preserve">
<value>The {0} successfully verified.</value>
</data>
</root>

View File

@ -0,0 +1,306 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Resources.Messages {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
public class Validations {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Validations() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
public static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Resources.Messages.Validations", typeof(Validations).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
public static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Looks up a localized string similar to {0} is not valid!.
/// </summary>
public static string CellPhoneNumber {
get {
return ResourceManager.GetString("CellPhoneNumber", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to {0} should be equql to {1}!.
/// </summary>
public static string Compare {
get {
return ResourceManager.GetString("Compare", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Email address is not valid!.
/// </summary>
public static string EmailAddress {
get {
return ResourceManager.GetString("EmailAddress", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to The {0} should be equal!.
/// </summary>
public static string Equal {
get {
return ResourceManager.GetString("Equal", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Length of {0} must be {1}.
/// </summary>
public static string FixLengthNumeric {
get {
return ResourceManager.GetString("FixLengthNumeric", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to {0} should be greater than {1}!.
/// </summary>
public static string GreaterThan {
get {
return ResourceManager.GetString("GreaterThan", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Length of {0} greater than {1}.
/// </summary>
public static string GreaterThan_FieldValue {
get {
return ResourceManager.GetString("GreaterThan_FieldValue", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Length of {0} greater than length of {1}.
/// </summary>
public static string GreaterThan_TwoFields {
get {
return ResourceManager.GetString("GreaterThan_TwoFields", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to {0} should be greater than or equal to {1}!.
/// </summary>
public static string GreaterThanOrEqualTo {
get {
return ResourceManager.GetString("GreaterThanOrEqualTo", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Length of {0} greater or equal than {1}.
/// </summary>
public static string GreaterThanOrEqualTo_FieldValue {
get {
return ResourceManager.GetString("GreaterThanOrEqualTo_FieldValue", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Length of {0} greater or equal than length of {1}.
/// </summary>
public static string GreaterThanOrEqualTo_TwoFields {
get {
return ResourceManager.GetString("GreaterThanOrEqualTo_TwoFields", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Invalid Code : {0}.
/// </summary>
public static string InvalidCode {
get {
return ResourceManager.GetString("InvalidCode", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Input data is not valid.
/// </summary>
public static string InvalidModelState {
get {
return ResourceManager.GetString("InvalidModelState", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Maximum Count of {0} is {1} !.
/// </summary>
public static string MaxCount {
get {
return ResourceManager.GetString("MaxCount", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Max length of {0} is {1}!.
/// </summary>
public static string MaxLength {
get {
return ResourceManager.GetString("MaxLength", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to The &apos;{0}&apos; value must be a string with a minimum length of &apos;{1}&apos;!.
/// </summary>
public static string MinLength {
get {
return ResourceManager.GetString("MinLength", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to {0} is not valid!.
/// </summary>
public static string NationalCode {
get {
return ResourceManager.GetString("NationalCode", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to {0} Not found.
/// </summary>
public static string NotFound {
get {
return ResourceManager.GetString("NotFound", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to &apos;{0}&apos; is not valid!.
/// </summary>
public static string NotValid {
get {
return ResourceManager.GetString("NotValid", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Password is not valid!.
/// </summary>
public static string Password {
get {
return ResourceManager.GetString("Password", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to postalcode.
/// </summary>
public static string PostalCode {
get {
return ResourceManager.GetString("PostalCode", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to {0} should be greater than or equal to {1} and less than or equal to {2}!.
/// </summary>
public static string Range {
get {
return ResourceManager.GetString("Range", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Value of {0} is not valid..
/// </summary>
public static string RegularExpression {
get {
return ResourceManager.GetString("RegularExpression", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to {0} is repetitive. please use an other {0}.
/// </summary>
public static string Repetitive {
get {
return ResourceManager.GetString("Repetitive", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to {0} is required!.
/// </summary>
public static string Required {
get {
return ResourceManager.GetString("Required", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to {0} is not valid!.
/// </summary>
public static string Url {
get {
return ResourceManager.GetString("Url", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Username is not valid!.
/// </summary>
public static string Username {
get {
return ResourceManager.GetString("Username", resourceCulture);
}
}
}
}

View File

@ -0,0 +1,201 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="CellPhoneNumber" xml:space="preserve">
<value>{0} باید دقیقا یازده رقمی بوده و باید با 09 آغاز شده باشد!</value>
</data>
<data name="Compare" xml:space="preserve">
<value>مقدار فیلد {0} باید با مقدار فیلد {1} یکسان باشد!</value>
</data>
<data name="EmailAddress" xml:space="preserve">
<value>نشانی پست الکترونیکی معتبر نمی‌باشد!</value>
</data>
<data name="Equal" xml:space="preserve">
<value>مقدار فیلد {0} باید یکسان باشد!</value>
</data>
<data name="FixLengthNumeric" xml:space="preserve">
<value>مقدار فیلد {0} باید دقیقا {1} رقم باشد!</value>
</data>
<data name="GreaterThan" xml:space="preserve">
<value>مقدار {0} باید بزرگ‌تر از {1} باشد!</value>
</data>
<data name="GreaterThanOrEqualTo" xml:space="preserve">
<value>مقدار {0} باید بزرگ‌تر یا مساوی {1} باشد!</value>
</data>
<data name="GreaterThanOrEqualTo_FieldValue" xml:space="preserve">
<value>مقدار فیلد {0} باید بزرگ‌تر یا مساوی {1} باشد!</value>
</data>
<data name="GreaterThanOrEqualTo_TwoFields" xml:space="preserve">
<value>مقدار فیلد {0} باید بزرگ‌تر یا مساوی مقدار فیلد {1} باشد!</value>
</data>
<data name="GreaterThan_FieldValue" xml:space="preserve">
<value>مقدار فیلد {0} باید بزرگ‌تر از {1} باشد!</value>
</data>
<data name="GreaterThan_TwoFields" xml:space="preserve">
<value>مقدار فیلد {0} باید بزرگ‌تر از مقدار فیلد {1} باشد!</value>
</data>
<data name="InvalidCode" xml:space="preserve">
<value>کد {0} صحیح نمی‌باشد!</value>
</data>
<data name="NotValid" xml:space="preserve">
<value>'{0}' معتبر نمی‌باشد!</value>
</data>
<data name="MaxCount" xml:space="preserve">
<value>حداکثر تعداد {0} می‌تواند {1} حرف باشد!</value>
</data>
<data name="MaxLength" xml:space="preserve">
<value>حداکثر طول فیلد {0} می‌تواند {1} حرف باشد!</value>
</data>
<data name="MinLength" xml:space="preserve">
<value>طول متن فیلد '{0}' باید حداقل '{1}' کاراکتر باشد!</value>
</data>
<data name="NationalCode" xml:space="preserve">
<value>{0} معتبر نمی باشد!</value>
</data>
<data name="NotFound" xml:space="preserve">
<value>{0} یافت نشد!</value>
</data>
<data name="Range" xml:space="preserve">
<value>مقدار فیلد {0} باید بزرگ‌تر یا مساوی {1} و کوچک‌تر یا مساوی {2} باشد.</value>
</data>
<data name="RegularExpression" xml:space="preserve">
<value>مقدار {0} معتبر نمی‌باشد!</value>
</data>
<data name="Repetitive" xml:space="preserve">
<value>{0} تکراری است! لطفا از {0} دیگری استفاده نمایید.</value>
</data>
<data name="Required" xml:space="preserve">
<value>تکمیل فیلد {0} الزامی است!</value>
</data>
<data name="Url" xml:space="preserve">
<value>{0} معتبر نمی‌باشد!</value>
</data>
<data name="PostalCode" xml:space="preserve">
<value>کد پستی معتبر نمی‌باشد! کد پستی باید دقیقا از ده رقم انگلیسی تشکیل شود!</value>
</data>
<data name="InvalidModelState" xml:space="preserve">
<value>اطلاعات ورودی معتبر نمیباشد، لطفا اطلاعات خود را بررسی فرمایید</value>
</data>
<data name="Password" xml:space="preserve">
<value>رمز عبور باید حداقل شامل یک حرف کوچک، یک حرف بزرگ، یک عدد، و یک کاراکتر خاص باشد و حداقل طول آن ۸ کاراکتر باشد</value>
</data>
<data name="Username" xml:space="preserve">
<value>شناسه‌کاربری باید از شش تا بیست کاراکتر تشکیل شود. شما می‌توانید از حروف a تا z بزرگ یا کوچک، اعداد از 0 تا 9 انگلیسی و زیرخط استفاده نمایید!</value>
</data>
</root>

View File

@ -0,0 +1,201 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="CellPhoneNumber" xml:space="preserve">
<value>{0} is not valid!</value>
</data>
<data name="Compare" xml:space="preserve">
<value>{0} should be equql to {1}!</value>
</data>
<data name="EmailAddress" xml:space="preserve">
<value>Email address is not valid!</value>
</data>
<data name="Equal" xml:space="preserve">
<value>The {0} should be equal!</value>
</data>
<data name="FixLengthNumeric" xml:space="preserve">
<value>Length of {0} must be {1}</value>
</data>
<data name="GreaterThan" xml:space="preserve">
<value>{0} should be greater than {1}!</value>
</data>
<data name="GreaterThanOrEqualTo" xml:space="preserve">
<value>{0} should be greater than or equal to {1}!</value>
</data>
<data name="GreaterThanOrEqualTo_FieldValue" xml:space="preserve">
<value>Length of {0} greater or equal than {1}</value>
</data>
<data name="GreaterThanOrEqualTo_TwoFields" xml:space="preserve">
<value>Length of {0} greater or equal than length of {1}</value>
</data>
<data name="GreaterThan_FieldValue" xml:space="preserve">
<value>Length of {0} greater than {1}</value>
</data>
<data name="GreaterThan_TwoFields" xml:space="preserve">
<value>Length of {0} greater than length of {1}</value>
</data>
<data name="InvalidCode" xml:space="preserve">
<value>Invalid Code : {0}</value>
</data>
<data name="NotValid" xml:space="preserve">
<value>'{0}' is not valid!</value>
</data>
<data name="MaxCount" xml:space="preserve">
<value>Maximum Count of {0} is {1} !</value>
</data>
<data name="MaxLength" xml:space="preserve">
<value>Max length of {0} is {1}!</value>
</data>
<data name="MinLength" xml:space="preserve">
<value>The '{0}' value must be a string with a minimum length of '{1}'!</value>
</data>
<data name="NationalCode" xml:space="preserve">
<value>{0} is not valid!</value>
</data>
<data name="NotFound" xml:space="preserve">
<value>{0} Not found</value>
</data>
<data name="Range" xml:space="preserve">
<value>{0} should be greater than or equal to {1} and less than or equal to {2}!</value>
</data>
<data name="RegularExpression" xml:space="preserve">
<value>Value of {0} is not valid.</value>
</data>
<data name="Repetitive" xml:space="preserve">
<value>{0} is repetitive. please use an other {0}</value>
</data>
<data name="Required" xml:space="preserve">
<value>{0} is required!</value>
</data>
<data name="Url" xml:space="preserve">
<value>{0} is not valid!</value>
</data>
<data name="PostalCode" xml:space="preserve">
<value>postalcode</value>
</data>
<data name="InvalidModelState" xml:space="preserve">
<value>Input data is not valid</value>
</data>
<data name="Password" xml:space="preserve">
<value>Password is not valid!</value>
</data>
<data name="Username" xml:space="preserve">
<value>Username is not valid!</value>
</data>
</root>

View File

@ -0,0 +1,60 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<Compile Update="ButtonCaptions.Designer.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>ButtonCaptions.resx</DependentUpon>
</Compile>
<Compile Update="DataDictionary.Designer.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>DataDictionary.resx</DependentUpon>
</Compile>
<Compile Update="Messages\Errors.Designer.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>Errors.resx</DependentUpon>
</Compile>
<Compile Update="Messages\Successes.Designer.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>Successes.resx</DependentUpon>
</Compile>
<Compile Update="Messages\Validations.Designer.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>Validations.resx</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Update="ButtonCaptions.resx">
<Generator>PublicResXFileCodeGenerator</Generator>
<LastGenOutput>ButtonCaptions.Designer.cs</LastGenOutput>
</EmbeddedResource>
<EmbeddedResource Update="DataDictionary.resx">
<Generator>PublicResXFileCodeGenerator</Generator>
<LastGenOutput>DataDictionary.Designer.cs</LastGenOutput>
</EmbeddedResource>
<EmbeddedResource Update="Messages\Errors.resx">
<Generator>PublicResXFileCodeGenerator</Generator>
<LastGenOutput>Errors.Designer.cs</LastGenOutput>
</EmbeddedResource>
<EmbeddedResource Update="Messages\Successes.resx">
<Generator>PublicResXFileCodeGenerator</Generator>
<LastGenOutput>Successes.Designer.cs</LastGenOutput>
</EmbeddedResource>
<EmbeddedResource Update="Messages\Validations.resx">
<Generator>PublicResXFileCodeGenerator</Generator>
<LastGenOutput>Validations.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
</Project>

View File

@ -0,0 +1,9 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>

View File

@ -0,0 +1,8 @@
namespace Framework.DataType;
public static class GuidHelper
{
public static bool IsNullOrDefault(this Guid? id) => id == null || id == Guid.Empty;
public static bool IsEmpty(this Guid id) => id == Guid.Empty;
}

View File

@ -0,0 +1,85 @@
namespace Framework.DataType;
public class ErrorMessage
{
public ErrorMessage(string message, ErrorType errorType, Exception? exception = null)
{
Message = message;
ErrorType = errorType;
Exception = exception;
}
public string Message { get; set; }
public ErrorType ErrorType { get; set; }
public Exception? Exception { get; set; }
}
public enum ErrorType
{
// Success
None = 0,
// General Errors
UnknownError = 1,
InvalidArgument = 2,
InvalidOperation = 3,
NullReference = 4,
OutOfRange = 5,
Timeout = 6,
ResourceNotFound = 7,
InvalidState = 8,
InternalError = 9,
// Network Errors
NetworkUnavailable = 100,
ConnectionFailed = 101,
TimeoutError = 102,
ServerError = 103,
RequestTimeout = 104,
UnauthorizedAccess = 105,
// File System Errors
FileNotFound = 200,
FileAccessDenied = 201,
FileReadError = 202,
FileWriteError = 203,
DirectoryNotFound = 204,
// Database Errors
DatabaseConnectionFailed = 300,
QueryExecutionError = 301,
DataIntegrityError = 302,
RecordNotFound = 303,
DuplicateRecord = 304,
// Authentication/Authorization Errors
InvalidCredentials = 400,
AccountLocked = 401,
SessionExpired = 402,
AccessDenied = 403,
// Validation Errors
ValidationFailed = 500,
RequiredFieldMissing = 501,
InvalidFormat = 502,
// Application Specific Errors
FeatureNotImplemented = 600,
ServiceUnavailable = 601,
OperationNotSupported = 602,
// Security Errors
InvalidToken = 700,
TokenExpired = 701,
PermissionDenied = 702,
// System Errors
OutOfMemory = 800,
StackOverflow = 801,
DiskSpaceLow = 802,
UnhandledException = 803,
NotFound = 804,
//Custom
BalanceIsNotEnough = 900
}

View File

@ -0,0 +1,69 @@
namespace Framework.DataType;
public class ResultContract
{
public bool IsSuccessful { get; set; }
public ErrorMessage? ErrorMessage { get; private set; }
public string[]? InformationMessages { get; private set; }
public string? SuccessMessage { get; private set; }
public DateTime Timestamp { get; private set; }
public string? RequestId { get; set; }
public string? DebugInfo { get; set; }
public string? CorrelationId { get; set; }
protected ResultContract(bool isSuccessful)
{
Timestamp = DateTime.Now;
IsSuccessful = isSuccessful;
}
public void SetSuccessMessage(string successMessage)
{
SuccessMessage = successMessage;
IsSuccessful = true;
}
public void SetErrorMessage(ErrorMessage errorMessage)
{
ErrorMessage = errorMessage;
IsSuccessful = false;
}
public void AddInformationMessages(string[] informationMessages)
{
InformationMessages = informationMessages;
}
public static implicit operator
ResultContract(bool result) => new ResultContract(result);
public static implicit operator ResultContract((ErrorType type, string message) result)
{
var res = new ResultContract(false);
res.SetErrorMessage(new ErrorMessage(result.message, result.type));
return res;
}
}
public class ResultContract<TData> : ResultContract
{
protected ResultContract(TData? data) : base(true)
{
Data = data;
}
public TData? Data { get; set; }
public static implicit operator
ResultContract<TData>(TData data) => new ResultContract<TData>(data);
public static implicit operator
ResultContract<TData>((ErrorType type, string message) result)
{
var res = new ResultContract<TData>(default!);
res.SetErrorMessage(new ErrorMessage(result.message, result.type));
return res;
}
}

View File

@ -0,0 +1,160 @@
using System.Text.RegularExpressions;
namespace Framework.DataType;
public static class String
{
static String()
{
}
public static string GenerateSlug(this string phrase)
{
if (string.IsNullOrWhiteSpace(phrase))
return string.Empty;
var slug = phrase.Trim().ToLowerInvariant();
slug = Regex.Replace(slug, @"[\s]+", "-"); // شامل نیم‌فاصله فارسی (U+200C)
slug = Regex.Replace(slug, @"[^ء-یa-z0-9\-]", "");
slug = Regex.Replace(slug, @"-+", "-");
slug = slug.Trim('-');
var nanoTimeStr = DateTimeOffset.Now.ToUnixTimeMilliseconds().ToString();
var suffix = nanoTimeStr[^5..];
return $"{slug}-{suffix}";
}
public static bool IsValidNationalCode(this string nationalCode)
{
if (string.IsNullOrWhiteSpace(nationalCode) || nationalCode.Length != 10)
return false;
if (!nationalCode.All(char.IsDigit))
return false;
int checksum = 0;
for (int i = 0; i < 9; i++)
{
checksum += (int)char.GetNumericValue(nationalCode[i]) * (10 - i);
}
int remainder = checksum % 11;
int controlDigit = (int)char.GetNumericValue(nationalCode[9]);
return (remainder < 2 && controlDigit == remainder) || (remainder >= 2 && controlDigit == 11 - remainder);
}
public static bool IsValidPostalCode(this string postalCode)
{
if (string.IsNullOrWhiteSpace(postalCode) || postalCode.Length != 10)
return false;
if (!postalCode.All(char.IsDigit))
return false;
return true;
}
public static bool IsValidEmail(this string email)
{
if (string.IsNullOrWhiteSpace(email))
return false;
var emailRegex = @"^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$";
return Regex.IsMatch(email, emailRegex);
}
public static string? Fix(this string? value)
{
if (string.IsNullOrWhiteSpace(value: value))
{
return null;
}
value =
value.Trim();
while (value.Contains(value: " "))
{
value = value.Replace
(oldValue: " ", newValue: " ");
}
return value;
}
public static bool IsValidMobile(this string? mobile)
{
if (string.IsNullOrWhiteSpace(mobile) == true)
{
return false;
}
var mobileRegex = @"^09\d{9}$";
return Regex.IsMatch(mobile, mobileRegex);
}
public static bool IsValidPassword(this string password)
{
if (string.IsNullOrWhiteSpace(password) || password.Length < 8)
return false;
var passwordRegex = @"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&#])[A-Za-z\d@$!%*?&#]{8,}$";
return Regex.IsMatch(password, passwordRegex);
}
public static string? ConvertDigitsToUnicode(this object? value)
{
if (value is null)
{
return null;
}
var valueString =
value.ToString();
if (valueString is null)
{
return null;
}
var currentUICultureName =
System.Threading.Thread.CurrentThread
.CurrentUICulture.Parent.Name.ToUpper();
switch (currentUICultureName)
{
case "FA":
case "AR":
{
valueString =
valueString
.Replace(oldChar: '0', newChar: '۰')
.Replace(oldChar: '1', newChar: '۱')
.Replace(oldChar: '2', newChar: '۲')
.Replace(oldChar: '3', newChar: '۳')
.Replace(oldChar: '4', newChar: '۴')
.Replace(oldChar: '5', newChar: '۵')
.Replace(oldChar: '6', newChar: '۶')
.Replace(oldChar: '7', newChar: '۷')
.Replace(oldChar: '8', newChar: '۸')
.Replace(oldChar: '9', newChar: '۹')
;
return valueString;
}
default:
{
return valueString;
}
}
}
}

View File

@ -0,0 +1,16 @@
using Domain.Aggregates.Users;
using Microsoft.EntityFrameworkCore;
namespace Persistence;
public class DatabaseContext: DbContext
{
public DatabaseContext(DbContextOptions options) : base(options)
{
Database.EnsureCreated();
}
public DbSet<User> Users { get; set; }
}

View File

@ -0,0 +1,18 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="9.0.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="9.0.4" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\Core\Domain\Domain.csproj" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,45 @@
using Domain.Aggregates.Users;
using Domain.Aggregates.Users.Data;
using Microsoft.EntityFrameworkCore;
namespace Persistence.Repositories.Aggregates.Users;
public class UserRepository
(DatabaseContext databaseContext) : IUserRepository
{
public async Task AddAsync(User user)
{
await databaseContext.AddAsync(user);
}
public async Task<List<User>> GetAllAsync()
{
var users =
await databaseContext.Users
.Where(x => x.IsDeleted == false)
.ToListAsync();
return users;
}
public async Task<User?> GetAsync(Guid userId)
{
var user =
await databaseContext.Users
.Where(x => x.IsDeleted == false)
.Where(x => x.Id == userId)
.FirstOrDefaultAsync();
return user;
}
public void Remove(User user)
{
user.Delete();
}
public async Task SaveChangesAsync()
{
await databaseContext.SaveChangesAsync();
}
}

View File

@ -0,0 +1,63 @@
using Server.Infrastructure.Messages;
namespace Server.Infrastructure;
public abstract class BasePageModel :
Microsoft.AspNetCore.Mvc.RazorPages.PageModel, IMessageHandler
{
public BasePageModel() : base()
{
}
public bool AddPageError(string? message)
{
return AddMessage
(type: MessageType.PageError, message: message);
}
public bool AddPageWarning(string? message)
{
return AddMessage
(type: MessageType.PageWarning, message: message);
}
public bool AddPageSuccess(string? message)
{
return AddMessage
(type: MessageType.PageSuccess, message: message);
}
public bool AddToastError(string? message)
{
return AddMessage
(type: MessageType.ToastError, message: message);
}
public bool AddToastWarning(string? message)
{
return AddMessage
(type: MessageType.ToastWarning, message: message);
}
public bool AddToastSuccess(string? message)
{
return AddMessage
(type: MessageType.ToastSuccess, message: message);
}
public bool AddMessage(MessageType type, string? message)
{
return Utility.AddMessage
(tempData: TempData, type: type, message: message);
}
protected string SetReturnUrl(string? returnUrl)
{
if (string.IsNullOrWhiteSpace(value: returnUrl))
{
returnUrl = "./Index";
}
return returnUrl;
}
}

View File

@ -0,0 +1,24 @@
using Microsoft.Extensions.Options;
using Server.Infrastructure.Settings;
namespace Server.Infrastructure.Extensions.ServiceCollections;
public static class ConfigurationExtensions
{
public static WebApplicationBuilder AddConfiguration(this WebApplicationBuilder builder)
{
builder.Services.Configure<ApplicationSettings>
(builder.Configuration.GetSection(key: ApplicationSettings.KeyName))
.AddSingleton
(implementationFactory: serviceType =>
{
var result =
serviceType.GetRequiredService
<IOptions<ApplicationSettings>>().Value;
return result;
});
return builder;
}
}

View File

@ -0,0 +1,407 @@
namespace Server.Infrastructure;
public static class HtmlHelpers
{
static HtmlHelpers()
{
}
public static string DefaultValue
{
get
{
//return null;
//return string.Empty;
return "-----";
}
}
public static Microsoft.AspNetCore.Html.IHtmlContent Ub_DisplayInteger
(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper html, long? value)
{
if (value.HasValue == false)
{
return html.Raw(value: DefaultValue);
}
var result =
value.Value.ToString(format: "#,##0");
//result =
// Convert.DigitsToUnicode(value: result);
return html.Raw(value: result);
}
//public static Microsoft.AspNetCore.Html
// .IHtmlContent Ub_DisplayRowNumberWithTd
// (this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper html, long? value)
//{
// var td =
// new Microsoft.AspNetCore.Mvc
// .Rendering.TagBuilder(tagName: "td");
// td.AddCssClass(value: "text-center");
// var innerHtml =
// Ub_DisplayInteger(html: html, value: value);
// td.InnerHtml.AppendHtml(content: innerHtml);
// return td;
//}
public static Microsoft.AspNetCore.Html.IHtmlContent Ub_DisplayStringWithTd
(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper html, string? value)
{
var td =
new Microsoft.AspNetCore.Mvc
.Rendering.TagBuilder(tagName: "td");
td.AddCssClass("align-middle text-center");
td.InnerHtml.Append(value!);
return td;
}
public static Microsoft.AspNetCore.Html.IHtmlContent Ub_DisplayStringWithTh
(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper html, string? value)
{
var td =
new Microsoft.AspNetCore.Mvc
.Rendering.TagBuilder(tagName: "th");
td.AddCssClass("align-middle text-center");
td.InnerHtml.Append(value!);
return td;
}
public static Microsoft.AspNetCore.Html.IHtmlContent Ub_DisplayBoolean
(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper html, bool? value)
{
if (html is null)
{
throw new ArgumentNullException(paramName: nameof(html));
}
var div =
new Microsoft.AspNetCore.Mvc
.Rendering.TagBuilder(tagName: "div");
div.AddCssClass("d-flex justify-content-center align-items-center");
var input =
new Microsoft.AspNetCore.Mvc
.Rendering.TagBuilder(tagName: "input");
input.AddCssClass("form-check-input m-0");
input.Attributes.Add
(key: "type", value: "checkbox");
input.Attributes.Add
(key: "disabled", value: "disabled");
if (value.HasValue && value.Value)
{
input.Attributes.Add
(key: "checked", value: "checked");
}
div.InnerHtml.AppendHtml(content: input);
return div;
}
public static Microsoft.AspNetCore.Html.IHtmlContent Ub_DisplayBooleanWithTd
(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper html, bool? value)
{
var td =
new Microsoft.AspNetCore.Mvc
.Rendering.TagBuilder(tagName: "td");
td.AddCssClass("align-middle text-center");
var innerHtml =
html.Ub_DisplayBoolean(value: value);
td.InnerHtml.AppendHtml(content: innerHtml);
return td;
}
public static Microsoft.AspNetCore.Html.IHtmlContent Ub_DisplayIntegerWithTd
(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper html, long? value)
{
var td =
new Microsoft.AspNetCore.Mvc
.Rendering.TagBuilder(tagName: "td");
td.Attributes.Add
(key: "dir", value: "ltr");
var innerHtml =
html.Ub_DisplayInteger(value: value);
td.AddCssClass("align-middle text-center");
td.InnerHtml.AppendHtml(content: innerHtml);
return td;
}
//public static Microsoft.AspNetCore.Html.IHtmlContent Ub_DisplayDateTime
// (this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper html, System.DateTime? value)
//{
// if (value.HasValue == false)
// {
// return html.Raw(value: DefaultValue);
// }
// var result =
// value.Value.ToString
// (format: "yyyy/MM/dd - HH:mm:ss");
// result =
// Convert.DigitsToUnicode(value: result);
// return html.Raw(value: result);
//}
//public static Microsoft.AspNetCore.Html.IHtmlContent Ub_DisplayDateTimeWithTd
// (this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper html, System.DateTime? value)
//{
// var td =
// new Microsoft.AspNetCore.Mvc
// .Rendering.TagBuilder(tagName: "td");
// td.Attributes.Add
// (key: "dir", value: "ltr");
// var innerHtml =
// Ub_DisplayDateTime(html: html, value: value);
// td.InnerHtml.AppendHtml(content: innerHtml);
// return td;
//}
public static Microsoft.AspNetCore.Html.IHtmlContent Ub_GetLinkCaptionForList
(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper html)
{
if (html is null)
{
throw new ArgumentNullException(paramName: nameof(html));
}
var icon =
TagHelpers.Utility.GetIconList();
var span =
new Microsoft.AspNetCore.Mvc
.Rendering.TagBuilder(tagName: "span");
span.AddCssClass(value: "mx-1");
span.InnerHtml.Append(unencoded: "[");
span.InnerHtml.Append(unencoded: " ");
span.InnerHtml.AppendHtml(content: icon);
span.InnerHtml.Append(unencoded: Resources.ButtonCaptions.BackToList);
span.InnerHtml.Append(unencoded: " ");
span.InnerHtml.Append(unencoded: "]");
return span;
}
public static Microsoft.AspNetCore.Html.IHtmlContent Ub_GetLinkCaptionForDetails
(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper html)
{
if (html is null)
{
throw new ArgumentNullException(paramName: nameof(html));
}
var icon =
TagHelpers.Utility.GetIconDetails();
var span =
new Microsoft.AspNetCore.Mvc
.Rendering.TagBuilder(tagName: "span");
span.AddCssClass(value: "mx-1");
span.InnerHtml.Append(unencoded: "[");
span.InnerHtml.Append(unencoded: " ");
span.InnerHtml.AppendHtml(content: icon);
span.InnerHtml.Append(unencoded: Resources.ButtonCaptions.Details);
span.InnerHtml.Append(unencoded: " ");
span.InnerHtml.Append(unencoded: "]");
return span;
}
public static Microsoft.AspNetCore.Html.IHtmlContent Ub_GetLinkCaptionForCreate
(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper html)
{
if (html is null)
{
throw new ArgumentNullException(paramName: nameof(html));
}
var icon =
TagHelpers.Utility.GetIconCreate();
var span =
new Microsoft.AspNetCore.Mvc
.Rendering.TagBuilder(tagName: "span");
//span.AddCssClass(value: "mx-1");
//span.InnerHtml.Append(unencoded: "[");
//span.InnerHtml.Append(unencoded: " ");
span.InnerHtml.AppendHtml(content: icon);
span.InnerHtml.Append(unencoded: Resources.ButtonCaptions.Create);
//span.InnerHtml.Append(unencoded: " ");
//span.InnerHtml.Append(unencoded: "]");
return span;
}
public static Microsoft.AspNetCore.Html.IHtmlContent Ub_GetLinkCaptionForUpdate
(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper html)
{
if (html is null)
{
throw new ArgumentNullException(paramName: nameof(html));
}
var icon =
TagHelpers.Utility.GetIconUpdate();
var span =
new Microsoft.AspNetCore.Mvc
.Rendering.TagBuilder(tagName: "span");
span.AddCssClass(value: "mx-1");
span.InnerHtml.Append(unencoded: "[");
span.InnerHtml.Append(unencoded: " ");
span.InnerHtml.AppendHtml(content: icon);
span.InnerHtml.Append(unencoded: Resources.ButtonCaptions.Update);
span.InnerHtml.Append(unencoded: " ");
span.InnerHtml.Append(unencoded: "]");
return span;
}
public static Microsoft.AspNetCore.Html.IHtmlContent Ub_GetLinkCaptionForDelete
(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper html)
{
if (html is null)
{
throw new ArgumentNullException(paramName: nameof(html));
}
var icon =
TagHelpers.Utility.GetIconDelete();
var span =
new Microsoft.AspNetCore.Mvc
.Rendering.TagBuilder(tagName: "span");
span.AddCssClass(value: "mx-1");
span.InnerHtml.Append(unencoded: "[");
span.InnerHtml.Append(unencoded: " ");
span.InnerHtml.AppendHtml(content: icon);
span.InnerHtml.Append(unencoded: Resources.ButtonCaptions.Delete);
span.InnerHtml.Append(unencoded: " ");
span.InnerHtml.Append(unencoded: "]");
return span;
}
public static Microsoft.AspNetCore.Html.IHtmlContent Ub_GetIconDetails
(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper html)
{
if (html is null)
{
throw new ArgumentNullException(paramName: nameof(html));
}
var icon =
TagHelpers.Utility.GetIconDetails();
return icon;
}
public static Microsoft.AspNetCore.Html.IHtmlContent Ub_GetIconCreate
(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper html)
{
if (html is null)
{
throw new ArgumentNullException(paramName: nameof(html));
}
var icon =
TagHelpers.Utility.GetIconCreate();
return icon;
}
public static Microsoft.AspNetCore.Html.IHtmlContent DtatGetIconUpdate
(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper html)
{
if (html is null)
{
throw new ArgumentNullException(paramName: nameof(html));
}
var icon =
TagHelpers.Utility.GetIconUpdate();
return icon;
}
public static Microsoft.AspNetCore.Html.IHtmlContent DtatGetIconDelete
(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper html)
{
if (html is null)
{
throw new ArgumentNullException(paramName: nameof(html));
}
var icon =
TagHelpers.Utility.GetIconDelete();
return icon;
}
//------------------ Custom's
//public static Microsoft.AspNetCore.Html.IHtmlContent TextClickTo(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper html, string action, string iconClass, string to)
//{
// if (html is null)
// {
// throw new System
// .ArgumentNullException(paramName: nameof(html));
// }
// var p =
// new Microsoft.AspNetCore.Mvc
// .Rendering.TagBuilder(tagName: "p");
// p.AddCssClass("d-flex align-items-center fw-light");
// var i = $"<i class=\"flex-center border rounded fs-4 mx-2 p-1 {iconClass}\"></i>";
// var format = Resources.Messages.Information.ClickToThe;
// p.InnerHtml.AppendHtml(string.Format(format, i, action, to));
// return p;
//}
}

View File

@ -0,0 +1,22 @@
namespace Server.Infrastructure.Messages;
public interface IMessageHandler
{
bool AddPageError(string? message);
bool AddPageWarning(string? message);
bool AddPageSuccess(string? message);
bool AddToastError(string? message);
bool AddToastWarning(string? message);
bool AddToastSuccess(string? message);
bool AddMessage(MessageType type, string? message);
}

View File

@ -0,0 +1,12 @@
namespace Server.Infrastructure.Messages;
public enum MessageType : byte
{
PageError,
PageWarning,
PageSuccess,
ToastError,
ToastWarning,
ToastSuccess,
}

View File

@ -0,0 +1,60 @@
namespace Server.Infrastructure.Messages;
public static class Utility
{
static Utility()
{
}
public static bool AddMessage
(Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary tempData,
MessageType type, string? message)
{
message =
Framework.DataType.String.Fix(message);
if (message == null)
{
return false;
}
// **************************************************
// به دلایل خیلی زیادی، کد ذیل به صورتی که ملاحظه می‌کنید
// نوشته شده است، لذا در آن هیچ‌گونه تغییری اعمال نکنید
// **************************************************
System.Collections.Generic.List<string>? list;
var tempDataItems =
(tempData[key: type.ToString()] as
System.Collections.Generic.IList<string>);
if (tempDataItems == null)
{
list = new System.Collections.Generic.List<string>();
}
else
{
list =
tempDataItems as
System.Collections.Generic.List<string>;
if (list == null)
{
list = tempDataItems.ToList();
}
}
tempData[key: type.ToString()] = list;
// **************************************************
if (list.Contains(item: message))
{
return false;
}
list.Add(item: message);
return true;
}
}

View File

@ -0,0 +1,35 @@
namespace Server.Infrastructure.Settings;
public class ApplicationSettings : object
{
public static readonly string KeyName = nameof(ApplicationSettings);
public ApplicationSettings() : base()
{
ToastSettings =
new ToastSettings();
CultureSettings =
new CultureSettings();
}
// **********
public string? Version { get; set; }
// **********
// **********
public string? MasterPassword { get; set; }
// **********
// **********
public string[]? ActivationKeys { get; set; }
// **********
// **********
public ToastSettings ToastSettings { get; set; }
// **********
// **********
public CultureSettings CultureSettings { get; set; }
// **********
}

View File

@ -0,0 +1,31 @@
namespace Server.Infrastructure.Settings;
public class CultureSettings
{
public CultureSettings()
{
DefaultCulture = new CultureData()
{
Name = "فارسی - ایران",
Culture = "fa-IR",
};
SupportedCulture =
new List<CultureData>();
}
// **********
public CultureData DefaultCulture { get; set; }
// **********
// **********
public List<CultureData> SupportedCulture { get; set; }
// **********
public class CultureData
{
public string Name { get; set; }
public string Culture { get; set; }
}
}

View File

@ -0,0 +1,26 @@
namespace Server.Infrastructure.Settings
{
public class ToastSettings : object
{
public ToastSettings() : base()
{
DelayStep = 1000;
InitialDelay = 4000;
Style =
"top-25 end-0 p-3 opacity-50";
}
// **********
public string Style { get; set; }
// **********
// **********
public int DelayStep { get; set; }
// **********
// **********
public int InitialDelay { get; set; }
// **********
}
}

View File

@ -0,0 +1,48 @@
namespace Server.Infrastructure.TagHelpers.Buttons;
[Microsoft.AspNetCore.Razor.TagHelpers.HtmlTargetElement
(tag: "button-create",
ParentTag = "section-form-buttons",
TagStructure = Microsoft.AspNetCore.Razor.TagHelpers.TagStructure.WithoutEndTag)]
public class ButtonCreateTagHelper :
Microsoft.AspNetCore.Razor.TagHelpers.TagHelper
{
public ButtonCreateTagHelper() : base()
{
}
public override void Process
(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context,
Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output)
{
// **************************************************
var icon =
Utility.GetIconCreate();
// **************************************************
// **************************************************
var body =
new Microsoft.AspNetCore.Mvc
.Rendering.TagBuilder(tagName: "button");
body.Attributes.Add
(key: "type", value: "submit");
body.AddCssClass(value: "btn");
body.AddCssClass(value: "btn-primary");
body.InnerHtml.AppendHtml(content: icon);
body.InnerHtml.Append(unencoded: Resources.ButtonCaptions.Create);
// **************************************************
// **************************************************
output.TagName = null;
output.TagMode =
Microsoft.AspNetCore.Razor
.TagHelpers.TagMode.StartTagAndEndTag;
output.Content.SetHtmlContent(htmlContent: body);
// **************************************************
}
}

View File

@ -0,0 +1,48 @@
namespace Server.Infrastructure.TagHelpers.Buttons;
[Microsoft.AspNetCore.Razor.TagHelpers.HtmlTargetElement
(tag: "button-delete",
ParentTag = "section-form-buttons",
TagStructure = Microsoft.AspNetCore.Razor.TagHelpers.TagStructure.WithoutEndTag)]
public class ButtonDeleteTagHelper :
Microsoft.AspNetCore.Razor.TagHelpers.TagHelper
{
public ButtonDeleteTagHelper() : base()
{
}
public override void Process
(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context,
Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output)
{
// **************************************************
var icon =
Utility.GetIconDelete();
// **************************************************
// **************************************************
var body =
new Microsoft.AspNetCore.Mvc
.Rendering.TagBuilder(tagName: "button");
body.Attributes.Add
(key: "type", value: "submit");
body.AddCssClass(value: "btn");
body.AddCssClass(value: "btn-danger");
body.InnerHtml.AppendHtml(content: icon);
body.InnerHtml.Append(unencoded: Resources.ButtonCaptions.Delete);
// **************************************************
// **************************************************
output.TagName = null;
output.TagMode =
Microsoft.AspNetCore.Razor
.TagHelpers.TagMode.StartTagAndEndTag;
output.Content.SetHtmlContent(htmlContent: body);
// **************************************************
}
}

View File

@ -0,0 +1,48 @@
namespace Server.Infrastructure.TagHelpers.Buttons;
[Microsoft.AspNetCore.Razor.TagHelpers.HtmlTargetElement
(tag: "button-reset",
ParentTag = "section-form-buttons",
TagStructure = Microsoft.AspNetCore.Razor.TagHelpers.TagStructure.WithoutEndTag)]
public class ButtonResetTagHelper :
Microsoft.AspNetCore.Razor.TagHelpers.TagHelper
{
public ButtonResetTagHelper() : base()
{
}
public override void Process
(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context,
Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output)
{
// **************************************************
var icon =
Utility.GetIconReset();
// **************************************************
// **************************************************
var body =
new Microsoft.AspNetCore.Mvc
.Rendering.TagBuilder(tagName: "button");
body.Attributes.Add
(key: "type", value: "reset");
body.AddCssClass(value: "btn");
body.AddCssClass(value: "btn-secondary");
body.InnerHtml.AppendHtml(content: icon);
body.InnerHtml.Append(unencoded: Resources.ButtonCaptions.Reset);
// **************************************************
// **************************************************
output.TagName = null;
output.TagMode =
Microsoft.AspNetCore.Razor
.TagHelpers.TagMode.StartTagAndEndTag;
output.Content.SetHtmlContent(htmlContent: body);
// **************************************************
}
}

View File

@ -0,0 +1,48 @@
namespace Server.Infrastructure.TagHelpers.Buttons;
[Microsoft.AspNetCore.Razor.TagHelpers.HtmlTargetElement
(tag: "button-save",
ParentTag = "section-form-buttons",
TagStructure = Microsoft.AspNetCore.Razor.TagHelpers.TagStructure.WithoutEndTag)]
public class ButtonSaveTagHelper :
Microsoft.AspNetCore.Razor.TagHelpers.TagHelper
{
public ButtonSaveTagHelper() : base()
{
}
public override void Process
(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context,
Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output)
{
// **************************************************
var icon =
Utility.GetIconUpdate();
// **************************************************
// **************************************************
var body =
new Microsoft.AspNetCore.Mvc
.Rendering.TagBuilder(tagName: "button");
body.Attributes.Add
(key: "type", value: "submit");
body.AddCssClass(value: "btn");
body.AddCssClass(value: "btn-primary");
body.InnerHtml.AppendHtml(content: icon);
body.InnerHtml.Append(unencoded: Resources.ButtonCaptions.Save);
// **************************************************
// **************************************************
output.TagName = null;
output.TagMode =
Microsoft.AspNetCore.Razor
.TagHelpers.TagMode.StartTagAndEndTag;
output.Content.SetHtmlContent(htmlContent: body);
// **************************************************
}
}

View File

@ -0,0 +1,48 @@
namespace Server.Infrastructure.TagHelpers.Buttons;
[Microsoft.AspNetCore.Razor.TagHelpers.HtmlTargetElement
(tag: "button-send",
ParentTag = "section-form-buttons",
TagStructure = Microsoft.AspNetCore.Razor.TagHelpers.TagStructure.WithoutEndTag)]
public class ButtonSendTagHelper :
Microsoft.AspNetCore.Razor.TagHelpers.TagHelper
{
public ButtonSendTagHelper() : base()
{
}
public override void Process
(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context,
Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output)
{
// **************************************************
var icon =
Utility.GetIconSend();
// **************************************************
// **************************************************
var body =
new Microsoft.AspNetCore.Mvc
.Rendering.TagBuilder(tagName: "button");
body.Attributes.Add
(key: "type", value: "submit");
body.AddCssClass(value: "btn");
body.AddCssClass(value: "btn-primary");
body.InnerHtml.AppendHtml(content: icon);
body.InnerHtml.Append(unencoded: Resources.ButtonCaptions.Send);
// **************************************************
// **************************************************
output.TagName = null;
output.TagMode =
Microsoft.AspNetCore.Razor
.TagHelpers.TagMode.StartTagAndEndTag;
output.Content.SetHtmlContent(htmlContent: body);
// **************************************************
}
}

View File

@ -0,0 +1,49 @@
namespace Server.Infrastructure.TagHelpers.Buttons;
[Microsoft.AspNetCore.Razor.TagHelpers.HtmlTargetElement
(tag: "uni-button",
ParentTag = "section-form-buttons",
TagStructure = Microsoft.AspNetCore.Razor.TagHelpers.TagStructure.WithoutEndTag)]
public class ButtonSubmitCustomLabel :
Microsoft.AspNetCore.Razor.TagHelpers.TagHelper
{
public string Label { get; set; }
public ButtonSubmitCustomLabel() : base()
{
}
public override void Process
(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context,
Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output)
{
// **************************************************
var icon =
Utility.GetIconUpdate();
// **************************************************
// **************************************************
var body =
new Microsoft.AspNetCore.Mvc
.Rendering.TagBuilder(tagName: "button");
body.Attributes.Add
(key: "type", value: "submit");
body.AddCssClass(value: "btn");
body.AddCssClass(value: "btn-primary");
body.InnerHtml.AppendHtml(content: icon);
body.InnerHtml.Append(unencoded: Label);
// **************************************************
// **************************************************
output.TagName = null;
output.TagMode =
Microsoft.AspNetCore.Razor
.TagHelpers.TagMode.StartTagAndEndTag;
output.Content.SetHtmlContent(htmlContent: body);
// **************************************************
}
}

View File

@ -0,0 +1,176 @@
//using Microsoft.AspNetCore.Mvc;
//namespace Infrastructure.TagHelpers.CheckThemOut;
//[Microsoft.AspNetCore.Razor.TagHelpers.HtmlTargetElement
// (tag: Constants.HtmlTag.TableData,
// Attributes = "page-information-view-model")]
//public class PagerTagHelper : Microsoft.AspNetCore.Razor.TagHelpers.TagHelper
//{
// #region Constructor(s)
//#pragma warning disable CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable.
// public PagerTagHelper
//#pragma warning restore CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable.
// (Microsoft.AspNetCore.Mvc.Routing.IUrlHelperFactory urlHelperFactory) : base()
// {
// PageAction = "./Index";
// UrlHelperFactory = urlHelperFactory;
// }
// #endregion /Constructor(s)
// #region Property(ies)
// public string PageClass { get; set; }
// public string? PageAction { get; set; }
// public string PageDefaultClass { get; set; }
// public string PageSelectedClass { get; set; }
// public bool PageClassesEnabled { get; set; }
// [Microsoft.AspNetCore.Mvc.ViewFeatures.ViewContext]
// [Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeNotBound]
// public Microsoft.AspNetCore.Mvc.Rendering.ViewContext ViewContext { get; set; }
// public ViewModels.Shared.PaginationViewModel PageInformationViewModel { get; set; }
// protected Microsoft.AspNetCore.Mvc.Routing.IUrlHelperFactory UrlHelperFactory { get; }
// #endregion /Property(ies)
// #region Process
// // Development in progress...
// public override
// void
// Process
// (Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context,
// Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output)
// {
// var urlHelper =
// UrlHelperFactory.GetUrlHelper
// (context: ViewContext);
// var result =
// new Microsoft.AspNetCore.Mvc.Rendering.TagBuilder
// (tagName: Constants.HtmlTag.TableData);
// var ulTag =
// new Microsoft.AspNetCore.Mvc.Rendering.TagBuilder
// (tagName: Constants.HtmlTag.Unorderedlist);
// ulTag.AddCssClass(value: "pagination");
// // **************************************************
// var liTag = BuildListItemTag();
// var aTag =
// BuildAnchorTag(urlHelper: urlHelper,
// caption: Resources.ButtonCaptions.Previous,
// pageNumber: PageInformationViewModel.PageNumber - 1);
// if (PageInformationViewModel.PageNumber <= 1)
// {
// aTag.AddCssClass(value: Constants.CssClass.Disabled);
// }
// // **************************************************
// // **************************************************
// liTag.InnerHtml.AppendHtml(content: aTag);
// ulTag.InnerHtml.AppendHtml(content: liTag);
// // **************************************************
// for (int index = 1; index <= PageInformationViewModel.PageCount; index++)
// {
// if (index == PageInformationViewModel.PageNumber ||
// index == PageInformationViewModel.PageNumber - 1 ||
// index == PageInformationViewModel.PageNumber + 1)
// {
// liTag =
// BuildListItemTag();
// aTag = BuildAnchorTag
// (pageNumber: index,
// urlHelper: urlHelper, caption: index.ToString());
// liTag.InnerHtml.AppendHtml(content: aTag);
// ulTag.InnerHtml.AppendHtml(content: liTag);
// }
// }
// // **************************************************
// liTag = BuildListItemTag();
// aTag = BuildAnchorTag
// (urlHelper: urlHelper,
// caption: Resources.ButtonCaptions.Next,
// pageNumber: PageInformationViewModel.PageNumber + 1);
// if (PageInformationViewModel.PageNumber >= PageInformationViewModel.PageCount)
// {
// aTag.AddCssClass(value: Constants.CssClass.Disabled);
// }
// // **************************************************
// // **************************************************
// liTag.InnerHtml.AppendHtml(content: aTag);
// ulTag.InnerHtml.AppendHtml(content: liTag);
// // **************************************************
// result.InnerHtml.AppendHtml(content: ulTag);
// output.Content.AppendHtml(htmlContent: result.InnerHtml);
// }
// #endregion /Process
// #region Build List Item Tag
// private static Microsoft.AspNetCore.Mvc.Rendering.TagBuilder BuildListItemTag()
// {
// var tag =
// new Microsoft.AspNetCore.Mvc.Rendering.TagBuilder
// (tagName: Constants.HtmlTag.ListItem);
// tag.AddCssClass(value: "page-item");
// return tag;
// }
// #endregion /Build List Item Tag
// #region Build Anchor Tag
// private
// Microsoft.AspNetCore.Mvc.Rendering.TagBuilder
// BuildAnchorTag
// (string caption, int pageNumber, IUrlHelper urlHelper)
// {
// var tag =
// new Microsoft.AspNetCore.Mvc.Rendering.TagBuilder
// (tagName: Constants.HtmlTag.Anchor);
// tag.Attributes["href"] =
// // .Action -> using Microsoft.AspNetCore.Mvc
// urlHelper.Action
// (action: PageAction,
// values: new { PageNumber = pageNumber, PageInformationViewModel.PageSize });
// if (PageClassesEnabled)
// {
// var style =
// pageNumber ==
// PageInformationViewModel.PageNumber ?
// PageSelectedClass : PageDefaultClass;
// var cssClass =
// $"{PageClass} {style}";
// tag.AddCssClass(value: cssClass);
// }
// tag.InnerHtml.Append(unencoded: caption);
// return tag;
// }
// #endregion /Build Anchor Tag
//}

View File

@ -0,0 +1,5 @@
 https://bigfont.ca/taghelper-structure/
https://www.yogihosting.com/aspnet-core-custom-tag-helpers/
https://wesleycabus.be/writing-a-custom-taghelper-in-aspnet-5
https://riptutorial.com/asp-net-core/example/11152/custom-tag-helper
https://stackoverflow.com/questions/51904629/how-to-create-custom-tag-helper-containing-other-tag-helpers

View File

@ -0,0 +1,106 @@
namespace Server.Infrastructure.TagHelpers;
[Microsoft.AspNetCore.Razor.TagHelpers
.HtmlTargetElement(tag: Constants.TagHelper.FullCheckBox,
TagStructure = Microsoft.AspNetCore.Razor.TagHelpers.TagStructure.WithoutEndTag)]
public class FullCheckBoxTagHelper :
Microsoft.AspNetCore.Razor.TagHelpers.TagHelper
{
public FullCheckBoxTagHelper
(Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator generator) : base()
{
Generator = generator;
}
private Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator Generator { get; }
[Microsoft.AspNetCore.Mvc.ViewFeatures.ViewContext]
[Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeNotBound]
public Microsoft.AspNetCore.Mvc.Rendering.ViewContext? ViewContext { get; set; }
[Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeName(name: "asp-for")]
public Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression? For { get; set; }
public override async Task ProcessAsync
(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context,
Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output)
{
if (For is null)
{
throw new ArgumentNullException(paramName: nameof(For));
}
if (ViewContext is null)
{
throw new ArgumentNullException(paramName: nameof(ViewContext));
}
// **************************************************
var div =
new Microsoft.AspNetCore.Mvc
.Rendering.TagBuilder(tagName: "div");
div.AddCssClass(value: "mb-3");
// **************************************************
// **************************************************
var innerDiv =
new Microsoft.AspNetCore.Mvc
.Rendering.TagBuilder(tagName: "div");
innerDiv.AddCssClass(value: "form-check");
div.InnerHtml.AppendHtml(content: innerDiv);
// **************************************************
// **************************************************
var checkBox =
await
Utility.GenerateCheckBoxAsync
(generator: Generator, viewContext: ViewContext, @for: For);
innerDiv.InnerHtml.AppendHtml(encoded: checkBox);
// **************************************************
// **************************************************
var label =
await
Utility.GenerateLabelAsync(generator: Generator,
viewContext: ViewContext, @for: For, cssClass: "form-check-label");
innerDiv.InnerHtml.AppendHtml(encoded: label);
// **************************************************
// **************************************************
output.TagName = null;
output.TagMode =
Microsoft.AspNetCore.Razor
.TagHelpers.TagMode.StartTagAndEndTag;
output.Content.SetHtmlContent(htmlContent: div);
// **************************************************
}
//private async System.Threading.Tasks.Task<string> CreateLabelElementAsync()
//{
// var tagBuilder =
// Generator.GenerateLabel
// (viewContext: ViewContext,
// modelExplorer: For.ModelExplorer, expression: For.Name, labelText: null,
// htmlAttributes: new { @class = });
// var writer =
// new System.IO.StringWriter();
// tagBuilder.WriteTo(writer: writer,
// encoder: Microsoft.AspNetCore.Razor.TagHelpers.NullHtmlEncoder.Default);
// var result =
// writer.ToString();
// await writer.DisposeAsync();
// return result;
//}
}

View File

@ -0,0 +1,106 @@
namespace Server.Infrastructure.TagHelpers;
[Microsoft.AspNetCore.Razor.TagHelpers
.HtmlTargetElement(tag: Constants.TagHelper.FullInput,
TagStructure = Microsoft.AspNetCore.Razor.TagHelpers.TagStructure.WithoutEndTag)]
public class FullInputTagHelper :
Microsoft.AspNetCore.Razor.TagHelpers.TagHelper
{
public FullInputTagHelper
(Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator generator) : base()
{
Generator = generator;
}
private Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator Generator { get; }
[Microsoft.AspNetCore.Mvc.ViewFeatures.ViewContext]
[Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeNotBound]
public Microsoft.AspNetCore.Mvc.Rendering.ViewContext? ViewContext { get; set; }
[Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeName(name: "asp-for")]
public Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression? For { get; set; }
public override async Task ProcessAsync
(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context,
Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output)
{
if (For is null)
{
throw new Exception
(message: $"'{nameof(For)}' property is null ");
}
if (ViewContext is null)
{
throw new Exception
(message: $"'{nameof(ViewContext)}' property is null ");
}
// **************************************************
var div =
new Microsoft.AspNetCore.Mvc
.Rendering.TagBuilder(tagName: "div");
div.AddCssClass(value: "mb-3");
// **************************************************
// **************************************************
var label =
await
Utility.GenerateLabelAsync
(generator: Generator, viewContext: ViewContext, @for: For);
div.InnerHtml.AppendHtml(encoded: label);
// **************************************************
// **************************************************
string? dirString = null;
var dirAttribute =
output.Attributes["dir"];
if (dirAttribute is not null)
{
var dirValue =
dirAttribute.Value;
if (dirValue is not null)
{
dirString =
dirValue.ToString()?
.Replace(oldValue: "{", newValue: string.Empty)
.Replace(oldValue: "}", newValue: string.Empty);
}
}
// **************************************************
// **************************************************
var textBox =
await
Utility.GenerateTextBoxAsync(generator: Generator,
viewContext: ViewContext, @for: For, dir: dirString);
div.InnerHtml.AppendHtml(encoded: textBox);
// **************************************************
// **************************************************
var validationMessage =
await
Utility.GenerateValidationMessageAsync
(generator: Generator, viewContext: ViewContext, @for: For);
div.InnerHtml.AppendHtml(encoded: validationMessage);
// **************************************************
// **************************************************
output.TagName = null;
output.TagMode =
Microsoft.AspNetCore.Razor
.TagHelpers.TagMode.StartTagAndEndTag;
output.Content.SetHtmlContent(htmlContent: div);
// **************************************************
}
}

View File

@ -0,0 +1,83 @@
namespace Server.Infrastructure.TagHelpers;
[Microsoft.AspNetCore.Razor.TagHelpers
.HtmlTargetElement(tag: Constants.TagHelper.FullPasswordInput,
TagStructure = Microsoft.AspNetCore.Razor.TagHelpers.TagStructure.WithoutEndTag)]
public class FullPasswordInputTagHelper :
Microsoft.AspNetCore.Razor.TagHelpers.TagHelper
{
public FullPasswordInputTagHelper
(Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator generator) : base()
{
Generator = generator;
}
private Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator Generator { get; }
[Microsoft.AspNetCore.Mvc.ViewFeatures.ViewContext]
[Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeNotBound]
public Microsoft.AspNetCore.Mvc.Rendering.ViewContext? ViewContext { get; set; }
[Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeName(name: "asp-for")]
public Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression? For { get; set; }
public override async Task ProcessAsync
(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context,
Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output)
{
if (For is null)
{
throw new ArgumentNullException(paramName: nameof(For));
}
if (ViewContext is null)
{
throw new ArgumentNullException(paramName: nameof(ViewContext));
}
// **************************************************
var div =
new Microsoft.AspNetCore.Mvc
.Rendering.TagBuilder(tagName: "div");
div.AddCssClass(value: "mb-3");
// **************************************************
// **************************************************
var label =
await
Utility.GenerateLabelAsync
(generator: Generator, viewContext: ViewContext, @for: For);
div.InnerHtml.AppendHtml(encoded: label);
// **************************************************
// **************************************************
var textBox =
await
Utility.GeneratePasswordTextBoxAsync
(generator: Generator, viewContext: ViewContext, @for: For);
div.InnerHtml.AppendHtml(encoded: textBox);
// **************************************************
// **************************************************
var validationMessage =
await
Utility.GenerateValidationMessageAsync
(generator: Generator, viewContext: ViewContext, @for: For);
div.InnerHtml.AppendHtml(encoded: validationMessage);
// **************************************************
// **************************************************
output.TagName = null;
output.TagMode =
Microsoft.AspNetCore.Razor
.TagHelpers.TagMode.StartTagAndEndTag;
output.Content.SetHtmlContent(htmlContent: div);
// **************************************************
}
}

View File

@ -0,0 +1,98 @@
namespace Server.Infrastructure.TagHelpers;
[Microsoft.AspNetCore.Razor.TagHelpers
.HtmlTargetElement(tag: Constants.TagHelper.FullSelect,
TagStructure = Microsoft.AspNetCore.Razor.TagHelpers.TagStructure.WithoutEndTag)]
public class FullSelectTagHelper :
Microsoft.AspNetCore.Razor.TagHelpers.TagHelper
{
public FullSelectTagHelper
(Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator generator) : base()
{
Generator = generator;
}
private Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator Generator { get; }
[Microsoft.AspNetCore.Mvc.ViewFeatures.ViewContext]
[Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeNotBound]
public Microsoft.AspNetCore.Mvc.Rendering.ViewContext? ViewContext { get; set; }
[Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeName(name: "asp-for")]
public Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression? For { get; set; }
[Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeName(name: "asp-items")]
public IEnumerable<Microsoft.AspNetCore.Mvc.Rendering.SelectListItem>? Items { get; set; }
[Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeName(name: "asp-option-label")]
public string? OptionLabel { get; set; }
public override async Task ProcessAsync
(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context,
Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output)
{
if (For is null)
{
throw new Exception
(message: $"'{nameof(For)}' property is null ");
}
if (Items is null)
{
throw new Exception
(message: $"'{nameof(Items)}' property is null ");
}
if (ViewContext is null)
{
throw new Exception
(message: $"'{nameof(ViewContext)}' property is null ");
}
// **************************************************
var div =
new Microsoft.AspNetCore.Mvc
.Rendering.TagBuilder(tagName: "div");
div.AddCssClass(value: "mb-3");
// **************************************************
// **************************************************
var label =
await
Utility.GenerateLabelAsync
(generator: Generator, viewContext: ViewContext, @for: For);
div.InnerHtml.AppendHtml(encoded: label);
// **************************************************
// **************************************************
var select =
await
Utility.GenerateSelectAsync
(generator: Generator, viewContext: ViewContext, @for: For, selectList: Items);
div.InnerHtml.AppendHtml(encoded: select);
// **************************************************
// **************************************************
var validationMessage =
await
Utility.GenerateValidationMessageAsync
(generator: Generator, viewContext: ViewContext, @for: For);
div.InnerHtml.AppendHtml(encoded: validationMessage);
// **************************************************
// **************************************************
output.TagName = null;
output.TagMode =
Microsoft.AspNetCore.Razor
.TagHelpers.TagMode.StartTagAndEndTag;
output.Content.SetHtmlContent(htmlContent: div);
// **************************************************
}
}

View File

@ -0,0 +1,83 @@
namespace Server.Infrastructure.TagHelpers;
[Microsoft.AspNetCore.Razor.TagHelpers
.HtmlTargetElement(tag: Constants.TagHelper.FullTextArea,
TagStructure = Microsoft.AspNetCore.Razor.TagHelpers.TagStructure.WithoutEndTag)]
public class FullTextAreaTagHelper :
Microsoft.AspNetCore.Razor.TagHelpers.TagHelper
{
public FullTextAreaTagHelper
(Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator generator) : base()
{
Generator = generator;
}
private Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator Generator { get; }
[Microsoft.AspNetCore.Mvc.ViewFeatures.ViewContext]
[Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeNotBound]
public Microsoft.AspNetCore.Mvc.Rendering.ViewContext? ViewContext { get; set; }
[Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeName(name: "asp-for")]
public Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression? For { get; set; }
public override async Task ProcessAsync
(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context,
Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output)
{
if (For is null)
{
throw new ArgumentNullException(paramName: nameof(For));
}
if (ViewContext is null)
{
throw new ArgumentNullException(paramName: nameof(ViewContext));
}
// **************************************************
var div =
new Microsoft.AspNetCore.Mvc
.Rendering.TagBuilder(tagName: "div");
div.AddCssClass(value: "mb-3");
// **************************************************
// **************************************************
var label =
await
Utility.GenerateLabelAsync
(generator: Generator, viewContext: ViewContext, @for: For);
div.InnerHtml.AppendHtml(encoded: label);
// **************************************************
// **************************************************
var textBox =
await
Utility.GenerateTextAreaAsync
(generator: Generator, viewContext: ViewContext, @for: For);
div.InnerHtml.AppendHtml(encoded: textBox);
// **************************************************
// **************************************************
var validationMessage =
await
Utility.GenerateValidationMessageAsync
(generator: Generator, viewContext: ViewContext, @for: For);
div.InnerHtml.AppendHtml(encoded: validationMessage);
// **************************************************
// **************************************************
output.TagName = null;
output.TagMode =
Microsoft.AspNetCore.Razor
.TagHelpers.TagMode.StartTagAndEndTag;
output.Content.SetHtmlContent(htmlContent: div);
// **************************************************
}
}

View File

@ -0,0 +1,179 @@
using Framework.DataType;
namespace Server.Infrastructure.TagHelpers;
public class ModelExpressionConverter : object
{
public ModelExpressionConverter
(Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression modelExpression)
{
IsLeftToRight = false;
HasBeenConverted = false;
ModelExpression = modelExpression;
if (modelExpression.ModelExplorer.ModelType.IsEnum)
{
ConvertLong();
}
else
{
switch (modelExpression.ModelExplorer.ModelType)
{
case Type typeGuid when typeGuid == typeof(Guid):
{
ConvertGuid();
break;
}
case Type typeInt when typeInt == typeof(int):
case Type typeByte when typeByte == typeof(byte):
case Type typeLong when typeLong == typeof(long):
{
ConvertLong();
break;
}
case Type typeDateTime when typeDateTime == typeof(DateTime):
{
ConvertDateTime();
break;
}
case Type typeDateTimeOffset when typeDateTimeOffset == typeof(DateTimeOffset):
case Type typeDateTimeOffsetOrNull when typeDateTimeOffsetOrNull == typeof(DateTimeOffset?):
{
ConvertDateTimeOffset();
break;
}
}
}
}
public string? Value { get; protected set; }
public bool IsLeftToRight { get; protected set; }
public bool HasBeenConverted { get; protected set; }
protected Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression ModelExpression { get; }
protected void ConvertGuid()
{
object value =
ModelExpression.Model;
IsLeftToRight = true;
HasBeenConverted = true;
if (value is null)
{
Value = Constants.Format.NullValue;
return;
}
Value = value.ToString();
}
protected void ConvertLong()
{
object value =
ModelExpression.Model;
IsLeftToRight = true;
HasBeenConverted = true;
if (value is null)
{
Value = Constants.Format.NullValue;
return;
}
var valueInteget =
Convert.ToInt64(value: value);
var result =
valueInteget.ToString
(format: Constants.Format.Integer);
result = result
.ConvertDigitsToUnicode();
if (result is null)
{
Value = Constants.Format.NullValue;
return;
}
Value = result;
}
protected void ConvertDateTime()
{
object value =
ModelExpression.Model;
IsLeftToRight = true;
HasBeenConverted = true;
if (value is null)
{
Value = Constants.Format.NullValue;
return;
}
var valueDateTime =
(DateTime)value;
var result =
valueDateTime.ToString
(format: Constants.Format.DateTime);
result = result
.ConvertDigitsToUnicode();
if (result is null)
{
Value = Constants.Format.NullValue;
return;
}
Value = result;
}
protected void ConvertDateTimeOffset()
{
object value =
ModelExpression.Model;
IsLeftToRight = true;
HasBeenConverted = true;
if (value is null)
{
Value = Constants.Format.NullValue;
return;
}
var valueDateTime =
(DateTimeOffset)value;
var result =
valueDateTime.DateTime.ToString
(format: Constants.Format.DateTime);
result = result
.ConvertDigitsToUnicode();
if (result is null)
{
Value = Constants.Format.NullValue;
return;
}
Value = result;
}
}

View File

@ -0,0 +1,142 @@
namespace Server.Infrastructure.TagHelpers;
[Microsoft.AspNetCore.Razor.TagHelpers
.HtmlTargetElement(tag: Constants.TagHelper.ReadOnlyCheckBox,
TagStructure = Microsoft.AspNetCore.Razor.TagHelpers.TagStructure.WithoutEndTag)]
public class ReadOnlyCheckBoxTagHelper :
Microsoft.AspNetCore.Razor.TagHelpers.TagHelper
{
public ReadOnlyCheckBoxTagHelper
(Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator generator) : base()
{
Generator = generator;
}
private Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator Generator { get; }
[Microsoft.AspNetCore.Mvc.ViewFeatures.ViewContext]
[Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeNotBound]
public Microsoft.AspNetCore.Mvc.Rendering.ViewContext? ViewContext { get; set; }
[Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeName(name: "asp-for")]
public Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression? For { get; set; }
public override async Task ProcessAsync
(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context,
Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output)
{
// **************************************************
var div =
new Microsoft.AspNetCore.Mvc
.Rendering.TagBuilder(tagName: "div");
div.AddCssClass(value: "mb-3");
// **************************************************
// **************************************************
var innerDiv =
new Microsoft.AspNetCore.Mvc
.Rendering.TagBuilder(tagName: "div");
innerDiv.AddCssClass(value: "form-check");
div.InnerHtml.AppendHtml(content: innerDiv);
// **************************************************
// **************************************************
var textBoxElement =
await
CreateCheckBoxElementAsync();
innerDiv.InnerHtml.AppendHtml(encoded: textBoxElement);
// **************************************************
// **************************************************
var labelElement =
await
CreateLabelElementAsync();
innerDiv.InnerHtml.AppendHtml(encoded: labelElement);
// **************************************************
// **************************************************
output.TagName = null;
output.TagMode =
Microsoft.AspNetCore.Razor
.TagHelpers.TagMode.StartTagAndEndTag;
output.Content.SetHtmlContent(htmlContent: div);
// **************************************************
}
private async Task<string> CreateLabelElementAsync()
{
if (For is null)
{
throw new ArgumentNullException(paramName: nameof(For));
}
var tagBuilder =
Generator.GenerateLabel
(viewContext: ViewContext,
modelExplorer: For.ModelExplorer, expression: For.Name, labelText: null,
htmlAttributes: new { @class = "form-check-label" });
var writer =
new StringWriter();
tagBuilder.WriteTo(writer: writer,
encoder: Microsoft.AspNetCore.Razor.TagHelpers.NullHtmlEncoder.Default);
var result =
writer.ToString();
await writer.DisposeAsync();
return result;
}
private async Task<string> CreateCheckBoxElementAsync()
{
if (For is null)
{
throw new ArgumentNullException(paramName: nameof(For));
}
Microsoft.AspNetCore.Mvc.Rendering.TagBuilder tagBuilder;
bool? isChecked = null;
if (For.Model is not null)
{
isChecked =
Convert
.ToBoolean(value: For.Model);
}
tagBuilder =
Generator.GenerateCheckBox
(viewContext: ViewContext,
modelExplorer: For.ModelExplorer,
expression: For.Name, isChecked: isChecked, htmlAttributes: null);
tagBuilder.AddCssClass(value: "form-check-input");
tagBuilder.Attributes.Add(key: "disabled", value: null);
//tagBuilder.Attributes.Add(key: "disabled", value: "disabled");
var writer =
new StringWriter();
tagBuilder.WriteTo(writer: writer,
encoder: Microsoft.AspNetCore.Razor.TagHelpers.NullHtmlEncoder.Default);
var result =
writer.ToString();
await writer.DisposeAsync();
return result;
}
}

View File

@ -0,0 +1,180 @@
namespace Server.Infrastructure.TagHelpers;
/// <summary>
/// https://stackoverflow.com/questions/51904629/how-to-create-custom-tag-helper-containing-other-tag-helpers
/// https://stackoverflow.com/questions/47547844/tag-helper-embedded-in-another-tag-helpers-code-doesnt-render
/// https://stackoverflow.com/questions/46681692/combine-taghelper-statements
/// </summary>
[Microsoft.AspNetCore.Razor.TagHelpers
.HtmlTargetElement(tag: Constants.TagHelper.ReadOnlyInput,
TagStructure = Microsoft.AspNetCore.Razor.TagHelpers.TagStructure.WithoutEndTag)]
public class ReadOnlyInputTagHelper :
Microsoft.AspNetCore.Razor.TagHelpers.TagHelper
{
public ReadOnlyInputTagHelper
(Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator generator) : base()
{
Generator = generator;
}
private Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator Generator { get; }
[Microsoft.AspNetCore.Mvc.ViewFeatures.ViewContext]
[Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeNotBound]
public Microsoft.AspNetCore.Mvc.Rendering.ViewContext? ViewContext { get; set; }
[Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeName(name: "asp-for")]
public Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression? For { get; set; }
public override async Task ProcessAsync
(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context,
Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output)
{
// **************************************************
var div =
new Microsoft.AspNetCore.Mvc
.Rendering.TagBuilder(tagName: "div");
div.AddCssClass(value: "mb-3");
// **************************************************
// **************************************************
var labelElement =
await
CreateLabelElementAsync();
div.InnerHtml.AppendHtml(encoded: labelElement);
// **************************************************
// **************************************************
string? dirString = null;
var dirAttribute =
output.Attributes["dir"];
if (dirAttribute is not null)
{
var dirValue =
dirAttribute.Value;
if (dirValue is not null)
{
dirString =
dirValue.ToString()?
.Replace(oldValue: "{", newValue: string.Empty)
.Replace(oldValue: "}", newValue: string.Empty);
}
}
// **************************************************
// **************************************************
var textBoxElement =
await
CreateTextBoxElementAsync(dir: dirString);
div.InnerHtml.AppendHtml(encoded: textBoxElement);
// **************************************************
// **************************************************
output.TagName = null;
output.TagMode =
Microsoft.AspNetCore.Razor
.TagHelpers.TagMode.StartTagAndEndTag;
output.Content.SetHtmlContent(htmlContent: div);
// **************************************************
}
private async Task<string> CreateLabelElementAsync()
{
if (For is null)
{
throw new ArgumentNullException(paramName: nameof(For));
}
var tagBuilder =
Generator.GenerateLabel
(viewContext: ViewContext,
modelExplorer: For.ModelExplorer, expression: For.Name, labelText: null,
htmlAttributes: new { @class = "form-label" });
var writer =
new StringWriter();
tagBuilder.WriteTo(writer: writer, encoder: Microsoft
.AspNetCore.Razor.TagHelpers.NullHtmlEncoder.Default);
var result =
writer.ToString();
await writer.DisposeAsync();
return result;
}
private async Task<string> CreateTextBoxElementAsync(string? dir = null)
{
if (For is null)
{
throw new Exception
(message: $"'{nameof(For)}' property is null ");
}
Microsoft.AspNetCore.Mvc.Rendering.TagBuilder tagBuilder;
var converter =
new ModelExpressionConverter(modelExpression: For);
if (converter.HasBeenConverted)
{
tagBuilder =
Generator.GenerateTextBox
(viewContext: ViewContext,
modelExplorer: For.ModelExplorer,
expression: For.Name, value: converter.Value,
format: null, htmlAttributes: null);
}
else
{
tagBuilder =
Generator.GenerateTextBox
(viewContext: ViewContext,
modelExplorer: For.ModelExplorer,
expression: For.Name, value: For.Model,
format: null, htmlAttributes: null);
}
tagBuilder.AddCssClass(value: "form-control");
tagBuilder.Attributes.Add(key: "disabled", value: null);
//tagBuilder.Attributes.Add(key: "disabled", value: "disabled");
//tagBuilder.Attributes.Add(key: "readonly", value: null);
//tagBuilder.Attributes.Add(key: "readonly", value: "readonly");
if (converter.IsLeftToRight)
{
tagBuilder.AddCssClass(value: "ltr");
}
else
{
if (string.IsNullOrWhiteSpace(value: dir) == false)
{
tagBuilder.Attributes.Add(key: "dir", value: dir);
}
}
var writer =
new StringWriter();
tagBuilder.WriteTo(writer: writer, encoder: Microsoft
.AspNetCore.Razor.TagHelpers.NullHtmlEncoder.Default);
var result =
writer.ToString();
await writer.DisposeAsync();
return result;
}
}

View File

@ -0,0 +1,125 @@
namespace Server.Infrastructure.TagHelpers;
[Microsoft.AspNetCore.Razor.TagHelpers
.HtmlTargetElement(tag: Constants.TagHelper.ReadOnlyTextArea,
TagStructure = Microsoft.AspNetCore.Razor.TagHelpers.TagStructure.WithoutEndTag)]
public class ReadOnlyTextAreaTagHelper :
Microsoft.AspNetCore.Razor.TagHelpers.TagHelper
{
public ReadOnlyTextAreaTagHelper
(Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator generator) : base()
{
Generator = generator;
}
private Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator Generator { get; }
[Microsoft.AspNetCore.Mvc.ViewFeatures.ViewContext]
[Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeNotBound]
public Microsoft.AspNetCore.Mvc.Rendering.ViewContext? ViewContext { get; set; }
[Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeName(name: "asp-for")]
public Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression? For { get; set; }
public override async Task ProcessAsync
(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context,
Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output)
{
// **************************************************
var div =
new Microsoft.AspNetCore.Mvc
.Rendering.TagBuilder(tagName: "div");
div.AddCssClass(value: "mb-3");
// **************************************************
// **************************************************
var labelElement =
await
CreateLabelElementAsync();
div.InnerHtml.AppendHtml(encoded: labelElement);
// **************************************************
// **************************************************
var textBoxElement =
await
CreateTextAreaElementAsync();
div.InnerHtml.AppendHtml(encoded: textBoxElement);
// **************************************************
// **************************************************
output.TagName = null;
output.TagMode =
Microsoft.AspNetCore.Razor
.TagHelpers.TagMode.StartTagAndEndTag;
output.Content.SetHtmlContent(htmlContent: div);
// **************************************************
}
private async Task<string> CreateLabelElementAsync()
{
if (For is null)
{
throw new ArgumentNullException(paramName: nameof(For));
}
var tagBuilder =
Generator.GenerateLabel
(viewContext: ViewContext,
modelExplorer: For.ModelExplorer, expression: For.Name, labelText: null,
htmlAttributes: new { @class = "form-label" });
var writer =
new StringWriter();
tagBuilder.WriteTo(writer: writer,
encoder: Microsoft.AspNetCore.Razor.TagHelpers.NullHtmlEncoder.Default);
var result =
writer.ToString();
await writer.DisposeAsync();
return result;
}
private async Task<string> CreateTextAreaElementAsync()
{
if (For is null)
{
throw new ArgumentNullException(paramName: nameof(For));
}
Microsoft.AspNetCore.Mvc.Rendering.TagBuilder tagBuilder;
tagBuilder =
Generator.GenerateTextArea
(viewContext: ViewContext,
modelExplorer: For.ModelExplorer,
expression: For.Name, rows: 3, columns: 60, htmlAttributes: null);
tagBuilder.AddCssClass(value: "form-control");
tagBuilder.Attributes.Add(key: "disabled", value: null);
//tagBuilder.Attributes.Add(key: "disabled", value: "disabled");
//tagBuilder.Attributes.Add(key: "readonly", value: null);
//tagBuilder.Attributes.Add(key: "readonly", value: "readonly");
var writer =
new StringWriter();
tagBuilder.WriteTo(writer: writer,
encoder: Microsoft.AspNetCore.Razor.TagHelpers.NullHtmlEncoder.Default);
var result =
writer.ToString();
await writer.DisposeAsync();
return result;
}
}

View File

@ -0,0 +1,43 @@
namespace Server.Infrastructure.TagHelpers;
[Microsoft.AspNetCore.Razor.TagHelpers.HtmlTargetElement
(tag: "section-form-buttons",
ParentTag = "section-form",
TagStructure = Microsoft.AspNetCore.Razor.TagHelpers.TagStructure.NormalOrSelfClosing)]
public class SectionFormButtonsTagHelper :
Microsoft.AspNetCore.Razor.TagHelpers.TagHelper
{
public SectionFormButtonsTagHelper() : base()
{
}
public async override Task ProcessAsync
(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context,
Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output)
{
// **************************************************
var originalContents =
await
output.GetChildContentAsync();
// **************************************************
// **************************************************
var body =
new Microsoft.AspNetCore.Mvc.Rendering.TagBuilder("div");
body.AddCssClass(value: "mb-3");
body.InnerHtml.AppendHtml(content: originalContents);
// **************************************************
// **************************************************
output.TagName = null;
output.TagMode =
Microsoft.AspNetCore.Razor
.TagHelpers.TagMode.StartTagAndEndTag;
output.Content.SetHtmlContent(htmlContent: body);
// **************************************************
}
}

View File

@ -0,0 +1,25 @@
namespace Server.Infrastructure.TagHelpers;
[Microsoft.AspNetCore.Razor.TagHelpers.HtmlTargetElement
(tag: "input",
ParentTag = "section-form-check")]
public class SectionFormCheckInputTagHelper :
Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper
{
public SectionFormCheckInputTagHelper
(Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator generator) : base(generator)
{
}
public override Task ProcessAsync
(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context,
Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output)
{
Utility.CreateOrMergeAttribute
(name: "class", content: "form-check-input", output: output);
//output.TagName = "input";
return base.ProcessAsync(context, output);
}
}

View File

@ -0,0 +1,25 @@
namespace Server.Infrastructure.TagHelpers;
[Microsoft.AspNetCore.Razor.TagHelpers.HtmlTargetElement
(tag: "label",
ParentTag = "section-form-check")]
public class SectionFormCheckLabelTagHelper :
Microsoft.AspNetCore.Mvc.TagHelpers.LabelTagHelper
{
public SectionFormCheckLabelTagHelper
(Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator generator) : base(generator)
{
}
public override Task ProcessAsync
(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context,
Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output)
{
Utility.CreateOrMergeAttribute
(name: "class", content: "form-check-label", output: output);
//output.TagName = "label";
return base.ProcessAsync(context, output);
}
}

View File

@ -0,0 +1,54 @@
namespace Server.Infrastructure.TagHelpers;
[Microsoft.AspNetCore.Razor.TagHelpers.HtmlTargetElement
(tag: "section-form-check",
ParentTag = "fieldset",
TagStructure = Microsoft.AspNetCore.Razor.TagHelpers.TagStructure.NormalOrSelfClosing)]
public class SectionFormCheckTagHelper :
Microsoft.AspNetCore.Razor.TagHelpers.TagHelper
{
public SectionFormCheckTagHelper() : base()
{
}
public async override Task ProcessAsync
(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context,
Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output)
{
// **************************************************
var originalContents =
await
output.GetChildContentAsync();
// **************************************************
// **************************************************
var div =
new Microsoft.AspNetCore.Mvc
.Rendering.TagBuilder(tagName: "div");
div.AddCssClass(value: "form-check");
div.InnerHtml.AppendHtml(content: originalContents);
// **************************************************
// **************************************************
var body =
new Microsoft.AspNetCore.Mvc
.Rendering.TagBuilder(tagName: "div");
body.AddCssClass(value: "mb-3");
body.InnerHtml.AppendHtml(content: div);
// **************************************************
// **************************************************
output.TagName = null;
output.TagMode =
Microsoft.AspNetCore.Razor
.TagHelpers.TagMode.StartTagAndEndTag;
output.Content.SetHtmlContent(htmlContent: body);
// **************************************************
}
}

View File

@ -0,0 +1,23 @@
namespace Server.Infrastructure.TagHelpers;
[Microsoft.AspNetCore.Razor.TagHelpers.HtmlTargetElement
(tag: "input",
ParentTag = "section-form-field")]
public class SectionFormFieldInputTagHelper :
Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper
{
public SectionFormFieldInputTagHelper
(Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator generator) : base(generator)
{
}
public override Task ProcessAsync
(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context,
Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output)
{
Utility.CreateOrMergeAttribute
(name: "class", content: "form-control", output: output);
return base.ProcessAsync(context, output);
}
}

View File

@ -0,0 +1,25 @@
namespace Server.Infrastructure.TagHelpers;
[Microsoft.AspNetCore.Razor.TagHelpers.HtmlTargetElement
(tag: "label",
ParentTag = "section-form-field")]
public class SectionFormFieldLabelTagHelper :
Microsoft.AspNetCore.Mvc.TagHelpers.LabelTagHelper
{
public SectionFormFieldLabelTagHelper
(Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator generator) : base(generator)
{
}
public override Task ProcessAsync
(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context,
Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output)
{
Utility.CreateOrMergeAttribute
(name: "class", content: "form-label", output: output);
//output.TagName = "label";
return base.ProcessAsync(context, output);
}
}

View File

@ -0,0 +1,25 @@
namespace Server.Infrastructure.TagHelpers
{
[Microsoft.AspNetCore.Razor.TagHelpers.HtmlTargetElement
(tag: "select",
ParentTag = "section-form-field")]
public class SectionFormFieldSelectTagHelper :
Microsoft.AspNetCore.Mvc.TagHelpers.LabelTagHelper
{
public SectionFormFieldSelectTagHelper
(Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator generator) : base(generator)
{
}
public override Task ProcessAsync
(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context,
Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output)
{
Utility.CreateOrMergeAttribute
(name: "class", content: "form-select", output: output);
return base.ProcessAsync(context, output);
}
}
}

View File

@ -0,0 +1,44 @@
namespace Server.Infrastructure.TagHelpers;
[Microsoft.AspNetCore.Razor.TagHelpers.HtmlTargetElement
(tag: "section-form-field",
ParentTag = "fieldset",
TagStructure = Microsoft.AspNetCore.Razor.TagHelpers.TagStructure.NormalOrSelfClosing)]
public class SectionFormFieldTagHelper :
Microsoft.AspNetCore.Razor.TagHelpers.TagHelper
{
public SectionFormFieldTagHelper() : base()
{
}
public async override Task ProcessAsync
(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context,
Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output)
{
// **************************************************
var originalContents =
await
output.GetChildContentAsync();
// **************************************************
// **************************************************
var body =
new Microsoft.AspNetCore.Mvc
.Rendering.TagBuilder(tagName: "div");
body.AddCssClass(value: "mb-3");
body.InnerHtml.AppendHtml(content: originalContents);
// **************************************************
// **************************************************
output.TagName = null;
output.TagMode =
Microsoft.AspNetCore.Razor
.TagHelpers.TagMode.StartTagAndEndTag;
output.Content.SetHtmlContent(htmlContent: body);
// **************************************************
}
}

View File

@ -0,0 +1,26 @@
namespace Server.Infrastructure.TagHelpers;
[Microsoft.AspNetCore.Razor.TagHelpers.HtmlTargetElement
(tag: "textarea",
ParentTag = "section-form-field")]
public class SectionFormFieldTextArea :
Microsoft.AspNetCore.Mvc.TagHelpers.TextAreaTagHelper
{
public SectionFormFieldTextArea
(Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator generator) : base(generator)
{
}
public override Task ProcessAsync
(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context,
Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output)
{
Utility.CreateOrMergeAttribute
(name: "class", content: "form-control", output: output);
Utility.CreateOrMergeAttribute
(name: "class", content: "tinymce", output: output);
return base.ProcessAsync(context, output);
}
}

View File

@ -0,0 +1,25 @@
namespace Server.Infrastructure.TagHelpers;
[Microsoft.AspNetCore.Razor.TagHelpers.HtmlTargetElement
(tag: "span",
ParentTag = "section-form-field")]
public class SectionFormFieldValidationMessageTagHelper :
Microsoft.AspNetCore.Mvc.TagHelpers.ValidationMessageTagHelper
{
public SectionFormFieldValidationMessageTagHelper
(Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator generator) : base(generator)
{
}
public override Task ProcessAsync
(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context,
Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output)
{
Utility.CreateOrMergeAttribute
(name: "class", content: "text-danger", output: output);
//output.TagName = "span";
return base.ProcessAsync(context, output);
}
}

View File

@ -0,0 +1,23 @@
namespace Server.Infrastructure.TagHelpers;
[Microsoft.AspNetCore.Razor.TagHelpers.HtmlTargetElement
(tag: "a",
ParentTag = "section-form-footer",
TagStructure = Microsoft.AspNetCore.Razor.TagHelpers.TagStructure.NormalOrSelfClosing)]
public class SectionFormFooterLinkTagHelper :
Microsoft.AspNetCore.Razor.TagHelpers.TagHelper
{
public SectionFormFooterLinkTagHelper() : base()
{
}
public override void Process
(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context,
Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output)
{
// **************************************************
output.Attributes.SetAttribute
(name: "class", value: "text-decoration-none");
// **************************************************
}
}

View File

@ -0,0 +1,56 @@
namespace Server.Infrastructure.TagHelpers;
[Microsoft.AspNetCore.Razor.TagHelpers.HtmlTargetElement
(tag: "section-form-footer",
ParentTag = "section-form",
TagStructure = Microsoft.AspNetCore.Razor.TagHelpers.TagStructure.NormalOrSelfClosing)]
public class SectionFormFooterTagHelper :
Microsoft.AspNetCore.Razor.TagHelpers.TagHelper
{
public SectionFormFooterTagHelper() : base()
{
}
public async override Task ProcessAsync
(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context,
Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output)
{
// **************************************************
var originalContents =
await
output.GetChildContentAsync();
// **************************************************
// **************************************************
var horizontalRule =
new Microsoft.AspNetCore.Mvc
.Rendering.TagBuilder(tagName: "hr");
horizontalRule.TagRenderMode =
Microsoft.AspNetCore.Mvc.Rendering.TagRenderMode.SelfClosing;
horizontalRule.AddCssClass(value: "mt-4");
// **************************************************
// **************************************************
var body =
new Microsoft.AspNetCore.Mvc.Rendering.TagBuilder("div");
body.AddCssClass(value: "mb-3");
body.AddCssClass(value: "text-center");
body.InnerHtml.AppendHtml(content: originalContents);
// **************************************************
// **************************************************
output.TagName = null;
output.TagMode =
Microsoft.AspNetCore.Razor
.TagHelpers.TagMode.StartTagAndEndTag;
output.PreElement.AppendHtml(htmlContent: horizontalRule);
output.Content.SetHtmlContent(htmlContent: body);
// **************************************************
}
}

View File

@ -0,0 +1,56 @@
namespace Server.Infrastructure.TagHelpers;
[Microsoft.AspNetCore.Razor.TagHelpers.HtmlTargetElement
(tag: "section-form-header",
ParentTag = "fieldset",
TagStructure = Microsoft.AspNetCore.Razor.TagHelpers.TagStructure.NormalOrSelfClosing)]
public class SectionFormHeaderTagHelper :
Microsoft.AspNetCore.Razor.TagHelpers.TagHelper
{
public SectionFormHeaderTagHelper() : base()
{
}
public async override Task ProcessAsync
(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context,
Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output)
{
// **************************************************
var originalContents =
await
output.GetChildContentAsync();
// **************************************************
// **************************************************
var horizontalRule =
new Microsoft.AspNetCore.Mvc
.Rendering.TagBuilder(tagName: "hr")
{
TagRenderMode =
Microsoft.AspNetCore.Mvc.Rendering.TagRenderMode.SelfClosing,
};
horizontalRule.AddCssClass(value: "mt-4");
// **************************************************
// **************************************************
var body =
new Microsoft.AspNetCore.Mvc
.Rendering.TagBuilder(tagName: "legend");
body.AddCssClass(value: "text-center");
body.InnerHtml.AppendHtml(content: originalContents);
// **************************************************
// **************************************************
output.TagName = null;
output.TagMode =
Microsoft.AspNetCore.Razor.TagHelpers.TagMode.StartTagAndEndTag;
// **************************************************
output.Content.SetHtmlContent(htmlContent: body);
output.PostElement.AppendHtml(htmlContent: horizontalRule);
}
}

View File

@ -0,0 +1,63 @@
namespace Server.Infrastructure.TagHelpers;
[Microsoft.AspNetCore.Razor.TagHelpers.HtmlTargetElement
(tag: "section-form",
TagStructure = Microsoft.AspNetCore.Razor.TagHelpers.TagStructure.NormalOrSelfClosing)]
public class SectionFormTagHelper :
Microsoft.AspNetCore.Razor.TagHelpers.TagHelper
{
public SectionFormTagHelper() : base()
{
}
public async override Task ProcessAsync
(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context,
Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output)
{
// **************************************************
var originalContents =
await
output.GetChildContentAsync();
// **************************************************
// **************************************************
var divCol =
new Microsoft.AspNetCore.Mvc.Rendering.TagBuilder("div");
divCol.AddCssClass(value: "col");
//divCol.AddCssClass(value: "bg-light");
divCol.AddCssClass(value: "rounded-3");
divCol.AddCssClass(value: "shadow-lg");
divCol.AddCssClass(value: "border border-2");
divCol.AddCssClass(value: "col-12 p-3");
divCol.AddCssClass(value: "col-md-8 offset-md-2 p-md-4");
//divCol.AddCssClass(value: "col-lg-6 offset-lg-3 p-lg-5");
divCol.InnerHtml.AppendHtml(content: originalContents);
// **************************************************
// **************************************************
var divRow =
new Microsoft.AspNetCore.Mvc.Rendering.TagBuilder("div");
divRow.AddCssClass(value: "row");
divRow.AddCssClass(value: "my-0");
divRow.AddCssClass(value: "my-sm-1");
divRow.AddCssClass(value: "my-md-3");
//divRow.AddCssClass(value: "my-lg-5");
divRow.InnerHtml.AppendHtml(content: divCol);
// **************************************************
// **************************************************
output.TagName = null;
output.TagMode =
Microsoft.AspNetCore.Razor
.TagHelpers.TagMode.StartTagAndEndTag;
output.Content.SetHtmlContent(htmlContent: divRow);
// **************************************************
}
}

View File

@ -0,0 +1,23 @@
namespace Server.Infrastructure.TagHelpers;
[Microsoft.AspNetCore.Razor.TagHelpers.HtmlTargetElement
(tag: "a",
ParentTag = "section-page-actions",
TagStructure = Microsoft.AspNetCore.Razor.TagHelpers.TagStructure.NormalOrSelfClosing)]
public class SectionPageActionsLink :
Microsoft.AspNetCore.Razor.TagHelpers.TagHelper
{
public SectionPageActionsLink() : base()
{
}
public override void Process
(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context,
Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output)
{
// **************************************************
output.Attributes.SetAttribute
(name: "class", value: "btn btn-primary");
// **************************************************
}
}

View File

@ -0,0 +1,52 @@
namespace Server.Infrastructure.TagHelpers;
[Microsoft.AspNetCore.Razor.TagHelpers.HtmlTargetElement
(tag: "section-page-actions",
TagStructure = Microsoft.AspNetCore.Razor.TagHelpers.TagStructure.NormalOrSelfClosing)]
public class SectionPageActionsTagHelper :
Microsoft.AspNetCore.Razor.TagHelpers.TagHelper
{
public SectionPageActionsTagHelper() : base()
{
}
public async override Task ProcessAsync
(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context,
Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output)
{
// **************************************************
var originalContents =
await
output.GetChildContentAsync();
// **************************************************
// **************************************************
var divCol =
new Microsoft.AspNetCore.Mvc.Rendering.TagBuilder("div");
divCol.AddCssClass(value: "col");
divCol.InnerHtml.AppendHtml(content: originalContents);
// **************************************************
// **************************************************
var divRow =
new Microsoft.AspNetCore.Mvc.Rendering.TagBuilder("div");
divRow.AddCssClass(value: "row");
divRow.AddCssClass(value: "mb-3");
divRow.InnerHtml.AppendHtml(content: divCol);
// **************************************************
// **************************************************
output.TagName = null;
output.TagMode =
Microsoft.AspNetCore.Razor
.TagHelpers.TagMode.StartTagAndEndTag;
output.Content.SetHtmlContent(htmlContent: divRow);
// **************************************************
}
}

View File

@ -0,0 +1,65 @@
namespace Server.Infrastructure.TagHelpers;
[Microsoft.AspNetCore.Razor.TagHelpers.HtmlTargetElement
(tag: "section-page-header",
TagStructure = Microsoft.AspNetCore.Razor.TagHelpers.TagStructure.NormalOrSelfClosing)]
public class SectionPageHeaderTagHelper :
Microsoft.AspNetCore.Razor.TagHelpers.TagHelper
{
public SectionPageHeaderTagHelper() : base()
{
}
//public override void Process
// (Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context,
// Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output)
//{
// base.Process(context, output);
//}
public async override Task ProcessAsync
(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context,
Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output)
{
// **************************************************
var originalContents =
await
output.GetChildContentAsync();
// **************************************************
// **************************************************
var horizontalRule =
new Microsoft.AspNetCore.Mvc
.Rendering.TagBuilder(tagName: "hr")
{
TagRenderMode =
Microsoft.AspNetCore.Mvc.Rendering.TagRenderMode.SelfClosing,
};
horizontalRule.AddCssClass(value: "mt-4");
// **************************************************
// **************************************************
var body =
new Microsoft.AspNetCore.Mvc
.Rendering.TagBuilder(tagName: "h3");
body.AddCssClass(value: "mt-3");
body.AddCssClass(value: "mb-3");
body.AddCssClass(value: "text-center");
body.InnerHtml.AppendHtml(content: originalContents);
//body.InnerHtml.AppendHtml(content: horizontalRule);
// **************************************************
// **************************************************
output.TagName = null;
output.TagMode =
Microsoft.AspNetCore.Razor
.TagHelpers.TagMode.StartTagAndEndTag;
output.Content.SetHtmlContent(htmlContent: body);
// **************************************************
}
}

View File

@ -0,0 +1,52 @@
namespace Server.Infrastructure.TagHelpers;
[Microsoft.AspNetCore.Razor.TagHelpers.HtmlTargetElement
(tag: "section-table",
TagStructure = Microsoft.AspNetCore.Razor.TagHelpers.TagStructure.NormalOrSelfClosing)]
public class SectionTableTagHelper :
Microsoft.AspNetCore.Razor.TagHelpers.TagHelper
{
public SectionTableTagHelper() : base()
{
}
public async override Task ProcessAsync
(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context,
Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output)
{
// **************************************************
var originalContents =
await
output.GetChildContentAsync();
// **************************************************
// **************************************************
var divCol =
new Microsoft.AspNetCore.Mvc.Rendering.TagBuilder("div");
divCol.AddCssClass(value: "col");
divCol.AddCssClass(value: "table-responsive");
divCol.InnerHtml.AppendHtml(content: originalContents);
// **************************************************
// **************************************************
var divRow =
new Microsoft.AspNetCore.Mvc.Rendering.TagBuilder("div");
divRow.AddCssClass(value: "row");
divRow.InnerHtml.AppendHtml(content: divCol);
// **************************************************
// **************************************************
output.TagName = null;
output.TagMode =
Microsoft.AspNetCore.Razor
.TagHelpers.TagMode.StartTagAndEndTag;
output.Content.SetHtmlContent(htmlContent: divRow);
// **************************************************
}
}

View File

@ -0,0 +1,24 @@
namespace Server.Infrastructure.TagHelpers
{
[Microsoft.AspNetCore.Razor.TagHelpers
.HtmlTargetElement(tag: Constants.TagHelper.Input,
TagStructure = Microsoft.AspNetCore.Razor.TagHelpers.TagStructure.WithoutEndTag)]
public class SimpleInputTagHelper :
Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper
{
public SimpleInputTagHelper
(Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator generator) : base(generator: generator)
{
}
public override Task ProcessAsync
(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context,
Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output)
{
Utility.CreateOrMergeAttribute
(name: "class", content: "form-control", output: output);
return base.ProcessAsync(context, output);
}
}
}

View File

@ -0,0 +1,24 @@
namespace Server.Infrastructure.TagHelpers
{
[Microsoft.AspNetCore.Razor.TagHelpers
.HtmlTargetElement(tag: Constants.TagHelper.Label,
TagStructure = Microsoft.AspNetCore.Razor.TagHelpers.TagStructure.WithoutEndTag)]
public class SimpleLabelTagHelper :
Microsoft.AspNetCore.Mvc.TagHelpers.LabelTagHelper
{
public SimpleLabelTagHelper
(Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator generator) : base(generator)
{
}
public override Task ProcessAsync
(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context,
Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output)
{
Utility.CreateOrMergeAttribute
(name: "class", content: "form-label", output: output);
return base.ProcessAsync(context, output);
}
}
}

View File

@ -0,0 +1,24 @@
namespace Server.Infrastructure.TagHelpers
{
[Microsoft.AspNetCore.Razor.TagHelpers
.HtmlTargetElement(tag: Constants.TagHelper.TextArea,
TagStructure = Microsoft.AspNetCore.Razor.TagHelpers.TagStructure.WithoutEndTag)]
public class SimpleTextAreaTagHelper :
Microsoft.AspNetCore.Mvc.TagHelpers.TextAreaTagHelper
{
public SimpleTextAreaTagHelper
(Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator generator) : base(generator: generator)
{
}
public override Task ProcessAsync
(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context,
Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output)
{
Utility.CreateOrMergeAttribute
(name: "class", content: "form-control", output: output);
return base.ProcessAsync(context, output);
}
}
}

Some files were not shown because too many files have changed in this diff Show More