Selaa lähdekoodia

Merge branch 'master' of http://106.12.23.251:10080/huanghb/HaBookCms

zhouj1203@hotmail.com 6 vuotta sitten
vanhempi
commit
c79ff4c2aa
100 muutettua tiedostoa jossa 10845 lisäystä ja 46965 poistoa
  1. 5 0
      HaBookCms.Admin/HaBookCms.Admin.csproj
  2. 0 56
      HaBookCms.Admin/wwwroot/css/site.css
  3. BIN
      HaBookCms.Admin/wwwroot/favicon.ico
  4. 0 4
      HaBookCms.Admin/wwwroot/js/site.js
  5. 0 22
      HaBookCms.Admin/wwwroot/lib/bootstrap/LICENSE
  6. 0 1912
      HaBookCms.Admin/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css
  7. 0 1
      HaBookCms.Admin/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css.map
  8. 0 7
      HaBookCms.Admin/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css
  9. 0 1
      HaBookCms.Admin/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css.map
  10. 0 331
      HaBookCms.Admin/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css
  11. 0 1
      HaBookCms.Admin/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css.map
  12. 0 8
      HaBookCms.Admin/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css
  13. 0 1
      HaBookCms.Admin/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css.map
  14. 0 9030
      HaBookCms.Admin/wwwroot/lib/bootstrap/dist/css/bootstrap.css
  15. 0 1
      HaBookCms.Admin/wwwroot/lib/bootstrap/dist/css/bootstrap.css.map
  16. 0 7
      HaBookCms.Admin/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css
  17. 0 1
      HaBookCms.Admin/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css.map
  18. 0 6461
      HaBookCms.Admin/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js
  19. 0 1
      HaBookCms.Admin/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map
  20. 0 7
      HaBookCms.Admin/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js
  21. 0 1
      HaBookCms.Admin/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map
  22. 0 3944
      HaBookCms.Admin/wwwroot/lib/bootstrap/dist/js/bootstrap.js
  23. 0 1
      HaBookCms.Admin/wwwroot/lib/bootstrap/dist/js/bootstrap.js.map
  24. 0 7
      HaBookCms.Admin/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js
  25. 0 1
      HaBookCms.Admin/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js.map
  26. 0 12
      HaBookCms.Admin/wwwroot/lib/jquery-validation-unobtrusive/LICENSE.txt
  27. 0 432
      HaBookCms.Admin/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js
  28. 0 5
      HaBookCms.Admin/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js
  29. 0 22
      HaBookCms.Admin/wwwroot/lib/jquery-validation/LICENSE.md
  30. 0 1158
      HaBookCms.Admin/wwwroot/lib/jquery-validation/dist/additional-methods.js
  31. 0 4
      HaBookCms.Admin/wwwroot/lib/jquery-validation/dist/additional-methods.min.js
  32. 0 1601
      HaBookCms.Admin/wwwroot/lib/jquery-validation/dist/jquery.validate.js
  33. 0 4
      HaBookCms.Admin/wwwroot/lib/jquery-validation/dist/jquery.validate.min.js
  34. 0 36
      HaBookCms.Admin/wwwroot/lib/jquery/LICENSE.txt
  35. 0 10364
      HaBookCms.Admin/wwwroot/lib/jquery/dist/jquery.js
  36. 0 2
      HaBookCms.Admin/wwwroot/lib/jquery/dist/jquery.min.js
  37. 0 1
      HaBookCms.Admin/wwwroot/lib/jquery/dist/jquery.min.map
  38. 29 13
      HaBookCms.AzureBlobStorageTest/Controllers/ValuesController.cs
  39. 4 0
      HaBookCms.AzureBlobStorageTest/HaBookCms.AzureBlobStorageTest.csproj
  40. 8 0
      HaBookCms.AzureBlobStorageTest/Startup.cs
  41. 19 1
      HaBookCms.AzureBlobStorageTest/appsettings.json
  42. 0 2
      HaBookCms.AzureStorage/AzureBlob/BlobClientSingleton.cs
  43. 1 1
      HaBookCms.AzureStorage/AzureBlob/Container/BlobContainer.cs
  44. 1 1
      HaBookCms.AzureStorage/AzureBlob/Container/FileContainer.cs
  45. 1 1
      HaBookCms.AzureStorage/AzureBlob/Container/ImageContainer.cs
  46. 13 10
      HaBookCms.AzureStorage/AzureBlob/Implement/AzureBlobDBRepository.cs
  47. 0 10
      HaBookCms.AzureStorage/AzureBlob/Interface/IAzureBlobDBRepository.cs
  48. 13 0
      HaBookCms.AzureStorage/AzureBlob/Interfaces/IAzureBlobDBRepository.cs
  49. 55 0
      HaBookCms.AzureStorage/AzureBlob/Models/AzureBlobModel.cs
  50. 10 4
      HaBookCms.AzureStorage/ServiceExtension/AzureStorageServiceCollectionExtensions.cs
  51. 3 0
      HaBookCms.Contest/ContestApp/.browserslistrc
  52. 17 0
      HaBookCms.Contest/ContestApp/.eslintrc.js
  53. 21 0
      HaBookCms.Contest/ContestApp/.gitignore
  54. 29 0
      HaBookCms.Contest/ContestApp/README.md
  55. 5 0
      HaBookCms.Contest/ContestApp/babel.config.js
  56. 5 0
      HaBookCms.Contest/ContestApp/postcss.config.js
  57. BIN
      HaBookCms.Contest/ContestApp/public/favicon.ico
  58. 17 0
      HaBookCms.Contest/ContestApp/public/index.html
  59. 45 0
      HaBookCms.Contest/ContestApp/src/App.vue
  60. BIN
      HaBookCms.Contest/ContestApp/src/assets/logo.png
  61. 58 0
      HaBookCms.Contest/ContestApp/src/components/HelloWorld.vue
  62. 14 0
      HaBookCms.Contest/ContestApp/src/main.js
  63. 28 0
      HaBookCms.Contest/ContestApp/src/router.js
  64. 16 0
      HaBookCms.Contest/ContestApp/src/store.js
  65. 5 0
      HaBookCms.Contest/ContestApp/src/views/About.vue
  66. 37 0
      HaBookCms.Contest/ContestApp/src/views/Home.vue
  67. 5 2
      HaBookCms.Contest/Controllers/HomeController.cs
  68. 60 0
      HaBookCms.Contest/Controllers/SyllabusController.cs
  69. 5 2
      HaBookCms.Contest/HaBookCms.Contest.csproj
  70. 1 0
      HaBookCms.Contest/Program.cs
  71. 27 9
      HaBookCms.Contest/Startup.cs
  72. 7 4
      HaBookCms.Contest/Views/Home/Index.cshtml
  73. 0 6
      HaBookCms.Contest/Views/Home/Privacy.cshtml
  74. 5 69
      HaBookCms.Contest/Views/Shared/_Layout.cshtml
  75. 2 1
      HaBookCms.Contest/appsettings.json
  76. 10151 0
      HaBookCms.Contest/package-lock.json
  77. 22 0
      HaBookCms.Contest/package.json
  78. 38 0
      HaBookCms.Contest/vue.config.js
  79. 35 0
      HaBookCms.Contest/webpack.config.js
  80. 1 0
      HaBookCms.Contest/wwwroot/css/index.cf62ce75.css
  81. 0 56
      HaBookCms.Contest/wwwroot/css/site.css
  82. BIN
      HaBookCms.Contest/wwwroot/favicon.ico
  83. BIN
      HaBookCms.Contest/wwwroot/img/logo.82b9c7a5.png
  84. 1 0
      HaBookCms.Contest/wwwroot/index.html
  85. 25 0
      HaBookCms.Contest/wwwroot/js/chunk-vendors.f4ae4370.js
  86. 1 0
      HaBookCms.Contest/wwwroot/js/chunk-vendors.f4ae4370.js.map
  87. 0 4
      HaBookCms.Contest/wwwroot/js/site.js
  88. 0 22
      HaBookCms.Contest/wwwroot/lib/bootstrap/LICENSE
  89. 0 1912
      HaBookCms.Contest/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css
  90. 0 1
      HaBookCms.Contest/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css.map
  91. 0 7
      HaBookCms.Contest/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css
  92. 0 1
      HaBookCms.Contest/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css.map
  93. 0 331
      HaBookCms.Contest/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css
  94. 0 1
      HaBookCms.Contest/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css.map
  95. 0 8
      HaBookCms.Contest/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css
  96. 0 1
      HaBookCms.Contest/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css.map
  97. 0 9030
      HaBookCms.Contest/wwwroot/lib/bootstrap/dist/css/bootstrap.css
  98. 0 1
      HaBookCms.Contest/wwwroot/lib/bootstrap/dist/css/bootstrap.css.map
  99. 0 7
      HaBookCms.Contest/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css
  100. 0 0
      HaBookCms.Contest/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css.map

+ 5 - 0
HaBookCms.Admin/HaBookCms.Admin.csproj

@@ -21,4 +21,9 @@
     <ProjectReference Include="..\HaBookCms.RedisStorage\HaBookCms.RedisStorage.csproj" />
   </ItemGroup>
 
+
+  <ItemGroup>
+    <Folder Include="wwwroot\" />
+  </ItemGroup>
+
 </Project>

+ 0 - 56
HaBookCms.Admin/wwwroot/css/site.css

@@ -1,56 +0,0 @@
-/* Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification
-for details on configuring this project to bundle and minify static web assets. */
-
-a.navbar-brand {
-  white-space: normal;
-  text-align: center;
-  word-break: break-all;
-}
-
-/* Sticky footer styles
--------------------------------------------------- */
-html {
-  font-size: 14px;
-}
-@media (min-width: 768px) {
-  html {
-    font-size: 16px;
-  }
-}
-
-.border-top {
-  border-top: 1px solid #e5e5e5;
-}
-.border-bottom {
-  border-bottom: 1px solid #e5e5e5;
-}
-
-.box-shadow {
-  box-shadow: 0 .25rem .75rem rgba(0, 0, 0, .05);
-}
-
-button.accept-policy {
-  font-size: 1rem;
-  line-height: inherit;
-}
-
-/* Sticky footer styles
--------------------------------------------------- */
-html {
-  position: relative;
-  min-height: 100%;
-}
-
-body {
-  /* Margin bottom by footer height */
-  margin-bottom: 60px;
-}
-.footer {
-  position: absolute;
-  bottom: 0;
-  width: 100%;
-  white-space: nowrap;
-  /* Set the fixed height of the footer here */
-  height: 60px;
-  line-height: 60px; /* Vertically center the text there */
-}

BIN
HaBookCms.Admin/wwwroot/favicon.ico


+ 0 - 4
HaBookCms.Admin/wwwroot/js/site.js

