Daniel Covington 8 місяці тому
коміт
dc0b682e25
100 змінених файлів з 13456 додано та 0 видалено
  1. +129
    -0
      App/Controllers/Contacts/ContactsController.asp
  2. +12
    -0
      App/Controllers/Home/HomeController.asp
  3. +155
    -0
      App/Controllers/Jurisdiction/JurisdictionController.asp
  4. +137
    -0
      App/Controllers/Kit/KitController.asp
  5. +129
    -0
      App/Controllers/KitLabels/KitLabelsController.asp
  6. +129
    -0
      App/Controllers/Settings/SettingsController.asp
  7. +29
    -0
      App/DAL/lib.DAL.asp
  8. +302
    -0
      App/DomainModels/ContactsRepository.asp
  9. +237
    -0
      App/DomainModels/JurisdictionRepository.asp
  10. +247
    -0
      App/DomainModels/KitLabelsRepository.asp
  11. +222
    -0
      App/DomainModels/KitRepository.asp
  12. +222
    -0
      App/DomainModels/SettingsRepository.asp
  13. +716
    -0
      App/ScaffoldRepo.vbs
  14. +44
    -0
      App/ViewModels/ContactsViewModels.asp
  15. +32
    -0
      App/ViewModels/JurisdictionViewModels.asp
  16. +33
    -0
      App/ViewModels/KitLabelsViewModels.asp
  17. +31
    -0
      App/ViewModels/KitViewModels.asp
  18. +28
    -0
      App/ViewModels/SettingsViewModels.asp
  19. +157
    -0
      App/Views/Contacts/create.asp
  20. +159
    -0
      App/Views/Contacts/delete.asp
  21. +157
    -0
      App/Views/Contacts/edit.asp
  22. +105
    -0
      App/Views/Contacts/index.asp
  23. +10
    -0
      App/Views/Home/Index.asp
  24. +53
    -0
      App/Views/Jurisdiction/create.asp
  25. +5
    -0
      App/Views/Jurisdiction/createkit.asp
  26. +55
    -0
      App/Views/Jurisdiction/delete.asp
  27. +54
    -0
      App/Views/Jurisdiction/edit.asp
  28. +82
    -0
      App/Views/Jurisdiction/index.asp
  29. +60
    -0
      App/Views/Jurisdiction/partial.Jurisdiction.Contacts.asp
  30. +38
    -0
      App/Views/Kit/create.asp
  31. +31
    -0
      App/Views/Kit/delete.asp
  32. +29
    -0
      App/Views/Kit/edit.asp
  33. +73
    -0
      App/Views/Kit/index.asp
  34. +69
    -0
      App/Views/KitLabels/create.asp
  35. +71
    -0
      App/Views/KitLabels/delete.asp
  36. +69
    -0
      App/Views/KitLabels/edit.asp
  37. +83
    -0
      App/Views/KitLabels/index.asp
  38. +29
    -0
      App/Views/Settings/create.asp
  39. +31
    -0
      App/Views/Settings/delete.asp
  40. +29
    -0
      App/Views/Settings/edit.asp
  41. +73
    -0
      App/Views/Settings/index.asp
  42. +10
    -0
      App/Views/Shared/layout.footer.asp
  43. +38
    -0
      App/Views/Shared/layout.header.asp
  44. +14
    -0
      App/app.config.asp
  45. +8
    -0
      App/include_all.asp
  46. +2
    -0
      Data/Migrations/! Create Migrations Table.sql
  47. +15
    -0
      Data/Migrations/! Migrations Template.asp
  48. +15
    -0
      Data/Migrations/Example_01_Create_Example_Table.asp
  49. +18
    -0
      Data/Migrations/Example_02_Insert_Records_To_Example_Table.asp
  50. +18
    -0
      Data/Migrations/Example_03_Insert_More_Records_To_Example_Table.asp
  51. +1547
    -0
      Data/Migrations/Migration_01_Create_Jurisdiction_Table.asp
  52. +1560
    -0
      Data/Migrations/Migration_02_Create_Contact_Table.asp
  53. +26
    -0
      Data/Migrations/Migration_03_Create_Settings_Table.asp
  54. +19
    -0
      Data/Migrations/Migration_04_Create_Kit_Table.asp
  55. +24
    -0
      Data/Migrations/Migration_05_Create_Kit_Labels_Table.asp
  56. +276
    -0
      Data/Migrations/lib.Migrations.asp
  57. +115
    -0
      Data/Migrations/migrate.asp
  58. BIN
      Dependancies/IDAutomationFontEncoder.dll
  59. BIN
      Dependancies/InstallFontEncoderDLL.exe
  60. +83
    -0
      MVC/docs.asp
  61. +160
    -0
      MVC/lib.Automapper.asp
  62. +57
    -0
      MVC/lib.Bootstrap.asp
  63. +740
    -0
      MVC/lib.Collections.asp
  64. +95
    -0
      MVC/lib.Data.asp
  65. +202
    -0
      MVC/lib.Enumerable.asp
  66. +118
    -0
      MVC/lib.Flash.asp
  67. +67
    -0
      MVC/lib.FormCache.asp
  68. +260
    -0
      MVC/lib.HTML.asp
  69. +77
    -0
      MVC/lib.HTMLSecurity.asp
  70. +361
    -0
      MVC/lib.Helpers.asp
  71. +168
    -0
      MVC/lib.MVC.asp
  72. +84
    -0
      MVC/lib.Routes.asp
  73. +73
    -0
      MVC/lib.Strings.asp
  74. +250
    -0
      MVC/lib.Validations.asp
  75. +15
    -0
      MVC/lib.all.asp
  76. +281
    -0
      MVC/lib.json.asp
  77. +38
    -0
      Tests/ASPUnit/TestASPUnit/TCTest.asp
  78. +12
    -0
      Tests/ASPUnit/TestASPUnit/TestASPUnit.asp
  79. +335
    -0
      Tests/ASPUnit/include/ASPUnit.asp
  80. +68
    -0
      Tests/ASPUnit/include/ASPUnit.css
  81. +58
    -0
      Tests/ASPUnit/include/ASPUnit.css~
  82. +273
    -0
      Tests/ASPUnit/include/ASPUnitRunner.asp
  83. +6
    -0
      Tests/ASPUnit/include/ASPUnitRunner.js
  84. +43
    -0
      Tests/ASPUnit/index.html
  85. +127
    -0
      Tests/TestCase_Automapper_Automap.asp
  86. +281
    -0
      Tests/TestCase_Automapper_Dynmap.asp
  87. +236
    -0
      Tests/TestCase_Automapper_Flexmap.asp
  88. +24
    -0
      Tests/TestCase_Automapper_Function.asp
  89. +349
    -0
      Tests/TestCase_EnumerableHelper.asp
  90. +16
    -0
      Tests/TestCase_HtmlHelperDropdownLists.asp
  91. +261
    -0
      Tests/TestCase_Performance.asp
  92. +60
    -0
      Tests/TestCase_StringBuilder.asp
  93. +30
    -0
      Tests/Test_All.asp
  94. +26
    -0
      Tests/Test_Automapper.asp
  95. +12
    -0
      Tests/Test_EnumerableHelper.asp
  96. +12
    -0
      Tests/Test_HtmlHelper.asp
  97. +12
    -0
      Tests/Test_Performance.asp
  98. +12
    -0
      Tests/Test_StringBuilder.asp
  99. +3
    -0
      index.asp
  100. +10
    -0
      web.config

+ 129
- 0
App/Controllers/Contacts/ContactsController.asp Переглянути файл

@@ -0,0 +1,129 @@
<% Option Explicit %>
<!--#include file="../../include_all.asp"-->
<!--#include file="../../ViewModels/ContactsViewModels.asp"-->
<%
Class ContactsController
Public Model

Public Sub Index

dim page_size : page_size = 10
dim page_num : page_num = Choice(Len(Request.Querystring("page_num")) > 0, Request.Querystring("page_num"), 1)
dim page_count, record_count
set Model = new PagedIndex_ViewModel_Class
Model.Title = "Contacts"
set Model.Contacts = ContactsRepository.FindPaged(empty, "ID", page_size, page_num, page_count, record_count)
Model.CurrentPageNumber = page_num
Model.PageSize = page_size
Model.PageCount = page_count
Model.RecordCount = record_count
%> <!--#include file="../../Views/Contacts/Index.asp"--> <%

End Sub
Public Sub Search

dim searchValue:searchValue = Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q"))
dim page_size : page_size = 10
dim page_num : page_num = Choice(Len(Request.Querystring("page_num")) > 0, Request.Querystring("page_num"), 1)
dim page_count, record_count
set Model = new PagedIndex_ViewModel_Class
Model.Title = "Contacts"
set Model.Contacts = ContactsRepository.SearchTablePaged(Array("ID","%" & searchValue & "%","JURISCODE","%" & searchValue & "%","TownshipName","%" & searchValue & "%","CONTACT_NAME","%" & searchValue & "%","TownshipNum","%" & searchValue & "%","BUSINESS_ADDRESS","%" & searchValue & "%","TITLE","%" & searchValue & "%","BUSINESS_ADDRESS2","%" & searchValue & "%","BUSINESS_ADDRESS3","%" & searchValue & "%","MAILING_ADDRESS","%" & searchValue & "%","MAILING_ADDRESS2","%" & searchValue & "%","MAILING_ADDRESS3","%" & searchValue & "%","RESIDENTIAL_ADDRESS","%" & searchValue & "%","RESIDENTIAL_ADDRESS2","%" & searchValue & "%","PHONENUM1","%" & searchValue & "%","RESIDENTIAL_ADDRESS3","%" & searchValue & "%","FAXNUM","%" & searchValue & "%","PHONENUM2","%" & searchValue & "%","EMAIL","%" & searchValue & "%"),"ID", page_size, page_num, page_count, record_count)
Model.CurrentPageNumber = page_num
Model.PageSize = page_size
Model.PageCount = page_count
Model.RecordCount = record_count
%> <!--#include file="../../Views/Contacts/Index.asp"--> <%

End Sub

Public Sub Edit

dim id : id = Request.QueryString("Id")
set Model = new Edit_ViewModel_Class
set Model.Contacts = ContactsRepository.FindByID(id)
Model.Title = "Edit Contacts"
HTMLSecurity.SetAntiCSRFToken "ContactsEditForm"
%> <!--#include file="../../Views/Contacts/Edit.asp"--> <%
Flash.Success = "Contacts Updated."
End Sub

Public Sub EditPost
MVC.RequirePost
HTMLSecurity.OnInvalidAntiCsrfTokenRedirectToActionExt "ContactsEditForm", Request.Form("nonce"), "Edit", Array("Id", Request.Form("Id"))
dim ID : ID = Request.Form("Id")
dim model : set model = ContactsRepository.FindByID(ID)
set model = Automapper.AutoMap(Request.Form, model)
'model.Validate
'If model.Validator.HasErrors then
FormCache.SerializeForm "EditContacts", Request.Form
' Flash.Errors = model.Validator.Errors
' MVC.RedirectToActionExt "Edit", Array("Id",ID)
'Else
ContactsRepository.Update model
FormCache.ClearForm "EditContacts"
Flash.Success = "Contacts updated."
MVC.RedirectToAction "Index"
'End If
End Sub

Public Sub Create

dim form_params : set form_params = FormCache.DeserializeForm("NewContacts")
If Not form_params Is Nothing then
set Model = Automapper.AutoMap(form_params, New Create_ViewModel_Class)
Else
set Model = new Create_ViewModel_Class
End If

HTMLSecurity.SetAntiCSRFToken "ContactsCreateForm"

%> <!--#include file="../../Views/Contacts/Create.asp"--> <%
End Sub

Public Sub CreatePost

MVC.RequirePost
HtmlSecurity.OnInvalidAntiCSRFTokenRedirectToAction "ContactsCreateForm", Request.Form("nonce"), "Create"

dim new_Contacts_model : set new_Contacts_model = Automapper.AutoMap(Request.Form, new ContactsModel_Class)

'new_Contacts_model.Validator.Validate

'If new_Contacts_model.Validator.HasErrors then
' FormCache.SerializeForm "NewContacts", Request.Form
' Flash.Errors = new_Contacts_model.Validator.Errors
' MVC.RedirectToAction "Create"
'Else
ContactsRepository.AddNew new_Contacts_model
' FormCache.ClearForm "NewContacts"
Flash.Success = "Contacts added."
MVC.RedirectToAction "Index"
'End If
End Sub

Public Sub Delete
dim id : id = Request.QueryString("Id")
set Model = new Delete_ViewModel_Class
set Model.Contacts = ContactsRepository.FindByID(id)
Model.Title = "Delete Contacts"

HTMLSecurity.SetAntiCSRFToken "ContactsDeleteForm"

%> <!--#include file="../../Views/Contacts/Delete.asp"--> <%
End Sub

Public Sub DeletePost
MVC.RequirePost
HtmlSecurity.OnInvalidAntiCSRFTokenRedirectToAction "ContactsDeleteForm", Request.Form("nonce"), "Create"

dim id : id = Request.Form("Id")
ContactsRepository.Delete id

Flash.Success = "Contacts deleted."
MVC.RedirectToAction "Index"
End Sub

End Class
MVC.Dispatch
%>

+ 12
- 0
App/Controllers/Home/HomeController.asp Переглянути файл

@@ -0,0 +1,12 @@
<% Option Explicit %>
<!--#include file="../../include_all.asp"-->

<%
Class HomeController
Public Sub Index
%> <!--#include file="../../Views/Home/Index.asp"--> <%
End Sub
End Class

MVC.Dispatch
%>

+ 155
- 0
App/Controllers/Jurisdiction/JurisdictionController.asp Переглянути файл

@@ -0,0 +1,155 @@
<% Option Explicit %>
<!--#include file="../../include_all.asp"-->
<!--#include file="../../ViewModels/JurisdictionViewModels.asp"-->
<%
Class JurisdictionController
Public Model

Public Sub Index

dim page_size : page_size = 10
dim page_num : page_num = Choice(Len(Request.Querystring("page_num")) > 0, Request.Querystring("page_num"), 1)
dim page_count, record_count
set Model = new PagedIndex_ViewModel_Class
Model.Title = "Jurisdiction"
set Model.Jurisdiction = JurisdictionRepository.FindPaged(empty, "JCode", page_size, page_num, page_count, record_count)
Model.CurrentPageNumber = page_num
Model.PageSize = page_size
Model.PageCount = page_count
Model.RecordCount = record_count
%> <!--#include file="../../Views/Jurisdiction/Index.asp"--> <%

End Sub
Public Sub Search

dim searchValue:searchValue = Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q"))
dim page_size : page_size = 10
dim page_num : page_num = Choice(Len(Request.Querystring("page_num")) > 0, Request.Querystring("page_num"), 1)
dim page_count, record_count
set Model = new PagedIndex_ViewModel_Class
Model.Title = "Jurisdiction"
set Model.Jurisdiction = JurisdictionRepository.SearchTablePaged(Array("JCode","%" & searchValue & "%","Name","%" & searchValue & "%","Mailing_Address","%" & searchValue & "%","CSZ","%" & searchValue & "%","IMB","%" & searchValue & "%","IMB_Digits","%" & searchValue & "%"),"JCode", page_size, page_num, page_count, record_count)
Model.CurrentPageNumber = page_num
Model.PageSize = page_size
Model.PageCount = page_count
Model.RecordCount = record_count
%> <!--#include file="../../Views/Jurisdiction/Index.asp"--> <%

End Sub

Public Sub Edit

dim id : id = Request.QueryString("Id")
set Model = new Edit_ViewModel_Class
set Model.Jurisdiction = JurisdictionRepository.FindByJCode(id)
set Model.Contacts = ContactsRepository.Find(Array("JURISCODE = ?",id),empty)
Model.Title = "Edit Jurisdiction"
HTMLSecurity.SetAntiCSRFToken "JurisdictionEditForm"
%> <!--#include file="../../Views/Jurisdiction/Edit.asp"--> <%
Flash.Success = "Jurisdiction Updated."
End Sub

Public Sub EditPost
MVC.RequirePost
HTMLSecurity.OnInvalidAntiCsrfTokenRedirectToActionExt "JurisdictionEditForm", Request.Form("nonce"), "Edit", Array("Id", Request.Form("Id"))
dim JCode : JCode = Request.Form("Id")
dim model : set model = JurisdictionRepository.FindByJCode(JCode)
set model = Automapper.AutoMap(Request.Form, model)
'model.Validate
'If model.Validator.HasErrors then
FormCache.SerializeForm "EditJurisdiction", Request.Form
' Flash.Errors = model.Validator.Errors
' MVC.RedirectToActionExt "Edit", Array("Id",JCode)
'Else
JurisdictionRepository.Update model
FormCache.ClearForm "EditJurisdiction"
Flash.Success = "Jurisdiction updated."
MVC.RedirectToAction "Index"
'End If
End Sub

Public Sub Create

dim form_params : set form_params = FormCache.DeserializeForm("NewJurisdiction")
If Not form_params Is Nothing then
set Model = Automapper.AutoMap(form_params, New Create_ViewModel_Class)
Else
set Model = new Create_ViewModel_Class
End If

HTMLSecurity.SetAntiCSRFToken "JurisdictionCreateForm"

%> <!--#include file="../../Views/Jurisdiction/Create.asp"--> <%
End Sub

Public Sub CreatePost

MVC.RequirePost
HtmlSecurity.OnInvalidAntiCSRFTokenRedirectToAction "JurisdictionCreateForm", Request.Form("nonce"), "Create"

dim new_Jurisdiction_model : set new_Jurisdiction_model = Automapper.AutoMap(Request.Form, new JurisdictionModel_Class)

'new_Jurisdiction_model.Validator.Validate

'If new_Jurisdiction_model.Validator.HasErrors then
' FormCache.SerializeForm "NewJurisdiction", Request.Form
' Flash.Errors = new_Jurisdiction_model.Validator.Errors
' MVC.RedirectToAction "Create"
'Else
JurisdictionRepository.AddNew new_Jurisdiction_model
' FormCache.ClearForm "NewJurisdiction"
Flash.Success = "Jurisdiction added."
MVC.RedirectToAction "Index"
'End If
End Sub

Public Sub Delete
dim id : id = Request.QueryString("Id")
set Model = new Delete_ViewModel_Class
set Model.Jurisdiction = JurisdictionRepository.FindByJCode(id)
Model.Title = "Delete Jurisdiction"

HTMLSecurity.SetAntiCSRFToken "JurisdictionDeleteForm"

%> <!--#include file="../../Views/Jurisdiction/Delete.asp"--> <%
End Sub

Public Sub DeletePost
MVC.RequirePost
HtmlSecurity.OnInvalidAntiCSRFTokenRedirectToAction "JurisdictionDeleteForm", Request.Form("nonce"), "Create"

dim id : id = Request.Form("Id")
JurisdictionRepository.Delete id

Flash.Success = "Jurisdiction deleted."
MVC.RedirectToAction "Index"
End Sub

Public Sub Createkit
dim id : id = Request.QueryString("Id")
set Model = new Delete_ViewModel_Class
set Model.Jurisdiction = JurisdictionRepository.FindByJCode(id)
Model.Title = "Create Kit"

HTMLSecurity.SetAntiCSRFToken "JurisdictionDeleteForm"

%> <!--#include file="../../Views/Jurisdiction/createkit.asp"--> <%

End sub

Public Sub CreateKitPost
MVC.RequirePost
HtmlSecurity.OnInvalidAntiCSRFTokenRedirectToAction "CreateKitForm", Request.Form("nonce"), "Index"
dim id : id = Request.QueryString("Id")
set Model = new Delete_ViewModel_Class
set Model.Jurisdiction = JurisdictionRepository.FindByJCode(id)
Model.Title = "Create Kit"

HTMLSecurity.SetAntiCSRFToken "JurisdictionDeleteForm"

%> <!--#include file="../../Views/Jurisdiction/createkit.asp"--> <%

End sub
End Class
MVC.Dispatch
%>

+ 137
- 0
App/Controllers/Kit/KitController.asp Переглянути файл

@@ -0,0 +1,137 @@
<% Option Explicit %>
<!--#include file="../../include_all.asp"-->
<!--#include file="../../ViewModels/KitViewModels.asp"-->
<%
Class KitController
Public Model

Public Sub Index

dim page_size : page_size = 10
dim page_num : page_num = Choice(Len(Request.Querystring("page_num")) > 0, Request.Querystring("page_num"), 1)
dim page_count, record_count
set Model = new PagedIndex_ViewModel_Class
Model.Title = "Kit"
set Model.Kit = KitRepository.FindPaged(empty, "ID", page_size, page_num, page_count, record_count)
Model.CurrentPageNumber = page_num
Model.PageSize = page_size
Model.PageCount = page_count
Model.RecordCount = record_count
%> <!--#include file="../../Views/Kit/Index.asp"--> <%

End Sub
Public Sub Search

dim searchValue:searchValue = Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q"))
dim page_size : page_size = 10
dim page_num : page_num = Choice(Len(Request.Querystring("page_num")) > 0, Request.Querystring("page_num"), 1)
dim page_count, record_count
set Model = new PagedIndex_ViewModel_Class
Model.Title = "Kit"
set Model.Kit = KitRepository.SearchTablePaged(Array("ID","%" & searchValue & "%","JobNumber","%" & searchValue & "%","Jcode","%" & searchValue & "%"),"ID", page_size, page_num, page_count, record_count)
Model.CurrentPageNumber = page_num
Model.PageSize = page_size
Model.PageCount = page_count
Model.RecordCount = record_count
%> <!--#include file="../../Views/Kit/Index.asp"--> <%

End Sub

Public Sub Edit

dim id : id = Request.QueryString("Id")
set Model = new Edit_ViewModel_Class
set Model.Kit = KitRepository.FindByID(id)
Model.Title = "Edit Kit"
HTMLSecurity.SetAntiCSRFToken "KitEditForm"
%> <!--#include file="../../Views/Kit/Edit.asp"--> <%
Flash.Success = "Kit Updated."
End Sub

Public Sub EditPost
MVC.RequirePost
HTMLSecurity.OnInvalidAntiCsrfTokenRedirectToActionExt "KitEditForm", Request.Form("nonce"), "Edit", Array("Id", Request.Form("Id"))
dim ID : ID = Request.Form("Id")
dim model : set model = KitRepository.FindByID(ID)
set model = Automapper.AutoMap(Request.Form, model)
'model.Validate
'If model.Validator.HasErrors then
FormCache.SerializeForm "EditKit", Request.Form
' Flash.Errors = model.Validator.Errors
' MVC.RedirectToActionExt "Edit", Array("Id",ID)
'Else
KitRepository.Update model
FormCache.ClearForm "EditKit"
Flash.Success = "Kit updated."
MVC.RedirectToAction "Index"
'End If
End Sub

Public Sub Create

dim form_params : set form_params = FormCache.DeserializeForm("NewKit")

dim ID : ID = Request.QueryString("Id")
dim model : set model = new Create_ViewModel_Class
model.Title = "Create Kit "
model.JCode = ID
dim ugh : set ugh = JurisdictionRepository.Find(Array("[JCode] = ?",ID),empty)
set model.Jurisdiction = ugh.pop()

'If Not form_params Is Nothing then
' set Model = Automapper.AutoMap(form_params, New Create_ViewModel_Class)
'Else
' set Model = new Create_ViewModel_Class
'End If

HTMLSecurity.SetAntiCSRFToken "KitCreateForm"

%> <!--#include file="../../Views/Kit/Create.asp"--> <%
End Sub

Public Sub CreatePost

MVC.RequirePost
HtmlSecurity.OnInvalidAntiCSRFTokenRedirectToAction "KitCreateForm", Request.Form("nonce"), "Create"

dim new_Kit_model : set new_Kit_model = Automapper.AutoMap(Request.Form, new KitModel_Class)

'new_Kit_model.Validator.Validate

'If new_Kit_model.Validator.HasErrors then
' FormCache.SerializeForm "NewKit", Request.Form
' Flash.Errors = new_Kit_model.Validator.Errors
' MVC.RedirectToAction "Create"
'Else
KitRepository.AddNew new_Kit_model
' FormCache.ClearForm "NewKit"
Flash.Success = "Kit added."
MVC.RedirectToAction "Index"
'End If
End Sub

Public Sub Delete
dim id : id = Request.QueryString("Id")
set Model = new Delete_ViewModel_Class
set Model.Kit = KitRepository.FindByID(id)
Model.Title = "Delete Kit"

HTMLSecurity.SetAntiCSRFToken "KitDeleteForm"

%> <!--#include file="../../Views/Kit/Delete.asp"--> <%
End Sub

Public Sub DeletePost
MVC.RequirePost
HtmlSecurity.OnInvalidAntiCSRFTokenRedirectToAction "KitDeleteForm", Request.Form("nonce"), "Create"

dim id : id = Request.Form("Id")
KitRepository.Delete id

Flash.Success = "Kit deleted."
MVC.RedirectToAction "Index"
End Sub

End Class
MVC.Dispatch
%>

+ 129
- 0
App/Controllers/KitLabels/KitLabelsController.asp Переглянути файл

@@ -0,0 +1,129 @@
<% Option Explicit %>
<!--#include file="../../include_all.asp"-->
<!--#include file="../../ViewModels/KitLabelsViewModels.asp"-->
<%
Class KitLabelsController
Public Model

Public Sub Index

dim page_size : page_size = 10
dim page_num : page_num = Choice(Len(Request.Querystring("page_num")) > 0, Request.Querystring("page_num"), 1)
dim page_count, record_count
set Model = new PagedIndex_ViewModel_Class
Model.Title = "KitLabels"
set Model.KitLabels = KitLabelsRepository.FindPaged(empty, "ID", page_size, page_num, page_count, record_count)
Model.CurrentPageNumber = page_num
Model.PageSize = page_size
Model.PageCount = page_count
Model.RecordCount = record_count
%> <!--#include file="../../Views/KitLabels/Index.asp"--> <%

End Sub
Public Sub Search

dim searchValue:searchValue = Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q"))
dim page_size : page_size = 10
dim page_num : page_num = Choice(Len(Request.Querystring("page_num")) > 0, Request.Querystring("page_num"), 1)
dim page_count, record_count
set Model = new PagedIndex_ViewModel_Class
Model.Title = "KitLabels"
set Model.KitLabels = KitLabelsRepository.SearchTablePaged(Array("ID","%" & searchValue & "%","KitId","%" & searchValue & "%","OutboundSerial","%" & searchValue & "%","InBoundSerial","%" & searchValue & "%","OutboundIMB","%" & searchValue & "%","InBoundIMB","%" & searchValue & "%","OutboundIMBDigits","%" & searchValue & "%","InBoundIMBDigits","%" & searchValue & "%"),"ID", page_size, page_num, page_count, record_count)
Model.CurrentPageNumber = page_num
Model.PageSize = page_size
Model.PageCount = page_count
Model.RecordCount = record_count
%> <!--#include file="../../Views/KitLabels/Index.asp"--> <%

End Sub

Public Sub Edit

dim id : id = Request.QueryString("Id")
set Model = new Edit_ViewModel_Class
set Model.KitLabels = KitLabelsRepository.FindByID(id)
Model.Title = "Edit KitLabels"
HTMLSecurity.SetAntiCSRFToken "KitLabelsEditForm"
%> <!--#include file="../../Views/KitLabels/Edit.asp"--> <%
Flash.Success = "KitLabels Updated."
End Sub

Public Sub EditPost
MVC.RequirePost
HTMLSecurity.OnInvalidAntiCsrfTokenRedirectToActionExt "KitLabelsEditForm", Request.Form("nonce"), "Edit", Array("Id", Request.Form("Id"))
dim ID : ID = Request.Form("Id")
dim model : set model = KitLabelsRepository.FindByID(ID)
set model = Automapper.AutoMap(Request.Form, model)
'model.Validate
'If model.Validator.HasErrors then
FormCache.SerializeForm "EditKitLabels", Request.Form
' Flash.Errors = model.Validator.Errors
' MVC.RedirectToActionExt "Edit", Array("Id",ID)
'Else
KitLabelsRepository.Update model
FormCache.ClearForm "EditKitLabels"
Flash.Success = "KitLabels updated."
MVC.RedirectToAction "Index"
'End If
End Sub

Public Sub Create

dim form_params : set form_params = FormCache.DeserializeForm("NewKitLabels")
If Not form_params Is Nothing then
set Model = Automapper.AutoMap(form_params, New Create_ViewModel_Class)
Else
set Model = new Create_ViewModel_Class
End If

HTMLSecurity.SetAntiCSRFToken "KitLabelsCreateForm"

%> <!--#include file="../../Views/KitLabels/Create.asp"--> <%
End Sub

Public Sub CreatePost

MVC.RequirePost
HtmlSecurity.OnInvalidAntiCSRFTokenRedirectToAction "KitLabelsCreateForm", Request.Form("nonce"), "Create"

dim new_KitLabels_model : set new_KitLabels_model = Automapper.AutoMap(Request.Form, new KitLabelsModel_Class)

'new_KitLabels_model.Validator.Validate

'If new_KitLabels_model.Validator.HasErrors then
' FormCache.SerializeForm "NewKitLabels", Request.Form
' Flash.Errors = new_KitLabels_model.Validator.Errors
' MVC.RedirectToAction "Create"
'Else
KitLabelsRepository.AddNew new_KitLabels_model
' FormCache.ClearForm "NewKitLabels"
Flash.Success = "KitLabels added."
MVC.RedirectToAction "Index"
'End If
End Sub

Public Sub Delete
dim id : id = Request.QueryString("Id")
set Model = new Delete_ViewModel_Class
set Model.KitLabels = KitLabelsRepository.FindByID(id)
Model.Title = "Delete KitLabels"

HTMLSecurity.SetAntiCSRFToken "KitLabelsDeleteForm"

%> <!--#include file="../../Views/KitLabels/Delete.asp"--> <%
End Sub

Public Sub DeletePost
MVC.RequirePost
HtmlSecurity.OnInvalidAntiCSRFTokenRedirectToAction "KitLabelsDeleteForm", Request.Form("nonce"), "Create"

dim id : id = Request.Form("Id")
KitLabelsRepository.Delete id

Flash.Success = "KitLabels deleted."
MVC.RedirectToAction "Index"
End Sub

End Class
MVC.Dispatch
%>

+ 129
- 0
App/Controllers/Settings/SettingsController.asp Переглянути файл

@@ -0,0 +1,129 @@
<% Option Explicit %>
<!--#include file="../../include_all.asp"-->
<!--#include file="../../ViewModels/SettingsViewModels.asp"-->
<%
Class SettingsController
Public Model

Public Sub Index

dim page_size : page_size = 10
dim page_num : page_num = Choice(Len(Request.Querystring("page_num")) > 0, Request.Querystring("page_num"), 1)
dim page_count, record_count
set Model = new PagedIndex_ViewModel_Class
Model.Title = "Settings"
set Model.Settings = SettingsRepository.FindPaged(empty, "ID", page_size, page_num, page_count, record_count)
Model.CurrentPageNumber = page_num
Model.PageSize = page_size
Model.PageCount = page_count
Model.RecordCount = record_count
%> <!--#include file="../../Views/Settings/Index.asp"--> <%

End Sub
Public Sub Search

dim searchValue:searchValue = Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q"))
dim page_size : page_size = 10
dim page_num : page_num = Choice(Len(Request.Querystring("page_num")) > 0, Request.Querystring("page_num"), 1)
dim page_count, record_count
set Model = new PagedIndex_ViewModel_Class
Model.Title = "Settings"
set Model.Settings = SettingsRepository.SearchTablePaged(Array("ID","%" & searchValue & "%","Name","%" & searchValue & "%","Value","%" & searchValue & "%"),"ID", page_size, page_num, page_count, record_count)
Model.CurrentPageNumber = page_num
Model.PageSize = page_size
Model.PageCount = page_count
Model.RecordCount = record_count
%> <!--#include file="../../Views/Settings/Index.asp"--> <%

End Sub

Public Sub Edit

dim id : id = Request.QueryString("Id")
set Model = new Edit_ViewModel_Class
set Model.Settings = SettingsRepository.FindByID(id)
Model.Title = "Edit Settings"
HTMLSecurity.SetAntiCSRFToken "SettingsEditForm"
%> <!--#include file="../../Views/Settings/Edit.asp"--> <%
Flash.Success = "Settings Updated."
End Sub

Public Sub EditPost
MVC.RequirePost
HTMLSecurity.OnInvalidAntiCsrfTokenRedirectToActionExt "SettingsEditForm", Request.Form("nonce"), "Edit", Array("Id", Request.Form("Id"))
dim ID : ID = Request.Form("Id")
dim model : set model = SettingsRepository.FindByID(ID)
set model = Automapper.AutoMap(Request.Form, model)
'model.Validate
'If model.Validator.HasErrors then
FormCache.SerializeForm "EditSettings", Request.Form
' Flash.Errors = model.Validator.Errors
' MVC.RedirectToActionExt "Edit", Array("Id",ID)
'Else
SettingsRepository.Update model
FormCache.ClearForm "EditSettings"
Flash.Success = "Settings updated."
MVC.RedirectToAction "Index"
'End If
End Sub

Public Sub Create

dim form_params : set form_params = FormCache.DeserializeForm("NewSettings")
If Not form_params Is Nothing then
set Model = Automapper.AutoMap(form_params, New Create_ViewModel_Class)
Else
set Model = new Create_ViewModel_Class
End If

HTMLSecurity.SetAntiCSRFToken "SettingsCreateForm"

%> <!--#include file="../../Views/Settings/Create.asp"--> <%
End Sub

Public Sub CreatePost

MVC.RequirePost
HtmlSecurity.OnInvalidAntiCSRFTokenRedirectToAction "SettingsCreateForm", Request.Form("nonce"), "Create"

dim new_Settings_model : set new_Settings_model = Automapper.AutoMap(Request.Form, new SettingsModel_Class)

'new_Settings_model.Validator.Validate

'If new_Settings_model.Validator.HasErrors then
' FormCache.SerializeForm "NewSettings", Request.Form
' Flash.Errors = new_Settings_model.Validator.Errors
' MVC.RedirectToAction "Create"
'Else
SettingsRepository.AddNew new_Settings_model
' FormCache.ClearForm "NewSettings"
Flash.Success = "Settings added."
MVC.RedirectToAction "Index"
'End If
End Sub

Public Sub Delete
dim id : id = Request.QueryString("Id")
set Model = new Delete_ViewModel_Class
set Model.Settings = SettingsRepository.FindByID(id)
Model.Title = "Delete Settings"

HTMLSecurity.SetAntiCSRFToken "SettingsDeleteForm"

%> <!--#include file="../../Views/Settings/Delete.asp"--> <%
End Sub

Public Sub DeletePost
MVC.RequirePost
HtmlSecurity.OnInvalidAntiCSRFTokenRedirectToAction "SettingsDeleteForm", Request.Form("nonce"), "Create"

dim id : id = Request.Form("Id")
SettingsRepository.Delete id

Flash.Success = "Settings deleted."
MVC.RedirectToAction "Index"
End Sub

End Class
MVC.Dispatch
%>

+ 29
- 0
App/DAL/lib.DAL.asp Переглянути файл

@@ -0,0 +1,29 @@
<%
' This class encapsulates database access into one location, isolating database details from the rest of the app.
' Multiple databases can be handled in one of two ways:
'
' Option 1. Use a single DAL_Class instance with separate public properties for each database.
' Ex: To access Orders use DAL.Orders and to access Employees use DAL.Employees.
'
' Option 2. Use a separate DAL_Class instance for each database.
' Ex:
' dim OrdersDAL : set OrdersDAL = new DAL_Class
' OrdersDAL.ConnectionString = "..." <-- you would have to create this property to use this approach
'
' If you only access one database it is easier to just set the global DAL singleton to an instance of the
' Database_Class and use it directly. See the example project for details.

'=======================================================================================================================
' DATA ACCESS LAYER Class
'=======================================================================================================================
dim DAL__Singleton : set DAL__Singleton = Nothing

Function DAL()
If DAL__Singleton is Nothing then
set DAL__Singleton = new Database_Class
DAL__Singleton.Initialize "Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Engine Type=5;Data Source=" & Request.ServerVariables("APPL_PHYSICAL_PATH") & "Data\webdata.mdb;"

End If
set DAL = DAL__Singleton
End Function
%>

+ 302
- 0
App/DomainModels/ContactsRepository.asp Переглянути файл

@@ -0,0 +1,302 @@
<%
'=======================================================================================================================
' Contacts Model
'=======================================================================================================================

Class ContactsModel_Class
Public Validator
Public Class_Get_Properties

Public ID '90
Public JURISCODE '106
Public TownshipName '106
Public CONTACT_NAME '106
Public TownshipNum '106
Public BUSINESS_ADDRESS '106
Public TITLE '106
Public BUSINESS_ADDRESS2 '106
Public BUSINESS_ADDRESS3 '106
Public MAILING_ADDRESS '106
Public MAILING_ADDRESS2 '106
Public MAILING_ADDRESS3 '106
Public RESIDENTIAL_ADDRESS '106
Public RESIDENTIAL_ADDRESS2 '106
Public PHONENUM1 '106
Public RESIDENTIAL_ADDRESS3 '106
Public FAXNUM '122
Public PHONENUM2 '106
Public EMAIL '106

Private Sub Class_Initialize
'ValidateExitsts Me, "",""
Class_Get_Properties = Array("ID, JURISCODE, TownshipName, CONTACT_NAME, TownshipNum, BUSINESS_ADDRESS, TITLE, BUSINESS_ADDRESS2, BUSINESS_ADDRESS3, MAILING_ADDRESS, MAILING_ADDRESS2, MAILING_ADDRESS3, RESIDENTIAL_ADDRESS, RESIDENTIAL_ADDRESS2, PHONENUM1, RESIDENTIAL_ADDRESS3, FAXNUM, PHONENUM2, EMAIL")
End Sub

End CLass

'=======================================================================================================================
' Contacts Repository
'=======================================================================================================================

Class ContactsRepository_Class

Public Function FindByID(ID)
dim sql : sql = "Select [ID], [JURISCODE], [TownshipName], [CONTACT_NAME], [TownshipNum], [BUSINESS_ADDRESS], [TITLE], [BUSINESS_ADDRESS2], [BUSINESS_ADDRESS3], [MAILING_ADDRESS], [MAILING_ADDRESS2], [MAILING_ADDRESS3], [RESIDENTIAL_ADDRESS], [RESIDENTIAL_ADDRESS2], [PHONENUM1], [RESIDENTIAL_ADDRESS3], [FAXNUM], [PHONENUM2], [EMAIL] FROM [Contacts] WHERE ID = ?"
dim rs : set rs = DAL.Query(sql,ID)
If rs.EOF then
Err.Raise 1, "ContactsRepository_Class", ContactsNotFoundException("ID", ID)
Else
set FindByID = Automapper.AutoMap(rs,"ContactsModel_Class")
End If
End Function

Public Function GetAll(orderBy)
set GetAll = Find(empty,orderBy)
End Function

Public Function Find(where_kvarray, order_string_or_array)
dim sql : sql = "Select [ID], [JURISCODE], [TownshipName], [CONTACT_NAME], [TownshipNum], [BUSINESS_ADDRESS], [TITLE], [BUSINESS_ADDRESS2], [BUSINESS_ADDRESS3], [MAILING_ADDRESS], [MAILING_ADDRESS2], [MAILING_ADDRESS3], [RESIDENTIAL_ADDRESS], [RESIDENTIAL_ADDRESS2], [PHONENUM1], [RESIDENTIAL_ADDRESS3], [FAXNUM], [PHONENUM2], [EMAIL] FROM [Contacts]"

If Not IsEmpty(where_kvarray) then
sql = sql & " WHERE "
dim where_keys, where_values
KVUnzip where_kvarray, where_keys, where_values

dim i
For i = 0 to UBound(where_keys)
If i > 0 then sql = sql & " AND "
sql = sql & " " & where_keys(i) & " "
Next
End If

If Not IsEmpty(order_string_or_array) then
sql = sql & "ORDER BY "
If IsArray(order_string_or_array) then
dim order_array : order_array = order_string_or_array
For i = 0 to UBound(order_array)
If i > 0 then sql = sql & ", "
sql = sql & " " & order_array(i)
Next
Else
sql = sql & order_string_or_array & " "
End If
End If

dim rs : set rs = DAL.Query(sql, where_values)
set Find = ContactsList(rs)
Destroy rs
End Function

Public Function FindPaged(where_kvarray, order_string_or_array, per_page, page_num, ByRef page_count, ByRef record_count)
dim sql : sql = "Select [ID], [JURISCODE], [TownshipName], [CONTACT_NAME], [TownshipNum], [BUSINESS_ADDRESS], [TITLE], [BUSINESS_ADDRESS2], [BUSINESS_ADDRESS3], [MAILING_ADDRESS], [MAILING_ADDRESS2], [MAILING_ADDRESS3], [RESIDENTIAL_ADDRESS], [RESIDENTIAL_ADDRESS2], [PHONENUM1], [RESIDENTIAL_ADDRESS3], [FAXNUM], [PHONENUM2], [EMAIL] FROM [Contacts]"

If Not IsEmpty(where_kvarray) then
sql = sql & " WHERE "
dim where_keys, where_values
KVUnzip where_kvarray, where_keys, where_values

dim i
For i = 0 to UBound(where_keys)
If i > 0 then sql = sql & " AND "
sql = sql & " " & where_keys(i) & " "
Next
End If

If Not IsEmpty(order_string_or_array) then
sql = sql & "ORDER BY "
If IsArray(order_string_or_array) then
dim order_array : order_array = order_string_or_array
For i = 0 to UBound(order_array)
If i > 0 then sql = sql & ", "
sql = sql & " " & order_array(i)
Next
Else
sql = sql & order_string_or_array & " "
End If
End If

dim list : set list = new LinkedList_Class
dim rs : set rs = DAL.PagedQuery(sql, where_values, per_page, page_num)

If Not rs.EOF and Not (IsEmpty(per_page) and IsEmpty(page_num) and IsEmpty(page_count) and IsEmpty(record_count)) then
rs.PageSize = per_page
rs.AbsolutePage = page_num
page_count = rs.PageCount
record_count = rs.RecordCount
End If

set FindPaged = PagedContactsList(rs, per_page)
Destroy rs
End Function

Public Function SearchTablePaged(where_kvarray, order_string_or_array, per_page, page_num, ByRef page_count, ByRef record_count)
dim sql : sql = "Select [ID], [JURISCODE], [TownshipName], [CONTACT_NAME], [TownshipNum], [BUSINESS_ADDRESS], [TITLE], [BUSINESS_ADDRESS2], [BUSINESS_ADDRESS3], [MAILING_ADDRESS], [MAILING_ADDRESS2], [MAILING_ADDRESS3], [RESIDENTIAL_ADDRESS], [RESIDENTIAL_ADDRESS2], [PHONENUM1], [RESIDENTIAL_ADDRESS3], [FAXNUM], [PHONENUM2], [EMAIL] FROM [Contacts]"

If Not IsEmpty(where_kvarray) then
sql = sql & " WHERE "
dim where_keys, where_values
KVUnzip where_kvarray, where_keys, where_values

dim i
For i = 0 to UBound(where_keys)
If i > 0 then sql = sql & " OR"
sql = sql & " " & where_keys(i) & " LIKE ?"
Next
End If

If Not IsEmpty(order_string_or_array) then
sql = sql & " ORDER BY "
If IsArray(order_string_or_array) then
dim order_array : order_array = order_string_or_array
For i = 0 to UBound(order_array)
If i > 0 then sql = sql & ", "
sql = sql & " " & order_array(i)
Next
Else
sql = sql & order_string_or_array & " "
End If
End If

dim list : set list = new LinkedList_Class
dim rs : set rs = DAL.PagedQuery(sql, where_values, per_page, page_num)

If Not rs.EOF and Not (IsEmpty(per_page) and IsEmpty(page_num) and IsEmpty(page_count) and IsEmpty(record_count)) then
rs.PageSize = per_page
rs.AbsolutePage = page_num
page_count = rs.PageCount
record_count = rs.RecordCount
End If

set SearchTablePaged = PagedContactsList(rs, per_page)
Destroy rs
End Function

Private Function PagedContactsList(rs, per_page)
dim list : set list = new LinkedList_Class

dim x : x =0
Do While x < per_page and Not rs.EOF
list.Push Automapper.AutoMap(rs, new ContactsModel_Class)
x = x +1
rs.MoveNext
Loop
set PagedContactsList = list
End Function

Private Function ContactsNotFoundException(ByVal field_name, ByVal field_val)
ContactsNotFoundException = "Contacts was not found with " & field_name & " of '" & field_val & "'."
End Function

Private Function ContactsList(rs)
dim list : set list = new LinkedList_Class
dim model

Do until rs.EOF
set model = new ContactsModel_Class
list.Push Automapper.AutoMap(rs, model)
rs.MoveNext
Loop
set ContactsList = list
End Function

Public Sub AddNew(ByRef model)
dim sql : sql = "INSERT INTO [Contacts] (" &_
"[JURISCODE]," &_
"[TownshipName]," &_
"[CONTACT_NAME]," &_
"[TownshipNum]," &_
"[BUSINESS_ADDRESS]," &_
"[TITLE]," &_
"[BUSINESS_ADDRESS2]," &_
"[BUSINESS_ADDRESS3]," &_
"[MAILING_ADDRESS]," &_
"[MAILING_ADDRESS2]," &_
"[MAILING_ADDRESS3]," &_
"[RESIDENTIAL_ADDRESS]," &_
"[RESIDENTIAL_ADDRESS2]," &_
"[PHONENUM1]," &_
"[RESIDENTIAL_ADDRESS3]," &_
"[FAXNUM]," &_
"[PHONENUM2]," &_
"[EMAIL])" &_
"VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"
DAL.Execute sql, Array(model.JURISCODE, _
model.TownshipName, _
model.CONTACT_NAME, _
model.TownshipNum, _
model.BUSINESS_ADDRESS, _
model.TITLE, _
model.BUSINESS_ADDRESS2, _
model.BUSINESS_ADDRESS3, _
model.MAILING_ADDRESS, _
model.MAILING_ADDRESS2, _
model.MAILING_ADDRESS3, _
model.RESIDENTIAL_ADDRESS, _
model.RESIDENTIAL_ADDRESS2, _
model.PHONENUM1, _
model.RESIDENTIAL_ADDRESS3, _
model.FAXNUM, _
model.PHONENUM2, _
model.EMAIL)
sql = "SELECT TOP 1 ID FROM [Contacts] ORDER BY ID DESC"
dim rs : set rs = DAL.Query(sql, empty)
model.ID = rs("ID")
Destroy rs
End Sub

Public Sub Update(model)
dim sql : sql = "UPDATE [Contacts] SET [JURISCODE] = ?," &_
"[TownshipName] = ?," &_
"[CONTACT_NAME] = ?," &_
"[TownshipNum] = ?," &_
"[BUSINESS_ADDRESS] = ?," &_
"[TITLE] = ?," &_
"[BUSINESS_ADDRESS2] = ?," &_
"[BUSINESS_ADDRESS3] = ?," &_
"[MAILING_ADDRESS] = ?," &_
"[MAILING_ADDRESS2] = ?," &_
"[MAILING_ADDRESS3] = ?," &_
"[RESIDENTIAL_ADDRESS] = ?," &_
"[RESIDENTIAL_ADDRESS2] = ?," &_
"[PHONENUM1] = ?," &_
"[RESIDENTIAL_ADDRESS3] = ?," &_
"[FAXNUM] = ?," &_
"[PHONENUM2] = ?," &_
"[EMAIL] = ?" &_
" WHERE [ID] = ?"

DAL.Execute sql, Array(model.JURISCODE, _
model.TownshipName, _
model.CONTACT_NAME, _
model.TownshipNum, _
model.BUSINESS_ADDRESS, _
model.TITLE, _
model.BUSINESS_ADDRESS2, _
model.BUSINESS_ADDRESS3, _
model.MAILING_ADDRESS, _
model.MAILING_ADDRESS2, _
model.MAILING_ADDRESS3, _
model.RESIDENTIAL_ADDRESS, _
model.RESIDENTIAL_ADDRESS2, _
model.PHONENUM1, _
model.RESIDENTIAL_ADDRESS3, _
model.FAXNUM, _
model.PHONENUM2, _
model.EMAIL, _
model.ID)
End Sub

Public Sub Delete(id)
dim sql : sql = "DELETE FROM [Contacts] WHERE [ID] = ?"
DAL.Execute sql, id
End Sub
End Class

dim ContactsRepository__Singleton
Function ContactsRepository()
If IsEmpty(ContactsRepository__Singleton) then
set ContactsRepository__Singleton = new ContactsRepository_Class
End If
set ContactsRepository = ContactsRepository__Singleton
End Function
%>

+ 237
- 0
App/DomainModels/JurisdictionRepository.asp Переглянути файл

@@ -0,0 +1,237 @@
<%
'=======================================================================================================================
' Jurisdiction Model
'=======================================================================================================================

Class JurisdictionModel_Class
Public Validator
Public Class_Get_Properties

Public JCode '106
Public Name '106
Public Mailing_Address '106
Public CSZ '106
Public IMB '106
Public IMB_Digits '106

Private Sub Class_Initialize
'ValidateExitsts Me, "",""
Class_Get_Properties = Array("JCode, Name, Mailing_Address, CSZ, IMB, IMB_Digits")
End Sub

End CLass

'=======================================================================================================================
' Jurisdiction Repository
'=======================================================================================================================

Class JurisdictionRepository_Class

Public Function FindByJCode(JCode)
dim sql : sql = "Select [JCode], [Name], [Mailing_Address], [CSZ], [IMB], [IMB_Digits] FROM [Jurisdiction] WHERE JCode = ?"
dim rs : set rs = DAL.Query(sql,JCode)
If rs.EOF then
Err.Raise 1, "JurisdictionRepository_Class", JurisdictionNotFoundException("JCode", JCode)
Else
set FindByJCode = Automapper.AutoMap(rs,"JurisdictionModel_Class")
End If
End Function

Public Function GetAll(orderBy)
set GetAll = Find(empty,orderBy)
End Function

Public Function Find(where_kvarray, order_string_or_array)
dim sql : sql = "Select [JCode], [Name], [Mailing_Address], [CSZ], [IMB], [IMB_Digits] FROM [Jurisdiction]"

If Not IsEmpty(where_kvarray) then
sql = sql & " WHERE "
dim where_keys, where_values
KVUnzip where_kvarray, where_keys, where_values

dim i
For i = 0 to UBound(where_keys)
If i > 0 then sql = sql & " AND "
sql = sql & " " & where_keys(i) & " "
Next
End If

If Not IsEmpty(order_string_or_array) then
sql = sql & "ORDER BY "
If IsArray(order_string_or_array) then
dim order_array : order_array = order_string_or_array
For i = 0 to UBound(order_array)
If i > 0 then sql = sql & ", "
sql = sql & " " & order_array(i)
Next
Else
sql = sql & order_string_or_array & " "
End If
End If

dim rs : set rs = DAL.Query(sql, where_values)
set Find = JurisdictionList(rs)
Destroy rs
End Function

Public Function FindPaged(where_kvarray, order_string_or_array, per_page, page_num, ByRef page_count, ByRef record_count)
dim sql : sql = "Select [JCode], [Name], [Mailing_Address], [CSZ], [IMB], [IMB_Digits] FROM [Jurisdiction]"

If Not IsEmpty(where_kvarray) then
sql = sql & " WHERE "
dim where_keys, where_values
KVUnzip where_kvarray, where_keys, where_values

dim i
For i = 0 to UBound(where_keys)
If i > 0 then sql = sql & " AND "
sql = sql & " " & where_keys(i) & " "
Next
End If

If Not IsEmpty(order_string_or_array) then
sql = sql & "ORDER BY "
If IsArray(order_string_or_array) then
dim order_array : order_array = order_string_or_array
For i = 0 to UBound(order_array)
If i > 0 then sql = sql & ", "
sql = sql & " " & order_array(i)
Next
Else
sql = sql & order_string_or_array & " "
End If
End If

dim list : set list = new LinkedList_Class
dim rs : set rs = DAL.PagedQuery(sql, where_values, per_page, page_num)

If Not rs.EOF and Not (IsEmpty(per_page) and IsEmpty(page_num) and IsEmpty(page_count) and IsEmpty(record_count)) then
rs.PageSize = per_page
rs.AbsolutePage = page_num
page_count = rs.PageCount
record_count = rs.RecordCount
End If

set FindPaged = PagedJurisdictionList(rs, per_page)
Destroy rs
End Function

Public Function SearchTablePaged(where_kvarray, order_string_or_array, per_page, page_num, ByRef page_count, ByRef record_count)
dim sql : sql = "Select [JCode], [Name], [Mailing_Address], [CSZ], [IMB], [IMB_Digits] FROM [Jurisdiction]"

If Not IsEmpty(where_kvarray) then
sql = sql & " WHERE "
dim where_keys, where_values
KVUnzip where_kvarray, where_keys, where_values

dim i
For i = 0 to UBound(where_keys)
If i > 0 then sql = sql & " OR"
sql = sql & " " & where_keys(i) & " LIKE ?"
Next
End If

If Not IsEmpty(order_string_or_array) then
sql = sql & " ORDER BY "
If IsArray(order_string_or_array) then
dim order_array : order_array = order_string_or_array
For i = 0 to UBound(order_array)
If i > 0 then sql = sql & ", "
sql = sql & " " & order_array(i)
Next
Else
sql = sql & order_string_or_array & " "
End If
End If

dim list : set list = new LinkedList_Class
dim rs : set rs = DAL.PagedQuery(sql, where_values, per_page, page_num)

If Not rs.EOF and Not (IsEmpty(per_page) and IsEmpty(page_num) and IsEmpty(page_count) and IsEmpty(record_count)) then
rs.PageSize = per_page
rs.AbsolutePage = page_num
page_count = rs.PageCount
record_count = rs.RecordCount
End If

set SearchTablePaged = PagedJurisdictionList(rs, per_page)
Destroy rs
End Function

Private Function PagedJurisdictionList(rs, per_page)
dim list : set list = new LinkedList_Class

dim x : x =0
Do While x < per_page and Not rs.EOF
list.Push Automapper.AutoMap(rs, new JurisdictionModel_Class)
x = x +1
rs.MoveNext
Loop
set PagedJurisdictionList = list
End Function

Private Function JurisdictionNotFoundException(ByVal field_name, ByVal field_val)
JurisdictionNotFoundException = "Jurisdiction was not found with " & field_name & " of '" & field_val & "'."
End Function

Private Function JurisdictionList(rs)
dim list : set list = new LinkedList_Class
dim model

Do until rs.EOF
set model = new JurisdictionModel_Class
list.Push Automapper.AutoMap(rs, model)
rs.MoveNext
Loop
set JurisdictionList = list
End Function

Public Sub AddNew(ByRef model)
dim sql : sql = "INSERT INTO [Jurisdiction] (" &_
"[Name]," &_
"[Mailing_Address]," &_
"[CSZ]," &_
"[IMB]," &_
"[IMB_Digits])" &_
"VALUES (?,?,?,?,?)"
DAL.Execute sql, Array(model.Name, _
model.Mailing_Address, _
model.CSZ, _
model.IMB, _
model.IMB_Digits)
sql = "SELECT TOP 1 JCode FROM [Jurisdiction] ORDER BY JCode DESC"
dim rs : set rs = DAL.Query(sql, empty)
model.JCode = rs("JCode")
Destroy rs
End Sub

Public Sub Update(model)
dim sql : sql = "UPDATE [Jurisdiction] SET [Name] = ?," &_
"[Mailing_Address] = ?," &_
"[CSZ] = ?," &_
"[IMB] = ?," &_
"[IMB_Digits] = ?" &_
" WHERE [JCode] = ?"

DAL.Execute sql, Array(model.Name, _
model.Mailing_Address, _
model.CSZ, _
model.IMB, _
model.IMB_Digits, _
model.JCode)
End Sub

Public Sub Delete(id)
dim sql : sql = "DELETE FROM [Jurisdiction] WHERE [JCode] = ?"
DAL.Execute sql, id
End Sub
End Class

dim JurisdictionRepository__Singleton
Function JurisdictionRepository()
If IsEmpty(JurisdictionRepository__Singleton) then
set JurisdictionRepository__Singleton = new JurisdictionRepository_Class
End If
set JurisdictionRepository = JurisdictionRepository__Singleton
End Function
%>

+ 247
- 0
App/DomainModels/KitLabelsRepository.asp Переглянути файл

@@ -0,0 +1,247 @@
<%
'=======================================================================================================================
' KitLabels Model
'=======================================================================================================================

Class KitLabelsModel_Class
Public Validator
Public Class_Get_Properties

Public ID '90
Public KitId '122
Public OutboundSerial '106
Public InBoundSerial '106
Public OutboundIMB '106
Public InBoundIMB '106
Public OutboundIMBDigits '106
Public InBoundIMBDigits '106

Private Sub Class_Initialize
'ValidateExitsts Me, "",""
Class_Get_Properties = Array("ID, KitId, OutboundSerial, InBoundSerial, OutboundIMB, InBoundIMB, OutboundIMBDigits, InBoundIMBDigits")
End Sub

End CLass

'=======================================================================================================================
' KitLabels Repository
'=======================================================================================================================

Class KitLabelsRepository_Class

Public Function FindByID(ID)
dim sql : sql = "Select [ID], [KitId], [OutboundSerial], [InBoundSerial], [OutboundIMB], [InBoundIMB], [OutboundIMBDigits], [InBoundIMBDigits] FROM [KitLabels] WHERE ID = ?"
dim rs : set rs = DAL.Query(sql,ID)
If rs.EOF then
Err.Raise 1, "KitLabelsRepository_Class", KitLabelsNotFoundException("ID", ID)
Else
set FindByID = Automapper.AutoMap(rs,"KitLabelsModel_Class")
End If
End Function

Public Function GetAll(orderBy)
set GetAll = Find(empty,orderBy)
End Function

Public Function Find(where_kvarray, order_string_or_array)
dim sql : sql = "Select [ID], [KitId], [OutboundSerial], [InBoundSerial], [OutboundIMB], [InBoundIMB], [OutboundIMBDigits], [InBoundIMBDigits] FROM [KitLabels]"

If Not IsEmpty(where_kvarray) then
sql = sql & " WHERE "
dim where_keys, where_values
KVUnzip where_kvarray, where_keys, where_values

dim i
For i = 0 to UBound(where_keys)
If i > 0 then sql = sql & " AND "
sql = sql & " " & where_keys(i) & " "
Next
End If

If Not IsEmpty(order_string_or_array) then
sql = sql & "ORDER BY "
If IsArray(order_string_or_array) then
dim order_array : order_array = order_string_or_array
For i = 0 to UBound(order_array)
If i > 0 then sql = sql & ", "
sql = sql & " " & order_array(i)
Next
Else
sql = sql & order_string_or_array & " "
End If
End If

dim rs : set rs = DAL.Query(sql, where_values)
set Find = KitLabelsList(rs)
Destroy rs
End Function

Public Function FindPaged(where_kvarray, order_string_or_array, per_page, page_num, ByRef page_count, ByRef record_count)
dim sql : sql = "Select [ID], [KitId], [OutboundSerial], [InBoundSerial], [OutboundIMB], [InBoundIMB], [OutboundIMBDigits], [InBoundIMBDigits] FROM [KitLabels]"

If Not IsEmpty(where_kvarray) then
sql = sql & " WHERE "
dim where_keys, where_values
KVUnzip where_kvarray, where_keys, where_values

dim i
For i = 0 to UBound(where_keys)
If i > 0 then sql = sql & " AND "
sql = sql & " " & where_keys(i) & " "
Next
End If

If Not IsEmpty(order_string_or_array) then
sql = sql & "ORDER BY "
If IsArray(order_string_or_array) then
dim order_array : order_array = order_string_or_array
For i = 0 to UBound(order_array)
If i > 0 then sql = sql & ", "
sql = sql & " " & order_array(i)
Next
Else
sql = sql & order_string_or_array & " "
End If
End If

dim list : set list = new LinkedList_Class
dim rs : set rs = DAL.PagedQuery(sql, where_values, per_page, page_num)

If Not rs.EOF and Not (IsEmpty(per_page) and IsEmpty(page_num) and IsEmpty(page_count) and IsEmpty(record_count)) then
rs.PageSize = per_page
rs.AbsolutePage = page_num
page_count = rs.PageCount
record_count = rs.RecordCount
End If

set FindPaged = PagedKitLabelsList(rs, per_page)
Destroy rs
End Function

Public Function SearchTablePaged(where_kvarray, order_string_or_array, per_page, page_num, ByRef page_count, ByRef record_count)
dim sql : sql = "Select [ID], [KitId], [OutboundSerial], [InBoundSerial], [OutboundIMB], [InBoundIMB], [OutboundIMBDigits], [InBoundIMBDigits] FROM [KitLabels]"

If Not IsEmpty(where_kvarray) then
sql = sql & " WHERE "
dim where_keys, where_values
KVUnzip where_kvarray, where_keys, where_values

dim i
For i = 0 to UBound(where_keys)
If i > 0 then sql = sql & " OR"
sql = sql & " " & where_keys(i) & " LIKE ?"
Next
End If

If Not IsEmpty(order_string_or_array) then
sql = sql & " ORDER BY "
If IsArray(order_string_or_array) then
dim order_array : order_array = order_string_or_array
For i = 0 to UBound(order_array)
If i > 0 then sql = sql & ", "
sql = sql & " " & order_array(i)
Next
Else
sql = sql & order_string_or_array & " "
End If
End If

dim list : set list = new LinkedList_Class
dim rs : set rs = DAL.PagedQuery(sql, where_values, per_page, page_num)

If Not rs.EOF and Not (IsEmpty(per_page) and IsEmpty(page_num) and IsEmpty(page_count) and IsEmpty(record_count)) then
rs.PageSize = per_page
rs.AbsolutePage = page_num
page_count = rs.PageCount
record_count = rs.RecordCount
End If

set SearchTablePaged = PagedKitLabelsList(rs, per_page)
Destroy rs
End Function

Private Function PagedKitLabelsList(rs, per_page)
dim list : set list = new LinkedList_Class

dim x : x =0
Do While x < per_page and Not rs.EOF
list.Push Automapper.AutoMap(rs, new KitLabelsModel_Class)
x = x +1
rs.MoveNext
Loop
set PagedKitLabelsList = list
End Function

Private Function KitLabelsNotFoundException(ByVal field_name, ByVal field_val)
KitLabelsNotFoundException = "KitLabels was not found with " & field_name & " of '" & field_val & "'."
End Function

Private Function KitLabelsList(rs)
dim list : set list = new LinkedList_Class
dim model

Do until rs.EOF
set model = new KitLabelsModel_Class
list.Push Automapper.AutoMap(rs, model)
rs.MoveNext
Loop
set KitLabelsList = list
End Function

Public Sub AddNew(ByRef model)
dim sql : sql = "INSERT INTO [KitLabels] (" &_
"[KitId]," &_
"[OutboundSerial]," &_
"[InBoundSerial]," &_
"[OutboundIMB]," &_
"[InBoundIMB]," &_
"[OutboundIMBDigits]," &_
"[InBoundIMBDigits])" &_
"VALUES (?,?,?,?,?,?,?)"
DAL.Execute sql, Array(model.KitId, _
model.OutboundSerial, _
model.InBoundSerial, _
model.OutboundIMB, _
model.InBoundIMB, _
model.OutboundIMBDigits, _
model.InBoundIMBDigits)
sql = "SELECT TOP 1 ID FROM [KitLabels] ORDER BY ID DESC"
dim rs : set rs = DAL.Query(sql, empty)
model.ID = rs("ID")
Destroy rs
End Sub

Public Sub Update(model)
dim sql : sql = "UPDATE [KitLabels] SET [KitId] = ?," &_
"[OutboundSerial] = ?," &_
"[InBoundSerial] = ?," &_
"[OutboundIMB] = ?," &_
"[InBoundIMB] = ?," &_
"[OutboundIMBDigits] = ?," &_
"[InBoundIMBDigits] = ?" &_
" WHERE [ID] = ?"

DAL.Execute sql, Array(model.KitId, _
model.OutboundSerial, _
model.InBoundSerial, _
model.OutboundIMB, _
model.InBoundIMB, _
model.OutboundIMBDigits, _
model.InBoundIMBDigits, _
model.ID)
End Sub

Public Sub Delete(id)
dim sql : sql = "DELETE FROM [KitLabels] WHERE [ID] = ?"
DAL.Execute sql, id
End Sub
End Class

dim KitLabelsRepository__Singleton
Function KitLabelsRepository()
If IsEmpty(KitLabelsRepository__Singleton) then
set KitLabelsRepository__Singleton = new KitLabelsRepository_Class
End If
set KitLabelsRepository = KitLabelsRepository__Singleton
End Function
%>

+ 222
- 0
App/DomainModels/KitRepository.asp Переглянути файл

@@ -0,0 +1,222 @@
<%
'=======================================================================================================================
' Kit Model
'=======================================================================================================================

Class KitModel_Class
Public Validator
Public Class_Get_Properties

Public ID '90
Public JobNumber '106
Public Jcode '106

Private Sub Class_Initialize
'ValidateExitsts Me, "",""
Class_Get_Properties = Array("ID, JobNumber, Jcode")
End Sub

End CLass

'=======================================================================================================================
' Kit Repository
'=======================================================================================================================

Class KitRepository_Class

Public Function FindByID(ID)
dim sql : sql = "Select [ID], [JobNumber], [Jcode] FROM [Kit] WHERE ID = ?"
dim rs : set rs = DAL.Query(sql,ID)
If rs.EOF then
Err.Raise 1, "KitRepository_Class", KitNotFoundException("ID", ID)
Else
set FindByID = Automapper.AutoMap(rs,"KitModel_Class")
End If
End Function

Public Function GetAll(orderBy)
set GetAll = Find(empty,orderBy)
End Function

Public Function Find(where_kvarray, order_string_or_array)
dim sql : sql = "Select [ID], [JobNumber], [Jcode] FROM [Kit]"

If Not IsEmpty(where_kvarray) then
sql = sql & " WHERE "
dim where_keys, where_values
KVUnzip where_kvarray, where_keys, where_values

dim i
For i = 0 to UBound(where_keys)
If i > 0 then sql = sql & " AND "
sql = sql & " " & where_keys(i) & " "
Next
End If

If Not IsEmpty(order_string_or_array) then
sql = sql & "ORDER BY "
If IsArray(order_string_or_array) then
dim order_array : order_array = order_string_or_array
For i = 0 to UBound(order_array)
If i > 0 then sql = sql & ", "
sql = sql & " " & order_array(i)
Next
Else
sql = sql & order_string_or_array & " "
End If
End If

dim rs : set rs = DAL.Query(sql, where_values)
set Find = KitList(rs)
Destroy rs
End Function

Public Function FindPaged(where_kvarray, order_string_or_array, per_page, page_num, ByRef page_count, ByRef record_count)
dim sql : sql = "Select [ID], [JobNumber], [Jcode] FROM [Kit]"

If Not IsEmpty(where_kvarray) then
sql = sql & " WHERE "
dim where_keys, where_values
KVUnzip where_kvarray, where_keys, where_values

dim i
For i = 0 to UBound(where_keys)
If i > 0 then sql = sql & " AND "
sql = sql & " " & where_keys(i) & " "
Next
End If

If Not IsEmpty(order_string_or_array) then
sql = sql & "ORDER BY "
If IsArray(order_string_or_array) then
dim order_array : order_array = order_string_or_array
For i = 0 to UBound(order_array)
If i > 0 then sql = sql & ", "
sql = sql & " " & order_array(i)
Next
Else
sql = sql & order_string_or_array & " "
End If
End If

dim list : set list = new LinkedList_Class
dim rs : set rs = DAL.PagedQuery(sql, where_values, per_page, page_num)

If Not rs.EOF and Not (IsEmpty(per_page) and IsEmpty(page_num) and IsEmpty(page_count) and IsEmpty(record_count)) then
rs.PageSize = per_page
rs.AbsolutePage = page_num
page_count = rs.PageCount
record_count = rs.RecordCount
End If

set FindPaged = PagedKitList(rs, per_page)
Destroy rs
End Function

Public Function SearchTablePaged(where_kvarray, order_string_or_array, per_page, page_num, ByRef page_count, ByRef record_count)
dim sql : sql = "Select [ID], [JobNumber], [Jcode] FROM [Kit]"

If Not IsEmpty(where_kvarray) then
sql = sql & " WHERE "
dim where_keys, where_values
KVUnzip where_kvarray, where_keys, where_values

dim i
For i = 0 to UBound(where_keys)
If i > 0 then sql = sql & " OR"
sql = sql & " " & where_keys(i) & " LIKE ?"
Next
End If

If Not IsEmpty(order_string_or_array) then
sql = sql & " ORDER BY "
If IsArray(order_string_or_array) then
dim order_array : order_array = order_string_or_array
For i = 0 to UBound(order_array)
If i > 0 then sql = sql & ", "
sql = sql & " " & order_array(i)
Next
Else
sql = sql & order_string_or_array & " "
End If
End If

dim list : set list = new LinkedList_Class
dim rs : set rs = DAL.PagedQuery(sql, where_values, per_page, page_num)

If Not rs.EOF and Not (IsEmpty(per_page) and IsEmpty(page_num) and IsEmpty(page_count) and IsEmpty(record_count)) then
rs.PageSize = per_page
rs.AbsolutePage = page_num
page_count = rs.PageCount
record_count = rs.RecordCount
End If

set SearchTablePaged = PagedKitList(rs, per_page)
Destroy rs
End Function

Private Function PagedKitList(rs, per_page)
dim list : set list = new LinkedList_Class

dim x : x =0
Do While x < per_page and Not rs.EOF
list.Push Automapper.AutoMap(rs, new KitModel_Class)
x = x +1
rs.MoveNext
Loop
set PagedKitList = list
End Function

Private Function KitNotFoundException(ByVal field_name, ByVal field_val)
KitNotFoundException = "Kit was not found with " & field_name & " of '" & field_val & "'."
End Function

Private Function KitList(rs)
dim list : set list = new LinkedList_Class
dim model

Do until rs.EOF
set model = new KitModel_Class
list.Push Automapper.AutoMap(rs, model)
rs.MoveNext
Loop
set KitList = list
End Function

Public Sub AddNew(ByRef model)
dim sql : sql = "INSERT INTO [Kit] (" &_
"[JobNumber]," &_
"[Jcode])" &_
"VALUES (?,?)"
DAL.Execute sql, Array(model.JobNumber, _
model.Jcode)
sql = "SELECT TOP 1 ID FROM [Kit] ORDER BY ID DESC"
dim rs : set rs = DAL.Query(sql, empty)
model.ID = rs("ID")
Destroy rs
End Sub

Public Sub Update(model)
dim sql : sql = "UPDATE [Kit] SET [JobNumber] = ?," &_
"[Jcode] = ?" &_
" WHERE [ID] = ?"

DAL.Execute sql, Array(model.JobNumber, _
model.Jcode, _
model.ID)
End Sub

Public Sub Delete(id)
dim sql : sql = "DELETE FROM [Kit] WHERE [ID] = ?"
DAL.Execute sql, id
End Sub
End Class

dim KitRepository__Singleton
Function KitRepository()
If IsEmpty(KitRepository__Singleton) then
set KitRepository__Singleton = new KitRepository_Class
End If
set KitRepository = KitRepository__Singleton
End Function
%>

+ 222
- 0
App/DomainModels/SettingsRepository.asp Переглянути файл

@@ -0,0 +1,222 @@
<%
'=======================================================================================================================
' Settings Model
'=======================================================================================================================

Class SettingsModel_Class
Public Validator
Public Class_Get_Properties

Public ID '90
Public Name '106
Public Value '106

Private Sub Class_Initialize
'ValidateExitsts Me, "",""
Class_Get_Properties = Array("ID, Name, Value")
End Sub

End CLass

'=======================================================================================================================
' Settings Repository
'=======================================================================================================================

Class SettingsRepository_Class

Public Function FindByID(ID)
dim sql : sql = "Select [ID], [Name], [Value] FROM [Settings] WHERE ID = ?"
dim rs : set rs = DAL.Query(sql,ID)
If rs.EOF then
Err.Raise 1, "SettingsRepository_Class", SettingsNotFoundException("ID", ID)
Else
set FindByID = Automapper.AutoMap(rs,"SettingsModel_Class")
End If
End Function

Public Function GetAll(orderBy)
set GetAll = Find(empty,orderBy)
End Function

Public Function Find(where_kvarray, order_string_or_array)
dim sql : sql = "Select [ID], [Name], [Value] FROM [Settings]"

If Not IsEmpty(where_kvarray) then
sql = sql & " WHERE "
dim where_keys, where_values
KVUnzip where_kvarray, where_keys, where_values

dim i
For i = 0 to UBound(where_keys)
If i > 0 then sql = sql & " AND "
sql = sql & " " & where_keys(i) & " "
Next
End If

If Not IsEmpty(order_string_or_array) then
sql = sql & "ORDER BY "
If IsArray(order_string_or_array) then
dim order_array : order_array = order_string_or_array
For i = 0 to UBound(order_array)
If i > 0 then sql = sql & ", "
sql = sql & " " & order_array(i)
Next
Else
sql = sql & order_string_or_array & " "
End If
End If

dim rs : set rs = DAL.Query(sql, where_values)
set Find = SettingsList(rs)
Destroy rs
End Function

Public Function FindPaged(where_kvarray, order_string_or_array, per_page, page_num, ByRef page_count, ByRef record_count)
dim sql : sql = "Select [ID], [Name], [Value] FROM [Settings]"

If Not IsEmpty(where_kvarray) then
sql = sql & " WHERE "
dim where_keys, where_values
KVUnzip where_kvarray, where_keys, where_values

dim i
For i = 0 to UBound(where_keys)
If i > 0 then sql = sql & " AND "
sql = sql & " " & where_keys(i) & " "
Next
End If

If Not IsEmpty(order_string_or_array) then
sql = sql & "ORDER BY "
If IsArray(order_string_or_array) then
dim order_array : order_array = order_string_or_array
For i = 0 to UBound(order_array)
If i > 0 then sql = sql & ", "
sql = sql & " " & order_array(i)
Next
Else
sql = sql & order_string_or_array & " "
End If
End If

dim list : set list = new LinkedList_Class
dim rs : set rs = DAL.PagedQuery(sql, where_values, per_page, page_num)

If Not rs.EOF and Not (IsEmpty(per_page) and IsEmpty(page_num) and IsEmpty(page_count) and IsEmpty(record_count)) then
rs.PageSize = per_page
rs.AbsolutePage = page_num
page_count = rs.PageCount
record_count = rs.RecordCount
End If

set FindPaged = PagedSettingsList(rs, per_page)
Destroy rs
End Function

Public Function SearchTablePaged(where_kvarray, order_string_or_array, per_page, page_num, ByRef page_count, ByRef record_count)
dim sql : sql = "Select [ID], [Name], [Value] FROM [Settings]"

If Not IsEmpty(where_kvarray) then
sql = sql & " WHERE "
dim where_keys, where_values
KVUnzip where_kvarray, where_keys, where_values

dim i
For i = 0 to UBound(where_keys)
If i > 0 then sql = sql & " OR"
sql = sql & " " & where_keys(i) & " LIKE ?"
Next
End If

If Not IsEmpty(order_string_or_array) then
sql = sql & " ORDER BY "
If IsArray(order_string_or_array) then
dim order_array : order_array = order_string_or_array
For i = 0 to UBound(order_array)
If i > 0 then sql = sql & ", "
sql = sql & " " & order_array(i)
Next
Else
sql = sql & order_string_or_array & " "
End If
End If

dim list : set list = new LinkedList_Class
dim rs : set rs = DAL.PagedQuery(sql, where_values, per_page, page_num)

If Not rs.EOF and Not (IsEmpty(per_page) and IsEmpty(page_num) and IsEmpty(page_count) and IsEmpty(record_count)) then
rs.PageSize = per_page
rs.AbsolutePage = page_num
page_count = rs.PageCount
record_count = rs.RecordCount
End If

set SearchTablePaged = PagedSettingsList(rs, per_page)
Destroy rs
End Function

Private Function PagedSettingsList(rs, per_page)
dim list : set list = new LinkedList_Class

dim x : x =0
Do While x < per_page and Not rs.EOF
list.Push Automapper.AutoMap(rs, new SettingsModel_Class)
x = x +1
rs.MoveNext
Loop
set PagedSettingsList = list
End Function

Private Function SettingsNotFoundException(ByVal field_name, ByVal field_val)
SettingsNotFoundException = "Settings was not found with " & field_name & " of '" & field_val & "'."
End Function

Private Function SettingsList(rs)
dim list : set list = new LinkedList_Class
dim model

Do until rs.EOF
set model = new SettingsModel_Class
list.Push Automapper.AutoMap(rs, model)
rs.MoveNext
Loop
set SettingsList = list
End Function

Public Sub AddNew(ByRef model)
dim sql : sql = "INSERT INTO [Settings] (" &_
"[Name]," &_
"[Value])" &_
"VALUES (?,?)"
DAL.Execute sql, Array(model.Name, _
model.Value)
sql = "SELECT TOP 1 ID FROM [Settings] ORDER BY ID DESC"
dim rs : set rs = DAL.Query(sql, empty)
model.ID = rs("ID")
Destroy rs
End Sub

Public Sub Update(model)
dim sql : sql = "UPDATE [Settings] SET [Name] = ?," &_
"[Value] = ?" &_
" WHERE [ID] = ?"

DAL.Execute sql, Array(model.Name, _
model.Value, _
model.ID)
End Sub

Public Sub Delete(id)
dim sql : sql = "DELETE FROM [Settings] WHERE [ID] = ?"
DAL.Execute sql, id
End Sub
End Class

dim SettingsRepository__Singleton
Function SettingsRepository()
If IsEmpty(SettingsRepository__Singleton) then
set SettingsRepository__Singleton = new SettingsRepository_Class
End If
set SettingsRepository = SettingsRepository__Singleton
End Function
%>

+ 716
- 0
App/ScaffoldRepo.vbs Переглянути файл

@@ -0,0 +1,716 @@
Const IncludeDirectory = "F:\Development\VBS Includes\"

includeFile "adovbs"
includeFile "CLogger"
includeFile "Public_Functions"
includeFile "VBSEnvironment"
includeFile "Database_Class"
includeFile "lib.collections"

Dim props,fieldNamesArray
Dim oConn,fso,includedFile,rs
Dim fixedTableName,tableName
Dim PrimaryKeyDictionary
Set oConn = WScript.CreateObject("ADODB.Connection")
Set fso = WScript.CreateObject("Scripting.Filesystemobject")
oConn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=F:\Development\Tracking_Kits\Data\webdata.mdb"
'oConn.ConnectionString = "Provider=SQLOLEDB;Data Source=danielsubuntu,15789;Initial Catalog=northwind;User Id=sa;Password=SunBrightShine!;"

Init
fixedTableName = Replace(rs("TABLE_NAME")," ","_")
tableName = rs("TABLE_NAME")
Do While Not rs.EOF
fixedTableName = Replace(rs("TABLE_NAME")," ","_")
tableName = rs("TABLE_NAME")
'If tableName <> "meta_migrations" Then
If tableName <> "meta_migrations" AND tableName = "KitLabels" Then

debug.WriteLine(tableName)
If Not fso.FolderExists(ScriptDirectory()& "Controllers\"& fixedTableName) Then fso.CreateFolder(ScriptDirectory()& "Controllers\"& fixedTableName)
If Not fso.FolderExists(ScriptDirectory()& "Controllers\") Then fso.CreateFolder(ScriptDirectory()& "Controllers\")
If Not fso.FolderExists(ScriptDirectory()& "Views\" & Replace(tableName," ","_")) Then fso.CreateFolder(ScriptDirectory()& "Views\" & Replace(tableName," ","_"))
Set file = fso.CreateTextFile(ScriptDirectory()& "DomainModels\" & fixedTableName & "Repository.asp",True)
includedFile.WriteLine("<!--#include file=""DomainModels/"& fixedTableName & "Repository.asp""-->")
file.WriteLine("<%")
file.WriteLine("'=======================================================================================================================")
file.WriteLine("' " & fixedTableName & " Model")
file.WriteLine("'=======================================================================================================================")
file.WriteLine("")
file.WriteLine("Class " & fixedTableName & "Model_Class")
file.WriteLine(" Public Validator")
file.WriteLine(" Public Class_Get_Properties")
file.WriteLine("")
InitFieldNameIterator ' This Sub is werid and needs to be looked at
fieldNamesArray = props.toArray()
file.WriteLine("")
file.WriteLine(" Private Sub Class_Initialize")
file.WriteLine(" 'ValidateExitsts Me, """",""""")
file.WriteLine(" Class_Get_Properties = Array(""" & Join (fieldNamesArray,", ") & """)")
file.WriteLine(" End Sub")
file.WriteLine("")
file.WriteLine("End CLass")
file.WriteLine("")
file.WriteLine("'=======================================================================================================================")
file.WriteLine("' " & tableName & " Repository")
file.WriteLine("'=======================================================================================================================")
file.WriteLine("")
file.WriteLine("Class " & fixedTableName & "Repository_Class")
file.WriteLine("")
file.WriteLine(" Public Function FindBy" & PrimaryKeyDictionary(tableName) & "("& PrimaryKeyDictionary(tableName) & ")")
file.WriteLine(" dim sql : sql = ""Select [" & Join (fieldNamesArray,"], [") & "] FROM [" & tableName & "] WHERE " & PrimaryKeyDictionary(tableName) & " = ?""")
file.WriteLine(" dim rs : set rs = DAL.Query(sql," & PrimaryKeyDictionary(tableName) & ")")
File.WriteLine(" If rs.EOF then")
File.WriteLine(" Err.Raise 1, """ & fixedTableName & "Repository_Class"", "& fixedTableName &"NotFoundException(""" & PrimaryKeyDictionary(tableName) &""", "& PrimaryKeyDictionary(tableName) & ")")
File.WriteLine(" Else")
File.WriteLine(" set FindBy" & PrimaryKeyDictionary(tableName) & " = Automapper.AutoMap(rs,""" & tableName & "Model_Class" & """)")
file.WriteLine(" End If")
file.WriteLine(" End Function")
file.WriteLine("")
file.WriteLine(" Public Function GetAll(orderBy)")
file.WriteLine(" set GetAll = Find(empty,orderBy)")
file.WriteLine(" End Function")
file.WriteLine("")
file.WriteLine(" Public Function Find(where_kvarray, order_string_or_array)")
file.WriteLine(" dim sql : sql = ""Select [" & Join (fieldNamesArray,"], [") & "] FROM [" & tableName & "]""")
File.WriteLine("")
File.WriteLine(" If Not IsEmpty(where_kvarray) then")
File.WriteLine(" sql = sql & "" WHERE """)
File.WriteLine(" dim where_keys, where_values")
File.WriteLine(" KVUnzip where_kvarray, where_keys, where_values")
file.WriteLine("")
file.WriteLine(" dim i")
file.WriteLine(" For i = 0 to UBound(where_keys)")
file.WriteLine(" If i > 0 then sql = sql & "" AND """)
file.WriteLine(" sql = sql & "" "" & where_keys(i) & "" """)
file.WriteLine(" Next")
file.WriteLine(" End If")
file.WriteLine("")
file.WriteLine(" If Not IsEmpty(order_string_or_array) then")
file.WriteLine(" sql = sql & ""ORDER BY """)
file.WriteLine(" If IsArray(order_string_or_array) then")
file.WriteLine(" dim order_array : order_array = order_string_or_array")
file.WriteLine(" For i = 0 to UBound(order_array)")
file.WriteLine(" If i > 0 then sql = sql & "", """)
file.WriteLine(" sql = sql & "" "" & order_array(i)")
file.WriteLine(" Next")
file.WriteLine(" Else")
file.WriteLine(" sql = sql & order_string_or_array & "" """)
file.WriteLine(" End If")
file.WriteLine(" End If")
file.WriteLine("")
file.WriteLine(" dim rs : set rs = DAL.Query(sql, where_values)")
file.WriteLine(" set Find = " & fixedTableName & "List(rs)")
file.WriteLine(" Destroy rs")
file.WriteLine(" End Function")
file.WriteLine("")
file.WriteLine(" Public Function FindPaged(where_kvarray, order_string_or_array, per_page, page_num, ByRef page_count, ByRef record_count)")
file.WriteLine(" dim sql : sql = ""Select [" & Join (fieldNamesArray,"], [") & "] FROM [" & tableName & "]""")
File.WriteLine("")
File.WriteLine(" If Not IsEmpty(where_kvarray) then")
File.WriteLine(" sql = sql & "" WHERE """)
File.WriteLine(" dim where_keys, where_values")
File.WriteLine(" KVUnzip where_kvarray, where_keys, where_values")
file.WriteLine("")
file.WriteLine(" dim i")
file.WriteLine(" For i = 0 to UBound(where_keys)")
file.WriteLine(" If i > 0 then sql = sql & "" AND """)
file.WriteLine(" sql = sql & "" "" & where_keys(i) & "" """)
file.WriteLine(" Next")
file.WriteLine(" End If")
file.WriteLine("")
file.WriteLine(" If Not IsEmpty(order_string_or_array) then")
file.WriteLine(" sql = sql & ""ORDER BY """)
file.WriteLine(" If IsArray(order_string_or_array) then")
file.WriteLine(" dim order_array : order_array = order_string_or_array")
file.WriteLine(" For i = 0 to UBound(order_array)")
file.WriteLine(" If i > 0 then sql = sql & "", """)
file.WriteLine(" sql = sql & "" "" & order_array(i)")
file.WriteLine(" Next")
file.WriteLine(" Else")
file.WriteLine(" sql = sql & order_string_or_array & "" """)
file.WriteLine(" End If")
file.WriteLine(" End If")
file.WriteLine("")
file.WriteLine(" dim list : set list = new LinkedList_Class")
file.WriteLine(" dim rs : set rs = DAL.PagedQuery(sql, where_values, per_page, page_num)")
file.WriteLine("")
file.WriteLine(" If Not rs.EOF and Not (IsEmpty(per_page) and IsEmpty(page_num) and IsEmpty(page_count) and IsEmpty(record_count)) then")
file.WriteLine(" rs.PageSize = per_page")
file.WriteLine(" rs.AbsolutePage = page_num")
file.WriteLine(" page_count = rs.PageCount")
file.WriteLine(" record_count = rs.RecordCount")
file.WriteLine(" End If")
file.WriteLine("")
file.WriteLine(" set FindPaged = Paged"& fixedTableName & "List(rs, per_page)")
file.WriteLine(" Destroy rs")
file.WriteLine(" End Function")
file.WriteLine("")
file.WriteLine(" Public Function SearchTablePaged(where_kvarray, order_string_or_array, per_page, page_num, ByRef page_count, ByRef record_count)")
file.WriteLine(" dim sql : sql = ""Select [" & Join (fieldNamesArray,"], [") & "] FROM [" & tableName & "]""")
File.WriteLine("")
File.WriteLine(" If Not IsEmpty(where_kvarray) then")
File.WriteLine(" sql = sql & "" WHERE """)
File.WriteLine(" dim where_keys, where_values")
File.WriteLine(" KVUnzip where_kvarray, where_keys, where_values")
file.WriteLine("")
file.WriteLine(" dim i")
file.WriteLine(" For i = 0 to UBound(where_keys)")
file.WriteLine(" If i > 0 then sql = sql & "" OR""")
file.WriteLine(" sql = sql & "" "" & where_keys(i) & "" LIKE ?""")
file.WriteLine(" Next")
file.WriteLine(" End If")
file.WriteLine("")
file.WriteLine(" If Not IsEmpty(order_string_or_array) then")
file.WriteLine(" sql = sql & "" ORDER BY """)
file.WriteLine(" If IsArray(order_string_or_array) then")
file.WriteLine(" dim order_array : order_array = order_string_or_array")
file.WriteLine(" For i = 0 to UBound(order_array)")
file.WriteLine(" If i > 0 then sql = sql & "", """)
file.WriteLine(" sql = sql & "" "" & order_array(i)")
file.WriteLine(" Next")
file.WriteLine(" Else")
file.WriteLine(" sql = sql & order_string_or_array & "" """)
file.WriteLine(" End If")
file.WriteLine(" End If")
file.WriteLine("")
file.WriteLine(" dim list : set list = new LinkedList_Class")
file.WriteLine(" dim rs : set rs = DAL.PagedQuery(sql, where_values, per_page, page_num)")
file.WriteLine("")
file.WriteLine(" If Not rs.EOF and Not (IsEmpty(per_page) and IsEmpty(page_num) and IsEmpty(page_count) and IsEmpty(record_count)) then")
file.WriteLine(" rs.PageSize = per_page")
file.WriteLine(" rs.AbsolutePage = page_num")
file.WriteLine(" page_count = rs.PageCount")
file.WriteLine(" record_count = rs.RecordCount")
file.WriteLine(" End If")
file.WriteLine("")
file.WriteLine(" set SearchTablePaged = Paged"& fixedTableName & "List(rs, per_page)")
file.WriteLine(" Destroy rs")
file.WriteLine(" End Function")
file.WriteLine("")
file.WriteLine(" Private Function Paged"& fixedTableName & "List(rs, per_page)")
file.WriteLine(" dim list : set list = new LinkedList_Class")
file.WriteLine("")
file.WriteLine(" dim x : x =0")
file.WriteLine(" Do While x < per_page and Not rs.EOF")
file.WriteLine(" list.Push Automapper.AutoMap(rs, new " & fixedTableName & "Model_Class" & ")")
file.WriteLine(" x = x +1")
file.WriteLine(" rs.MoveNext")
file.WriteLine(" Loop")
file.WriteLine(" set Paged"& fixedTableName & "List = list")
file.WriteLine(" End Function")
file.WriteLine("")
file.WriteLine(" Private Function " & fixedTableName &"NotFoundException(ByVal field_name, ByVal field_val)")
file.WriteLine(" "& fixedTableName & "NotFoundException = """ & fixedTableName & " was not found with "" & field_name & "" of '"" & field_val & ""'.""")
file.WriteLine(" End Function")
file.WriteLine("")
file.WriteLine(" Private Function " & fixedTableName & "List(rs)")
file.WriteLine(" dim list : set list = new LinkedList_Class")
file.WriteLine(" dim model")
file.WriteLine("")
file.WriteLine(" Do until rs.EOF")
file.WriteLine(" set model = new " & fixedTableName & "Model_Class")
file.WriteLine(" list.Push Automapper.AutoMap(rs, model)")
file.WriteLine(" rs.MoveNext")
file.WriteLine(" Loop")
file.WriteLine(" set " & fixedTableName & "List = list")
file.WriteLine(" End Function")
file.WriteLine("")
file.WriteLine(" Public Sub AddNew(ByRef model)")
file.WriteLine(" dim sql : sql = ""INSERT INTO ["& fixedTableName & "] ("" &_")
For Fields = 1 To UBound(fieldNamesArray)-1
file.WriteLine(" ""[" & fieldNamesArray(Fields) & "],"" &_")
Next
file.WriteLine(" ""[" & fieldNamesArray(UBound(fieldNamesArray)) & "])"" &_")
file.Write(" ""VALUES (?")
For Fields = 1 To UBound(fieldNamesArray)-1
file.Write(",?")
Next
file.Write(")""" & VbCrLf)
file.WriteLine(" DAL.Execute sql, Array(model." & fieldNamesArray(1) & ", _")
For Fields = 2 To UBound(fieldNamesArray) -1
file.WriteLine(" model." & fieldNamesArray(Fields) & ", _")
Next
file.WriteLine(" model." & fieldNamesArray(UBound(fieldNamesArray)) & ")")
file.WriteLine(" sql = ""SELECT TOP 1 " & PrimaryKeyDictionary(tableName) & " FROM [" & fixedTableName & "] ORDER BY "& PrimaryKeyDictionary(tableName) & " DESC""")
file.WriteLine(" dim rs : set rs = DAL.Query(sql, empty)")
file.WriteLine(" model." & PrimaryKeyDictionary(tableName) & " = rs(""" & PrimaryKeyDictionary(tableName) & """)")
file.WriteLine(" Destroy rs")
file.WriteLine(" End Sub")
file.WriteLine("")
file.WriteLine(" Public Sub Update(model)")
file.WriteLine(" dim sql : sql = ""UPDATE ["& fixedTableName & "] SET [" & fieldNamesArray(1) & "] = ?,"" &_")
For Fields = 2 To UBound(fieldNamesArray) - 1
file.WriteLine(" ""[" & fieldNamesArray(Fields) & "] = ?,"" &_")
Next
file.Write (" ""[" & fieldNamesArray(UBound(fieldNamesArray)) & "] = ?"" &_" & VbCrLf)
file.WriteLine(" "" WHERE ["& PrimaryKeyDictionary(tableName) & "] = ?""")
file.WriteLine("")
file.WriteLine(" DAL.Execute sql, Array(model." & fieldNamesArray(1) & ", _")
For Fields = 2 To UBound(fieldNamesArray)
file.WriteLine(" model." & fieldNamesArray(Fields) & ", _")
Next
file.Write(" model." & PrimaryKeyDictionary(tableName) & ")" & VbCrLf)
file.WriteLine(" End Sub")
file.WriteLine("")
file.WriteLine(" Public Sub Delete(id)")
file.WriteLine(" dim sql : sql = ""DELETE FROM ["& fixedTableName & "] WHERE ["& PrimaryKeyDictionary(tableName) & "] = ?""")
file.WriteLine(" DAL.Execute sql, id")
file.WriteLine(" End Sub")
file.WriteLine("End Class")
file.WriteLine("")
File.WriteLine("dim " & fixedTableName & "Repository__Singleton")
File.WriteLine("Function " & fixedTableName & "Repository()")
File.WriteLine(" If IsEmpty(" & fixedTableName & "Repository__Singleton) then")
file.WriteLine(" set " & fixedTableName & "Repository__Singleton = new " & fixedTableName & "Repository_Class")
file.WriteLine(" End If")
file.WriteLine(" set " & fixedTableName & "Repository = " & fixedTableName & "Repository__Singleton")
file.WriteLine("End Function")
file.WriteLine("%>")
file.Close
Set file = fso.CreateTextFile(ScriptDirectory()& "ViewModels\" & fixedTableName & "ViewModels.asp",True)
file.WriteLine("<%")
file.WriteLine("Class PagedIndex_ViewModel_Class")
file.WriteLine(" Public Title")
file.WriteLine(" Public " & fixedTableName)
file.WriteLine("")
file.WriteLine(" Public CurrentPageNumber")
file.WriteLine(" Public PageSize")
file.WriteLine(" Public PageCount")
file.WriteLine(" Public RecordCount")
file.WriteLine("End Class")
file.WriteLine("")
file.WriteLine("Class Edit_ViewModel_Class")
file.WriteLine(" Public Title")
file.WriteLine(" Public " & fixedTableName)
file.WriteLine("")
file.WriteLine("End Class")
file.WriteLine("")
file.WriteLine("Class Create_ViewModel_Class")
For Each fieldName In fieldNamesArray
If Not fieldName = PrimaryKeyDictionary(tableName) then
file.WriteLine(" Public " & fieldName)
End If
Next
file.WriteLine("End Class")
file.WriteLine("")
file.WriteLine("Class Delete_ViewModel_Class")
file.WriteLine(" Public Title")
file.WriteLine(" Public " & fixedTableName )
file.WriteLine("End Class")
file.WriteLine("")
file.WriteLine("%>")
file.Close
Set file = fso.CreateTextFile(ScriptDirectory()& "Controllers\" & fixedTableName & "\" & fixedTableName & "Controller.asp",True)
file.WriteLine("<% Option Explicit %>")
file.WriteLine("<!--#include file=""../../include_all.asp""-->")
file.WriteLine("<!--#include file=""../../ViewModels/" & fixedTableName & "ViewModels.asp""-->")
file.WriteLine("<%")
file.WriteLine("Class " & fixedTableName & "Controller")
file.WriteLine(" Public Model")
file.WriteLine("")
file.WriteLine(" Public Sub Index")
file.WriteLine("")
file.WriteLine(" dim page_size : page_size = 10")
file.WriteLine(" dim page_num : page_num = Choice(Len(Request.Querystring(""page_num"")) > 0, Request.Querystring(""page_num""), 1)")
file.WriteLine(" dim page_count, record_count")
file.WriteLine(" set Model = new PagedIndex_ViewModel_Class")
file.WriteLine(" Model.Title = """ & tableName & """")
file.WriteLine(" set Model." & fixedTableName & " = " & fixedTableName & "Repository.FindPaged(empty, """ & PrimaryKeyDictionary(tableName) & """, page_size, page_num, page_count, record_count)")
file.WriteLine(" Model.CurrentPageNumber = page_num")
file.WriteLine(" Model.PageSize = page_size")
file.WriteLine(" Model.PageCount = page_count")
file.WriteLine(" Model.RecordCount = record_count")
file.WriteLine(" %> <!--#include file=""../../Views/" & fixedTableName & "/Index.asp""--> <%")
file.WriteLine("")
file.WriteLine(" End Sub")
file.WriteLine(" Public Sub Search")
file.WriteLine("")
file.WriteLine(" dim searchValue:searchValue = Choice(Request.Form.Count = 0,Request.QueryString(""q""),Request.Form(""q""))")
file.WriteLine(" dim page_size : page_size = 10")
file.WriteLine(" dim page_num : page_num = Choice(Len(Request.Querystring(""page_num"")) > 0, Request.Querystring(""page_num""), 1)")
file.WriteLine(" dim page_count, record_count")
file.WriteLine(" set Model = new PagedIndex_ViewModel_Class")
file.WriteLine(" Model.Title = """ & tableName & """")
file.WriteLine(" set Model." & fixedTableName & " = " & fixedTableName & "Repository.SearchTablePaged(Array(""" & Join (fieldNamesArray,""",""%"" & searchValue & ""%"",""") & """,""%"" & searchValue & ""%""),""" & PrimaryKeyDictionary(tableName) & """, page_size, page_num, page_count, record_count)")
file.WriteLine(" Model.CurrentPageNumber = page_num")
file.WriteLine(" Model.PageSize = page_size")
file.WriteLine(" Model.PageCount = page_count")
file.WriteLine(" Model.RecordCount = record_count")
file.WriteLine(" %> <!--#include file=""../../Views/" & fixedTableName & "/Index.asp""--> <%")
file.WriteLine("")
file.WriteLine(" End Sub")
file.WriteLine("")
file.WriteLine(" Public Sub Edit")
file.WriteLine("")
file.WriteLine(" dim id : id = Request.QueryString(""Id"")")
file.WriteLine(" set Model = new Edit_ViewModel_Class")
file.WriteLine(" set Model." & fixedTableName & " = " & fixedTableName & "Repository.FindBy" & PrimaryKeyDictionary(tableName) & "(id)")
file.WriteLine(" Model.Title = ""Edit " & fixedTableName & """")
file.WriteLine(" HTMLSecurity.SetAntiCSRFToken """ & fixedTableName & "EditForm""")
file.WriteLine(" %> <!--#include file=""../../Views/"& fixedTableName &"/Edit.asp""--> <%")
file.WriteLine(" Flash.Success = """ & fixedTableName & " " & id & " Updated.""")
file.WriteLine(" End Sub")
file.WriteLine("")
file.WriteLine(" Public Sub EditPost")
file.WriteLine(" MVC.RequirePost")
File.WriteLine(" HTMLSecurity.OnInvalidAntiCsrfTokenRedirectToActionExt """ & fixedTableName & "EditForm"", Request.Form(""nonce""), ""Edit"", Array(""Id"", Request.Form(""Id""))")
File.WriteLine(" dim " & PrimaryKeyDictionary(tableName) & " : " & PrimaryKeyDictionary(tableName) & " = Request.Form(""Id"")")
File.WriteLine(" dim model : set model = " & fixedTableName & "Repository.FindBy" & PrimaryKeyDictionary(tableName) & "(" & PrimaryKeyDictionary(tableName) & ")")
File.WriteLine(" set model = Automapper.AutoMap(Request.Form, model)")
File.WriteLine(" 'model.Validate")
File.WriteLine(" 'If model.Validator.HasErrors then")
File.WriteLine(" FormCache.SerializeForm ""Edit" & fixedTableName & """, Request.Form")
File.WriteLine(" ' Flash.Errors = model.Validator.Errors")
File.WriteLine(" ' MVC.RedirectToActionExt ""Edit"", Array(""Id""," & PrimaryKeyDictionary(tableName) & ")")
File.WriteLine(" 'Else")
File.WriteLine(" " & fixedTableName & "Repository.Update model")
File.WriteLine(" FormCache.ClearForm ""Edit" & fixedTableName & """")
File.WriteLine(" Flash.Success = """ & fixedTableName & " updated.""")
File.WriteLine(" MVC.RedirectToAction ""Index""")
File.WriteLine(" 'End If")
file.WriteLine(" End Sub")
file.WriteLine("")
file.WriteLine(" Public Sub Create")
file.WriteLine("")
file.WriteLine(" dim form_params : set form_params = FormCache.DeserializeForm(""New" & fixedTableName & """)")
file.WriteLine(" If Not form_params Is Nothing then")
file.WriteLine(" set Model = Automapper.AutoMap(form_params, New Create_ViewModel_Class)")
file.WriteLine(" Else")
file.WriteLine(" set Model = new Create_ViewModel_Class")
file.WriteLine(" End If")
file.WriteLine("")
file.WriteLine(" HTMLSecurity.SetAntiCSRFToken """ & fixedTableName & "CreateForm""")
file.WriteLine("")
file.WriteLine(" %> <!--#include file=""../../Views/" & fixedTableName & "/Create.asp""--> <%")
file.WriteLine(" End Sub")
file.WriteLine("")
file.WriteLine(" Public Sub CreatePost")
file.WriteLine("")
file.WriteLine(" MVC.RequirePost")
file.WriteLine(" HtmlSecurity.OnInvalidAntiCSRFTokenRedirectToAction """ & fixedTableName & "CreateForm"", Request.Form(""nonce""), ""Create""")
file.WriteLine("")
file.WriteLine(" dim new_" & fixedTableName & "_model : set new_" & fixedTableName & "_model = Automapper.AutoMap(Request.Form, new " & fixedTableName & "Model_Class)")
file.WriteLine("")
file.WriteLine(" 'new_" & fixedTableName & "_model.Validator.Validate")
file.WriteLine("")
file.WriteLine(" 'If new_" & fixedTableName & "_model.Validator.HasErrors then")
file.WriteLine(" ' FormCache.SerializeForm ""New" & fixedTableName & """, Request.Form")
file.WriteLine(" ' Flash.Errors = new_" & fixedTableName & "_model.Validator.Errors")
file.WriteLine(" ' MVC.RedirectToAction ""Create""")
file.WriteLine(" 'Else")
file.WriteLine(" " & fixedTableName & "Repository.AddNew new_" & fixedTableName & "_model")
File.WriteLine(" ' FormCache.ClearForm ""New" & fixedTableName & """")
File.WriteLine(" Flash.Success = """ & fixedTableName & " added.""")
File.WriteLine(" MVC.RedirectToAction ""Index""")
File.WriteLine(" 'End If")
file.WriteLine(" End Sub")
file.WriteLine("")
file.WriteLine(" Public Sub Delete")
file.WriteLine(" dim id : id = Request.QueryString(""Id"")")
file.WriteLine(" set Model = new Delete_ViewModel_Class")
file.WriteLine(" set Model." & fixedTableName & " = " & fixedTableName & "Repository.FindBy" & PrimaryKeyDictionary(tableName) & "(id)")
file.WriteLine(" Model.Title = ""Delete " & fixedTableName & """")
file.WriteLine("")
file.WriteLine(" HTMLSecurity.SetAntiCSRFToken """ & fixedTableName & "DeleteForm""")
file.WriteLine("")
file.WriteLine(" %> <!--#include file=""../../Views/" & fixedTableName & "/Delete.asp""--> <%")
file.WriteLine(" End Sub")
file.WriteLine("")
file.WriteLine(" Public Sub DeletePost")
file.WriteLine(" MVC.RequirePost")
file.WriteLine(" HtmlSecurity.OnInvalidAntiCSRFTokenRedirectToAction """ & fixedTableName & "DeleteForm"", Request.Form(""nonce""), ""Create""")
file.WriteLine("")
file.WriteLine(" dim id : id = Request.Form(""Id"")")
file.WriteLine(" " & fixedTableName & "Repository.Delete id")
file.WriteLine("")
file.WriteLine(" Flash.Success = """ & fixedTableName & " deleted.""")
file.WriteLine(" MVC.RedirectToAction ""Index""")
file.WriteLine(" End Sub")
file.WriteLine("")
file.WriteLine("End Class")
file.WriteLine("MVC.Dispatch")
file.WriteLine("%>")
file.Close
Set file = fso.CreateTextFile(ScriptDirectory()& "Views\" & fixedTableName & "\edit.asp",True)
file.WriteLine("<h2><%= H(Model.Title) %></h2>")
file.WriteLine("<%= HTML.FormTag("""& tableName & """, ""EditPost"", empty, empty) %>")
file.WriteLine(" <%= HTML.Hidden(""nonce"", HTMLSecurity.GetAntiCSRFToken(""" & fixedTableName & "EditForm"")) %>")
file.WriteLine(" <%= HTML.Hidden(""Id"", Model." & fixedTableName & "." & PrimaryKeyDictionary(tableName) & ") %>")
For Each field In fieldNamesArray
If Not field = PrimaryKeyDictionary(tableName) then
file.WriteLine(" <div class=""row"">")
file.WriteLine(" <div class=""col-md-4"">")
file.WriteLine(" <div class=""form-group"">")
file.WriteLine(" <label for=""" & field & """>" & field & "</label>")
file.WriteLine(" <%= HTML.TextboxExt(""" & field & """, Model." & fixedTableName & "." & field & ", Array(""class"", ""form-control"")) %>")
file.WriteLine(" </div>")
file.WriteLine(" </div>")
file.WriteLine(" </div>")
End if
Next
file.WriteLine("<hr />")
file.WriteLine("<div class=""form-group"">")
file.WriteLine(" <% = HTML.Button(""submit"", ""<i class='glyphicon glyphicon-ok'></i> Save"", ""btn-primary"") %>")
file.WriteLine(" &nbsp;&nbsp;")
file.WriteLine(" <%= HTML.LinkToExt(""<i class='glyphicon glyphicon-remove'></i> Delete"", """ & fixedTableName & """, ""Delete"", Array(""id"", Model." & fixedTableName & "." & PrimaryKeyDictionary(tableName) & "), Array(""class"", ""btn btn-danger"")) %>")
file.WriteLine(" &nbsp;&nbsp;")
file.WriteLine(" <%= HTML.LinkToExt(""Cancel"", """ & fixedTableName & """, ""Index"", empty, Array(""class"", ""btn btn-default"")) %>")
file.WriteLine("</div>")
file.WriteLine("</form>")
file.Close
Set file = fso.CreateTextFile(ScriptDirectory()& "Views\" & fixedTableName & "\index.asp",True)
file.WriteLine("<h2><%= H(Model.Title) %></h2>")
file.WriteLine("<div class=""row"">")
file.WriteLine(" <div class=""col-md-8 col-sm-8 col-xs-12"">")
file.WriteLine(" <%= H(Model.RecordCount) %> " & tableName & " found. Showing <%= H(Model.PageSize) %> records per page.")
file.WriteLine(" <%= HTML.LinkToExt(""<i class='bi bi-plus-square-fill'></i> New"",""" & fixedTableName & """, ""Create"", empty, Array(""class"", ""btn btn-xs btn-primary"")) %>")
file.WriteLine(" </div>")
file.WriteLine(" <div class=""col-md-4 col-sm-4 col-xs-12"">")
file.WriteLine("")
file.WriteLine(" <%= HTML.FormTag(""" & fixedTableName & """, ""Search"", empty, empty) %>")
file.WriteLine("")
file.WriteLine(" <div class=""col-md-10 col-sm-10 col-xs-12"">")
file.WriteLine(" <label class=""sr-only"" for=""search"">Search</label>")
file.WriteLine(" <div class=""input-group"">")
file.WriteLine(" <input type=""text"" class=""form-control input-search"" value='<%= Choice(Request.Form.Count = 0,Request.QueryString(""q""),Request.Form(""q"")) %>' name=""q"" id=""search"" placeholder=""Search"">")
file.WriteLine(" <span class=""input-group-addon group-icon""><span class=""glyphicon glyphicon-eye-open""></span>")
file.WriteLine(" <button type=""submit"" class=""btn btn-success""><i class=""bi bi-search""></i>Search</buttton>")
file.WriteLine(" </div>")
file.WriteLine(" </div>")
file.WriteLine("")
file.WriteLine(" </form>")
file.WriteLine(" </div>")
file.WriteLine("</div>")
file.WriteLine("<table id=""" & fixedTableName & """ class=""table table-striped"">")
file.WriteLine(" <thead>")
file.WriteLine(" <tr>")
file.WriteLine(" <th></th>")
For Each field In fieldNamesArray
file.WriteLine(" <th style=""text-align: left"">" & field & "</th>")
Next
file.WriteLine(" <th></th>")
file.WriteLine(" </tr>")
file.WriteLine(" </thead>")
file.WriteLine("<tbody>")
file.WriteLine(" <% dim it : set it = Model." & fixedTableName & ".Iterator %>")
file.WriteLine(" <% dim " & fixedTableName & " %>")
file.WriteLine(" <% While it.HasNext %>")
file.WriteLine(" <% set " & fixedTableName & " = it.GetNext() %>")
file.WriteLine(" <tr>")
file.WriteLine(" <td>")
file.WriteLine(" <%= HTML.LinkToExt(""<i class='bi bi-search'></i>"", """& fixedTableName &""", ""Edit"", Array(""Id"", " & fixedTableName & "." & PrimaryKeyDictionary(tableName) & "), Array(""class"", ""btn btn-primary"")) %>")
file.WriteLine(" </td>")
For Each field In fieldNamesArray
file.WriteLine(" <td><% = H(" & fixedTableName & "." & field &") %></td>")
Next
file.WriteLine("</tr>")
file.WriteLine(" <% Wend %>")
file.WriteLine(" </tbody>")
file.WriteLine("</table>")
file.WriteLine(" <div>")
file.WriteLine(" <% If Model.CurrentPageNumber <> 1 then %>")
file.WriteLine(" <%= HTML.LinkToExt(""<i class='bi bi-chevron-left'></i><i class='bi bi-chevron-left'></i>"", MVC.ControllerName, MVC.ActionName, Array(""page_num"", 1,""q"", Choice(Request.Form.Count = 0,Request.QueryString(""q""),Request.Form(""q""))), Array(""class"", ""btn btn-default"")) %>")
file.WriteLine(" &nbsp;")
file.WriteLine(" <%= HTML.LinkToExt(""<i class='bi bi-chevron-left'></i>"", MVC.ControllerName, MVC.ActionName, Array(""page_num"", Model.CurrentPageNumber - 1,""q"", Choice(Request.Form.Count = 0,Request.QueryString(""q""),Request.Form(""q""))), Array(""class"", ""btn btn-default"")) %>")
file.WriteLine("&nbsp;")
file.WriteLine(" <% Else %>")
file.WriteLine(" <a class='btn btn-default disabled'><i class='bi bi-chevron-left'></i><i class='bi bi-chevron-left'></i></a>")
file.WriteLine(" &nbsp;")
file.WriteLine(" <a class='btn btn-default disabled'><i class='bi bi-chevron-left'></i></a>")
file.WriteLine(" &nbsp; ")
file.WriteLine(" <% End If %>")

file.WriteLine(" <% If CInt(Model.CurrentPageNumber) < CInt(Model.PageCount) then %>")
file.WriteLine(" <%= HTML.LinkToExt(""<i class='bi bi-chevron-right'></i>"", MVC.ControllerName, MVC.ActionName, Array(""page_num"", Model.CurrentPageNumber + 1,""q"", Choice(Request.Form.Count = 0,Request.QueryString(""q""),Request.Form(""q""))), Array(""class"", ""btn btn-default"")) %>")
file.WriteLine(" &nbsp;")
file.WriteLine(" <%= HTML.LinkToExt(""<i class='bi bi-chevron-right'></i><i class='bi bi-chevron-right'></i>"", MVC.ControllerName, MVC.ActionName, Array(""page_num"", Model.PageCount,""q"", Choice(Request.Form.Count = 0,Request.QueryString(""q""),Request.Form(""q""))), Array(""class"", ""btn btn-default"")) %>")
file.WriteLine(" &nbsp;")
file.WriteLine(" <% Else %>")
file.WriteLine(" <a class='btn btn-default disabled'><i class='bi bi-chevron-right'></i><i class='bi bi-chevron-right'></i></a>")
file.WriteLine(" &nbsp;")
file.WriteLine(" <a class='btn btn-default disabled'><i class='bi bi-chevron-right'></i></a>")
file.WriteLine(" &nbsp; ")
file.WriteLine("<% End If %>")
file.WriteLine("</div>")


file.WriteLine("</div>")
file.Close
Set file = fso.CreateTextFile(ScriptDirectory()& "Views\" & fixedTableName & "\create.asp",True)
file.WriteLine("<h2>Create " & fixedTableName &"</h2>")
file.WriteLine("")
file.WriteLine("<%= HTML.FormTag(""" & fixedTableName &""", ""CreatePost"", empty, empty) %>")
file.WriteLine("<%= HTML.Hidden(""nonce"", HTMLSecurity.GetAntiCSRFToken("""& fixedTableName & "CreateForm"")) %>")
file.WriteLine("<hr />")
file.WriteLine("")
file.WriteLine("<div class=""form-group"">")
For Each field In fieldNamesArray
If Not field = PrimaryKeyDictionary(tableName) then
file.WriteLine(" <div class=""row"">")
file.WriteLine(" <div class=""col-md-4"">")
file.WriteLine(" <div class=""form-group"">")
file.WriteLine(" <label for=""" & field & """>" & field & "</label>")
file.WriteLine(" <%= HTML.TextboxExt(""" & field & """, Model." & field & ", Array(""class"", ""form-control"")) %>")
file.WriteLine(" </div>")
file.WriteLine(" </div>")
file.WriteLine(" </div>")
End if
Next
file.WriteLine(" <%= HTML.Button(""submit"", ""<i class='glyphicon glyphicon-ok'></i> Create"", ""btn-primary"") %>")
file.WriteLine(" &nbsp;&nbsp;")
file.WriteLine(" <%= HTML.LinkToExt(""<i class='glyphicon glyphicon-remove'></i> Cancel"", """ & fixedTableName & """, ""Index"", empty, Array(""class"", ""btn btn-default"")) %>")
file.WriteLine("</div>")
file.WriteLine("")
file.WriteLine("</form>")
file.Close
Set file = fso.CreateTextFile(ScriptDirectory()& "Views\" & fixedTableName & "\delete.asp",True)
file.WriteLine("<h2><%= H(Model.Title) %></h2>")
file.WriteLine("")
file.WriteLine("<p class=""alert alert-danger"">Are you sure you want to delete this " & fixedTableName & "?</p>")
file.WriteLine("")
file.WriteLine("<%= HTML.FormTag(""" & fixedTableName & """, ""DeletePost"", empty, Array(""class"", ""form-horizontal"")) %>")
file.WriteLine("<%= HTML.Hidden(""nonce"", HTMLSecurity.GetAntiCSRFToken(""" & fixedTableName & "DeleteForm"")) %>")
file.WriteLine("<%= HTML.Hidden(""Id"", Model." & fixedTableName & "." & PrimaryKeyDictionary(tableName) & ") %>")
file.WriteLine("<div class=""col-md-10"">")
file.WriteLine("<div class=""form-group"">")
file.WriteLine(" <%= HTML.Button(""submit"", ""<i class='glyphicon glyphicon-remove'></i> Confirm Delete"", ""btn-danger"") %>")
file.WriteLine(" &nbsp;&nbsp;")
file.WriteLine(" <%= HTML.LinkToExt(""Cancel"", """ & fixedTableName & """, ""Index"", empty, Array(""class"", ""btn btn-success"")) %>")

For Each field In fieldNamesArray
If Not field = PrimaryKeyDictionary(tableName) Then
file.WriteLine(" <div class=""row"">")
file.WriteLine(" <div class=""col-md-4"">")
file.WriteLine(" <div class=""form-group"">")
file.WriteLine(" <label for=""" & field & """>" & field & "</label>")
file.WriteLine(" <%= HTML.TextboxExt(""" & field & """, Model." & fixedTableName & "." & field & ", Array(""class"", ""form-control"")) %>")
file.WriteLine(" </div>")
file.WriteLine(" </div>")
file.WriteLine(" </div>")
End If
Next

file.WriteLine(" </div>")
file.WriteLine("</div>")
file.WriteLine("</form>")
file.Close
Set objFile = fso.OpenTextFile(ScriptDirectory() & "Views\Shared\layout.header.asp",1)
headerHtml = objFile.ReadAll()
objFile.Close
dropDownLinks = "<li role=""presentation"" class=""dropdown"">" &_
" <a class=""dropdown-toggle"" data-toggle=""dropdown"" href=""#"" role=""button"" aria-haspopup=""true"" aria-expanded=""false"">" &_
" Dropdown <span class=""caret""></span></a>" &_
""
If InStr(headerHtml,"<li class=""nav-item""><%= Html.LinkTOExt(""" & tableName & """,""" & fixedTableName & """,""Index"",empty,Array(""Class"",""nav-link"")) %></li>") = 0 then
newHeaderHtml = Replace(headerHtml,"<!--nav bar placeholder-->"," <li class=""nav-item""><%= Html.LinkTOExt(""" & tableName & """,""" & fixedTableName & """,""Index"",empty,Array(""Class"",""nav-link"")) %></li>" & vbCrLf & "<!--nav bar placeholder-->")
Set objFile = fso.OpenTextFile(ScriptDirectory() & "Views\Shared\layout.header.asp",2)
objFile.WriteLine newHeaderHtml
End If
objFile.Close
props.Clear
rs.MoveNext
Else
rs.MoveNext
End if
Loop
includedFile.Close
WScript.Quit

Sub includeFile(fSpec)
executeGlobal CreateObject("Scripting.FileSystemObject").openTextFile(IncludeDirectory & fSpec & ".vbs").readAll()
End Sub

Function PrimaryKeysFromADOConnectionToDictionary(ADOConn)
Dim rstSchema
Dim returnDictionary

If TypeName(ADOConn) = "Connection" Then
Set rstSchema = oConn.OpenSchema(adSchemaPrimaryKeys)
Set rstableNames = oConn.OpenSchema(20,Array(Empty, Empty, Empty, "Table"))
Set returnDictionary = WScript.CreateObject("scripting.dictionary")
While Not rstSchema.EOF
If returnDictionary.Exists(rstSchema.Fields("TABLE_NAME").Value) = false Then
returnDictionary.Add rstSchema.Fields("TABLE_NAME").Value,rstSchema.Fields("COLUMN_NAME").Value
End If
rstSchema.MoveNext
Wend
rstSchema.Close
End If
Set PrimaryKeysFromADOConnectionToDictionary = returnDictionary
End Function

Sub Init

MsgBox(oConn.State)
If oConn.State = 0 Then
oConn.Open()
'End If
Set PrimaryKeyDictionary = PrimaryKeysFromADOConnectionToDictionary(oConn)
If Not fso.FolderExists(ScriptDirectory()& "DomainModels\") Then fso.CreateFolder(ScriptDirectory()& "DomainModels\")
If Not fso.FolderExists(ScriptDirectory()& "ViewModels\") Then fso.CreateFolder(ScriptDirectory()& "ViewModels\")
If Not fso.FolderExists(ScriptDirectory()& "Controllers\") Then fso.CreateFolder(ScriptDirectory()& "Controllers\")
If Not fso.FolderExists(ScriptDirectory()& "Views\") Then fso.CreateFolder(ScriptDirectory()& "Views\")

Set includedFile = fso.CreateTextFile(ScriptDirectory()& "include_all.asp",True)
includedFile.WriteLine("<!--#include file=""../MVC/lib.all.asp""-->")
includedFile.WriteLine("<!--#include file=""DAL/lib.DAL.asp""-->")
includedFile.WriteLine("<!--#include file=""app.Config.asp""-->")

Set rs = oConn.OpenSchema(20,Array(Empty, Empty, Empty, "Table"))
End If


End Sub


Sub InitFieldNameIterator
Dim cmd
Set cmd = WScript.CreateObject("ADODB.COMMAND")
cmd.ActiveConnection = oConn
cmd.CommandText = "Select * From [" & tableName & "]"
Set FieldsRs = cmd.Execute()
Set fields = FieldsRs.Fields
Set props = New Stack
For Each Field In FieldsRs.Fields
props.Push(Field.Name)
file.WriteLine (" Public " & Field.Name & " '" & Field.Attributes)
Next
FieldsRs.Close

If Not PrimaryKeyDictionary.Exists(tableName) Then
PrimaryKeyDictionary.Add tableName,props.ToArray()(0)
End If
End Sub

+ 44
- 0
App/ViewModels/ContactsViewModels.asp Переглянути файл

@@ -0,0 +1,44 @@
<%
Class PagedIndex_ViewModel_Class
Public Title
Public Contacts

Public CurrentPageNumber
Public PageSize
Public PageCount
Public RecordCount
End Class

Class Edit_ViewModel_Class
Public Title
Public Contacts

End Class

Class Create_ViewModel_Class
Public JURISCODE
Public TownshipName
Public CONTACT_NAME
Public TownshipNum
Public BUSINESS_ADDRESS
Public TITLE
Public BUSINESS_ADDRESS2
Public BUSINESS_ADDRESS3
Public MAILING_ADDRESS
Public MAILING_ADDRESS2
Public MAILING_ADDRESS3
Public RESIDENTIAL_ADDRESS
Public RESIDENTIAL_ADDRESS2
Public PHONENUM1
Public RESIDENTIAL_ADDRESS3
Public FAXNUM
Public PHONENUM2
Public EMAIL
End Class

Class Delete_ViewModel_Class
Public Title
Public Contacts
End Class

%>

+ 32
- 0
App/ViewModels/JurisdictionViewModels.asp Переглянути файл

@@ -0,0 +1,32 @@
<%
Class PagedIndex_ViewModel_Class
Public Title
Public Jurisdiction

Public CurrentPageNumber
Public PageSize
Public PageCount
Public RecordCount
End Class

Class Edit_ViewModel_Class
Public Title
Public Jurisdiction
Public Contacts

End Class

Class Create_ViewModel_Class
Public Name
Public Mailing_Address
Public CSZ
Public IMB
Public IMB_Digits
End Class

Class Delete_ViewModel_Class
Public Title
Public Jurisdiction
End Class

%>

+ 33
- 0
App/ViewModels/KitLabelsViewModels.asp Переглянути файл

@@ -0,0 +1,33 @@
<%
Class PagedIndex_ViewModel_Class
Public Title
Public KitLabels

Public CurrentPageNumber
Public PageSize
Public PageCount
Public RecordCount
End Class

Class Edit_ViewModel_Class
Public Title
Public KitLabels

End Class

Class Create_ViewModel_Class
Public KitId
Public OutboundSerial
Public InBoundSerial
Public OutboundIMB
Public InBoundIMB
Public OutboundIMBDigits
Public InBoundIMBDigits
End Class

Class Delete_ViewModel_Class
Public Title
Public KitLabels
End Class

%>

+ 31
- 0
App/ViewModels/KitViewModels.asp Переглянути файл

@@ -0,0 +1,31 @@
<%
Class PagedIndex_ViewModel_Class
Public Title
Public Kit

Public CurrentPageNumber
Public PageSize
Public PageCount
Public RecordCount
End Class

Class Edit_ViewModel_Class
Public Title
Public Kit

End Class

Class Create_ViewModel_Class
Public Title
Public JobNumber
Public Jcode
Public Amount
Public Jurisdiction
End Class

Class Delete_ViewModel_Class
Public Title
Public Kit
End Class

%>

+ 28
- 0
App/ViewModels/SettingsViewModels.asp Переглянути файл

@@ -0,0 +1,28 @@
<%
Class PagedIndex_ViewModel_Class
Public Title
Public Settings

Public CurrentPageNumber
Public PageSize
Public PageCount
Public RecordCount
End Class

Class Edit_ViewModel_Class
Public Title
Public Settings

End Class

Class Create_ViewModel_Class
Public Name
Public Value
End Class

Class Delete_ViewModel_Class
Public Title
Public Settings
End Class

%>

+ 157
- 0
App/Views/Contacts/create.asp Переглянути файл

@@ -0,0 +1,157 @@
<h2>Create Contacts</h2>

<%= HTML.FormTag("Contacts", "CreatePost", empty, empty) %>
<%= HTML.Hidden("nonce", HTMLSecurity.GetAntiCSRFToken("ContactsCreateForm")) %>
<hr />

<div class="form-group">
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="JURISCODE">JURISCODE</label>
<%= HTML.TextboxExt("JURISCODE", Model.JURISCODE, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="TownshipName">TownshipName</label>
<%= HTML.TextboxExt("TownshipName", Model.TownshipName, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="CONTACT_NAME">CONTACT_NAME</label>
<%= HTML.TextboxExt("CONTACT_NAME", Model.CONTACT_NAME, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="TownshipNum">TownshipNum</label>
<%= HTML.TextboxExt("TownshipNum", Model.TownshipNum, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="BUSINESS_ADDRESS">BUSINESS_ADDRESS</label>
<%= HTML.TextboxExt("BUSINESS_ADDRESS", Model.BUSINESS_ADDRESS, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="TITLE">TITLE</label>
<%= HTML.TextboxExt("TITLE", Model.TITLE, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="BUSINESS_ADDRESS2">BUSINESS_ADDRESS2</label>
<%= HTML.TextboxExt("BUSINESS_ADDRESS2", Model.BUSINESS_ADDRESS2, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="BUSINESS_ADDRESS3">BUSINESS_ADDRESS3</label>
<%= HTML.TextboxExt("BUSINESS_ADDRESS3", Model.BUSINESS_ADDRESS3, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="MAILING_ADDRESS">MAILING_ADDRESS</label>
<%= HTML.TextboxExt("MAILING_ADDRESS", Model.MAILING_ADDRESS, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="MAILING_ADDRESS2">MAILING_ADDRESS2</label>
<%= HTML.TextboxExt("MAILING_ADDRESS2", Model.MAILING_ADDRESS2, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="MAILING_ADDRESS3">MAILING_ADDRESS3</label>
<%= HTML.TextboxExt("MAILING_ADDRESS3", Model.MAILING_ADDRESS3, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="RESIDENTIAL_ADDRESS">RESIDENTIAL_ADDRESS</label>
<%= HTML.TextboxExt("RESIDENTIAL_ADDRESS", Model.RESIDENTIAL_ADDRESS, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="RESIDENTIAL_ADDRESS2">RESIDENTIAL_ADDRESS2</label>
<%= HTML.TextboxExt("RESIDENTIAL_ADDRESS2", Model.RESIDENTIAL_ADDRESS2, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="PHONENUM1">PHONENUM1</label>
<%= HTML.TextboxExt("PHONENUM1", Model.PHONENUM1, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="RESIDENTIAL_ADDRESS3">RESIDENTIAL_ADDRESS3</label>
<%= HTML.TextboxExt("RESIDENTIAL_ADDRESS3", Model.RESIDENTIAL_ADDRESS3, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="FAXNUM">FAXNUM</label>
<%= HTML.TextboxExt("FAXNUM", Model.FAXNUM, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="PHONENUM2">PHONENUM2</label>
<%= HTML.TextboxExt("PHONENUM2", Model.PHONENUM2, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="EMAIL">EMAIL</label>
<%= HTML.TextboxExt("EMAIL", Model.EMAIL, Array("class", "form-control")) %>
</div>
</div>
</div>
<%= HTML.Button("submit", "<i class='glyphicon glyphicon-ok'></i> Create", "btn-primary") %>
&nbsp;&nbsp;
<%= HTML.LinkToExt("<i class='glyphicon glyphicon-remove'></i> Cancel", "Contacts", "Index", empty, Array("class", "btn btn-default")) %>
</div>

</form>

+ 159
- 0
App/Views/Contacts/delete.asp Переглянути файл

@@ -0,0 +1,159 @@
<h2><%= H(Model.Title) %></h2>

<p class="alert alert-danger">Are you sure you want to delete this Contacts?</p>

<%= HTML.FormTag("Contacts", "DeletePost", empty, Array("class", "form-horizontal")) %>
<%= HTML.Hidden("nonce", HTMLSecurity.GetAntiCSRFToken("ContactsDeleteForm")) %>
<%= HTML.Hidden("Id", Model.Contacts.ID) %>
<div class="col-md-10">
<div class="form-group">
<%= HTML.Button("submit", "<i class='glyphicon glyphicon-remove'></i> Confirm Delete", "btn-danger") %>
&nbsp;&nbsp;
<%= HTML.LinkToExt("Cancel", "Contacts", "Index", empty, Array("class", "btn btn-success")) %>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="JURISCODE">JURISCODE</label>
<%= HTML.TextboxExt("JURISCODE", Model.Contacts.JURISCODE, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="TownshipName">TownshipName</label>
<%= HTML.TextboxExt("TownshipName", Model.Contacts.TownshipName, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="CONTACT_NAME">CONTACT_NAME</label>
<%= HTML.TextboxExt("CONTACT_NAME", Model.Contacts.CONTACT_NAME, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="TownshipNum">TownshipNum</label>
<%= HTML.TextboxExt("TownshipNum", Model.Contacts.TownshipNum, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="BUSINESS_ADDRESS">BUSINESS_ADDRESS</label>
<%= HTML.TextboxExt("BUSINESS_ADDRESS", Model.Contacts.BUSINESS_ADDRESS, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="TITLE">TITLE</label>
<%= HTML.TextboxExt("TITLE", Model.Contacts.TITLE, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="BUSINESS_ADDRESS2">BUSINESS_ADDRESS2</label>
<%= HTML.TextboxExt("BUSINESS_ADDRESS2", Model.Contacts.BUSINESS_ADDRESS2, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="BUSINESS_ADDRESS3">BUSINESS_ADDRESS3</label>
<%= HTML.TextboxExt("BUSINESS_ADDRESS3", Model.Contacts.BUSINESS_ADDRESS3, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="MAILING_ADDRESS">MAILING_ADDRESS</label>
<%= HTML.TextboxExt("MAILING_ADDRESS", Model.Contacts.MAILING_ADDRESS, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="MAILING_ADDRESS2">MAILING_ADDRESS2</label>
<%= HTML.TextboxExt("MAILING_ADDRESS2", Model.Contacts.MAILING_ADDRESS2, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="MAILING_ADDRESS3">MAILING_ADDRESS3</label>
<%= HTML.TextboxExt("MAILING_ADDRESS3", Model.Contacts.MAILING_ADDRESS3, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="RESIDENTIAL_ADDRESS">RESIDENTIAL_ADDRESS</label>
<%= HTML.TextboxExt("RESIDENTIAL_ADDRESS", Model.Contacts.RESIDENTIAL_ADDRESS, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="RESIDENTIAL_ADDRESS2">RESIDENTIAL_ADDRESS2</label>
<%= HTML.TextboxExt("RESIDENTIAL_ADDRESS2", Model.Contacts.RESIDENTIAL_ADDRESS2, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="PHONENUM1">PHONENUM1</label>
<%= HTML.TextboxExt("PHONENUM1", Model.Contacts.PHONENUM1, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="RESIDENTIAL_ADDRESS3">RESIDENTIAL_ADDRESS3</label>
<%= HTML.TextboxExt("RESIDENTIAL_ADDRESS3", Model.Contacts.RESIDENTIAL_ADDRESS3, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="FAXNUM">FAXNUM</label>
<%= HTML.TextboxExt("FAXNUM", Model.Contacts.FAXNUM, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="PHONENUM2">PHONENUM2</label>
<%= HTML.TextboxExt("PHONENUM2", Model.Contacts.PHONENUM2, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="EMAIL">EMAIL</label>
<%= HTML.TextboxExt("EMAIL", Model.Contacts.EMAIL, Array("class", "form-control")) %>
</div>
</div>
</div>
</div>
</div>
</form>

+ 157
- 0
App/Views/Contacts/edit.asp Переглянути файл

@@ -0,0 +1,157 @@
<h2><%= H(Model.Title) %></h2>
<%= HTML.FormTag("Contacts", "EditPost", empty, empty) %>
<%= HTML.Hidden("nonce", HTMLSecurity.GetAntiCSRFToken("ContactsEditForm")) %>
<%= HTML.Hidden("Id", Model.Contacts.ID) %>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="JURISCODE">JURISCODE</label>
<%= HTML.TextboxExt("JURISCODE", Model.Contacts.JURISCODE, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="TownshipName">TownshipName</label>
<%= HTML.TextboxExt("TownshipName", Model.Contacts.TownshipName, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="CONTACT_NAME">CONTACT_NAME</label>
<%= HTML.TextboxExt("CONTACT_NAME", Model.Contacts.CONTACT_NAME, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="TownshipNum">TownshipNum</label>
<%= HTML.TextboxExt("TownshipNum", Model.Contacts.TownshipNum, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="BUSINESS_ADDRESS">BUSINESS_ADDRESS</label>
<%= HTML.TextboxExt("BUSINESS_ADDRESS", Model.Contacts.BUSINESS_ADDRESS, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="TITLE">TITLE</label>
<%= HTML.TextboxExt("TITLE", Model.Contacts.TITLE, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="BUSINESS_ADDRESS2">BUSINESS_ADDRESS2</label>
<%= HTML.TextboxExt("BUSINESS_ADDRESS2", Model.Contacts.BUSINESS_ADDRESS2, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="BUSINESS_ADDRESS3">BUSINESS_ADDRESS3</label>
<%= HTML.TextboxExt("BUSINESS_ADDRESS3", Model.Contacts.BUSINESS_ADDRESS3, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="MAILING_ADDRESS">MAILING_ADDRESS</label>
<%= HTML.TextboxExt("MAILING_ADDRESS", Model.Contacts.MAILING_ADDRESS, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="MAILING_ADDRESS2">MAILING_ADDRESS2</label>
<%= HTML.TextboxExt("MAILING_ADDRESS2", Model.Contacts.MAILING_ADDRESS2, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="MAILING_ADDRESS3">MAILING_ADDRESS3</label>
<%= HTML.TextboxExt("MAILING_ADDRESS3", Model.Contacts.MAILING_ADDRESS3, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="RESIDENTIAL_ADDRESS">RESIDENTIAL_ADDRESS</label>
<%= HTML.TextboxExt("RESIDENTIAL_ADDRESS", Model.Contacts.RESIDENTIAL_ADDRESS, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="RESIDENTIAL_ADDRESS2">RESIDENTIAL_ADDRESS2</label>
<%= HTML.TextboxExt("RESIDENTIAL_ADDRESS2", Model.Contacts.RESIDENTIAL_ADDRESS2, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="PHONENUM1">PHONENUM1</label>
<%= HTML.TextboxExt("PHONENUM1", Model.Contacts.PHONENUM1, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="RESIDENTIAL_ADDRESS3">RESIDENTIAL_ADDRESS3</label>
<%= HTML.TextboxExt("RESIDENTIAL_ADDRESS3", Model.Contacts.RESIDENTIAL_ADDRESS3, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="FAXNUM">FAXNUM</label>
<%= HTML.TextboxExt("FAXNUM", Model.Contacts.FAXNUM, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="PHONENUM2">PHONENUM2</label>
<%= HTML.TextboxExt("PHONENUM2", Model.Contacts.PHONENUM2, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="EMAIL">EMAIL</label>
<%= HTML.TextboxExt("EMAIL", Model.Contacts.EMAIL, Array("class", "form-control")) %>
</div>
</div>
</div>
<hr />
<div class="form-group">
<% = HTML.Button("submit", "<i class='glyphicon glyphicon-ok'></i> Save", "btn-primary") %>
&nbsp;&nbsp;
<%= HTML.LinkToExt("<i class='glyphicon glyphicon-remove'></i> Delete", "Contacts", "Delete", Array("id", Model.Contacts.ID), Array("class", "btn btn-danger")) %>
&nbsp;&nbsp;
<%= HTML.LinkToExt("Cancel", "Contacts", "Index", empty, Array("class", "btn btn-default")) %>
</div>
</form>

+ 105
- 0
App/Views/Contacts/index.asp Переглянути файл

@@ -0,0 +1,105 @@
<h2><%= H(Model.Title) %></h2>
<div class="row">
<div class="col-md-8 col-sm-8 col-xs-12">
<%= H(Model.RecordCount) %> Contacts found. Showing <%= H(Model.PageSize) %> records per page.
<%= HTML.LinkToExt("<i class='bi bi-plus-square-fill'></i> New","Contacts", "Create", empty, Array("class", "btn btn-xs btn-primary")) %>
</div>
<div class="col-md-4 col-sm-4 col-xs-12">

<%= HTML.FormTag("Contacts", "Search", empty, empty) %>

<div class="col-md-10 col-sm-10 col-xs-12">
<label class="sr-only" for="search">Search</label>
<div class="input-group">
<input type="text" class="form-control input-search" value='<%= Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q")) %>' name="q" id="search" placeholder="Search">
<span class="input-group-addon group-icon"><span class="glyphicon glyphicon-eye-open"></span>
<button type="submit" class="btn btn-success"><i class="bi bi-search"></i>Search</buttton>
</div>
</div>

</form>
</div>
</div>
<table id="Contacts" class="table table-striped">
<thead>
<tr>
<th></th>
<th style="text-align: left">ID</th>
<th style="text-align: left">JURISCODE</th>
<th style="text-align: left">TownshipName</th>
<th style="text-align: left">CONTACT_NAME</th>
<th style="text-align: left">TownshipNum</th>
<th style="text-align: left">BUSINESS_ADDRESS</th>
<th style="text-align: left">TITLE</th>
<th style="text-align: left">BUSINESS_ADDRESS2</th>
<th style="text-align: left">BUSINESS_ADDRESS3</th>
<th style="text-align: left">MAILING_ADDRESS</th>
<th style="text-align: left">MAILING_ADDRESS2</th>
<th style="text-align: left">MAILING_ADDRESS3</th>
<th style="text-align: left">RESIDENTIAL_ADDRESS</th>
<th style="text-align: left">RESIDENTIAL_ADDRESS2</th>
<th style="text-align: left">PHONENUM1</th>
<th style="text-align: left">RESIDENTIAL_ADDRESS3</th>
<th style="text-align: left">FAXNUM</th>
<th style="text-align: left">PHONENUM2</th>
<th style="text-align: left">EMAIL</th>
<th></th>
</tr>
</thead>
<tbody>
<% dim it : set it = Model.Contacts.Iterator %>
<% dim Contacts %>
<% While it.HasNext %>
<% set Contacts = it.GetNext() %>
<tr>
<td>
<%= HTML.LinkToExt("<i class='bi bi-search'></i>", "Contacts", "Edit", Array("Id", Contacts.ID), Array("class", "btn btn-primary")) %>
</td>
<td><% = H(Contacts.ID) %></td>
<td><% = H(Contacts.JURISCODE) %></td>
<td><% = H(Contacts.TownshipName) %></td>
<td><% = H(Contacts.CONTACT_NAME) %></td>
<td><% = H(Contacts.TownshipNum) %></td>
<td><% = H(Contacts.BUSINESS_ADDRESS) %></td>
<td><% = H(Contacts.TITLE) %></td>
<td><% = H(Contacts.BUSINESS_ADDRESS2) %></td>
<td><% = H(Contacts.BUSINESS_ADDRESS3) %></td>
<td><% = H(Contacts.MAILING_ADDRESS) %></td>
<td><% = H(Contacts.MAILING_ADDRESS2) %></td>
<td><% = H(Contacts.MAILING_ADDRESS3) %></td>
<td><% = H(Contacts.RESIDENTIAL_ADDRESS) %></td>
<td><% = H(Contacts.RESIDENTIAL_ADDRESS2) %></td>
<td><% = H(Contacts.PHONENUM1) %></td>
<td><% = H(Contacts.RESIDENTIAL_ADDRESS3) %></td>
<td><% = H(Contacts.FAXNUM) %></td>
<td><% = H(Contacts.PHONENUM2) %></td>
<td><% = H(Contacts.EMAIL) %></td>
</tr>
<% Wend %>
</tbody>
</table>
<div>
<% If Model.CurrentPageNumber <> 1 then %>
<%= HTML.LinkToExt("<i class='bi bi-chevron-left'></i><i class='bi bi-chevron-left'></i>", MVC.ControllerName, MVC.ActionName, Array("page_num", 1,"q", Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q"))), Array("class", "btn btn-default")) %>
&nbsp;
<%= HTML.LinkToExt("<i class='bi bi-chevron-left'></i>", MVC.ControllerName, MVC.ActionName, Array("page_num", Model.CurrentPageNumber - 1,"q", Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q"))), Array("class", "btn btn-default")) %>
&nbsp;
<% Else %>
<a class='btn btn-default disabled'><i class='bi bi-chevron-left'></i><i class='bi bi-chevron-left'></i></a>
&nbsp;
<a class='btn btn-default disabled'><i class='bi bi-chevron-left'></i></a>
&nbsp;
<% End If %>
<% If CInt(Model.CurrentPageNumber) < CInt(Model.PageCount) then %>
<%= HTML.LinkToExt("<i class='bi bi-chevron-right'></i>", MVC.ControllerName, MVC.ActionName, Array("page_num", Model.CurrentPageNumber + 1,"q", Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q"))), Array("class", "btn btn-default")) %>
&nbsp;
<%= HTML.LinkToExt("<i class='bi bi-chevron-right'></i><i class='bi bi-chevron-right'></i>", MVC.ControllerName, MVC.ActionName, Array("page_num", Model.PageCount,"q", Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q"))), Array("class", "btn btn-default")) %>
&nbsp;
<% Else %>
<a class='btn btn-default disabled'><i class='bi bi-chevron-right'></i><i class='bi bi-chevron-right'></i></a>
&nbsp;
<a class='btn btn-default disabled'><i class='bi bi-chevron-right'></i></a>
&nbsp;
<% End If %>
</div>
</div>

+ 10
- 0
App/Views/Home/Index.asp Переглянути файл

@@ -0,0 +1,10 @@

<h1><%= siteTitle %></h1>
<div class="row">
<div class="col-md-4" style="background-color: #eee;">
Left Column
</div>
<div class="col-md-8">
Right Column
</div>
</div>

+ 53
- 0
App/Views/Jurisdiction/create.asp Переглянути файл

@@ -0,0 +1,53 @@
<h2>Create Jurisdiction</h2>

<%= HTML.FormTag("Jurisdiction", "CreatePost", empty, empty) %>
<%= HTML.Hidden("nonce", HTMLSecurity.GetAntiCSRFToken("JurisdictionCreateForm")) %>
<hr />

<div class="form-group">
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="Name">Name</label>
<%= HTML.TextboxExt("Name", Model.Name, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="Mailing_Address">Mailing_Address</label>
<%= HTML.TextboxExt("Mailing_Address", Model.Mailing_Address, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="CSZ">CSZ</label>
<%= HTML.TextboxExt("CSZ", Model.CSZ, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="IMB">IMB</label>
<%= HTML.TextboxExt("IMB", Model.IMB, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="IMB_Digits">IMB_Digits</label>
<%= HTML.TextboxExt("IMB_Digits", Model.IMB_Digits, Array("class", "form-control")) %>
</div>
</div>
</div>
<%= HTML.Button("submit", "<i class='glyphicon glyphicon-ok'></i> Create", "btn-primary") %>
&nbsp;&nbsp;
<%= HTML.LinkToExt("<i class='glyphicon glyphicon-remove'></i> Cancel", "Jurisdiction", "Index", empty, Array("class", "btn btn-default")) %>
</div>

</form>

+ 5
- 0
App/Views/Jurisdiction/createkit.asp Переглянути файл

@@ -0,0 +1,5 @@
<h2><%= H(Model.Title) %> For <%=H(Model.Jurisdiction.Name) %></h2>
<%= HTML.FormTag("Jurisdiction", "EditPost", empty, empty) %>
<%= HTML.Hidden("nonce", HTMLSecurity.GetAntiCSRFToken("CreateKitForm")) %>
<%= HTML.Hidden("Id", Model.Jurisdiction.JCode) %>
</form>

+ 55
- 0
App/Views/Jurisdiction/delete.asp Переглянути файл

@@ -0,0 +1,55 @@
<h2><%= H(Model.Title) %></h2>

<p class="alert alert-danger">Are you sure you want to delete this Jurisdiction?</p>

<%= HTML.FormTag("Jurisdiction", "DeletePost", empty, Array("class", "form-horizontal")) %>
<%= HTML.Hidden("nonce", HTMLSecurity.GetAntiCSRFToken("JurisdictionDeleteForm")) %>
<%= HTML.Hidden("Id", Model.Jurisdiction.JCode) %>
<div class="col-md-10">
<div class="form-group">
<%= HTML.Button("submit", "<i class='glyphicon glyphicon-remove'></i> Confirm Delete", "btn-danger") %>
&nbsp;&nbsp;
<%= HTML.LinkToExt("Cancel", "Jurisdiction", "Index", empty, Array("class", "btn btn-success")) %>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="Name">Name</label>
<%= HTML.TextboxExt("Name", Model.Jurisdiction.Name, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="Mailing_Address">Mailing_Address</label>
<%= HTML.TextboxExt("Mailing_Address", Model.Jurisdiction.Mailing_Address, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="CSZ">CSZ</label>
<%= HTML.TextboxExt("CSZ", Model.Jurisdiction.CSZ, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="IMB">IMB</label>
<%= HTML.TextboxExt("IMB", Model.Jurisdiction.IMB, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="IMB_Digits">IMB_Digits</label>
<%= HTML.TextboxExt("IMB_Digits", Model.Jurisdiction.IMB_Digits, Array("class", "form-control")) %>
</div>
</div>
</div>
</div>
</div>
</form>

+ 54
- 0
App/Views/Jurisdiction/edit.asp Переглянути файл

@@ -0,0 +1,54 @@
<h2><%= H(Model.Title) %></h2>
<%= HTML.FormTag("Jurisdiction", "EditPost", empty, empty) %>
<%= HTML.Hidden("nonce", HTMLSecurity.GetAntiCSRFToken("JurisdictionEditForm")) %>
<%= HTML.Hidden("Id", Model.Jurisdiction.JCode) %>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="Name">Name</label>
<%= HTML.TextboxExt("Name", Model.Jurisdiction.Name, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="Mailing_Address">Mailing_Address</label>
<%= HTML.TextboxExt("Mailing_Address", Model.Jurisdiction.Mailing_Address, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="CSZ">CSZ</label>
<%= HTML.TextboxExt("CSZ", Model.Jurisdiction.CSZ, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="IMB">IMB</label>
<%= HTML.TextboxExt("IMB", Model.Jurisdiction.IMB, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="IMB_Digits">IMB_Digits</label>
<%= HTML.TextboxExt("IMB_Digits", Model.Jurisdiction.IMB_Digits, Array("class", "form-control")) %>
</div>
</div>
</div>
<!--#include file="../../Views/Jurisdiction/partial.Jurisdiction.Contacts.asp"-->
<hr />
<div class="form-group">
<% = HTML.Button("submit", "<i class='glyphicon glyphicon-ok'></i> Save", "btn-primary") %>
&nbsp;&nbsp;
<%= HTML.LinkToExt("<i class='glyphicon glyphicon-remove'></i> Delete", "Jurisdiction", "Delete", Array("id", Model.Jurisdiction.JCode), Array("class", "btn btn-danger")) %>
&nbsp;&nbsp;
<%= HTML.LinkToExt("Cancel", "Jurisdiction", "Index", empty, Array("class", "btn btn-default")) %>
</div>
</form>

+ 82
- 0
App/Views/Jurisdiction/index.asp Переглянути файл

@@ -0,0 +1,82 @@
<h2><%= H(Model.Title) %></h2>
<div class="row">
<div class="col-md-8 col-sm-8 col-xs-12">
<%= H(Model.RecordCount) %> Jurisdiction found. Showing <%= H(Model.PageSize) %> records per page.
<%= HTML.LinkToExt("<i class='bi bi-plus-square-fill'></i> New","Jurisdiction", "Create", empty, Array("class", "btn btn-xs btn-primary")) %>
</div>
<div class="col-md-4 col-sm-4 col-xs-12">

<%= HTML.FormTag("Jurisdiction", "Search", empty, empty) %>

<div class="col-md-10 col-sm-10 col-xs-12">
<label class="sr-only" for="search">Search</label>
<div class="input-group">
<input type="text" class="form-control input-search" value='<%= Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q")) %>' name="q" id="search" placeholder="Search">
<span class="input-group-addon group-icon"><span class="glyphicon glyphicon-eye-open"></span>
<button type="submit" class="btn btn-success"><i class="bi bi-search"></i>Search</buttton>
</div>
</div>

</form>
</div>
</div>
<table id="Jurisdiction" class="table table-striped">
<thead>
<tr>
<th></th>
<th style="text-align: left">JCode</th>
<th style="text-align: left">Name</th>
<th style="text-align: left">Mailing_Address</th>
<th style="text-align: left">CSZ</th>
<th style="text-align: left">IMB</th>
<th style="text-align: left">IMB_Digits</th>
<th></th>
</tr>
</thead>
<tbody>
<% dim it : set it = Model.Jurisdiction.Iterator %>
<% dim Jurisdiction %>
<% While it.HasNext %>
<% set Jurisdiction = it.GetNext() %>
<tr>
<td>
<%= HTML.LinkToExt("<i class='bi bi-search'></i>", "Jurisdiction", "Edit", Array("Id", Jurisdiction.JCode), Array("class", "btn btn-primary")) %>
</td>
<td><% = H(Jurisdiction.JCode) %></td>
<td><% = H(Jurisdiction.Name) %></td>
<td><% = H(Jurisdiction.Mailing_Address) %></td>
<td><% = H(Jurisdiction.CSZ) %></td>
<td><% = H(Jurisdiction.IMB) %></td>
<td><% = H(Jurisdiction.IMB_Digits) %></td>
<td>
<%= HTML.LinkToExt("<i class='bi bi-search'></i>", "Kit", "create", Array("Id", Jurisdiction.JCode), Array("class", "btn btn-primary")) %>
</td>
</tr>
<% Wend %>
</tbody>
</table>
<div>
<% If Model.CurrentPageNumber <> 1 then %>
<%= HTML.LinkToExt("<i class='bi bi-chevron-left'></i><i class='bi bi-chevron-left'></i>", MVC.ControllerName, MVC.ActionName, Array("page_num", 1,"q", Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q"))), Array("class", "btn btn-default")) %>
&nbsp;
<%= HTML.LinkToExt("<i class='bi bi-chevron-left'></i>", MVC.ControllerName, MVC.ActionName, Array("page_num", Model.CurrentPageNumber - 1,"q", Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q"))), Array("class", "btn btn-default")) %>
&nbsp;
<% Else %>
<a class='btn btn-default disabled'><i class='bi bi-chevron-left'></i><i class='bi bi-chevron-left'></i></a>
&nbsp;
<a class='btn btn-default disabled'><i class='bi bi-chevron-left'></i></a>
&nbsp;
<% End If %>
<% If CInt(Model.CurrentPageNumber) < CInt(Model.PageCount) then %>
<%= HTML.LinkToExt("<i class='bi bi-chevron-right'></i>", MVC.ControllerName, MVC.ActionName, Array("page_num", Model.CurrentPageNumber + 1,"q", Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q"))), Array("class", "btn btn-default")) %>
&nbsp;
<%= HTML.LinkToExt("<i class='bi bi-chevron-right'></i><i class='bi bi-chevron-right'></i>", MVC.ControllerName, MVC.ActionName, Array("page_num", Model.PageCount,"q", Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q"))), Array("class", "btn btn-default")) %>
&nbsp;
<% Else %>
<a class='btn btn-default disabled'><i class='bi bi-chevron-right'></i><i class='bi bi-chevron-right'></i></a>
&nbsp;
<a class='btn btn-default disabled'><i class='bi bi-chevron-right'></i></a>
&nbsp;
<% End If %>
</div>
</div>

+ 60
- 0
App/Views/Jurisdiction/partial.Jurisdiction.Contacts.asp Переглянути файл

@@ -0,0 +1,60 @@
</div>
<table id="Contacts" class="table table-striped">
<thead>
<tr>
<th></th>
<th style="text-align: left">ID</th>
<th style="text-align: left">JURISCODE</th>
<th style="text-align: left">TownshipName</th>
<th style="text-align: left">CONTACT_NAME</th>
<th style="text-align: left">TownshipNum</th>
<th style="text-align: left">BUSINESS_ADDRESS</th>
<th style="text-align: left">TITLE</th>
<th style="text-align: left">BUSINESS_ADDRESS2</th>
<th style="text-align: left">BUSINESS_ADDRESS3</th>
<th style="text-align: left">MAILING_ADDRESS</th>
<th style="text-align: left">MAILING_ADDRESS2</th>
<th style="text-align: left">MAILING_ADDRESS3</th>
<th style="text-align: left">RESIDENTIAL_ADDRESS</th>
<th style="text-align: left">RESIDENTIAL_ADDRESS2</th>
<th style="text-align: left">PHONENUM1</th>
<th style="text-align: left">RESIDENTIAL_ADDRESS3</th>
<th style="text-align: left">FAXNUM</th>
<th style="text-align: left">PHONENUM2</th>
<th style="text-align: left">EMAIL</th>
<th></th>
</tr>
</thead>
<tbody>
<% dim it : set it = Model.Contacts.Iterator %>
<% dim Contacts %>
<% While it.HasNext %>
<% set Contacts = it.GetNext() %>
<tr>
<td>
<%= HTML.LinkToExt("<i class='bi bi-search'></i>", "Contacts", "Edit", Array("Id", Contacts.ID), Array("class", "btn btn-primary")) %>
</td>
<td><% = H(Contacts.ID) %></td>
<td><% = H(Contacts.JURISCODE) %></td>
<td><% = H(Contacts.TownshipName) %></td>
<td><% = H(Contacts.CONTACT_NAME) %></td>
<td><% = H(Contacts.TownshipNum) %></td>
<td><% = H(Contacts.BUSINESS_ADDRESS) %></td>
<td><% = H(Contacts.TITLE) %></td>
<td><% = H(Contacts.BUSINESS_ADDRESS2) %></td>
<td><% = H(Contacts.BUSINESS_ADDRESS3) %></td>
<td><% = H(Contacts.MAILING_ADDRESS) %></td>
<td><% = H(Contacts.MAILING_ADDRESS2) %></td>
<td><% = H(Contacts.MAILING_ADDRESS3) %></td>
<td><% = H(Contacts.RESIDENTIAL_ADDRESS) %></td>
<td><% = H(Contacts.RESIDENTIAL_ADDRESS2) %></td>
<td><% = H(Contacts.PHONENUM1) %></td>
<td><% = H(Contacts.RESIDENTIAL_ADDRESS3) %></td>
<td><% = H(Contacts.FAXNUM) %></td>
<td><% = H(Contacts.PHONENUM2) %></td>
<td><% = H(Contacts.EMAIL) %></td>
</tr>
<% Wend %>
</tbody>
</table>
<div>

+ 38
- 0
App/Views/Kit/create.asp Переглянути файл

@@ -0,0 +1,38 @@
<h2><%= H(Model.Title) %> For <%=H(Model.Jurisdiction.Name) %></h2>

<%= HTML.FormTag("Kit", "CreatePost", empty, empty) %>
<%= HTML.Hidden("nonce", HTMLSecurity.GetAntiCSRFToken("KitCreateForm")) %>
<hr />

<div class="form-group">
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="JobNumber">JobNumber</label>
<%= HTML.TextboxExt("JobNumber", Model.JobNumber, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="Jcode">Jcode</label>
<%= HTML.TextboxExt("Jcode", Model.Jcode, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="Amount">Jcode</label>
<%= HTML.TextboxExt("Amount", Model.Jcode, Array("class", "form-control")) %>
</div>
</div>
</div>
<p></p>
<%= HTML.Button("submit", "<i class='glyphicon glyphicon-ok'></i> Create", "btn-primary") %>
&nbsp;&nbsp;
<%= HTML.LinkToExt("<i class='glyphicon glyphicon-remove'></i> Cancel", "Kit", "Index", empty, Array("class", "btn btn-default")) %>
</div>

</form>

+ 31
- 0
App/Views/Kit/delete.asp Переглянути файл

@@ -0,0 +1,31 @@
<h2><%= H(Model.Title) %></h2>

<p class="alert alert-danger">Are you sure you want to delete this Kit?</p>

<%= HTML.FormTag("Kit", "DeletePost", empty, Array("class", "form-horizontal")) %>
<%= HTML.Hidden("nonce", HTMLSecurity.GetAntiCSRFToken("KitDeleteForm")) %>
<%= HTML.Hidden("Id", Model.Kit.ID) %>
<div class="col-md-10">
<div class="form-group">
<%= HTML.Button("submit", "<i class='glyphicon glyphicon-remove'></i> Confirm Delete", "btn-danger") %>
&nbsp;&nbsp;
<%= HTML.LinkToExt("Cancel", "Kit", "Index", empty, Array("class", "btn btn-success")) %>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="JobNumber">JobNumber</label>
<%= HTML.TextboxExt("JobNumber", Model.Kit.JobNumber, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="Jcode">Jcode</label>
<%= HTML.TextboxExt("Jcode", Model.Kit.Jcode, Array("class", "form-control")) %>
</div>
</div>
</div>
</div>
</div>
</form>

+ 29
- 0
App/Views/Kit/edit.asp Переглянути файл

@@ -0,0 +1,29 @@
<h2><%= H(Model.Title) %></h2>
<%= HTML.FormTag("Kit", "EditPost", empty, empty) %>
<%= HTML.Hidden("nonce", HTMLSecurity.GetAntiCSRFToken("KitEditForm")) %>
<%= HTML.Hidden("Id", Model.Kit.ID) %>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="JobNumber">JobNumber</label>
<%= HTML.TextboxExt("JobNumber", Model.Kit.JobNumber, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="Jcode">Jcode</label>
<%= HTML.TextboxExt("Jcode", Model.Kit.Jcode, Array("class", "form-control")) %>
</div>
</div>
</div>
<hr />
<div class="form-group">
<% = HTML.Button("submit", "<i class='glyphicon glyphicon-ok'></i> Save", "btn-primary") %>
&nbsp;&nbsp;
<%= HTML.LinkToExt("<i class='glyphicon glyphicon-remove'></i> Delete", "Kit", "Delete", Array("id", Model.Kit.ID), Array("class", "btn btn-danger")) %>
&nbsp;&nbsp;
<%= HTML.LinkToExt("Cancel", "Kit", "Index", empty, Array("class", "btn btn-default")) %>
</div>
</form>

+ 73
- 0
App/Views/Kit/index.asp Переглянути файл

@@ -0,0 +1,73 @@
<h2><%= H(Model.Title) %></h2>
<div class="row">
<div class="col-md-8 col-sm-8 col-xs-12">
<%= H(Model.RecordCount) %> Kit found. Showing <%= H(Model.PageSize) %> records per page.
<%= HTML.LinkToExt("<i class='bi bi-plus-square-fill'></i> New","Kit", "Create", empty, Array("class", "btn btn-xs btn-primary")) %>
</div>
<div class="col-md-4 col-sm-4 col-xs-12">

<%= HTML.FormTag("Kit", "Search", empty, empty) %>

<div class="col-md-10 col-sm-10 col-xs-12">
<label class="sr-only" for="search">Search</label>
<div class="input-group">
<input type="text" class="form-control input-search" value='<%= Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q")) %>' name="q" id="search" placeholder="Search">
<span class="input-group-addon group-icon"><span class="glyphicon glyphicon-eye-open"></span>
<button type="submit" class="btn btn-success"><i class="bi bi-search"></i>Search</buttton>
</div>
</div>

</form>
</div>
</div>
<table id="Kit" class="table table-striped">
<thead>
<tr>
<th></th>
<th style="text-align: left">ID</th>
<th style="text-align: left">JobNumber</th>
<th style="text-align: left">Jcode</th>
<th></th>
</tr>
</thead>
<tbody>
<% dim it : set it = Model.Kit.Iterator %>
<% dim Kit %>
<% While it.HasNext %>
<% set Kit = it.GetNext() %>
<tr>
<td>
<%= HTML.LinkToExt("<i class='bi bi-search'></i>", "Kit", "Edit", Array("Id", Kit.ID), Array("class", "btn btn-primary")) %>
</td>
<td><% = H(Kit.ID) %></td>
<td><% = H(Kit.JobNumber) %></td>
<td><% = H(Kit.Jcode) %></td>
</tr>
<% Wend %>
</tbody>
</table>
<div>
<% If Model.CurrentPageNumber <> 1 then %>
<%= HTML.LinkToExt("<i class='bi bi-chevron-left'></i><i class='bi bi-chevron-left'></i>", MVC.ControllerName, MVC.ActionName, Array("page_num", 1,"q", Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q"))), Array("class", "btn btn-default")) %>
&nbsp;
<%= HTML.LinkToExt("<i class='bi bi-chevron-left'></i>", MVC.ControllerName, MVC.ActionName, Array("page_num", Model.CurrentPageNumber - 1,"q", Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q"))), Array("class", "btn btn-default")) %>
&nbsp;
<% Else %>
<a class='btn btn-default disabled'><i class='bi bi-chevron-left'></i><i class='bi bi-chevron-left'></i></a>
&nbsp;
<a class='btn btn-default disabled'><i class='bi bi-chevron-left'></i></a>
&nbsp;
<% End If %>
<% If CInt(Model.CurrentPageNumber) < CInt(Model.PageCount) then %>
<%= HTML.LinkToExt("<i class='bi bi-chevron-right'></i>", MVC.ControllerName, MVC.ActionName, Array("page_num", Model.CurrentPageNumber + 1,"q", Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q"))), Array("class", "btn btn-default")) %>
&nbsp;
<%= HTML.LinkToExt("<i class='bi bi-chevron-right'></i><i class='bi bi-chevron-right'></i>", MVC.ControllerName, MVC.ActionName, Array("page_num", Model.PageCount,"q", Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q"))), Array("class", "btn btn-default")) %>
&nbsp;
<% Else %>
<a class='btn btn-default disabled'><i class='bi bi-chevron-right'></i><i class='bi bi-chevron-right'></i></a>
&nbsp;
<a class='btn btn-default disabled'><i class='bi bi-chevron-right'></i></a>
&nbsp;
<% End If %>
</div>
</div>

+ 69
- 0
App/Views/KitLabels/create.asp Переглянути файл

@@ -0,0 +1,69 @@
<h2>Create KitLabels</h2>

<%= HTML.FormTag("KitLabels", "CreatePost", empty, empty) %>
<%= HTML.Hidden("nonce", HTMLSecurity.GetAntiCSRFToken("KitLabelsCreateForm")) %>
<hr />

<div class="form-group">
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="KitId">KitId</label>
<%= HTML.TextboxExt("KitId", Model.KitId, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="OutboundSerial">OutboundSerial</label>
<%= HTML.TextboxExt("OutboundSerial", Model.OutboundSerial, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="InBoundSerial">InBoundSerial</label>
<%= HTML.TextboxExt("InBoundSerial", Model.InBoundSerial, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="OutboundIMB">OutboundIMB</label>
<%= HTML.TextboxExt("OutboundIMB", Model.OutboundIMB, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="InBoundIMB">InBoundIMB</label>
<%= HTML.TextboxExt("InBoundIMB", Model.InBoundIMB, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="OutboundIMBDigits">OutboundIMBDigits</label>
<%= HTML.TextboxExt("OutboundIMBDigits", Model.OutboundIMBDigits, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="InBoundIMBDigits">InBoundIMBDigits</label>
<%= HTML.TextboxExt("InBoundIMBDigits", Model.InBoundIMBDigits, Array("class", "form-control")) %>
</div>
</div>
</div>
<%= HTML.Button("submit", "<i class='glyphicon glyphicon-ok'></i> Create", "btn-primary") %>
&nbsp;&nbsp;
<%= HTML.LinkToExt("<i class='glyphicon glyphicon-remove'></i> Cancel", "KitLabels", "Index", empty, Array("class", "btn btn-default")) %>
</div>

</form>

+ 71
- 0
App/Views/KitLabels/delete.asp Переглянути файл

@@ -0,0 +1,71 @@
<h2><%= H(Model.Title) %></h2>

<p class="alert alert-danger">Are you sure you want to delete this KitLabels?</p>

<%= HTML.FormTag("KitLabels", "DeletePost", empty, Array("class", "form-horizontal")) %>
<%= HTML.Hidden("nonce", HTMLSecurity.GetAntiCSRFToken("KitLabelsDeleteForm")) %>
<%= HTML.Hidden("Id", Model.KitLabels.ID) %>
<div class="col-md-10">
<div class="form-group">
<%= HTML.Button("submit", "<i class='glyphicon glyphicon-remove'></i> Confirm Delete", "btn-danger") %>
&nbsp;&nbsp;
<%= HTML.LinkToExt("Cancel", "KitLabels", "Index", empty, Array("class", "btn btn-success")) %>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="KitId">KitId</label>
<%= HTML.TextboxExt("KitId", Model.KitLabels.KitId, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="OutboundSerial">OutboundSerial</label>
<%= HTML.TextboxExt("OutboundSerial", Model.KitLabels.OutboundSerial, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="InBoundSerial">InBoundSerial</label>
<%= HTML.TextboxExt("InBoundSerial", Model.KitLabels.InBoundSerial, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="OutboundIMB">OutboundIMB</label>
<%= HTML.TextboxExt("OutboundIMB", Model.KitLabels.OutboundIMB, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="InBoundIMB">InBoundIMB</label>
<%= HTML.TextboxExt("InBoundIMB", Model.KitLabels.InBoundIMB, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="OutboundIMBDigits">OutboundIMBDigits</label>
<%= HTML.TextboxExt("OutboundIMBDigits", Model.KitLabels.OutboundIMBDigits, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="InBoundIMBDigits">InBoundIMBDigits</label>
<%= HTML.TextboxExt("InBoundIMBDigits", Model.KitLabels.InBoundIMBDigits, Array("class", "form-control")) %>
</div>
</div>
</div>
</div>
</div>
</form>

+ 69
- 0
App/Views/KitLabels/edit.asp Переглянути файл

@@ -0,0 +1,69 @@
<h2><%= H(Model.Title) %></h2>
<%= HTML.FormTag("KitLabels", "EditPost", empty, empty) %>
<%= HTML.Hidden("nonce", HTMLSecurity.GetAntiCSRFToken("KitLabelsEditForm")) %>
<%= HTML.Hidden("Id", Model.KitLabels.ID) %>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="KitId">KitId</label>
<%= HTML.TextboxExt("KitId", Model.KitLabels.KitId, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="OutboundSerial">OutboundSerial</label>
<%= HTML.TextboxExt("OutboundSerial", Model.KitLabels.OutboundSerial, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="InBoundSerial">InBoundSerial</label>
<%= HTML.TextboxExt("InBoundSerial", Model.KitLabels.InBoundSerial, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="OutboundIMB">OutboundIMB</label>
<%= HTML.TextboxExt("OutboundIMB", Model.KitLabels.OutboundIMB, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="InBoundIMB">InBoundIMB</label>
<%= HTML.TextboxExt("InBoundIMB", Model.KitLabels.InBoundIMB, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="OutboundIMBDigits">OutboundIMBDigits</label>
<%= HTML.TextboxExt("OutboundIMBDigits", Model.KitLabels.OutboundIMBDigits, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="InBoundIMBDigits">InBoundIMBDigits</label>
<%= HTML.TextboxExt("InBoundIMBDigits", Model.KitLabels.InBoundIMBDigits, Array("class", "form-control")) %>
</div>
</div>
</div>
<hr />
<div class="form-group">
<% = HTML.Button("submit", "<i class='glyphicon glyphicon-ok'></i> Save", "btn-primary") %>
&nbsp;&nbsp;
<%= HTML.LinkToExt("<i class='glyphicon glyphicon-remove'></i> Delete", "KitLabels", "Delete", Array("id", Model.KitLabels.ID), Array("class", "btn btn-danger")) %>
&nbsp;&nbsp;
<%= HTML.LinkToExt("Cancel", "KitLabels", "Index", empty, Array("class", "btn btn-default")) %>
</div>
</form>

+ 83
- 0
App/Views/KitLabels/index.asp Переглянути файл

@@ -0,0 +1,83 @@
<h2><%= H(Model.Title) %></h2>
<div class="row">
<div class="col-md-8 col-sm-8 col-xs-12">
<%= H(Model.RecordCount) %> KitLabels found. Showing <%= H(Model.PageSize) %> records per page.
<%= HTML.LinkToExt("<i class='bi bi-plus-square-fill'></i> New","KitLabels", "Create", empty, Array("class", "btn btn-xs btn-primary")) %>
</div>
<div class="col-md-4 col-sm-4 col-xs-12">

<%= HTML.FormTag("KitLabels", "Search", empty, empty) %>

<div class="col-md-10 col-sm-10 col-xs-12">
<label class="sr-only" for="search">Search</label>
<div class="input-group">
<input type="text" class="form-control input-search" value='<%= Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q")) %>' name="q" id="search" placeholder="Search">
<span class="input-group-addon group-icon"><span class="glyphicon glyphicon-eye-open"></span>
<button type="submit" class="btn btn-success"><i class="bi bi-search"></i>Search</buttton>
</div>
</div>

</form>
</div>
</div>
<table id="KitLabels" class="table table-striped">
<thead>
<tr>
<th></th>
<th style="text-align: left">ID</th>
<th style="text-align: left">KitId</th>
<th style="text-align: left">OutboundSerial</th>
<th style="text-align: left">InBoundSerial</th>
<th style="text-align: left">OutboundIMB</th>
<th style="text-align: left">InBoundIMB</th>
<th style="text-align: left">OutboundIMBDigits</th>
<th style="text-align: left">InBoundIMBDigits</th>
<th></th>
</tr>
</thead>
<tbody>
<% dim it : set it = Model.KitLabels.Iterator %>
<% dim KitLabels %>
<% While it.HasNext %>
<% set KitLabels = it.GetNext() %>
<tr>
<td>
<%= HTML.LinkToExt("<i class='bi bi-search'></i>", "KitLabels", "Edit", Array("Id", KitLabels.ID), Array("class", "btn btn-primary")) %>
</td>
<td><% = H(KitLabels.ID) %></td>
<td><% = H(KitLabels.KitId) %></td>
<td><% = H(KitLabels.OutboundSerial) %></td>
<td><% = H(KitLabels.InBoundSerial) %></td>
<td><% = H(KitLabels.OutboundIMB) %></td>
<td><% = H(KitLabels.InBoundIMB) %></td>
<td><% = H(KitLabels.OutboundIMBDigits) %></td>
<td><% = H(KitLabels.InBoundIMBDigits) %></td>
</tr>
<% Wend %>
</tbody>
</table>
<div>
<% If Model.CurrentPageNumber <> 1 then %>
<%= HTML.LinkToExt("<i class='bi bi-chevron-left'></i><i class='bi bi-chevron-left'></i>", MVC.ControllerName, MVC.ActionName, Array("page_num", 1,"q", Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q"))), Array("class", "btn btn-default")) %>
&nbsp;
<%= HTML.LinkToExt("<i class='bi bi-chevron-left'></i>", MVC.ControllerName, MVC.ActionName, Array("page_num", Model.CurrentPageNumber - 1,"q", Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q"))), Array("class", "btn btn-default")) %>
&nbsp;
<% Else %>
<a class='btn btn-default disabled'><i class='bi bi-chevron-left'></i><i class='bi bi-chevron-left'></i></a>
&nbsp;
<a class='btn btn-default disabled'><i class='bi bi-chevron-left'></i></a>
&nbsp;
<% End If %>
<% If CInt(Model.CurrentPageNumber) < CInt(Model.PageCount) then %>
<%= HTML.LinkToExt("<i class='bi bi-chevron-right'></i>", MVC.ControllerName, MVC.ActionName, Array("page_num", Model.CurrentPageNumber + 1,"q", Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q"))), Array("class", "btn btn-default")) %>
&nbsp;
<%= HTML.LinkToExt("<i class='bi bi-chevron-right'></i><i class='bi bi-chevron-right'></i>", MVC.ControllerName, MVC.ActionName, Array("page_num", Model.PageCount,"q", Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q"))), Array("class", "btn btn-default")) %>
&nbsp;
<% Else %>
<a class='btn btn-default disabled'><i class='bi bi-chevron-right'></i><i class='bi bi-chevron-right'></i></a>
&nbsp;
<a class='btn btn-default disabled'><i class='bi bi-chevron-right'></i></a>
&nbsp;
<% End If %>
</div>
</div>

+ 29
- 0
App/Views/Settings/create.asp Переглянути файл

@@ -0,0 +1,29 @@
<h2>Create Settings</h2>

<%= HTML.FormTag("Settings", "CreatePost", empty, empty) %>
<%= HTML.Hidden("nonce", HTMLSecurity.GetAntiCSRFToken("SettingsCreateForm")) %>
<hr />

<div class="form-group">
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="Name">Name</label>
<%= HTML.TextboxExt("Name", Model.Name, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="Value">Value</label>
<%= HTML.TextboxExt("Value", Model.Value, Array("class", "form-control")) %>
</div>
</div>
</div>
<%= HTML.Button("submit", "<i class='glyphicon glyphicon-ok'></i> Create", "btn-primary") %>
&nbsp;&nbsp;
<%= HTML.LinkToExt("<i class='glyphicon glyphicon-remove'></i> Cancel", "Settings", "Index", empty, Array("class", "btn btn-default")) %>
</div>

</form>

+ 31
- 0
App/Views/Settings/delete.asp Переглянути файл

@@ -0,0 +1,31 @@
<h2><%= H(Model.Title) %></h2>

<p class="alert alert-danger">Are you sure you want to delete this Settings?</p>

<%= HTML.FormTag("Settings", "DeletePost", empty, Array("class", "form-horizontal")) %>
<%= HTML.Hidden("nonce", HTMLSecurity.GetAntiCSRFToken("SettingsDeleteForm")) %>
<%= HTML.Hidden("Id", Model.Settings.ID) %>
<div class="col-md-10">
<div class="form-group">
<%= HTML.Button("submit", "<i class='glyphicon glyphicon-remove'></i> Confirm Delete", "btn-danger") %>
&nbsp;&nbsp;
<%= HTML.LinkToExt("Cancel", "Settings", "Index", empty, Array("class", "btn btn-success")) %>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="Name">Name</label>
<%= HTML.TextboxExt("Name", Model.Settings.Name, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="Value">Value</label>
<%= HTML.TextboxExt("Value", Model.Settings.Value, Array("class", "form-control")) %>
</div>
</div>
</div>
</div>
</div>
</form>

+ 29
- 0
App/Views/Settings/edit.asp Переглянути файл

@@ -0,0 +1,29 @@
<h2><%= H(Model.Title) %></h2>
<%= HTML.FormTag("Settings", "EditPost", empty, empty) %>
<%= HTML.Hidden("nonce", HTMLSecurity.GetAntiCSRFToken("SettingsEditForm")) %>
<%= HTML.Hidden("Id", Model.Settings.ID) %>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="Name">Name</label>
<%= HTML.TextboxExt("Name", Model.Settings.Name, Array("class", "form-control")) %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="Value">Value</label>
<%= HTML.TextboxExt("Value", Model.Settings.Value, Array("class", "form-control")) %>
</div>
</div>
</div>
<hr />
<div class="form-group">
<% = HTML.Button("submit", "<i class='glyphicon glyphicon-ok'></i> Save", "btn-primary") %>
&nbsp;&nbsp;
<%= HTML.LinkToExt("<i class='glyphicon glyphicon-remove'></i> Delete", "Settings", "Delete", Array("id", Model.Settings.ID), Array("class", "btn btn-danger")) %>
&nbsp;&nbsp;
<%= HTML.LinkToExt("Cancel", "Settings", "Index", empty, Array("class", "btn btn-default")) %>
</div>
</form>

+ 73
- 0
App/Views/Settings/index.asp Переглянути файл

@@ -0,0 +1,73 @@
<h2><%= H(Model.Title) %></h2>
<div class="row">
<div class="col-md-8 col-sm-8 col-xs-12">
<%= H(Model.RecordCount) %> Settings found. Showing <%= H(Model.PageSize) %> records per page.
<%= HTML.LinkToExt("<i class='bi bi-plus-square-fill'></i> New","Settings", "Create", empty, Array("class", "btn btn-xs btn-primary")) %>
</div>
<div class="col-md-4 col-sm-4 col-xs-12">

<%= HTML.FormTag("Settings", "Search", empty, empty) %>

<div class="col-md-10 col-sm-10 col-xs-12">
<label class="sr-only" for="search">Search</label>
<div class="input-group">
<input type="text" class="form-control input-search" value='<%= Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q")) %>' name="q" id="search" placeholder="Search">
<span class="input-group-addon group-icon"><span class="glyphicon glyphicon-eye-open"></span>
<button type="submit" class="btn btn-success"><i class="bi bi-search"></i>Search</buttton>
</div>
</div>

</form>
</div>
</div>
<table id="Settings" class="table table-striped">
<thead>
<tr>
<th></th>
<th style="text-align: left">ID</th>
<th style="text-align: left">Name</th>
<th style="text-align: left">Value</th>
<th></th>
</tr>
</thead>
<tbody>
<% dim it : set it = Model.Settings.Iterator %>
<% dim Settings %>
<% While it.HasNext %>
<% set Settings = it.GetNext() %>
<tr>
<td>
<%= HTML.LinkToExt("<i class='bi bi-search'></i>", "Settings", "Edit", Array("Id", Settings.ID), Array("class", "btn btn-primary")) %>
</td>
<td><% = H(Settings.ID) %></td>
<td><% = H(Settings.Name) %></td>
<td><% = H(Settings.Value) %></td>
</tr>
<% Wend %>
</tbody>
</table>
<div>
<% If Model.CurrentPageNumber <> 1 then %>
<%= HTML.LinkToExt("<i class='bi bi-chevron-left'></i><i class='bi bi-chevron-left'></i>", MVC.ControllerName, MVC.ActionName, Array("page_num", 1,"q", Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q"))), Array("class", "btn btn-default")) %>
&nbsp;
<%= HTML.LinkToExt("<i class='bi bi-chevron-left'></i>", MVC.ControllerName, MVC.ActionName, Array("page_num", Model.CurrentPageNumber - 1,"q", Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q"))), Array("class", "btn btn-default")) %>
&nbsp;
<% Else %>
<a class='btn btn-default disabled'><i class='bi bi-chevron-left'></i><i class='bi bi-chevron-left'></i></a>
&nbsp;
<a class='btn btn-default disabled'><i class='bi bi-chevron-left'></i></a>
&nbsp;
<% End If %>
<% If CInt(Model.CurrentPageNumber) < CInt(Model.PageCount) then %>
<%= HTML.LinkToExt("<i class='bi bi-chevron-right'></i>", MVC.ControllerName, MVC.ActionName, Array("page_num", Model.CurrentPageNumber + 1,"q", Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q"))), Array("class", "btn btn-default")) %>
&nbsp;
<%= HTML.LinkToExt("<i class='bi bi-chevron-right'></i><i class='bi bi-chevron-right'></i>", MVC.ControllerName, MVC.ActionName, Array("page_num", Model.PageCount,"q", Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q"))), Array("class", "btn btn-default")) %>
&nbsp;
<% Else %>
<a class='btn btn-default disabled'><i class='bi bi-chevron-right'></i><i class='bi bi-chevron-right'></i></a>
&nbsp;
<a class='btn btn-default disabled'><i class='bi bi-chevron-right'></i></a>
&nbsp;
<% End If %>
</div>
</div>

+ 10
- 0
App/Views/Shared/layout.footer.asp Переглянути файл

@@ -0,0 +1,10 @@
 </div><!-- /.container -->


<!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<%= HTML.JSTag(jqueryJs) %>
<%= HTML.JSTag(appBootStrapJs) %>
</body>
</html>

+ 38
- 0
App/Views/Shared/layout.header.asp Переглянути файл

@@ -0,0 +1,38 @@

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">

<title><%= siteTitle %></title>

<!-- Latest compiled and minified CSS -->
<%= HTML.StylesheetTag(appCss) %>
<%= HTML.StylesheetTag(iconsCss) %>
</head>

<body>
<ul class="nav">
<li class="nav-item"><%= Html.LinkTOExt("Jurisdiction","Jurisdiction","Index",empty,Array("Class","nav-link")) %></li>
<li class="nav-item"><%= Html.LinkTOExt("Contacts","Contacts","Index",empty,Array("Class","nav-link")) %></li>
<li class="nav-item"><%= Html.LinkTOExt("Settings","Settings","Index",empty,Array("Class","nav-link")) %></li>
<li class="nav-item"><%= Html.LinkTOExt("Kit","Kit","Index",empty,Array("Class","nav-link")) %></li>
<li class="nav-item"><%= Html.LinkTOExt("KitLabels","KitLabels","Index",empty,Array("Class","nav-link")) %></li>
<!--nav bar placeholder-->
</ul>


<div class="container" style="margin-top: 50px">

<%
'Flash.ShowErrorsIfPresent
'Flash.ShowSuccessIfPresent
%>







+ 14
- 0
App/app.config.asp Переглянути файл

@@ -0,0 +1,14 @@
<%
dim appCss, appJs, appBootStrapJs, jqueryJs, siteTitle, iconsCss
Routes.Initialize "/App/"
siteTitle = "Clerks and Jurisdictions"
iconsCss = "https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css"
appCss = "https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css"
appBootStrapJs = "https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js' integrity='sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM' crossorigin='anonymous"
jqueryJs = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js' integrity='sha512-v2CJ7UaYy4JwqLDIrZUI/4hqeoQieOmAZNXBeQyjo21dadnwR+8ZaIJVT8EE2iyI61OV8e6M8PP2/4hpQINQ/g==' crossorigin='anonymous' referrerpolicy='no-referrer"

'=======================================================================================================================
' Set Global Variables Here
'=======================================================================================================================

%>

+ 8
- 0
App/include_all.asp Переглянути файл

@@ -0,0 +1,8 @@
<!--#include file="../MVC/lib.all.asp"-->
<!--#include file="DAL/lib.DAL.asp"-->
<!--#include file="app.Config.asp"-->
<!--#include file="DomainModels/ContactsRepository.asp"-->
<!--#include file="DomainModels/JurisdictionRepository.asp"-->
<!--#include file="DomainModels/KitRepository.asp"-->
<!--#include file="DomainModels/KitLabelsRepository.asp"-->
<!--#include file="DomainModels/SettingsRepository.asp"-->

+ 2
- 0
Data/Migrations/! Create Migrations Table.sql Переглянути файл

@@ -0,0 +1,2 @@
create table meta_migrations (version int not null);
insert into meta_migrations (version) values (0);

+ 15
- 0
Data/Migrations/! Migrations Template.asp Переглянути файл

@@ -0,0 +1,15 @@
<%
Class Migration_XX_
Public Migration

Public Sub Up
Migration.Do ""
End Sub
Public Sub Down
Migration.Do ""
End Sub
End Class

Migrations.Add "Migration_XX_"
%>

+ 15
- 0
Data/Migrations/Example_01_Create_Example_Table.asp Переглянути файл

@@ -0,0 +1,15 @@
<%
Class Example_01_Create_Example_Table
Public Migration

Public Sub Up
Migration.Do "create table Example_Table (id int not null, name varchar(100) not null)"
End Sub
Public Sub Down
Migration.Do "drop table Example_Table"
End Sub
End Class

Migrations.Add "Example_01_Create_Example_Table"
%>

+ 18
- 0
Data/Migrations/Example_02_Insert_Records_To_Example_Table.asp Переглянути файл

@@ -0,0 +1,18 @@
<%
Class Example_02_Insert_Records_To_Example_Table
Public Migration

Public Sub Up
dim i
For i = 1 to 100
Migration.Do "INSERT INTO Example_Table (id, name) VALUES (" & i & ", 'Name " & i & "');"
Next
End Sub
Public Sub Down
Migration.Do "DELETE FROM Example_Table WHERE id >= 1 and id <= 100"
End Sub
End Class

Migrations.Add "Example_02_Insert_Records_To_Example_Table"
%>

+ 18
- 0
Data/Migrations/Example_03_Insert_More_Records_To_Example_Table.asp Переглянути файл

@@ -0,0 +1,18 @@
<%
Class Example_03_Insert_More_Records_To_Example_Table
Public Migration

Public Sub Up
dim i
For i = 101 to 200
Migration.Do "INSERT INTO Example_Table (id, name) VALUES (" & i & ", 'ANOTHER Name " & i & "');"
Next
End Sub
Public Sub Down
Migration.Do "DELETE FROM Example_Table WHERE id >= 101 and id <= 200"
End Sub
End Class

Migrations.Add "Example_03_Insert_More_Records_To_Example_Table"
%>

+ 1547
- 0
Data/Migrations/Migration_01_Create_Jurisdiction_Table.asp
Різницю між файлами не показано, бо вона завелика
Переглянути файл


+ 1560
- 0
Data/Migrations/Migration_02_Create_Contact_Table.asp
Різницю між файлами не показано, бо вона завелика
Переглянути файл


+ 26
- 0
Data/Migrations/Migration_03_Create_Settings_Table.asp Переглянути файл

@@ -0,0 +1,26 @@
<%
Class Migration_03_Create_Settings_Table
Public Migration

Public Sub Up
Migration.Do "CREATE TABLE [Settings] (" &_
"[ID] COUNTER," &_
"[Name] VARCHAR(255)," &_
"[Value] VARCHAR(255)" &_
");"
Migration.Do "CREATE UNIQUE INDEX [ID] ON [Settings]( [ID] ) WITH PRIMARY;"



Migration.Do "INSERT INTO Settings ([Name],[Value]) VALUES ('MailingID', '202248');"
Migration.Do "INSERT INTO Settings ([Name],[Value]) VALUES ('SerialNumberStart','2000000');"
Migration.Do "INSERT INTO Settings ([Name],[Value]) VALUES ('SerialNumberEnd','5000000');"
Migration.Do "INSERT INTO Settings ([Name],[Value]) Values ('SerialOffset','2000000');"
End Sub
Public Sub Down
Migration.Do "DROP TABLE [Settings]"
End Sub
End Class
Migrations.Add "Migration_03_Create_Settings_Table"
%>

+ 19
- 0
Data/Migrations/Migration_04_Create_Kit_Table.asp Переглянути файл

@@ -0,0 +1,19 @@
<%
Class Migration_04_Create_Kit_Table
Public Migration

Public Sub Up
Migration.Do "CREATE TABLE [Kit] (" &_
"[ID] COUNTER," &_
"[JobNumber] VARCHAR(255)," &_
"[Jcode] VARCHAR(255)" &_
");"
Migration.Do "CREATE UNIQUE INDEX [ID] ON [Kit]( [ID] ) WITH PRIMARY;"
End Sub
Public Sub Down
Migration.Do "DROP TABLE [Kit]"
End Sub
End Class
Migrations.Add "Migration_04_Create_Kit_Table"
%>

+ 24
- 0
Data/Migrations/Migration_05_Create_Kit_Labels_Table.asp Переглянути файл

@@ -0,0 +1,24 @@
<%
Class Migration_05_Create_Kit_Labels_Table
Public Migration

Public Sub Up
Migration.Do "CREATE TABLE [KitLabels] (" &_
"[ID] COUNTER," &_
"[KitId] NUMBER," &_
"[OutboundSerial] VARCHAR(255)," &_
"[InBoundSerial] VARCHAR(255)," &_
"[OutboundIMB] VARCHAR(255)," &_
"[InBoundIMB] VARCHAR(255)," &_
"[OutboundIMBDigits] VARCHAR(255)," &_
"[InBoundIMBDigits] VARCHAR(255)" &_
");"
Migration.Do "CREATE UNIQUE INDEX [ID] ON [KitLabels]( [ID] ) WITH PRIMARY;"
End Sub
Public Sub Down
Migration.Do "DROP TABLE [KKitLabels]"
End Sub
End Class
Migrations.Add "Migration_05_Create_Kit_Labels_Table"
%>

+ 276
- 0
Data/Migrations/lib.Migrations.asp Переглянути файл

@@ -0,0 +1,276 @@
<%
'Represents a single migration (either up or down)
Class Migration_Class
Private m_name
Private m_migration_instance
Private m_sql_array
Private m_sql_array_size
Private m_connection
Private m_has_errors
Public Tracing 'bool
Public Property Get Name
Name = m_name
End Property
Public Property Get Migration
set Migration = m_migration_instance
End Property
Public Property Set Migration(obj)
set m_migration_instance = obj
End Property
Public Property Get HasErrors
HasErrors = m_has_errors
End Property
Private Sub Class_Initialize
m_sql_array = array()
redim m_sql_array(-1)
m_has_errors = false
End Sub
Public Sub Initialize(name, migration_instance, connection)
m_name = name
set m_migration_instance = migration_instance
set m_migration_instance.Migration = Me 'how circular can we get? ...
set m_connection = connection
End Sub
Private Sub Class_Terminate
'm_connection.Close
'set m_connection = Nothing
End Sub
Public Sub [Do](sql)
dim new_size : new_size = ubound(m_sql_array) + 1
redim preserve m_sql_array(new_size)
m_sql_array(new_size) = sql
'put "Added command: " & sql
End Sub
Public Sub Irreversible
Err.Raise 1, "Migration_Class:Irreversible", "Migration cannot proceed because this migration is irreversible."
End Sub
Public Sub DownDataWarning
put "Migration can be downversioned but data changes cannot take place due to the nature of the Up migration in this set."
End Sub
Public Function Query(sql)
put "Query: " & sql
set Query = m_connection.Execute(sql)
End Function
Public Sub DoUp
Migration.Up
ShowCommands
ExecuteCommands
End Sub
Public Sub DoDown
Migration.Down
ShowCommands
ExecuteCommands
End Sub
Private Sub ShowCommands
put ""
put "Commands:"
dim i : i = 0
For i = 0 to ubound(m_sql_array)
put "&nbsp;&nbsp;&nbsp;&nbsp;Command: " & m_sql_array(i)
Next
put ""
End Sub
Private Sub ExecuteCommands
dim i : i = 0
dim sql
m_connection.BeginTrans 'wrap entire process in transaction, rollback If error encountered on any statement
For i = 0 to ubound(m_sql_array)
sql = m_sql_array(i)
If not m_has_errors then 'avoid further processing If errors exist
On Error Resume Next
put "Executing: " & sql
m_connection.Execute sql
If Err.Number <> 0 then 'something went wrong, rollback the transaction and display an error
m_has_errors = true
m_connection.RollbackTrans
put_error "Error during migration: " & Err.Description
put_error "SQL: " & sql
exit sub
End If
On Error Goto 0
End If
Next
m_connection.CommitTrans 'surprisingly no errors were encountered, so commit the entire transaction
End Sub
'force font color dIfference
Private Sub put(s)
If Me.Tracing then response.write "<div style='color: #999'>" & s & "</div>"
End Sub
End Class


'---------------------------------------------------------------------------------------------------------------------
'Represents the collection of migrations to be performed
Class Migrations_Class
Private m_migrations_array ' 1-based to match migration naming scheme, ignore the first element
Private m_migrations_array_size
Private m_version
Private m_connection
Private m_connection_string
Private m_has_errors
Public Tracing 'bool
Private Sub Class_Initialize
m_migrations_array = array()
m_migrations_array_size = 0 ' 1-based, ignore the first element
redim m_migrations_array(m_migrations_array_size)

m_has_errors = false
End Sub
Private Sub Class_Terminate
On Error Resume Next
m_connection.Close
set m_connection = Nothing
On Error Goto 0
End Sub
'force font color dIfference
Private Sub put(s)
If Me.Tracing then response.write "<div style='color: #999'>" & s & "</div>"
End Sub
Public Sub Initialize(connection_string)
m_connection_string = connection_string
set m_connection = Server.CreateObject("ADODB.Connection")
m_connection.Open m_connection_string
put "Initialized: " & typename(m_connection)
End Sub
Public Sub Add(name)
m_migrations_array_size = m_migrations_array_size + 1
redim preserve m_migrations_array(m_migrations_array_size)
dim M : set M = new Migration_Class
dim migration_instance : set migration_instance = eval("new " & name)
M.Initialize name, migration_instance, m_connection
M.Tracing = Me.Tracing
set m_migrations_array(m_migrations_array_size) = M
End Sub
Public Sub MigrateUp
MigrateUpTo m_migrations_array_size
End Sub
Public Sub MigrateUpBy(num)
MigrateUpTo Version + num
End Sub
Public Sub MigrateUpTo(requested_version)
requested_version = CInt(requested_version)
put "Migrating Up To Version " & requested_version
dim M, class_name
If Version >= requested_version then
put_error "DB already at higher version than requested up migration."
ElseIf requested_version > m_migrations_array_size then
put_error "Requested version exceeds available migrations. Only " & m_migrations_array_size & " migrations are available."
Else
While (NextVersion <= requested_version) and (not m_has_errors)
set M = m_migrations_array(NextVersion)
put ""
put "<b>Up: " & M.name & "</b>"
M.DoUp
m_has_errors = M.HasErrors
If not m_has_errors then IncrementVersion
Wend
End If
End Sub
Public Sub MigrateDown
MigrateDownTo 0
End Sub
Public Sub MigrateDownBy(num)
MigrateDownTo Version - num
End Sub
Public Sub MigrateDownTo(requested_version)
requested_version = CInt(requested_version)
put "Migrating Down To Version: " & requested_version
dim M, class_name
If requested_version < 0 then
put_error "Cannot migrate down to a version less than 0."
ElseIf requested_version > Version then
put_error "Cannot migrate down to a version higher than the current version."
ElseIf requested_version = Version then
put_error "Cannot migrate down to the current version, already there."
Else
While (Version > requested_version) and (not m_has_errors)
set M = m_migrations_array(Version)
put ""
put "<b>Down: " & M.Name & "</b>"
M.DoDown
m_has_errors = M.HasErrors
If not m_has_errors then DecrementVersion
Wend
End If
End Sub
Public Property Get Version
If IsEmpty(m_version) then
m_version = GetDBVersion()
End If
Version = m_version
End Property
Private Property Let Version(val)
m_version = val
m_connection.Execute "update meta_migrations set version = " & m_version
End Property
Public Property Get NextVersion
NextVersion = Version + 1
End Property
Private Function GetDBVersion()
dim rs : set rs = m_connection.Execute("select version from meta_migrations")
If rs.BOF or rs.EOF then
GetDBVersion = NULL
Else
GetDBVersion = rs("version")
End If
rs.Close
set rs = Nothing
End Function
Private Sub IncrementVersion
If not m_has_errors then Version = Version + 1
End Sub
Private Sub DecrementVersion
If not m_has_errors then Version = Version - 1
End Sub
End Class


dim Migrations_Class__Singleton

Function Migrations()
If IsEmpty(Migrations_Class__Singleton) then set Migrations_Class__Singleton = new Migrations_Class
set Migrations = Migrations_Class__Singleton
End Function
%>

+ 115
- 0
Data/Migrations/migrate.asp Переглянути файл

@@ -0,0 +1,115 @@
<%
Option Explicit

Sub put(v)
response.write v & "<br>"
End Sub

Sub put_
put ""
End Sub

Sub put_error(s)
put "<span style='color: red; font-weight: bold;'>" & s & "</span>"
End Sub
%>

<!--#include file="../../MVC/lib.all.asp"-->
<!--#include file="../../App/DAL/lib.DAL.asp"-->

<!--#include file="lib.Migrations.asp"-->

<%
'Have to initialize Migrations_Class before including any actual migrations, because they each automatically append themselves to the Migrations class for convenience.
'TODO: This can be refactored by not having the individual migration files auto-add themselves, but then this file must manually add each one using a slightly dIfferent
' naming convention, i.e. given include file 01_Create_Users.asp the command would be Migrations.Add "Migration_01_Create_Users" or such. At least this way is automated.

Migrations.Initialize "Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Engine Type=5;Data Source=" & Request.ServerVariables("APPL_PHYSICAL_PATH") & "Data\webdata.mdb;"

Migrations.Tracing = false
%>

<!--#include file="Migration_01_Create_Jurisdiction_Table.asp"-->
<!--#include file="Migration_02_Create_Contact_Table.asp"-->
<!--#include file="Migration_03_Create_Settings_Table.asp"-->
<!--#include file="Migration_04_Create_Kit_Table.asp"-->
<!--#include file="Migration_05_Create_Kit_Labels_Table.asp"-->
<%
Sub HandleMigration
putl "<b>Starting Version: " & Migrations.Version & "</b>"
If Request.Form("mode") = "direct" then
If Request.Form("direction") = "Up" then
If Len(Request.Form("to")) > 0 then
Migrations.MigrateUpTo(Request.Form("to"))
Else
Migrations.MigrateUp
End If
ElseIf Request.Form("direction") = "Down" then
If Len(Request.Form("to")) > 0 then
Migrations.MigrateDownTo(Request.Form("to"))
Else
Migrations.MigrateDown
End If
End If
ElseIf Request.Form("mode") = "up_one" then
Migrations.MigrateUpBy 1
ElseIf Request.Form("mode") = "down_one" then
Migrations.MigrateDownBy 1
End If
putl "<b style='color: darkgreen'>Final Version: " & Migrations.Version & "</b>"
End Sub

Sub ShowForm
%>
<form action="migrate.asp" method="POST">
<input type="hidden" name="mode" value="direct">
<p>
<b>Direction: </b>
<select name="direction">
<option value="Up">Up</option>
<option value="Down">Down</option>
</select>
&nbsp;&nbsp;
<b>To: </b>
<input type="text" size="5" name="to">
&nbsp;&nbsp;
<input type="Submit" value="Migrate!">
</p>
</form>
<form action="migrate.asp" method="POST" style="display: inline">
<input type="hidden" name="mode" value="up_one">
<input type="Submit" value="Up 1">
</form>
<form action="migrate.asp" method="POST">
<input type="hidden" name="mode" value="down_one">
<input type="Submit" value="Down 1">
</form>
<hr>
<%
End Sub

Sub Main
ShowForm
If Len(Request.Form("mode")) > 0 then
HandleMigration
Else
putl "<b>Version: " & Migrations.Version & "</b>"
End If
End Sub
%>

<!doctype html>
<html>
<head>
<style>
body { font-family: calibri; }
</style>
</head>
<body>
<% Main %>
</body>
</html>

BIN
Dependancies/IDAutomationFontEncoder.dll Переглянути файл


BIN
Dependancies/InstallFontEncoderDLL.exe Переглянути файл


+ 83
- 0
MVC/docs.asp Переглянути файл

@@ -0,0 +1,83 @@
<%
Option Explicit

Sub Main
ShowFileList
If Len(Request.Form("filename")) > 0 then
ShowDocs
End If
End Sub


Sub ShowFileList
%>
<h1>Select File</h1>
<form action="docs.asp" method="POST">
<select name="filename">
<%
dim fso : set fso = Server.CreateObject("Scripting.FileSystemObject")
dim files : set files = fso.GetFolder(Server.MapPath(".")).Files
dim file
For Each file in files
If fso.GetExtensionName(file.Path) = "asp" and file.Name <> "docs.asp" and InStr(file.Name, "_old") = 0 then
response.write "<option value='" & file.Name & "'>" & file.Name & "</option>"
End If
Next
%>
</select>
<input type="submit" value="Get Docs">
</form>
<hr>
<%
End Sub


Sub ShowDocs
dim fso : set fso = Server.CreateObject("Scripting.FileSystemObject")
dim path : path = fso.GetFolder(Server.MapPath(".")).Path
dim file : set file = fso.OpenTextFile(path & "\" & Request.Form("filename"))
dim re : set re = new RegExp
With re
.Pattern = "Public Property|Public Sub|Public Function"
.Global = true
.IgnoreCase = true
End With
dim line, matches, result
Do Until file.AtEndOfStream
line = file.ReadLine()
set matches = re.Execute(line)
If matches.Count > 0 then
result = line
result = Replace(result, "Public Property", "<span class='subdued'>Property</span>")
result = Replace(result, "Public Sub", "<span class='subdued'>Sub</span>")
result = Replace(result, "Public Function", "<span class='subdued'>Function</span>")
response.write "<p>" & result & "</p>"
End If
Loop
End Sub


%>

<!doctype html>
<html>
<head>
<style>
body { font-family: calibri; }
p { font-weight: bold; }
.subdued { font-weight: normal; color: #999; }
</style>
</head>
<body>
<% Call Main %>
</body>
</html>

+ 160
- 0
MVC/lib.Automapper.asp Переглянути файл

@@ -0,0 +1,160 @@
<%
'=======================================================================================================================
' AUTOMAPPER CLASS
'=======================================================================================================================

'Side Effects: Since src and target are passed ByRef to reduce unnecessary copying, if src is a recordset then the
' current record pointer is modified using src.MoveFirst and src.MoveNext. The end result is the current
' record pointer ends the operation at src.EOF.

Class Automapper_Class
Private m_src
Private m_target
Private m_statements
Private m_statements_count
Private Property Get Src : set Src = m_src : End Property
Private Property Get Target : set Target = m_target : End Property
Private Sub Class_Initialize
m_statements = Array()
m_statements_count = 0
redim m_statements(m_statements_count)
End Sub
Private Sub ResetState
m_statements_count = 0
redim m_statements(m_statements_count)
set m_src = Nothing
set m_target = Nothing
End Sub

'Maps all rs or object fields to corresponding fields in the specified class.
Public Function AutoMap(src_obj, target_obj)
Set AutoMap = FlexMap(src_obj, target_obj, empty)
End Function
'Only maps fields specified in the field_names array (array of strings).
'If field_names is empty, attempts to map all fields from the passed rs or object.
Public Function FlexMap(src_obj, target_obj, field_names)
Set FlexMap = DynMap(src_obj, target_obj, field_names, empty)
End Function
'Only maps fields specified in the field_names array (array of strings).
'If field_names is empty then src MUST be a recordset as it attempts to map all fields from the recordset.
'Since there is no reflection in vbscript, there is no way around this short of pseudo-reflection.
Public Function DynMap(src_obj, target_obj, field_names, exprs)
SetSource src_obj
SetTarget target_obj
dim field_name
dim field_idx 'loop counter
if IsEmpty(field_names) then 'map everything
if typename(src_obj) = "Recordset" then
for field_idx = 0 to src_obj.Fields.Count - 1
field_name = src_obj.Fields.Item(field_idx).Name
'AddStatement field_name
AddStatement BuildStatement(field_name)
next
elseif InStr(typename(src_obj), "Dictionary") > 0 then 'enables Scripting.Dictionary and IRequestDictionary for Request.Querystring and Request.Form
for each field_name in src_obj
AddStatement BuildStatement(field_name)
next
elseif not IsEmpty(src_obj.Class_Get_Properties) then
dim props : props = src_obj.Class_Get_Properties
for field_idx = 0 to ubound(props)
field_name = props(field_idx)
'AddStatement field_name
AddStatement BuildStatement(field_name)
next
else 'some invalid type of object
Err.Raise 9, "Automapper.DynMap", "Cannot automatically map this source object. Expected recordset or object implementing Class_Get_Properties reflection, got: " & typename(src_obj)
end if
else 'map only specified fields
for field_idx = lbound(field_names) to ubound(field_names)
field_name = field_names(field_idx)
'AddStatement field_name
AddStatement BuildStatement(field_name)
next
end if
dim exprs_idx
if not IsEmpty(exprs) then
if typename(exprs) = "Variant()" then
for exprs_idx = lbound(exprs) to ubound(exprs)
'field_name = exprs(exprs_idx)
'AddStatement field_name
AddStatement exprs(exprs_idx)
next
else 'assume string or string-like default value
AddStatement exprs
end if
end if
'Can't pre-join the statements because if one fails the rest of them fail too... :(
'dim joined_statements : joined_statements = Join(m_statements, " : ")
'put joined_statements
'suspend errors to prevent failing when attempting to map a field that does not exist in the class
on error resume next
dim stmt_idx
for stmt_idx = 0 to ubound(m_statements)
Execute m_statements(stmt_idx)
next
on error goto 0
set DynMap = m_target
ResetState
End Function
Private Sub SetSource(ByVal src_obj)
set m_src = src_obj
End Sub
Private Sub SetTarget(ByVal target_obj)
if typename(target_obj) = "String" then
set m_target = eval("new " & target_obj)
else
set m_target = target_obj
end if
End Sub
'Builds a statement and adds it to the internal statements array
Private Sub AddStatement(ByVal stmt)
redim preserve m_statements(m_statements_count + 1)
m_statements(m_statements_count) = stmt
m_statements_count = m_statements_count + 1
End Sub
Private Function BuildStatement(ByVal field_name)
dim result
if typename(m_src) = "Recordset" or InStr(typename(m_src), "Dictionary") > 0 then
result = "m_target." & field_name & " = m_src(""" & field_name & """)"
else
'Funky magic...
'If src.field_name is an object, ensure the set statement is used
if IsObject(eval("m_src." & field_name)) then
result = "set "
else
'result = "m_target." & field_name & " = m_src." & field_name
end if
result = result & " m_target." & field_name & " = m_src." & field_name
end if
BuildStatement = result
End Function
End Class


Function Automapper()
Set Automapper = new Automapper_Class
End Function
%>

+ 57
- 0
MVC/lib.Bootstrap.asp Переглянути файл

@@ -0,0 +1,57 @@
<%
'=======================================================================================================================
' Bootstrap Helper - Provides some convenience methods for Bootstrap use
'=======================================================================================================================
Class Bootstrap_Helper_Class
'---------------------------------------------------------------------------------------------------------------------
' Forms
'---------------------------------------------------------------------------------------------------------------------
'Creates .control-label for Bootstrap styling
Public Function ControlLabel(name, for_name)
ControlLabel = HTML.LabelExt(name, for_name, Array("class", "control-label"))
End Function
Public Function Control(label_text, control_name, controls_html)
Control = "<div class='control-group'>" & ControlLabel(label_text, control_name) & "<div class='controls'>" & controls_html & "</div></div>"
End Function
'---------------------------------------------------------------------------------------------------------------------
' Modals
'---------------------------------------------------------------------------------------------------------------------
Public Function ModalLinkTo(link_text, controller_name, action_name, modal_name, html_class_attrib)
ModalLinkTo = ModalLinkToExt(link_text, controller_name, action_name, params_array, modal_name, html_class_attrib, empty)
End Function
Public Function ModalLinkToExt(link_text, controller_name, action_name, params_array, modal_name, html_class_attrib, html_attribs_array)
ModalLinkToExt = "<a href='" & Server.HTMLEncode(Routes.UrlTo(controller_name, action_name, params_array)) & "'" &_
" class='" & html_class_attrib & " modal-link' data-modal='" & modal_name & "' " &_
HTML.HtmlAttribs(html_attribs_array) & ">" & link_text & "</a>"
End Function
'Generates the jQuery handler for the modal dialogs
Public Function ModalHandlerScript()
dim s
s = " <script type='text/javascript'> " & vbCR &_
" // when a .modal-link is clicked, display the href target in the popup modal " & vbCR &_
" $(function() { " & vbCR &_
" $('a.modal-link').click(function(event) { " & vbCR &_
" event.preventDefault(); " & vbCR &_
" var modalName = $(this).attr('data-modal'); " & vbCR &_
" $('#' + modalName).removeData('modal').modal( { remote: $(this).attr('href') } ); " & vbCR &_
" }); " & vbCR &_
" }); " & vbCR &_
" </script> "
ModalHandlerScript = s
End Function
End Class


dim Bootstrap_Helper_Class__Singleton
Function Bootstrap()
If IsEmpty(Bootstrap_Helper_Class__Singleton) then set Bootstrap_Helper_Class__Singleton = new Bootstrap_Helper_Class
set Bootstrap = Bootstrap_Helper_Class__Singleton
End Function



%>

+ 740
- 0
MVC/lib.Collections.asp Переглянути файл

@@ -0,0 +1,740 @@
<%
'=======================================================================================================================
' KVArray
' Relatively painless implementation of key/value pair arrays without requiring a full Scripting.Dictionary COM instance.
' A KVArray is a standard array where element i is the key and element i+1 is the value. Loops must step by 2.
'=======================================================================================================================
'given a KVArray and key index, returns the key and value
'pre: kv_array has at least key_idx and key_idx + 1 values
'post: key and val are populated
Sub KeyVal(kv_array, key_idx, ByRef key, ByRef val)
if (key_idx + 1 > ubound(kv_array)) then err.raise 1, "KeyVal", "expected key_idx < " & ubound(kv_array) - 1 & ", got: " & key_idx
key = kv_array(key_idx)
val = kv_array(key_idx + 1)
End Sub

'---------------------------------------------------------------------------------------------------------------------
'Given a KVArray, a key and a value, appends the key and value to the end of the KVArray
Sub KVAppend(ByRef kv_array, key, val)
dim i : i = ubound(kv_array)
redim preserve kv_array(i + 2)
kv_array(i + 1) = key
kv_array(i + 2) = val
End Sub

'-----------------------------------------------------------------------------------------------------------------------
'Given a KVArray and two variants, populates the first variant with all keys and the second variant with all values.
'If
'Pre: kv_array has at least key_idx and key_idx + 1 values
'Post: key_array contains all keys in kvarray.
' val_array contains all values in kvarray.
' key_array and val_array values are in corresponding order, i.e. key_array(i) corresponds to val_array(i).
Sub KVUnzip(kv_array, key_array, val_array)
dim kv_array_size : kv_array_size = ubound(kv_array)
dim num_pairs : num_pairs = (kv_array_size + 1) / 2
dim result_array_size : result_array_size = num_pairs - 1
'Extend existing key_array or create new array to hold the keys
If IsArray(key_array) then
redim preserve key_array(ubound(key_array) + result_array_size)
Else
key_array = Array()
redim key_array(result_array_size)
End If
'Extend existing val array or create new array to hold the values
If IsArray(val_array) then
redim preserve val_array(ubound(val_array) + result_array_size)
Else
val_array = Array()
redim val_array(num_pairs - 1)
End If
'Unzip the KVArray into the two output arrays
dim i, key, val
dim key_val_arrays_idx : key_val_arrays_idx = 0 ' used to sync loading the key_array and val_array
For i = 0 to ubound(kv_array) step 2
KeyVal kv_array, i, key, val
key_array(key_val_arrays_idx) = key
val_array(key_val_arrays_idx) = val
key_val_arrays_idx = key_val_arrays_idx + 1 ' increment by 1 because loop goes to next pair in kv_array
Next
End Sub

'---------------------------------------------------------------------------------------------------------------------
'Given a KVArray, dumps it to the screen. Useful for debugging purposes.
Sub DumpKVArray(kv_array)
dim i, key, val
For i = 0 to ubound(kv_array) step 2
KeyVal kv_array, i, key, val
put key & " => " & val & "<br>"
Next
End Sub


'=======================================================================================================================
' Pair Class
' Holds a pair of values, i.e. a key value pair, recordset field name/value pair, etc.
' Similar to the C++ STL std::pair class. Useful for some iteration and the like.
'
' This was an interesting idea but so far has not really been used, oh well......
'=======================================================================================================================
Class Pair_Class
Private m_first, m_second

Public Property Get First : First = m_first : End Property
Public Property Get [Second] : [Second] = m_second : End Property
Public Default Property Get TO_String
TO_String = First & " " & [Second]
End Property
Public Sub Initialize(ByVal firstval, ByVal secondval)
Assign m_first, firstval
Assign m_second, secondval
End Sub
'Swaps the two values
Public Sub Swap
dim tmp
Assign tmp, m_second
Assign m_second, m_first
Assign m_first, tmp
End Sub
End Class

Function MakePair(ByVal firstval, ByVal secondval)
dim P : set P = new Pair_Class
P.Initialize firstval, secondval
set MakePair = P
End Function



'=======================================================================================================================
' Linked List - From the Tolerable lib
'=======================================================================================================================
' This is just here for reference
Class Iterator_Class
Public Function HasNext()
End Function
Public Function PeekNext()
End Function
Public Function GetNext()
End Function
Public Function HasPrev()
End Function
Public Function PeekPrev()
End Function
Public Function GetPrev()
End Function
End Class


Class Enumerator_Source_Iterator_Class
Private m_iter
Public Sub Initialize(ByVal iter)
Set m_iter = iter
End Sub
Private Sub Class_Terminate()
Set m_iter = Nothing
End Sub
Public Sub GetNext(ByRef retval, ByRef successful)
If m_iter.HasNext Then
Assign retval, m_iter.GetNext
successful = True
Else
successful = False
End If
End Sub
End Class


Public Function En_Iterator(ByVal iter)
Dim retval
Set retval = New Enumerator_Source_Iterator_Class
retval.Initialize iter
Set En_Iterator = Enumerator(retval)
End Function


Class LinkedList_Node_Class
Public m_prev
Public m_next
Public m_value

Private Sub Class_Initialize()
Set m_prev = Nothing
Set m_next = Nothing
End Sub
Private Sub Class_Terminate()
Set m_prev = Nothing
Set m_next = Nothing
Set m_value = Nothing
End Sub
Public Sub SetValue(ByVal value)
Assign m_value, value
End Sub
End Class


Class Iterator_LinkedList_Class
Private m_left
Private m_right
Public Sub Initialize(ByVal r)
Set m_left = Nothing
Set m_right = r
End Sub
Private Sub Class_Terminate()
Set m_Left = Nothing
Set m_Right = Nothing
End Sub
Public Function HasNext()
HasNext = Not(m_right Is Nothing)
End Function
Public Function PeekNext()
Assign PeekNext, m_right.m_value
End Function
Public Function GetNext()
Assign GetNext, m_right.m_value
Set m_left = m_right
Set m_right = m_right.m_next
End Function
Public Function HasPrev()
HasPrev = Not(m_left Is Nothing)
End Function
Public Function PeekPrev()
Assign PeekPrev, m_left.m_value
End Function
Public Function GetPrev()
Assign GetPrev, m_left.m_value
Set m_right = m_left
Set m_left = m_left.m_prev
End Function
End Class


'-----------------------------------------------------------------------------------------------------------------------
Class LinkedList_Class
Private m_first
Private m_last
Private m_size
Private Sub Class_Initialize()
Me.Reset
End Sub
Private Sub Class_Terminate()
Me.Reset
End Sub
Public Function Clear()
Set m_first = Nothing
Set m_last = Nothing
m_size = 0
Set Clear = Me
End Function
Private Function NewNode(ByVal value)
Dim retval
Set retval = New LinkedList_Node_Class
retval.SetValue value
Set NewNode = retval
End Function
Public Sub Reset()
Set m_first = Nothing
Set m_last = Nothing
m_size = 0
End Sub
Public Function IsEmpty()
IsEmpty = (m_last Is Nothing)
End Function
Public Property Get Count
Count = m_size
End Property
'I just like .Size better than .Count sometimes, sue me
Public Property Get Size
Size = m_size
End Property
Public Function Iterator()
Dim retval
Set retval = New Iterator_LinkedList_Class
retval.Initialize m_first
Set Iterator = retval
End Function
Public Function Push(ByVal value)
Dim temp
Set temp = NewNode(value)
If Me.IsEmpty Then
Set m_first = temp
Set m_last = temp
Else
Set temp.m_prev = m_last
Set m_last.m_next = temp
Set m_last = temp
End If
m_size = m_size + 1
Set Push = Me
End Function


Public Function Peek()
' TODO: Error handling
Assign Peek, m_last.m_value
End Function

' Alias for Peek
Public Function Back()
' TODO: Error handling
Assign Back, m_last.m_value
End Function
Public Function Pop()
Dim temp
' TODO: Error Handling
Assign Pop, m_last.m_value

Set temp = m_last
Set m_last = temp.m_prev
Set temp.m_prev = Nothing
If m_last Is Nothing Then
Set m_first = Nothing
Else
Set m_last.m_next = Nothing
End If
m_size = m_size - 1
End Function



Public Function Unshift(ByVal value)
Dim temp
Set temp = NewNode(value)
If Me.IsEmpty Then
Set m_first = temp
Set m_last = temp
Else
Set temp.m_next = m_first
Set m_first.m_prev = temp
Set m_first = temp
End If
m_size = m_size + 1
Set Unshift = Me
End Function



' Alias for Peek
Public Function Front()
' TODO: Error handling
Assign Front, m_first.m_value
End Function
Public Function Shift()
Dim temp
' TODO: Error Handling
Assign Shift, m_first.m_value

Set temp = m_first
Set m_first = temp.m_next
Set temp.m_next = Nothing
If m_first Is Nothing Then
Set m_last = Nothing
Else
Set m_first.m_prev = Nothing
End If
m_size = m_size - 1
End Function

Public Function TO_Array()
Dim i, iter
ReDim retval(Me.Count - 1)
i = 0
Set iter = Me.Iterator
While iter.HasNext
retval(i) = iter.GetNext
i = i + 1
Wend
TO_Array = retval
End Function
Public Function TO_En()
Set TO_En = En_Iterator(Iterator)
End Function

End Class




'=======================================================================================================================
' Dynamic Array - From the Tolerable lib
'=======================================================================================================================
Class DynamicArray_Class
Private m_data
Private m_size
Public Sub Initialize(ByVal d, ByVal s)
m_data = d
m_size = s
End Sub
Private Sub Class_Terminate()
Set m_data = Nothing
End Sub
Public Property Get Capacity
Capacity = UBOUND(m_data) + 1
End Property
Public Property Get Count
Count = m_size
End Property
' Alias for Count
Public Property Get Size
Size = m_size
End Property
Public Function IsEmpty()
IsEmpty = (m_size = 0)
End Function
Public Function Clear()
m_size = 0
Set Clear = Me
End Function
Private Sub Grow
' TODO: There's probably a better way to
' do this. Doubling might be excessive
ReDim Preserve m_data(UBOUND(m_data) * 2)
End Sub
Public Function Push(ByVal val)
If m_size >= UBOUND(m_data) Then
Grow
End If
Assign m_data(m_size), val
m_size = m_size + 1
Set Push = Me
End Function
' Look at the last element
Public Function Peek()
Assign Peek, m_data(m_size - 1)
End Function
' Look at the last element and
' pop it off of the list
Public Function Pop()
Assign Pop, m_data(m_size - 1)
m_size = m_size - 1
End Function
' If pseudo_index < 0, then we assume we're counting
' from the back of the Array.
Private Function CalculateIndex(ByVal pseudo_index)
If pseudo_index >= 0 Then
CalculateIndex = pseudo_index
Else
CalculateIndex = m_size + pseudo_index
End If
End Function
Public Default Function Item(ByVal i)
Assign Item, m_data(CalculateIndex(i))
End Function
' This does not treat negative indices as wrap-around.
' Thus, it is slightly faster.
Public Function FastItem(ByVal i)
Assign FastItem, m_data(i)
End Function


Public Function Slice(ByVal s, ByVal e)
s = CalculateIndex(s)
e = CalculateIndex(e)
If e < s Then
Set Slice = DynamicArray()
Else
ReDim retval(e - s)
Dim i, j
j = 0
For i = s to e
Assign retval(j), m_data(i)
j = j + 1
Next
Set Slice = DynamicArray1(retval)
End If
End Function
Public Function Iterator()
Dim retval
Set retval = New Iterator_DynamicArray_Class
retval.Initialize Me
Set Iterator = retval
End Function
Public Function TO_En()
Set TO_En = En_Iterator(Me.Iterator)
End Function
Public Function TO_Array()
Dim i
ReDim retval(m_size - 1)
For i = 0 to UBOUND(retval)
Assign retval(i), m_data(i)
Next
TO_Array = retval
End Function

End Class


Public Function DynamicArray()
ReDim data(3)
Set DynamicArray = DynamicArray2(data, 0)
End Function

Public Function DynamicArray1(ByVal data)
Set DynamicArray1 = DynamicArray2(data, UBOUND(data) + 1)
End Function

Private Function DynamicArray2(ByVal data, ByVal size)
Dim retval
Set retval = New DynamicArray_Class
retval.Initialize data, size
Set DynamicArray2 = retval
End Function


Class Iterator_DynamicArray_Class
Private m_dynamic_array
Private m_index
Public Sub Initialize(ByVal dynamic_array)
Set m_dynamic_array = dynamic_array
m_index = 0
End Sub
Private Sub Class_Terminate
Set m_dynamic_array = Nothing
End Sub
Public Function HasNext()
HasNext = (m_index < m_dynamic_array.Size)
End Function
Public Function PeekNext()
Assign PeekNext, m_dynamic_array.FastItem(m_index)
End Function
Public Function GetNext()
Assign GetNext, m_dynamic_array.FastItem(m_index)
m_index = m_index + 1
End Function
Public Function HasPrev()
HasPrev = (m_index > 0)
End Function
Public Function PeekPrev()
Assign PeekPrev, m_dynamic_array.FastItem(m_index - 1)
End Function
Public Function GetPrev()
Assign GetPrev, m_dynamic_array.FastItem(m_index - 1)
m_index = m_index - 1
End Function
End Class



'=======================================================================================================================
' Other Iterators
'=======================================================================================================================
'!!! EXPERIMENTAL !!! May not be very useful, oh well...
Class Iterator_Recordset_Class
Private m_rs
Private m_record_count
Private m_current_index
Private m_field_names 'cached array
Public Sub Initialize(ByVal rs)
Set m_rs = rs
m_rs.MoveFirst
m_rs.MovePrevious
m_record_count = rs.RecordCount
m_current_index = 0
'cache field names
m_field_names = array()
redim m_field_names(m_rs.Fields.Count)
dim field
dim i : i = 0
for each field in m_rs.Fields
m_field_names(i) = field.Name
next
End Sub
Private Sub Class_Terminate
Set m_rs = Nothing
End Sub
Public Function HasNext()
HasNext = (m_current_index < m_record_count)
put "m_current_index := " & m_current_index
put "m_record_count := " & m_record_count
End Function
Public Function PeekNext
if HasNext then
m_rs.MoveNext
Assign PeekNext, GetPairs
m_rs.MovePrevious
else
set PeekNext = Nothing
end if
End Function
Private Function GetPairs
End Function
Public Function GetNext
if m_current_index < m_record_count then
Assign GetNext, m_rs
m_rs.MoveNext
m_current_index = m_current_index + 1
else
set GetNext = Nothing
end if
End Function
Public Function HasPrev()
if m_rs.BOF then
HasPrev = false
else
m_rs.MovePrevious
HasPrev = Choice(m_rs.BOF, false, true)
m_rs.MoveNext
end if
End Function
Public Function PeekPrev
m_rs.MovePrevious
if m_rs.BOF then
set PeekPrev = Nothing
else
Assign PeekPrev, m_rs
end if
m_rs.MoveNext
End Function
Public Function GetPrev
m_rs.MovePrevious
if m_rs.BOF then
set GetPrev = Nothing
else
Assign GetPrev, m_rs
end if
End Function
End Class


Class Iterator_Dictionary_Class
Private m_dic
Private m_keys 'array
Private m_idx 'current array index
Private m_keys_ubound 'cached ubound(m_keys)
Public Sub Initialize(ByVal dic)
set m_dic = dic
m_keys = m_dic.Keys()
m_idx = -1
m_keys_ubound = ubound(m_keys)
End Sub
Private Sub Class_Terminate
set m_dic = Nothing
End Sub
Public Function HasNext()
HasNext = (m_idx < m_keys_ubound)
End Function
Public Function PeekNext()
Assign PeekNext, m_dic(m_keys(m_idx + 1))
End Function
Public Function GetNext()
Assign GetNext, m_dic(m_keys(m_idx + 1))
m_idx = m_idx + 1
End Function
Public Function HasPrev()
HasPrev = (m_idx > 0)
End Function
Public Function PeekPrev()
Assign PeekPrev, m_dic(m_keys(m_idx - 1))
End Function
Public Function GetPrev()
Assign GetPrev, m_dic(m_keys(m_idx - 1))
m_idx = m_idx - 1
End Function
End Class


'=======================================================================================================================
' Iterator Factory
'=======================================================================================================================
'Returns the appropriate iterator for the passed-in collection. Errors if unknown collection.
Function IteratorFor(col)
dim result
select case typename(col)
case "LinkedList_Class" : set result = new Iterator_LinkedList_Class
case "Dictionary" : set result = new Iterator_Dictionary_Class
case "Recordset" : set result = new Iterator_Recordset_Class
end select
result.Initialize col
set IteratorFor = result
End Function
%>

+ 95
- 0
MVC/lib.Data.asp Переглянути файл

@@ -0,0 +1,95 @@
<%
Class Database_Class
Private m_connection
Private m_connection_string
Private m_trace_enabled
Public Sub set_trace(bool) : m_trace_enabled = bool : End Sub
Public Property Get is_trace_enabled : is_trace_enabled = m_trace_enabled : End Property
'---------------------------------------------------------------------------------------------------------------------
Public Sub Initialize(connection_string)
m_connection_string = connection_string
End Sub

'---------------------------------------------------------------------------------------------------------------------
Public Function Query(sql, params)
dim cmd : set cmd = server.createobject("adodb.command")
set cmd.ActiveConnection = Connection
cmd.CommandText = sql
dim rs
If IsArray(params) then
set rs = cmd.Execute(, params)
ElseIf Not IsEmpty(params) then ' one parameter
set rs = cmd.Execute(, Array(params))
Else
set rs = cmd.Execute()
End If
set Query = rs
End Function
'---------------------------------------------------------------------------------------------------------------------
Public Function PagedQuery(sql, params, per_page, page_num)
dim cmd : set cmd = server.createobject("adodb.command")
set cmd.ActiveConnection = Connection
cmd.CommandText = sql
cmd.CommandType = 1 'adCmdText
cmd.ActiveConnection.CursorLocation = 3 'adUseClient
dim rs
If IsArray(params) then
set rs = cmd.Execute(, params)
ElseIf Not IsEmpty(params) then ' one parameter
set rs = cmd.Execute(, Array(params))
Else
set rs = cmd.Execute()
End If
If Not rs.EOF then
rs.PageSize = 1
rs.CacheSize = 1
rs.AbsolutePage = 1
End If
set PagedQuery = rs
End Function
'---------------------------------------------------------------------------------------------------------------------
Public Sub [Execute](sql, params)
me.query sql, params
End Sub
'---------------------------------------------------------------------------------------------------------------------
Public Sub BeginTransaction
Connection.BeginTrans
End Sub
Public Sub RollbackTransaction
Connection.RollbackTrans
End Sub
Public Sub CommitTransaction
Connection.CommitTrans
End Sub
'---------------------------------------------------------------------------------------------------------------------
' Private Methods
'---------------------------------------------------------------------------------------------------------------------
Private Sub Class_terminate
Destroy m_connection
End Sub
Private Function Connection
if not isobject(m_connection) then
set m_connection = Server.CreateObject("adodb.connection")
m_connection.open m_connection_string
end if
set Connection = m_connection
End Function
end Class
%>

+ 202
- 0
MVC/lib.Enumerable.asp Переглянути файл

@@ -0,0 +1,202 @@
<%
Class EnumerableHelper_Class
Private m_list

Public Sub Init(list)
set m_list = list
End Sub

Public Sub Class_Terminate
set m_list = Nothing
End Sub

Public Default Function Data()
set Data = m_list
End Function


'---------------------------------------------------------------------------------------------------------------------
' Convenience wrappers
'---------------------------------------------------------------------------------------------------------------------
Public Function Count()
Count = m_list.Count()
End Function

Public Function First()
Assign First, m_list.Front()
End Function

Public Function Last()
Assign Last, m_list.Back()
End Function

'---------------------------------------------------------------------------------------------------------------------
' Methods that return a single value
'---------------------------------------------------------------------------------------------------------------------

'true if all elements of the list satisfy the condition
Public Function All(condition)
dim item_, all_matched : all_matched = true
dim it : set it = m_list.Iterator
Do While it.HasNext
Assign item_, it.GetNext()
If "String" = typename(condition) then
If Not eval(condition) then
all_matched = false
End If
Else
If Not condition(item_) then
all_matched = false
End If
End If
If Not all_matched then Exit Do
Loop
All = all_matched
End Function

'true if any element of the list satisfies the condition
Public Function Any(condition)
Any = Not All("Not " & condition)
End Function
Public Function Max(expr)
dim V_, item_, maxval
dim it : set it = m_list.Iterator
If "String" = typename(expr) then
While it.HasNext
Assign item_, it.GetNext()
Assign V_, eval(expr)
If V_ > maxval then maxval = V_
Wend
Else
While it.HasNext
Assign item_, it.GetNext()
Assign V_, expr(item_)
If V_ > maxval then maxval = V_
Wend
End If
Max = maxval
End Function

Public Function Min(expr)
dim V_, item_, minval
dim it : set it = m_list.Iterator
If "String" = typename(expr) then
While it.HasNext
Assign item_, it.GetNext()
If IsEmpty(minval) then ' empty is always less than everything so set it on first pass
Assign minval, item_
End If
Assign V_, eval(expr)
If V_ < minval then minval = V_
Wend
Else
While it.HasNext
Assign item_, it.GetNext()
If IsEmpty(minval) then
Assign minval, item_
End If
V_ = expr(item_)
If V_ < minval then minval = V_
Wend
End If
Min = minval
End Function

Public Function Sum(expr)
dim V_, item_
dim it : set it = m_list.Iterator
While it.HasNext
Assign item_, it.GetNext()
execute "V_ = V_ + " & expr
Wend
Sum = V_
End Function


'---------------------------------------------------------------------------------------------------------------------
' Methods that return a new instance of this class
'---------------------------------------------------------------------------------------------------------------------

'returns a list that results from running lambda_or_proc once for every element in the list
Public Function Map(lambda_or_proc)
dim list2 : set list2 = new LinkedList_Class
dim it : set it = m_list.Iterator
dim item_
If "String" = typename(lambda_or_proc) then
dim V_
While it.HasNext
Assign item_, it.GetNext()
execute lambda_or_proc
list2.Push V_
Wend
Else
While it.HasNext
Assign item_, it.GetNext()
list2.Push lambda_or_proc(item_)
Wend
End If
set Map = Enumerable(list2)
End Function

'alias to match IEnumerable for convenience
Public Function [Select](lambda_or_proc)
set [Select] = Map(lambda_or_proc)
End Function

'returns list containing first n items
Public Function Take(n)
dim list2 : set list2 = new LinkedList_Class
dim it : set it = m_list.Iterator
dim i : i = 1
While it.HasNext And i <= n
list2.Push it.GetNext()
i = i + 1
Wend
set Take = Enumerable(list2)
End Function

'returns list containing elements as long as the condition is true, and skips the remaining elements
Public Function TakeWhile(condition)
dim list2 : set list2 = new LinkedList_Class
dim item_, V_, bln
dim it : set it = m_list.Iterator
Do While it.HasNext
Assign item_, it.GetNext()
If "String" = typename(condition) then
'execute condition
If Not eval(condition) then Exit Do
Else
If Not condition(item_) then Exit Do
End If
list2.Push item_
Loop
set TakeWhile = Enumerable(list2)
End Function
'returns a list containing only elements that satisfy the condition
Public Function Where(condition)
dim list2 : set list2 = new LinkedList_Class
dim it : set it = m_list.Iterator
dim item_
While it.HasNext
Assign item_, it.GetNext()
If "String" = typename(condition) then
If eval(condition) then list2.Push item_
Else
If condition(item_) then list2.Push item_
End If
Wend
set Where = Enumerable(list2)
End Function

End Class


Function Enumerable(list)
dim E : set E = new EnumerableHelper_Class
E.Init list
set Enumerable = E
End Function
%>

+ 118
- 0
MVC/lib.Flash.asp Переглянути файл

@@ -0,0 +1,118 @@
<%
'=======================================================================================================================
' Flash Message Class
'=======================================================================================================================
Class Flash_Class
Private m_errors_key
Private m_success_key

Private Sub Class_Initialize
m_errors_key = "mvc.flash.errors_array"
m_success_key = "mvc.flash.success_message"
End Sub
'helper methods to avoid if..then statements in views
Public Sub ShowErrorsIfPresent
if HasErrors then ShowErrors
End Sub
Public Sub ShowSuccessIfPresent
if HasSuccess then ShowSuccess
End Sub

'---------------------------------------------------------------------------------------------------------------------
' Errors
'---------------------------------------------------------------------------------------------------------------------
Public Property Get HasErrors
HasErrors = (Not IsEmpty(Session(m_errors_key)))
End Property

Public Property Get Errors
Errors = Session(m_errors_key)
End Property
Public Property Let Errors(ary)
Session(m_errors_key) = ary
End Property
Public Sub AddError(msg)
dim ary
if IsEmpty(Session(m_errors_key)) then
ary = Array()
redim ary(-1)
else
ary = Session(m_errors_key)
end if
redim preserve ary(ubound(ary) + 1)
ary(ubound(ary)) = msg
Session(m_errors_key) = ary
End Sub
'Public Sub ShowErrors
' ClearErrors
'End Sub
Public Sub ShowErrors
if HasErrors then
%>
<div class="alert alert-error">
<button type="button" class="close" data-dismiss="alert">&times;</button>
<h4>Error!</h4>
<ul>
<%
dim ary, i
ary = Errors
for i = 0 to ubound(ary)
put "<li>"
put H(ary(i))
put "</li>"
next
%>
</ul>
</div>
<%
ClearErrors
end if
End Sub
Public Sub ClearErrors
Session.Contents.Remove(m_errors_key)
End Sub
'---------------------------------------------------------------------------------------------------------------------
' Success
'---------------------------------------------------------------------------------------------------------------------
Public Property Get HasSuccess
HasSuccess = (Not IsEmpty(Session(m_success_key)))
End Property
Public Property Get Success
Success = Session(m_success_key)
End Property
Public Property Let Success(msg)
Session(m_success_key) = msg
End Property
Public Sub ShowSuccess
if HasSuccess then
%>
<div class="alert alert-success">
<button type="button" class="close" data-dismiss="alert">&times;</button>
<%= H(Success) %>
</div>
<%
ClearSuccess
end if
End Sub
Public Sub ClearSuccess
Session.Contents.Remove(m_success_key)
End Sub
End Class

Function Flash()
set Flash = new Flash_Class
End Function
%>

+ 67
- 0
MVC/lib.FormCache.asp Переглянути файл

@@ -0,0 +1,67 @@
<%
Class FormCache_Class
'given a form name and IRequestDictionary params (request.form) object, caches form values
Public Sub SerializeForm(form_name, params)
dim form_key, form_val, serialized_key
For Each form_key in params
form_val = params(form_key)
serialized_key = CachedFormKeyName(form_name, form_key)
'put "serialize<br>"
'put "--form_key := " & form_key & "<br>"
'put "--form_val := " & form_val & "<br>"
'put "--serialized_key := " & serialized_key & "<br>"
Session(serialized_key) = form_val
Next
End Sub
'given a form name, returns a dict with the form's stored values
Public Function DeserializeForm(form_name)
dim dict : set dict = Nothing
dim serialized_key, serialized_val, form_key, form_val
For Each serialized_key in Session.Contents
'put "serialized_key: " & serialized_key & "<br>"
If InStr(serialized_key, "mvc.form." & form_name) > 0 then
'put "--match" & "<br>"
If dict Is Nothing then
set dict = Server.CreateObject("Scripting.Dictionary")
'put "dict created<br>"
End If
form_val = Session(serialized_key)
form_key = Replace(serialized_key, "mvc.form." & form_name & ".", "")
dict(form_key) = form_val
'Session.Contents.Remove serialized_key
'put "--serialized_val: " & serialized_val & "<br>"
'put "--form_val: " & form_val & "<br>"
End If
Next
set DeserializeForm = dict
End Function
'given a form name, clears the keys for that form
Public Sub ClearForm(form_name)
dim key
For Each key in Session.Contents
If InStr(key, CachedFormKeyName(form_name, key)) > 0 then
Session.Contents.Remove key
End If
Next
End Sub
Private Function CachedFormKeyName(form_name, key)
CachedFormKeyName = "mvc.form." & form_name & "." & key
End Function
End Class


dim FormCache__Singleton
Function FormCache()
if IsEmpty(FormCache__Singleton) then
set FormCache__Singleton = new FormCache_Class
end if
set FormCache = FormCache__Singleton
End Function
%>

+ 260
- 0
MVC/lib.HTML.asp Переглянути файл

@@ -0,0 +1,260 @@
<%
'=======================================================================================================================
' HTML HELPER
'=======================================================================================================================
Class HTML_Helper_Class
'Duplicate of Routes.NoCacheToken, copied to avoid extra lookup into the Routes object for such a trivial function.
'Allows caller to reference HTML.NoCacheToken in cases where it seems to feel right.
Public Property Get NoCacheToken
NoCacheToken = Timer() * 100
End Property
'Ensures safe output
Public Function Encode(ByVal value)
If Not IsEmpty(value) and Not IsNull(value) then
Encode = Server.HtmlEncode(value)
End If
End Function

'---------------------------------------------------------------------------------------------------------------------
'LinkTo and its relatives DO NOT HTMLEncode the link_text! This allows use of HTML within the link, especially
'useful for Bootstrap icons and the like.
'
'Bottom Line: If you need to HTMLEncode the link text YOU MUST DO IT YOURSELF! The H() method makes this easy!
Public Function LinkTo(link_text, controller_name, action_name)
LinkTo = LinkToExt(link_text, controller_name, action_name, empty, empty)
End Function

Public Function LinkToExt(link_text, controller_name, action_name, params_array, attribs_array)
LinkToExt = "<a href='" & Encode(Routes.UrlTo(controller_name, action_name, params_array)) & "'" &_
HtmlAttribs(attribs_array) & ">" & link_text & "</a>" & vbCR
End Function
Public Function LinkToIf(condition, link_text, controller_name, action_name)
if condition then
LinkToIf = LinkToExt(link_text, controller_name, action_name, empty, empty)
end if
End Function
Public Function LinkToExtIf(condition, link_text, controller_name, action_name, params_array, attribs_array)
if condition then
LinkToExtIf = LinkToExt(link_text, controller_name, action_name, params_array, attribs_array)
end if
End Function
Public Function LinkToUnless(condition, link_text, controller_name, action_name)
if not condition then
LinkToIf = LinkToExt(link_text, controller_name, action_name, empty, empty)
end if
End Function
Public Function LinkToExtUnless(condition, link_text, controller_name, action_name, params_array, attribs_array)
if not condition then
LinkToExtUnless = LinkToExt(link_text, controller_name, action_name, params_array, attribs_array)
end if
End Function
''
' Creates a form button and a hidden form to enforce POST submissions. Params are in hidden fields.
''
'Public Function PostButtonLinkTo(controller_name, action_name, params)
' dim id : id = "post_button__" & controller_name & action_name
' dim s
' s = "<form id='" & id & "' action='" & Routes.UrlTo(controller_name, action_name, empty) & "' method='POST'>"
' dim i, key, val
' for i = 0 to ubound(params) step 2
' KeyVal params, i, key, val
' s = s & "<input type='hidden' name='" & key & "' value='" & val & "'>"
' next
' s = s & "<input type='submit' value='&gt;&gt;'>"
' s = s & "</form>"
' PostButtonLinkTo = s
'End Function
Public Function PostButtonTo(button_contents, controller_name, action_name, form_fields)
PostButtonTo = PostButtonToExt(button_contents, controller_name, action_name, form_fields, empty)
End Function
Public Function PostButtonToExt(button_contents, controller_name, action_name, form_fields, url_params)
dim s : s = "<form action='" & Routes.UrlTo(controller_name, action_name, url_params) & "' method='POST' style='margin: 0;'>"
dim i, key, val
for i = 0 to ubound(form_fields) step 2
KeyVal form_fields, i, key, val
s = s & HTML.Hidden(key, val)
next
s = s & HTML.SubmitButton(button_contents)
s = s & "</form>" & vbCR
PostButtonToExt = s
End Function
Public Function AppStylesheetTag
AppStylesheetTag = StylesheetTag(Routes.StylesheetsURL & "App.css")
End Function
Public Function ControllerStylesheetTag
ControllerStylesheetTag = StylesheetTag(Routes.StylesheetsUrl & MVC.ControllerName & "Controller.css")
End Function
Public Function StylesheetTag(url)
StylesheetTag = "<link rel='stylesheet' href='" & Encode(url) & "?" & Year(now) & Month(now) & Day(now) & Hour(now) & Minute(now) & Second(now) & "'>" & vbCR
End Function
Public Function JSTag(url)
JSTag = "<script type='text/javascript' src='" & Encode(url) & "'></script>" & vbCR
End Function
'---------------------------------------------------------------------------------------------------------------------
' Form Helpers
'---------------------------------------------------------------------------------------------------------------------
Public Function FormTag(controller_name, action_name, route_attribs, form_attribs)
FormTag = "<form action='" & Routes.UrlTo(controller_name, action_name, route_attribs) & "' method='POST' " & HtmlAttribs(form_attribs) & ">" & vbCR
End Function
Public Function Label(name, for_name)
Label = LabelExt(name, for_name, empty)
End Function
Public Function LabelExt(name, for_name, attribs)
LabelExt = "<label for='" & Encode(for_name) & "' " & HtmlAttribs(attribs) & ">" & Encode(name) & "</label>" & vbCR
End Function
Public Function Hidden(id, value)
Hidden = HiddenExt(id, value, empty)
End Function
Public Function HiddenExt(id, value, attribs)
HiddenExt = "<input type='hidden' id='" & Encode(id) & "' name='" & Encode(id) & "' value='" & Encode(value) & "' " & HtmlAttribs(attribs) & " >" & vbCR
End Function
Public Function TextBox(id, value)
TextBox = TextBoxExt(id, value, empty)
End Function
Public Function TextBoxExt(id, value, attribs)
TextBoxExt = "<input type='text' id='" & Encode(id) & "' name='" & Encode(id) & "' value='" & Encode(value) & "' " & HtmlAttribs(attribs) & " >" & vbCR
End Function
Public Function TextArea(id, value, rows, cols)
TextArea = TextAreaExt(id, value, rows, cols, empty)
End Function
Public Function TextAreaExt(id, value, rows, cols, attribs)
TextAreaExt = "<textarea id='" & Encode(id) & "' name='" & Encode(id) & "' cols='" & Encode(cols) & "' rows='" & Encode(rows) & "' " & HtmlAttribs(attribs) & " >" &_
Encode(value) & "</textarea>" & vbCR
End Function
'---------------------------------------------------------------------------------------------------------------------
'If list is a recordset then option_value_field and option_text_field are required.
'If list is an array the method assumes it is a KVArray and those parameters are ignored.
Public Function DropDownList(id, selected_value, list, option_value_field, option_text_field)
DropDownList = DropDownListExt(id, selected_value, list, option_value_field, option_text_field, empty)
End Function
Public Function DropDownListExt(id, selected_value, list, option_value_field, option_text_field, attribs)
If IsNull(selected_value) then
selected_value = ""
Else
selected_value = CStr(selected_value)
End If
dim item, options, opt_val, opt_txt
options = "<option value=''>" ' first value is "non-selected" blank state
select case typename(list)
case "Recordset"
do until list.EOF
If IsNull(list(option_value_field)) then
opt_val = ""
Else
opt_val = CStr(list(option_value_field))
End If
opt_txt = list(option_text_field)
If Not IsNull(opt_val) And Not IsEmpty(opt_val) then
options = options & "<option value='" & Encode(opt_val) & "' " & Choice((CStr(opt_val) = CStr(selected_value)), "selected='selected'", "") & ">" & Encode(opt_txt) & "</option>" & vbCR
End If
list.MoveNext
loop
case "Variant()" 'assumes KVArray
dim i
for i = 0 to ubound(list) step 2
KeyVal list, i, opt_val, opt_txt
options = options & "<option value='" & Encode(opt_val) & "' " & Choice((CStr(opt_val) = CStr(selected_value)), "selected='selected'", "") & ">" & Encode(opt_txt) & "</option>" & vbCR
next
end select
DropDownListExt = "<select id='" & Encode(id) & "' name='" & Encode(id) & "' " & HtmlAttribs(attribs) & " >" & vbCR & options & "</select>" & vbCR
End Function
Public Function Checkbox(id, value)
Checkbox = CheckboxExt(id, value, empty)
End Function
Public Function CheckboxExt(id, value, attribs)
CheckBoxExt = "<input type='checkbox' id='" & Encode(id) & "' name='" & Encode(id) & "' " & Choice( (value = 1) or (value = true) or (LCase(value) = "true") or (LCase(value) = "on"), "checked='checked'", "") & " " & HtmlAttribs(attribs) & ">" & vbCR
End Function
'---------------------------------------------------------------------------------------------------------------------
'Button text IS NOT ENCODED! As with LinkTo, this allows use of Bootstrap icons and other arbitrary HTML in the
'button. If you need to HTMLEncode the text you MUST do it yourself!
Public Function SubmitButton(text)
SubmitButton = "<button type='submit' class='btn'>" & text & "</button>" & vbCR
End Function
Public Function Button(button_type, text, class_name)
Button = "<button type='" & Encode(button_type) & "' class='btn " & Encode(class_name) & "'>" & text & "</button>" & vbCR
End Function
Public Function ButtonExt(button_type, text, attribs_array)
ButtonExt = "<button type='" & Encode(button_type) & "' " & HtmlAttribs(attribs_array) & ">" & text & "</button>" & vbCR
End Function
'---------------------------------------------------------------------------------------------------------------------
Public Function Tag(Tag_name, attribs_array)
Tag = "<" & Encode(tag_name) & " " & HtmlAttribs(attribs_array) & ">"
End Function
Public Function Tag_(Tag_name)
Tag_ = "</" & Encode(tag_name) & ">"
End Function
'---------------------------------------------------------------------------------------------------------------------
Public Function HtmlAttribs(attribs)
dim result : result = ""
if not IsEmpty(attribs) then
if IsArray(attribs) then
dim idx
for idx = lbound(attribs) to ubound(attribs) step 2
result = result & " " & HtmlAttrib(attribs, idx) & " "
next
else ' assume string or string-like default value
result = attribs
end if
end if
HtmlAttribs = result
End Function
Public Function HtmlAttrib(attribs_array, key_idx)
dim key, val
KeyVal attribs_array, key_idx, key, val
HtmlAttrib = Encode(key) & "='" & Encode(val) & "'"
End Function
End Class


dim HTML_Helper__Singleton : set HTML_Helper__Singleton = Nothing
Function HTML()
if HTML_Helper__Singleton Is Nothing then
set HTML_Helper__Singleton = new HTML_Helper_Class
End if
set HTML = HTML_Helper__Singleton
End Function




%>

+ 77
- 0
MVC/lib.HTMLSecurity.asp Переглянути файл

@@ -0,0 +1,77 @@
<%
'=======================================================================================================================
' HTML SECURITY HELPER
'=======================================================================================================================
Class HTML_Security_Helper_Class

'---------------------------------------------------------------------------------------------------------------------
'Uses Scriptlet.TypeLib to generate a GUID. There may be a better/faster way than this to generate a nonce.
Public Function Nonce()
dim TL : set TL = CreateObject("Scriptlet.TypeLib")
Nonce = Left(CStr(TL.Guid), 38) 'avoids issue w/ strings appended after this token not being displayed on screen, MSFT bug
set TL = Nothing
End Function
'---------------------------------------------------------------------------------------------------------------------
'Name is probably the combined ControllerName and ActionName of the form generator by convention
Public Sub SetAntiCSRFToken(name)
Session(name & ".anti_csrf_token") = Nonce()
End Sub
'---------------------------------------------------------------------------------------------------------------------
'Returns the CSRF token nonce from the session corresponding to the passed name
Public Function GetAntiCSRFToken(name)
dim token : token = Session(name & ".anti_csrf_token")
If Len(token) = 0 then
SetAntiCSRFToken name
End If
GetAntiCSRFToken = token
End Function
'---------------------------------------------------------------------------------------------------------------------
'Removes the current CSRF token nonce for the passed name
Public Sub ClearAntiCSRFToken(name)
Session.Contents.Remove(name & ".anti_csrf_token")
End Sub
'---------------------------------------------------------------------------------------------------------------------
'Returns true if passed nonce matches the stored CSRF token nonce for the specified name, false if not
Public Function IsValidAntiCSRFToken(name, nonce)
IsValidAntiCSRFToken = (GetAntiCSRFToken(name) = nonce)
End Function
'---------------------------------------------------------------------------------------------------------------------
'If an invalid CSRF nonce is passed, sets the flash and redirects using the appropriate MVC.Redirect* method.
'If a valid CSRF nonce is passed, clears it from the cache to reset the state to the beginning.
Public Sub OnInvalidAntiCSRFTokenRedirectToAction(token_name, token, action_name)
OnInvalidAntiCSRFTokenRedirectToExt token_name, token, MVC.ControllerName, action_name, empty
End Sub
Public Sub OnInvalidAntiCSRFTokenRedirectToActionExt(token_name, token, action_name, params)
OnInvalidAntiCSRFTokenRedirectToExt token_name, token, MVC.ControllerName, action_name, params
End Sub
Public Sub OnInvalidAntiCSRFTokenRedirectTo(token_name, token, controller_name, action_name)
OnInvalidAntiCSRFTokenRedirectToExt token_name, token, controller_name, action_name
End Sub
Public Sub OnInvalidAntiCSRFTokenRedirectToExt(token_name, token, controller_name, action_name, params)
If IsValidAntiCSRFToken(token_name, token) then
ClearAntiCSRFToken token_name
Else
ClearAntiCSRFToken token_name
Flash.AddError "Invalid form state. Please try again."
MVC.RedirectToExt controller_name, action_name, params
End If
End Sub
End Class


dim HTML_Security_Helper__Singleton
Function HTMLSecurity()
If IsEmpty(HTML_Security_Helper__Singleton) Then
set HTML_Security_Helper__Singleton = new HTML_Security_Helper_Class
End If
set HTMLSecurity = HTML_Security_Helper__Singleton
End Function
%>

+ 361
- 0
MVC/lib.Helpers.asp Переглянути файл

@@ -0,0 +1,361 @@
<%
'=======================================================================================================================
' IO Helpers
'=======================================================================================================================
Sub put(v)
Select Case typename(v)
Case "LinkedList_Class" : response.write join(v.TO_Array, ", ")
Case "DynamicArray_Class" : response.write JoinList(v)
Case "Variant()" : response.write join(v, ", ")
Case else : response.write v
End Select
End Sub

Sub put_
put "<br>"
End Sub

Sub putl(v)
put v
put_
End Sub

'accepts anything that can have an iterator, including lists, arrays, and recordsets
Sub putlist(col, prefix, suffix)
dim it : set it = IteratorFor(col)
Do While it.HasNext
put prefix & it.GetNext & suffix
Loop
End Sub

'same as join() for arrays, but for any arbitrary collection
Function JoinList(col)
dim s : s = ""
dim it : set it = IteratorFor(col)
Do While it.HasNext
s = s & ", "
Loop
JoinList = Left(s, Len(s) - 2)
End Function

'---------------------------------------------------------------------------------------------------------------------
'Wrapper for Server.HTMLEncode() -- makes it easier on the eyes when reading the HTML code
Function H(s)
If Not IsEmpty(s) and Not IsNull(s) then
H = Server.HTMLEncode(s)
Else
H = ""
End If
End Function

'-----------------------------------------------------------------------------------------------------------------------
'allows tracing of output on demand without interfering with layout
Sub trace(s)
comment s
End Sub

'-----------------------------------------------------------------------------------------------------------------------
'outputs an HTML comment, useful for tracing etc
Sub Comment(text)
response.write vbcrlf & vbcrlf & "<!--" & vbcrlf & H(text) & vbcrlf & "-->" & vbcrlf & vbcrlf
End Sub

'-----------------------------------------------------------------------------------------------------------------------
'pseudo-design-by-contract capability, allows strong-typing of methods and views
Sub ExpectType(obj_type, obj)
if typename(obj) <> obj_type then Err.Raise 1, "lib.Helpers:ExpectType", "View expected object of type '" & obj_type & "' but received type '" & typename(obj) & "'."
End Sub


'=======================================================================================================================
' Dump* functions for dumping variables, objects, lists, etc for debugging purposes
'=======================================================================================================================
Class DataDumper_Class
Public Sub Dump(V)
put "<pre>"
DumpIt V
put "</pre>"
End Sub
Private m_indent
Private Sub Indent
m_indent = m_indent + 1
'putl "INDENT: " & m_indent
'puti m_indent
'put_
End Sub
Private Sub Dedent
m_indent = m_indent - 1
'putl "INDENT: " & m_indent
End Sub
Private Sub Class_Initialize
m_indent = -1 'first indent takes it to 0
End Sub
'prepends indents
Private Sub puti(v)
put Spaces(m_indent) & v
End Sub
Private Sub DumpIt(V)
If Typename(V) = "LinkedList_Class" then
DumpList V
ElseIf Instr(Typename(V), "_Class") > 0 then
DumpClass V
ElseIf Typename(V) = "Variant()" then
DumpArray V
ElseIf Typename(V) = "Recordset" then
DumpRecordset V
Else
put "&laquo;" & H(V) & "&raquo;"
End If
End Sub

Private Sub DumpList(V)
Indent
dim it : set it = V.Iterator
dim item
dim i : i = 1
put_
puti "[List:" & vbCR
While it.HasNext
Indent
set item = it.GetNext()
puti i & " => "
DumpIt item
put_
Dedent
i = i + 1
Wend
puti "]"
Dedent
End Sub
Private Sub DumpArray(V)
Indent
dim i
put_
puti "[Array:" & vbCR
Indent
For i = 0 to UBound(V)
puti i & " => "
DumpIt V(i)
put_
Next
Dedent
puti "]"
Dedent
End Sub
Private Sub DumpClass(C)
Indent
dim i
put_
puti "{" & Typename(C) & ": " & vbCR
Indent
On Error Resume Next
If Ubound(C.Class_Get_Properties) > 0 then
dim property_name, the_property
For i = 0 to UBound(C.Class_Get_Properties)
property_name = C.Class_Get_Properties(i)
Execute "Assign the_property, C." & C.Class_Get_Properties(i)
'put "property_name: " & property_name & " (" & typename(the_property) & ")" & vbCR
If typename(the_property) = "LinkedList_Class" then
puti " " & property_name & " : LinkedList_Class => "
DumpList(the_property)
ElseIf InStr(typename(the_property), "_Class") then
puti " " & property_name & " : " & typename(the_property) & " => "
DumpClass(the_property)
Else
puti " " & property_name & " : " & typename(the_property) & " => " '& Eval("C." & property_name)
DumpIt(the_property)
If i <> UBound(C.Class_Get_Properties) then put ", "
put vbCR
End If
Next
Else
End If
On Error Goto 0
Dedent
puti "}" & vbCR & vbCR
Dedent
End Sub
Sub DumpRecordset(R)
Indent
dim field
put "<table border='1' cellpadding='5' >"
put "<tr style='background-color: #333; color: white'>"
For each field in R.Fields
put "<th>" & field.Name & "</th>"
Next
put "</tr>"
Do until R.EOF
put "<tr style='background-color: white'>"
For each field in R.Fields
put "<td>" & H(R(field.Name)) & "</td>"
Next
put "</tr>"
R.MoveNext
Loop
put "</table>"
Dedent
End Sub
Private Function Spaces(num)
dim s : s = ""
dim i
For i = 1 to num
s = s & " "
Next
Spaces = s
End Function
End Class

dim DataDumper_Class__Singleton
Sub Dump(V)
If IsEmpty(DataDumper_Class__Singleton) then
set DataDumper_Class__Singleton = new DataDumper_Class
End If
DataDumper_Class__Singleton.Dump V
End Sub




'=======================================================================================================================
' Strings
'=======================================================================================================================
'Capitalizes first word of the_string, leaves rest as-is
Function Capitalize(the_string)
Capitalize = ucase(left(the_string, 1)) & mid(the_string, 2)
End Function

'-----------------------------------------------------------------------------------------------------------------------
Function Wrap(s, prefix, suffix)
Wrap = prefix & s & suffix
End Function


'=======================================================================================================================
' Logic (i.e. decisions, searches, etc)
'=======================================================================================================================

'TODO: Expand this to accept arbitrary sets, e.g. string, recordset, dictionary, list, etc.
Function Contains(data, value)
Contains = false
dim idx
select case typename(data)
case "String"
Contains = Choice(instr(data, value) > 0, true, false)
case "Variant()"
for idx = lbound(data) to ubound(data)
if value = data(idx) then
Contains = true
exit for
end if
next
case else
Err.Raise 9, "mvc.helpers#Contains", "Unexpected type 'data', received: " & typename(data)
end select
End Function

'-----------------------------------------------------------------------------------------------------------------------
'Boolean type checkers
'Don't forget IsArray is built-in!
Function IsString(value)
IsString = Choice(typename(value) = "String", true, false)
End Function

Function IsDict(value)
IsDict = Choice(typename(value) = "Dictionary", true, false)
End Function

Function IsRecordset(value)
IsRecordset = Choice(typename(value) = "Recordset", true, false)
End Function

Function IsLinkedList(value)
IsLinkedList = Choice(typename(value) = "LinkedList_Class", true, false)
End Function


'-----------------------------------------------------------------------------------------------------------------------
Sub Destroy(o)
if isobject(o) then
if not o is nothing then
on error resume next
o.close
on error goto 0
set o = nothing
end if
end if
End Sub

'-----------------------------------------------------------------------------------------------------------------------
Sub Quit
response.end
End Sub

Sub Die(msg)
put "<span style='color: #f00'>" & msg & "</span>"
Quit
End Sub

'-----------------------------------------------------------------------------------------------------------------------
Sub DumpSession
put "SESSION" & "<br>"
dim session_item
for each session_item in session.contents
put "<b>" & session_item & "</b> : " & session.contents(session_item) & "<br>"
next
End Sub



'=======================================================================================================================
' Adapted from Tolerable library
'=======================================================================================================================
' This subroutine allows us to ignore the difference
' between object and primitive assignments. This is
' essential for many parts of the engine.
Public Sub Assign(ByRef var, ByVal val)
If IsObject(val) Then
Set var = val
Else
var = val
End If
End Sub

' This is similar to the ? : operator of other languages.
' Unfortunately, both the if_true and if_false "branches"
' will be evalauted before the condition is even checked. So,
' you'll only want to use this for simple expressions.
Public Function Choice(ByVal cond, ByVal if_true, ByVal if_false)
If cond Then
Assign Choice, if_true
Else
Assign Choice, if_false
End If
End Function

' Allows single-quotes to be used in place of double-quotes.
' Basically, this is a cheap trick that can make it easier
' to specify Lambdas.
Public Function Q(ByVal input)
Q = Replace(input, "'", """")
End Function



%>

+ 168
- 0
MVC/lib.MVC.asp Переглянути файл

@@ -0,0 +1,168 @@
<%
Response.ExpiresAbsolute = "2000-01-01"
Response.AddHeader "pragma", "no-cache"
Response.AddHeader "cache-control", "private, no-cache, must-revalidate"


'=======================================================================================================================
' MVC Dispatcher
'=======================================================================================================================
Class MVC_Dispatcher_Class
Private m_controller_name
Private m_action_name
Private m_default_action_name
Private m_action_params
Private m_controller_instance
Private m_is_partial
Private Sub Class_initialize
m_default_action_name = "Index"
SetControllerActionNames
'SetActionParams
End Sub
Public Property Get ControllerName
ControllerName = m_controller_name
end Property
Public Property Get ActionName
ActionName = m_action_name
end Property
Public Property Get IsPartial
IsPartial = m_is_partial
End Property
'Public Property Get ActionParams
' if IsEmpty(m_action_params) then set m_action_params = Server.CreateObject("Scripting.Dictionary")
' set ActionParams = m_action_params
'end Property
'---------------------------------------------------------------------------------------------------------------------
' Instantiates the controller and executes the requested action on the controller.
Public Sub Dispatch
dim class_name : class_name = m_controller_name & "Controller"
'set the global controller reference
executeglobal "dim Controller : set Controller = new " & class_name
If Request.Querystring("_P").Count = 1 then ' = 1 Or Request.Querystring("_P") = "true" then
m_is_partial = true
Else
m_is_partial = false
End If
If Not IsPartial then
%>
<!--#include file="../App/Views/Shared/layout.header.asp"-->
<%
End If
ExecuteAction ActionName
If Not IsPartial then
%>
<!--#include file="../App/Views/Shared/layout.footer.asp"-->
<%
End If
End Sub
'---------------------------------------------------------------------------------------------------------------------
' Executes the requested action on the current already-instantiated controller
Private Sub ExecuteAction(action_name)
' no longer want to pass Request.Form as a parameter to actions -- allows actions to be called any way, more flexibility
Execute "Controller." & action_name
End Sub
'---------------------------------------------------------------------------------------------------------------------
' Ensures an action request comes in via HTTP POST only. Raises error if not.
Public Sub RequirePost
If Request.Form.Count = 0 Then Err.Raise 1, "MVC_Helper_Class:RequirePost", "Action only responds to POST requests."
End Sub
'---------------------------------------------------------------------------------------------------------------------
Public Sub RedirectTo(controller_name, action_name)
RedirectToExt controller_name, action_name, empty
End Sub
' Redirects the browser to the specified action on the specified controller with the specified querystring parameters.
' params is a KVArray of querystring parameters.
Public Sub RedirectToExt(controller_name, action_name, params)
Response.Redirect Routes.UrlTo(controller_name, action_name, params)
End Sub
' Shortcut for RedirectToActionExt that does not require passing a parameters argument.
Public Sub RedirectToAction(ByVal action_name)
RedirectToActionExt action_name, empty
End Sub
' Redirects the browser to the specified action in the current controller, passing the included parameters.
' params is a KVArray of querystring parameters.
Public Sub RedirectToActionExt(ByVal action_name, ByVal params)
RedirectToExt ControllerName, action_name, params
End Sub
' Redirects to the specified action using a form POST.
Public Sub RedirectToActionPOST(action_name)
RedirectToActionExtPOST action_name, empty
End Sub
' Redirects to the specified action name on the current controller using a form post
Public Sub RedirectToActionExtPOST(action_name, params)
put "<form id='mvc_redirect_to_action_post' action='" & Routes.UrlTo(ControllerName, action_name, empty) & "' method='POST'>"
put "<input type='hidden' name='mvc_redirect_to_action_post_flag' value='1'>"
if Not IsEmpty(params) then
dim i, key, val
for i = 0 to ubound(params) step 2
KeyVal params, i, key, val
put "<input type='hidden' name='" & key & "' value='" & val & "'>"
next
end if
put "</form>"
put "<script type='text/javascript'>"
put "$('#mvc_redirect_to_action_post').submit();"
put "</script>"
End Sub
'---------------------------------------------------------------------------------------------------------------------
' PRIVATE
'---------------------------------------------------------------------------------------------------------------------
Private Sub SetControllerActionNames
dim full_path : full_path = request.servervariables("path_info")
dim part_path : part_path = split(full_path, Routes.ControllersUrl)(1)
dim part_path_split : part_path_split = split(part_path, "/")
m_controller_name = part_path_split(0)
m_action_name = Choice(request("_A") <> "", request("_A"), m_default_action_name)
End Sub
' This is deprecated to avoid creating a Dictionary object with every request.
' Hasn't been used in forever anyway.
'Private Sub SetActionParams
' dim key, val
' 'set m_action_params = Server.CreateObject("scripting.dictionary")
' for each key in request.querystring
' val = request.querystring(key)
' 'ignore service keys
' if instr(1, "_A", key, 1) = 0 then
' ActionParams.add key, CStr(val)
' end if
' next
'End Sub
end Class



dim MVC_Dispatcher_Class__Singleton
Function MVC()
if IsEmpty(MVC_Dispatcher_Class__Singleton) then
set MVC_Dispatcher_Class__Singleton = new MVC_Dispatcher_Class
end if
set MVC = MVC_Dispatcher_Class__Singleton
End Function


%>

+ 84
- 0
MVC/lib.Routes.asp Переглянути файл

@@ -0,0 +1,84 @@
<%
'=======================================================================================================================
' ROUTING HELPER
'=======================================================================================================================
Class Route_Helper_Class
Public Property Get NoCacheToken
NoCacheToken = Timer() * 100
End Property

Public Sub Initialize(app_url)
m_app_url = app_url
m_content_url = m_app_url & "Content/"
m_stylesheets_url = m_content_url & "Styles/"
m_controllers_url = m_app_url & "Controllers/"
End Sub
Public Property Get AppURL
AppURL = m_app_url
end Property
Public Property Get ContentURL
ContentURL = m_content_url
end Property
Public Property Get ControllersURL
ControllersUrl = m_controllers_url
end Property
Public Property Get StylesheetsURL
StylesheetsURL = m_stylesheets_url
end Property
''
' Generates a URL to the specified controller + action combo, with querystring parameters appended if included.
'
' @param controller_name String name of the controller
' @param action_name String name of the controller action
' @param params_array KV Array key/value pair array, to be converted to &key1=val1&key2=val2&...&keyn=valn
' @returns
''
Public Function UrlTo(controller_name, action_name, params_array)
dim qs : qs = TO_Querystring(params_array)
if len(qs) > 0 then qs = "&" & qs
UrlTo = Me.ControllersURL & controller_name & "/" & controller_name & "Controller.asp?_A=" & action_name & qs & "&_NC=" & NoCacheToken
End Function
'---------------------------------------------------------------------------------------------------------------------
' PRIVATE
'---------------------------------------------------------------------------------------------------------------------
Private m_app_url
Private m_content_url
Private m_stylesheets_url
Private m_controllers_url
Private Function TO_Querystring(the_array)
dim result : result = ""
if not isempty(the_array) then
dim idx
for idx = lbound(the_array) to ubound(the_array) step 2
result = result & GetParam(the_array, idx)
'append & between parameters, but not on the last parameter
if not (idx = ubound(the_array) - 1) then result = result & "&"
next
end if
TO_Querystring = result
End Function
Private Function GetParam(params_array, key_idx)
dim key, val
KeyVal params_array, key_idx, key, val
GetParam = key & "=" & val
End Function
end class


dim Route_Helper__Singleton : set Route_Helper__Singleton = Nothing
Function Routes()
if Route_Helper__Singleton is Nothing then
set Route_Helper__Singleton = new Route_Helper_Class
end if
set Routes = Route_Helper__Singleton
End Function

%>

+ 73
- 0
MVC/lib.Strings.asp Переглянути файл

@@ -0,0 +1,73 @@
<%
'=======================================================================================================================
' StringBuilder Class
'=======================================================================================================================
Class StringBuilder_Class
dim m_array
dim m_array_size
dim m_cur_pos
Private Sub Class_Initialize
m_array = Array
m_array_size = 100
redim m_array(m_array_size)
m_cur_pos = -1
End Sub
Private Sub Extend
m_array_size = m_array_size + 100
redim preserve m_array(m_array_size)
End Sub
Public Sub Add(s)
m_cur_pos = m_cur_pos + 1
m_array(m_cur_pos) = s
if m_cur_pos = m_array_size then Extend
End Sub
Public Function [Get](delim)
'have to create a new array containing only the slots actually used, otherwise Join() happily adds delim
'for *every* slot even the unused ones...
dim new_array : new_array = Array()
redim new_array(m_cur_pos)
dim i
for i = 0 to m_cur_pos
new_array(i) = m_array(i)
next
[Get] = Join(new_array, delim)
End Function
Public Default Property Get TO_String
TO_String = Join(m_array, "")
End Property
End Class

Function StringBuilder()
set StringBuilder = new StringBuilder_Class
End Function


'=======================================================================================================================
' Misc
'=======================================================================================================================
Function Excerpt(text, length)
Excerpt = Left(text, length) & " ..."
End Function

Function IsBlank(text)
If IsObject(text) then
If text Is Nothing then
IsBlank = true
Else
IsBlank = false
End If
Else
If IsEmpty(text) or IsNull(text) or Len(text) = 0 then
IsBlank = true
Else
IsBlank = false
End If
End If
End Function

%>

+ 250
- 0
MVC/lib.Validations.asp Переглянути файл

@@ -0,0 +1,250 @@
<%
'=======================================================================================================================
' Validation Classes
'=======================================================================================================================

'-----------------------------------------------------------------------------------------------------------------------
' Exists Validation
'-----------------------------------------------------------------------------------------------------------------------
Class ExistsValidation_Class
Private m_instance
Private m_field_name
Private m_message
Private m_ok
Public Function Initialize(instance, field_name, message)
set m_instance = instance
m_field_name = field_name
m_message = message
m_ok = true
set Initialize = Me
End Function
Public Sub Check
If Len(eval("m_instance." & m_field_name)) = 0 then
m_ok = false
End If
End Sub
Public Property Get OK
OK = m_ok
End Property
Public Property Get Message
Message = m_message
End Property
End Class

Sub ValidateExists(instance, field_name, message)
if not IsObject(instance.Validator) then set instance.Validator = new Validator_Class
instance.Validator.AddValidation new ExistsValidation_Class.Initialize(instance, field_name, message)
End Sub


'-----------------------------------------------------------------------------------------------------------------------
' Minimum Length Validation
'-----------------------------------------------------------------------------------------------------------------------
Class MinLengthValidation_Class
Private m_instance
Private m_field_name
Private m_size
Private m_message
Private m_ok
Public Function Initialize(instance, field_name, size, message)
set m_instance = instance
m_field_name = field_name
m_size = size
m_message = message
m_ok = true
set Initialize = Me
End Function
Public Sub Check
If Len(eval("m_instance." & m_field_name)) < m_size then m_ok = false
End Sub
Public Property Get OK
OK = m_ok
End Property
Public Property Get Message
Message = m_message
End Property
End Class

Sub ValidateMinLength(instance, field_name, size, message)
if not IsObject(instance.Validator) then set instance.Validator = new Validator_Class
instance.Validator.AddValidation new MinLengthValidation_Class.Initialize(instance, field_name, size, message)
End Sub

'-----------------------------------------------------------------------------------------------------------------------
' Max Length Validation
'-----------------------------------------------------------------------------------------------------------------------
Class MaxLengthValidation_Class
Private m_instance
Private m_field_name
Private m_size
Private m_message
Private m_ok
Public Function Initialize(instance, field_name, size, message)
set m_instance = instance
m_field_name = field_name
m_size = size
m_message = message
m_ok = true
set Initialize = Me
End Function
Public Sub Check
If Len(eval("m_instance." & m_field_name)) > m_size then m_ok = false
End Sub
Public Property Get OK
OK = m_ok
End Property
Public Property Get Message
Message = m_message
End Property
End Class

Sub ValidateMaxLength(instance, field_name, size, message)
if not IsObject(instance.Validator) then set instance.Validator = new Validator_Class
instance.Validator.AddValidation new MaxLengthValidation_Class.Initialize(instance, field_name, size, message)
End Sub

'-----------------------------------------------------------------------------------------------------------------------
' Numeric Validation
'-----------------------------------------------------------------------------------------------------------------------
Class NumericValidation_Class
Private m_instance
Private m_field_name
Private m_message
Private m_ok
Public Function Initialize(instance, field_name, message)
set m_instance = instance
m_field_name = field_name
m_message = message
m_ok = true
set Initialize = Me
End Function
Public Sub Check
If Not IsNumeric(eval("m_instance." & m_field_name)) then m_ok = false
End Sub
Public Property Get OK
OK = m_ok
End Property
Public Property Get Message
Message = m_message
End Property
End Class

Sub ValidateNumeric(instance, field_name, message)
if not IsObject(instance.Validator) then set instance.Validator = new Validator_Class
instance.Validator.AddValidation new NumericValidation_Class.Initialize(instance, field_name, message)
End Sub


'-----------------------------------------------------------------------------------------------------------------------
' Regular Expression Pattern Validation
'-----------------------------------------------------------------------------------------------------------------------
Class PatternValidation_Class
Private m_instance
Private m_field_name
Private m_pattern
Private m_message
Private m_ok
Public Function Initialize(instance, field_name, pattern, message)
set m_instance = instance
m_field_name = field_name
m_pattern = pattern
m_message = message
m_ok = true
set Initialize = Me
End Function
Public Sub Check
dim re : set re = new RegExp
With re
.Pattern = m_pattern
.Global = true
.IgnoreCase = true
End With
dim matches : set matches = re.Execute(eval("m_instance." & m_field_name))
if matches.Count = 0 then
m_ok = false
end if
End Sub
Public Property Get OK
OK = m_ok
End Property
Public Property Get Message
Message = m_message
End Property
End Class

Sub ValidatePattern(instance, field_name, pattern, message)
if not IsObject(instance.Validator) then set instance.Validator = new Validator_Class
instance.Validator.AddValidation new PatternValidation_Class.Initialize(instance, field_name, pattern, message)
End Sub



'-----------------------------------------------------------------------------------------------------------------------
' Validator Class
' This class is not intended to be used directly. Models should use the Validate* subs instead.
'-----------------------------------------------------------------------------------------------------------------------
Class Validator_Class
Private m_validations
Private m_errors
Private Sub Class_Initialize
m_validations = Array()
redim m_validations(-1)
m_errors = Array()
redim m_errors(-1)
End Sub
Public Property Get Errors
Errors = m_errors
End Property
Public Sub AddValidation(validation)
dim n : n = ubound(m_validations) + 1
redim preserve m_validations(n)
set m_validations(n) = validation
End Sub
Public Sub Validate
dim n : n = ubound(m_validations)
dim i, V
for i = 0 to n
set V = m_validations(i)
V.Check
if not V.OK then
AddError V.Message
end if
next
End Sub
Public Property Get HasErrors
HasErrors = (ubound(m_errors) > -1)
End Property
'Public to allow other errors to be added by the controller for circumstances not accounted for by the validators
Public Sub AddError(msg)
redim preserve m_errors(ubound(m_errors) + 1)
m_errors(ubound(m_errors)) = msg
End Sub
End Class
%>

+ 15
- 0
MVC/lib.all.asp Переглянути файл

@@ -0,0 +1,15 @@
<!--#include file="lib.Strings.asp"-->
<!--#include file="lib.HTMLSecurity.asp"-->
<!--#include file="lib.HTML.asp"-->
<!--#include file="lib.Collections.asp"-->
<!--#include file="lib.Routes.asp"-->
<!--#include file="lib.MVC.asp"-->
<!--#include file="lib.Automapper.asp"-->
<!--#include file="lib.Data.asp"-->
<!--#include file="lib.Helpers.asp"-->
<!--#include file="lib.Validations.asp"-->
<!--#include file="lib.Flash.asp"-->
<!--#include file="lib.Bootstrap.asp"-->
<!--#include file="lib.Enumerable.asp"-->
<!--#include file="lib.FormCache.asp"-->
<!--#include file="lib.json.asp"-->

+ 281
- 0
MVC/lib.json.asp Переглянути файл

@@ -0,0 +1,281 @@
<%
'January 2021 - Version 1.1 by Gerrit van Kuipers
Class aspJSON
Public data
Private p_JSONstring
Private aj_in_string, aj_in_escape, aj_i_tmp, aj_char_tmp, aj_s_tmp, aj_line_tmp, aj_line, aj_lines, aj_currentlevel, aj_currentkey, aj_currentvalue, aj_newlabel, aj_XmlHttp, aj_RegExp, aj_colonfound

Private Sub Class_Initialize()
Set data = Collection()

Set aj_RegExp = New regexp
aj_RegExp.Pattern = "\s{0,}(\S{1}[\s,\S]*\S{1})\s{0,}"
aj_RegExp.Global = False
aj_RegExp.IgnoreCase = True
aj_RegExp.Multiline = True
End Sub

Private Sub Class_Terminate()
Set data = Nothing
Set aj_RegExp = Nothing
End Sub

Public Sub loadJSON(inputsource)
inputsource = aj_MultilineTrim(inputsource)
If Len(inputsource) = 0 Then Err.Raise 1, "loadJSON Error", "No data to load."
Select Case Left(inputsource, 1)
Case "{", "["
Case Else
Set aj_XmlHttp = Server.CreateObject("Msxml2.ServerXMLHTTP")
aj_XmlHttp.open "POST", inputsource, False
aj_XmlHttp.setRequestHeader "Content-Type", "text/json"
aj_XmlHttp.setRequestHeader "CharSet", "UTF-8"
aj_XmlHttp.Send
inputsource = aj_XmlHttp.responseText
Set aj_XmlHttp = Nothing
End Select

p_JSONstring = CleanUpJSONstring(inputsource)
aj_lines = Split(p_JSONstring, Chr(13) & Chr(10))

Dim level(99)
aj_currentlevel = 1
Set level(aj_currentlevel) = data
For Each aj_line In aj_lines
aj_currentkey = ""
aj_currentvalue = ""
If Instr(aj_line, ":") > 0 Then
aj_in_string = False
aj_in_escape = False
aj_colonfound = False
For aj_i_tmp = 1 To Len(aj_line)
If aj_in_escape Then
aj_in_escape = False
Else
Select Case Mid(aj_line, aj_i_tmp, 1)
Case """"
aj_in_string = Not aj_in_string
Case ":"
If Not aj_in_escape And Not aj_in_string Then
aj_currentkey = Left(aj_line, aj_i_tmp - 1)
aj_currentvalue = Mid(aj_line, aj_i_tmp + 1)
aj_colonfound = True
Exit For
End If
Case "\"
aj_in_escape = True
End Select
End If
Next
if aj_colonfound then
aj_currentkey = aj_Strip(aj_JSONDecode(aj_currentkey), """")
If Not level(aj_currentlevel).exists(aj_currentkey) Then level(aj_currentlevel).Add aj_currentkey, ""
end if
End If
If right(aj_line,1) = "{" Or right(aj_line,1) = "[" Then
If Len(aj_currentkey) = 0 Then aj_currentkey = level(aj_currentlevel).Count
Set level(aj_currentlevel).Item(aj_currentkey) = Collection()
Set level(aj_currentlevel + 1) = level(aj_currentlevel).Item(aj_currentkey)
aj_currentlevel = aj_currentlevel + 1
aj_currentkey = ""
ElseIf right(aj_line,1) = "}" Or right(aj_line,1) = "]" or right(aj_line,2) = "}," Or right(aj_line,2) = "]," Then
aj_currentlevel = aj_currentlevel - 1
ElseIf Len(Trim(aj_line)) > 0 Then
If Len(aj_currentvalue) = 0 Then aj_currentvalue = aj_line
aj_currentvalue = getJSONValue(aj_currentvalue)

If Len(aj_currentkey) = 0 Then aj_currentkey = level(aj_currentlevel).Count
level(aj_currentlevel).Item(aj_currentkey) = aj_currentvalue
End If
Next
End Sub

Public Function Collection()
Set Collection = Server.CreateObject("Scripting.Dictionary")
End Function

Public Function AddToCollection(dictobj)
If TypeName(dictobj) <> "Dictionary" Then Err.Raise 1, "AddToCollection Error", "Not a collection."
aj_newlabel = dictobj.Count
dictobj.Add aj_newlabel, Collection()
Set AddToCollection = dictobj.item(aj_newlabel)
end function

Private Function CleanUpJSONstring(aj_originalstring)
aj_originalstring = Replace(aj_originalstring, Chr(13) & Chr(10), "")
aj_originalstring = Mid(aj_originalstring, 2, Len(aj_originalstring) - 2)
aj_in_string = False : aj_in_escape = False : aj_s_tmp = ""
For aj_i_tmp = 1 To Len(aj_originalstring)
aj_char_tmp = Mid(aj_originalstring, aj_i_tmp, 1)
If aj_in_escape Then
aj_in_escape = False
aj_s_tmp = aj_s_tmp & aj_char_tmp
Else
Select Case aj_char_tmp
Case "\" : aj_s_tmp = aj_s_tmp & aj_char_tmp : aj_in_escape = True
Case """" : aj_s_tmp = aj_s_tmp & aj_char_tmp : aj_in_string = Not aj_in_string
Case "{", "["
aj_s_tmp = aj_s_tmp & aj_char_tmp & aj_InlineIf(aj_in_string, "", Chr(13) & Chr(10))
Case "}", "]"
aj_s_tmp = aj_s_tmp & aj_InlineIf(aj_in_string, "", Chr(13) & Chr(10)) & aj_char_tmp
Case "," : aj_s_tmp = aj_s_tmp & aj_char_tmp & aj_InlineIf(aj_in_string, "", Chr(13) & Chr(10))
Case Else : aj_s_tmp = aj_s_tmp & aj_char_tmp
End Select
End If
Next

CleanUpJSONstring = ""
aj_s_tmp = Split(aj_s_tmp, Chr(13) & Chr(10))
For Each aj_line_tmp In aj_s_tmp
aj_line_tmp = Replace(Replace(aj_line_tmp, Chr(10), ""), Chr(13), "")
CleanUpJSONstring = CleanUpJSONstring & aj_Trim(aj_line_tmp) & Chr(13) & Chr(10)
Next
End Function

Private Function getJSONValue(ByVal val)
val = Trim(val)
If Left(val,1) = ":" Then val = Mid(val, 2)
If Right(val,1) = "," Then val = Left(val, Len(val) - 1)
val = Trim(val)

Select Case val
Case "true" : getJSONValue = True
Case "false" : getJSONValue = False
Case "null" : getJSONValue = Null
Case Else
If (Instr(val, """") = 0) Then
If IsNumeric(val) Then
getJSONValue = aj_ReadNumericValue(val)
Else
getJSONValue = val
End If
Else
If Left(val,1) = """" Then val = Mid(val, 2)
If Right(val,1) = """" Then val = Left(val, Len(val) - 1)
getJSONValue = aj_JSONDecode(Trim(val))
End If
End Select
End Function

Private JSONoutput_level
Public Function JSONoutput()
Dim wrap_dicttype, aj_label
JSONoutput_level = 1
wrap_dicttype = "[]"
For Each aj_label In data
If Not aj_IsInt(aj_label) Then wrap_dicttype = "{}"
Next
JSONoutput = Left(wrap_dicttype, 1) & Chr(13) & Chr(10) & GetDict(data) & Right(wrap_dicttype, 1)
End Function

Private Function GetDict(objDict)
Dim aj_item, aj_keyvals, aj_label, aj_dicttype
For Each aj_item In objDict
Select Case TypeName(objDict.Item(aj_item))
Case "Dictionary"
GetDict = GetDict & Space(JSONoutput_level * 4)
aj_dicttype = "[]"
For Each aj_label In objDict.Item(aj_item).Keys
If Not aj_IsInt(aj_label) Then aj_dicttype = "{}"
Next
If aj_IsInt(aj_item) Then
GetDict = GetDict & (Left(aj_dicttype,1) & Chr(13) & Chr(10))
Else
GetDict = GetDict & ("""" & aj_JSONEncode(aj_item) & """" & ": " & Left(aj_dicttype,1) & Chr(13) & Chr(10))
End If
JSONoutput_level = JSONoutput_level + 1
aj_keyvals = objDict.Keys
GetDict = GetDict & (GetSubDict(objDict.Item(aj_item)) & Space(JSONoutput_level * 4) & Right(aj_dicttype,1) & aj_InlineIf(aj_item = aj_keyvals(objDict.Count - 1),"" , ",") & Chr(13) & Chr(10))
Case Else
aj_keyvals = objDict.Keys
GetDict = GetDict & (Space(JSONoutput_level * 4) & aj_InlineIf(aj_IsInt(aj_item), "", """" & aj_JSONEncode(aj_item) & """: ") & WriteValue(objDict.Item(aj_item)) & aj_InlineIf(aj_item = aj_keyvals(objDict.Count - 1),"" , ",") & Chr(13) & Chr(10))
End Select
Next
End Function

Private Function aj_IsInt(val)
aj_IsInt = (TypeName(val) = "Integer" Or TypeName(val) = "Long")
End Function

Private Function GetSubDict(objSubDict)
GetSubDict = GetDict(objSubDict)
JSONoutput_level= JSONoutput_level -1
End Function

Private Function WriteValue(ByVal val)
Select Case TypeName(val)
Case "Double", "Integer", "Long": WriteValue = replace(val, ",", ".")
Case "Null" : WriteValue = "null"
Case "Boolean" : WriteValue = aj_InlineIf(val, "true", "false")
Case Else : WriteValue = """" & aj_JSONEncode(val) & """"
End Select
End Function

Private Function aj_JSONEncode(ByVal val)
val = Replace(val, "\", "\\")
val = Replace(val, """", "\""")
'val = Replace(val, "/", "\/")
val = Replace(val, Chr(8), "\b")
val = Replace(val, Chr(12), "\f")
val = Replace(val, Chr(10), "\n")
val = Replace(val, Chr(13), "\r")
val = Replace(val, Chr(9), "\t")
aj_JSONEncode = Trim(val)
End Function

Private Function aj_JSONDecode(ByVal val)
val = Replace(val, "\""", """")
val = Replace(val, "\\", "\")
val = Replace(val, "\/", "/")
val = Replace(val, "\b", Chr(8))
val = Replace(val, "\f", Chr(12))
val = Replace(val, "\n", Chr(10))
val = Replace(val, "\r", Chr(13))
val = Replace(val, "\t", Chr(9))
aj_JSONDecode = Trim(val)
End Function

Private Function aj_InlineIf(condition, returntrue, returnfalse)
If condition Then aj_InlineIf = returntrue Else aj_InlineIf = returnfalse
End Function

Private Function aj_Strip(ByVal val, stripper)
If Left(val, 1) = stripper Then val = Mid(val, 2)
If Right(val, 1) = stripper Then val = Left(val, Len(val) - 1)
aj_Strip = val
End Function

Private Function aj_MultilineTrim(TextData)
aj_MultilineTrim = aj_RegExp.Replace(TextData, "$1")
End Function

Private Function aj_Trim(val)
aj_Trim = Trim(val)
Do While Left(aj_Trim, 1) = Chr(9) : aj_Trim = Mid(aj_Trim, 2) : Loop
Do While Right(aj_Trim, 1) = Chr(9) : aj_Trim = Left(aj_Trim, Len(aj_Trim) - 1) : Loop
aj_Trim = Trim(aj_Trim)
End Function

Private Function aj_ReadNumericValue(ByVal val)
If Instr(val, ".") > 0 Then
numdecimals = Len(val) - Instr(val, ".")
val = Clng(Replace(val, ".", ""))
val = val / (10 ^ numdecimals)
aj_ReadNumericValue = val
Else
aj_ReadNumericValue = Clng(val)
End If
End Function
End Class

dim json_Class__Singleton
Function json()
if IsEmpty(json_Class__Singleton) then
set json_Class__Singleton = new aspJSON
end if
set json = json_Class__Singleton
End Function
%>

+ 38
- 0
Tests/ASPUnit/TestASPUnit/TCTest.asp Переглянути файл

@@ -0,0 +1,38 @@
<%
Class TCTest

Public Function TestCaseNames()
TestCaseNames = Array("test", "test2", "test3")
End Function

Public Sub SetUp()
'Response.Write("SetUp<br>")
End Sub

Public Sub TearDown()
'Response.Write("TearDown<br>")
End Sub

Public Sub test(oTestResult)
'Response.Write("test<br>")
'Err.Raise 5, "hello", "error"
End Sub

Public Sub test2(oTestResult)
'Response.Write("test2<br>")
oTestResult.Assert False, "Assert False!"

oTestResult.AssertEquals 4, 4, "4 = 4, Should not fail!"
oTestResult.AssertEquals 4, 5, "4 != 5, Should fail!"
oTestResult.AssertNotEquals 5, 5, "AssertNotEquals(5, = 5) should fail!"

oTestResult.AssertExists new TestResult, "new TestResult Should not fail!"
oTestResult.AssertExists Nothing, "Nothing: Should not exist!"
oTestResult.AssertExists 4, "4 Should exist?!"
End Sub

Public Sub test3(oTestResult)
oTestResult.Assert True, "Success"
End Sub
End Class
%>

+ 12
- 0
Tests/ASPUnit/TestASPUnit/TestASPUnit.asp Переглянути файл

@@ -0,0 +1,12 @@
<%
Option Explicit
%>
<!-- #include file="../include/ASPUnitRunner.asp"-->
<!-- #include file="TCTest.asp"-->
<%
Dim oRunner
Set oRunner = New UnitRunner
oRunner.AddTestContainer New TCTest
oRunner.Display()
%>

+ 335
- 0
Tests/ASPUnit/include/ASPUnit.asp Переглянути файл

@@ -0,0 +1,335 @@
<%

'********************************************************************
' Name: ASPUnit.asp
'
' Purpose: Contains the main ASPUnit classes
'********************************************************************

Class TestSuite
Private m_oTestCases

Private Sub Class_Initialize()
Set m_oTestCases = Server.CreateObject("Scripting.Dictionary")
End Sub

Private Sub Class_Terminate()
Set m_oTestCases = Nothing
End Sub

Public Sub AddTestCase(oTestContainer, sTestMethod)
Dim oTestCase
Set oTestCase = New TestCase
Set oTestCase.TestContainer = oTestContainer
oTestCase.TestMethod = sTestMethod

m_oTestCases.Add oTestCase, oTestCase
End Sub

Public Sub AddAllTestCases(oTestContainer)
Dim oTestCase, sTestMethod

For Each sTestMethod In oTestContainer.TestCaseNames()
AddTestCase oTestContainer, sTestMethod
Next
End Sub

Public Function Count()
Count = m_oTestCases.Count
End Function

Public Sub Run(oTestResult)
Dim oTestCase
For Each oTestCase In m_oTestCases.Items
oTestCase.Run oTestResult
Next
End Sub
End Class

Class TestCase
Private m_oTestContainer
Private m_sTestMethod

Public Property Get TestContainer()
Set TestContainer = m_oTestContainer
End Property

Public Property Set TestContainer(oTestContainer)
Set m_oTestContainer = oTestContainer
End Property

Public Property Get TestMethod()
TestMethod = m_sTestMethod
End Property

Public Property Let TestMethod(sTestMethod)
m_sTestMethod = sTestMethod
End Property

Public Sub Run(oTestResult)

Dim iOldFailureCount
Dim iOldErrorCount

iOldFailureCount = oTestResult.Failures.Count
iOldErrorCount = oTestResult.Errors.Count

On Error Resume Next
oTestResult.StartTest Me

m_oTestContainer.SetUp()

If (Err.Number <> 0) Then
oTestResult.AddError Err
Else
' Response.Write("m_oTestContainer." & m_sTestMethod & "(oTestResult)<br>")
Execute("m_oTestContainer." & m_sTestMethod & "(oTestResult)")

If (Err.Number <> 0) Then
' Response.Write(Err.Description & "<br>")
oTestResult.AddError Err
End If
End If
Err.Clear()

m_oTestContainer.TearDown()

If (Err.Number <> 0) Then
oTestResult.AddError Err
End If

'Log success if no failures or errors occurred
If oTestResult.Failures.Count = iOldFailureCount And oTestResult.Errors.Count = iOldErrorCount Then
oTestResult.AddSuccess
End If
oTestResult.EndTest
On Error Goto 0
End Sub

End Class

Class TestResult

Private m_dicErrors
Private m_dicFailures
Private m_dicSuccesses
Private m_dicObservers
Private m_iRunTests
Private m_oCurrentTestCase

Private Sub Class_Initialize
Set m_dicErrors = Server.CreateObject("Scripting.Dictionary")
Set m_dicFailures = Server.CreateObject("Scripting.Dictionary")
Set m_dicSuccesses = Server.CreateObject("Scripting.Dictionary")
Set m_dicObservers = Server.CreateObject("Scripting.Dictionary")
m_iRunTests = 0
End Sub

Private Sub Class_Terminate
Set m_dicErrors = Nothing
Set m_dicFailures = Nothing
Set m_dicSuccesses = Nothing
Set m_dicObservers = Nothing
Set m_oCurrentTestCase = Nothing
End Sub

Public Property Get Errors()
Set Errors = m_dicErrors
End Property

Public Property Get Failures()
Set Failures = m_dicFailures
End Property

Public Property Get Successes()
Set Successes = m_dicSuccesses
End Property

Public Property Get RunTests()
RunTests = m_iRunTests
End Property

Public Sub StartTest(oTestCase)
Set m_oCurrentTestCase = oTestCase

Dim oObserver
For Each oObserver In m_dicObservers.Items
oObserver.OnStartTest
Next
End Sub

Public Sub EndTest()
m_iRunTests = m_iRunTests + 1

Dim oObserver
For Each oObserver In m_dicObservers.Items
oObserver.OnEndTest
Next
End Sub

Public Sub AddObserver(oObserver)
m_dicObservers.Add oOserver, oObserver
End Sub

Public Function AddError(oError)
Dim oTestError
Set oTestError = New TestError
oTestError.Initialize m_oCurrentTestCase, oError.Number, oError.Source, oError.Description
m_dicErrors.Add oTestError, oTestError

Dim oObserver
For Each oObserver In m_dicObservers.Items
oObserver.OnError
Next

Set AddError = oTestError
End Function

Public Function AddFailure(sMessage)
Dim oTestError
Set oTestError = New TestError
oTestError.Initialize m_oCurrentTestCase, 0, " ", sMessage
m_dicFailures.Add oTestError, oTestError

Dim oObserver
For Each oObserver In m_dicObservers.Items
oObserver.OnFailure
Next

Set AddFailure = oTestError
End Function

Public Function AddSuccess
Dim oTestError
Set oTestError = New TestError
oTestError.Initialize m_oCurrentTestCase, 0, " ", "Test completed without failures"
m_dicSuccesses.Add oTestError, oTestError

Dim oObserver
For Each oObserver In m_dicObservers.Items
oObserver.OnSuccess
Next
End Function

Public Sub Assert(bCondition, sMessage)
If Not bCondition Then
AddFailure sMessage
End If
End Sub

Public Sub AssertEquals(vExpected, vActual, sMessage)
If vExpected <> vActual Then
AddFailure NotEqualsMessage(sMessage, vExpected, vActual)
End If
End Sub

'Build a message about a failed equality check
Function NotEqualsMessage(sMessage, vExpected, vActual)
'NotEqualsMessage = sMessage & " expected: " & CStr(vExpected) & " but was: " & CStr(vActual)
NotEqualsMessage = sMessage & "<br>" &_
"<table><tr><th class='expected'>Expected</th><td class='expected'><span class='left-delim'>(" & typename(vExpected) & ") [</span>" & CStr(vExpected) & "<span class='right-delim'>]</span></td></tr><tr><th class='actual'>Actual</th><td class='actual'><span class='left-delim'>(" & typename(vActual) & ") [</span>" & CStr(vActual) & "<span class='right-delim'>]</span></td></tr></table>"
End Function

Public Sub AssertNotEquals(vExpected, vActual, sMessage)
If vExpected = vActual Then
AddFailure sMessage & " expected: " & CStr(vExpected) & " and actual: " & CStr(vActual) & " should not be equal."
End If
End Sub

Public Sub AssertExists(vVariable, sMessage)
If IsObject(vVariable) Then
If (vVariable Is Nothing) Then
AddFailure sMessage & " - Variable of type " & TypeName(vVariable) & " is Nothing."
End If
ElseIf IsEmpty(vVariable) Then
AddFailure sMessage & " - Variable " & TypeName(vVariable) & " is Empty (Uninitialized)."
End If
End Sub
'---------------------------------------------------------------------------------------------------------------------
' CUSTOM ASSERTIONS
'---------------------------------------------------------------------------------------------------------------------
Public Sub AssertFalse(bCondition, sMessage)
If bCondition then
AddFailure sMessage
End If
End Sub
Public Sub AssertEqual(vExpected, vActual, sMessage)
AssertEquals vExpected, vActual, sMessage
End Sub
Public Sub AssertNotEqual(vExpected, vActual, sMessage)
AssertNotEqual vExpected, vActual, sMessage
End Sub
Public Sub AssertNotExists(vVariable, sMessage)
If IsObject(vVariable) then
If (vVariable Is Not Nothing) then
AddFailure sMessage & " - Variable of type " & TypeName(vVariable) & " should be Nothing."
End If
ElseIf Not IsEmpty(vVariable) then
AddFailure sMessage & " - Variable " & TypeName(vVariable) & " should be Empty (Uninitialized)."
End If
End Sub
'Ensures (obj1 Is obj2) = true
Public Sub AssertSame(obj1, obj2, sMessage)
Assert (obj1 Is obj2), sMessage
End Sub
'Ensures (obj1 Is obj2) = false
Public Sub AssertDifferent(obj1, obj2, sMessage)
Assert (not (obj1 Is obj2)), sMessage
End Sub
'Forces a test failure
Public Sub Fail(sMessage)
AddFailure "Forced Failure: " & sMessage
End Sub
'Flags a test as needing implementation, otherwise an empty test will silently pass
Public Sub NotImplemented
AddFailure "Test not implemented."
End Sub
Public Sub AssertType(sTypeName, vVariable, sMessage)
AssertEqual sTypeName, typename(vVariable), sMessage
End Sub

End Class

Class TestError

Private m_oTestCase
Private m_lErrNumber
Private m_sSource
Private m_sDescription

Public Sub Initialize(oTestCase, lErrNumber, sSource, sDescription)
Set m_oTestCase = oTestCase
m_lErrNumber = lErrNumber
m_sSource = sSource
m_sDescription = sDescription
End Sub

Public Property Get TestCase
Set TestCase = m_oTestCase
End Property

Public Property Get ErrNumber
ErrNumber = m_lErrNumber
End Property

Public Property Get Source
Source = m_sSource
End Property

Public Property Get Description
Description = m_sDescription
End Property

End Class
%>

+ 68
- 0
Tests/ASPUnit/include/ASPUnit.css Переглянути файл

@@ -0,0 +1,68 @@
/*
.warning
{
BACKGROUND-COLOR: gold
}
.error
{
BACKGROUND-COLOR: indianred
}
.success
{
BACKGROUND-COLOR: #33cc33
}

BODY
{
FONT-SIZE: 10px
FONT-FAMILY: Verdana;
BACKGROUND-COLOR: lightskyblue
}
TABLE
{
FONT-SIZE: 10px
}
FORM
{
FONT-SIZE: 10px
}
SELECT
{
FONT-SIZE: 10px
}
INPUT
{
FONT-SIZE: 10px
}
*/



/*----------------------------------------------------------------------------------------------------------------------
CUSTOMIZATIONS
----------------------------------------------------------------------------------------------------------------------*/

body { padding: 20px; font-family: calibri; font-size: 14pt; color: #333; background-color: #fcfcfc; }

table.Form { width: auto; }
table.Form th,
table.Form td { padding-right: 20px; }
table.Form input.Submit { height: 40px; }

table.Results { width: 98%; }
table.Results th,
table.Results td { padding: 5px; vertical-align: top; }

table.Results th.expected,
table.Results th.actual { text-align: right; color: #c00; }

table.Results td.expected,
table.Results td.actual { font-family: consolas; }

table.Results span.left-delim,
table.Results span.right-delim { font-weight: bold; color: #c00; }


.warning { background-color: #feedab; color: #333; }
.error { background-color: #ffb3b3; color: darkred; }
.success { background-color: #dbf0b8; color: darkgreen; }

+ 58
- 0
Tests/ASPUnit/include/ASPUnit.css~ Переглянути файл

@@ -0,0 +1,58 @@
/*
.warning
{
BACKGROUND-COLOR: gold
}
.error
{
BACKGROUND-COLOR: indianred
}
.success
{
BACKGROUND-COLOR: #33cc33
}

BODY
{
FONT-SIZE: 10px
FONT-FAMILY: Verdana;
BACKGROUND-COLOR: lightskyblue
}
TABLE
{
FONT-SIZE: 10px
}
FORM
{
FONT-SIZE: 10px
}
SELECT
{
FONT-SIZE: 10px
}
INPUT
{
FONT-SIZE: 10px
}
*/



/*----------------------------------------------------------------------------------------------------------------------
CUSTOMIZATIONS
----------------------------------------------------------------------------------------------------------------------*/

body { padding: 20px; font-family: calibri; font-size: 14pt; color: #333; background-color: #fcfcfc; }

table.Form { width: auto; }
table.Form th,
table.Form td { padding-right: 20px; }
table.Form input.Submit { height: 40px; }

table.Results { width: 98%; }
table.Results th,
table.Results td { padding: 5px; }

.warning { background-color: #feedab; color: #333; }
.error { background-color: #ffb3b3; color: darkred; }
.success { background-color: #dbf0b8; color: darkgreen; }

+ 273
- 0
Tests/ASPUnit/include/ASPUnitRunner.asp Переглянути файл

@@ -0,0 +1,273 @@
<%
'********************************************************************
' Name: ASPUnitRunner.asp
'
' Purpose: Contains the UnitRunner class which is used to render the unit testing UI
'********************************************************************

'********************************************************************
' Include Files
'********************************************************************
%>
<!-- #include file="ASPUnit.asp"-->
<%

Const ALL_TESTCONTAINERS = "All Test Containers"
Const ALL_TESTCASES = "All Test Cases"

Const FRAME_PARAMETER = "UnitRunner"
Const FRAME_SELECTOR = "selector"
Const FRAME_RESULTS = "results"

Const STYLESHEET = "aspunit/include/ASPUnit.css"
Const SCRIPTFILE = "aspunit/include/ASPUnitRunner.js"

Class UnitRunner

Private m_dicTestContainer

Private Sub Class_Initialize()
Set m_dicTestContainer = CreateObject("Scripting.Dictionary")
End Sub

Public Sub AddTestContainer(oTestContainer)
m_dicTestContainer.Add TypeName(oTestContainer), oTestContainer
End Sub

Public Function Display()
If (Request.QueryString(FRAME_PARAMETER) = FRAME_SELECTOR) Then
DisplaySelector
ElseIf (Request.QueryString(FRAME_PARAMETER) = FRAME_RESULTS) Then
DisplayResults
Else
ShowFrameSet
End if
End Function

'********************************************************************
' Frameset
'********************************************************************
Private Function ShowFrameSet()
%>
<HTML>
<HEAD>
<TITLE>ASPUnit Test Runner</TITLE>
</HEAD>
<FRAMESET ROWS="70, *" BORDER=0 FRAMEBORDER=0 FRAMESPACING=0>
<FRAME NAME="<% = FRAME_SELECTOR %>" src="<% = GetSelectorFrameSrc %>" marginwidth="0" marginheight="0" scrolling="auto" border=0 frameborder=0 noresize>
<FRAME NAME="<% = FRAME_RESULTS %>" src="<% = GetResultsFrameSrc %>" marginwidth="0" marginheight="0" scrolling="auto" border=0 frameborder=0 noresize>
</FRAMESET>
<%
End Function

Private Function GetSelectorFrameSrc()
GetSelectorFrameSrc = Request.ServerVariables("SCRIPT_NAME") & "?" & FRAME_PARAMETER & "=" & FRAME_SELECTOR
End Function

Private Function GetResultsFrameSrc()
GetResultsFrameSrc = Request.ServerVariables("SCRIPT_NAME") & "?" & FRAME_PARAMETER & "=" & FRAME_RESULTS
End Function

'********************************************************************
' Selector Frame
'********************************************************************
Private Function DisplaySelector()
%>
<HTML>
<HEAD>
<LINK REL="stylesheet" HREF="<% = STYLESHEET %>" MEDIA="screen" TYPE="text/css">
<SCRIPT>
function ComboBoxUpdate(strSelectorFrameSrc, strSelectorFrameName)
{
document.frmSelector.action = strSelectorFrameSrc;
document.frmSelector.target = strSelectorFrameName;
document.frmSelector.submit();
}
</SCRIPT>
</HEAD>
<BODY>
<FORM NAME="frmSelector" ACTION="<% = GetResultsFrameSrc %>" TARGET="<% = FRAME_RESULTS %>" METHOD=POST>
<TABLE class='Form'>
<TR>
<TD>
<INPUT TYPE="Submit" NAME="cmdRun" class="Submit" VALUE="Run Tests">
</TD>
<TD ALIGN="right">Test:</TD>
<TD>
<SELECT NAME="cboTestContainers" OnChange="ComboBoxUpdate('<% = GetSelectorFrameSrc %>', '<% = FRAME_SELECTOR %>');">
<OPTION><% = ALL_TESTCONTAINERS %>
<%
AddTestContainers
%>
</SELECT>
</TD>
<TD ALIGN="right">Test Method:</TD>
<TD>
<SELECT NAME="cboTestCases">
<OPTION><% = ALL_TESTCASES %>
<%
AddTestMethods
%>
</SELECT>
<TD>
<INPUT TYPE="checkbox" NAME="chkShowSuccess"> Show Passing Tests</INPUT>
</TD>
</TD>
</TR>
</TABLE>
</FORM>
</BODY>
</HTML>
<%
End Function

Private Function AddTestContainers()
Dim oTestContainer, sTestContainer
For Each oTestContainer In m_dicTestContainer.Items()
sTestContainer = TypeName(oTestContainer)
If (sTestContainer = Request.Form("cboTestContainers")) Then
Response.Write("<OPTION SELECTED>" & sTestContainer)
Else
Response.Write("<OPTION>" & sTestContainer)
End If
Next
End Function

Private Function AddTestMethods()
Dim oTestContainer, sContainer, sTestMethod

If (Request.Form("cboTestContainers") <> ALL_TESTCONTAINERS And Request.Form("cboTestContainers") <> "") Then
sContainer = CStr(Request.Form("cboTestContainers"))
Set oTestContainer = m_dicTestContainer.Item(sContainer)
For Each sTestMethod In oTestContainer.TestCaseNames()
Response.Write("<OPTION>" & sTestMethod)
Next
End If
End Function

Private Function TestName(oResult)
If (oResult.TestCase Is Nothing) Then
TestName = ""
Else
TestName = TypeName(oResult.TestCase.TestContainer) & "." & oResult.TestCase.TestMethod
End If
End Function

'********************************************************************
' Results Frame
'********************************************************************
Private Function DisplayResults()
%>
<HTML>
<HEAD>
<LINK REL="stylesheet" HREF="<% = STYLESHEET %>" MEDIA="screen" TYPE="text/css">
</HEAD>
<BODY>
<%
Dim oTestResult, oTestSuite
Set oTestResult = New TestResult

' Create TestSuite
Set oTestSuite = BuildTestSuite()

' Run Tests
oTestSuite.Run oTestResult

' Display Results
DisplayResultsTable oTestResult
%>
</BODY>
</HTML>
<%
End Function

Private Function BuildTestSuite()

Dim oTestSuite, oTestContainer, sContainer
Set oTestSuite = New TestSuite

If (Request.Form("cmdRun") <> "") Then
If (Request.Form("cboTestContainers") = ALL_TESTCONTAINERS) Then
For Each oTestContainer In m_dicTestContainer.Items()
If Not(oTestContainer Is Nothing) Then
oTestSuite.AddAllTestCases oTestContainer
End If
Next
Else
sContainer = CStr(Request.Form("cboTestContainers"))
Set oTestContainer = m_dicTestContainer.Item(sContainer)

Dim sTestMethod
sTestMethod = Request.Form("cboTestCases")

If (sTestMethod = ALL_TESTCASES) Then
oTestSuite.AddAllTestCases oTestContainer
Else
oTestSuite.AddTestCase oTestContainer, sTestMethod
End If
End If
End If

Set BuildTestSuite = oTestSuite
End Function

Private Function DisplayResultsTable(oTestResult)
%>
<TABLE BORDER="1" class='Results'>
<TR><TH WIDTH="10%" class="Type">Type</TH><TH WIDTH="20%" class="Test">Test</TH><TH WIDTH="70%" class="Desc">Description</TH></TR>
<%
If Not(oTestResult Is Nothing) Then
Dim oResult
If (Request.Form("chkShowSuccess") <> "") Then
For Each oResult in oTestResult.Successes
Response.Write(" <TR CLASS=""success""><TD class='Type'>Success</TD><TD class='Test'>" & TestName(oResult) & "</TD><TD class='Desc'>" & oResult.Source & oResult.Description & "</TD></TR>")
Next
End If

For Each oResult In oTestResult.Errors
Response.Write(" <TR CLASS=""error""><TD class='Type'>Error</TD><TD class='Test'>" & TestName(oResult) & "</TD><TD class='Desc'>" & oResult.Source & " (" & Trim(oResult.ErrNumber) & "): " & oResult.Description & "</TD></TR>")
Next

For Each oResult In oTestResult.Failures
Response.Write(" <TR CLASS=""warning""><TD class='Type'>Failure</TD><TD class='Test'>" & TestName(oResult) & "</TD><TD class='Desc'>" & oResult.Description & "</TD></TR>")
Next

Response.Write " <TR><TD ALIGN=""center"" COLSPAN=3 class='" & ResultRowClass(oTestResult) & "'>" & "Tests: " & oTestResult.RunTests & ", Errors: " & oTestResult.Errors.Count & ", Failures: " & oTestResult.Failures.Count & "</TD></TR>"
End If
%>
</TABLE>
<%
End Function
Private Function ResultRowClass(oTestResult)
if oTestResult.Errors.Count > 0 then
ResultRowClass = "error"
elseif oTestResult.Failures.Count > 0 then
ResultRowClass = "warning"
elseif oTestResult.Successes.Count > 0 then
ResultRowClass = "success"
end if
End Function

Public Sub OnStartTest()

End Sub

Public Sub OnEndTest()

End Sub

Public Sub OnError()

End Sub

Public Sub OnFailure()

End Sub

Public Sub OnSuccess()

End Sub
End Class
%>


+ 6
- 0
Tests/ASPUnit/include/ASPUnitRunner.js Переглянути файл

@@ -0,0 +1,6 @@
function ComboBoxUpdate(strSelectorFrameSrc, strSelectorFrameName)
{
document.frmSelector.action = strSelectorFrameSrc;
document.frmSelector.target = strSelectorFrameName;
document.frmSelector.submit();
}

+ 43
- 0
Tests/ASPUnit/index.html Переглянути файл

@@ -0,0 +1,43 @@
<html>
<head>
<title>ASPUnit: an ASP Unit Testing Framework</title>
</head>
<body>
<a name="top"></a>
<h1>ASPUnit 0.9.2</h1>

<h2>Introduction</h2>
ASPUnit is a unit testing framework based on the architecture of
<a href="http://www.junit.org">JUnit</a>, the current open source
<i>de facto</i> standard for unit testing. ASPUnit is a web-based port of
<a href="http://comunit.sourceforge.net">COMUnit</a> using Active Server Pages.
It is a VBScript implementation that has been tested to run on top of Microsoft
Internet Information Server 5.0 or 5.1.

<h2>Demonstration</h2>
Try out the <a href="http://www32.brinkster.com/aspunit/TestASPUnit/TestASPUnit.asp">ASPUnit demonstration</a>.

<h2>Download</h2>
Download <a href="http://sourceforge.net/project/showfiles.php?group_id=32444">ASPUnit 0.9.2</a>.

<h2>Feedback</h2>
Questions? Comments? Suggestions? Feel free to send us an email about it:
<a href="mailto:aspunit-developer@lists.sourceforge.net">aspunit-developer@lists.sourceforge.net</a>

<h2>Contributors:</h2>
<ul>
<li>Bernard Vander Beken</li>
<li>Tamara L. Cravit</li>
<li>Stephane Lussier (sl@fecondcarcan.com)</li>
<li>Richard Quinn</li>
</ul>

<h2>Links</h2>
<ul>
<li><a href="http://comunit.sourceforge.net">COMUnit</a>: a unit testing framework for COM components
<li><A href="http://www.xprogramming.com">www.xprogramming.com</A>: download source for all xUnits
<li><a href="http://www.junit.org">www.junit.org</a>: home of the original JUnit
</ul>

</body>
</html>

+ 127
- 0
Tests/TestCase_Automapper_Automap.asp Переглянути файл

@@ -0,0 +1,127 @@
<%
Class Test_AutoMap_Class
Public SomeString, SomeInt, SomeDate
Public Property Get Class_Get_Properties : Class_Get_Properties = Array("SomeString", "SomeInt", "SomeDate") : End Property
End Class

Class AutoMap_Tests
Public Sub Setup : End Sub
Public Sub Teardown : End Sub
Public Function TestCaseNames
TestCaseNames = Array("Test_From_Recordset_To_Existing_Class_Instance", _
"Test_From_Recordset_To_New_Class_Instance", _
"Test_From_Class_Instance_To_Existing_Class_Instance", _
"Test_From_Class_Instance_To_New_Class_Instance")
End Function
Private Sub Destroy(o)
on error resume next
o.close
on error goto 0
set o = nothing
End Sub
'---------------------------------------------------------------------------------------------------------------------
Public Sub Test_From_Recordset_To_Existing_Class_Instance(T)
dim src : set src = Server.CreateObject("ADODB.Recordset")
with src.Fields
.Append "SomeString", adVarChar, 100
.Append "SomeInt", adInteger
.Append "SomeDate", adDate
end with
dim dtm : dtm = Now
src.Open
src.AddNew
src("SomeString") = "Some string here"
src("SomeInt") = 12345
src("SomeDate") = dtm
src.Update
src.MoveFirst
dim target : set target = new Test_Automap_Class
dim result : set result = Automapper().Automap(src, target)
T.AssertEqual "Some string here", result.SomeString, "Failed to map SomeString."
T.AssertEqual 12345, result.SomeInt, "Failed to map SomeInt."
T.AssertEqual dtm, result.SomeDate, "Failed to map SomeDate."
Destroy src
Destroy target
Destroy result
End Sub
'---------------------------------------------------------------------------------------------------------------------
Public Sub Test_From_Recordset_To_New_Class_Instance(T)
dim src : set src = Server.CreateObject("ADODB.Recordset")
with src.Fields
.Append "SomeString", 200, 100
.Append "SomeInt", adInteger
.Append "SomeDate", adDate
end with
dim dtm : dtm = Now
src.Open
src.AddNew
src("SomeString") = "Some string here"
src("SomeInt") = 12345
src("SomeDate") = dtm
src.Update
src.MoveFirst
dim result : set result = Automapper().Automap(src, "Test_Automap_Class")
T.AssertEqual "Test_AutoMap_Class", typename(result), "AutoMap should have returned an instance of Test_AutoMap_Class."
T.AssertEqual "Some string here", result.SomeString, "Failed to map SomeString."
T.AssertEqual 12345, result.SomeInt, "Failed to map SomeInt."
T.AssertEqual dtm, result.SomeDate, "Failed to map SomeDate."
Destroy src
Destroy result
End Sub
'---------------------------------------------------------------------------------------------------------------------
Public Sub Test_From_Class_Instance_To_Existing_Class_Instance(T)
dim dtm : dtm = Now
dim src : set src = new Test_Automap_Class
src.SomeString = "Some string here"
src.SomeInt = 12345
src.SomeDate = dtm
dim target : set target = new Test_Automap_Class
dim result : set result = Automapper().Automap(src, target)
T.AssertEqual "Some string here", result.SomeString, "Failed to map SomeString."
T.AssertEqual 12345, result.SomeInt, "Failed to map SomeInt."
T.AssertEqual dtm, result.SomeDate, "Failed to map SomeDate."
Destroy src
Destroy target
Destroy result
End Sub
'---------------------------------------------------------------------------------------------------------------------
Public Sub Test_From_Class_Instance_To_New_Class_Instance(T)
dim dtm : dtm = Now
dim src : set src = new Test_Automap_Class
src.SomeString = "Some string here"
src.SomeInt = 12345
src.SomeDate = dtm
dim result : set result = Automapper().Automap(src, "Test_Automap_Class")
T.AssertEqual "Some string here", result.SomeString, "Failed to map SomeString."
T.AssertEqual 12345, result.SomeInt, "Failed to map SomeInt."
T.AssertEqual dtm, result.SomeDate, "Failed to map SomeDate."
Destroy src
Destroy result
End Sub
End Class
%>

+ 281
- 0
Tests/TestCase_Automapper_Dynmap.asp Переглянути файл

@@ -0,0 +1,281 @@
<%
Class Test_DynMap_Class
Public SomeString, SomeInt, SomeDate
Public Property Get Class_Get_Properties : Class_Get_Properties = Array("SomeString", "SomeInt", "SomeDate") : End Property
End Class

Class DynMap_Tests
Public Sub Setup : End Sub
Public Sub Teardown : End Sub
Public Function TestCaseNames
TestCaseNames = Array("Test_From_Recordset_To_Existing_Class_Instance_With_Empty_Fields_Array_Maps_All_Fields", _
"Test_From_Recordset_To_Existing_Class_Instance_Maps_Only_Specified_Fields", _
"Test_From_Recordset_To_New_Class_Instance_With_Empty_Fields_Array_Maps_All_Fields", _
"Test_From_Recordset_To_New_Class_Instance_Maps_Only_Specified_Fields", _
"Test_From_Class_Instance_To_Existing_Class_Instance_With_Empty_Fields_Array_Maps_All_Fields", _
"Test_From_Class_Instance_To_Existing_Class_Instance_Maps_Only_Specified_Fields", _
"Test_From_Class_Instance_To_New_Class_Instance_With_Empty_Fields_Array_Maps_All_Fields", _
"Test_From_Class_Instance_To_New_Class_Instance_Maps_Only_Specified_Fields", _
"Test_From_Class_Instance_To_Existing_Class_Instance_Maps_One_Expression", _
"Test_From_Class_Instance_To_Existing_Class_Instance_Maps_Multiple_Expressions")
End Function
Private Sub Destroy(o)
on error resume next
o.close
on error goto 0
set o = nothing
End Sub
'---------------------------------------------------------------------------------------------------------------------
Public Sub Test_From_Recordset_To_Existing_Class_Instance_With_Empty_Fields_Array_Maps_All_Fields(T)
dim src : set src = Server.CreateObject("ADODB.Recordset")
with src.Fields
.Append "SomeString", adVarChar, 100
.Append "SomeInt", adInteger
.Append "SomeDate", adDate
end with
dim dtm : dtm = Now
src.Open
src.AddNew
src("SomeString") = "Some string here"
src("SomeInt") = 12345
src("SomeDate") = dtm
src.Update
src.MoveFirst
dim target : set target = new Test_DynMap_Class
dim result : set result = Automapper().DynMap(src, target, empty, empty)
T.AssertEqual "Some string here", result.SomeString, "Failed to map SomeString."
T.AssertEqual 12345, result.SomeInt, "Failed to map SomeInt."
T.AssertEqual dtm, result.SomeDate, "Failed to map SomeDate."
Destroy src
Destroy target
Destroy result
End Sub
'---------------------------------------------------------------------------------------------------------------------
Public Sub Test_From_Recordset_To_Existing_Class_Instance_Maps_Only_Specified_Fields(T)
dim src : set src = Server.CreateObject("ADODB.Recordset")
with src.Fields
.Append "SomeString", adVarChar, 100
.Append "SomeInt", adInteger
.Append "SomeDate", adDate
end with
dim dtm : dtm = Now
src.Open
src.AddNew
src("SomeString") = "Some string here"
src("SomeInt") = 12345
src("SomeDate") = dtm
src.Update
src.MoveFirst
dim target : set target = new Test_DynMap_Class
target.SomeInt = 54321
dim result : set result = Automapper().DynMap(src, target, array("SomeString", "SomeDate"), empty)
T.AssertEqual "Some string here", result.SomeString, "Failed to map SomeString."
T.AssertEqual 54321, result.SomeInt, "SomeInt should have been left untouched, but was mapped anyway."
T.AssertEqual dtm, result.SomeDate, "Failed to map SomeDate."
Destroy src
Destroy target
Destroy result
End Sub
'---------------------------------------------------------------------------------------------------------------------
Public Sub Test_From_Recordset_To_New_Class_Instance_With_Empty_Fields_Array_Maps_All_Fields(T)
dim src : set src = Server.CreateObject("ADODB.Recordset")
with src.Fields
.Append "SomeString", adVarChar, 100
.Append "SomeInt", adInteger
.Append "SomeDate", adDate
end with
dim dtm : dtm = Now
src.Open
src.AddNew
src("SomeString") = "Some string here"
src("SomeInt") = 12345
src("SomeDate") = dtm
src.Update
src.MoveFirst
dim result : set result = Automapper().DynMap(src, "Test_DynMap_Class", empty, empty)
T.AssertEqual "Some string here", result.SomeString, "Failed to map SomeString."
T.AssertEqual 12345, result.SomeInt, "Failed to map SomeInt."
T.AssertEqual dtm, result.SomeDate, "Failed to map SomeDate."
Destroy src
Destroy result
End Sub
'---------------------------------------------------------------------------------------------------------------------
Public Sub Test_From_Recordset_To_New_Class_Instance_Maps_Only_Specified_Fields(T)
dim src : set src = Server.CreateObject("ADODB.Recordset")
with src.Fields
.Append "SomeString", adVarChar, 100
.Append "SomeInt", adInteger
.Append "SomeDate", adDate
end with
dim dtm : dtm = Now
src.Open
src.AddNew
src("SomeString") = "Some string here"
src("SomeInt") = 12345
src("SomeDate") = dtm
src.Update
src.MoveFirst
dim result : set result = Automapper().DynMap(src, "Test_DynMap_Class", array("SomeString", "SomeDate"), empty)
T.AssertEqual "Some string here", result.SomeString, "Failed to map SomeString."
T.AssertNotExists result.SomeInt, "SomeInt should have been left uninitialized, but was mapped anyway."
T.AssertEqual dtm, result.SomeDate, "Failed to map SomeDate."
Destroy src
Destroy result
End Sub
'---------------------------------------------------------------------------------------------------------------------
Public Sub Test_From_Class_Instance_To_Existing_Class_Instance_With_Empty_Fields_Array_Maps_All_Fields(T)
dim dtm : dtm = Now
dim src : set src = new Test_DynMap_Class
src.SomeString = "Some string here"
src.SomeInt = 12345
src.SomeDate = dtm
dim target : set target = new Test_DynMap_Class
dim result : set result = Automapper.DynMap(src, target, empty, empty)
T.AssertEqual "Some string here", result.SomeString, "Failed to map SomeString."
T.AssertEqual 12345, result.SomeInt, "Failed to map SomeInt."
T.AssertEqual dtm, result.SomeDate, "Failed to map SomeDate."
Destroy src
Destroy target
Destroy result
End Sub
'---------------------------------------------------------------------------------------------------------------------
Public Sub Test_From_Class_Instance_To_Existing_Class_Instance_Maps_Only_Specified_Fields(T)
dim dtm : dtm = Now
dim src : set src = new Test_DynMap_Class
src.SomeString = "Some string here"
src.SomeInt = 12345
src.SomeDate = dtm
dim target : set target = new Test_DynMap_Class
target.SomeInt = 54321
dim result : set result = Automapper.DynMap(src, target, array("SomeString", "SomeDate"), empty)
T.AssertEqual "Some string here", result.SomeString, "Failed to map SomeString."
T.AssertEqual 54321, result.SomeInt, "SomeInt should have been left alone but was mapped anyway."
T.AssertEqual dtm, result.SomeDate, "Failed to map SomeDate."
Destroy src
Destroy target
Destroy result
End Sub
'---------------------------------------------------------------------------------------------------------------------
Public Sub Test_From_Class_Instance_To_New_Class_Instance_With_Empty_Fields_Array_Maps_All_Fields(T)
dim dtm : dtm = Now
dim src : set src = new Test_DynMap_Class
src.SomeString = "Some string here"
src.SomeInt = 12345
src.SomeDate = dtm
dim result : set result = Automapper.DynMap(src, "Test_DynMap_Class", empty, empty)
T.AssertEqual "Some string here", result.SomeString, "Failed to map SomeString."
T.AssertEqual 12345, result.SomeInt, "Failed to map SomeInt."
T.AssertEqual dtm, result.SomeDate, "Failed to map SomeDate."
Destroy src
Destroy result
End Sub
'---------------------------------------------------------------------------------------------------------------------
Public Sub Test_From_Class_Instance_To_New_Class_Instance_Maps_Only_Specified_Fields(T)
dim dtm : dtm = Now
dim src : set src = new Test_DynMap_Class
src.SomeString = "Some string here"
src.SomeInt = 12345
src.SomeDate = dtm
dim result : set result = Automapper.DynMap(src, "Test_DynMap_Class", array("SomeString", "SomeDate"), empty)
T.AssertEqual "Some string here", result.SomeString, "Failed to map SomeString."
T.AssertNotExists result.SomeInt, "SomeInt should have been left uninitialized, but was mapped anyway."
T.AssertEqual dtm, result.SomeDate, "Failed to map SomeDate."
Destroy src
Destroy result
End Sub
'---------------------------------------------------------------------------------------------------------------------
Public Sub Test_From_Class_Instance_To_Existing_Class_Instance_Maps_One_Expression(T)
dim dtm : dtm = Now
dim src : set src = new Test_DynMap_Class
src.SomeString = "Some string here"
src.SomeInt = 12345
src.SomeDate = dtm
dim target : set target = new Test_DynMap_Class
dim result : set result = Automapper.DynMap(src, target, empty, "target.SomeString = ucase(src.SomeString)")
T.AssertEqual "SOME STRING HERE", result.SomeString, "Failed to map SomeString."
T.AssertEqual 12345, result.SomeInt, "Failed to map SomeInt."
T.AssertEqual dtm, result.SomeDate, "Failed to map SomeDate."
Destroy src
Destroy target
Destroy result
End Sub
'---------------------------------------------------------------------------------------------------------------------
Public Sub Test_From_Class_Instance_To_Existing_Class_Instance_Maps_Multiple_Expressions(T)
dim dtm : dtm = Now
dim src : set src = new Test_DynMap_Class
src.SomeString = "Some string here"
src.SomeInt = 12345
src.SomeDate = dtm
dim target : set target = new Test_DynMap_Class
dim result : set result = Automapper.DynMap(src, target, empty, _
array("target.SomeString = ucase(src.SomeString)", _
"target.SomeInt = src.SomeInt * 2", _
"target.SomeDate = Year(src.SomeDate)"))
T.AssertEqual "SOME STRING HERE", result.SomeString, "Failed to map SomeString."
T.AssertEqual (12345 * 2), result.SomeInt, "Failed to map SomeInt."
T.AssertEqual Year(dtm), result.SomeDate, "Failed to map SomeDate."
Destroy src
Destroy target
Destroy result
End Sub
End Class
%>

+ 236
- 0
Tests/TestCase_Automapper_Flexmap.asp Переглянути файл

@@ -0,0 +1,236 @@
<%
Class Test_FlexMap_Class
Public SomeString, SomeInt, SomeDate
Public Property Get Class_Get_Properties : Class_Get_Properties = Array("SomeString", "SomeInt", "SomeDate") : End Property
End Class


Class FlexMap_Tests
Public Sub Setup : End Sub
Public Sub Teardown : End Sub
Public Function TestCaseNames
TestCaseNames = Array("Test_From_Recordset_To_Existing_Class_Instance_With_Empty_Fields_Array_Maps_All_Fields", _
"Test_From_Recordset_To_Existing_Class_Instance_Maps_Only_Specified_Fields", _
"Test_From_Recordset_To_New_Class_Instance_With_Empty_Fields_Array_Maps_All_Fields", _
"Test_From_Recordset_To_New_Class_Instance_Maps_Only_Specified_Fields", _
"Test_From_Class_Instance_To_Existing_Class_Instance_With_Empty_Fields_Array_Maps_All_Fields", _
"Test_From_Class_Instance_To_Existing_Class_Instance_Maps_Only_Specified_Fields", _
"Test_From_Class_Instance_To_New_Class_Instance_With_Empty_Fields_Array_Maps_All_Fields", _
"Test_From_Class_Instance_To_New_Class_Instance_Maps_Only_Specified_Fields")
End Function
Private Sub Destroy(o)
on error resume next
o.close
on error goto 0
set o = nothing
End Sub
'---------------------------------------------------------------------------------------------------------------------
Public Sub Test_From_Recordset_To_Existing_Class_Instance_With_Empty_Fields_Array_Maps_All_Fields(T)
dim src : set src = Server.CreateObject("ADODB.Recordset")
with src.Fields
.Append "SomeString", adVarChar, 100
.Append "SomeInt", adInteger
.Append "SomeDate", adDate
end with
dim dtm : dtm = Now
src.Open
src.AddNew
src("SomeString") = "Some string here"
src("SomeInt") = 12345
src("SomeDate") = dtm
src.Update
src.MoveFirst
dim target : set target = new Test_FlexMap_Class
dim result : set result = Automapper().FlexMap(src, target, empty)
T.AssertEqual "Some string here", result.SomeString, "Failed to map SomeString."
T.AssertEqual 12345, result.SomeInt, "Failed to map SomeInt."
T.AssertEqual dtm, result.SomeDate, "Failed to map SomeDate."
Destroy src
Destroy target
Destroy result
End Sub
'---------------------------------------------------------------------------------------------------------------------
Public Sub Test_From_Recordset_To_Existing_Class_Instance_Maps_Only_Specified_Fields(T)
dim src : set src = Server.CreateObject("ADODB.Recordset")
with src.Fields
.Append "SomeString", adVarChar, 100
.Append "SomeInt", adInteger
.Append "SomeDate", adDate
end with
dim dtm : dtm = Now
src.Open
src.AddNew
src("SomeString") = "Some string here"
src("SomeInt") = 12345
src("SomeDate") = dtm
src.Update
src.MoveFirst
dim target : set target = new Test_FlexMap_Class
target.SomeInt = 54321
dim result : set result = Automapper().FlexMap(src, target, array("SomeString", "SomeDate"))
T.AssertEqual "Some string here", result.SomeString, "Failed to map SomeString."
T.AssertEqual 54321, result.SomeInt, "SomeInt should have been left untouched, but was mapped anyway."
T.AssertEqual dtm, result.SomeDate, "Failed to map SomeDate."
Destroy src
Destroy target
Destroy result
End Sub
'---------------------------------------------------------------------------------------------------------------------
Public Sub Test_From_Recordset_To_New_Class_Instance_With_Empty_Fields_Array_Maps_All_Fields(T)
dim src : set src = Server.CreateObject("ADODB.Recordset")
with src.Fields
.Append "SomeString", adVarChar, 100
.Append "SomeInt", adInteger
.Append "SomeDate", adDate
end with
dim dtm : dtm = Now
src.Open
src.AddNew
src("SomeString") = "Some string here"
src("SomeInt") = 12345
src("SomeDate") = dtm
src.Update
src.MoveFirst
dim result : set result = Automapper().FlexMap(src, "Test_FlexMap_Class", empty)
T.AssertEqual "Some string here", result.SomeString, "Failed to map SomeString."
T.AssertEqual 12345, result.SomeInt, "Failed to map SomeInt."
T.AssertEqual dtm, result.SomeDate, "Failed to map SomeDate."
Destroy src
Destroy result
End Sub
'---------------------------------------------------------------------------------------------------------------------
Public Sub Test_From_Recordset_To_New_Class_Instance_Maps_Only_Specified_Fields(T)
dim src : set src = Server.CreateObject("ADODB.Recordset")
with src.Fields
.Append "SomeString", adVarChar, 100
.Append "SomeInt", adInteger
.Append "SomeDate", adDate
end with
dim dtm : dtm = Now
src.Open
src.AddNew
src("SomeString") = "Some string here"
src("SomeInt") = 12345
src("SomeDate") = dtm
src.Update
src.MoveFirst
dim result : set result = Automapper().FlexMap(src, "Test_FlexMap_Class", array("SomeString", "SomeDate"))
T.AssertEqual "Some string here", result.SomeString, "Failed to map SomeString."
T.AssertNotExists result.SomeInt, "SomeInt should have been left uninitialized, but was mapped anyway."
T.AssertEqual dtm, result.SomeDate, "Failed to map SomeDate."
Destroy src
Destroy result
End Sub
'---------------------------------------------------------------------------------------------------------------------
Public Sub Test_From_Class_Instance_To_Existing_Class_Instance_With_Empty_Fields_Array_Maps_All_Fields(T)
dim dtm : dtm = Now
dim src : set src = new Test_FlexMap_Class
src.SomeString = "Some string here"
src.SomeInt = 12345
src.SomeDate = dtm
dim target : set target = new Test_FlexMap_Class
dim result : set result = Automapper.FlexMap(src, target, empty)
T.AssertEqual "Some string here", result.SomeString, "Failed to map SomeString."
T.AssertEqual 12345, result.SomeInt, "Failed to map SomeInt."
T.AssertEqual dtm, result.SomeDate, "Failed to map SomeDate."
Destroy src
Destroy target
Destroy result
End Sub
'---------------------------------------------------------------------------------------------------------------------
Public Sub Test_From_Class_Instance_To_Existing_Class_Instance_Maps_Only_Specified_Fields(T)
dim dtm : dtm = Now
dim src : set src = new Test_FlexMap_Class
src.SomeString = "Some string here"
src.SomeInt = 12345
src.SomeDate = dtm
dim target : set target = new Test_FlexMap_Class
target.SomeInt = 54321
dim result : set result = Automapper.FlexMap(src, target, array("SomeString", "SomeDate"))
T.AssertEqual "Some string here", result.SomeString, "Failed to map SomeString."
'T.AssertNotExists result.SomeInt, "SomeInt should have been left uninitialized, but was mapped anyway."
T.AssertEqual 54321, result.SomeInt, "SomeInt should have been left alone but was mapped anyway."
T.AssertEqual dtm, result.SomeDate, "Failed to map SomeDate."
Destroy src
Destroy target
Destroy result
End Sub
'---------------------------------------------------------------------------------------------------------------------
Public Sub Test_From_Class_Instance_To_New_Class_Instance_With_Empty_Fields_Array_Maps_All_Fields(T)
dim dtm : dtm = Now
dim src : set src = new Test_FlexMap_Class
src.SomeString = "Some string here"
src.SomeInt = 12345
src.SomeDate = dtm
dim result : set result = Automapper.FlexMap(src, "Test_FlexMap_Class", empty)
T.AssertEqual "Some string here", result.SomeString, "Failed to map SomeString."
T.AssertEqual 12345, result.SomeInt, "Failed to map SomeInt."
T.AssertEqual dtm, result.SomeDate, "Failed to map SomeDate."
Destroy src
Destroy result
End Sub
'---------------------------------------------------------------------------------------------------------------------
Public Sub Test_From_Class_Instance_To_New_Class_Instance_Maps_Only_Specified_Fields(T)
dim dtm : dtm = Now
dim src : set src = new Test_FlexMap_Class
src.SomeString = "Some string here"
src.SomeInt = 12345
src.SomeDate = dtm
dim result : set result = Automapper.FlexMap(src, "Test_FlexMap_Class", array("SomeString", "SomeDate"))
T.AssertEqual "Some string here", result.SomeString, "Failed to map SomeString."
T.AssertNotExists result.SomeInt, "SomeInt should have been left uninitialized, but was mapped anyway."
T.AssertEqual dtm, result.SomeDate, "Failed to map SomeDate."
Destroy src
Destroy result
End Sub
End Class
%>

+ 24
- 0
Tests/TestCase_Automapper_Function.asp Переглянути файл

@@ -0,0 +1,24 @@
<%
'=======================================================================================================================
' Automapper Function Test Cases
'=======================================================================================================================
Class Automapper_Function_Tests
Public Sub Setup : End Sub
Public Sub Teardown : End Sub
Public Function TestCaseNames
TestCaseNames = Array("Test_Automap_Function_Returns_Instance", "Test_Automap_Function_Returns_New_Instance")
End Function
Public Sub Test_Automap_Function_Returns_Instance(T)
T.AssertEquals "Automapper_Class", typename(Automapper()), "Function Automapper() should return a new instance of Automapper_Class"
End Sub
Public Sub Test_Automap_Function_Returns_New_Instance(T)
dim a : set a = Automapper()
dim b : set b = Automapper()
T.AssertFalse (a is b), "Automapper() function should return distinct instances of the Automapper_Class"
End Sub
End Class
%>

+ 349
- 0
Tests/TestCase_EnumerableHelper.asp Переглянути файл

@@ -0,0 +1,349 @@
<%
Class EnumerableHelper_Tests
Public Sub Setup : End Sub
Public Sub Teardown : End Sub
Public Function TestCaseNames
TestCaseNames = Array("Test_Enumerable_Function_Returns_EnumerableHelper_Instance", _
"Test_Map_Returns_EnumerableHelper_Instance", _
"Test_Map_Lambda", _
"Test_Map_Proc", _
"Test_Max_Lambda", _
"Test_Max_Proc", _
"Test_Min_Lambda", _
"Test_Min_Proc", _
"Test_Take", _
"Test_TakeWhile_Lambda", _
"Test_TakeWhile_Proc", _
"Test_Sum", _
"Test_All", _
"Test_Any", _
"Test_Where_Lambda", _
"Test_Where_Proc", _
"Test_Count", _
"Test_First", _
"Test_Last", _
"Test_Chained")
End Function

'---------------------------------------------------------------------------------------------------------------------
Public Sub Test_Enumerable_Function_Returns_EnumerableHelper_Instance(T)
dim list : set list = new LinkedList_Class
dim E : set E = Enumerable(list)
T.Assert typename(E) = "EnumerableHelper_Class", "did not return correct instance"
T.Assert typename(E.Data) = "LinkedList_Class", "Data() is of type " & typename(E.Data)
End Sub

'---------------------------------------------------------------------------------------------------------------------
Public Sub Test_Map_Returns_EnumerableHelper_Instance(T)
dim list : set list = new LinkedList_Class
dim E : set E = Enumerable(list).Map("")
T.Assert typename(E) = "EnumerableHelper_Class", "returned type " & typename(E)
End Sub

'---------------------------------------------------------------------------------------------------------------------
Public Sub Test_Map_Lambda(T)
dim list : set list = OrderedList(10)
dim E : set E = Enumerable(list).Map("dim x : x = item_ + 1 : V_ = x")

T.Assert 10 = E.Data.Count, "count: " & E.Data.Count

dim A : A = list.To_Array()
dim B : B = E.Data.To_Array()

T.Assert UBound(A) = UBound(B), "A = " & UBound(A) & ", B = " & UBound(B)

dim i
For i = 0 to UBound(A)
T.Assert B(i) = A(i) + 1, "B(" & i & ") = " & B(i) & ", A(" & i & ") = " & A(i)
Next
End Sub

'---------------------------------------------------------------------------------------------------------------------
Public Sub Test_Map_Proc(T)
dim list : set list = OrderedList(10)
dim E : set E = Enumerable(list).Map(GetRef("AddOne"))

T.Assert 10 = E.Data.Count, "count: " & E.Data.Count

dim A : A = list.To_Array()
dim B : B = E.Data.To_Array()

T.Assert UBound(A) = UBound(B), "A = " & UBound(A) & ", B = " & UBound(B)

dim i
For i = 0 to UBound(A)
T.Assert B(i) = A(i) + 1, "B(" & i & ") = " & B(i) & ", A(" & i & ") = " & A(i)
Next
End Sub

'---------------------------------------------------------------------------------------------------------------------
Public Sub Test_Max_Lambda(T)
dim list : set list = new LinkedList_Class
list.Push "Alice"
list.Push "Bob"
list.Push "Charlie"
list.Push "Doug"

dim val : val = Enumerable(list).Max("len(item_)")
T.Assert 7 = val, "val = " & val
End Sub

'---------------------------------------------------------------------------------------------------------------------
Public Sub Test_Max_Proc(T)
dim list : set list = new LinkedList_Class
list.Push "Alice"
list.Push "Bob"
list.Push "Charlie"
list.Push "Doug"

dim val : val = Enumerable(list).Max(GetRef("GetLength"))
T.Assert 7 = val, "val = " & val
End Sub

'---------------------------------------------------------------------------------------------------------------------
Public Sub Test_Min_Lambda(T)
dim list : set list = new LinkedList_Class
list.Push "Alice"
list.Push "Bob"
list.Push "Charlie"
list.Push "Doug"

dim val : val = Enumerable(list).Min("len(item_)")
T.Assert 3 = val, "val = " & val
End Sub

'---------------------------------------------------------------------------------------------------------------------
Public Sub Test_Min_Proc(T)
dim list : set list = new LinkedList_Class
list.Push "Alice"
list.Push "Bob"
list.Push "Charlie"
list.Push "Doug"

dim val : val = Enumerable(list).Min(GetRef("GetLength"))
T.Assert 3 = val, "val = " & val
End Sub

'---------------------------------------------------------------------------------------------------------------------
Public Sub Test_Take(T)
dim list : set list = OrderedList(3)

dim firstTwo : set firstTwo = Enumerable(list).Take(2)

T.Assert typename(firstTwo) = "EnumerableHelper_Class", "typename = " & typename(firstTwo)

dim L : set L = firstTwo.Data
T.AssertEqual 2, L.Count, "Count = " & L.Count
T.AssertEqual 1, L.Front, "Front = " & L.Front
T.AssertEqual 2, L.Back, "Back = " & L.Back
End Sub

'---------------------------------------------------------------------------------------------------------------------
Public Sub Test_TakeWhile_Lambda(T)
dim list : set list = OrderedList(5)
dim firstTwo : set firstTwo = Enumerable(list).TakeWhile("item_ < 3")

T.Assert typename(firstTwo) = "EnumerableHelper_Class", "typename = " & typename(firstTwo)

dim L : set L = firstTwo.Data
T.AssertEqual 2, L.Count, "Count = " & L.Count
T.AssertEqual 1, L.Front, "Front = " & L.Front
T.AssertEqual 2, L.Back, "Back = " & L.Back
End Sub

'---------------------------------------------------------------------------------------------------------------------
Public Sub Test_TakeWhile_Proc(T)
dim list : set list = OrderedList(5)
dim firstTwo : set firstTwo = Enumerable(list).TakeWhile(GetRef("IsLessThanThree"))

T.Assert typename(firstTwo) = "EnumerableHelper_Class", "typename = " & typename(firstTwo)

dim L : set L = firstTwo.Data
T.AssertEqual 2, L.Count, "Count = " & L.Count
T.AssertEqual 1, L.Front, "Front = " & L.Front
T.AssertEqual 2, L.Back, "Back = " & L.Back
End Sub

'---------------------------------------------------------------------------------------------------------------------
Public Sub Test_Sum(T)
dim list : set list = OrderedList(5)
dim val : val = Enumerable(list).Sum("item_")
T.AssertEqual val, 15, "simple: val = " & val

val = Enumerable(list).Sum("item_ * item_")
T.AssertEqual val, 55, "squares: val = " & val
End Sub

'---------------------------------------------------------------------------------------------------------------------
Public Sub Test_All(T)
dim list : set list = new LinkedList_Class
list.Push "Alice"
list.Push "Bob"
list.Push "Charlie"
list.Push "Doug"

dim val
val = Enumerable(list).All("len(item_) >= 3")
T.Assert val, "Len >= 3: val = " & val

val = Enumerable(list).All("len(item_) = 3")
T.AssertFalse val, "Len = 3: val = " & val
End Sub

'---------------------------------------------------------------------------------------------------------------------
Public Sub Test_Any(T)
dim list : set list = new LinkedList_Class
list.Push "Alice"
list.Push "Bob"
list.Push "Charlie"
list.Push "Doug"

dim val
val = Enumerable(list).Any("len(item_) >= 3")
T.Assert val, "Len >= 3: val = " & val

val = Enumerable(list).Any("len(item_) < 3")
T.AssertFalse val, "Len < 3: val = " & val
End Sub

'---------------------------------------------------------------------------------------------------------------------
Public Sub Test_Where_Lambda(T)
dim list : set list = new LinkedList_Class
list.Push "Alice"
list.Push "Bob"
list.Push "Charlie"
list.Push "Doug"

dim list2

set list2 = Enumerable(list).Where("len(item_) > 4")
T.AssertEqual 2, list2.Data.Count, "list2.Count = " & list2.Data.Count

T.AssertEqual "Alice", list2.Data.Front(), "list2.Data.Front = " & list2.Data.Front()
T.AssertEqual "Charlie", list2.Data.Back(), "list2.Data.Front = " & list2.Data.Back()
End Sub

'---------------------------------------------------------------------------------------------------------------------
Public Sub Test_Where_Proc(T)
dim list : set list = new LinkedList_Class
list.Push "Alice"
list.Push "Bob"
list.Push "Charlie"
list.Push "Doug"

dim E : set E = Enumerable(list).Where(GetRef("IsMoreThanFourChars"))
T.AssertEqual 2, E.Data.Count, "E.Count = " & E.Data.Count
T.AssertEqual "Alice", E.Data.Front(), "E.Data.Front = " & E.Data.Front()
T.AssertEqual "Charlie", E.Data.Back(), "E.Data.Front = " & E.Data.Back()
End Sub

'---------------------------------------------------------------------------------------------------------------------
Public Sub Test_Count(T)
dim list : set list = OrderedList(10)
dim E : set E = Enumerable(list)
T.AssertEqual 10, E.Count(), empty
End Sub

'---------------------------------------------------------------------------------------------------------------------
Public Sub Test_First(T)
dim list : set list = OrderedList(10)
dim E : set E = Enumerable(list)
T.AssertEqual 1, E.First(), empty
End Sub

'---------------------------------------------------------------------------------------------------------------------
Public Sub Test_Last(T)
dim list : set list = OrderedList(10)
dim E : set E = Enumerable(list)
T.AssertEqual 10, E.Last(), empty
End Sub

'---------------------------------------------------------------------------------------------------------------------
Public Sub Test_Chained(T)
dim list : set list = OrderedList(10)
dim it, item

dim A : set A = Enumerable(list).Take(5).Where("item_ mod 2 <> 0")
T.AssertEqual 3, A.Data.Count, "A.Count = " & A.Data.Count
set it = A.Data.Iterator
item = it.GetNext()
T.AssertEqual 1, item, "A 1st item = " & item
item = it.GetNext()
T.AssertEqual 3, item, "A 2nd item = " & item
item = it.GetNext()
T.AssertEqual 5, item, "A 3rd item = " & item

dim B : set B = Enumerable(list).Take(5).Select("V_ = item_ * item_")
T.AssertEqual 5, B.Data.Count, "B.Count = " & B.Data.Count
set it = B.Data.Iterator
item = it.GetNext()
T.AssertEqual 1, item, "B 1st item = " & item
item = it.GetNext()
T.AssertEqual 4, item, "B 2nd item = " & item
item = it.GetNext()
T.AssertEqual 9, item, "B 3rd item = " & item
item = it.GetNext()
T.AssertEqual 16, item, "B 4th item = " & item
item = it.GetNext()
T.AssertEqual 25, item, "B 5th item = " & item

dim list2 : set list2 = new LinkedList_Class
list2.Push "Alice"
list2.Push "Bob"
list2.Push "Charlie"
list2.Push "Doug"
list2.Push "Edward"
list2.Push "Franklin"
list2.Push "George"
list2.Push "Hal"
list2.Push "Isaac"
list2.Push "Jeremy"

dim C : C = Enumerable(list2) _
.Where("len(item_) > 5") _
.Map("set V_ = new ChainedExample_Class : V_.Data = item_ : V_.Length = len(item_)") _
.Max("item_.Length")
T.AssertEqual 8, C, "C"
End Sub


End Class


Class ChainedExample_Class
Public Data
Public Length
End Class


Function OrderedList(maxnum)
dim list : set list = new LinkedList_Class
dim i
For i = 1 to maxnum
list.Push i
Next
set OrderedList = list
End Function

Function AddOne(x)
AddOne = x + 1
End Function

Function GetLength(s)
GetLength = Len(s)
End Function

Function IsLessThanThree(x)
IsLessThanThree = x < 3
End Function

Function IsMoreThanFourChars(s)
IsMoreThanFourChars = Len(s) > 4
End Function


%>

+ 16
- 0
Tests/TestCase_HtmlHelperDropdownLists.asp Переглянути файл

@@ -0,0 +1,16 @@
<%
Class HtmlHelper_Tests
Public Sub Setup : End Sub
Public Sub Teardown : End Sub

Public Function TestCaseNames
TestCaseNames = Array("Public Sub DropDownList_Should_Handle_Recordsets")

End Function

'---------------------------------------------------------------------------------------------------------------------
Public Sub DropDownList_Should_Handle_Recordsets(T)
End Sub
End Class
%>

+ 261
- 0
Tests/TestCase_Performance.asp Переглянути файл

@@ -0,0 +1,261 @@
<%
Const SMALL_SIZE = 10
Const MEDIUM_SIZE = 100
Const LARGE_SIZE = 1000
Const EXTREME_SIZE = 10000

Class Performance_Tests
Public Sub Setup : End Sub
Public Sub Teardown : End Sub
Private m_output
Private Sub Out(s)
m_output = m_output & s
End Sub
Private Sub OutLn(s)
Out s & "<br>"
End Sub
Private Sub Class_Initialize
m_output = ""
OutLn "<table width='30%'>"
End Sub
Private Sub Class_Terminate
Out "</table>"
response.write m_output
End Sub
Private Sub Header(s)
Out "<tr><th colspan='2'><h1>" & s & "</h1></th></tr>"
Out "<tr><th style='text-align: left'>Name</th><th style='text-align: left'>Duration</th></tr>"
End Sub
Private Sub Blank
Out "<tr><td>&nbsp;</td></tr>"
End Sub
Private Sub Profile(name, size, start, finish)
Out "<tr><td>" & name & " (" & size & " nodes)</td><td>" & Round(finish - start, 2) * 1000 & "ms</td></tr>"
End Sub
Public Function TestCaseNames
TestCaseNames = Array("Test_LinkedList", "Test_DynamicArray", "Test_ArrayList")
End Function
'---------------------------------------------------------------------------------------------------------------------
'Linked List Performance Tests
'---------------------------------------------------------------------------------------------------------------------
Public Sub Test_LinkedList(T)
Header "LinkedList_Class"
LL_Push SMALL_SIZE
LL_Get SMALL_SIZE
LL_Remove SMALL_SIZE
Blank
LL_Push MEDIUM_SIZE
LL_Get MEDIUM_SIZE
LL_Remove MEDIUM_SIZE
Blank
LL_Push LARGE_SIZE
LL_Get LARGE_SIZE
LL_Remove LARGE_SIZE
Blank
LL_Push EXTREME_SIZE
LL_Get EXTREME_SIZE
LL_Remove EXTREME_SIZE
End Sub
Private Sub LL_Push(num_nodes)
dim start, finish
dim list : set list = new LinkedList_Class
dim i
start = Timer
for i = 1 to num_nodes
list.Push i
next
finish = Timer
Profile "Add all nodes", num_nodes, start, finish
End Sub
Private Sub LL_Get(num_nodes)
dim start, finish
dim list : set list = new LinkedList_Class
dim i
start = Timer
dim it : set it = list.Iterator
while it.HasNext
it.GetNext
wend
finish = Timer
Profile "Get all nodes", num_nodes, start, finish
End Sub
Private Sub LL_Remove(num_nodes)
dim start, finish
dim list : set list = new LinkedList_Class
dim i
start = Timer
while list.Count > 0
list.Pop
wend
finish = Timer
Profile "Remove all nodes", num_nodes, start, finish
End Sub
'---------------------------------------------------------------------------------------------------------------------
'ArrayList Performance Tests
'---------------------------------------------------------------------------------------------------------------------
Public Sub Test_ArrayList(T)
Header ".NET ArrayList"
AL_Add SMALL_SIZE
AL_Get SMALL_SIZE
AL_Remove SMALL_SIZE
Blank
AL_Add MEDIUM_SIZE
AL_Get MEDIUM_SIZE
AL_Remove MEDIUM_SIZE
Blank
AL_Add LARGE_SIZE
AL_Get LARGE_SIZE
AL_Remove LARGE_SIZE
Blank
AL_Add EXTREME_SIZE
AL_Get EXTREME_SIZE
AL_Remove EXTREME_SIZE
End Sub
Private Sub AL_Add(num_nodes)
dim start, finish
dim list : set list = Server.CreateObject("System.Collections.ArrayList")
dim i
start = Timer
for i = 1 to num_nodes
list.Add i
next
finish = Timer
Profile "Add all nodes", num_nodes, start, finish
End Sub
Private Sub AL_Get(num_nodes)
dim start, finish
dim list : set list = Server.CreateObject("System.Collections.ArrayList")
dim i
start = Timer
dim elt
for each elt in list
'nop
next
finish = Timer
Profile "Get all nodes", num_nodes, start, finish
End Sub
Private Sub AL_Remove(num_nodes)
dim start, finish
dim list : set list = Server.CreateObject("System.Collections.ArrayList")
dim i
start = Timer
list.RemoveRange 0, list.Count
finish = Timer
Profile "Remove all nodes", num_nodes, start, finish
End Sub
'---------------------------------------------------------------------------------------------------------------------
' DynamicArray Tests
'---------------------------------------------------------------------------------------------------------------------
Public Sub Test_DynamicArray(T)
Header "DynamicArray_Class"
DA_Push SMALL_SIZE
DA_Get SMALL_SIZE
DA_Pop SMALL_SIZE
Blank
'DA_Push MEDIUM_SIZE
'DA_Get MEDIUM_SIZE
'DA_Pop MEDIUM_SIZE
'
'Blank
'
'DA_Push LARGE_SIZE
'DA_Get LARGE_SIZE
'DA_Pop LARGE_SIZE
'
'Blank
'
'DA_Push EXTREME_SIZE
'DA_Get EXTREME_SIZE
'DA_Pop EXTREME_SIZE
End Sub
Private Sub DA_Push(num_nodes)
dim start, finish
'dim arr : arr = array()
'redim arr(100)
'dim list : set list = DynamicArray(arr)
dim list : set list = DynamicArray()
dim i
start = Timer
for i = 1 to num_nodes
list.Push i
next
finish = Timer
Profile "Add all nodes", num_nodes, start, finish
End Sub
Private Sub DA_Get(num_nodes)
dim start, finish
dim list : set list = new DynamicArray_Class
dim arr : arr = array()
list.Initialize arr, 100
dim i
start = Timer
dim it : set it = list.Iterator
while it.HasNext
it.GetNext
wend
finish = Timer
Profile "Get all nodes", num_nodes, start, finish
End Sub
Private Sub DA_Pop(num_nodes)
dim start, finish
dim list : set list = new DynamicArray_Class
dim arr : arr = array()
list.Initialize arr, 100
dim i
start = Timer
while list.Count > 0
list.Pop
wend
finish = Timer
Profile "Remove all nodes", num_nodes, start, finish
End Sub
End Class
%>

+ 60
- 0
Tests/TestCase_StringBuilder.asp Переглянути файл

@@ -0,0 +1,60 @@
<%
Class StringBuilder_Tests
Public Sub Setup : End Sub
Public Sub Teardown : End Sub
Public Function TestCaseNames
TestCaseNames = Array("Test_Initialized_Object_Should_Be_Empty", _
"Test_StringBuilder_Function_Should_Return_Initialized_Object", _
"Test_Default_Property_Should_Be_String", _
"Test_Default_String_Should_Not_Have_Spaces_Between_Entries", _
"Test_Join_Should_Allow_Custom_Delimiter_Between_Entries")
End Function
'---------------------------------------------------------------------------------------------------------------------
Public Sub Test_Initialized_Object_Should_Be_Empty(T)
dim SB : set SB = new StringBuilder_Class
T.AssertEqual "", SB.TO_String, "Initialized object does not have an empty string."
set SB = Nothing
End Sub
'---------------------------------------------------------------------------------------------------------------------
Public Sub Test_StringBuilder_Function_Should_Return_Initialized_Object(T)
dim SB : set SB = new StringBuilder_Class
T.AssertEqual "", SB.TO_String, "StringBuilder() function did not return initialized object."
set SB = Nothing
End Sub
'---------------------------------------------------------------------------------------------------------------------
Public Sub Test_Default_Property_Should_Be_String(T)
dim SB : set SB = StringBuilder()
T.AssertType "String", typename( (SB) ), "Object should default to string output."
set SB = Nothing
End Sub
'---------------------------------------------------------------------------------------------------------------------
Public Sub Test_Default_String_Should_Not_Have_Spaces_Between_Entries(T)
dim SB : set SB = StringBuilder()
SB.Add "foo"
SB.Add "bar"
SB.Add "baz"
T.AssertEqual "foobarbaz", SB.TO_String, "Default string should not have spaces between entries."
set SB = Nothing
End Sub
'---------------------------------------------------------------------------------------------------------------------
Public Sub Test_Join_Should_Allow_Custom_Delimiter_Between_Entries(T)
dim SB : set SB = StringBuilder()
SB.Add "foo"
SB.Add "bar"
SB.Add "baz"
T.AssertEqual "foo bar baz", SB.Get(" "), "Get() should allow a space between entries."
T.AssertEqual "foo---bar---baz", SB.Get("---"), "Get() should allow --- between entries."
T.AssertEqual "foo" & Chr(27) & "bar" & Chr(27) & "baz", SB.Get(Chr(27)), "Get() should allow non-standard ASCII character between entries."
set SB = Nothing
End Sub
End Class
%>

+ 30
- 0
Tests/Test_All.asp Переглянути файл

@@ -0,0 +1,30 @@
<%
Option Explicit
%>
<!--#include file="../MVC/lib.all.asp"-->
<!--#include file="ASPUnit/include/ASPUnitRunner.asp"-->
<!--#include file="TestCase_Automapper_Function.asp"-->
<!--#include file="TestCase_Automapper_AutoMap.asp"-->
<!--#include file="TestCase_Automapper_FlexMap.asp"-->
<!--#include file="TestCase_Automapper_DynMap.asp"-->
<!--#include file="TestCase_StringBuilder.asp"-->
<!--#include file="TestCase_HtmlHelperDropdownLists.asp"-->

<%
'Used in some of the test case classes included into this file.
'Could remove and just use inline numbers in the classes and comment what they mean when called.
'Ref: http://www.w3schools.com/ado/ado_datatypes.asp
dim adVarChar : adVarChar = CInt(200)
dim adInteger : adInteger = CInt(3)
dim adBoolean : adBoolean = CInt(11)
dim adDate : adDate = CInt(7)


dim Runner : set Runner = new UnitRunner
Runner.AddTestContainer new Automapper_Function_Tests
Runner.AddTestContainer new AutoMap_Tests
Runner.AddTestContainer new FlexMap_Tests
Runner.AddTestContainer new DynMap_Tests
Runner.AddTestContainer new StringBuilder_Tests
Runner.Display
%>

+ 26
- 0
Tests/Test_Automapper.asp Переглянути файл

@@ -0,0 +1,26 @@
<%
Option Explicit
%>
<!--#include file="../MVC/lib.Automapper.asp"-->
<!--#include file="ASPUnit/include/ASPUnitRunner.asp"-->
<!--#include file="TestCase_Automapper_Function.asp"-->
<!--#include file="TestCase_Automapper_AutoMap.asp"-->
<!--#include file="TestCase_Automapper_FlexMap.asp"-->
<!--#include file="TestCase_Automapper_DynMap.asp"-->
<%
'Used in each of the test case classes included into this file
'could remove and just use inline numbers in the classes and comment what they mean when called
'Ref: http://www.w3schools.com/ado/ado_datatypes.asp
dim adVarChar : adVarChar = CInt(200)
dim adInteger : adInteger = CInt(3)
dim adBoolean : adBoolean = CInt(11)
dim adDate : adDate = CInt(7)


dim Runner : set Runner = new UnitRunner
Runner.AddTestContainer new Automapper_Function_Tests
Runner.AddTestContainer new AutoMap_Tests
Runner.AddTestContainer new FlexMap_Tests
Runner.AddTestContainer new DynMap_Tests
Runner.Display
%>

+ 12
- 0
Tests/Test_EnumerableHelper.asp Переглянути файл

@@ -0,0 +1,12 @@
<%
Option Explicit
%>
<!--#include file="../MVC/lib.all.asp"-->
<!--#include file="ASPUnit/include/ASPUnitRunner.asp"-->
<!--#include file="TestCase_EnumerableHelper.asp"-->
<%
dim Runner
set Runner = new UnitRunner
Runner.AddTestContainer new EnumerableHelper_Tests
Runner.Display
%>

+ 12
- 0
Tests/Test_HtmlHelper.asp Переглянути файл

@@ -0,0 +1,12 @@
<%
Option Explicit
%>
<!--#include file="../MVC/lib.Strings.asp"-->
<!--#include file="ASPUnit/include/ASPUnitRunner.asp"-->
<!--#include file="TestCase_HtmlHelperDropdownLists.asp"-->
<%
dim Runner
set Runner = new UnitRunner
Runner.AddTestContainer new HtmlHelper_Tests
Runner.Display
%>

+ 12
- 0
Tests/Test_Performance.asp Переглянути файл

@@ -0,0 +1,12 @@
<%
Option Explicit
%>
<!--#include file="../MVC/lib.all.asp"-->
<!--#include file="ASPUnit/include/ASPUnitRunner.asp"-->
<!--#include file="TestCase_Performance.asp"-->
<%
dim Runner
set Runner = new UnitRunner
Runner.AddTestContainer new Performance_Tests
Runner.Display
%>

+ 12
- 0
Tests/Test_StringBuilder.asp Переглянути файл

@@ -0,0 +1,12 @@
<%
Option Explicit
%>
<!--#include file="../MVC/lib.Strings.asp"-->
<!--#include file="ASPUnit/include/ASPUnitRunner.asp"-->
<!--#include file="TestCase_StringBuilder.asp"-->
<%
dim Runner
set Runner = new UnitRunner
Runner.AddTestContainer new StringBuilder_Tests
Runner.Display
%>

+ 3
- 0
index.asp Переглянути файл

@@ -0,0 +1,3 @@
<% Response.Redirect "App/Controllers/Jurisdiction/JurisdictionController.asp" %>



+ 10
- 0
web.config Переглянути файл

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<defaultDocument>
<files>
<add value="index.asp" />
</files>
</defaultDocument>
</system.webServer>
</configuration>

Завантаження…
Відмінити
Зберегти

Powered by TurnKey Linux.