From 1c3e84f5ec767824606d0a106842140f4d3d7ed7 Mon Sep 17 00:00:00 2001 From: "Daniel J. Summers" Date: Mon, 22 Aug 2016 22:39:49 -0500 Subject: [PATCH] .NET Core / Nancy 2 migration in progress Only 55 build errors to go! :/ What remains is things that do not exist in .NET Core yet, or API changes (specifically with Nancy and NodaTime). --- src/MyWebLog.App/AdminModule.fs | 7 +- src/MyWebLog.App/App.fs | 31 +- src/MyWebLog.App/CategoryModule.fs | 17 +- src/MyWebLog.App/MyWebLog.App.fsproj | 302 -------- src/MyWebLog.App/MyWebLog.App.xproj | 21 + src/MyWebLog.App/PageModule.fs | 38 +- src/MyWebLog.App/PostModule.fs | 38 +- src/MyWebLog.App/UserModule.fs | 13 +- src/MyWebLog.App/ViewModels.fs | 15 +- src/MyWebLog.App/paket.references | 7 - src/MyWebLog.App/project.json | 48 ++ src/MyWebLog.Data.RethinkDB/Category.fs | 40 +- .../MyWebLog.Data.RethinkDB.fsproj | 161 ---- .../MyWebLog.Data.RethinkDB.xproj | 21 + src/MyWebLog.Data.RethinkDB/Page.fs | 39 +- src/MyWebLog.Data.RethinkDB/Post.fs | 2 - src/MyWebLog.Data.RethinkDB/paket.references | 2 - src/MyWebLog.Data.RethinkDB/project.json | 37 + src/MyWebLog.Entities/AssemblyInfo.fs | 21 + .../MyWebLog.Entities.fsproj | 91 --- src/MyWebLog.Entities/MyWebLog.Entities.xproj | 21 + src/MyWebLog.Entities/paket.references | 1 - src/MyWebLog.Entities/project.json | 28 + src/MyWebLog.Logic/AssemblyInfo.fs | 21 + src/MyWebLog.Logic/MyWebLog.Logic.fsproj | 81 -- src/MyWebLog.Logic/MyWebLog.Logic.xproj | 21 + src/MyWebLog.Logic/project.json | 31 + src/MyWebLog.Resources/AssemblyInfo.fs | 25 + src/MyWebLog.Resources/Library.fs | 40 + .../MyWebLog.Resources.xproj | 21 + src/MyWebLog.Resources/en-US.json | 73 ++ src/MyWebLog.Resources/project.json | 30 + src/MyWebLog/MyWebLog.xproj | 21 + src/MyWebLog/project.json | 24 + .../Properties/AssemblyInfo.cs | 17 - src/myWebLog.Resources/Resources.Designer.cs | 702 ------------------ src/myWebLog.Resources/Resources.resx | 333 --------- .../myWebLog.Resources.csproj | 64 -- src/myWebLog.sln | 50 +- src/myWebLog/Properties/AssemblyInfo.cs | 4 +- src/myWebLog/myWebLog.csproj | 16 - 41 files changed, 679 insertions(+), 1896 deletions(-) delete mode 100644 src/MyWebLog.App/MyWebLog.App.fsproj create mode 100644 src/MyWebLog.App/MyWebLog.App.xproj delete mode 100644 src/MyWebLog.App/paket.references create mode 100644 src/MyWebLog.App/project.json delete mode 100644 src/MyWebLog.Data.RethinkDB/MyWebLog.Data.RethinkDB.fsproj create mode 100644 src/MyWebLog.Data.RethinkDB/MyWebLog.Data.RethinkDB.xproj delete mode 100644 src/MyWebLog.Data.RethinkDB/paket.references create mode 100644 src/MyWebLog.Data.RethinkDB/project.json create mode 100644 src/MyWebLog.Entities/AssemblyInfo.fs delete mode 100644 src/MyWebLog.Entities/MyWebLog.Entities.fsproj create mode 100644 src/MyWebLog.Entities/MyWebLog.Entities.xproj delete mode 100644 src/MyWebLog.Entities/paket.references create mode 100644 src/MyWebLog.Entities/project.json create mode 100644 src/MyWebLog.Logic/AssemblyInfo.fs delete mode 100644 src/MyWebLog.Logic/MyWebLog.Logic.fsproj create mode 100644 src/MyWebLog.Logic/MyWebLog.Logic.xproj create mode 100644 src/MyWebLog.Logic/project.json create mode 100644 src/MyWebLog.Resources/AssemblyInfo.fs create mode 100644 src/MyWebLog.Resources/Library.fs create mode 100644 src/MyWebLog.Resources/MyWebLog.Resources.xproj create mode 100644 src/MyWebLog.Resources/en-US.json create mode 100644 src/MyWebLog.Resources/project.json create mode 100644 src/MyWebLog/MyWebLog.xproj create mode 100644 src/MyWebLog/project.json delete mode 100644 src/myWebLog.Resources/Properties/AssemblyInfo.cs delete mode 100644 src/myWebLog.Resources/Resources.Designer.cs delete mode 100644 src/myWebLog.Resources/Resources.resx delete mode 100644 src/myWebLog.Resources/myWebLog.Resources.csproj diff --git a/src/MyWebLog.App/AdminModule.fs b/src/MyWebLog.App/AdminModule.fs index 4a1ec4a..a828c66 100644 --- a/src/MyWebLog.App/AdminModule.fs +++ b/src/MyWebLog.App/AdminModule.fs @@ -3,6 +3,7 @@ open MyWebLog.Data open MyWebLog.Entities open MyWebLog.Logic.WebLog +open MyWebLog.Resources open Nancy open RethinkDb.Driver.Net @@ -11,11 +12,11 @@ type AdminModule(data : IMyWebLogData) as this = inherit NancyModule("/admin") do - this.Get.["/"] <- fun _ -> this.Dashboard () + this.Get("/", fun _ -> this.Dashboard ()) /// Admin dashboard - member this.Dashboard () = + member this.Dashboard () : obj = this.RequiresAccessLevel AuthorizationLevel.Administrator let model = DashboardModel(this.Context, this.WebLog, findDashboardCounts data this.WebLog.Id) - model.PageTitle <- Resources.Dashboard + model.PageTitle <- Strings.get "Dashboard" upcast this.View.["admin/dashboard", model] diff --git a/src/MyWebLog.App/App.fs b/src/MyWebLog.App/App.fs index fd707e8..b55bff5 100644 --- a/src/MyWebLog.App/App.fs +++ b/src/MyWebLog.App/App.fs @@ -1,10 +1,14 @@ module MyWebLog.App +open Microsoft.AspNetCore.Builder +open Microsoft.AspNetCore.Hosting +open Microsoft.Extensions.Configuration open MyWebLog open MyWebLog.Data open MyWebLog.Data.RethinkDB open MyWebLog.Entities open MyWebLog.Logic.WebLog +open MyWebLog.Resources open Nancy open Nancy.Authentication.Forms open Nancy.Bootstrapper @@ -19,16 +23,14 @@ open Nancy.TinyIoc open Nancy.ViewEngines.SuperSimpleViewEngine open NodaTime open RethinkDb.Driver.Net -open Suave -open Suave.Owin open System -open System.Configuration open System.IO +open System.Reflection open System.Text.RegularExpressions /// Establish the configuration for this instance let cfg = try AppConfig.FromJson (System.IO.File.ReadAllText "config.json") - with ex -> raise <| ApplicationException(Resources.ErrBadAppConfig, ex) + with ex -> raise <| Exception (Strings.get "ErrBadAppConfig", ex) let data : IMyWebLogData = upcast RethinkMyWebLogData(cfg.DataConfig.Conn, cfg.DataConfig) @@ -40,9 +42,7 @@ type TranslateTokenViewEngineMatcher() = static let regex = Regex("@Translate\.(?[a-zA-Z0-9-_]+);?", RegexOptions.Compiled) interface ISuperSimpleViewEngineMatcher with member this.Invoke (content, model, host) = - let translate (m : Match) = - let key = m.Groups.["TranslationKey"].Value - match MyWebLog.Resources.ResourceManager.GetString key with null -> key | xlat -> xlat + let translate (m : Match) = Strings.get m.Groups.["TranslationKey"].Value regex.Replace(content, translate) @@ -120,7 +120,7 @@ type MyWebLogBootstrapper() = let version = - let v = Reflection.Assembly.GetExecutingAssembly().GetName().Version + let v = typeof.GetType().GetTypeInfo().Assembly.GetName().Version match v.Build with | 0 -> match v.Minor with 0 -> string v.Major | _ -> sprintf "%d.%d" v.Major v.Minor | _ -> sprintf "%d.%d.%d" v.Major v.Minor v.Build @@ -135,13 +135,22 @@ type RequestEnvironment() = match tryFindWebLogByUrlBase data ctx.Request.Url.HostName with | Some webLog -> ctx.Items.[Keys.WebLog] <- webLog | None -> // TODO: redirect to domain set up page - ApplicationException (sprintf "%s %s" ctx.Request.Url.HostName Resources.ErrNotConfigured) + Exception (sprintf "%s %s" ctx.Request.Url.HostName (Strings.get "ErrNotConfigured")) |> raise ctx.Items.[Keys.Version] <- version null pipelines.BeforeRequest.AddItemToStartOfPipeline establishEnv -let app = OwinApp.ofMidFunc "/" (NancyMiddleware.UseNancy (NancyOptions())) +type Startup() = + member this.Configure (app : IApplicationBuilder) = + app.UseOwin(fun x -> x.UseNancy() |> ignore) |> ignore -let Run () = startWebServer defaultConfig app // webPart + +let Run () = + WebHostBuilder() + .UseContentRoot(System.IO.Directory.GetCurrentDirectory()) + .UseKestrel() + .UseStartup() + .Build() + .Run() diff --git a/src/MyWebLog.App/CategoryModule.fs b/src/MyWebLog.App/CategoryModule.fs index 73aba5f..4db2534 100644 --- a/src/MyWebLog.App/CategoryModule.fs +++ b/src/MyWebLog.App/CategoryModule.fs @@ -3,6 +3,7 @@ open MyWebLog.Data open MyWebLog.Logic.Category open MyWebLog.Entities +open MyWebLog.Resources open Nancy open Nancy.ModelBinding open Nancy.Security @@ -13,13 +14,13 @@ type CategoryModule(data : IMyWebLogData) as this = inherit NancyModule() do - this.Get .["/categories" ] <- fun _ -> this.CategoryList () - this.Get .["/category/{id}/edit" ] <- fun parms -> this.EditCategory (downcast parms) - this.Post .["/category/{id}/edit" ] <- fun parms -> this.SaveCategory (downcast parms) - this.Delete.["/category/{id}/delete"] <- fun parms -> this.DeleteCategory (downcast parms) + this.Get ("/categories", fun _ -> this.CategoryList ()) + this.Get ("/category/{id}/edit", fun parms -> this.EditCategory (downcast parms)) + this.Post ("/category/{id}/edit", fun parms -> this.SaveCategory (downcast parms)) + this.Delete("/category/{id}/delete", fun parms -> this.DeleteCategory (downcast parms)) /// Display a list of categories - member this.CategoryList () = + member this.CategoryList () : obj = this.RequiresAccessLevel AuthorizationLevel.Administrator let model = CategoryListModel(this.Context, this.WebLog, (findAllCategories data this.WebLog.Id @@ -67,8 +68,8 @@ type CategoryModule(data : IMyWebLogData) as this = { UserMessage.Empty with Level = Level.Info Message = System.String.Format - (Resources.MsgCategoryEditSuccess, - (match catId with "new" -> Resources.Added | _ -> Resources.Updated)) } + (Strings.get "MsgCategoryEditSuccess", + Strings.get (match catId with "new" -> "Added" | _ -> "Updated")) } |> model.AddMessage this.Redirect (sprintf "/category/%s/edit" newCatId) model | _ -> this.NotFound () @@ -82,7 +83,7 @@ type CategoryModule(data : IMyWebLogData) as this = | Some cat -> deleteCategory data cat let model = MyWebLogModel(this.Context, this.WebLog) { UserMessage.Empty with Level = Level.Info - Message = System.String.Format(Resources.MsgCategoryDeleted, cat.Name) } + Message = System.String.Format(Strings.get "MsgCategoryDeleted", cat.Name) } |> model.AddMessage this.Redirect "/categories" model | _ -> this.NotFound () diff --git a/src/MyWebLog.App/MyWebLog.App.fsproj b/src/MyWebLog.App/MyWebLog.App.fsproj deleted file mode 100644 index 1b629d8..0000000 --- a/src/MyWebLog.App/MyWebLog.App.fsproj +++ /dev/null @@ -1,302 +0,0 @@ - - - - - Debug - AnyCPU - 2.0 - 9cea3a8b-e8aa-44e6-9f5f-2095ceed54eb - Library - MyWebLog.App - MyWebLog.App - v4.5.2 - 4.4.0.0 - MyWebLog.App - - - true - full - false - false - bin\Debug\ - DEBUG;TRACE - 3 - bin\Debug\MyWebLog.App.xml - - - pdbonly - true - true - bin\Release\ - TRACE - 3 - bin\Release\MyWebLog.App.xml - - - - - True - - - - - - - - - - - - - - - - - - - - - - MyWebLog.Data.RethinkDB - {d6c2be5e-883a-4f34-9905-b730543ca380} - True - - - MyWebLog.Entities - {a87f3cf5-2189-442b-8acf-929f5153ac22} - True - - - MyWebLog.Logic - {29f6eda3-4f43-4bb3-9c63-ae238a9b7f12} - True - - - MyWebLog.Resources - {a12ea8da-88bc-4447-90cb-a0e2dcc37523} - True - - - - 11 - - - - - $(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\3.0\Framework\v4.0\Microsoft.FSharp.Targets - - - - - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets - - - - - - - - - - ..\packages\Common.Logging\lib\net40\Common.Logging.dll - True - True - - - - - - - - - ..\packages\Common.Logging.Core\lib\net40\Common.Logging.Core.dll - True - True - - - - - - - - - ..\packages\FSharp.Compiler.Service\lib\net40\FSharp.Compiler.Service.dll - True - True - - - - - - - ..\packages\FSharp.Compiler.Service\lib\net45\FSharp.Compiler.Service.dll - True - True - - - - - - - - - ..\packages\FSharp.Formatting\lib\net40\CSharpFormat.dll - True - True - - - ..\packages\FSharp.Formatting\lib\net40\FSharp.CodeFormat.dll - True - True - - - ..\packages\FSharp.Formatting\lib\net40\FSharp.Formatting.Common.dll - True - True - - - ..\packages\FSharp.Formatting\lib\net40\FSharp.Literate.dll - True - True - - - ..\packages\FSharp.Formatting\lib\net40\FSharp.Markdown.dll - True - True - - - ..\packages\FSharp.Formatting\lib\net40\FSharp.MetadataFormat.dll - True - True - - - ..\packages\FSharp.Formatting\lib\net40\RazorEngine.dll - True - True - - - ..\packages\FSharp.Formatting\lib\net40\System.Web.Razor.dll - True - True - - - - - - - - - ..\packages\FSharpVSPowerTools.Core\lib\net45\FSharpVSPowerTools.Core.dll - True - True - - - - - - - - - ..\packages\Nancy\lib\net40\Nancy.dll - True - True - - - - - - - - - ..\packages\Nancy.Authentication.Forms\lib\net40\Nancy.Authentication.Forms.dll - True - True - - - - - - - - - ..\packages\Nancy.Session.Persistable\lib\net452\Nancy.Session.Persistable.dll - True - True - - - - - - - - - ..\packages\Nancy.Session.RethinkDB\lib\net452\Nancy.Session.RethinkDb.dll - True - True - - - - - - - - - ..\packages\Newtonsoft.Json\lib\net40\Newtonsoft.Json.dll - True - True - - - - - - - ..\packages\Newtonsoft.Json\lib\net45\Newtonsoft.Json.dll - True - True - - - - - - - - - ..\packages\NodaTime\lib\net35-Client\NodaTime.dll - True - True - - - True - - - - - - - - - ..\packages\RethinkDb.Driver\lib\net45\RethinkDb.Driver.dll - True - True - - - - - - - - - ..\packages\Suave\lib\net40\Suave.dll - True - True - - - - - \ No newline at end of file diff --git a/src/MyWebLog.App/MyWebLog.App.xproj b/src/MyWebLog.App/MyWebLog.App.xproj new file mode 100644 index 0000000..eb039d1 --- /dev/null +++ b/src/MyWebLog.App/MyWebLog.App.xproj @@ -0,0 +1,21 @@ + + + + 14.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + + + 9cea3a8b-e8aa-44e6-9f5f-2095ceed54eb + Nancy.Session.Persistable + .\obj + .\bin\ + v4.5.2 + + + + 2.0 + + + diff --git a/src/MyWebLog.App/PageModule.fs b/src/MyWebLog.App/PageModule.fs index 130a3ca..dcb24df 100644 --- a/src/MyWebLog.App/PageModule.fs +++ b/src/MyWebLog.App/PageModule.fs @@ -4,6 +4,7 @@ open FSharp.Markdown open MyWebLog.Data open MyWebLog.Entities open MyWebLog.Logic.Page +open MyWebLog.Resources open Nancy open Nancy.ModelBinding open Nancy.Security @@ -15,10 +16,10 @@ type PageModule(data : IMyWebLogData, clock : IClock) as this = inherit NancyModule() do - this.Get .["/pages" ] <- fun _ -> this.PageList () - this.Get .["/page/{id}/edit" ] <- fun parms -> this.EditPage (downcast parms) - this.Post .["/page/{id}/edit" ] <- fun parms -> this.SavePage (downcast parms) - this.Delete.["/page/{id}/delete"] <- fun parms -> this.DeletePage (downcast parms) + this.Get ("/pages", fun _ -> this.PageList ()) + this.Get ("/page/{id}/edit", fun parms -> this.EditPage (downcast parms)) + this.Post ("/page/{id}/edit", fun parms -> this.SavePage (downcast parms)) + this.Delete("/page/{id}/delete", fun parms -> this.DeletePage (downcast parms)) /// List all pages member this.PageList () = @@ -32,18 +33,17 @@ type PageModule(data : IMyWebLogData, clock : IClock) as this = member this.EditPage (parameters : DynamicDictionary) = this.RequiresAccessLevel AuthorizationLevel.Administrator let pageId = parameters.["id"].ToString () - match (match pageId with - | "new" -> Some Page.Empty - | _ -> tryFindPage data this.WebLog.Id pageId) with - | Some page -> let rev = match page.Revisions - |> List.sortByDescending (fun r -> r.AsOf) - |> List.tryHead with - | Some r -> r - | _ -> Revision.Empty - let model = EditPageModel(this.Context, this.WebLog, page, rev) - model.PageTitle <- match pageId with "new" -> Resources.AddNewPage | _ -> Resources.EditPage - upcast this.View.["admin/page/edit", model] - | _ -> this.NotFound () + match pageId with "new" -> Some Page.Empty | _ -> tryFindPage data this.WebLog.Id pageId + |> function + | Some page -> let rev = match page.Revisions + |> List.sortByDescending (fun r -> r.AsOf) + |> List.tryHead with + | Some r -> r + | _ -> Revision.Empty + let model = EditPageModel(this.Context, this.WebLog, page, rev) + model.PageTitle <- Strings.get <| match pageId with "new" -> "AddNewPage" | _ -> "EditPage" + upcast this.View.["admin/page/edit", model] + | _ -> this.NotFound () /// Save a page member this.SavePage (parameters : DynamicDictionary) = @@ -70,8 +70,8 @@ type PageModule(data : IMyWebLogData, clock : IClock) as this = { UserMessage.Empty with Level = Level.Info Message = System.String.Format - (Resources.MsgPageEditSuccess, - (match pageId with "new" -> Resources.Added | _ -> Resources.Updated)) } + (Strings.get "MsgPageEditSuccess", + Strings.get (match pageId with "new" -> "Added" | _ -> "Updated")) } |> model.AddMessage this.Redirect (sprintf "/page/%s/edit" pId) model | _ -> this.NotFound () @@ -85,7 +85,7 @@ type PageModule(data : IMyWebLogData, clock : IClock) as this = | Some page -> deletePage data page.WebLogId page.Id let model = MyWebLogModel(this.Context, this.WebLog) { UserMessage.Empty with Level = Level.Info - Message = Resources.MsgPageDeleted } + Message = Strings.get "MsgPageDeleted" } |> model.AddMessage this.Redirect "/pages" model | _ -> this.NotFound () diff --git a/src/MyWebLog.App/PostModule.fs b/src/MyWebLog.App/PostModule.fs index f4a3018..7b61779 100644 --- a/src/MyWebLog.App/PostModule.fs +++ b/src/MyWebLog.App/PostModule.fs @@ -1,11 +1,11 @@ namespace MyWebLog -open FSharp.Markdown open MyWebLog.Data open MyWebLog.Entities open MyWebLog.Logic.Category open MyWebLog.Logic.Page open MyWebLog.Logic.Post +open MyWebLog.Resources open Nancy open Nancy.ModelBinding open Nancy.Security @@ -58,18 +58,18 @@ type PostModule(data : IMyWebLogData, clock : IClock) as this = upcast this.Response.FromStream(stream, sprintf "application/%s+xml" format) do - this.Get .["/" ] <- fun _ -> this.HomePage () - this.Get .["/{permalink*}" ] <- fun parms -> this.CatchAll (downcast parms) - this.Get .["/posts/page/{page:int}" ] <- fun parms -> this.PublishedPostsPage (getPage <| downcast parms) - this.Get .["/category/{slug}" ] <- fun parms -> this.CategorizedPosts (downcast parms) - this.Get .["/category/{slug}/page/{page:int}"] <- fun parms -> this.CategorizedPosts (downcast parms) - this.Get .["/tag/{tag}" ] <- fun parms -> this.TaggedPosts (downcast parms) - this.Get .["/tag/{tag}/page/{page:int}" ] <- fun parms -> this.TaggedPosts (downcast parms) - this.Get .["/feed" ] <- fun _ -> this.Feed () - this.Get .["/posts/list" ] <- fun _ -> this.PostList 1 - this.Get .["/posts/list/page/{page:int}" ] <- fun parms -> this.PostList (getPage <| downcast parms) - this.Get .["/post/{postId}/edit" ] <- fun parms -> this.EditPost (downcast parms) - this.Post.["/post/{postId}/edit" ] <- fun parms -> this.SavePost (downcast parms) + this.Get ("/", fun _ -> this.HomePage ()) + this.Get ("/{permalink*}", fun parms -> this.CatchAll (downcast parms)) + this.Get ("/posts/page/{page:int}", fun parms -> this.PublishedPostsPage (getPage <| downcast parms)) + this.Get ("/category/{slug}", fun parms -> this.CategorizedPosts (downcast parms)) + this.Get ("/category/{slug}/page/{page:int}", fun parms -> this.CategorizedPosts (downcast parms)) + this.Get ("/tag/{tag}", fun parms -> this.TaggedPosts (downcast parms)) + this.Get ("/tag/{tag}/page/{page:int}", fun parms -> this.TaggedPosts (downcast parms)) + this.Get ("/feed", fun _ -> this.Feed ()) + this.Get ("/posts/list", fun _ -> this.PostList 1) + this.Get ("/posts/list/page/{page:int}", fun parms -> this.PostList (getPage <| downcast parms)) + this.Get ("/post/{postId}/edit", fun parms -> this.EditPost (downcast parms)) + this.Post("/post/{postId}/edit", fun parms -> this.SavePost (downcast parms)) // ---- Display posts to users ---- @@ -87,7 +87,7 @@ type PostModule(data : IMyWebLogData, clock : IClock) as this = | true -> false | _ -> Option.isSome <| tryFindOlderPost data (List.head model.Posts).Post model.UrlPrefix <- "/posts" - model.PageTitle <- match pageNbr with 1 -> "" | _ -> sprintf "%s%i" Resources.PageHash pageNbr + model.PageTitle <- match pageNbr with 1 -> "" | _ -> sprintf "%s%i" (Strings.get "PageHash") pageNbr this.ThemedView "index" model /// Display either the newest posts or the configured home page @@ -187,7 +187,7 @@ type PostModule(data : IMyWebLogData, clock : IClock) as this = model.HasNewer <- pageNbr > 1 model.HasOlder <- List.length model.Posts > 24 model.UrlPrefix <- "/posts/list" - model.PageTitle <- Resources.Posts + model.PageTitle <- Strings.get "Posts" upcast this.View.["admin/post/list", model] /// Edit a post @@ -206,7 +206,7 @@ type PostModule(data : IMyWebLogData, clock : IClock) as this = sprintf "%s%s" (String.replicate (snd cat) "     ") (fst cat).Name) - model.PageTitle <- match post.Id with "new" -> Resources.AddNewPost | _ -> Resources.EditPost + model.PageTitle <- Strings.get <| match post.Id with "new" -> "AddNewPost" | _ -> "EditPost" upcast this.View.["admin/post/edit"] | _ -> this.NotFound () @@ -248,9 +248,9 @@ type PostModule(data : IMyWebLogData, clock : IClock) as this = { UserMessage.Empty with Level = Level.Info Message = System.String.Format - (Resources.MsgPostEditSuccess, - (match postId with "new" -> Resources.Added | _ -> Resources.Updated), - (match justPublished with true -> Resources.AndPublished | _ -> "")) } + (Strings.get "MsgPostEditSuccess", + Strings.get (match postId with "new" -> "Added" | _ -> "Updated"), + (match justPublished with true -> Strings.get "AndPublished" | _ -> "")) } |> model.AddMessage this.Redirect (sprintf "/post/%s/edit" pId) model | _ -> this.NotFound () diff --git a/src/MyWebLog.App/UserModule.fs b/src/MyWebLog.App/UserModule.fs index 1dc6b8f..4742da7 100644 --- a/src/MyWebLog.App/UserModule.fs +++ b/src/MyWebLog.App/UserModule.fs @@ -3,6 +3,7 @@ open MyWebLog.Data open MyWebLog.Entities open MyWebLog.Logic.User +open MyWebLog.Resources open Nancy open Nancy.Authentication.Forms open Nancy.Cryptography @@ -22,9 +23,9 @@ type UserModule(data : IMyWebLogData, cfg : AppConfig) as this = |> Seq.fold (fun acc byt -> sprintf "%s%s" acc (byt.ToString "x2")) "" do - this.Get .["/logon" ] <- fun _ -> this.ShowLogOn () - this.Post.["/logon" ] <- fun parms -> this.DoLogOn (downcast parms) - this.Get .["/logoff"] <- fun _ -> this.LogOff () + this.Get ("/logon", fun _ -> this.ShowLogOn ()) + this.Post("/logon", fun parms -> this.DoLogOn (downcast parms)) + this.Get ("/logoff", fun _ -> this.LogOff ()) /// Show the log on page member this.ShowLogOn () = @@ -41,14 +42,14 @@ type UserModule(data : IMyWebLogData, cfg : AppConfig) as this = match tryUserLogOn data form.Email (pbkdf2 form.Password) with | Some user -> this.Session.[Keys.User] <- user { UserMessage.Empty with Level = Level.Info - Message = Resources.MsgLogOnSuccess } + Message = Strings.get "MsgLogOnSuccess" } |> model.AddMessage this.Redirect "" model |> ignore // Save the messages in the session before the Nancy redirect // TODO: investigate if addMessage should update the session when it's called upcast this.LoginAndRedirect (System.Guid.Parse user.Id, fallbackRedirectUrl = defaultArg (Option.ofObj form.ReturnUrl) "/") | _ -> { UserMessage.Empty with Level = Level.Error - Message = Resources.ErrBadLogOnAttempt } + Message = Strings.get "ErrBadLogOnAttempt" } |> model.AddMessage this.Redirect (sprintf "/user/logon?returnUrl=%s" form.ReturnUrl) model @@ -59,7 +60,7 @@ type UserModule(data : IMyWebLogData, cfg : AppConfig) as this = this.Session.DeleteAll () let model = MyWebLogModel(this.Context, this.WebLog) { UserMessage.Empty with Level = Level.Info - Message = Resources.MsgLogOffSuccess } + Message = Strings.get "MsgLogOffSuccess" } |> model.AddMessage this.Redirect "" model |> ignore upcast this.LogoutAndRedirect "/" diff --git a/src/MyWebLog.App/ViewModels.fs b/src/MyWebLog.App/ViewModels.fs index 7670570..427bcac 100644 --- a/src/MyWebLog.App/ViewModels.fs +++ b/src/MyWebLog.App/ViewModels.fs @@ -2,6 +2,7 @@ open MyWebLog.Entities open MyWebLog.Logic.WebLog +open MyWebLog.Resources open Nancy open Nancy.Session.Persistable open Newtonsoft.Json @@ -41,15 +42,15 @@ with member this.ToDisplay = let classAndLabel = dict [ - Level.Error, ("danger", Resources.Error) - Level.Warning, ("warning", Resources.Warning) + Level.Error, ("danger", Strings.get "Error") + Level.Warning, ("warning", Strings.get "Warning") Level.Info, ("info", "") ] seq { yield "
" match snd classAndLabel.[this.Level] with | "" -> () @@ -136,12 +137,12 @@ type MyWebLogModel(ctx : NancyContext, webLog : WebLog) = member this.FooterLogo = seq { yield "\"myWebLog\"" } |> Seq.reduce (+) @@ -337,7 +338,7 @@ type PostForDisplay(webLog : WebLog, post : Post) = | 0 -> "" | 1 | 2 | 3 | 4 | 5 -> this.Post.Tags |> pipedTags | count -> sprintf "%s %s" (this.Post.Tags |> List.take 3 |> pipedTags) - (System.String.Format(Resources.andXMore, count - 3)) + (System.String.Format(Strings.get "andXMore", count - 3)) /// Model for all page-of-posts pages diff --git a/src/MyWebLog.App/paket.references b/src/MyWebLog.App/paket.references deleted file mode 100644 index baa3c1b..0000000 --- a/src/MyWebLog.App/paket.references +++ /dev/null @@ -1,7 +0,0 @@ -FSharp.Formatting -Nancy -Nancy.Authentication.Forms -Nancy.Session.RethinkDB -NodaTime -RethinkDb.Driver -Suave \ No newline at end of file diff --git a/src/MyWebLog.App/project.json b/src/MyWebLog.App/project.json new file mode 100644 index 0000000..3337bdd --- /dev/null +++ b/src/MyWebLog.App/project.json @@ -0,0 +1,48 @@ +{ + "buildOptions": { + "compilerName": "fsc", + "compile": { + "includeFiles": [ + "AssemblyInfo.fs", + "Keys.fs", + "AppConfig.fs", + "ViewModels.fs", + "ModuleExtensions.fs", + "AdminModule.fs", + "CategoryModule.fs", + "PageModule.fs", + "PostModule.fs", + "UserModule.fs", + "App.fs" + ] + } + }, + "dependencies": { + "Microsoft.AspNetCore.Hosting": "1.0.0", + "Microsoft.AspNetCore.Owin": "1.0.0", + "Microsoft.AspNetCore.Server.Kestrel": "1.0.0", + "Microsoft.Extensions.Configuration.Json": "1.0.0", + "MyWebLog.Data.RethinkDB": "0.9.2", + "MyWebLog.Entities": "0.9.2", + "MyWebLog.Logic": "0.9.2", + "MyWebLog.Resources": "0.9.2", + "Nancy": "2.0.0-barneyrubble", + "Nancy.Authentication.Forms": "2.0.0-barneyrubble", + "Nancy.Session.Persistable": "0.9.1-pre", + "Nancy.Session.RethinkDB": "0.9.1-pre", + "NodaTime": "2.0.0-alpha20160729" + }, + "frameworks": { + "netstandard1.6": { + "imports": "dnxcore50", + "dependencies": { + "Microsoft.FSharp.Core.netcore": "1.0.0-alpha-160629", + "NETStandard.Library": "1.6.0" + } + } + }, + "tools": { + "dotnet-compile-fsc": "1.0.0-preview2-*" + }, + "version": "0.9.2" +} diff --git a/src/MyWebLog.Data.RethinkDB/Category.fs b/src/MyWebLog.Data.RethinkDB/Category.fs index da98279..fdd4acd 100644 --- a/src/MyWebLog.Data.RethinkDB/Category.fs +++ b/src/MyWebLog.Data.RethinkDB/Category.fs @@ -1,9 +1,7 @@ module MyWebLog.Data.RethinkDB.Category -open FSharp.Interop.Dynamic open MyWebLog.Entities open RethinkDb.Driver.Ast -open System.Dynamic let private r = RethinkDb.Driver.RethinkDB.R @@ -35,27 +33,36 @@ let addCategory conn (cat : Category) = .Insert(cat) .RunResultAsync(conn) |> await |> ignore +type CategoryUpdateRecord = + { Name : string + Slug : string + Description : string option + ParentId : string option + } + /// Update a category let updateCategory conn (cat : Category) = - let upd8 = ExpandoObject() - upd8?Name <- cat.Name - upd8?Slug <- cat.Slug - upd8?Description <- cat.Description - upd8?ParentId <- cat.ParentId (category cat.WebLogId cat.Id) - .Update(upd8) + .Update({ CategoryUpdateRecord.Name = cat.Name + Slug = cat.Slug + Description = cat.Description + ParentId = cat.ParentId }) .RunResultAsync(conn) |> await |> ignore +type CategoryChildrenUpdateRecord = + { Children : string list } /// Update a category's children let updateChildren conn webLogId parentId (children : string list) = - let upd8 = ExpandoObject() - upd8?Children <- children (category webLogId parentId) - .Update(upd8) + .Update({ CategoryChildrenUpdateRecord.Children = children }) .RunResultAsync(conn) |> await |> ignore +type CategoryParentUpdateRecord = + { ParentId : string option } +type PostCategoriesUpdateRecord = + { CategoryIds : string list } /// Delete a category -let deleteCategory conn cat = +let deleteCategory conn (cat : Category) = // Remove the category from its parent match cat.ParentId with | Some parentId -> match tryFindCategory conn cat.WebLogId parentId with @@ -65,8 +72,7 @@ let deleteCategory conn cat = | _ -> () | _ -> () // Move this category's children to its parent - let newParent = ExpandoObject() - newParent?ParentId <- cat.ParentId + let newParent = { CategoryParentUpdateRecord.ParentId = cat.ParentId } cat.Children |> List.iter (fun childId -> (category cat.WebLogId childId) .Update(newParent) @@ -78,9 +84,9 @@ let deleteCategory conn cat = .RunCursorAsync(conn) |> await |> Seq.toList - |> List.iter (fun post -> let newCats = ExpandoObject() - newCats?CategoryIds <- post.CategoryIds - |> List.filter (fun c -> c <> cat.Id) + |> List.iter (fun post -> let newCats = + { PostCategoriesUpdateRecord.CategoryIds = post.CategoryIds + |> List.filter (fun c -> c <> cat.Id) } r.Table(Table.Post) .Get(post.Id) .Update(newCats) diff --git a/src/MyWebLog.Data.RethinkDB/MyWebLog.Data.RethinkDB.fsproj b/src/MyWebLog.Data.RethinkDB/MyWebLog.Data.RethinkDB.fsproj deleted file mode 100644 index d71b9e4..0000000 --- a/src/MyWebLog.Data.RethinkDB/MyWebLog.Data.RethinkDB.fsproj +++ /dev/null @@ -1,161 +0,0 @@ - - - - - Debug - AnyCPU - 2.0 - d6c2be5e-883a-4f34-9905-b730543ca380 - Library - MyWebLog.Data.RethinkDB - MyWebLog.Data.RethinkDB - v4.5.2 - 4.4.0.0 - MyWebLog.Data.RethinkDB - - - true - full - false - false - bin\Debug\ - DEBUG;TRACE - 3 - bin\Debug\MyWebLog.Data.RethinkDB.xml - - - pdbonly - true - true - bin\Release\ - TRACE - 3 - bin\Release\MyWebLog.Data.RethinkDB.xml - - - - - True - - - - - - - - - - - - - - - - - - - - MyWebLog.Entities - {a87f3cf5-2189-442b-8acf-929f5153ac22} - True - - - - 11 - - - - - $(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\3.0\Framework\v4.0\Microsoft.FSharp.Targets - - - - - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets - - - - - - - - - - ..\packages\Common.Logging\lib\net40\Common.Logging.dll - True - True - - - - - - - - - ..\packages\Common.Logging.Core\lib\net40\Common.Logging.Core.dll - True - True - - - - - - - - - ..\packages\Dynamitey\lib\net40\Dynamitey.dll - True - True - - - - - - - - - ..\packages\FSharp.Interop.Dynamic\lib\portable-net45+sl50+win\FSharp.Interop.Dynamic.dll - True - True - - - - - - - - - ..\packages\Newtonsoft.Json\lib\net40\Newtonsoft.Json.dll - True - True - - - - - - - ..\packages\Newtonsoft.Json\lib\net45\Newtonsoft.Json.dll - True - True - - - - - - - - - ..\packages\RethinkDb.Driver\lib\net45\RethinkDb.Driver.dll - True - True - - - - - \ No newline at end of file diff --git a/src/MyWebLog.Data.RethinkDB/MyWebLog.Data.RethinkDB.xproj b/src/MyWebLog.Data.RethinkDB/MyWebLog.Data.RethinkDB.xproj new file mode 100644 index 0000000..c31a3b8 --- /dev/null +++ b/src/MyWebLog.Data.RethinkDB/MyWebLog.Data.RethinkDB.xproj @@ -0,0 +1,21 @@ + + + + 14.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + + + d6c2be5e-883a-4f34-9905-b730543ca380 + MyWebLog.Data.RethinkDB + .\obj + .\bin\ + v4.5.2 + + + + 2.0 + + + diff --git a/src/MyWebLog.Data.RethinkDB/Page.fs b/src/MyWebLog.Data.RethinkDB/Page.fs index ea42253..3338f34 100644 --- a/src/MyWebLog.Data.RethinkDB/Page.fs +++ b/src/MyWebLog.Data.RethinkDB/Page.fs @@ -1,9 +1,7 @@ module MyWebLog.Data.RethinkDB.Page -open FSharp.Interop.Dynamic open MyWebLog.Entities open RethinkDb.Driver.Ast -open System.Dynamic let private r = RethinkDb.Driver.RethinkDB.R @@ -11,13 +9,13 @@ let private r = RethinkDb.Driver.RethinkDB.R let tryFindPageById conn webLogId (pageId : string) includeRevs = let pg = r.Table(Table.Page) .Get(pageId) - match (match includeRevs with - | true -> pg.RunAtomAsync(conn) - | _ -> pg.Without("Revisions").RunAtomAsync(conn) - |> await |> box) with - | null -> None - | page -> let pg : Page = unbox page - match pg.WebLogId = webLogId with true -> Some pg | _ -> None + match includeRevs with true -> pg.RunAtomAsync(conn) | _ -> pg.Without("Revisions").RunAtomAsync(conn) + |> await + |> box + |> function + | null -> None + | page -> let pg : Page = unbox page + match pg.WebLogId = webLogId with true -> Some pg | _ -> None /// Find a page by its permalink let tryFindPageByPermalink conn (webLogId : string) (permalink : string) = @@ -44,19 +42,24 @@ let addPage conn (page : Page) = .Insert(page) .RunResultAsync(conn) |> await |> ignore +type PageUpdateRecord = + { Title : string + Permalink : string + PublishedOn : int64 + UpdatedOn : int64 + Text : string + Revisions : Revision list } /// Update a page let updatePage conn (page : Page) = match tryFindPageById conn page.WebLogId page.Id false with - | Some _ -> let upd8 = ExpandoObject() - upd8?Title <- page.Title - upd8?Permalink <- page.Permalink - upd8?PublishedOn <- page.PublishedOn - upd8?UpdatedOn <- page.UpdatedOn - upd8?Text <- page.Text - upd8?Revisions <- page.Revisions - r.Table(Table.Page) + | Some _ -> r.Table(Table.Page) .Get(page.Id) - .Update(upd8) + .Update({ PageUpdateRecord.Title = page.Title + Permalink = page.Permalink + PublishedOn = page.PublishedOn + UpdatedOn = page.UpdatedOn + Text = page.Text + Revisions = page.Revisions }) .RunResultAsync(conn) |> await |> ignore | _ -> () diff --git a/src/MyWebLog.Data.RethinkDB/Post.fs b/src/MyWebLog.Data.RethinkDB/Post.fs index 93e18d0..6809090 100644 --- a/src/MyWebLog.Data.RethinkDB/Post.fs +++ b/src/MyWebLog.Data.RethinkDB/Post.fs @@ -1,9 +1,7 @@ module MyWebLog.Data.RethinkDB.Post -open FSharp.Interop.Dynamic open MyWebLog.Entities open RethinkDb.Driver.Ast -open System.Dynamic let private r = RethinkDb.Driver.RethinkDB.R diff --git a/src/MyWebLog.Data.RethinkDB/paket.references b/src/MyWebLog.Data.RethinkDB/paket.references deleted file mode 100644 index d576c94..0000000 --- a/src/MyWebLog.Data.RethinkDB/paket.references +++ /dev/null @@ -1,2 +0,0 @@ -FSharp.Interop.Dynamic -RethinkDb.Driver \ No newline at end of file diff --git a/src/MyWebLog.Data.RethinkDB/project.json b/src/MyWebLog.Data.RethinkDB/project.json new file mode 100644 index 0000000..5dd1369 --- /dev/null +++ b/src/MyWebLog.Data.RethinkDB/project.json @@ -0,0 +1,37 @@ +{ + "buildOptions": { + "compilerName": "fsc", + "compile": { + "includeFiles": [ + "AssemblyInfo.fs", + "Extensions.fs", + "Table.fs", + "DataConfig.fs", + "Category.fs", + "Page.fs", + "Post.fs", + "User.fs", + "WebLog.fs", + "SetUp.fs", + "RethinkMyWebLogData.fs" + ] + } + }, + "dependencies": { + "MyWebLog.Entities": "0.9.2", + "RethinkDb.Driver": "2.3.12" + }, + "frameworks": { + "netstandard1.6": { + "imports": "dnxcore50", + "dependencies": { + "Microsoft.FSharp.Core.netcore": "1.0.0-alpha-160629", + "NETStandard.Library": "1.6.0" + } + } + }, + "tools": { + "dotnet-compile-fsc": "1.0.0-preview2-*" + }, + "version": "0.9.2" +} diff --git a/src/MyWebLog.Entities/AssemblyInfo.fs b/src/MyWebLog.Entities/AssemblyInfo.fs new file mode 100644 index 0000000..e0db21f --- /dev/null +++ b/src/MyWebLog.Entities/AssemblyInfo.fs @@ -0,0 +1,21 @@ +namespace myWebLog.Data.AssemblyInfo + +open System.Reflection +open System.Runtime.CompilerServices +open System.Runtime.InteropServices + +[] +[] +[] +[] +[] +[] +[] +[] +[] +[] +[] +[] + +do + () \ No newline at end of file diff --git a/src/MyWebLog.Entities/MyWebLog.Entities.fsproj b/src/MyWebLog.Entities/MyWebLog.Entities.fsproj deleted file mode 100644 index e0cf41e..0000000 --- a/src/MyWebLog.Entities/MyWebLog.Entities.fsproj +++ /dev/null @@ -1,91 +0,0 @@ - - - - - Debug - AnyCPU - 2.0 - a87f3cf5-2189-442b-8acf-929f5153ac22 - Library - MyWebLog.Entities - MyWebLog.Entities - v4.5.2 - 4.4.0.0 - MyWebLog.Entities - - - true - full - false - false - bin\Debug\ - DEBUG;TRACE - 3 - bin\Debug\MyWebLog.Entities.xml - - - pdbonly - true - true - bin\Release\ - TRACE - 3 - bin\Release\MyWebLog.Entities.xml - - - - - True - - - - - - - - - - - 11 - - - - - $(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\3.0\Framework\v4.0\Microsoft.FSharp.Targets - - - - - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets - - - - - - - - - - ..\packages\Newtonsoft.Json\lib\net40\Newtonsoft.Json.dll - True - True - - - - - - - ..\packages\Newtonsoft.Json\lib\net45\Newtonsoft.Json.dll - True - True - - - - - \ No newline at end of file diff --git a/src/MyWebLog.Entities/MyWebLog.Entities.xproj b/src/MyWebLog.Entities/MyWebLog.Entities.xproj new file mode 100644 index 0000000..d252434 --- /dev/null +++ b/src/MyWebLog.Entities/MyWebLog.Entities.xproj @@ -0,0 +1,21 @@ + + + + 14.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + + + a87f3cf5-2189-442b-8acf-929f5153ac22 + MyWebLog.Entities + .\obj + .\bin\ + v4.5.2 + + + + 2.0 + + + diff --git a/src/MyWebLog.Entities/paket.references b/src/MyWebLog.Entities/paket.references deleted file mode 100644 index 1063d00..0000000 --- a/src/MyWebLog.Entities/paket.references +++ /dev/null @@ -1 +0,0 @@ -Newtonsoft.Json \ No newline at end of file diff --git a/src/MyWebLog.Entities/project.json b/src/MyWebLog.Entities/project.json new file mode 100644 index 0000000..ce57f52 --- /dev/null +++ b/src/MyWebLog.Entities/project.json @@ -0,0 +1,28 @@ +{ + "buildOptions": { + "compilerName": "fsc", + "compile": { + "includeFiles": [ + "AssemblyInfo.fs", + "Entities.fs", + "IMyWebLogData.fs" + ] + } + }, + "dependencies": { + "Newtonsoft.Json": "9.0.1" + }, + "frameworks": { + "netstandard1.6": { + "dependencies": { + "Microsoft.FSharp.Core.netcore": "1.0.0-alpha-160629", + "NETStandard.Library": "1.6.0" + }, + "imports": "dnxcore50" + } + }, + "tools": { + "dotnet-compile-fsc": "1.0.0-preview2-*" + }, + "version": "0.9.2" +} diff --git a/src/MyWebLog.Logic/AssemblyInfo.fs b/src/MyWebLog.Logic/AssemblyInfo.fs new file mode 100644 index 0000000..cc64863 --- /dev/null +++ b/src/MyWebLog.Logic/AssemblyInfo.fs @@ -0,0 +1,21 @@ +namespace myWebLog.Data.AssemblyInfo + +open System.Reflection +open System.Runtime.CompilerServices +open System.Runtime.InteropServices + +[] +[] +[] +[] +[] +[] +[] +[] +[] +[] +[] +[] + +do + () \ No newline at end of file diff --git a/src/MyWebLog.Logic/MyWebLog.Logic.fsproj b/src/MyWebLog.Logic/MyWebLog.Logic.fsproj deleted file mode 100644 index 5d71dae..0000000 --- a/src/MyWebLog.Logic/MyWebLog.Logic.fsproj +++ /dev/null @@ -1,81 +0,0 @@ - - - - - Debug - AnyCPU - 2.0 - 29f6eda3-4f43-4bb3-9c63-ae238a9b7f12 - Library - MyWebLog.Logic - MyWebLog.Logic - v4.5.2 - 4.4.0.0 - MyWebLog.Logic - - - true - full - false - false - bin\Debug\ - DEBUG;TRACE - 3 - bin\Debug\MyWebLog.Logic.xml - - - pdbonly - true - true - bin\Release\ - TRACE - 3 - bin\Release\MyWebLog.Logic.xml - - - - - True - - - - - - - - - - - - - - - MyWebLog.Entities - {a87f3cf5-2189-442b-8acf-929f5153ac22} - True - - - - 11 - - - - - $(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\3.0\Framework\v4.0\Microsoft.FSharp.Targets - - - - - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets - - - - - - diff --git a/src/MyWebLog.Logic/MyWebLog.Logic.xproj b/src/MyWebLog.Logic/MyWebLog.Logic.xproj new file mode 100644 index 0000000..27a50cf --- /dev/null +++ b/src/MyWebLog.Logic/MyWebLog.Logic.xproj @@ -0,0 +1,21 @@ + + + + 14.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + + + 29f6eda3-4f43-4bb3-9c63-ae238a9b7f12 + MyWebLog.Logic + .\obj + .\bin\ + v4.5.2 + + + + 2.0 + + + diff --git a/src/MyWebLog.Logic/project.json b/src/MyWebLog.Logic/project.json new file mode 100644 index 0000000..f43f23c --- /dev/null +++ b/src/MyWebLog.Logic/project.json @@ -0,0 +1,31 @@ +{ + "buildOptions": { + "compilerName": "fsc", + "compile": { + "includeFiles": [ + "AssemblyInfo.fs", + "Category.fs", + "Page.fs", + "Post.fs", + "User.fs", + "WebLog.fs" + ] + } + }, + "dependencies": { + "MyWebLog.Entities": "0.9.2" + }, + "frameworks": { + "netstandard1.6": { + "dependencies": { + "Microsoft.FSharp.Core.netcore": "1.0.0-alpha-160629", + "NETStandard.Library": "1.6.0" + }, + "imports": "dnxcore50" + } + }, + "tools": { + "dotnet-compile-fsc": "1.0.0-preview2-*" + }, + "version": "0.9.2" +} diff --git a/src/MyWebLog.Resources/AssemblyInfo.fs b/src/MyWebLog.Resources/AssemblyInfo.fs new file mode 100644 index 0000000..57a54c7 --- /dev/null +++ b/src/MyWebLog.Resources/AssemblyInfo.fs @@ -0,0 +1,25 @@ +namespace MyWebLog.Resources.AssemblyInfo + +open System.Resources +open System.Reflection +open System.Runtime.InteropServices + +[] +[] +[] +[] +[] +[] +[] +[] +[] +[] +[] +[] +[] + +do + () + +type HorribleHack() = + member this.Assembly = this.GetType().GetTypeInfo().Assembly diff --git a/src/MyWebLog.Resources/Library.fs b/src/MyWebLog.Resources/Library.fs new file mode 100644 index 0000000..6cba184 --- /dev/null +++ b/src/MyWebLog.Resources/Library.fs @@ -0,0 +1,40 @@ +module MyWebLog.Resources.Strings + +open Newtonsoft.Json +open System.Collections.Generic + +/// The locales we'll try to load +let private supportedLocales = [ "en-US" ] + +/// The fallback locale, if a key is not found in a non-default locale +let private fallbackLocale = "en-US" + +/// Get an embedded JSON file as a string +let private getEmbedded locale = + use rdr = + new System.IO.StreamReader + (MyWebLog.Resources.AssemblyInfo.HorribleHack().Assembly.GetManifestResourceStream(sprintf "%s.json" locale)) + rdr.ReadToEnd() + +/// The dictionary of localized strings +let private strings = + supportedLocales + |> List.map (fun loc -> loc, JsonConvert.DeserializeObject>(getEmbedded loc)) + |> dict + +/// Get a key from the resources file for the given locale +let getForLocale locale key = + let getString thisLocale = + match strings.ContainsKey thisLocale with + | true -> match strings.[thisLocale].ContainsKey key with + | true -> Some strings.[thisLocale].[key] + | _ -> None + | _ -> None + match getString locale with + | Some xlat -> Some xlat + | _ when locale <> fallbackLocale -> getString fallbackLocale + | _ -> None + |> function Some xlat -> xlat | _ -> sprintf "%s.%s" locale key + +/// Translate the key for the current locale +let get key = getForLocale System.Globalization.CultureInfo.CurrentCulture.Name key diff --git a/src/MyWebLog.Resources/MyWebLog.Resources.xproj b/src/MyWebLog.Resources/MyWebLog.Resources.xproj new file mode 100644 index 0000000..e7bb3b0 --- /dev/null +++ b/src/MyWebLog.Resources/MyWebLog.Resources.xproj @@ -0,0 +1,21 @@ + + + + 14.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + + + A12EA8DA-88BC-4447-90CB-A0E2DCC37523 + MyWebLog.Resources + .\obj + .\bin\ + v4.5.2 + + + + 2.0 + + + diff --git a/src/MyWebLog.Resources/en-US.json b/src/MyWebLog.Resources/en-US.json new file mode 100644 index 0000000..05a86f6 --- /dev/null +++ b/src/MyWebLog.Resources/en-US.json @@ -0,0 +1,73 @@ +{ + "Action": "Action", + "Added": "Added", + "AddNew": "Add New", + "AddNewPage": "Add New Page", + "AddNewPost": "Add New Post", + "Admin": "Admin", + "AndPublished": " and Published", + "andXMore": "and {0} more...", + "Categories": "Categories", + "Category": "Category", + "CategoryDeleteWarning": "Are you sure you wish to delete the category", + "Close": "Close", + "Dashboard": "Dashboard", + "Date": "Date", + "Delete": "Delete", + "Description": "Description", + "Edit": "Edit", + "EditPage": "Edit Page", + "EditPost": "Edit Post", + "EmailAddress": "E-mail Address", + "ErrBadAppConfig": "Could not convert config.json to myWebLog configuration", + "ErrBadLogOnAttempt": "Invalid e-mail address or password", + "ErrDataConfig": "Could not convert data-config.json to RethinkDB connection", + "ErrNotConfigured": "is not properly configured for myWebLog", + "Error": "Error", + "LastUpdated": "Last Updated", + "LastUpdatedDate": "Last Updated Date", + "ListAll": "List All", + "LoadedIn": "Loaded in", + "LogOff": "Log Off", + "LogOn": "Log On", + "MsgCategoryDeleted": "Deleted category {0} successfully", + "MsgCategoryEditSuccess": "{0} category successfully", + "MsgLogOffSuccess": "Log off successful | Have a nice day!", + "MsgLogOnSuccess": "Log on successful | Welcome to myWebLog!", + "MsgPageDeleted": "Deleted page successfully", + "MsgPageEditSuccess": "{0} edited successfully", + "MsgPostEditSuccess": "{0}{1} post successfully", + "Name": "Name", + "NewerPosts": "Newer Posts", + "NextPost": "Next Post", + "NoParent": "No Parent", + "OlderPosts": "Older Posts", + "PageDeleteWarning": "Are you sure you wish to delete the page", + "PageDetails": "Page Details", + "PageHash": "Page #", + "Pages": "Pages", + "ParentCategory": "Parent Category", + "Password": "Password", + "Permalink": "Permalink", + "PermanentLinkTo": "Permanent Link to", + "PostDetails": "Post Details", + "Posts": "Posts", + "PostsTagged": "Posts Tagged", + "PostStatus": "Post Status", + "PoweredBy": "Powered by", + "PreviousPost": "Previous Post", + "PublishedDate": "Published Date", + "PublishThisPost": "Publish This Post", + "Save": "Save", + "Seconds": "Seconds", + "ShowInPageList": "Show in Page List", + "Slug": "Slug", + "startingWith": "starting with", + "Status": "Status", + "Tags": "Tags", + "Time": "Time", + "Title": "Title", + "Updated": "Updated", + "View": "View", + "Warning": "Warning" +} diff --git a/src/MyWebLog.Resources/project.json b/src/MyWebLog.Resources/project.json new file mode 100644 index 0000000..c408007 --- /dev/null +++ b/src/MyWebLog.Resources/project.json @@ -0,0 +1,30 @@ +{ + "buildOptions": { + "compilerName": "fsc", + "compile": { + "includeFiles": [ + "AssemblyInfo.fs", + "Library.fs" + ] + }, + "embed": { + "include": [ "en-US.json" ] + } + }, + "dependencies": { + "Newtonsoft.Json": "9.0.1" + }, + "frameworks": { + "netstandard1.6": { + "imports": "dnxcore50", + "dependencies": { + "Microsoft.FSharp.Core.netcore": "1.0.0-alpha-160629", + "NETStandard.Library": "1.6.0" + } + } + }, + "tools": { + "dotnet-compile-fsc": "1.0.0-preview2-*" + }, + "version": "0.9.2" +} diff --git a/src/MyWebLog/MyWebLog.xproj b/src/MyWebLog/MyWebLog.xproj new file mode 100644 index 0000000..4fca1d9 --- /dev/null +++ b/src/MyWebLog/MyWebLog.xproj @@ -0,0 +1,21 @@ + + + + 14.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + + + B9F6DB52-65A1-4C2A-8C97-739E08A1D4FB + MyWebLog + .\obj + .\bin\ + v4.5.2 + + + + 2.0 + + + diff --git a/src/MyWebLog/project.json b/src/MyWebLog/project.json new file mode 100644 index 0000000..8efe313 --- /dev/null +++ b/src/MyWebLog/project.json @@ -0,0 +1,24 @@ +{ + "buildOptions": { + "emitEntryPoint": true + }, + "dependencies": { + "MyWebLog.App": "0.9.2", + "MyWebLog.Data.RethinkDB": "0.9.2", + "MyWebLog.Entities": "0.9.2", + "MyWebLog.Logic": "0.9.2", + "MyWebLog.Resources": "0.9.2" + }, + "frameworks": { + "netcoreapp1.0": { + "dependencies": { + "Microsoft.NETCore.App": { + "type": "platform", + "version": "1.0.0" + } + }, + "imports": "dnxcore50" + } + }, + "version": "0.9.2" +} diff --git a/src/myWebLog.Resources/Properties/AssemblyInfo.cs b/src/myWebLog.Resources/Properties/AssemblyInfo.cs deleted file mode 100644 index c93da61..0000000 --- a/src/myWebLog.Resources/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System.Resources; -using System.Reflection; -using System.Runtime.InteropServices; - -[assembly: AssemblyTitle("myWebLog.Resources")] -[assembly: AssemblyDescription("Resources for the myWebLog package")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("myWebLog.Resources")] -[assembly: AssemblyCopyright("Copyright © 2016")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] -[assembly: ComVisible(false)] -[assembly: Guid("a12ea8da-88bc-4447-90cb-a0e2dcc37523")] -[assembly: AssemblyVersion("0.9.1.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] -[assembly: NeutralResourcesLanguage("en-US")] diff --git a/src/myWebLog.Resources/Resources.Designer.cs b/src/myWebLog.Resources/Resources.Designer.cs deleted file mode 100644 index 9510e5a..0000000 --- a/src/myWebLog.Resources/Resources.Designer.cs +++ /dev/null @@ -1,702 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace MyWebLog { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - public class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - public static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("MyWebLog.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - public static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized string similar to Action. - /// - public static string Action { - get { - return ResourceManager.GetString("Action", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Added. - /// - public static string Added { - get { - return ResourceManager.GetString("Added", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Add New. - /// - public static string AddNew { - get { - return ResourceManager.GetString("AddNew", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Add New Page. - /// - public static string AddNewPage { - get { - return ResourceManager.GetString("AddNewPage", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Add New Post. - /// - public static string AddNewPost { - get { - return ResourceManager.GetString("AddNewPost", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Admin. - /// - public static string Admin { - get { - return ResourceManager.GetString("Admin", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to and Published. - /// - public static string AndPublished { - get { - return ResourceManager.GetString("AndPublished", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to and {0} more.... - /// - public static string andXMore { - get { - return ResourceManager.GetString("andXMore", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Categories. - /// - public static string Categories { - get { - return ResourceManager.GetString("Categories", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Category. - /// - public static string Category { - get { - return ResourceManager.GetString("Category", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Are you sure you wish to delete the category. - /// - public static string CategoryDeleteWarning { - get { - return ResourceManager.GetString("CategoryDeleteWarning", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Close. - /// - public static string Close { - get { - return ResourceManager.GetString("Close", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Dashboard. - /// - public static string Dashboard { - get { - return ResourceManager.GetString("Dashboard", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Date. - /// - public static string Date { - get { - return ResourceManager.GetString("Date", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Delete. - /// - public static string Delete { - get { - return ResourceManager.GetString("Delete", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Description. - /// - public static string Description { - get { - return ResourceManager.GetString("Description", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Edit. - /// - public static string Edit { - get { - return ResourceManager.GetString("Edit", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Edit Page. - /// - public static string EditPage { - get { - return ResourceManager.GetString("EditPage", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Edit Post. - /// - public static string EditPost { - get { - return ResourceManager.GetString("EditPost", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to E-mail Address. - /// - public static string EmailAddress { - get { - return ResourceManager.GetString("EmailAddress", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Could not convert config.json to myWebLog configuration. - /// - public static string ErrBadAppConfig { - get { - return ResourceManager.GetString("ErrBadAppConfig", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Invalid e-mail address or password. - /// - public static string ErrBadLogOnAttempt { - get { - return ResourceManager.GetString("ErrBadLogOnAttempt", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Could not convert data-config.json to RethinkDB connection. - /// - public static string ErrDataConfig { - get { - return ResourceManager.GetString("ErrDataConfig", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to is not properly configured for myWebLog. - /// - public static string ErrNotConfigured { - get { - return ResourceManager.GetString("ErrNotConfigured", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Error. - /// - public static string Error { - get { - return ResourceManager.GetString("Error", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Last Updated. - /// - public static string LastUpdated { - get { - return ResourceManager.GetString("LastUpdated", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Last Updated Date. - /// - public static string LastUpdatedDate { - get { - return ResourceManager.GetString("LastUpdatedDate", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to List All. - /// - public static string ListAll { - get { - return ResourceManager.GetString("ListAll", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Loaded in. - /// - public static string LoadedIn { - get { - return ResourceManager.GetString("LoadedIn", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Log Off. - /// - public static string LogOff { - get { - return ResourceManager.GetString("LogOff", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Log On. - /// - public static string LogOn { - get { - return ResourceManager.GetString("LogOn", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Deleted category {0} successfully. - /// - public static string MsgCategoryDeleted { - get { - return ResourceManager.GetString("MsgCategoryDeleted", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0} category successfully. - /// - public static string MsgCategoryEditSuccess { - get { - return ResourceManager.GetString("MsgCategoryEditSuccess", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Log off successful | Have a nice day!. - /// - public static string MsgLogOffSuccess { - get { - return ResourceManager.GetString("MsgLogOffSuccess", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Log on successful | Welcome to myWebLog!. - /// - public static string MsgLogOnSuccess { - get { - return ResourceManager.GetString("MsgLogOnSuccess", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Deleted page successfully. - /// - public static string MsgPageDeleted { - get { - return ResourceManager.GetString("MsgPageDeleted", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0} edited successfully. - /// - public static string MsgPageEditSuccess { - get { - return ResourceManager.GetString("MsgPageEditSuccess", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0}{1} post successfully. - /// - public static string MsgPostEditSuccess { - get { - return ResourceManager.GetString("MsgPostEditSuccess", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Name. - /// - public static string Name { - get { - return ResourceManager.GetString("Name", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Newer Posts. - /// - public static string NewerPosts { - get { - return ResourceManager.GetString("NewerPosts", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Next Post. - /// - public static string NextPost { - get { - return ResourceManager.GetString("NextPost", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to No Parent. - /// - public static string NoParent { - get { - return ResourceManager.GetString("NoParent", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Older Posts. - /// - public static string OlderPosts { - get { - return ResourceManager.GetString("OlderPosts", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Are you sure you wish to delete the page. - /// - public static string PageDeleteWarning { - get { - return ResourceManager.GetString("PageDeleteWarning", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Page Details. - /// - public static string PageDetails { - get { - return ResourceManager.GetString("PageDetails", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Page #. - /// - public static string PageHash { - get { - return ResourceManager.GetString("PageHash", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Pages. - /// - public static string Pages { - get { - return ResourceManager.GetString("Pages", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Parent Category. - /// - public static string ParentCategory { - get { - return ResourceManager.GetString("ParentCategory", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Password. - /// - public static string Password { - get { - return ResourceManager.GetString("Password", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Permalink. - /// - public static string Permalink { - get { - return ResourceManager.GetString("Permalink", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Permanent link to. - /// - public static string PermanentLinkTo { - get { - return ResourceManager.GetString("PermanentLinkTo", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Post Details. - /// - public static string PostDetails { - get { - return ResourceManager.GetString("PostDetails", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Posts. - /// - public static string Posts { - get { - return ResourceManager.GetString("Posts", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Posts tagged. - /// - public static string PostsTagged { - get { - return ResourceManager.GetString("PostsTagged", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Post Status. - /// - public static string PostStatus { - get { - return ResourceManager.GetString("PostStatus", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Powered by. - /// - public static string PoweredBy { - get { - return ResourceManager.GetString("PoweredBy", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Previous Post. - /// - public static string PreviousPost { - get { - return ResourceManager.GetString("PreviousPost", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Published Date. - /// - public static string PublishedDate { - get { - return ResourceManager.GetString("PublishedDate", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Publish This Post. - /// - public static string PublishThisPost { - get { - return ResourceManager.GetString("PublishThisPost", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Save. - /// - public static string Save { - get { - return ResourceManager.GetString("Save", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Seconds. - /// - public static string Seconds { - get { - return ResourceManager.GetString("Seconds", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Show in Page List. - /// - public static string ShowInPageList { - get { - return ResourceManager.GetString("ShowInPageList", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Slug. - /// - public static string Slug { - get { - return ResourceManager.GetString("Slug", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to starting with. - /// - public static string startingWith { - get { - return ResourceManager.GetString("startingWith", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Status. - /// - public static string Status { - get { - return ResourceManager.GetString("Status", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Tags. - /// - public static string Tags { - get { - return ResourceManager.GetString("Tags", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Time. - /// - public static string Time { - get { - return ResourceManager.GetString("Time", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Title. - /// - public static string Title { - get { - return ResourceManager.GetString("Title", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Updated. - /// - public static string Updated { - get { - return ResourceManager.GetString("Updated", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to View. - /// - public static string View { - get { - return ResourceManager.GetString("View", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Warning. - /// - public static string Warning { - get { - return ResourceManager.GetString("Warning", resourceCulture); - } - } - } -} diff --git a/src/myWebLog.Resources/Resources.resx b/src/myWebLog.Resources/Resources.resx deleted file mode 100644 index 1cb3fe9..0000000 --- a/src/myWebLog.Resources/Resources.resx +++ /dev/null @@ -1,333 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Added - - - Add New - - - Add New Post - - - Admin - - - and Published - - - Categories - - - Dashboard - - - Date - - - Delete - - - Edit - - - Edit Post - - - Could not convert data-config.json to RethinkDB connection - - - is not properly configured for myWebLog - - - List All - - - Log Off - - - Log On - - - {0}{1} post successfully - - - Newer Posts - - - Next Post - - - Older Posts - - - Page # - - - Pages - - - Permalink - - - Permanent link to - - - Post Details - - - Posts - - - Posts tagged - - - Post Status - - - Previous Post - - - Published Date - - - Publish This Post - - - Save - - - starting with - - - Status - - - Tags - - - Time - - - Title - - - Updated - - - View - - - Action - - - Category - - - Are you sure you wish to delete the category - - - Description - - - Last Updated - - - Deleted category {0} successfully - - - {0} category successfully - - - Deleted page successfully - - - Name - - - No Parent - - - Are you sure you wish to delete the page - - - Parent Category - - - Slug - - - Add New Page - - - Edit Page - - - E-mail Address - - - Invalid e-mail address or password - - - Last Updated Date - - - Log off successful | Have a nice day! - - - Log on successful | Welcome to myWebLog! - - - {0} edited successfully - - - Page Details - - - Password - - - Show in Page List - - - and {0} more... - - - Close - - - Error - - - Warning - - - Loaded in - - - Powered by - - - Seconds - - - Could not convert config.json to myWebLog configuration - - \ No newline at end of file diff --git a/src/myWebLog.Resources/myWebLog.Resources.csproj b/src/myWebLog.Resources/myWebLog.Resources.csproj deleted file mode 100644 index 0d309fb..0000000 --- a/src/myWebLog.Resources/myWebLog.Resources.csproj +++ /dev/null @@ -1,64 +0,0 @@ - - - - - Debug - AnyCPU - {A12EA8DA-88BC-4447-90CB-A0E2DCC37523} - Library - Properties - MyWebLog - MyWebLog.Resources - v4.5.2 - 512 - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - - - - - - - - - True - True - Resources.resx - - - - - PublicResXFileCodeGenerator - Resources.Designer.cs - - - - - \ No newline at end of file diff --git a/src/myWebLog.sln b/src/myWebLog.sln index 09b6777..ff75052 100644 --- a/src/myWebLog.sln +++ b/src/myWebLog.sln @@ -1,14 +1,50 @@ - Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2013 -VisualStudioVersion = 12.0.31101.0 +# Visual Studio 14 +VisualStudioVersion = 14.0.25420.1 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".paket", ".paket", "{DF15419B-90C6-4F45-8EC1-7A63C5D3565C}" - ProjectSection(SolutionItems) = preProject - paket.dependencies = paket.dependencies - EndProjectSection +Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "MyWebLog.Entities", "MyWebLog.Entities\MyWebLog.Entities.xproj", "{A87F3CF5-2189-442B-8ACF-929F5153AC22}" +EndProject +Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "MyWebLog.Data.RethinkDB", "MyWebLog.Data.RethinkDB\MyWebLog.Data.RethinkDB.xproj", "{D6C2BE5E-883A-4F34-9905-B730543CA380}" +EndProject +Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "MyWebLog.Logic", "MyWebLog.Logic\MyWebLog.Logic.xproj", "{29F6EDA3-4F43-4BB3-9C63-AE238A9B7F12}" +EndProject +Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "MyWebLog.App", "MyWebLog.App\MyWebLog.App.xproj", "{9CEA3A8B-E8AA-44E6-9F5F-2095CEED54EB}" +EndProject +Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "MyWebLog", "MyWebLog\MyWebLog.xproj", "{B9F6DB52-65A1-4C2A-8C97-739E08A1D4FB}" +EndProject +Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "MyWebLog.Resources", "MyWebLog.Resources\MyWebLog.Resources.xproj", "{A12EA8DA-88BC-4447-90CB-A0E2DCC37523}" EndProject Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {A87F3CF5-2189-442B-8ACF-929F5153AC22}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A87F3CF5-2189-442B-8ACF-929F5153AC22}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A87F3CF5-2189-442B-8ACF-929F5153AC22}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A87F3CF5-2189-442B-8ACF-929F5153AC22}.Release|Any CPU.Build.0 = Release|Any CPU + {D6C2BE5E-883A-4F34-9905-B730543CA380}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D6C2BE5E-883A-4F34-9905-B730543CA380}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D6C2BE5E-883A-4F34-9905-B730543CA380}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D6C2BE5E-883A-4F34-9905-B730543CA380}.Release|Any CPU.Build.0 = Release|Any CPU + {29F6EDA3-4F43-4BB3-9C63-AE238A9B7F12}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {29F6EDA3-4F43-4BB3-9C63-AE238A9B7F12}.Debug|Any CPU.Build.0 = Debug|Any CPU + {29F6EDA3-4F43-4BB3-9C63-AE238A9B7F12}.Release|Any CPU.ActiveCfg = Release|Any CPU + {29F6EDA3-4F43-4BB3-9C63-AE238A9B7F12}.Release|Any CPU.Build.0 = Release|Any CPU + {9CEA3A8B-E8AA-44E6-9F5F-2095CEED54EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9CEA3A8B-E8AA-44E6-9F5F-2095CEED54EB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9CEA3A8B-E8AA-44E6-9F5F-2095CEED54EB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9CEA3A8B-E8AA-44E6-9F5F-2095CEED54EB}.Release|Any CPU.Build.0 = Release|Any CPU + {B9F6DB52-65A1-4C2A-8C97-739E08A1D4FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B9F6DB52-65A1-4C2A-8C97-739E08A1D4FB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B9F6DB52-65A1-4C2A-8C97-739E08A1D4FB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B9F6DB52-65A1-4C2A-8C97-739E08A1D4FB}.Release|Any CPU.Build.0 = Release|Any CPU + {A12EA8DA-88BC-4447-90CB-A0E2DCC37523}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A12EA8DA-88BC-4447-90CB-A0E2DCC37523}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A12EA8DA-88BC-4447-90CB-A0E2DCC37523}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A12EA8DA-88BC-4447-90CB-A0E2DCC37523}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection diff --git a/src/myWebLog/Properties/AssemblyInfo.cs b/src/myWebLog/Properties/AssemblyInfo.cs index c3a308b..f1792ff 100644 --- a/src/myWebLog/Properties/AssemblyInfo.cs +++ b/src/myWebLog/Properties/AssemblyInfo.cs @@ -2,7 +2,7 @@ using System.Runtime.InteropServices; [assembly: AssemblyTitle("MyWebLog")] -[assembly: AssemblyDescription("A lightweight blogging platform built on Suave, Nancy, and RethinkDB")] +[assembly: AssemblyDescription("A lightweight blogging platform built on Nancy, and RethinkDB")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("MyWebLog")] @@ -11,5 +11,5 @@ using System.Runtime.InteropServices; [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] [assembly: Guid("b9f6db52-65a1-4c2a-8c97-739e08a1d4fb")] -[assembly: AssemblyVersion("0.9.1.0")] +[assembly: AssemblyVersion("0.9.2.0")] [assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/src/myWebLog/myWebLog.csproj b/src/myWebLog/myWebLog.csproj index 986421a..fd8cf0c 100644 --- a/src/myWebLog/myWebLog.csproj +++ b/src/myWebLog/myWebLog.csproj @@ -56,26 +56,10 @@ - - {9cea3a8b-e8aa-44e6-9f5f-2095ceed54eb} - MyWebLog.App - - - {d6c2be5e-883a-4f34-9905-b730543ca380} - myWebLog.Web - - - {a87f3cf5-2189-442b-8acf-929f5153ac22} - MyWebLog.Entities - {29f6eda3-4f43-4bb3-9c63-ae238a9b7f12} MyWebLog.Entities - - {a12ea8da-88bc-4447-90cb-a0e2dcc37523} - myWebLog.Resources -