@@ -1,4 +0,0 @@
-// Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification
-// for details on configuring this project to bundle and minify static web assets.
-
-// Write your JavaScript code.

+ 0 - 22
HaBookCms.Admin/wwwroot/lib/bootstrap/LICENSE

@@ -1,22 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2011-2018 Twitter, Inc.
-Copyright (c) 2011-2018 The Bootstrap Authors
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 1912
HaBookCms.Admin/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 1
HaBookCms.Admin/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css.map


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 7
HaBookCms.Admin/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 1
HaBookCms.Admin/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css.map


+ 0 - 331
HaBookCms.Admin/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css

@@ -1,331 +0,0 @@
-/*!
- * Bootstrap Reboot v4.1.3 (https://getbootstrap.com/)
- * Copyright 2011-2018 The Bootstrap Authors
- * Copyright 2011-2018 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
- */
-*,
-*::before,
-*::after {
-  box-sizing: border-box;
-}
-
-html {
-  font-family: sans-serif;
-  line-height: 1.15;
-  -webkit-text-size-adjust: 100%;
-  -ms-text-size-adjust: 100%;
-  -ms-overflow-style: scrollbar;
-  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
-}
-
-@-ms-viewport {
-  width: device-width;
-}
-
-article, aside, figcaption, figure, footer, header, hgroup, main, nav, section {
-  display: block;
-}
-
-body {
-  margin: 0;
-  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
-  font-size: 1rem;
-  font-weight: 400;
-  line-height: 1.5;
-  color: #212529;
-  text-align: left;
-  background-color: #fff;
-}
-
-[tabindex="-1"]:focus {
-  outline: 0 !important;
-}
-
-hr {
-  box-sizing: content-box;
-  height: 0;
-  overflow: visible;
-}
-
-h1, h2, h3, h4, h5, h6 {
-  margin-top: 0;
-  margin-bottom: 0.5rem;
-}
-
-p {
-  margin-top: 0;
-  margin-bottom: 1rem;
-}
-
-abbr[title],
-abbr[data-original-title] {
-  text-decoration: underline;
-  -webkit-text-decoration: underline dotted;
-  text-decoration: underline dotted;
-  cursor: help;
-  border-bottom: 0;
-}
-
-address {
-  margin-bottom: 1rem;
-  font-style: normal;
-  line-height: inherit;
-}
-
-ol,
-ul,
-dl {
-  margin-top: 0;
-  margin-bottom: 1rem;
-}
-
-ol ol,
-ul ul,
-ol ul,
-ul ol {
-  margin-bottom: 0;
-}
-
-dt {
-  font-weight: 700;
-}
-
-dd {
-  margin-bottom: .5rem;
-  margin-left: 0;
-}
-
-blockquote {
-  margin: 0 0 1rem;
-}
-
-dfn {
-  font-style: italic;
-}
-
-b,
-strong {
-  font-weight: bolder;
-}
-
-small {
-  font-size: 80%;
-}
-
-sub,
-sup {
-  position: relative;
-  font-size: 75%;
-  line-height: 0;
-  vertical-align: baseline;
-}
-
-sub {
-  bottom: -.25em;
-}
-
-sup {
-  top: -.5em;
-}
-
-a {
-  color: #007bff;
-  text-decoration: none;
-  background-color: transparent;
-  -webkit-text-decoration-skip: objects;
-}
-
-a:hover {
-  color: #0056b3;
-  text-decoration: underline;
-}
-
-a:not([href]):not([tabindex]) {
-  color: inherit;
-  text-decoration: none;
-}
-
-a:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus {
-  color: inherit;
-  text-decoration: none;
-}
-
-a:not([href]):not([tabindex]):focus {
-  outline: 0;
-}
-
-pre,
-code,
-kbd,
-samp {
-  font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
-  font-size: 1em;
-}
-
-pre {
-  margin-top: 0;
-  margin-bottom: 1rem;
-  overflow: auto;
-  -ms-overflow-style: scrollbar;
-}
-
-figure {
-  margin: 0 0 1rem;
-}
-
-img {
-  vertical-align: middle;
-  border-style: none;
-}
-
-svg {
-  overflow: hidden;
-  vertical-align: middle;
-}
-
-table {
-  border-collapse: collapse;
-}
-
-caption {
-  padding-top: 0.75rem;
-  padding-bottom: 0.75rem;
-  color: #6c757d;
-  text-align: left;
-  caption-side: bottom;
-}
-
-th {
-  text-align: inherit;
-}
-
-label {
-  display: inline-block;
-  margin-bottom: 0.5rem;
-}
-
-button {
-  border-radius: 0;
-}
-
-button:focus {
-  outline: 1px dotted;
-  outline: 5px auto -webkit-focus-ring-color;
-}
-
-input,
-button,
-select,
-optgroup,
-textarea {
-  margin: 0;
-  font-family: inherit;
-  font-size: inherit;
-  line-height: inherit;
-}
-
-button,
-input {
-  overflow: visible;
-}
-
-button,
-select {
-  text-transform: none;
-}
-
-button,
-html [type="button"],
-[type="reset"],
-[type="submit"] {
-  -webkit-appearance: button;
-}
-
-button::-moz-focus-inner,
-[type="button"]::-moz-focus-inner,
-[type="reset"]::-moz-focus-inner,
-[type="submit"]::-moz-focus-inner {
-  padding: 0;
-  border-style: none;
-}
-
-input[type="radio"],
-input[type="checkbox"] {
-  box-sizing: border-box;
-  padding: 0;
-}
-
-input[type="date"],
-input[type="time"],
-input[type="datetime-local"],
-input[type="month"] {
-  -webkit-appearance: listbox;
-}
-
-textarea {
-  overflow: auto;
-  resize: vertical;
-}
-
-fieldset {
-  min-width: 0;
-  padding: 0;
-  margin: 0;
-  border: 0;
-}
-
-legend {
-  display: block;
-  width: 100%;
-  max-width: 100%;
-  padding: 0;
-  margin-bottom: .5rem;
-  font-size: 1.5rem;
-  line-height: inherit;
-  color: inherit;
-  white-space: normal;
-}
-
-progress {
-  vertical-align: baseline;
-}
-
-[type="number"]::-webkit-inner-spin-button,
-[type="number"]::-webkit-outer-spin-button {
-  height: auto;
-}
-
-[type="search"] {
-  outline-offset: -2px;
-  -webkit-appearance: none;
-}
-
-[type="search"]::-webkit-search-cancel-button,
-[type="search"]::-webkit-search-decoration {
-  -webkit-appearance: none;
-}
-
-::-webkit-file-upload-button {
-  font: inherit;
-  -webkit-appearance: button;
-}
-
-output {
-  display: inline-block;
-}
-
-summary {
-  display: list-item;
-  cursor: pointer;
-}
-
-template {
-  display: none;
-}
-
-[hidden] {
-  display: none !important;
-}
-/*# sourceMappingURL=bootstrap-reboot.css.map */

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 1
HaBookCms.Admin/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css.map


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 8
HaBookCms.Admin/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 1
HaBookCms.Admin/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css.map


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 9030
HaBookCms.Admin/wwwroot/lib/bootstrap/dist/css/bootstrap.css


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 1
HaBookCms.Admin/wwwroot/lib/bootstrap/dist/css/bootstrap.css.map


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 7
HaBookCms.Admin/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 1
HaBookCms.Admin/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css.map


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 6461
HaBookCms.Admin/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 1
HaBookCms.Admin/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 7
HaBookCms.Admin/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 1
HaBookCms.Admin/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 3944
HaBookCms.Admin/wwwroot/lib/bootstrap/dist/js/bootstrap.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 1
HaBookCms.Admin/wwwroot/lib/bootstrap/dist/js/bootstrap.js.map


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 7
HaBookCms.Admin/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 1
HaBookCms.Admin/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js.map


+ 0 - 12
HaBookCms.Admin/wwwroot/lib/jquery-validation-unobtrusive/LICENSE.txt

@@ -1,12 +0,0 @@
-Copyright (c) .NET Foundation. All rights reserved.
-
-Licensed under the Apache License, Version 2.0 (the "License"); you may not use
-these files except in compliance with the License. You may obtain a copy of the
-License at
-
-http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software distributed
-under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
-CONDITIONS OF ANY KIND, either express or implied. See the License for the
-specific language governing permissions and limitations under the License.

+ 0 - 432
HaBookCms.Admin/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js

@@ -1,432 +0,0 @@
-// Unobtrusive validation support library for jQuery and jQuery Validate
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-// @version v3.2.11
-
-/*jslint white: true, browser: true, onevar: true, undef: true, nomen: true, eqeqeq: true, plusplus: true, bitwise: true, regexp: true, newcap: true, immed: true, strict: false */
-/*global document: false, jQuery: false */
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        // AMD. Register as an anonymous module.
-        define("jquery.validate.unobtrusive", ['jquery-validation'], factory);
-    } else if (typeof module === 'object' && module.exports) {
-        // CommonJS-like environments that support module.exports     
-        module.exports = factory(require('jquery-validation'));
-    } else {
-        // Browser global
-        jQuery.validator.unobtrusive = factory(jQuery);
-    }
-}(function ($) {
-    var $jQval = $.validator,
-        adapters,
-        data_validation = "unobtrusiveValidation";
-
-    function setValidationValues(options, ruleName, value) {
-        options.rules[ruleName] = value;
-        if (options.message) {
-            options.messages[ruleName] = options.message;
-        }
-    }
-
-    function splitAndTrim(value) {
-        return value.replace(/^\s+|\s+$/g, "").split(/\s*,\s*/g);
-    }
-
-    function escapeAttributeValue(value) {
-        // As mentioned on http://api.jquery.com/category/selectors/
-        return value.replace(/([!"#$%&'()*+,./:;<=>?@\[\\\]^`{|}~])/g, "\\$1");
-    }
-
-    function getModelPrefix(fieldName) {
-        return fieldName.substr(0, fieldName.lastIndexOf(".") + 1);
-    }
-
-    function appendModelPrefix(value, prefix) {
-        if (value.indexOf("*.") === 0) {
-            value = value.replace("*.", prefix);
-        }
-        return value;
-    }
-
-    function onError(error, inputElement) {  // 'this' is the form element
-        var container = $(this).find("[data-valmsg-for='" + escapeAttributeValue(inputElement[0].name) + "']"),
-            replaceAttrValue = container.attr("data-valmsg-replace"),
-            replace = replaceAttrValue ? $.parseJSON(replaceAttrValue) !== false : null;
-
-        container.removeClass("field-validation-valid").addClass("field-validation-error");
-        error.data("unobtrusiveContainer", container);
-
-        if (replace) {
-            container.empty();
-            error.removeClass("input-validation-error").appendTo(container);
-        }
-        else {
-            error.hide();
-        }
-    }
-
-    function onErrors(event, validator) {  // 'this' is the form element
-        var container = $(this).find("[data-valmsg-summary=true]"),
-            list = container.find("ul");
-
-        if (list && list.length && validator.errorList.length) {
-            list.empty();
-            container.addClass("validation-summary-errors").removeClass("validation-summary-valid");
-
-            $.each(validator.errorList, function () {
-                $("<li />").html(this.message).appendTo(list);
-            });
-        }
-    }
-
-    function onSuccess(error) {  // 'this' is the form element
-        var container = error.data("unobtrusiveContainer");
-
-        if (container) {
-            var replaceAttrValue = container.attr("data-valmsg-replace"),
-                replace = replaceAttrValue ? $.parseJSON(replaceAttrValue) : null;
-
-            container.addClass("field-validation-valid").removeClass("field-validation-error");
-            error.removeData("unobtrusiveContainer");
-
-            if (replace) {
-                container.empty();
-            }
-        }
-    }
-
-    function onReset(event) {  // 'this' is the form element
-        var $form = $(this),
-            key = '__jquery_unobtrusive_validation_form_reset';
-        if ($form.data(key)) {
-            return;
-        }
-        // Set a flag that indicates we're currently resetting the form.
-        $form.data(key, true);
-        try {
-            $form.data("validator").resetForm();
-        } finally {
-            $form.removeData(key);
-        }
-
-        $form.find(".validation-summary-errors")
-            .addClass("validation-summary-valid")
-            .removeClass("validation-summary-errors");
-        $form.find(".field-validation-error")
-            .addClass("field-validation-valid")
-            .removeClass("field-validation-error")
-            .removeData("unobtrusiveContainer")
-            .find(">*")  // If we were using valmsg-replace, get the underlying error
-            .removeData("unobtrusiveContainer");
-    }
-
-    function validationInfo(form) {
-        var $form = $(form),
-            result = $form.data(data_validation),
-            onResetProxy = $.proxy(onReset, form),
-            defaultOptions = $jQval.unobtrusive.options || {},
-            execInContext = function (name, args) {
-                var func = defaultOptions[name];
-                func && $.isFunction(func) && func.apply(form, args);
-            };
-
-        if (!result) {
-            result = {
-                options: {  // options structure passed to jQuery Validate's validate() method
-                    errorClass: defaultOptions.errorClass || "input-validation-error",
-                    errorElement: defaultOptions.errorElement || "span",
-                    errorPlacement: function () {
-                        onError.apply(form, arguments);
-                        execInContext("errorPlacement", arguments);
-                    },
-                    invalidHandler: function () {
-                        onErrors.apply(form, arguments);
-                        execInContext("invalidHandler", arguments);
-                    },
-                    messages: {},
-                    rules: {},
-                    success: function () {
-                        onSuccess.apply(form, arguments);
-                        execInContext("success", arguments);
-                    }
-                },
-                attachValidation: function () {
-                    $form
-                        .off("reset." + data_validation, onResetProxy)
-                        .on("reset." + data_validation, onResetProxy)
-                        .validate(this.options);
-                },
-                validate: function () {  // a validation function that is called by unobtrusive Ajax
-                    $form.validate();
-                    return $form.valid();
-                }
-            };
-            $form.data(data_validation, result);
-        }
-
-        return result;
-    }
-
-    $jQval.unobtrusive = {
-        adapters: [],
-
-        parseElement: function (element, skipAttach) {
-            /// <summary>
-            /// Parses a single HTML element for unobtrusive validation attributes.
-            /// </summary>
-            /// <param name="element" domElement="true">The HTML element to be parsed.</param>
-            /// <param name="skipAttach" type="Boolean">[Optional] true to skip attaching the
-            /// validation to the form. If parsing just this single element, you should specify true.
-            /// If parsing several elements, you should specify false, and manually attach the validation
-            /// to the form when you are finished. The default is false.</param>
-            var $element = $(element),
-                form = $element.parents("form")[0],
-                valInfo, rules, messages;
-
-            if (!form) {  // Cannot do client-side validation without a form
-                return;
-            }
-
-            valInfo = validationInfo(form);
-            valInfo.options.rules[element.name] = rules = {};
-            valInfo.options.messages[element.name] = messages = {};
-
-            $.each(this.adapters, function () {
-                var prefix = "data-val-" + this.name,
-                    message = $element.attr(prefix),
-                    paramValues = {};
-
-                if (message !== undefined) {  // Compare against undefined, because an empty message is legal (and falsy)
-                    prefix += "-";
-
-                    $.each(this.params, function () {
-                        paramValues[this] = $element.attr(prefix + this);
-                    });
-
-                    this.adapt({
-                        element: element,
-                        form: form,
-                        message: message,
-                        params: paramValues,
-                        rules: rules,
-                        messages: messages
-                    });
-                }
-            });
-
-            $.extend(rules, { "__dummy__": true });
-
-            if (!skipAttach) {
-                valInfo.attachValidation();
-            }
-        },
-
-        parse: function (selector) {
-            /// <summary>
-            /// Parses all the HTML elements in the specified selector. It looks for input elements decorated
-            /// with the [data-val=true] attribute value and enables validation according to the data-val-*
-            /// attribute values.
-            /// </summary>
-            /// <param name="selector" type="String">Any valid jQuery selector.</param>
-
-            // $forms includes all forms in selector's DOM hierarchy (parent, children and self) that have at least one
-            // element with data-val=true
-            var $selector = $(selector),
-                $forms = $selector.parents()
-                    .addBack()
-                    .filter("form")
-                    .add($selector.find("form"))
-                    .has("[data-val=true]");
-
-            $selector.find("[data-val=true]").each(function () {
-                $jQval.unobtrusive.parseElement(this, true);
-            });
-
-            $forms.each(function () {
-                var info = validationInfo(this);
-                if (info) {
-                    info.attachValidation();
-                }
-            });
-        }
-    };
-
-    adapters = $jQval.unobtrusive.adapters;
-
-    adapters.add = function (adapterName, params, fn) {
-        /// <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation.</summary>
-        /// <param name="adapterName" type="String">The name of the adapter to be added. This matches the name used
-        /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).</param>
-        /// <param name="params" type="Array" optional="true">[Optional] An array of parameter names (strings) that will
-        /// be extracted from the data-val-nnnn-mmmm HTML attributes (where nnnn is the adapter name, and
-        /// mmmm is the parameter name).</param>
-        /// <param name="fn" type="Function">The function to call, which adapts the values from the HTML
-        /// attributes into jQuery Validate rules and/or messages.</param>
-        /// <returns type="jQuery.validator.unobtrusive.adapters" />
-        if (!fn) {  // Called with no params, just a function
-            fn = params;
-            params = [];
-        }
-        this.push({ name: adapterName, params: params, adapt: fn });
-        return this;
-    };
-
-    adapters.addBool = function (adapterName, ruleName) {
-        /// <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where
-        /// the jQuery Validate validation rule has no parameter values.</summary>
-        /// <param name="adapterName" type="String">The name of the adapter to be added. This matches the name used
-        /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).</param>
-        /// <param name="ruleName" type="String" optional="true">[Optional] The name of the jQuery Validate rule. If not provided, the value
-        /// of adapterName will be used instead.</param>
-        /// <returns type="jQuery.validator.unobtrusive.adapters" />
-        return this.add(adapterName, function (options) {
-            setValidationValues(options, ruleName || adapterName, true);
-        });
-    };
-
-    adapters.addMinMax = function (adapterName, minRuleName, maxRuleName, minMaxRuleName, minAttribute, maxAttribute) {
-        /// <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where
-        /// the jQuery Validate validation has three potential rules (one for min-only, one for max-only, and
-        /// one for min-and-max). The HTML parameters are expected to be named -min and -max.</summary>
-        /// <param name="adapterName" type="String">The name of the adapter to be added. This matches the name used
-        /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).</param>
-        /// <param name="minRuleName" type="String">The name of the jQuery Validate rule to be used when you only
-        /// have a minimum value.</param>
-        /// <param name="maxRuleName" type="String">The name of the jQuery Validate rule to be used when you only
-        /// have a maximum value.</param>
-        /// <param name="minMaxRuleName" type="String">The name of the jQuery Validate rule to be used when you
-        /// have both a minimum and maximum value.</param>
-        /// <param name="minAttribute" type="String" optional="true">[Optional] The name of the HTML attribute that
-        /// contains the minimum value. The default is "min".</param>
-        /// <param name="maxAttribute" type="String" optional="true">[Optional] The name of the HTML attribute that
-        /// contains the maximum value. The default is "max".</param>
-        /// <returns type="jQuery.validator.unobtrusive.adapters" />
-        return this.add(adapterName, [minAttribute || "min", maxAttribute || "max"], function (options) {
-            var min = options.params.min,
-                max = options.params.max;
-
-            if (min && max) {
-                setValidationValues(options, minMaxRuleName, [min, max]);
-            }
-            else if (min) {
-                setValidationValues(options, minRuleName, min);
-            }
-            else if (max) {
-                setValidationValues(options, maxRuleName, max);
-            }
-        });
-    };
-
-    adapters.addSingleVal = function (adapterName, attribute, ruleName) {
-        /// <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where
-        /// the jQuery Validate validation rule has a single value.</summary>
-        /// <param name="adapterName" type="String">The name of the adapter to be added. This matches the name used
-        /// in the data-val-nnnn HTML attribute(where nnnn is the adapter name).</param>
-        /// <param name="attribute" type="String">[Optional] The name of the HTML attribute that contains the value.
-        /// The default is "val".</param>
-        /// <param name="ruleName" type="String" optional="true">[Optional] The name of the jQuery Validate rule. If not provided, the value
-        /// of adapterName will be used instead.</param>
-        /// <returns type="jQuery.validator.unobtrusive.adapters" />
-        return this.add(adapterName, [attribute || "val"], function (options) {
-            setValidationValues(options, ruleName || adapterName, options.params[attribute]);
-        });
-    };
-
-    $jQval.addMethod("__dummy__", function (value, element, params) {
-        return true;
-    });
-
-    $jQval.addMethod("regex", function (value, element, params) {
-        var match;
-        if (this.optional(element)) {
-            return true;
-        }
-
-        match = new RegExp(params).exec(value);
-        return (match && (match.index === 0) && (match[0].length === value.length));
-    });
-
-    $jQval.addMethod("nonalphamin", function (value, element, nonalphamin) {
-        var match;
-        if (nonalphamin) {
-            match = value.match(/\W/g);
-            match = match && match.length >= nonalphamin;
-        }
-        return match;
-    });
-
-    if ($jQval.methods.extension) {
-        adapters.addSingleVal("accept", "mimtype");
-        adapters.addSingleVal("extension", "extension");
-    } else {
-        // for backward compatibility, when the 'extension' validation method does not exist, such as with versions
-        // of JQuery Validation plugin prior to 1.10, we should use the 'accept' method for
-        // validating the extension, and ignore mime-type validations as they are not supported.
-        adapters.addSingleVal("extension", "extension", "accept");
-    }
-
-    adapters.addSingleVal("regex", "pattern");
-    adapters.addBool("creditcard").addBool("date").addBool("digits").addBool("email").addBool("number").addBool("url");
-    adapters.addMinMax("length", "minlength", "maxlength", "rangelength").addMinMax("range", "min", "max", "range");
-    adapters.addMinMax("minlength", "minlength").addMinMax("maxlength", "minlength", "maxlength");
-    adapters.add("equalto", ["other"], function (options) {
-        var prefix = getModelPrefix(options.element.name),
-            other = options.params.other,
-            fullOtherName = appendModelPrefix(other, prefix),
-            element = $(options.form).find(":input").filter("[name='" + escapeAttributeValue(fullOtherName) + "']")[0];
-
-        setValidationValues(options, "equalTo", element);
-    });
-    adapters.add("required", function (options) {
-        // jQuery Validate equates "required" with "mandatory" for checkbox elements
-        if (options.element.tagName.toUpperCase() !== "INPUT" || options.element.type.toUpperCase() !== "CHECKBOX") {
-            setValidationValues(options, "required", true);
-        }
-    });
-    adapters.add("remote", ["url", "type", "additionalfields"], function (options) {
-        var value = {
-            url: options.params.url,
-            type: options.params.type || "GET",
-            data: {}
-        },
-            prefix = getModelPrefix(options.element.name);
-
-        $.each(splitAndTrim(options.params.additionalfields || options.element.name), function (i, fieldName) {
-            var paramName = appendModelPrefix(fieldName, prefix);
-            value.data[paramName] = function () {
-                var field = $(options.form).find(":input").filter("[name='" + escapeAttributeValue(paramName) + "']");
-                // For checkboxes and radio buttons, only pick up values from checked fields.
-                if (field.is(":checkbox")) {
-                    return field.filter(":checked").val() || field.filter(":hidden").val() || '';
-                }
-                else if (field.is(":radio")) {
-                    return field.filter(":checked").val() || '';
-                }
-                return field.val();
-            };
-        });
-
-        setValidationValues(options, "remote", value);
-    });
-    adapters.add("password", ["min", "nonalphamin", "regex"], function (options) {
-        if (options.params.min) {
-            setValidationValues(options, "minlength", options.params.min);
-        }
-        if (options.params.nonalphamin) {
-            setValidationValues(options, "nonalphamin", options.params.nonalphamin);
-        }
-        if (options.params.regex) {
-            setValidationValues(options, "regex", options.params.regex);
-        }
-    });
-    adapters.add("fileextensions", ["extensions"], function (options) {
-        setValidationValues(options, "extension", options.params.extensions);
-    });
-
-    $(function () {
-        $jQval.unobtrusive.parse(document);
-    });
-
-    return $jQval.unobtrusive;
-}));

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 5
HaBookCms.Admin/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js


+ 0 - 22
HaBookCms.Admin/wwwroot/lib/jquery-validation/LICENSE.md

@@ -1,22 +0,0 @@
-The MIT License (MIT)
-=====================
-
-Copyright Jörn Zaefferer
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 1158
HaBookCms.Admin/wwwroot/lib/jquery-validation/dist/additional-methods.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 4
HaBookCms.Admin/wwwroot/lib/jquery-validation/dist/additional-methods.min.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 1601
HaBookCms.Admin/wwwroot/lib/jquery-validation/dist/jquery.validate.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 4
HaBookCms.Admin/wwwroot/lib/jquery-validation/dist/jquery.validate.min.js


+ 0 - 36
HaBookCms.Admin/wwwroot/lib/jquery/LICENSE.txt

@@ -1,36 +0,0 @@
-Copyright JS Foundation and other contributors, https://js.foundation/
-
-This software consists of voluntary contributions made by many
-individuals. For exact contribution history, see the revision history
-available at https://github.com/jquery/jquery
-
-The following license applies to all parts of this software except as
-documented below:
-
-====
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-====
-
-All files located in the node_modules and external directories are
-externally maintained libraries used by this software which have their
-own licenses; we recommend you read them, as their terms may differ from
-the terms above.

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 10364
HaBookCms.Admin/wwwroot/lib/jquery/dist/jquery.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 2
HaBookCms.Admin/wwwroot/lib/jquery/dist/jquery.min.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 1
HaBookCms.Admin/wwwroot/lib/jquery/dist/jquery.min.map


+ 29 - 13
HaBookCms.AzureBlobStorageTest/Controllers/ValuesController.cs

@@ -5,6 +5,11 @@ using System.Linq;
 using System.Net.Http.Headers;
 using System.Threading.Tasks;
 using HaBookCms.AzureBlobStorageTest.Models;
+using HaBookCms.AzureStorage.AzureBlob.Container;
+using HaBookCms.AzureStorage.AzureBlob.Implements;
+using HaBookCms.AzureStorage.AzureBlob.Interfaces;
+using HaBookCms.AzureStorage.AzureBlob.Models;
+using HaBookCms.AzureStorage.AzureTable.Interfaces;
 using Microsoft.AspNetCore.Http;
 using Microsoft.AspNetCore.Mvc;
 using Microsoft.WindowsAzure.Storage;
@@ -16,6 +21,14 @@ namespace HaBookCms.AzureBlobStorageTest.Controllers
     [ApiController]
     public class ValuesController : ControllerBase
     {
+        public IAzureBlobDBRepository _azureBlobDBRepository;
+        public IAzureTableDBRepository  _azureTableDBRepository;
+        public ValuesController(IAzureBlobDBRepository azureBlobDBRepository, IAzureTableDBRepository azureTableDBRepository) {
+            _azureBlobDBRepository = azureBlobDBRepository;
+            _azureTableDBRepository = azureTableDBRepository;
+        }
+
+
         // GET api/values
         [HttpGet]
         public ActionResult<IEnumerable<string>> Get()
@@ -65,20 +78,23 @@ namespace HaBookCms.AzureBlobStorageTest.Controllers
         [HttpPost("Upload")]
         //[Produces("application/json")]
         //[Consumes("application/json", "multipart/form-data")]//此处为新增
-        public async Task<IActionResult> Upload(IFormFile[] file  )
+        public async Task<List<AzureBlobModel>> Upload(IFormFile[] file  )
         {
-            var storageAccount = CloudStorageAccount.Parse("DefaultEndpointsProtocol=https;AccountName=teammodelstorage;AccountKey=Yq7D4dE6cFuer2d2UZIccTA/i0c3sJ/6ITc8tNOyW+K5f+/lWw9GCos3Mxhj47PyWQgDL8YbVD63B9XcGtrMxQ==;EndpointSuffix=core.chinacloudapi.cn");
-            var blobClient = storageAccount.CreateCloudBlobClient();
-            var container = blobClient.GetContainerReference("staticcontent");
-            //var file = picture.File;
-            foreach (IFormFile f in file) {
-                var parsedContentDisposition =
-                ContentDispositionHeaderValue.Parse(f.ContentDisposition);
-                var filename = Path.Combine(parsedContentDisposition.FileName.Trim('"'));
-                var blockBlob = container.GetBlockBlobReference(filename+Guid.NewGuid());
-                await blockBlob.UploadFromStreamAsync(f.OpenReadStream());
-            }
-            return Ok();
+
+            //var storageAccount = CloudStorageAccount.Parse("DefaultEndpointsProtocol=https;AccountName=teammodelstorage;AccountKey=Yq7D4dE6cFuer2d2UZIccTA/i0c3sJ/6ITc8tNOyW+K5f+/lWw9GCos3Mxhj47PyWQgDL8YbVD63B9XcGtrMxQ==;EndpointSuffix=core.chinacloudapi.cn");
+            //var blobClient = storageAccount.CreateCloudBlobClient();
+            //var container = blobClient.GetContainerReference("staticcontent");
+            ////var file = picture.File;
+            //foreach (IFormFile f in file) {
+            //    var parsedContentDisposition =
+            //    ContentDispositionHeaderValue.Parse(f.ContentDisposition);
+            //    var filename = Path.Combine(parsedContentDisposition.FileName.Trim('"'));
+            //    var blockBlob = container.GetBlockBlobReference(filename+Guid.NewGuid());
+            //    await blockBlob.UploadFromStreamAsync(f.OpenReadStream());
+            //}
+           List<AzureBlobModel> blobModels=   _azureBlobDBRepository.UploadFiles(file, new FileContainer()).Result.ToList<AzureBlobModel>();
+            await _azureTableDBRepository.SaveAll<AzureBlobModel>(blobModels);
+            return blobModels;
         }
         [HttpGet("Download")]
         //[Produces("application/json")]

+ 4 - 0
HaBookCms.AzureBlobStorageTest/HaBookCms.AzureBlobStorageTest.csproj

@@ -11,4 +11,8 @@
     <PackageReference Include="WindowsAzure.Storage" Version="9.3.3" />
   </ItemGroup>
 
+  <ItemGroup>
+    <ProjectReference Include="..\HaBookCms.AzureStorage\HaBookCms.AzureStorage.csproj" />
+  </ItemGroup>
+
 </Project>

+ 8 - 0
HaBookCms.AzureBlobStorageTest/Startup.cs

@@ -2,6 +2,7 @@
 using System.Collections.Generic;
 using System.Linq;
 using System.Threading.Tasks;
+using HaBookCms.AzureStorage.ServiceExtension;
 using Microsoft.AspNetCore.Builder;
 using Microsoft.AspNetCore.Hosting;
 using Microsoft.AspNetCore.HttpsPolicy;
@@ -31,6 +32,13 @@ namespace HaBookCms.AzureBlobStorageTest
         public void ConfigureServices(IServiceCollection services)
         {
             services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
+            services.AddAzureBlobStorage().AddConnection(new AzureStorageOptions() {
+                ConnectionString=Configuration["AppSettings:Azure:StorageConnection"]
+            });
+            services.AddAzureTableStorage().AddConnection(new AzureStorageOptions()
+            {
+                ConnectionString = Configuration["AppSettings:Azure:StorageConnection"]
+            });
         }
 
         // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.

+ 19 - 1
HaBookCms.AzureBlobStorageTest/appsettings.json

@@ -5,5 +5,23 @@
       "Default": "Warning"
     }
   },
-  "AllowedHosts": "*"
+  "AllowedHosts": "*",
+  "AppSettings": {
+    //Redis»º´æ
+    "RedisCaching": {
+      "KeyPrefix": "habook:cms",
+      "Enabled": true,
+      "DataBase": 1,
+      "ConnectionString": "teammodel.redis.cache.chinacloudapi.cn:6380,password=9wcTVDiAWiAf0IF5NOjZBvYrZe9JlbEw1E3F1QFcNbo=,ssl=True,abortConnect=False"
+    },
+    //Êý¾Ý¿âÅäÖÃ
+    "Azure": {
+      "StorageConnection": "DefaultEndpointsProtocol=https;AccountName=teammodelstorage;AccountKey=Yq7D4dE6cFuer2d2UZIccTA/i0c3sJ/6ITc8tNOyW+K5f+/lWw9GCos3Mxhj47PyWQgDL8YbVD63B9XcGtrMxQ==;EndpointSuffix=core.chinacloudapi.cn",
+      "CosmosDBConnection": {
+        "AccountEndpoint": "https://teammodelostest.documents.azure.cn:443/",
+        "AccountKey": "ReGoiHuTbU4Q31YYq4NaiormE6Ci71piT7OrvTzAuhrlgt63ajdtDZmwOZKzcz6gnwR326mJp53InY7rohepQQ==",
+        "Database": "BaseActivty"
+      }
+    }
+  }
 }

+ 0 - 2
HaBookCms.AzureStorage/AzureBlob/BlobClientSingleton.cs

@@ -13,8 +13,6 @@ namespace HaBookCms.AzureStorage.AzureBlob
 
         private BlobClientSingleton() { }
 
-
-
         public CloudBlobClient GetBlobClient()
         {
             if (BlobClient != null)

+ 1 - 1
HaBookCms.AzureStorage/AzureBlob/Container/BlobContainer.cs

@@ -6,6 +6,6 @@ namespace HaBookCms.AzureStorage.AzureBlob.Container
 {
     public abstract class BlobContainer
     {
-        public string Container { get; private set; } = "DefaultContainer";
+        public string Container { get; private set; } = "defaultcontainer";
     }
 }

+ 1 - 1
HaBookCms.AzureStorage/AzureBlob/Container/FileContainer.cs

@@ -6,6 +6,6 @@ namespace HaBookCms.AzureStorage.AzureBlob.Container
 {
     public class FileContainer :BlobContainer
     {
-        public string Container { get; private set; } = "FileContainer";
+        public string Container { get; private set; } = "filecontainer";
     }
 }

+ 1 - 1
HaBookCms.AzureStorage/AzureBlob/Container/ImageContainer.cs

@@ -6,6 +6,6 @@ namespace HaBookCms.AzureStorage.AzureBlob.Container
 {
    public class ImageContainer :BlobContainer
     {
-        public string Container { get; private set; } = "ImageContainer";
+        public string Container { get; private set; } = "imagecontainer";
     }
 }

+ 13 - 10
HaBookCms.AzureStorage/AzureBlob/Implement/AzureBlobDBRepository.cs

@@ -1,5 +1,6 @@
 using HaBookCms.AzureStorage.AzureBlob.Container;
-using HaBookCms.AzureStorage.AzureBlob.Interface;
+using HaBookCms.AzureStorage.AzureBlob.Interfaces;
+using HaBookCms.AzureStorage.AzureBlob.Models;
 using HaBookCms.AzureStorage.ServiceExtension;
 using Microsoft.AspNetCore.Http;
 using Microsoft.Extensions.Options;
@@ -12,7 +13,7 @@ using System.Net.Http.Headers;
 using System.Text;
 using System.Threading.Tasks;
 
-namespace HaBookCms.AzureStorage.AzureBlob.Implement
+namespace HaBookCms.AzureStorage.AzureBlob.Implements
 {
     public  class AzureBlobDBRepository : IAzureBlobDBRepository
     {
@@ -37,21 +38,23 @@ namespace HaBookCms.AzureStorage.AzureBlob.Implement
                 blobContainer = blobClient.GetContainerReference(container);
                 await blobContainer.CreateIfNotExistsAsync();
             }
-           await UploadFiles(null, new FileContainer() );
+           //await UploadFiles(null, new FileContainer() );
         }
-        public async Task<IEnumerable<string>> UploadFiles(IFormFile[] file, BlobContainer container) {
+
+     public async Task<List<AzureBlobModel>> UploadFiles(IFormFile[] file, BlobContainer container)
+        {
             await InitializeBlob(container.Container);
-            IEnumerable<string> list = new List<string>();
+            List<AzureBlobModel> list = new List<AzureBlobModel>();
             foreach (IFormFile f in file)
             {
-                var parsedContentDisposition =
-                ContentDispositionHeaderValue.Parse(f.ContentDisposition);
+                var parsedContentDisposition = ContentDispositionHeaderValue.Parse(f.ContentDisposition);
                 var filename = Path.Combine(parsedContentDisposition.FileName.Trim('"'));
-                var blockBlob = blobContainer.GetBlockBlobReference(f.FileName + Guid.NewGuid());
+                var blockBlob = blobContainer.GetBlockBlobReference(f.FileName );
                 await blockBlob.UploadFromStreamAsync(f.OpenReadStream());
+                AzureBlobModel model = new AzureBlobModel(f, container.Container);
+                list.Add(model);
             }
-            return null;
+            return list;
         }
-
     }
 }

+ 0 - 10
HaBookCms.AzureStorage/AzureBlob/Interface/IAzureBlobDBRepository.cs

@@ -1,10 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace HaBookCms.AzureStorage.AzureBlob.Interface
-{
-    public interface  IAzureBlobDBRepository
-    {
-    }
-}

+ 13 - 0
HaBookCms.AzureStorage/AzureBlob/Interfaces/IAzureBlobDBRepository.cs

@@ -0,0 +1,13 @@
+using HaBookCms.AzureStorage.AzureBlob.Container;
+using HaBookCms.AzureStorage.AzureBlob.Models;
+using Microsoft.AspNetCore.Http;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+
+namespace HaBookCms.AzureStorage.AzureBlob.Interfaces
+{
+    public interface  IAzureBlobDBRepository
+    {
+        Task<List<AzureBlobModel>> UploadFiles(IFormFile[] file, BlobContainer container);
+    }
+}

+ 55 - 0
HaBookCms.AzureStorage/AzureBlob/Models/AzureBlobModel.cs

@@ -0,0 +1,55 @@
+using Microsoft.AspNetCore.Http;
+using Microsoft.WindowsAzure.Storage.Table;
+using System;
+
+namespace HaBookCms.AzureStorage.AzureBlob.Models
+{
+    public  class AzureBlobModel :TableEntity
+    {
+
+
+        public AzureBlobModel() {
+        }
+
+        public AzureBlobModel(IFormFile f ,string Container) {
+            ContentType = f.ContentType;
+            ContentDisposition = f.ContentDisposition;
+            FileName = f.FileName;
+            Headers = f.Headers;
+            Length = f.Length;
+            Name = f.Name;
+            UploadTime = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000;
+            PartitionKey = Container;
+            RowKey = Guid.NewGuid().ToString();
+            Extension = f.FileName.Substring(f.FileName.LastIndexOf(".") + 1, (f.FileName.Length - f.FileName.LastIndexOf(".") - 1)); //扩展名
+        }
+        //
+        // 摘要:
+        //     Gets the raw Content-Type header of the uploaded file.
+        public   string ContentType { get; set; }
+        //
+        // 摘要:
+        //     Gets the raw Content-Disposition header of the uploaded file.
+        public string ContentDisposition { get; set; }
+        //
+        // 摘要:
+        //     Gets the header dictionary of the uploaded file.
+        public IHeaderDictionary Headers { get; set; }
+        //
+        // 摘要:
+        //     Gets the file length in bytes.
+        public long Length { get; set; }
+        //
+        // 摘要:
+        //     Gets the form field name from the Content-Disposition header.
+        public string Name { get; set; }
+        //
+        // 摘要:
+        //     Gets the file name from the Content-Disposition header.
+        public string FileName { get; set; }
+        //上传时间戳
+        public long UploadTime { get; set; }
+        //上传时间戳
+        public string Extension { get; set; }
+    }
+}

+ 10 - 4
HaBookCms.AzureStorage/ServiceExtension/AzureStorageServiceCollectionExtensions.cs

@@ -1,5 +1,5 @@
-using HaBookCms.AzureStorage.AzureBlob.Implement;
-using HaBookCms.AzureStorage.AzureBlob.Interface;
+using HaBookCms.AzureStorage.AzureBlob.Implements;
+using HaBookCms.AzureStorage.AzureBlob.Interfaces;
 using HaBookCms.AzureStorage.AzureTable.Implements;
 using HaBookCms.AzureStorage.AzureTable.Interfaces;
 using Microsoft.Extensions.DependencyInjection;
@@ -9,6 +9,7 @@ namespace HaBookCms.AzureStorage.ServiceExtension
 {
     public static class AzureStorageServiceCollectionExtensions
     {
+        public static AzureStorageServiceBuilder builder { get; set; }
 
         /// <summary>
         /// 
@@ -27,7 +28,9 @@ namespace HaBookCms.AzureStorage.ServiceExtension
         /// <returns></returns>
         public static AzureStorageServiceBuilder AddAzureTableStorage(this IServiceCollection services)
         {
-            var builder = services.AddServerBuilder();
+            if (builder == null) {
+                builder = services.AddServerBuilder();
+            }
             services.AddSingleton<IAzureTableDBRepository, AzureTableDBRepository>();
             return builder;
         }
@@ -51,7 +54,10 @@ namespace HaBookCms.AzureStorage.ServiceExtension
         /// <returns></returns>
         public static AzureStorageServiceBuilder AddAzureBlobStorage(this IServiceCollection services)
         {
-            var builder = services.AddServerBuilder();
+            if (builder == null)
+            {
+                builder = services.AddServerBuilder();
+            }
             services.AddSingleton<IAzureBlobDBRepository, AzureBlobDBRepository>();
             return builder;
         }

+ 3 - 0
HaBookCms.Contest/ContestApp/.browserslistrc

@@ -0,0 +1,3 @@
+> 1%
+last 2 versions
+not ie <= 8

+ 17 - 0
HaBookCms.Contest/ContestApp/.eslintrc.js

@@ -0,0 +1,17 @@
+module.exports = {
+  root: true,
+  env: {
+    node: true
+  },
+  'extends': [
+    'plugin:vue/essential',
+    'eslint:recommended'
+  ],
+  rules: {
+    'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
+    'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off'
+  },
+  parserOptions: {
+    parser: 'babel-eslint'
+  }
+}

+ 21 - 0
HaBookCms.Contest/ContestApp/.gitignore

@@ -0,0 +1,21 @@
+.DS_Store
+node_modules
+/dist
+
+# local env files
+.env.local
+.env.*.local
+
+# Log files
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# Editor directories and files
+.idea
+.vscode
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw*

+ 29 - 0
HaBookCms.Contest/ContestApp/README.md

@@ -0,0 +1,29 @@
+# contest-app
+
+## Project setup
+```
+npm install
+```
+
+### Compiles and hot-reloads for development
+```
+npm run serve
+```
+
+### Compiles and minifies for production
+```
+npm run build
+```
+
+### Run your tests
+```
+npm run test
+```
+
+### Lints and fixes files
+```
+npm run lint
+```
+
+### Customize configuration
+See [Configuration Reference](https://cli.vuejs.org/config/).

+ 5 - 0
HaBookCms.Contest/ContestApp/babel.config.js

@@ -0,0 +1,5 @@
+module.exports = {
+  presets: [
+    '@vue/app'
+  ]
+}

+ 5 - 0
HaBookCms.Contest/ContestApp/postcss.config.js

@@ -0,0 +1,5 @@
+module.exports = {
+  plugins: {
+    autoprefixer: {}
+  }
+}

BIN
HaBookCms.Contest/ContestApp/public/favicon.ico


+ 17 - 0
HaBookCms.Contest/ContestApp/public/index.html

@@ -0,0 +1,17 @@
+<!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.0">
+    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
+    <title>contest-app</title>
+  </head>
+  <body>
+    <noscript>
+      <strong>We're sorry but contest-app doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
+    </noscript>
+    <div id="app"></div>
+    <!-- built files will be auto injected -->
+  </body>
+</html>

+ 45 - 0
HaBookCms.Contest/ContestApp/src/App.vue

@@ -0,0 +1,45 @@
+<template>
+  <div id="app">
+    <div id="nav">
+      <router-link to="/">Home</router-link> |
+      <router-link to="/about">About</router-link>
+    </div>
+    <router-view/>
+  </div>
+</template>
+<script>
+    export default {
+        name: 'app',
+        data() {
+            return {
+                msg: 'Welcome to Your Vue.js App'
+            }
+        },
+        components: {
+        },
+        mounted() {
+        }
+    }
+
+</script>
+<style>
+#app {
+  font-family: 'Avenir', Helvetica, Arial, sans-serif;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+  text-align: center;
+  color: #2c3e50;
+}
+#nav {
+  padding: 30px;
+}
+
+#nav a {
+  font-weight: bold;
+  color: #2c3e50;
+}
+
+#nav a.router-link-exact-active {
+  color: #42b983;
+}
+</style>

BIN
HaBookCms.Contest/ContestApp/src/assets/logo.png


+ 58 - 0
HaBookCms.Contest/ContestApp/src/components/HelloWorld.vue

@@ -0,0 +1,58 @@
+<template>
+  <div class="hello">
+    <h1>{{ msg }}</h1>
+    <p>
+      For a guide and recipes on how to configure / customize this project,<br>
+      check out the
+      <a href="https://cli.vuejs.org" target="_blank" rel="noopener">vue-cli documentation</a>.
+    </p>
+    <h3>Installed CLI Plugins</h3>
+    <ul>
+      <li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-babel" target="_blank" rel="noopener">babel</a></li>
+      <li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-eslint" target="_blank" rel="noopener">eslint</a></li>
+    </ul>
+    <h3>Essential Links</h3>
+    <ul>
+      <li><a href="https://vuejs.org" target="_blank" rel="noopener">Core Docs</a></li>
+      <li><a href="https://forum.vuejs.org" target="_blank" rel="noopener">Forum</a></li>
+      <li><a href="https://chat.vuejs.org" target="_blank" rel="noopener">Community Chat</a></li>
+      <li><a href="https://twitter.com/vuejs" target="_blank" rel="noopener">Twitter</a></li>
+      <li><a href="https://news.vuejs.org" target="_blank" rel="noopener">News</a></li>
+    </ul>
+    <h3>Ecosystem</h3>
+    <ul>
+      <li><a href="https://router.vuejs.org" target="_blank" rel="noopener">vue-router</a></li>
+      <li><a href="https://vuex.vuejs.org" target="_blank" rel="noopener">vuex</a></li>
+      <li><a href="https://github.com/vuejs/vue-devtools#vue-devtools" target="_blank" rel="noopener">vue-devtools</a></li>
+      <li><a href="https://vue-loader.vuejs.org" target="_blank" rel="noopener">vue-loader</a></li>
+      <li><a href="https://github.com/vuejs/awesome-vue" target="_blank" rel="noopener">awesome-vue</a></li>
+    </ul>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'HelloWorld',
+  props: {
+    msg: String
+  }
+}
+</script>
+
+<!-- Add "scoped" attribute to limit CSS to this component only -->
+<style scoped>
+h3 {
+  margin: 40px 0 0;
+}
+ul {
+  list-style-type: none;
+  padding: 0;
+}
+li {
+  display: inline-block;
+  margin: 0 10px;
+}
+a {
+  color: #42b983;
+}
+</style>

+ 14 - 0
HaBookCms.Contest/ContestApp/src/main.js

@@ -0,0 +1,14 @@
+import Vue from 'vue'
+import App from './App.vue'
+import router from './router'
+import store from './store'
+import axios from 'axios'
+
+Vue.config.productionTip = false;
+Vue.prototype.$axios = axios;
+
+new Vue({
+    router,
+    store,
+    render: h => h(App)
+}).$mount('#app')

+ 28 - 0
HaBookCms.Contest/ContestApp/src/router.js

@@ -0,0 +1,28 @@
+import Vue from 'vue'
+import Router from 'vue-router'
+import Home from './views/Home.vue'
+import About from './views/About.vue'
+
+Vue.use(Router)
+
+export default new Router({
+  mode: 'history',
+  base: process.env.BASE_URL,
+  routes: [
+    {
+      path: '/',
+      name: 'home',
+      component: Home
+    },
+    {
+      path: '/about',
+      name: 'about',
+      // route level code-splitting
+      // this generates a separate chunk (about.[hash].js) for this route
+      // which is lazy-loaded when the route is visited.
+        component: About
+      //component: () => import('./views/About.vue')
+
+    }
+  ]
+})

+ 16 - 0
HaBookCms.Contest/ContestApp/src/store.js

@@ -0,0 +1,16 @@
+import Vue from 'vue'
+import Vuex from 'vuex'
+
+Vue.use(Vuex)
+
+export default new Vuex.Store({
+  state: {
+
+  },
+  mutations: {
+
+  },
+  actions: {
+
+  }
+})

+ 5 - 0
HaBookCms.Contest/ContestApp/src/views/About.vue

@@ -0,0 +1,5 @@
+<template>
+  <div class="about">
+    <h1>This is an about page</h1>
+  </div>
+</template>

+ 37 - 0
HaBookCms.Contest/ContestApp/src/views/Home.vue

@@ -0,0 +1,37 @@
+<template>
+  <div class="home">
+    <img alt="Vue logo" src="../assets/logo.png">
+    <HelloWorld :msg="msg"/>
+  </div>
+</template>
+
+<script>
+import HelloWorld from '../components/HelloWorld.vue'
+
+    export default {
+        name: 'home',
+        components: {
+            HelloWorld
+        },
+        data() {
+            return {
+                msg: ""
+            }
+        },
+        mounted() {
+            let url = "https://localhost:44399/home/test";
+            let _this = this;
+            this.$axios.get(url).then(
+                (res) => {
+                    console.log(res);
+                    _this.msg = res.data;
+                    alert("222"+res.data);
+                },
+                (err) => {
+                    console.log(err);
+
+                }
+            )
+        }
+}
+</script>

+ 5 - 2
HaBookCms.Contest/Controllers/HomeController.cs

@@ -16,8 +16,11 @@ namespace HaBookCms.Contest.Controllers
         {
             return View();
         }
-
-        public IActionResult Privacy()
+		public string Test()
+		{
+			return "Hello .NetCore with Vue!(Data from Server)";
+		}
+		public IActionResult Privacy()
         {
             return View();
         }

+ 60 - 0
HaBookCms.Contest/Controllers/SyllabusController.cs

@@ -0,0 +1,60 @@
+using HaBookCms.AzureCosmos.CosmosDB.Interfaces;
+using HaBookCms.Core.Models.Syllabus;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Cors;
+using Microsoft.AspNetCore.Mvc;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace HaBookCms.Contest.Controllers
+{
+    [Route("api/syllabus")]
+    [ApiController]
+    public class SyllabusController : BaseController
+    {
+
+        public IAzureCosmosDBRepository _aAzureCosmosDBRepository;
+
+        public SyllabusController(IAzureCosmosDBRepository aAzureCosmosDBRepository) {
+            _aAzureCosmosDBRepository = aAzureCosmosDBRepository;
+        }
+        [HttpPost]
+        [Route("save")]
+        [EnableCors("any")]
+        [AllowAnonymous]
+        public async Task<object> Save(Syllabus root) {
+            return await _aAzureCosmosDBRepository.Save<Syllabus>(root);
+        }
+
+        [HttpGet]
+        [Route("getById")]
+        [EnableCors("any")]
+        [AllowAnonymous]
+        public object GetById(string id )
+        {
+            var ss = _aAzureCosmosDBRepository.FindAll<Syllabus>().Result.Where(s => s.id == id).ToList().SingleOrDefault();
+            if (ss != null) {
+                return ss;
+            }
+            else { return "";  }
+             
+        }
+
+        [HttpGet]
+        [Route("getAll")]
+        [EnableCors("any")]
+        [AllowAnonymous]
+        public object GetAll()
+        {
+            List<Syllabus>syllabi=   _aAzureCosmosDBRepository.FindAll<Syllabus>().Result;
+
+            if (syllabi != null)
+            {
+                return syllabi;
+            }
+            else { return ""; }
+        }
+    }
+}

+ 5 - 2
HaBookCms.Contest/HaBookCms.Contest.csproj

@@ -1,4 +1,4 @@
-<Project Sdk="Microsoft.NET.Sdk.Web">
+<Project Sdk="Microsoft.NET.Sdk.Web">
 
   <PropertyGroup>
     <TargetFramework>netcoreapp2.2</TargetFramework>
@@ -13,6 +13,7 @@
 
 
   <ItemGroup>
+    <ProjectReference Include="..\HaBookCms.AzureCosmos\HaBookCms.AzureCosmos.csproj" />
     <ProjectReference Include="..\HaBookCms.AzureStorage\HaBookCms.AzureStorage.csproj" />
     <ProjectReference Include="..\HaBookCms.Common\HaBookCms.Common.csproj" />
     <ProjectReference Include="..\HaBookCms.ContextConfig\HaBookCms.ContextConfig.csproj" />
@@ -20,5 +21,7 @@
     <ProjectReference Include="..\HaBookCms.Jwt\HaBookCms.Jwt.csproj" />
     <ProjectReference Include="..\HaBookCms.RedisStorage\HaBookCms.RedisStorage.csproj" />
   </ItemGroup>
-
+  <Target Name="PrecompileScript" BeforeTargets="BeforeBuild">
+    <Exec Command="npm run build" />
+  </Target>
 </Project>

+ 1 - 0
HaBookCms.Contest/Program.cs

@@ -19,6 +19,7 @@ namespace HaBookCms.Contest
 
         public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
             WebHost.CreateDefaultBuilder(args)
+             .UseUrls("http://*:5000")
                 .UseStartup<Startup>();
     }
 }

+ 27 - 9
HaBookCms.Contest/Startup.cs

@@ -5,12 +5,15 @@ using System.Security.Claims;
 using System.Text;
 using System.Text.Encodings.Web;
 using System.Text.Unicode;
+using HaBookCms.AzureCosmos.ServiceExtension;
 using HaBookCms.AzureStorage.ServiceExtension;
 using HaBookCms.Common.LogHelper;
+using HaBookCms.ContextConfig.Attributes;
 using HaBookCms.ContextConfig.Exceptions;
 using HaBookCms.Jwt.Filter;
 using HaBookCms.Jwt.Model;
 using HaBookCms.RedisStorage.Cache;
+using HaBookCms.ServiceOptions.Options;
 using log4net;
 using log4net.Config;
 using log4net.Repository;
@@ -21,7 +24,6 @@ using Microsoft.AspNetCore.Hosting;
 using Microsoft.AspNetCore.Http;
 using Microsoft.AspNetCore.HttpOverrides;
 using Microsoft.AspNetCore.Mvc;
-using Microsoft.AspNetCore.SpaServices.Webpack;
 using Microsoft.Extensions.Configuration;
 using Microsoft.Extensions.DependencyInjection;
 using Microsoft.IdentityModel.Tokens;
@@ -65,7 +67,11 @@ namespace HaBookCms.Contest
                 options.MinimumSameSitePolicy = SameSiteMode.None;
             });
 
-
+            services.AddAzureCosmosDB().AddCosmosDBConnection(new AzureCosmosDBOptions() {
+                ConnectionString = Configuration["AppSettings:Azure:CosmosDBConnection:AccountEndpoint"],
+                ConnectionKey= Configuration["AppSettings:Azure:CosmosDBConnection:AccountKey"],
+                Database = Configuration["AppSettings:Azure:CosmosDBConnection:Database"],
+            });
             services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
             //services.AddMvc().AddMvcOptions(
             //    option =>
@@ -195,7 +201,16 @@ namespace HaBookCms.Contest
             #region 性能 压缩
             services.AddResponseCompression();
             #endregion
-        }
+
+            //跨域//设置了允许所有来源
+            services.AddCors(options =>
+                options.AddPolicy("any",
+                    builder => builder.AllowAnyMethod().AllowAnyHeader().AllowAnyOrigin().AllowCredentials()));
+            services.AddMvc(options =>
+            {
+                options.Filters.Add(new AllowCorsAttribute());
+            });
+         }
 
         // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
         public void Configure(IApplicationBuilder app, IHostingEnvironment env)
@@ -203,11 +218,11 @@ namespace HaBookCms.Contest
             if (env.IsDevelopment())
             {
                 app.UseDeveloperExceptionPage();
-                //app.UseWebpackDevMiddleware(new WebpackDevMiddlewareOptions
-                //{
-                //    HotModuleReplacement = true
-                //});
-            }
+				//app.UseWebpackDevMiddleware(new WebpackDevMiddlewareOptions
+				//{
+				//	HotModuleReplacement = true
+				//});
+			}
             else
             {
                 app.UseExceptionHandler("/Home/Error");
@@ -248,7 +263,10 @@ namespace HaBookCms.Contest
                 routes.MapRoute(
                     name: "default",
                     template: "{controller=Home}/{action=Index}/{id?}");
-            });
+				routes.MapSpaFallbackRoute(
+					name: "spa-fallback",
+					defaults: new { controller = "Home", action = "Index" });
+			});
         }
     }
 }

+ 7 - 4
HaBookCms.Contest/Views/Home/Index.cshtml

@@ -1,8 +1,11 @@
 @{
     ViewData["Title"] = "Home Page";
 }
-
-<div class="text-center">
-    <h1 class="display-4">Welcome</h1>
-    <p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
+<!DOCTYPE html>
+<link href="~/css/index.cf62ce75.css" rel=stylesheet>
+<div id="app">
 </div>
+@section scripts {
+    <script src="~/js/chunk-vendors.f4ae4370.js" asp-append-version="true"></script>
+    <script src="~/main.js" asp-append-version="true"></script>
+}

+ 0 - 6
HaBookCms.Contest/Views/Home/Privacy.cshtml

@@ -1,6 +0,0 @@
-@{
-    ViewData["Title"] = "Privacy Policy";
-}
-<h1>@ViewData["Title"]</h1>
-
-<p>Use this page to detail your site's privacy policy.</p>

+ 5 - 69
HaBookCms.Contest/Views/Shared/_Layout.cshtml

@@ -3,75 +3,11 @@
 <head>
     <meta charset="utf-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <title>@ViewData["Title"] - HaBookCms.Contest</title>
-
-    <environment include="Development">
-        <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
-    </environment>
-    <environment exclude="Development">
-        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/css/bootstrap.min.css"
-              asp-fallback-href="~/lib/bootstrap/dist/css/bootstrap.min.css"
-              asp-fallback-test-class="sr-only" asp-fallback-test-property="position" asp-fallback-test-value="absolute"
-              crossorigin="anonymous"
-              integrity="sha256-eSi1q2PG6J7g7ib17yAaWMcrr5GrtohYChqibrV7PBE="/>
-    </environment>
-    <link rel="stylesheet" href="~/css/site.css" />
+    <title>@ViewData["Title"]</title>
+    <base href="~/" />
 </head>
 <body>
-    <header>
-        <nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
-            <div class="container">
-                <a class="navbar-brand" asp-area="" asp-controller="Home" asp-action="Index">HaBookCms.Contest</a>
-                <button class="navbar-toggler" type="button" data-toggle="collapse" data-target=".navbar-collapse" aria-controls="navbarSupportedContent"
-                        aria-expanded="false" aria-label="Toggle navigation">
-                    <span class="navbar-toggler-icon"></span>
-                </button>
-                <div class="navbar-collapse collapse d-sm-inline-flex flex-sm-row-reverse">
-                    <ul class="navbar-nav flex-grow-1">
-                        <li class="nav-item">
-                            <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Index">Home</a>
-                        </li>
-                        <li class="nav-item">
-                            <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
-                        </li>
-                    </ul>
-                </div>
-            </div>
-        </nav>
-    </header>
-    <div class="container">
-        <partial name="_CookieConsentPartial" />
-        <main role="main" class="pb-3">
-            @RenderBody()
-        </main>
-    </div>
-
-    <footer class="border-top footer text-muted">
-        <div class="container">
-            &copy; 2018 - HaBookCms.Contest - <a asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
-        </div>
-    </footer>
-
-    <environment include="Development">
-        <script src="~/lib/jquery/dist/jquery.js"></script>
-        <script src="~/lib/bootstrap/dist/js/bootstrap.bundle.js"></script>
-    </environment>
-    <environment exclude="Development">
-        <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"
-                asp-fallback-src="~/lib/jquery/dist/jquery.min.js"
-                asp-fallback-test="window.jQuery"
-                crossorigin="anonymous"
-                integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=">
-        </script>
-        <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/js/bootstrap.bundle.min.js"
-                asp-fallback-src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"
-                asp-fallback-test="window.jQuery && window.jQuery.fn && window.jQuery.fn.modal"
-                crossorigin="anonymous"
-                integrity="sha256-E/V4cWE4qvAeO5MOhjtGtqDzPndRO1LBk8lJ/PR7CA4=">
-        </script>
-    </environment>
-    <script src="~/js/site.js" asp-append-version="true"></script>
-
-    @RenderSection("Scripts", required: false)
+    @RenderBody()
+    @RenderSection("scripts", required: false)
 </body>
-</html>
+</html>

+ 2 - 1
HaBookCms.Contest/appsettings.json

@@ -19,7 +19,8 @@
       "StorageConnection": "DefaultEndpointsProtocol=https;AccountName=teammodelstorage;AccountKey=Yq7D4dE6cFuer2d2UZIccTA/i0c3sJ/6ITc8tNOyW+K5f+/lWw9GCos3Mxhj47PyWQgDL8YbVD63B9XcGtrMxQ==;EndpointSuffix=core.chinacloudapi.cn",
       "CosmosDBConnection": {
         "AccountEndpoint": "https://teammodelostest.documents.azure.cn:443/",
-        "AccountKey": "ReGoiHuTbU4Q31YYq4NaiormE6Ci71piT7OrvTzAuhrlgt63ajdtDZmwOZKzcz6gnwR326mJp53InY7rohepQQ=="
+        "AccountKey": "ReGoiHuTbU4Q31YYq4NaiormE6Ci71piT7OrvTzAuhrlgt63ajdtDZmwOZKzcz6gnwR326mJp53InY7rohepQQ==",
+        "Database": "BaseActivty"
       }
     }
   },

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 10151 - 0
HaBookCms.Contest/package-lock.json


+ 22 - 0
HaBookCms.Contest/package.json

@@ -0,0 +1,22 @@
+{
+  "name": "contest-app",
+  "version": "0.1.0",
+  "private": true,
+  "scripts": {
+    "serve": "vue-cli-service serve",
+    "build": "vue-cli-service build"
+  },
+  "dependencies": {
+    "aspnet-webpack": "^3.0.0",
+    "axios": "^0.18.0",
+    "babel-plugin-dynamic-import-webpack": "^1.1.0",
+    "vue": "^2.5.21",
+    "vue-router": "^3.0.1",
+    "vuex": "^3.0.1"
+  },
+  "devDependencies": {
+    "@vue/cli-plugin-babel": "^3.3.0",
+    "@vue/cli-service": "^3.3.0",
+    "vue-template-compiler": "^2.5.21"
+  }
+}

+ 38 - 0
HaBookCms.Contest/vue.config.js

@@ -0,0 +1,38 @@
+const Config = require('webpack-chain');
+const config = new Config();
+module.exports = {
+    baseUrl: '/',
+    outputDir: './wwwroot',
+    lintOnSave: true,
+    runtimeCompiler: true, 
+    devServer: {
+        open: process.platform === 'darwin',
+        host: '0.0.0.0',
+        port: 8080,
+        https: false,
+        hotOnly: false,
+        proxy: null, // string | Object
+        before: app => { }
+    },
+    pages: {
+        index: {
+            entry: './ContestApp/src/main.js'
+        }
+    },
+    chainWebpack: config => {
+        config
+            // Interact with entry points
+            .entry('index')
+            .add('./ContestApp/src/main.js')
+            .end()
+            // Modify output settings
+            .output
+            .filename('main.js');
+        
+        //pluginOptions: {
+        //        "dynamic-import-webpack"
+        //}
+        //config.plugin('dynamic-import-webpack');
+        
+    }
+}

+ 35 - 0
HaBookCms.Contest/webpack.config.js

@@ -0,0 +1,35 @@
+const Config = require('webpack-chain');
+const config = new Config();
+module.exports = {
+    baseUrl: '/',
+    outputDir: './wwwroot',
+    lintOnSave: true,
+    runtimeCompiler: true, 
+    devServer: {
+        open: process.platform === 'darwin',
+        host: '0.0.0.0',
+        port: 8080,
+        https: false,
+        hotOnly: false,
+        proxy: null, // string | Object
+        before: app => { }
+    },
+    pages: {
+        index: {
+            entry: './ContestApp/src/main.js'
+        }
+    },
+    chainWebpack: config => {
+        config
+            // Interact with entry points
+            .entry('index')
+            .add('./ContestApp/src/main.js')
+            .end()
+            // Modify output settings
+            .output
+            .filename('main.js');
+        
+        // Create named rules which can be modified later
+        
+    }
+}

+ 1 - 0
HaBookCms.Contest/wwwroot/css/index.cf62ce75.css

@@ -0,0 +1 @@
+#app{font-family:Avenir,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;color:#2c3e50}#nav{padding:30px}#nav a{font-weight:700;color:#2c3e50}#nav a.router-link-exact-active{color:#42b983}h3[data-v-050b4833]{margin:40px 0 0}ul[data-v-050b4833]{list-style-type:none;padding:0}li[data-v-050b4833]{display:inline-block;margin:0 10px}a[data-v-050b4833]{color:#42b983}

+ 0 - 56
HaBookCms.Contest/wwwroot/css/site.css

@@ -1,56 +0,0 @@
-/* Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification
-for details on configuring this project to bundle and minify static web assets. */
-
-a.navbar-brand {
-  white-space: normal;
-  text-align: center;
-  word-break: break-all;
-}
-
-/* Sticky footer styles
--------------------------------------------------- */
-html {
-  font-size: 14px;
-}
-@media (min-width: 768px) {
-  html {
-    font-size: 16px;
-  }
-}
-
-.border-top {
-  border-top: 1px solid #e5e5e5;
-}
-.border-bottom {
-  border-bottom: 1px solid #e5e5e5;
-}
-
-.box-shadow {
-  box-shadow: 0 .25rem .75rem rgba(0, 0, 0, .05);
-}
-
-button.accept-policy {
-  font-size: 1rem;
-  line-height: inherit;
-}
-
-/* Sticky footer styles
--------------------------------------------------- */
-html {
-  position: relative;
-  min-height: 100%;
-}
-
-body {
-  /* Margin bottom by footer height */
-  margin-bottom: 60px;
-}
-.footer {
-  position: absolute;
-  bottom: 0;
-  width: 100%;
-  white-space: nowrap;
-  /* Set the fixed height of the footer here */
-  height: 60px;
-  line-height: 60px; /* Vertically center the text there */
-}

BIN
HaBookCms.Contest/wwwroot/favicon.ico


BIN
HaBookCms.Contest/wwwroot/img/logo.82b9c7a5.png


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1 - 0
HaBookCms.Contest/wwwroot/index.html


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 25 - 0
HaBookCms.Contest/wwwroot/js/chunk-vendors.f4ae4370.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1 - 0
HaBookCms.Contest/wwwroot/js/chunk-vendors.f4ae4370.js.map


+ 0 - 4
HaBookCms.Contest/wwwroot/js/site.js

@@ -1,4 +0,0 @@
-// Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification
-// for details on configuring this project to bundle and minify static web assets.
-
-// Write your JavaScript code.

+ 0 - 22
HaBookCms.Contest/wwwroot/lib/bootstrap/LICENSE

@@ -1,22 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2011-2018 Twitter, Inc.
-Copyright (c) 2011-2018 The Bootstrap Authors
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 1912
HaBookCms.Contest/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 1
HaBookCms.Contest/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css.map


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 7
HaBookCms.Contest/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 1
HaBookCms.Contest/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css.map


+ 0 - 331
HaBookCms.Contest/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css

@@ -1,331 +0,0 @@
-/*!
- * Bootstrap Reboot v4.1.3 (https://getbootstrap.com/)
- * Copyright 2011-2018 The Bootstrap Authors
- * Copyright 2011-2018 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
- */
-*,
-*::before,
-*::after {
-  box-sizing: border-box;
-}
-
-html {
-  font-family: sans-serif;
-  line-height: 1.15;
-  -webkit-text-size-adjust: 100%;
-  -ms-text-size-adjust: 100%;
-  -ms-overflow-style: scrollbar;
-  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
-}
-
-@-ms-viewport {
-  width: device-width;
-}
-
-article, aside, figcaption, figure, footer, header, hgroup, main, nav, section {
-  display: block;
-}
-
-body {
-  margin: 0;
-  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
-  font-size: 1rem;
-  font-weight: 400;
-  line-height: 1.5;
-  color: #212529;
-  text-align: left;
-  background-color: #fff;
-}
-
-[tabindex="-1"]:focus {
-  outline: 0 !important;
-}
-
-hr {
-  box-sizing: content-box;
-  height: 0;
-  overflow: visible;
-}
-
-h1, h2, h3, h4, h5, h6 {
-  margin-top: 0;
-  margin-bottom: 0.5rem;
-}
-
-p {
-  margin-top: 0;
-  margin-bottom: 1rem;
-}
-
-abbr[title],
-abbr[data-original-title] {
-  text-decoration: underline;
-  -webkit-text-decoration: underline dotted;
-  text-decoration: underline dotted;
-  cursor: help;
-  border-bottom: 0;
-}
-
-address {
-  margin-bottom: 1rem;
-  font-style: normal;
-  line-height: inherit;
-}
-
-ol,
-ul,
-dl {
-  margin-top: 0;
-  margin-bottom: 1rem;
-}
-
-ol ol,
-ul ul,
-ol ul,
-ul ol {
-  margin-bottom: 0;
-}
-
-dt {
-  font-weight: 700;
-}
-
-dd {
-  margin-bottom: .5rem;
-  margin-left: 0;
-}
-
-blockquote {
-  margin: 0 0 1rem;
-}
-
-dfn {
-  font-style: italic;
-}
-
-b,
-strong {
-  font-weight: bolder;
-}
-
-small {
-  font-size: 80%;
-}
-
-sub,
-sup {
-  position: relative;
-  font-size: 75%;
-  line-height: 0;
-  vertical-align: baseline;
-}
-
-sub {
-  bottom: -.25em;
-}
-
-sup {
-  top: -.5em;
-}
-
-a {
-  color: #007bff;
-  text-decoration: none;
-  background-color: transparent;
-  -webkit-text-decoration-skip: objects;
-}
-
-a:hover {
-  color: #0056b3;
-  text-decoration: underline;
-}
-
-a:not([href]):not([tabindex]) {
-  color: inherit;
-  text-decoration: none;
-}
-
-a:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus {
-  color: inherit;
-  text-decoration: none;
-}
-
-a:not([href]):not([tabindex]):focus {
-  outline: 0;
-}
-
-pre,
-code,
-kbd,
-samp {
-  font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
-  font-size: 1em;
-}
-
-pre {
-  margin-top: 0;
-  margin-bottom: 1rem;
-  overflow: auto;
-  -ms-overflow-style: scrollbar;
-}
-
-figure {
-  margin: 0 0 1rem;
-}
-
-img {
-  vertical-align: middle;
-  border-style: none;
-}
-
-svg {
-  overflow: hidden;
-  vertical-align: middle;
-}
-
-table {
-  border-collapse: collapse;
-}
-
-caption {
-  padding-top: 0.75rem;
-  padding-bottom: 0.75rem;
-  color: #6c757d;
-  text-align: left;
-  caption-side: bottom;
-}
-
-th {
-  text-align: inherit;
-}
-
-label {
-  display: inline-block;
-  margin-bottom: 0.5rem;
-}
-
-button {
-  border-radius: 0;
-}
-
-button:focus {
-  outline: 1px dotted;
-  outline: 5px auto -webkit-focus-ring-color;
-}
-
-input,
-button,
-select,
-optgroup,
-textarea {
-  margin: 0;
-  font-family: inherit;
-  font-size: inherit;
-  line-height: inherit;
-}
-
-button,
-input {
-  overflow: visible;
-}
-
-button,
-select {
-  text-transform: none;
-}
-
-button,
-html [type="button"],
-[type="reset"],
-[type="submit"] {
-  -webkit-appearance: button;
-}
-
-button::-moz-focus-inner,
-[type="button"]::-moz-focus-inner,
-[type="reset"]::-moz-focus-inner,
-[type="submit"]::-moz-focus-inner {
-  padding: 0;
-  border-style: none;
-}
-
-input[type="radio"],
-input[type="checkbox"] {
-  box-sizing: border-box;
-  padding: 0;
-}
-
-input[type="date"],
-input[type="time"],
-input[type="datetime-local"],
-input[type="month"] {
-  -webkit-appearance: listbox;
-}
-
-textarea {
-  overflow: auto;
-  resize: vertical;
-}
-
-fieldset {
-  min-width: 0;
-  padding: 0;
-  margin: 0;
-  border: 0;
-}
-
-legend {
-  display: block;
-  width: 100%;
-  max-width: 100%;
-  padding: 0;
-  margin-bottom: .5rem;
-  font-size: 1.5rem;
-  line-height: inherit;
-  color: inherit;
-  white-space: normal;
-}
-
-progress {
-  vertical-align: baseline;
-}
-
-[type="number"]::-webkit-inner-spin-button,
-[type="number"]::-webkit-outer-spin-button {
-  height: auto;
-}
-
-[type="search"] {
-  outline-offset: -2px;
-  -webkit-appearance: none;
-}
-
-[type="search"]::-webkit-search-cancel-button,
-[type="search"]::-webkit-search-decoration {
-  -webkit-appearance: none;
-}
-
-::-webkit-file-upload-button {
-  font: inherit;
-  -webkit-appearance: button;
-}
-
-output {
-  display: inline-block;
-}
-
-summary {
-  display: list-item;
-  cursor: pointer;
-}
-
-template {
-  display: none;
-}
-
-[hidden] {
-  display: none !important;
-}
-/*# sourceMappingURL=bootstrap-reboot.css.map */

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 1
HaBookCms.Contest/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css.map


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 8
HaBookCms.Contest/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 1
HaBookCms.Contest/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css.map


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 9030
HaBookCms.Contest/wwwroot/lib/bootstrap/dist/css/bootstrap.css


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 1
HaBookCms.Contest/wwwroot/lib/bootstrap/dist/css/bootstrap.css.map


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 7
HaBookCms.Contest/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css


+ 0 - 0
HaBookCms.Contest/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css.map


Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä