-@using Umbraco.Web.Templates
-
-
-@if (Model.value != null)
-{
- string macroAlias = Model.value.macroAlias.ToString();
- ViewDataDictionary parameters = new ViewDataDictionary();
- foreach (dynamic mpd in Model.value.macroParamsDictionary)
- {
- parameters.Add(mpd.Name, mpd.Value);
- }
-
-
- @Umbraco.RenderMacro(macroAlias, parameters)
-
-}
diff --git a/src/DemoWebsite.v8.Legacy/Views/Partials/Grid/Editors/Media.cshtml b/src/DemoWebsite.v8.Legacy/Views/Partials/Grid/Editors/Media.cshtml
deleted file mode 100644
index e20b717..0000000
--- a/src/DemoWebsite.v8.Legacy/Views/Partials/Grid/Editors/Media.cshtml
+++ /dev/null
@@ -1,29 +0,0 @@
-@model dynamic
-@using Umbraco.Web.Templates
-
-@if (Model.value != null)
-{
- var url = Model.value.image;
- if(Model.editor.config != null && Model.editor.config.size != null){
- url = ImageCropperTemplateExtensions.GetCropUrl(url,
- width: Model.editor.config.size.width,
- height: Model.editor.config.size.height,
- cropDataSet: Model.value.focalPoint == null ? null : new Umbraco.Core.PropertyEditors.ValueConverters.ImageCropperValue
- {
- FocalPoint = new Umbraco.Core.PropertyEditors.ValueConverters.ImageCropperValue.ImageCropperFocalPoint
- {
- Top = Model.value.focalPoint.top,
- Left = Model.value.focalPoint.left
- }
- });
- }
-
- var altText = Model.value.altText ?? Model.value.caption ?? string.Empty;
-
-
-
- if (Model.value.caption != null)
- {
- @Model.value.caption
- }
-}
diff --git a/src/DemoWebsite.v8.Legacy/Views/Partials/Grid/Editors/Rte.cshtml b/src/DemoWebsite.v8.Legacy/Views/Partials/Grid/Editors/Rte.cshtml
deleted file mode 100644
index 34bb744..0000000
--- a/src/DemoWebsite.v8.Legacy/Views/Partials/Grid/Editors/Rte.cshtml
+++ /dev/null
@@ -1,9 +0,0 @@
-@model dynamic
-@using Umbraco.Web.Composing
-@using Umbraco.Web.Templates
-@{
- var value = TemplateUtilities.ParseInternalLinks(Model.value.ToString(), Current.UmbracoContext.UrlProvider);
- value = TemplateUtilities.ResolveUrlsFromTextString(value);
- value = TemplateUtilities.ResolveMediaFromTextString(value);
-}
-@Html.Raw(value)
diff --git a/src/DemoWebsite.v8.Legacy/Views/Partials/Grid/Editors/Textstring.cshtml b/src/DemoWebsite.v8.Legacy/Views/Partials/Grid/Editors/Textstring.cshtml
deleted file mode 100644
index 1001d10..0000000
--- a/src/DemoWebsite.v8.Legacy/Views/Partials/Grid/Editors/Textstring.cshtml
+++ /dev/null
@@ -1,24 +0,0 @@
-@model dynamic
-@using Umbraco.Web.Composing
-@using Umbraco.Web.Templates
-
-@if (Model.editor.config.markup != null)
-{
- string markup = Model.editor.config.markup.ToString();
- markup = markup.Replace("#value#", Html.ReplaceLineBreaksForHtml(HttpUtility.HtmlEncode((string)Model.value.ToString())).ToString());
-
- if (Model.editor.config.style != null)
- {
- markup = markup.Replace("#style#", Model.editor.config.style.ToString());
- }
-
-
- @Html.Raw(markup)
-
-}
-else
-{
-
- @Model.value
-
-}
diff --git a/src/DemoWebsite.v8.Legacy/Views/Shared/_Layout.cshtml b/src/DemoWebsite.v8.Legacy/Views/Shared/_Layout.cshtml
deleted file mode 100644
index 73c9540..0000000
--- a/src/DemoWebsite.v8.Legacy/Views/Shared/_Layout.cshtml
+++ /dev/null
@@ -1,14 +0,0 @@
-@inherits UmbracoViewPage
-
-
-
-
-
-
- @Model.Name
-
-
-
- @RenderBody()
-
-
diff --git a/src/DemoWebsite.v8.Legacy/Views/Web.config b/src/DemoWebsite.v8.Legacy/Views/Web.config
deleted file mode 100644
index 1b33af6..0000000
--- a/src/DemoWebsite.v8.Legacy/Views/Web.config
+++ /dev/null
@@ -1,69 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/DemoWebsite.v8.Legacy/Views/_ViewStart.cshtml b/src/DemoWebsite.v8.Legacy/Views/_ViewStart.cshtml
deleted file mode 100644
index cdbe864..0000000
--- a/src/DemoWebsite.v8.Legacy/Views/_ViewStart.cshtml
+++ /dev/null
@@ -1,3 +0,0 @@
-@{
- Layout = "~/Views/Shared/_Layout.cshtml";
-}
diff --git a/src/DemoWebsite.v8.Legacy/Web.Debug.config b/src/DemoWebsite.v8.Legacy/Web.Debug.config
deleted file mode 100644
index fae9cfe..0000000
--- a/src/DemoWebsite.v8.Legacy/Web.Debug.config
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/DemoWebsite.v8.Legacy/Web.Release.config b/src/DemoWebsite.v8.Legacy/Web.Release.config
deleted file mode 100644
index da6e960..0000000
--- a/src/DemoWebsite.v8.Legacy/Web.Release.config
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/DemoWebsite.v8.Legacy/Web.config b/src/DemoWebsite.v8.Legacy/Web.config
deleted file mode 100644
index cd0c3c9..0000000
--- a/src/DemoWebsite.v8.Legacy/Web.config
+++ /dev/null
@@ -1,246 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/DemoWebsite.v8.Legacy/config/BackOfficeTours/getting-started.json b/src/DemoWebsite.v8.Legacy/config/BackOfficeTours/getting-started.json
deleted file mode 100644
index 1e3c606..0000000
--- a/src/DemoWebsite.v8.Legacy/config/BackOfficeTours/getting-started.json
+++ /dev/null
@@ -1,474 +0,0 @@
-[
- {
- "name": "Email Marketing",
- "alias": "umbEmailMarketing",
- "group": "Email Marketing",
- "groupOrder": 10,
- "hidden": true,
- "requiredSections": [
- "content"
- ],
- "steps": [
- {
- "title": "Do you want to stay updated on everything Umbraco?",
- "content": "Thank you for using Umbraco! Would you like to stay up-to-date with Umbraco product updates, security advisories, community news and special offers? Sign up for our newsletter and never miss out on the latest Umbraco news.
By signing up, you agree that we can use your info according to our privacy policy .
",
- "view": "emails",
- "type": "promotion"
- },
- {
- "title": "Thank you for subscribing to our mailing list",
- "view": "confirm"
- }
- ]
- },
- {
- "name": "Introduction",
- "alias": "umbIntroIntroduction",
- "group": "Getting Started",
- "groupOrder": 100,
- "allowDisable": true,
- "requiredSections": [
- "content"
- ],
- "steps": [
- {
- "title": "Welcome to Umbraco - The Friendly CMS",
- "content": "Thank you for choosing Umbraco - we think this could be the beginning of something beautiful. While it may feel overwhelming at first, we've done a lot to make the learning curve as smooth and fast as possible.
In this quick tour we will introduce you to the main areas of Umbraco and show you how to best get started.
If you don't want to take the tour now you can always start it by opening the Help drawer in the top right corner.
",
- "type": "intro"
- },
- {
- "element": "[data-element='sections']",
- "elementPreventClick": true,
- "title": "Main Menu",
- "content": "This is the main menu in Umbraco backoffice. Here you can navigate between the different sections, search for items, see your user profile and open the help drawer.",
- "backdropOpacity": 0.6
- },
- {
- "element": "[data-element='section-content']",
- "elementPreventClick": true,
- "title": "Sections",
- "content": "Each area in Umbraco is called a Section . Right now you are in the Content section, when you want to go to another section simply click on the appropriate name in the main menu and you'll be there in no time.",
- "backdropOpacity": 0.6
- },
- {
- "element": "#tree",
- "elementPreventClick": true,
- "title": "The Tree",
- "content": "This is the Tree and it is the main navigation inside a section.
In the Content section the tree is called the Content tree and here you can navigate the content of your website.
"
- },
- {
- "element": "[data-element='dashboard']",
- "elementPreventClick": true,
- "title": "Dashboards",
- "content": "A dashboard is the main view you are presented with when entering a section within the backoffice, and can be used to show valuable information to the users of the system.
Notice that some sections have multiple dashboards.
"
- },
- {
- "element": "[data-element='global-search']",
- "title": "Search",
- "content": "The search allows you to quickly find whatever you're looking for across sections within Umbraco."
- },
- {
- "element": "[data-element='global-user']",
- "title": "User profile",
- "content": "Now click on your user avatar to open the user profile dialog.",
- "event": "click",
- "backdropOpacity": 0.6
- },
- {
- "element": "[data-element~='overlay-user']",
- "elementPreventClick": true,
- "title": "User profile",
- "content": "Here you can see details about your user, change your password and log out of Umbraco.
In the User section you will be able to do more advanced user management.
"
- },
- {
- "element": "[data-element~='overlay-user'] [data-element='button-overlayClose']",
- "title": "User profile",
- "content": "Let's close the user profile again.",
- "event": "click"
- },
- {
- "element": "[data-element='global-help']",
- "title": "Help",
- "content": "If you ever find yourself in trouble click here to open the Help drawer.",
- "event": "click",
- "backdropOpacity": 0.6
- },
- {
- "element": "[data-element='drawer']",
- "elementPreventClick": true,
- "title": "Help",
- "content": "In the help drawer you will find articles and videos related to the section you are using.
This is also where you will find the next tour on how to get started with Umbraco.
",
- "backdropOpacity": 0.6
- },
- {
- "element": "[data-element='drawer'] [data-element='help-tours']",
- "title": "Tours",
- "content": "To continue your journey on getting started with Umbraco, you can find more tours right here."
- }
- ]
- },
- {
- "name": "Create document type",
- "alias": "umbIntroCreateDocType",
- "group": "Getting Started",
- "groupOrder": 100,
- "requiredSections": [
- "settings"
- ],
- "steps": [
- {
- "title": "Create your first Document Type",
- "content": "Step 1 of any site is to create a Document Type . A Document Type is a template for content. For each type of content you want to create you'll create a Document Type. This will define where content based on this Document Type can be created, how many properties it holds and what the input method should be for these properties.
When you have at least one Document Type in place you can start creating content and this content can then be used in a template.
In this tour you will learn how to set up a basic Document Type with a property to enter a short text.
",
- "type": "intro"
- },
- {
- "element": "#applications [data-element='section-settings']",
- "title": "Navigate to the Settings sections",
- "content": "In the Settings section you can create and manage Document types.",
- "event": "click",
- "backdropOpacity": 0.6
- },
- {
- "element": "#tree [data-element='tree-item-documentTypes']",
- "title": "Create Document Type",
- "content": "Hover over the Document Type tree and click the three small dots to open the context menu .
",
- "event": "click",
- "eventElement": "#tree [data-element='tree-item-documentTypes'] [data-element='tree-item-options']"
- },
- {
- "element": "#dialog [data-element='action-documentType']",
- "title": "Create Document Type",
- "content": "Click Document Type to create a new document type with a template. The template will be automatically created and set as the default template for this Document Type.
You will use the template in a later tour to render content.
",
- "event": "click"
- },
- {
- "element": "[data-element='editor-name-field']",
- "title": "Enter a name",
- "content": "Your Document Type needs a name. Enter Home Page
in the field and click Next .",
- "view": "doctypename"
- },
- {
- "element": "[data-element='editor-description']",
- "title": "Enter a description",
- "content": "
A description helps to pick the right document type when creating content.
Write a description for our Home page. It could be:
The home page of the website "
- },
- {
- "element": "[data-element='group-add']",
- "title": "Add group",
- "content": "Group are used to organize properties on content in the Content section. Click Add Group to add a group.",
- "event": "click"
- },
- {
- "element": "[data-element='group-name-field']",
- "title": "Name the group",
- "content": "Enter Home
in the group name.
You can name a group anything you want and if you have a lot of properties it can be useful to add multiple groups.
",
- "view": "tabName"
- },
- {
- "element": "[data-element='property-add']",
- "title": "Add a property",
- "content": "Properties are the different input fields on a content page.
On our Home Page we want to add a welcome text.
Click Add property to open the property dialog.
",
- "event": "click"
- },
- {
- "element": "[data-element='editor-property-settings'] [data-element='property-name']",
- "title": "Name the property",
- "content": "Enter Welcome Text
as the name for the property.",
- "view": "propertyname"
- },
- {
- "element": "[data-element~='editor-property-settings'] [data-element='property-description']",
- "title": "Enter a description",
- "content": "A description will help your editor fill in the right content.
Enter a description for the property editor. It could be:
Write a nice introduction text so the visitors feel welcome "
- },
- {
- "element": "[data-element~='editor-property-settings'] [data-element='editor-add']",
- "title": "Add editor",
- "content": "When you add an editor you choose what the input method for this property will be. Click Add editor to open the editor picker dialog.",
- "event": "click"
- },
- {
- "element": "[ng-controller*='Umbraco.Editors.DataTypePickerController'] [data-element='editor-data-type-picker']",
- "elementPreventClick": true,
- "title": "Editor picker",
- "content": "In the editor picker dialog we can pick one of the many built-in editors.
"
- },
- {
- "element": "[data-element~='editor-data-type-picker'] [data-element='datatype-Textarea']",
- "title": "Select editor",
- "content": "Select the Textarea editor. This will add a textarea to the Welcome Text property.",
- "event": "click"
- },
- {
- "element": "[data-element='editor-data-type-picker'] [data-element='datatypeconfig-Textarea']",
- "title": "Editor settings",
- "content": "Each property editor can have individual settings. For the textarea editor you can set a character limit but in this case it is not needed.",
- "event": "click"
- },
- {
- "element": "[data-element~='editor-property-settings'] [data-element='button-submit']",
- "title": "Add property to document type",
- "content": "Click Submit to add the property to the document type.",
- "event": "click"
- },
- {
- "element": "[data-element~='sub-view-permissions']",
- "title": "Check the document type permissions",
- "content": "Click Permissions to view the permissions page.",
- "event": "click"
- },
- {
- "element": "[data-element~='permissions-allow-as-root']",
- "title": "Allow this document type to work at the root of your site",
- "content": "Toggle the switch Allow as root to allow new content pages based on this document type to be created at the root of your site",
- "event": "click"
- },
- {
- "element": "[data-element='button-save']",
- "title": "Save the document type",
- "content": "All we need now is to save the document type. Click Save to create and save your new document type.",
- "event": "click"
- }
- ]
- },
- {
- "name": "Create Content",
- "alias": "umbIntroCreateContent",
- "group": "Getting Started",
- "groupOrder": 100,
- "requiredSections": [
- "content"
- ],
- "steps": [
- {
- "title": "Creating your first content node",
- "content": "In this tour you will learn how to create the home page for your website. It will use the Home Page Document type you created in the previous tour.
",
- "type": "intro"
- },
- {
- "element": "#applications [data-element='section-content']",
- "title": "Navigate to the Content section",
- "content": "In the Content section you can create and manage the content of the website.
The Content section contains the content of your website. Content is displayed as nodes in the content tree.
",
- "event": "click",
- "backdropOpacity": 0.6
- },
- {
- "element": "[data-element='tree-root']",
- "title": "Open context menu",
- "content": "Open the context menu by hovering over the root of the content section.
Now click the three small dots to the right.
",
- "event": "click",
- "eventElement": "#tree [data-element='tree-root'] [data-element='tree-item-options']"
- },
- {
- "element": "[data-element='action-create-homePage']",
- "title": "Create Home page",
- "content": "The context menu shows you all the actions that are available on a node
Click on Home Page to create a new page of type Home Page .
",
- "event": "click"
- },
- {
- "element": "[data-element='editor-content'] [data-element='editor-name-field']",
- "title": "Give your new page a name",
- "content": "Our new page needs a name. Enter Home
in the field and click Next .
",
- "view": "nodename"
- },
- {
- "element": "[data-element='editor-content'] [data-element='property-welcomeText']",
- "title": "Add a welcome text",
- "content": "Add content to the Welcome Text field.
If you don't have any ideas here is a start:
I am learning Umbraco. High Five I Rock #H5IR ."
- },
- {
- "element": "[data-element='editor-content'] [data-element='button-saveAndPublish']",
- "title": "Publish",
- "content": "Now click the Publish button to publish your changes.
",
- "event": "click"
- }
- ]
- },
- {
- "name": "Render in template",
- "alias": "umbIntroRenderInTemplate",
- "group": "Getting Started",
- "groupOrder": 100,
- "requiredSections": [
- "settings"
- ],
- "steps": [
- {
- "title": "Render your content in a template",
- "content": "Templating in Umbraco builds on the concept of Razor Views from ASP.NET MVC. This tour is a sneak peak on how to write templates in Umbraco.
In this tour you will learn how to render content from the Home Page document type so you can see the content added to our Home content page.
",
- "type": "intro"
- },
- {
- "element": "#applications [data-element='section-settings']",
- "title": "Navigate to the Settings section",
- "content": "In the Settings section you will find all the templates.
It is of course also possible to edit all your code files in your favorite code editor.
",
- "event": "click",
- "backdropOpacity": 0.6
- },
- {
- "element": "#tree [data-element='tree-item-templates']",
- "title": "Expand the Templates node",
- "content": "To see all our templates click the small triangle to the left of the templates node.
",
- "event": "click",
- "eventElement": "#tree [data-element='tree-item-templates'] [data-element='tree-item-expand']",
- "view": "templatetree",
- "skipStepIfVisible": "#tree [data-element='tree-item-templates'] > div > button[data-element=tree-item-expand].icon-navigation-down"
- },
- {
- "element": "#tree [data-element='tree-item-templates'] [data-element='tree-item-Home Page']",
- "title": "Open Home template",
- "content": "Click the Home Page template to open and edit it.
",
- "eventElement": "#tree [data-element='tree-item-templates'] [data-element='tree-item-Home Page'] a.umb-tree-item__label",
- "event": "click"
- },
- {
- "element": "[data-element='editor-templates'] [data-element='code-editor']",
- "title": "Edit template",
- "content": "The template can be edited here or in your favorite code editor.
To render the field from the document type add the following to the template:
<h1>@Model.Name</h1> <p>@Model.WelcomeText</p> "
- },
- {
- "element": "[data-element='editor-templates'] [data-element='button-save']",
- "title": "Save the template",
- "content": "Click the Save button and your template will be saved.",
- "event": "click"
- }
- ]
- },
- {
- "name": "View Home page",
- "alias": "umbIntroViewHomePage",
- "group": "Getting Started",
- "groupOrder": 100,
- "requiredSections": [
- "content"
- ],
- "steps": [
- {
- "title": "View your Umbraco site",
- "content": "Our three main components for a page are done: Document type, Template, and Content . It is now time to see the result.
In this tour you will learn how to see your published website.
",
- "type": "intro"
- },
- {
- "element": "#applications [data-element='section-content']",
- "title": "Navigate to the content sections",
- "content": "In the Content section you will find the content of our website.",
- "event": "click",
- "backdropOpacity": 0.6
- },
- {
- "element": "#tree [data-element='tree-item-Home']",
- "title": "Open the Home page",
- "content": "Click the Home page to open it.
",
- "event": "click",
- "eventElement": "#tree [data-element='tree-item-Home'] a.umb-tree-item__label"
- },
- {
- "element": "[data-element='editor-content'] [data-element='sub-view-umbInfo']",
- "title": "Info",
- "content": "Under the Info-app you will find the default information about a content item.
",
- "event": "click"
- },
- {
- "element": "[data-element='editor-content'] [data-element='node-info-urls']",
- "title": "Open page",
- "content": "Click the Link to document to view your page.
Tip: Click the preview button in the bottom right corner to preview changes without publishing them.
",
- "event": "click",
- "eventElement": "[data-element='editor-content'] [data-element='node-info-urls'] a[target='_blank']"
- }
- ]
- },
- {
- "name": "The Media library",
- "alias": "umbIntroMediaSection",
- "group": "Getting Started",
- "groupOrder": 100,
- "requiredSections": [
- "media"
- ],
- "steps": [
- {
- "title": "How to use the media library",
- "content": "A website would be boring without media content. In Umbraco you can manage all your images, documents, videos etc. in the Media section . Here you can upload and organise your media items and see details about each item.
In this tour you will learn how to upload and organise your Media library in Umbraco. It will also show you how to view details about a specific media item.
",
- "type": "intro"
- },
- {
- "element": "#applications [data-element='section-media']",
- "title": "Navigate to the Media section",
- "content": "The media section is where you manage all your media items.",
- "event": "click",
- "backdropOpacity": 0.6
- },
- {
- "element": "#tree [data-element='tree-root']",
- "title": "Create a new folder",
- "content": "First create a folder for your images. Hover over the media root node and click the three small dots on the right side of the item.
",
- "event": "click",
- "eventElement": "#tree [data-element='tree-root'] [data-element='tree-item-options']"
- },
- {
- "element": "#dialog [data-element='action-Folder']",
- "title": "Create a new folder",
- "content": "Select the Folder option to select the type folder.
",
- "event": "click"
- },
- {
- "element": "[data-element='editor-media'] [data-element='editor-name-field']",
- "title": "Enter a name",
- "content": "Enter My Images
in the field.
",
- "view": "foldername"
- },
- {
- "element": "[data-element='editor-media'] [data-element='button-save']",
- "title": "Save the folder",
- "content": "Click the Save button to create the new folder.
",
- "event": "click"
- },
- {
- "element": "[data-element='editor-media'] [data-element='dropzone']",
- "title": "Upload images",
- "content": "In the upload area you can upload your media items.
Click the Click here to choose files button and select a couple of images on your computer and upload them.
",
- "view": "uploadimages"
- },
- {
- "element": "[data-element='editor-media'] [data-element='media-grid-item-0']",
- "title": "View media item details",
- "content": "Hover over the media item and Click the white bar to view details about the media item.",
- "event": "click",
- "eventElement": "[data-element='editor-media'] [data-element='media-grid-item-0'] [data-element='media-grid-item-edit']"
- },
- {
- "element": "[data-element='editor-media'] [data-element='property-umbracoFile']",
- "elementPreventClick": true,
- "title": "The uploaded image",
- "content": "Here you can see the image you have uploaded.
"
- },
- {
- "element": "[data-element='editor-media'] [data-element='property-umbracoBytes']",
- "title": "Image size",
- "content": "You will also find other details about the image, like the size.
Media items work in much the same way as content. So you can add extra properties to an image by creating or editing the Media types in the Settings section.
"
- },
- {
- "element": "[data-element='editor-media'] [data-element='sub-view-umbInfo']",
- "title": "Info",
- "content": "Like the content section you can also find default information about the media item. You will find these under the info app.",
- "event": "click"
- },
- {
- "element": "[data-element='editor-media'] [data-element='node-info-urls']",
- "title": "Link to media",
- "content": "The path to the media item..."
- },
- {
- "element": "[data-element='editor-media'] [data-element='node-info-update-date']",
- "title": "Last edited",
- "content": "...and information about when the media item has been created and edited."
- },
- {
- "element": "[data-element='editor-container']",
- "elementPreventClick": true,
- "title": "Using media items",
- "content": "You can reference a media item directly in a template by using the path or try adding a Media Picker to a document type property so you can select media items from the content section."
- }
- ]
- }
-]
diff --git a/src/DemoWebsite.v8.Legacy/config/ClientDependency.config b/src/DemoWebsite.v8.Legacy/config/ClientDependency.config
deleted file mode 100644
index bb98d57..0000000
--- a/src/DemoWebsite.v8.Legacy/config/ClientDependency.config
+++ /dev/null
@@ -1,56 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/DemoWebsite.v8.Legacy/config/HealthChecks.config b/src/DemoWebsite.v8.Legacy/config/HealthChecks.config
deleted file mode 100644
index 4e927e8..0000000
--- a/src/DemoWebsite.v8.Legacy/config/HealthChecks.config
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/DemoWebsite.v8.Legacy/config/Lang/cs-CZ.user.xml b/src/DemoWebsite.v8.Legacy/config/Lang/cs-CZ.user.xml
deleted file mode 100644
index d4902d5..0000000
--- a/src/DemoWebsite.v8.Legacy/config/Lang/cs-CZ.user.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/src/DemoWebsite.v8.Legacy/config/Lang/da-DK.user.xml b/src/DemoWebsite.v8.Legacy/config/Lang/da-DK.user.xml
deleted file mode 100644
index 7a8ce2c..0000000
--- a/src/DemoWebsite.v8.Legacy/config/Lang/da-DK.user.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/src/DemoWebsite.v8.Legacy/config/Lang/de-DE.user.xml b/src/DemoWebsite.v8.Legacy/config/Lang/de-DE.user.xml
deleted file mode 100644
index 7a8ce2c..0000000
--- a/src/DemoWebsite.v8.Legacy/config/Lang/de-DE.user.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/src/DemoWebsite.v8.Legacy/config/Lang/en-GB.user.xml b/src/DemoWebsite.v8.Legacy/config/Lang/en-GB.user.xml
deleted file mode 100644
index 7a8ce2c..0000000
--- a/src/DemoWebsite.v8.Legacy/config/Lang/en-GB.user.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/src/DemoWebsite.v8.Legacy/config/Lang/en-US.user.xml b/src/DemoWebsite.v8.Legacy/config/Lang/en-US.user.xml
deleted file mode 100644
index 7a8ce2c..0000000
--- a/src/DemoWebsite.v8.Legacy/config/Lang/en-US.user.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/src/DemoWebsite.v8.Legacy/config/Lang/es-ES.user.xml b/src/DemoWebsite.v8.Legacy/config/Lang/es-ES.user.xml
deleted file mode 100644
index 7a8ce2c..0000000
--- a/src/DemoWebsite.v8.Legacy/config/Lang/es-ES.user.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/src/DemoWebsite.v8.Legacy/config/Lang/fr-FR.user.xml b/src/DemoWebsite.v8.Legacy/config/Lang/fr-FR.user.xml
deleted file mode 100644
index 7a8ce2c..0000000
--- a/src/DemoWebsite.v8.Legacy/config/Lang/fr-FR.user.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/src/DemoWebsite.v8.Legacy/config/Lang/he-IL.user.xml b/src/DemoWebsite.v8.Legacy/config/Lang/he-IL.user.xml
deleted file mode 100644
index 3a0ad35..0000000
--- a/src/DemoWebsite.v8.Legacy/config/Lang/he-IL.user.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/src/DemoWebsite.v8.Legacy/config/Lang/it-IT.user.xml b/src/DemoWebsite.v8.Legacy/config/Lang/it-IT.user.xml
deleted file mode 100644
index 3a0ad35..0000000
--- a/src/DemoWebsite.v8.Legacy/config/Lang/it-IT.user.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/src/DemoWebsite.v8.Legacy/config/Lang/ja-JP.user.xml b/src/DemoWebsite.v8.Legacy/config/Lang/ja-JP.user.xml
deleted file mode 100644
index 7a8ce2c..0000000
--- a/src/DemoWebsite.v8.Legacy/config/Lang/ja-JP.user.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/src/DemoWebsite.v8.Legacy/config/Lang/ko-KR.user.xml b/src/DemoWebsite.v8.Legacy/config/Lang/ko-KR.user.xml
deleted file mode 100644
index 3a0ad35..0000000
--- a/src/DemoWebsite.v8.Legacy/config/Lang/ko-KR.user.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/src/DemoWebsite.v8.Legacy/config/Lang/nb-NO.user.xml b/src/DemoWebsite.v8.Legacy/config/Lang/nb-NO.user.xml
deleted file mode 100644
index 3a0ad35..0000000
--- a/src/DemoWebsite.v8.Legacy/config/Lang/nb-NO.user.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/src/DemoWebsite.v8.Legacy/config/Lang/nl-NL.user.xml b/src/DemoWebsite.v8.Legacy/config/Lang/nl-NL.user.xml
deleted file mode 100644
index 7a8ce2c..0000000
--- a/src/DemoWebsite.v8.Legacy/config/Lang/nl-NL.user.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/src/DemoWebsite.v8.Legacy/config/Lang/pl-PL.user.xml b/src/DemoWebsite.v8.Legacy/config/Lang/pl-PL.user.xml
deleted file mode 100644
index 3a0ad35..0000000
--- a/src/DemoWebsite.v8.Legacy/config/Lang/pl-PL.user.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/src/DemoWebsite.v8.Legacy/config/Lang/pt-BR.user.xml b/src/DemoWebsite.v8.Legacy/config/Lang/pt-BR.user.xml
deleted file mode 100644
index 3a0ad35..0000000
--- a/src/DemoWebsite.v8.Legacy/config/Lang/pt-BR.user.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/src/DemoWebsite.v8.Legacy/config/Lang/ru-RU.user.xml b/src/DemoWebsite.v8.Legacy/config/Lang/ru-RU.user.xml
deleted file mode 100644
index 7a8ce2c..0000000
--- a/src/DemoWebsite.v8.Legacy/config/Lang/ru-RU.user.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/src/DemoWebsite.v8.Legacy/config/Lang/sv-SE.user.xml b/src/DemoWebsite.v8.Legacy/config/Lang/sv-SE.user.xml
deleted file mode 100644
index 3a0ad35..0000000
--- a/src/DemoWebsite.v8.Legacy/config/Lang/sv-SE.user.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/src/DemoWebsite.v8.Legacy/config/Lang/zh-CN.user.xml b/src/DemoWebsite.v8.Legacy/config/Lang/zh-CN.user.xml
deleted file mode 100644
index 8d2add9..0000000
--- a/src/DemoWebsite.v8.Legacy/config/Lang/zh-CN.user.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/src/DemoWebsite.v8.Legacy/config/grid.editors.config.js b/src/DemoWebsite.v8.Legacy/config/grid.editors.config.js
deleted file mode 100644
index 210d167..0000000
--- a/src/DemoWebsite.v8.Legacy/config/grid.editors.config.js
+++ /dev/null
@@ -1,50 +0,0 @@
-[
- {
- "name": "Rich text editor",
- "alias": "rte",
- "view": "rte",
- "icon": "icon-article"
- },
- {
- "name": "Image",
- "nameTemplate": "{{ value && value.udi ? (value.udi | ncNodeName) : '' }}",
- "alias": "media",
- "view": "media",
- "icon": "icon-picture"
- },
- {
- "name": "Macro",
- "nameTemplate": "{{ value && value.macroAlias ? value.macroAlias : '' }}",
- "alias": "macro",
- "view": "macro",
- "icon": "icon-settings-alt"
- },
- {
- "name": "Embed",
- "alias": "embed",
- "view": "embed",
- "icon": "icon-movie-alt"
- },
- {
- "name": "Headline",
- "nameTemplate": "{{ value }}",
- "alias": "headline",
- "view": "textstring",
- "icon": "icon-coin",
- "config": {
- "style": "font-size: 36px; line-height: 45px; font-weight: bold",
- "markup": "#value# "
- }
- },
- {
- "name": "Quote",
- "nameTemplate": "{{ value ? value.substring(0,32) + (value.length > 32 ? '...' : '') : '' }}",
- "alias": "quote",
- "view": "textstring",
- "icon": "icon-quote",
- "config": {
- "style": "border-left: 3px solid #ccc; padding: 10px; color: #ccc; font-family: serif; font-style: italic; font-size: 18px",
- "markup": "#value# "
- }
- }
-]
diff --git a/src/DemoWebsite.v8.Legacy/config/imageprocessor/cache.config b/src/DemoWebsite.v8.Legacy/config/imageprocessor/cache.config
deleted file mode 100644
index 920bcd5..0000000
--- a/src/DemoWebsite.v8.Legacy/config/imageprocessor/cache.config
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/DemoWebsite.v8.Legacy/config/imageprocessor/processing.config b/src/DemoWebsite.v8.Legacy/config/imageprocessor/processing.config
deleted file mode 100644
index 5737cde..0000000
--- a/src/DemoWebsite.v8.Legacy/config/imageprocessor/processing.config
+++ /dev/null
@@ -1,67 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/DemoWebsite.v8.Legacy/config/imageprocessor/security.config b/src/DemoWebsite.v8.Legacy/config/imageprocessor/security.config
deleted file mode 100644
index 7bce8ee..0000000
--- a/src/DemoWebsite.v8.Legacy/config/imageprocessor/security.config
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/DemoWebsite.v8.Legacy/config/logviewer.searches.config.js b/src/DemoWebsite.v8.Legacy/config/logviewer.searches.config.js
deleted file mode 100644
index 345fe23..0000000
--- a/src/DemoWebsite.v8.Legacy/config/logviewer.searches.config.js
+++ /dev/null
@@ -1,42 +0,0 @@
-[
- {
- "name": "Find all logs where the Level is NOT Verbose and NOT Debug",
- "query": "Not(@Level='Verbose') and Not(@Level='Debug')"
- },
- {
- "name": "Find all logs that has an exception property (Warning, Error & Fatal with Exceptions)",
- "query": "Has(@Exception)"
- },
- {
- "name": "Find all logs that have the property 'Duration'",
- "query": "Has(Duration)"
- },
- {
- "name": "Find all logs that have the property 'Duration' and the duration is greater than 1000ms",
- "query": "Has(Duration) and Duration > 1000"
- },
- {
- "name": "Find all logs that are from the namespace 'Umbraco.Core'",
- "query": "StartsWith(SourceContext, 'Umbraco.Core')"
- },
- {
- "name": "Find all logs that use a specific log message template",
- "query": "@MessageTemplate = '[Timing {TimingId}] {EndMessage} ({TimingDuration}ms)'"
- },
- {
- "name": "Find logs where one of the items in the SortedComponentTypes property array is equal to",
- "query": "SortedComponentTypes[?] = 'Umbraco.Web.Search.ExamineComponent'"
- },
- {
- "name": "Find logs where one of the items in the SortedComponentTypes property array contains",
- "query": "Contains(SortedComponentTypes[?], 'DatabaseServer')"
- },
- {
- "name": "Find all logs that the message has localhost in it with SQL like",
- "query": "@Message like '%localhost%'"
- },
- {
- "name": "Find all logs that the message that starts with 'end' in it with SQL like",
- "query": "@Message like 'end%'"
- }
-]
diff --git a/src/DemoWebsite.v8.Legacy/config/serilog.config b/src/DemoWebsite.v8.Legacy/config/serilog.config
deleted file mode 100644
index 4d9151b..0000000
--- a/src/DemoWebsite.v8.Legacy/config/serilog.config
+++ /dev/null
@@ -1,41 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/DemoWebsite.v8.Legacy/config/serilog.user.config b/src/DemoWebsite.v8.Legacy/config/serilog.user.config
deleted file mode 100644
index 8f20740..0000000
--- a/src/DemoWebsite.v8.Legacy/config/serilog.user.config
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/DemoWebsite.v8.Legacy/config/splashes/noNodes.aspx b/src/DemoWebsite.v8.Legacy/config/splashes/noNodes.aspx
deleted file mode 100644
index 46a27a4..0000000
--- a/src/DemoWebsite.v8.Legacy/config/splashes/noNodes.aspx
+++ /dev/null
@@ -1,61 +0,0 @@
-<%@ Page Language="C#" AutoEventWireup="True" Inherits="Umbraco.Web.UI.Config.Splashes.NoNodes" CodeBehind="NoNodes.aspx.cs" %>
-<%@ Import Namespace="Umbraco.Core.Configuration" %>
-<%@ Import Namespace="Umbraco.Core.IO" %>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Welcome to your Umbraco installation
-
You're seeing this wonderful page because your website doesn't contain any published content yet.
-
-
-
-
-
-
-
Easy start with Umbraco.tv
-
We have created a bunch of 'how-to' videos, to get you easily started with Umbraco. Learn how to build projects in just a couple of minutes. Easiest CMS in the world.
-
-
Umbraco.tv →
-
-
-
-
Be a part of the community
-
The Umbraco community is the best of its kind, be sure to visit, and if you have any questions, we're sure that you can get your answers from the community.
-
-
our.Umbraco →
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/DemoWebsite.v8.Legacy/config/tinyMceConfig.config b/src/DemoWebsite.v8.Legacy/config/tinyMceConfig.config
deleted file mode 100644
index 7f7cb65..0000000
--- a/src/DemoWebsite.v8.Legacy/config/tinyMceConfig.config
+++ /dev/null
@@ -1,74 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- paste
- anchor
- charmap
- table
- lists
- advlist
- hr
- autolink
- directionality
- tabfocus
- searchreplace
- fullscreen
-
-
-
-
- font
-
-
-
-
- raw
-
-
diff --git a/src/DemoWebsite.v8.Legacy/config/umbracoSettings.config b/src/DemoWebsite.v8.Legacy/config/umbracoSettings.config
deleted file mode 100644
index 8619b49..0000000
--- a/src/DemoWebsite.v8.Legacy/config/umbracoSettings.config
+++ /dev/null
@@ -1,266 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
- 1
-
-
-
-
-
-
-
- your@email.here
-
-
-
-
-
-
-
- …
-
-
- Click to end
-
-
-
- ]]>
-
-
-
- throw
-
-
- ashx,aspx,ascx,config,cshtml,vbhtml,asmx,air,axd,swf,xml,xhtml,html,htm,php,htaccess
-
-
- assets/img/login.jpg
-
-
-
-
-
- false
-
- true
-
- false
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/DemoWebsite.v8.Legacy/packages.config b/src/DemoWebsite.v8.Legacy/packages.config
deleted file mode 100644
index fa93b37..0000000
--- a/src/DemoWebsite.v8.Legacy/packages.config
+++ /dev/null
@@ -1,62 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/DemoWebsite.v8/App_Data/packages/createdPackages.config b/src/DemoWebsite.v8/App_Data/packages/createdPackages.config
deleted file mode 100644
index 3299dfc..0000000
--- a/src/DemoWebsite.v8/App_Data/packages/createdPackages.config
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/src/DemoWebsite.v8/App_Data/packages/installedPackages.config b/src/DemoWebsite.v8/App_Data/packages/installedPackages.config
deleted file mode 100644
index 3299dfc..0000000
--- a/src/DemoWebsite.v8/App_Data/packages/installedPackages.config
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/src/DemoWebsite.v8/App_Plugins/MyContentBlocksAddon/mcba-button.html b/src/DemoWebsite.v8/App_Plugins/MyContentBlocksAddon/mcba-button.html
deleted file mode 100644
index f2dbca5..0000000
--- a/src/DemoWebsite.v8/App_Plugins/MyContentBlocksAddon/mcba-button.html
+++ /dev/null
@@ -1,4 +0,0 @@
-
- 🔺
- 🔻
-
\ No newline at end of file
diff --git a/src/DemoWebsite.v8/App_Plugins/MyContentBlocksAddon/mcba-button.js b/src/DemoWebsite.v8/App_Plugins/MyContentBlocksAddon/mcba-button.js
deleted file mode 100644
index e1238db..0000000
--- a/src/DemoWebsite.v8/App_Plugins/MyContentBlocksAddon/mcba-button.js
+++ /dev/null
@@ -1,12 +0,0 @@
-angular.module("MyContentBlocksAddon").component("mcbaButton", {
- templateUrl: "/App_Plugins/MyContentBlocksAddon/mcba-button.html",
-
- bindings: {
- block: "<",
- definition: "<",
- },
-
- require: {
- blockCtrl: "^perplexContentBlock"
- },
-});
diff --git a/src/DemoWebsite.v8/App_Plugins/MyContentBlocksAddon/mcba-init.js b/src/DemoWebsite.v8/App_Plugins/MyContentBlocksAddon/mcba-init.js
deleted file mode 100644
index 450c4dc..0000000
--- a/src/DemoWebsite.v8/App_Plugins/MyContentBlocksAddon/mcba-init.js
+++ /dev/null
@@ -1,9 +0,0 @@
-angular.module("MyContentBlocksAddon", ["perplexContentBlocks"])
-angular.module("umbraco").requires.push("MyContentBlocksAddon");
-
-angular.module("MyContentBlocksAddon").run([
- "perplexContentBlocksCustomComponents",
- function (customComponents) {
- customComponents.block.main = "mcba-main";
- customComponents.block.buttons.push("mcba-button");
- }]);
diff --git a/src/DemoWebsite.v8/App_Plugins/MyContentBlocksAddon/mcba-main.html b/src/DemoWebsite.v8/App_Plugins/MyContentBlocksAddon/mcba-main.html
deleted file mode 100644
index a999567..0000000
--- a/src/DemoWebsite.v8/App_Plugins/MyContentBlocksAddon/mcba-main.html
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
-
-
-toggle
-disable default
-enable default
-
-
-
-
-
-
-
-
disable variant
-
enable variant
-
-
-
-
-
Remove variant
-
-
-
-
-
- Add variant
-
diff --git a/src/DemoWebsite.v8/App_Plugins/MyContentBlocksAddon/mcba-main.js b/src/DemoWebsite.v8/App_Plugins/MyContentBlocksAddon/mcba-main.js
deleted file mode 100644
index d083074..0000000
--- a/src/DemoWebsite.v8/App_Plugins/MyContentBlocksAddon/mcba-main.js
+++ /dev/null
@@ -1,20 +0,0 @@
-angular.module("MyContentBlocksAddon").component("mcbaMain", {
- templateUrl: "/App_Plugins/MyContentBlocksAddon/mcba-main.html",
-
- bindings: {
- block: "<",
- definition: "<",
- },
-
- require: {
- blockCtrl: "^perplexContentBlock"
- },
-
- controller: [
- function mcbaMain() {
- this.$onInit = function () {
- // TODO
- }
- }
- ],
-});
diff --git a/src/DemoWebsite.v8/App_Plugins/MyContentBlocksAddon/package.manifest b/src/DemoWebsite.v8/App_Plugins/MyContentBlocksAddon/package.manifest
deleted file mode 100644
index ce30d1d..0000000
--- a/src/DemoWebsite.v8/App_Plugins/MyContentBlocksAddon/package.manifest
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "javascript": [
- "~/App_Plugins/MyContentBlocksAddon/mcba-init.js",
- "~/App_Plugins/MyContentBlocksAddon/mcba-main.js",
- "~/App_Plugins/MyContentBlocksAddon/mcba-button.js"
- ]
-}
diff --git a/src/DemoWebsite.v8/DemoWebsite.v8.csproj b/src/DemoWebsite.v8/DemoWebsite.v8.csproj
deleted file mode 100644
index 73a498c..0000000
--- a/src/DemoWebsite.v8/DemoWebsite.v8.csproj
+++ /dev/null
@@ -1,449 +0,0 @@
-
-
-
-
-
- Debug
- AnyCPU
-
-
- 2.0
- {138B10FE-3907-4D28-A1A9-02FB6C630580}
- {349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}
- Library
- Properties
- DemoWebsite
- DemoWebsite.v8
- v4.7.2
- true
-
- 44309
-
-
-
-
-
-
-
-
- true
- full
- false
- bin\
- DEBUG;TRACE
- prompt
- 4
-
-
- true
- pdbonly
- true
- bin\
- TRACE
- prompt
- 4
-
-
-
- ..\..\packages\AngleSharp.0.9.11\lib\net45\AngleSharp.dll
-
-
- ..\..\packages\ClientDependency.1.9.9\lib\net45\ClientDependency.Core.dll
-
-
- ..\..\packages\ClientDependency-Mvc5.1.9.3\lib\net45\ClientDependency.Core.Mvc.dll
-
-
- ..\..\packages\CSharpTest.Net.Collections.14.906.1403.1082\lib\net40\CSharpTest.Net.Collections.dll
-
-
- ..\..\packages\Examine.1.2.0\lib\net452\Examine.dll
-
-
- ..\..\packages\HtmlAgilityPack.1.8.14\lib\Net45\HtmlAgilityPack.dll
-
-
- ..\..\packages\HtmlSanitizer.4.0.217\lib\net45\HtmlSanitizer.dll
-
-
- ..\..\packages\SharpZipLib.0.86.0\lib\20\ICSharpCode.SharpZipLib.dll
-
-
- ..\..\packages\ImageProcessor.2.7.0.100\lib\net452\ImageProcessor.dll
-
-
- ..\..\packages\ImageProcessor.Web.4.10.0.100\lib\net452\ImageProcessor.Web.dll
-
-
- ..\..\packages\K4os.Compression.LZ4.1.1.11\lib\net46\K4os.Compression.LZ4.dll
-
-
- ..\..\packages\LightInject.5.4.0\lib\net46\LightInject.dll
-
-
- ..\..\packages\LightInject.Annotation.1.1.0\lib\net46\LightInject.Annotation.dll
-
-
- ..\..\packages\LightInject.Mvc.2.0.0\lib\net46\LightInject.Mvc.dll
-
-
- ..\..\packages\LightInject.Web.2.0.0\lib\net46\LightInject.Web.dll
-
-
- ..\..\packages\LightInject.WebApi.2.0.0\lib\net46\LightInject.WebApi.dll
-
-
- ..\..\packages\Lucene.Net.3.0.3\lib\NET40\Lucene.Net.dll
-
-
- ..\..\packages\Markdown.2.2.1\lib\net451\Markdown.dll
-
-
- ..\..\packages\MessagePack.2.2.85\lib\netstandard2.0\MessagePack.dll
-
-
- ..\..\packages\MessagePack.Annotations.2.2.85\lib\netstandard2.0\MessagePack.Annotations.dll
-
-
- ..\..\packages\Microsoft.AspNet.Identity.Core.2.2.2\lib\net45\Microsoft.AspNet.Identity.Core.dll
-
-
- ..\..\packages\Microsoft.AspNet.Identity.Owin.2.2.2\lib\net45\Microsoft.AspNet.Identity.Owin.dll
-
-
- ..\..\packages\Microsoft.AspNet.SignalR.Core.2.4.0\lib\net45\Microsoft.AspNet.SignalR.Core.dll
-
-
- ..\..\packages\Microsoft.Bcl.AsyncInterfaces.1.0.0\lib\net461\Microsoft.Bcl.AsyncInterfaces.dll
-
-
- ..\..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1\lib\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll
-
-
-
- ..\..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.2.0.0\lib\netstandard2.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll
-
-
- ..\..\packages\Microsoft.IO.RecyclableMemoryStream.1.2.2\lib\net45\Microsoft.IO.RecyclableMemoryStream.dll
-
-
- ..\..\packages\Microsoft.Owin.4.0.1\lib\net45\Microsoft.Owin.dll
-
-
- ..\..\packages\Microsoft.Owin.Host.SystemWeb.4.0.1\lib\net45\Microsoft.Owin.Host.SystemWeb.dll
-
-
- ..\..\packages\Microsoft.Owin.Security.4.0.1\lib\net45\Microsoft.Owin.Security.dll
-
-
- ..\..\packages\Microsoft.Owin.Security.Cookies.4.0.1\lib\net45\Microsoft.Owin.Security.Cookies.dll
-
-
- ..\..\packages\Microsoft.Owin.Security.OAuth.4.0.1\lib\net45\Microsoft.Owin.Security.OAuth.dll
-
-
- ..\..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll
-
-
- ..\..\packages\MiniProfiler.4.0.138\lib\net461\MiniProfiler.dll
-
-
- ..\..\packages\MiniProfiler.Shared.4.0.138\lib\net461\MiniProfiler.Shared.dll
-
-
- ..\..\packages\Newtonsoft.Json.12.0.1\lib\net45\Newtonsoft.Json.dll
-
-
- ..\..\packages\NPoco.3.9.4\lib\net45\NPoco.dll
-
-
- ..\..\packages\Owin.1.0\lib\net40\Owin.dll
-
-
- ..\..\packages\Semver.2.0.4\lib\net452\Semver.dll
-
-
- ..\..\packages\Serilog.2.8.0\lib\net46\Serilog.dll
-
-
- ..\..\packages\Serilog.Enrichers.Process.2.0.1\lib\net45\Serilog.Enrichers.Process.dll
-
-
- ..\..\packages\Serilog.Enrichers.Thread.3.0.0\lib\net45\Serilog.Enrichers.Thread.dll
-
-
- ..\..\packages\Serilog.Filters.Expressions.2.0.0\lib\net45\Serilog.Filters.Expressions.dll
-
-
- ..\..\packages\Serilog.Formatting.Compact.1.0.0\lib\net45\Serilog.Formatting.Compact.dll
-
-
- ..\..\packages\Serilog.Formatting.Compact.Reader.1.0.3\lib\net45\Serilog.Formatting.Compact.Reader.dll
-
-
- ..\..\packages\Serilog.Settings.AppSettings.2.2.2\lib\net45\Serilog.Settings.AppSettings.dll
-
-
- ..\..\packages\Serilog.Sinks.Async.1.3.0\lib\net45\Serilog.Sinks.Async.dll
-
-
- ..\..\packages\Serilog.Sinks.File.4.0.0\lib\net45\Serilog.Sinks.File.dll
-
-
- ..\..\packages\Serilog.Sinks.Map.1.0.0\lib\netstandard2.0\Serilog.Sinks.Map.dll
-
-
- ..\..\packages\Superpower.2.0.0\lib\net45\Superpower.dll
-
-
- ..\..\packages\System.Buffers.4.4.0\lib\netstandard2.0\System.Buffers.dll
-
-
- ..\..\packages\System.Collections.Immutable.1.5.0\lib\netstandard2.0\System.Collections.Immutable.dll
-
-
-
- ..\..\packages\Umbraco.SqlServerCE.4.0.0.1\lib\net472\System.Data.SqlServerCe.dll
-
-
- ..\..\packages\Umbraco.SqlServerCE.4.0.0.1\lib\net472\System.Data.SqlServerCe.Entity.dll
-
-
- ..\..\packages\System.Diagnostics.DiagnosticSource.4.4.1\lib\net46\System.Diagnostics.DiagnosticSource.dll
-
-
-
-
- ..\..\packages\System.Memory.4.5.3\lib\netstandard2.0\System.Memory.dll
-
-
-
- ..\..\packages\Microsoft.AspNet.WebApi.Client.5.2.7\lib\net45\System.Net.Http.Formatting.dll
-
-
-
- ..\..\packages\System.Numerics.Vectors.4.4.0\lib\net46\System.Numerics.Vectors.dll
-
-
-
-
- ..\..\packages\System.Runtime.CompilerServices.Unsafe.4.7.1\lib\net461\System.Runtime.CompilerServices.Unsafe.dll
-
-
-
-
- ..\..\packages\System.Text.Encoding.CodePages.4.7.1\lib\net461\System.Text.Encoding.CodePages.dll
-
-
-
- ..\..\packages\System.Threading.Tasks.Dataflow.4.9.0\lib\netstandard2.0\System.Threading.Tasks.Dataflow.dll
-
-
- ..\..\packages\System.Threading.Tasks.Extensions.4.5.3\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll
-
-
-
- ..\..\packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll
-
-
-
-
-
-
-
-
-
-
-
- ..\..\packages\Microsoft.AspNet.WebPages.3.2.7\lib\net45\System.Web.Helpers.dll
-
-
- ..\..\packages\Microsoft.AspNet.WebApi.Core.5.2.7\lib\net45\System.Web.Http.dll
-
-
- ..\..\packages\Microsoft.AspNet.WebApi.WebHost.5.2.7\lib\net45\System.Web.Http.WebHost.dll
-
-
- ..\..\packages\Microsoft.AspNet.Mvc.5.2.7\lib\net45\System.Web.Mvc.dll
-
-
- ..\..\packages\Microsoft.AspNet.Razor.3.2.7\lib\net45\System.Web.Razor.dll
-
-
- ..\..\packages\Microsoft.AspNet.WebPages.3.2.7\lib\net45\System.Web.WebPages.dll
-
-
- ..\..\packages\Microsoft.AspNet.WebPages.3.2.7\lib\net45\System.Web.WebPages.Deployment.dll
-
-
- ..\..\packages\Microsoft.AspNet.WebPages.3.2.7\lib\net45\System.Web.WebPages.Razor.dll
-
-
-
-
-
-
-
-
-
- ..\..\packages\UmbracoCms.Core.8.15.1\lib\net472\Umbraco.Core.dll
-
-
- ..\..\packages\UmbracoCms.Web.8.15.1\lib\net472\Umbraco.Examine.dll
-
-
- ..\..\packages\UmbracoCms.Web.8.15.1\lib\net472\Umbraco.ModelsBuilder.Embedded.dll
-
-
- ..\..\packages\UmbracoCms.Web.8.15.1\lib\net472\Umbraco.Web.dll
-
-
- ..\..\packages\UmbracoCms.Web.8.15.1\lib\net472\Umbraco.Web.UI.dll
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Web.config
-
-
- Web.config
-
-
-
-
-
-
-
-
-
-
-
- {1282fad9-5b28-4dba-bf0e-0f8982085f59}
- Perplex.ContentBlocks.Core
-
-
-
- 10.0
- $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
-
-
-
-
-
-
-
-
- True
- True
- 52174
- /
- https://localhost:44309/
- False
- False
-
-
- False
-
-
-
-
-
- :: Create link to App_Plugins\Perplex.ContentBlocks of Perplex.ContentBlocks project
-if not exist $(ProjectDir)App_Plugins (
- mkdir $(ProjectDir)App_Plugins
-)
-
-if not exist $(ProjectDir)App_Plugins\Perplex.ContentBlocks (
- mklink /J $(ProjectDir)App_Plugins\Perplex.ContentBlocks $(SolutionDir)Perplex.ContentBlocks\App_Plugins\Perplex.ContentBlocks
-)
-
-
-
- This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/DemoWebsite.v8/Example.cs b/src/DemoWebsite.v8/Example.cs
deleted file mode 100644
index c01658a..0000000
--- a/src/DemoWebsite.v8/Example.cs
+++ /dev/null
@@ -1,303 +0,0 @@
-using Perplex.ContentBlocks.Categories;
-using Perplex.ContentBlocks.Definitions;
-using Perplex.ContentBlocks.Presets;
-using System;
-using System.Linq;
-using Umbraco.Core.Composing;
-using Umbraco.Core.Models;
-using Umbraco.Core.PropertyEditors;
-using Umbraco.Core.Services;
-using Umbraco.Web.PropertyEditors;
-using static Umbraco.Core.Constants;
-
-namespace DemoWebsite
-{
- [RuntimeLevel(MinLevel = Umbraco.Core.RuntimeLevel.Run)]
- public class ExampleComposer : ComponentComposer { }
-
- public class ExampleComponent : IComponent
- {
- private readonly IContentBlockDefinitionRepository _definitions;
- private readonly PropertyEditorCollection _propertyEditors;
- private readonly IDataTypeService _dataTypeService;
- private readonly IContentTypeService _contentTypeService;
- private readonly IContentBlockCategoryRepository _categoryRepository;
- private readonly IContentBlocksPresetRepository _presetRepository;
-
- public ExampleComponent(
- IContentBlockDefinitionRepository definitions,
- PropertyEditorCollection propertyEditors,
- IDataTypeService dataTypeService,
- IContentTypeService contentTypeService,
- IContentBlockCategoryRepository categoryRepository,
- IContentBlocksPresetRepository presetRepository)
- {
- _definitions = definitions;
- _propertyEditors = propertyEditors;
- _dataTypeService = dataTypeService;
- _contentTypeService = contentTypeService;
- _categoryRepository = categoryRepository;
- _presetRepository = presetRepository;
- }
-
- public void Initialize()
- {
- Guid dataTypeKey = new Guid("ec17fffe-3a33-4a08-a61a-3a6b7008e20f");
- CreateExampleBlock("exampleBlock", dataTypeKey);
-
- var specialCategoryId = new Guid("AAC6EE6A-EA54-4E90-A33B-049E39786BF5");
- _categoryRepository.Add(new ContentBlockCategory
- {
- Id = specialCategoryId,
- Name = "Specials",
- Icon = "/Media/icons.svg#icon-cat-special"
- });
-
- // Block
- var block = new ContentBlockDefinition
- {
- Name = "Example Block",
- Id = new Guid("11111111-1111-1111-1111-111111111111"),
- DataTypeKey = dataTypeKey,
- // PreviewImage will usually be a path to some image,
- // for this demo we use a base64-encoded PNG of 3x2 pixels
- PreviewImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAOxAAADsQBlSsOGwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAATSURBVAiZYzzDwPCfAQqYGJAAACokAc/b6i7NAAAAAElFTkSuQmCC",
- Description = "Example Block",
-
- Layouts = new IContentBlockLayout[]
- {
- new ContentBlockLayout
- {
- Id = new Guid("22222222-2222-2222-2222-222222222222"),
- Name = "Red",
- Description = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec vitae interdum dolor, sit amet luctus odio.",
- PreviewImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAOxAAADsQBlSsOGwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAATSURBVAiZYzzDwPCfAQqYGJAAACokAc/b6i7NAAAAAElFTkSuQmCC",
- ViewPath = "~/Views/Partials/ExampleBlock/Red.cshtml"
- },
- new ContentBlockLayout
- {
- Id = new Guid("33333333-3333-3333-3333-333333333333"),
- Name = "Green",
- Description = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec vitae interdum dolor, sit amet luctus odio. Nam laoreet at odio eu faucibus. Vivamus non rhoncus erat, sit amet efficitur ipsum.",
- PreviewImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAOxAAADsQBlSsOGwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAATSURBVAiZYyy+JPafAQqYGJAAADcdAl5UlCmyAAAAAElFTkSuQmCC",
- ViewPath = "~/Views/Partials/ExampleBlock/Green.cshtml"
- },
- new ContentBlockLayout
- {
- Id = new Guid("44444444-4444-4444-4444-444444444444"),
- Name = "Blue",
- Description = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec vitae interdum dolor, sit amet luctus odio. Nam laoreet at odio eu faucibus. Vivamus non rhoncus erat, sit amet efficitur ipsum. Pellentesque tempus tellus eu posuere varius. Nulla elementum lacus lacus. Curabitur elementum faucibus velit sed mollis.",
- PreviewImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAOxAAADsQBlSsOGwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAATSURBVAiZYzRJXfKfAQqYGJAAADOAAkAWXApqAAAAAElFTkSuQmCC",
- ViewPath = "~/Views/Partials/ExampleBlock/Blue.cshtml",
- },
- },
-
- CategoryIds = new[]
- {
- Perplex.ContentBlocks.Constants.Categories.Content,
- specialCategoryId,
- }
- };
-
- // Header
- var header = new ContentBlockDefinition
- {
- Name = "Example Header",
- Id = new Guid("55555555-5555-5555-5555-555555555555"),
- DataTypeKey = dataTypeKey,
- PreviewImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAOxAAADsQBlSsOGwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAATSURBVAiZY/zz0v8/AxQwMSABAEvFAzckGfK1AAAAAElFTkSuQmCC",
- Description = "Example Block",
-
- Layouts = new IContentBlockLayout[]
- {
- new ContentBlockLayout
- {
- Id = new Guid("66666666-6666-6666-6666-666666666666"),
- Name = "Yellow",
- Description = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec vitae interdum dolor, sit amet luctus odio.",
- PreviewImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAOxAAADsQBlSsOGwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAATSURBVAiZY/zz0v8/AxQwMSABAEvFAzckGfK1AAAAAElFTkSuQmCC",
- ViewPath = "~/Views/Partials/ExampleHeader/Yellow.cshtml"
- },
- new ContentBlockLayout
- {
- Id = new Guid("77777777-7777-7777-7777-777777777777"),
- Name = "Magenta",
- Description = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec vitae interdum dolor, sit amet luctus odio. Nam laoreet at odio eu faucibus. Vivamus non rhoncus erat, sit amet efficitur ipsum.",
- PreviewImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAOxAAADsQBlSsOGwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAATSURBVAiZY/zP8P8/AxQwMSABAEYIAwEl5g6iAAAAAElFTkSuQmCC",
- ViewPath = "~/Views/Partials/ExampleHeader/Magenta.cshtml"
- },
- },
-
- CategoryIds = new[]
- {
- Perplex.ContentBlocks.Constants.Categories.Headers,
- }
- };
-
- _definitions.Add(block);
- _definitions.Add(header);
-
- var all = _definitions.GetAll().ToList();
-
- for (int i = 0; i < all.Count; i++)
- {
- var def = all[i];
-
- for (int j = 0; j < 8; j++)
- {
- var newDef = new ContentBlockDefinition
- {
- CategoryIds = def.CategoryIds.ToList(),
- DataTypeId = def.DataTypeId,
- DataTypeKey = def.DataTypeKey,
- Description = def.Description,
- Id = new Guid($"{i}{j}{def.Id.ToString().Substring(2)}"),
- Layouts = def.Layouts.Select(l => new ContentBlockLayout
- {
- Description = l.Description,
- Id = new Guid($"{i}{j}{l.Id.ToString().Substring(2)}"),
- Name = l.Name,
- PreviewImage = l.PreviewImage,
- ViewPath = l.ViewPath,
- }).ToList(),
- Name = def.Name + $" - copy #{j + 1}",
- PreviewImage = def.PreviewImage,
- };
-
- _definitions.Add(newDef);
- }
- }
-
- _presetRepository.Add(new ContentBlocksPreset
- {
- Id = new Guid("72d1b24f-ed6d-4c27-ad21-8fec48b6060c"),
- Name = "Test",
- ApplyToDocumentTypes = new[] { "contentPage" },
- Blocks = new[]
- {
- new ContentBlockPreset
- {
- Id = new Guid("198bec2a-3404-409a-80e5-cb002aa5858e"),
- DefinitionId = new Guid("11111111-1111-1111-1111-111111111111"),
- LayoutId = new Guid("33333333-3333-3333-3333-333333333333"),
- Values =
- {
- ["title"] = "Preset Title value",
- },
-
- Variants = new[]
- {
- new ContentBlockVariantPreset
- {
- Id = new Guid("b08be547-4cd5-4a57-b4e7-97c15c3f3d6c"),
- Alias = "ums-segment-456",
- Values =
- {
- ["title"] = "UMS SEGMENT TEST",
- }
- },
-
- new ContentBlockVariantPreset
- {
- Id = new Guid("c08be547-4cd5-4a57-b4e7-97c15c3f3d6c"),
- Alias = "ums-segment-xyz",
- Values =
- {
- ["text"] = "TEXT",
- }
- }
- }
- },
- }
- });
- }
-
- private void CreateExampleBlock(string contentTypeAlias, Guid dataTypeKey)
- {
- CreateExampleBlockElementType(contentTypeAlias);
- CreateExampleBlockDataType(contentTypeAlias, dataTypeKey);
- }
-
- private void CreateExampleBlockElementType(string contentTypeAlias)
- {
- if (_contentTypeService.Get(contentTypeAlias) != null)
- {
- // Already created
- return;
- }
-
- IContentType contentType = new ContentType(-1)
- {
- Alias = contentTypeAlias,
- IsElement = true,
- Name = "Example Block",
- PropertyGroups = new PropertyGroupCollection(new[]
- {
- new PropertyGroup(new PropertyTypeCollection(true, new[]
- {
- new PropertyType(PropertyEditors.Aliases.TextBox, ValueStorageType.Ntext)
- {
- PropertyEditorAlias = PropertyEditors.Aliases.TextBox,
- Name = "Title",
- Alias = "title",
- },
- new PropertyType(PropertyEditors.Aliases.TextBox, ValueStorageType.Ntext)
- {
- PropertyEditorAlias = PropertyEditors.Aliases.TinyMce,
- Name = "Text",
- Alias = "text",
- },
- }))
- {
- Name = "Content",
- }
- })
- };
-
- _contentTypeService.Save(contentType);
- }
-
- private void CreateExampleBlockDataType(string contentTypeAlias, Guid dataTypeKey)
- {
- if (_dataTypeService.GetDataType(dataTypeKey) != null)
- {
- // Already there
- return;
- }
-
- if (!(_propertyEditors.TryGet("Umbraco.NestedContent", out var editor) && editor is NestedContentPropertyEditor nestedContentEditor))
- {
- throw new InvalidOperationException("Nested Content property editor not found!");
- }
-
- var dataType = new DataType(nestedContentEditor, -1)
- {
- Name = "Perplex.ContentBlocks - ExampleBlock",
- Key = dataTypeKey,
- Configuration = new NestedContentConfiguration
- {
- ConfirmDeletes = false,
- HideLabel = true,
- MinItems = 1,
- MaxItems = 1,
- ShowIcons = false,
- ContentTypes = new[]
- {
- new NestedContentConfiguration.ContentType
- {
- Alias = contentTypeAlias,
- TabAlias = "Content",
- Template = "{{title}}"
- }
- }
- }
- };
-
- _dataTypeService.Save(dataType);
- }
-
- public void Terminate()
- {
- }
- }
-}
diff --git a/src/DemoWebsite.v8/Global.asax b/src/DemoWebsite.v8/Global.asax
deleted file mode 100644
index 0831274..0000000
--- a/src/DemoWebsite.v8/Global.asax
+++ /dev/null
@@ -1 +0,0 @@
-<%@ Application Inherits="Umbraco.Web.UmbracoApplication" Language="C#" %>
diff --git a/src/DemoWebsite.v8/Properties/AssemblyInfo.cs b/src/DemoWebsite.v8/Properties/AssemblyInfo.cs
deleted file mode 100644
index 23e9e2e..0000000
--- a/src/DemoWebsite.v8/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-using System.Reflection;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("DemoWebsite")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("DemoWebsite")]
-[assembly: AssemblyCopyright("Copyright © 2020")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("138b10fe-3907-4d28-a1a9-02fb6c630580")]
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Revision and Build Numbers
-// by using the '*' as shown below:
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/src/DemoWebsite.v8/Views/Contentpage.cshtml b/src/DemoWebsite.v8/Views/Contentpage.cshtml
deleted file mode 100644
index 3c679de..0000000
--- a/src/DemoWebsite.v8/Views/Contentpage.cshtml
+++ /dev/null
@@ -1,5 +0,0 @@
-@inherits Umbraco.Web.Mvc.UmbracoViewPage
-@using ContentModels = Umbraco.Web.PublishedModels;
-@using Perplex.ContentBlocks.Rendering;
-
-@Html.RenderContentBlocks(Model.ContentBlocks)
diff --git a/src/DemoWebsite.v8/Views/Contentpage2.cshtml b/src/DemoWebsite.v8/Views/Contentpage2.cshtml
deleted file mode 100644
index 10752d8..0000000
--- a/src/DemoWebsite.v8/Views/Contentpage2.cshtml
+++ /dev/null
@@ -1,5 +0,0 @@
-@inherits Umbraco.Web.Mvc.UmbracoViewPage
-@using ContentModels = Umbraco.Web.PublishedModels;
-@using Perplex.ContentBlocks.Rendering;
-
-@Html.RenderContentBlocks(Model.ContentBlocks)
diff --git a/src/DemoWebsite.v8/Views/Home.cshtml b/src/DemoWebsite.v8/Views/Home.cshtml
deleted file mode 100644
index 1d5fd1f..0000000
--- a/src/DemoWebsite.v8/Views/Home.cshtml
+++ /dev/null
@@ -1,5 +0,0 @@
-@inherits Umbraco.Web.Mvc.UmbracoViewPage
-@using ContentModels = Umbraco.Web.PublishedModels;
-@using Perplex.ContentBlocks.Rendering;
-
-@Html.RenderContentBlocks(Model.ContentBlocks)
diff --git a/src/DemoWebsite.v8/Views/Partials/BlockList/Default.cshtml b/src/DemoWebsite.v8/Views/Partials/BlockList/Default.cshtml
deleted file mode 100644
index 05851df..0000000
--- a/src/DemoWebsite.v8/Views/Partials/BlockList/Default.cshtml
+++ /dev/null
@@ -1,13 +0,0 @@
-@inherits UmbracoViewPage
-@using Umbraco.Core.Models.Blocks
-@{
- if (!Model.Any()) { return; }
-}
-
- @foreach (var block in Model)
- {
- if (block?.ContentUdi == null) { continue; }
- var data = block.Content;
- @Html.Partial("BlockList/Components/" + data.ContentType.Alias, block)
- }
-
diff --git a/src/DemoWebsite.v8/Views/Partials/ExampleBlock/Blue.cshtml b/src/DemoWebsite.v8/Views/Partials/ExampleBlock/Blue.cshtml
deleted file mode 100644
index f5e1d03..0000000
--- a/src/DemoWebsite.v8/Views/Partials/ExampleBlock/Blue.cshtml
+++ /dev/null
@@ -1,7 +0,0 @@
-@using ContentModels = Umbraco.Web.PublishedModels;
-@using Perplex.ContentBlocks.Rendering;
-@model IContentBlockViewModel
-
-
- @Html.Partial("ExampleBlock/_ExampleBlock")
-
diff --git a/src/DemoWebsite.v8/Views/Partials/ExampleBlock/Green.cshtml b/src/DemoWebsite.v8/Views/Partials/ExampleBlock/Green.cshtml
deleted file mode 100644
index bf0d977..0000000
--- a/src/DemoWebsite.v8/Views/Partials/ExampleBlock/Green.cshtml
+++ /dev/null
@@ -1,7 +0,0 @@
-@using ContentModels = Umbraco.Web.PublishedModels;
-@using Perplex.ContentBlocks.Rendering;
-@model IContentBlockViewModel
-
-
- @Html.Partial("ExampleBlock/_ExampleBlock")
-
diff --git a/src/DemoWebsite.v8/Views/Partials/ExampleBlock/Red.cshtml b/src/DemoWebsite.v8/Views/Partials/ExampleBlock/Red.cshtml
deleted file mode 100644
index 4d32cf9..0000000
--- a/src/DemoWebsite.v8/Views/Partials/ExampleBlock/Red.cshtml
+++ /dev/null
@@ -1,7 +0,0 @@
-@using ContentModels = Umbraco.Web.PublishedModels;
-@using Perplex.ContentBlocks.Rendering;
-@model IContentBlockViewModel
-
-
- @Html.Partial("ExampleBlock/_ExampleBlock")
-
diff --git a/src/DemoWebsite.v8/Views/Partials/ExampleBlock/_ExampleBlock.cshtml b/src/DemoWebsite.v8/Views/Partials/ExampleBlock/_ExampleBlock.cshtml
deleted file mode 100644
index be38de6..0000000
--- a/src/DemoWebsite.v8/Views/Partials/ExampleBlock/_ExampleBlock.cshtml
+++ /dev/null
@@ -1,8 +0,0 @@
-@using ContentModels = Umbraco.Web.PublishedModels;
-@using Perplex.ContentBlocks.Rendering;
-@model IContentBlockViewModel
-
-
-
@Model.Content.Title
- @Model.Content.Text
-
diff --git a/src/DemoWebsite.v8/Views/Partials/ExampleHeader/Magenta.cshtml b/src/DemoWebsite.v8/Views/Partials/ExampleHeader/Magenta.cshtml
deleted file mode 100644
index c4507d6..0000000
--- a/src/DemoWebsite.v8/Views/Partials/ExampleHeader/Magenta.cshtml
+++ /dev/null
@@ -1,7 +0,0 @@
-@using ContentModels = Umbraco.Web.PublishedModels;
-@using Perplex.ContentBlocks.Rendering;
-@model IContentBlockViewModel
-
-
- @Html.Partial("ExampleHeader/_ExampleHeader")
-
diff --git a/src/DemoWebsite.v8/Views/Partials/ExampleHeader/Yellow.cshtml b/src/DemoWebsite.v8/Views/Partials/ExampleHeader/Yellow.cshtml
deleted file mode 100644
index a00c028..0000000
--- a/src/DemoWebsite.v8/Views/Partials/ExampleHeader/Yellow.cshtml
+++ /dev/null
@@ -1,7 +0,0 @@
-@using ContentModels = Umbraco.Web.PublishedModels;
-@using Perplex.ContentBlocks.Rendering;
-@model IContentBlockViewModel
-
-
- @Html.Partial("ExampleHeader/_ExampleHeader")
-
diff --git a/src/DemoWebsite.v8/Views/Partials/ExampleHeader/_ExampleHeader.cshtml b/src/DemoWebsite.v8/Views/Partials/ExampleHeader/_ExampleHeader.cshtml
deleted file mode 100644
index 14e552c..0000000
--- a/src/DemoWebsite.v8/Views/Partials/ExampleHeader/_ExampleHeader.cshtml
+++ /dev/null
@@ -1,8 +0,0 @@
-@using ContentModels = Umbraco.Web.PublishedModels;
-@using Perplex.ContentBlocks.Rendering;
-@model IContentBlockViewModel
-
-
-
@Model.Content.Title
- @Model.Content.Text
-
diff --git a/src/DemoWebsite.v8/Views/Partials/Grid/Bootstrap3-Fluid.cshtml b/src/DemoWebsite.v8/Views/Partials/Grid/Bootstrap3-Fluid.cshtml
deleted file mode 100644
index bef1b88..0000000
--- a/src/DemoWebsite.v8/Views/Partials/Grid/Bootstrap3-Fluid.cshtml
+++ /dev/null
@@ -1,88 +0,0 @@
-@inherits UmbracoViewPage
-@using Umbraco.Web.Templates
-@using Newtonsoft.Json.Linq
-
-@*
- Razor helpers located at the bottom of this file
-*@
-
-@if (Model != null && Model.GetType() == typeof(JObject) && Model.sections != null)
-{
- var oneColumn = ((System.Collections.ICollection)Model.sections).Count == 1;
-
-
- @if (oneColumn)
- {
- foreach (var section in Model.sections) {
-
- @foreach (var row in section.rows) {
- @renderRow(row)
- }
-
- }
- }else {
-
- @foreach (var s in Model.sections) {
-
-
- @foreach (var row in s.rows) {
- @renderRow(row)
- }
-
-
- }
-
- }
-
-}
-
-@helper renderRow(dynamic row){
-
-
- @foreach ( var area in row.areas ) {
-
-
- @foreach (var control in area.controls) {
- if (control !=null && control.editor != null && control.editor.view != null ) {
- @Html.Partial("grid/editors/base", (object)control)
- }
- }
-
-
}
-
-
-}
-
-@functions {
- public static MvcHtmlString RenderElementAttributes(dynamic contentItem)
- {
- var attrs = new List();
- JObject cfg = contentItem.config;
-
- if(cfg != null)
- foreach (JProperty property in cfg.Properties())
- {
- var propertyValue = HttpUtility.HtmlAttributeEncode(property.Value.ToString());
- attrs.Add(property.Name + "=\"" + propertyValue + "\"");
- }
-
- JObject style = contentItem.styles;
-
- if (style != null) {
- var cssVals = new List();
- foreach (JProperty property in style.Properties())
- {
- var propertyValue = property.Value.ToString();
- if (string.IsNullOrWhiteSpace(propertyValue) == false)
- {
- cssVals.Add(property.Name + ":" + propertyValue + ";");
- }
- }
-
- if (cssVals.Any())
- attrs.Add("style='" + HttpUtility.HtmlAttributeEncode(string.Join(" ", cssVals)) + "'");
- }
-
- return new MvcHtmlString(string.Join(" ", attrs));
- }
-}
diff --git a/src/DemoWebsite.v8/Views/Partials/Grid/Bootstrap3.cshtml b/src/DemoWebsite.v8/Views/Partials/Grid/Bootstrap3.cshtml
deleted file mode 100644
index 801526a..0000000
--- a/src/DemoWebsite.v8/Views/Partials/Grid/Bootstrap3.cshtml
+++ /dev/null
@@ -1,92 +0,0 @@
-@inherits UmbracoViewPage
-@using Umbraco.Web.Templates
-@using Newtonsoft.Json.Linq
-
-@if (Model != null && Model.GetType() == typeof(JObject) && Model.sections != null)
-{
- var oneColumn = ((System.Collections.ICollection)Model.sections).Count == 1;
-
-
- @if (oneColumn)
- {
- foreach (var section in Model.sections) {
-
- @foreach (var row in section.rows) {
- @renderRow(row, true)
- }
-
- }
- }else {
-
-
- @foreach (var s in Model.sections) {
-
-
- @foreach (var row in s.rows) {
- @renderRow(row, false)
- }
-
-
- }
-
-
- }
-
-}
-
-@helper renderRow(dynamic row, bool singleColumn){
-
- @if (singleColumn) {
- @:
- }
-
- @foreach ( var area in row.areas ) {
-
-
- @foreach (var control in area.controls) {
- if (control !=null && control.editor != null && control.editor.view != null ) {
- @Html.Partial("grid/editors/base", (object)control)
- }
- }
-
-
}
-
- @if (singleColumn) {
- @:
- }
-
-}
-
-@functions {
- public static MvcHtmlString RenderElementAttributes(dynamic contentItem)
- {
- var attrs = new List();
- JObject cfg = contentItem.config;
-
- if(cfg != null)
- foreach (JProperty property in cfg.Properties())
- {
- var propertyValue = HttpUtility.HtmlAttributeEncode(property.Value.ToString());
- attrs.Add(property.Name + "=\"" + propertyValue + "\"");
- }
-
- JObject style = contentItem.styles;
-
- if (style != null) {
- var cssVals = new List();
- foreach (JProperty property in style.Properties())
- {
- var propertyValue = property.Value.ToString();
- if (string.IsNullOrWhiteSpace(propertyValue) == false)
- {
- cssVals.Add(property.Name + ":" + propertyValue + ";");
- }
- }
-
- if (cssVals.Any())
- attrs.Add("style=\"" + HttpUtility.HtmlAttributeEncode(string.Join(" ", cssVals)) + "\"");
- }
-
- return new MvcHtmlString(string.Join(" ", attrs));
- }
-}
diff --git a/src/DemoWebsite.v8/Views/Partials/Grid/Editors/Base.cshtml b/src/DemoWebsite.v8/Views/Partials/Grid/Editors/Base.cshtml
deleted file mode 100644
index a86c048..0000000
--- a/src/DemoWebsite.v8/Views/Partials/Grid/Editors/Base.cshtml
+++ /dev/null
@@ -1,24 +0,0 @@
-@model dynamic
-@using Umbraco.Web.Templates
-
-@functions {
- public static string EditorView(dynamic contentItem)
- {
- string view = contentItem.editor.render != null ? contentItem.editor.render.ToString() : contentItem.editor.view.ToString();
- view = view.ToLower().Replace(".html", ".cshtml");
-
- if (!view.Contains("/")) {
- view = "grid/editors/" + view;
- }
-
- return view;
- }
-}
-@try
-{
- string editor = EditorView(Model);
- @Html.Partial(editor, (object)Model)
-}
-catch (Exception ex) {
-@ex.ToString()
-}
\ No newline at end of file
diff --git a/src/DemoWebsite.v8/Views/Partials/Grid/Editors/Embed.cshtml b/src/DemoWebsite.v8/Views/Partials/Grid/Editors/Embed.cshtml
deleted file mode 100644
index 4a915a4..0000000
--- a/src/DemoWebsite.v8/Views/Partials/Grid/Editors/Embed.cshtml
+++ /dev/null
@@ -1,10 +0,0 @@
-@model dynamic
-@using Umbraco.Web.Templates
-@{
- string embedValue = Convert.ToString(Model.value);
- embedValue = embedValue.DetectIsJson() ? Model.value.preview : Model.value;
-}
-
-
- @Html.Raw(embedValue)
-
diff --git a/src/DemoWebsite.v8/Views/Partials/Grid/Editors/Macro.cshtml b/src/DemoWebsite.v8/Views/Partials/Grid/Editors/Macro.cshtml
deleted file mode 100644
index e082280..0000000
--- a/src/DemoWebsite.v8/Views/Partials/Grid/Editors/Macro.cshtml
+++ /dev/null
@@ -1,17 +0,0 @@
-@inherits UmbracoViewPage
-@using Umbraco.Web.Templates
-
-
-@if (Model.value != null)
-{
- string macroAlias = Model.value.macroAlias.ToString();
- ViewDataDictionary parameters = new ViewDataDictionary();
- foreach (dynamic mpd in Model.value.macroParamsDictionary)
- {
- parameters.Add(mpd.Name, mpd.Value);
- }
-
-
- @Umbraco.RenderMacro(macroAlias, parameters)
-
-}
diff --git a/src/DemoWebsite.v8/Views/Partials/Grid/Editors/Media.cshtml b/src/DemoWebsite.v8/Views/Partials/Grid/Editors/Media.cshtml
deleted file mode 100644
index dc879fb..0000000
--- a/src/DemoWebsite.v8/Views/Partials/Grid/Editors/Media.cshtml
+++ /dev/null
@@ -1,58 +0,0 @@
-@model dynamic
-@using Umbraco.Core.PropertyEditors.ValueConverters
-
-@if (Model.value != null)
-{
- var url = Model.value.image;
- if(Model.editor.config != null && Model.editor.config.size != null){
- if (Model.value.coordinates != null)
- {
- url = ImageCropperTemplateExtensions.GetCropUrl(
- (string)url,
- width: (int)Model.editor.config.size.width,
- height: (int)Model.editor.config.size.height,
- cropAlias: "default",
- cropDataSet: new ImageCropperValue
- {
- Crops = new[]
- {
- new ImageCropperValue.ImageCropperCrop
- {
- Alias = "default",
- Coordinates = new ImageCropperValue.ImageCropperCropCoordinates
- {
- X1 = (decimal)Model.value.coordinates.x1,
- Y1 = (decimal)Model.value.coordinates.y1,
- X2 = (decimal)Model.value.coordinates.x2,
- Y2 = (decimal)Model.value.coordinates.y2
- }
- }
- }
- });
- }
- else
- {
- url = ImageCropperTemplateExtensions.GetCropUrl(
- (string)url,
- width: (int)Model.editor.config.size.width,
- height: (int)Model.editor.config.size.height,
- cropDataSet: new ImageCropperValue
- {
- FocalPoint = new ImageCropperValue.ImageCropperFocalPoint
- {
- Top = Model.value.focalPoint == null ? 0.5m : Model.value.focalPoint.top,
- Left = Model.value.focalPoint == null ? 0.5m : Model.value.focalPoint.left
- }
- });
- }
- }
-
- var altText = Model.value.altText ?? Model.value.caption ?? string.Empty;
-
-
-
- if (Model.value.caption != null)
- {
- @Model.value.caption
- }
-}
diff --git a/src/DemoWebsite.v8/Views/Partials/Grid/Editors/Rte.cshtml b/src/DemoWebsite.v8/Views/Partials/Grid/Editors/Rte.cshtml
deleted file mode 100644
index 8364958..0000000
--- a/src/DemoWebsite.v8/Views/Partials/Grid/Editors/Rte.cshtml
+++ /dev/null
@@ -1,13 +0,0 @@
-@model dynamic
-@using Umbraco.Web.Composing
-@using Umbraco.Web.Templates
-@{
- var htmlLocalLinkParser = Current.Factory.GetInstance();
- var htmlUrlParser = Current.Factory.GetInstance();
- var htmlImageSourceParser = Current.Factory.GetInstance();
-
- var value = htmlLocalLinkParser.EnsureInternalLinks(Model.value.ToString());
- value = htmlUrlParser.EnsureUrls(value);
- value = htmlImageSourceParser.EnsureImageSources(value);
-}
-@Html.Raw(value)
diff --git a/src/DemoWebsite.v8/Views/Partials/Grid/Editors/Textstring.cshtml b/src/DemoWebsite.v8/Views/Partials/Grid/Editors/Textstring.cshtml
deleted file mode 100644
index 0f40a1e..0000000
--- a/src/DemoWebsite.v8/Views/Partials/Grid/Editors/Textstring.cshtml
+++ /dev/null
@@ -1,24 +0,0 @@
-@model dynamic
-@using Umbraco.Web.Composing
-@using Umbraco.Web.Templates
-
-@if (Model.editor.config.markup != null)
-{
- string markup = Model.editor.config.markup.ToString();
- markup = markup.Replace("#value#", Html.ReplaceLineBreaks((string)Model.value.ToString()).ToString());
-
- if (Model.editor.config.style != null)
- {
- markup = markup.Replace("#style#", Model.editor.config.style.ToString());
- }
-
-
- @Html.Raw(markup)
-
-}
-else
-{
-
- @Model.value
-
-}
diff --git a/src/DemoWebsite.v8/Views/Shared/_Layout.cshtml b/src/DemoWebsite.v8/Views/Shared/_Layout.cshtml
deleted file mode 100644
index 73c9540..0000000
--- a/src/DemoWebsite.v8/Views/Shared/_Layout.cshtml
+++ /dev/null
@@ -1,14 +0,0 @@
-@inherits UmbracoViewPage
-
-
-
-
-
-
- @Model.Name
-
-
-
- @RenderBody()
-
-
diff --git a/src/DemoWebsite.v8/Views/Web.config b/src/DemoWebsite.v8/Views/Web.config
deleted file mode 100644
index 0390401..0000000
--- a/src/DemoWebsite.v8/Views/Web.config
+++ /dev/null
@@ -1,76 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/DemoWebsite.v8/Views/_ViewStart.cshtml b/src/DemoWebsite.v8/Views/_ViewStart.cshtml
deleted file mode 100644
index cdbe864..0000000
--- a/src/DemoWebsite.v8/Views/_ViewStart.cshtml
+++ /dev/null
@@ -1,3 +0,0 @@
-@{
- Layout = "~/Views/Shared/_Layout.cshtml";
-}
diff --git a/src/DemoWebsite.v8/Web.Debug.config b/src/DemoWebsite.v8/Web.Debug.config
deleted file mode 100644
index fae9cfe..0000000
--- a/src/DemoWebsite.v8/Web.Debug.config
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/DemoWebsite.v8/Web.Release.config b/src/DemoWebsite.v8/Web.Release.config
deleted file mode 100644
index da6e960..0000000
--- a/src/DemoWebsite.v8/Web.Release.config
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/DemoWebsite.v8/Web.config b/src/DemoWebsite.v8/Web.config
deleted file mode 100644
index 497ca36..0000000
--- a/src/DemoWebsite.v8/Web.config
+++ /dev/null
@@ -1,274 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/DemoWebsite.v8/config/BackOfficeTours/getting-started.json b/src/DemoWebsite.v8/config/BackOfficeTours/getting-started.json
deleted file mode 100644
index 75797f7..0000000
--- a/src/DemoWebsite.v8/config/BackOfficeTours/getting-started.json
+++ /dev/null
@@ -1,474 +0,0 @@
-[
- {
- "name": "Email Marketing",
- "alias": "umbEmailMarketing",
- "group": "Email Marketing",
- "groupOrder": 10,
- "hidden": true,
- "requiredSections": [
- "content"
- ],
- "steps": [
- {
- "title": "Do you want to stay updated on everything Umbraco?",
- "content": "Thank you for using Umbraco! Would you like to stay up-to-date with Umbraco product updates, security advisories, community news and special offers? Sign up for our newsletter and never miss out on the latest Umbraco news.
By signing up, you agree that we can use your info according to our privacy policy .
",
- "view": "emails",
- "type": "promotion"
- },
- {
- "title": "Thank you for subscribing to our mailing list",
- "view": "confirm"
- }
- ]
- },
- {
- "name": "Introduction",
- "alias": "umbIntroIntroduction",
- "group": "Getting Started",
- "groupOrder": 100,
- "allowDisable": true,
- "requiredSections": [
- "content"
- ],
- "steps": [
- {
- "title": "Welcome to Umbraco - The Friendly CMS",
- "content": "Thank you for choosing Umbraco - we think this could be the beginning of something beautiful. While it may feel overwhelming at first, we've done a lot to make the learning curve as smooth and fast as possible.
In this quick tour we will introduce you to the main areas of Umbraco and show you how to best get started.
If you don't want to take the tour now you can always start it by opening the Help drawer in the top right corner.
",
- "type": "intro"
- },
- {
- "element": "[data-element='sections']",
- "elementPreventClick": true,
- "title": "Main Menu",
- "content": "This is the main menu in Umbraco backoffice. Here you can navigate between the different sections, search for items, see your user profile and open the help drawer.",
- "backdropOpacity": 0.6
- },
- {
- "element": "[data-element='section-content']",
- "elementPreventClick": true,
- "title": "Sections",
- "content": "Each area in Umbraco is called a Section . Right now you are in the Content section, when you want to go to another section simply click on the appropriate name in the main menu and you'll be there in no time.",
- "backdropOpacity": 0.6
- },
- {
- "element": "#tree",
- "elementPreventClick": true,
- "title": "The Tree",
- "content": "This is the Tree and it is the main navigation inside a section.
In the Content section the tree is called the Content tree and here you can navigate the content of your website.
"
- },
- {
- "element": "[data-element='dashboard']",
- "elementPreventClick": true,
- "title": "Dashboards",
- "content": "A dashboard is the main view you are presented with when entering a section within the backoffice, and can be used to show valuable information to the users of the system.
Notice that some sections have multiple dashboards.
"
- },
- {
- "element": "[data-element='global-search']",
- "title": "Search",
- "content": "The search allows you to quickly find whatever you're looking for across sections within Umbraco."
- },
- {
- "element": "[data-element='global-user']",
- "title": "User profile",
- "content": "Now click on your user avatar to open the user profile dialog.",
- "event": "click",
- "backdropOpacity": 0.6
- },
- {
- "element": "[data-element~='overlay-user']",
- "elementPreventClick": true,
- "title": "User profile",
- "content": "Here you can see details about your user, change your password and log out of Umbraco.
In the User section you will be able to do more advanced user management.
"
- },
- {
- "element": "[data-element~='overlay-user'] [data-element='button-overlayClose']",
- "title": "User profile",
- "content": "Let's close the user profile again.",
- "event": "click"
- },
- {
- "element": "[data-element='global-help']",
- "title": "Help",
- "content": "If you ever find yourself in trouble click here to open the Help drawer.",
- "event": "click",
- "backdropOpacity": 0.6
- },
- {
- "element": "[data-element='drawer']",
- "elementPreventClick": true,
- "title": "Help",
- "content": "In the help drawer you will find articles and videos related to the section you are using.
This is also where you will find the next tour on how to get started with Umbraco.
",
- "backdropOpacity": 0.6
- },
- {
- "element": "[data-element='drawer'] [data-element='help-tours']",
- "title": "Tours",
- "content": "To continue your journey on getting started with Umbraco, you can find more tours right here."
- }
- ]
- },
- {
- "name": "Create document type",
- "alias": "umbIntroCreateDocType",
- "group": "Getting Started",
- "groupOrder": 100,
- "requiredSections": [
- "settings"
- ],
- "steps": [
- {
- "title": "Create your first Document Type",
- "content": "Step 1 of any site is to create a Document Type . A Document Type is a template for content. For each type of content you want to create you'll create a Document Type. This will define where content based on this Document Type can be created, how many properties it holds and what the input method should be for these properties.
When you have at least one Document Type in place you can start creating content and this content can then be used in a template.
In this tour you will learn how to set up a basic Document Type with a property to enter a short text.
",
- "type": "intro"
- },
- {
- "element": "#applications [data-element='section-settings']",
- "title": "Navigate to the Settings sections",
- "content": "In the Settings section you can create and manage Document types.",
- "event": "click",
- "backdropOpacity": 0.6
- },
- {
- "element": "#tree [data-element='tree-item-documentTypes']",
- "title": "Create Document Type",
- "content": "Hover over the Document Type tree and click the three small dots to open the context menu .
",
- "event": "click",
- "eventElement": "#tree [data-element='tree-item-documentTypes'] [data-element='tree-item-options']"
- },
- {
- "element": "#dialog [data-element='action-documentType']",
- "title": "Create Document Type",
- "content": "Click Document Type to create a new document type with a template. The template will be automatically created and set as the default template for this Document Type.
You will use the template in a later tour to render content.
",
- "event": "click"
- },
- {
- "element": "[data-element='editor-name-field']",
- "title": "Enter a name",
- "content": "Your Document Type needs a name. Enter Home Page
in the field and click Next .",
- "view": "doctypename"
- },
- {
- "element": "[data-element='editor-description']",
- "title": "Enter a description",
- "content": "
A description helps to pick the right document type when creating content.
Write a description for our Home page. It could be:
The home page of the website "
- },
- {
- "element": "[data-element='group-add']",
- "title": "Add group",
- "content": "Group are used to organize properties on content in the Content section. Click Add Group to add a group.",
- "event": "click"
- },
- {
- "element": "[data-element='group-name-field']",
- "title": "Name the group",
- "content": "Enter Home
in the group name.
You can name a group anything you want and if you have a lot of properties it can be useful to add multiple groups.
",
- "view": "tabName"
- },
- {
- "element": "[data-element='property-add']",
- "title": "Add a property",
- "content": "Properties are the different input fields on a content page.
On our Home Page we want to add a welcome text.
Click Add property to open the property dialog.
",
- "event": "click"
- },
- {
- "element": "[data-element='editor-property-settings'] [data-element='property-name']",
- "title": "Name the property",
- "content": "Enter Welcome Text
as the name for the property.",
- "view": "propertyname"
- },
- {
- "element": "[data-element~='editor-property-settings'] [data-element='property-description']",
- "title": "Enter a description",
- "content": "A description will help your editor fill in the right content.
Enter a description for the property editor. It could be:
Write a nice introduction text so the visitors feel welcome "
- },
- {
- "element": "[data-element~='editor-property-settings'] [data-element='editor-add']",
- "title": "Add editor",
- "content": "When you add an editor you choose what the input method for this property will be. Click Add editor to open the editor picker dialog.",
- "event": "click"
- },
- {
- "element": "[ng-controller*='Umbraco.Editors.DataTypePickerController'] [data-element='editor-data-type-picker']",
- "elementPreventClick": true,
- "title": "Editor picker",
- "content": "In the editor picker dialog we can pick one of the many built-in editors.
"
- },
- {
- "element": "[data-element~='editor-data-type-picker'] [data-element='datatype-Textarea']",
- "title": "Select editor",
- "content": "Select the Textarea editor. This will add a textarea to the Welcome Text property.",
- "event": "click"
- },
- {
- "element": "[data-element='editor-data-type-picker'] [data-element='datatypeconfig-Textarea']",
- "title": "Editor settings",
- "content": "Each property editor can have individual settings. For the textarea editor you can set a character limit but in this case it is not needed.",
- "event": "click"
- },
- {
- "element": "[data-element~='editor-property-settings'] [data-element='button-submit']",
- "title": "Add property to document type",
- "content": "Click Submit to add the property to the document type.",
- "event": "click"
- },
- {
- "element": "[data-element~='sub-view-permissions']",
- "title": "Check the document type permissions",
- "content": "Click Permissions to view the permissions page.",
- "event": "click"
- },
- {
- "element": "[data-element~='permissions-allow-as-root']",
- "title": "Allow this document type to work at the root of your site",
- "content": "Toggle the switch Allow as root to allow new content pages based on this document type to be created at the root of your site",
- "event": "click"
- },
- {
- "element": "[data-element='button-save']",
- "title": "Save the document type",
- "content": "All we need now is to save the document type. Click Save to create and save your new document type.",
- "event": "click"
- }
- ]
- },
- {
- "name": "Create Content",
- "alias": "umbIntroCreateContent",
- "group": "Getting Started",
- "groupOrder": 100,
- "requiredSections": [
- "content"
- ],
- "steps": [
- {
- "title": "Creating your first content node",
- "content": "In this tour you will learn how to create the home page for your website. It will use the Home Page Document type you created in the previous tour.
",
- "type": "intro"
- },
- {
- "element": "#applications [data-element='section-content']",
- "title": "Navigate to the Content section",
- "content": "In the Content section you can create and manage the content of the website.
The Content section contains the content of your website. Content is displayed as nodes in the content tree.
",
- "event": "click",
- "backdropOpacity": 0.6
- },
- {
- "element": "[data-element='tree-root']",
- "title": "Open context menu",
- "content": "Open the context menu by hovering over the root of the content section.
Now click the three small dots to the right.
",
- "event": "click",
- "eventElement": "#tree [data-element='tree-root'] [data-element='tree-item-options']"
- },
- {
- "element": "[data-element='action-create-homePage']",
- "title": "Create Home page",
- "content": "The context menu shows you all the actions that are available on a node
Click on Home Page to create a new page of type Home Page .
",
- "event": "click"
- },
- {
- "element": "[data-element='editor-content'] [data-element='editor-name-field']",
- "title": "Give your new page a name",
- "content": "Our new page needs a name. Enter Home
in the field and click Next .
",
- "view": "nodename"
- },
- {
- "element": "[data-element='editor-content'] [data-element='property-welcomeText']",
- "title": "Add a welcome text",
- "content": "Add content to the Welcome Text field.
If you don't have any ideas here is a start:
I am learning Umbraco. High Five I Rock #H5IR ."
- },
- {
- "element": "[data-element='editor-content'] [data-element='button-saveAndPublish']",
- "title": "Publish",
- "content": "Now click the Publish button to publish your changes.
",
- "event": "click"
- }
- ]
- },
- {
- "name": "Render in template",
- "alias": "umbIntroRenderInTemplate",
- "group": "Getting Started",
- "groupOrder": 100,
- "requiredSections": [
- "settings"
- ],
- "steps": [
- {
- "title": "Render your content in a template",
- "content": "Templating in Umbraco builds on the concept of Razor Views from ASP.NET MVC. This tour is a sneak peak on how to write templates in Umbraco.
In this tour you will learn how to render content from the Home Page document type so you can see the content added to our Home content page.
",
- "type": "intro"
- },
- {
- "element": "#applications [data-element='section-settings']",
- "title": "Navigate to the Settings section",
- "content": "In the Settings section you will find all the templates.
It is of course also possible to edit all your code files in your favorite code editor.
",
- "event": "click",
- "backdropOpacity": 0.6
- },
- {
- "element": "#tree [data-element='tree-item-templates']",
- "title": "Expand the Templates node",
- "content": "To see all our templates click the small triangle to the left of the templates node.
",
- "event": "click",
- "eventElement": "#tree [data-element='tree-item-templates'] [data-element='tree-item-expand']",
- "view": "templatetree",
- "skipStepIfVisible": "#tree [data-element='tree-item-templates'] > div > button[data-element=tree-item-expand] span.icon-navigation-down"
- },
- {
- "element": "#tree [data-element='tree-item-templates'] [data-element='tree-item-Home Page']",
- "title": "Open Home template",
- "content": "Click the Home Page template to open and edit it.
",
- "eventElement": "#tree [data-element='tree-item-templates'] [data-element='tree-item-Home Page'] a.umb-tree-item__label",
- "event": "click"
- },
- {
- "element": "[data-element='editor-templates'] [data-element='code-editor']",
- "title": "Edit template",
- "content": "The template can be edited here or in your favorite code editor.
To render the field from the document type add the following to the template:
<h1>@Model.Name</h1> <p>@Model.WelcomeText</p> "
- },
- {
- "element": "[data-element='editor-templates'] [data-element='button-save']",
- "title": "Save the template",
- "content": "Click the Save button and your template will be saved.",
- "event": "click"
- }
- ]
- },
- {
- "name": "View Home page",
- "alias": "umbIntroViewHomePage",
- "group": "Getting Started",
- "groupOrder": 100,
- "requiredSections": [
- "content"
- ],
- "steps": [
- {
- "title": "View your Umbraco site",
- "content": "Our three main components for a page are done: Document type, Template, and Content . It is now time to see the result.
In this tour you will learn how to see your published website.
",
- "type": "intro"
- },
- {
- "element": "#applications [data-element='section-content']",
- "title": "Navigate to the content sections",
- "content": "In the Content section you will find the content of our website.",
- "event": "click",
- "backdropOpacity": 0.6
- },
- {
- "element": "#tree [data-element='tree-item-Home']",
- "title": "Open the Home page",
- "content": "Click the Home page to open it.
",
- "event": "click",
- "eventElement": "#tree [data-element='tree-item-Home'] a.umb-tree-item__label"
- },
- {
- "element": "[data-element='editor-content'] [data-element='sub-view-umbInfo']",
- "title": "Info",
- "content": "Under the Info-app you will find the default information about a content item.
",
- "event": "click"
- },
- {
- "element": "[data-element='editor-content'] [data-element='node-info-urls']",
- "title": "Open page",
- "content": "Click the Link to document to view your page.
Tip: Click the preview button in the bottom right corner to preview changes without publishing them.
",
- "event": "click",
- "eventElement": "[data-element='editor-content'] [data-element='node-info-urls'] a[target='_blank']"
- }
- ]
- },
- {
- "name": "The Media library",
- "alias": "umbIntroMediaSection",
- "group": "Getting Started",
- "groupOrder": 100,
- "requiredSections": [
- "media"
- ],
- "steps": [
- {
- "title": "How to use the media library",
- "content": "A website would be boring without media content. In Umbraco you can manage all your images, documents, videos etc. in the Media section . Here you can upload and organise your media items and see details about each item.
In this tour you will learn how to upload and organise your Media library in Umbraco. It will also show you how to view details about a specific media item.
",
- "type": "intro"
- },
- {
- "element": "#applications [data-element='section-media']",
- "title": "Navigate to the Media section",
- "content": "The media section is where you manage all your media items.",
- "event": "click",
- "backdropOpacity": 0.6
- },
- {
- "element": "#tree [data-element='tree-root']",
- "title": "Create a new folder",
- "content": "First create a folder for your images. Hover over the media root node and click the three small dots on the right side of the item.
",
- "event": "click",
- "eventElement": "#tree [data-element='tree-root'] [data-element='tree-item-options']"
- },
- {
- "element": "#dialog [data-element='action-Folder']",
- "title": "Create a new folder",
- "content": "Select the Folder option to select the type folder.
",
- "event": "click"
- },
- {
- "element": "[data-element='editor-media'] [data-element='editor-name-field']",
- "title": "Enter a name",
- "content": "Enter My Images
in the field.
",
- "view": "foldername"
- },
- {
- "element": "[data-element='editor-media'] [data-element='button-save']",
- "title": "Save the folder",
- "content": "Click the Save button to create the new folder.
",
- "event": "click"
- },
- {
- "element": "[data-element='editor-media'] [data-element='dropzone']",
- "title": "Upload images",
- "content": "In the upload area you can upload your media items.
Click the Click here to choose files button and select a couple of images on your computer and upload them.
",
- "view": "uploadimages"
- },
- {
- "element": "[data-element='editor-media'] [data-element='media-grid-item-0']",
- "title": "View media item details",
- "content": "Hover over the media item and Click the white bar to view details about the media item.",
- "event": "click",
- "eventElement": "[data-element='editor-media'] [data-element='media-grid-item-0'] [data-element='media-grid-item-edit']"
- },
- {
- "element": "[data-element='editor-media'] [data-element='property-umbracoFile']",
- "elementPreventClick": true,
- "title": "The uploaded image",
- "content": "Here you can see the image you have uploaded.
"
- },
- {
- "element": "[data-element='editor-media'] [data-element='property-umbracoBytes']",
- "title": "Image size",
- "content": "You will also find other details about the image, like the size.
Media items work in much the same way as content. So you can add extra properties to an image by creating or editing the Media types in the Settings section.
"
- },
- {
- "element": "[data-element='editor-media'] [data-element='sub-view-umbInfo']",
- "title": "Info",
- "content": "Like the content section you can also find default information about the media item. You will find these under the info app.",
- "event": "click"
- },
- {
- "element": "[data-element='editor-media'] [data-element='node-info-urls']",
- "title": "Link to media",
- "content": "The path to the media item..."
- },
- {
- "element": "[data-element='editor-media'] [data-element='node-info-update-date']",
- "title": "Last edited",
- "content": "...and information about when the media item has been created and edited."
- },
- {
- "element": "[data-element='editor-container']",
- "elementPreventClick": true,
- "title": "Using media items",
- "content": "You can reference a media item directly in a template by using the path or try adding a Media Picker to a document type property so you can select media items from the content section."
- }
- ]
- }
-]
diff --git a/src/DemoWebsite.v8/config/ClientDependency.config b/src/DemoWebsite.v8/config/ClientDependency.config
deleted file mode 100644
index 91be07e..0000000
--- a/src/DemoWebsite.v8/config/ClientDependency.config
+++ /dev/null
@@ -1,56 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/DemoWebsite.v8/config/HealthChecks.config b/src/DemoWebsite.v8/config/HealthChecks.config
deleted file mode 100644
index 4e927e8..0000000
--- a/src/DemoWebsite.v8/config/HealthChecks.config
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/DemoWebsite.v8/config/Lang/cs-CZ.user.xml b/src/DemoWebsite.v8/config/Lang/cs-CZ.user.xml
deleted file mode 100644
index d4902d5..0000000
--- a/src/DemoWebsite.v8/config/Lang/cs-CZ.user.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/src/DemoWebsite.v8/config/Lang/da-DK.user.xml b/src/DemoWebsite.v8/config/Lang/da-DK.user.xml
deleted file mode 100644
index 7a8ce2c..0000000
--- a/src/DemoWebsite.v8/config/Lang/da-DK.user.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/src/DemoWebsite.v8/config/Lang/de-DE.user.xml b/src/DemoWebsite.v8/config/Lang/de-DE.user.xml
deleted file mode 100644
index 7a8ce2c..0000000
--- a/src/DemoWebsite.v8/config/Lang/de-DE.user.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/src/DemoWebsite.v8/config/Lang/en-GB.user.xml b/src/DemoWebsite.v8/config/Lang/en-GB.user.xml
deleted file mode 100644
index 7a8ce2c..0000000
--- a/src/DemoWebsite.v8/config/Lang/en-GB.user.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/src/DemoWebsite.v8/config/Lang/en-US.user.xml b/src/DemoWebsite.v8/config/Lang/en-US.user.xml
deleted file mode 100644
index 7a8ce2c..0000000
--- a/src/DemoWebsite.v8/config/Lang/en-US.user.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/src/DemoWebsite.v8/config/Lang/es-ES.user.xml b/src/DemoWebsite.v8/config/Lang/es-ES.user.xml
deleted file mode 100644
index 7a8ce2c..0000000
--- a/src/DemoWebsite.v8/config/Lang/es-ES.user.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/src/DemoWebsite.v8/config/Lang/fr-FR.user.xml b/src/DemoWebsite.v8/config/Lang/fr-FR.user.xml
deleted file mode 100644
index 7a8ce2c..0000000
--- a/src/DemoWebsite.v8/config/Lang/fr-FR.user.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/src/DemoWebsite.v8/config/Lang/he-IL.user.xml b/src/DemoWebsite.v8/config/Lang/he-IL.user.xml
deleted file mode 100644
index 3a0ad35..0000000
--- a/src/DemoWebsite.v8/config/Lang/he-IL.user.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/src/DemoWebsite.v8/config/Lang/it-IT.user.xml b/src/DemoWebsite.v8/config/Lang/it-IT.user.xml
deleted file mode 100644
index 3a0ad35..0000000
--- a/src/DemoWebsite.v8/config/Lang/it-IT.user.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/src/DemoWebsite.v8/config/Lang/ja-JP.user.xml b/src/DemoWebsite.v8/config/Lang/ja-JP.user.xml
deleted file mode 100644
index 7a8ce2c..0000000
--- a/src/DemoWebsite.v8/config/Lang/ja-JP.user.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/src/DemoWebsite.v8/config/Lang/ko-KR.user.xml b/src/DemoWebsite.v8/config/Lang/ko-KR.user.xml
deleted file mode 100644
index 3a0ad35..0000000
--- a/src/DemoWebsite.v8/config/Lang/ko-KR.user.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/src/DemoWebsite.v8/config/Lang/nb-NO.user.xml b/src/DemoWebsite.v8/config/Lang/nb-NO.user.xml
deleted file mode 100644
index 3a0ad35..0000000
--- a/src/DemoWebsite.v8/config/Lang/nb-NO.user.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/src/DemoWebsite.v8/config/Lang/nl-NL.user.xml b/src/DemoWebsite.v8/config/Lang/nl-NL.user.xml
deleted file mode 100644
index 7a8ce2c..0000000
--- a/src/DemoWebsite.v8/config/Lang/nl-NL.user.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/src/DemoWebsite.v8/config/Lang/pl-PL.user.xml b/src/DemoWebsite.v8/config/Lang/pl-PL.user.xml
deleted file mode 100644
index 3a0ad35..0000000
--- a/src/DemoWebsite.v8/config/Lang/pl-PL.user.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/src/DemoWebsite.v8/config/Lang/pt-BR.user.xml b/src/DemoWebsite.v8/config/Lang/pt-BR.user.xml
deleted file mode 100644
index 3a0ad35..0000000
--- a/src/DemoWebsite.v8/config/Lang/pt-BR.user.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/src/DemoWebsite.v8/config/Lang/ru-RU.user.xml b/src/DemoWebsite.v8/config/Lang/ru-RU.user.xml
deleted file mode 100644
index 7a8ce2c..0000000
--- a/src/DemoWebsite.v8/config/Lang/ru-RU.user.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/src/DemoWebsite.v8/config/Lang/sv-SE.user.xml b/src/DemoWebsite.v8/config/Lang/sv-SE.user.xml
deleted file mode 100644
index 3a0ad35..0000000
--- a/src/DemoWebsite.v8/config/Lang/sv-SE.user.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/src/DemoWebsite.v8/config/Lang/zh-CN.user.xml b/src/DemoWebsite.v8/config/Lang/zh-CN.user.xml
deleted file mode 100644
index 8d2add9..0000000
--- a/src/DemoWebsite.v8/config/Lang/zh-CN.user.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/src/DemoWebsite.v8/config/grid.editors.config.js b/src/DemoWebsite.v8/config/grid.editors.config.js
deleted file mode 100644
index 210d167..0000000
--- a/src/DemoWebsite.v8/config/grid.editors.config.js
+++ /dev/null
@@ -1,50 +0,0 @@
-[
- {
- "name": "Rich text editor",
- "alias": "rte",
- "view": "rte",
- "icon": "icon-article"
- },
- {
- "name": "Image",
- "nameTemplate": "{{ value && value.udi ? (value.udi | ncNodeName) : '' }}",
- "alias": "media",
- "view": "media",
- "icon": "icon-picture"
- },
- {
- "name": "Macro",
- "nameTemplate": "{{ value && value.macroAlias ? value.macroAlias : '' }}",
- "alias": "macro",
- "view": "macro",
- "icon": "icon-settings-alt"
- },
- {
- "name": "Embed",
- "alias": "embed",
- "view": "embed",
- "icon": "icon-movie-alt"
- },
- {
- "name": "Headline",
- "nameTemplate": "{{ value }}",
- "alias": "headline",
- "view": "textstring",
- "icon": "icon-coin",
- "config": {
- "style": "font-size: 36px; line-height: 45px; font-weight: bold",
- "markup": "#value# "
- }
- },
- {
- "name": "Quote",
- "nameTemplate": "{{ value ? value.substring(0,32) + (value.length > 32 ? '...' : '') : '' }}",
- "alias": "quote",
- "view": "textstring",
- "icon": "icon-quote",
- "config": {
- "style": "border-left: 3px solid #ccc; padding: 10px; color: #ccc; font-family: serif; font-style: italic; font-size: 18px",
- "markup": "#value# "
- }
- }
-]
diff --git a/src/DemoWebsite.v8/config/imageprocessor/cache.config b/src/DemoWebsite.v8/config/imageprocessor/cache.config
deleted file mode 100644
index 920bcd5..0000000
--- a/src/DemoWebsite.v8/config/imageprocessor/cache.config
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/DemoWebsite.v8/config/imageprocessor/processing.config b/src/DemoWebsite.v8/config/imageprocessor/processing.config
deleted file mode 100644
index 5737cde..0000000
--- a/src/DemoWebsite.v8/config/imageprocessor/processing.config
+++ /dev/null
@@ -1,67 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/DemoWebsite.v8/config/imageprocessor/security.config b/src/DemoWebsite.v8/config/imageprocessor/security.config
deleted file mode 100644
index 7bce8ee..0000000
--- a/src/DemoWebsite.v8/config/imageprocessor/security.config
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/DemoWebsite.v8/config/logviewer.searches.config.js b/src/DemoWebsite.v8/config/logviewer.searches.config.js
deleted file mode 100644
index 345fe23..0000000
--- a/src/DemoWebsite.v8/config/logviewer.searches.config.js
+++ /dev/null
@@ -1,42 +0,0 @@
-[
- {
- "name": "Find all logs where the Level is NOT Verbose and NOT Debug",
- "query": "Not(@Level='Verbose') and Not(@Level='Debug')"
- },
- {
- "name": "Find all logs that has an exception property (Warning, Error & Fatal with Exceptions)",
- "query": "Has(@Exception)"
- },
- {
- "name": "Find all logs that have the property 'Duration'",
- "query": "Has(Duration)"
- },
- {
- "name": "Find all logs that have the property 'Duration' and the duration is greater than 1000ms",
- "query": "Has(Duration) and Duration > 1000"
- },
- {
- "name": "Find all logs that are from the namespace 'Umbraco.Core'",
- "query": "StartsWith(SourceContext, 'Umbraco.Core')"
- },
- {
- "name": "Find all logs that use a specific log message template",
- "query": "@MessageTemplate = '[Timing {TimingId}] {EndMessage} ({TimingDuration}ms)'"
- },
- {
- "name": "Find logs where one of the items in the SortedComponentTypes property array is equal to",
- "query": "SortedComponentTypes[?] = 'Umbraco.Web.Search.ExamineComponent'"
- },
- {
- "name": "Find logs where one of the items in the SortedComponentTypes property array contains",
- "query": "Contains(SortedComponentTypes[?], 'DatabaseServer')"
- },
- {
- "name": "Find all logs that the message has localhost in it with SQL like",
- "query": "@Message like '%localhost%'"
- },
- {
- "name": "Find all logs that the message that starts with 'end' in it with SQL like",
- "query": "@Message like 'end%'"
- }
-]
diff --git a/src/DemoWebsite.v8/config/serilog.config b/src/DemoWebsite.v8/config/serilog.config
deleted file mode 100644
index 4d9151b..0000000
--- a/src/DemoWebsite.v8/config/serilog.config
+++ /dev/null
@@ -1,41 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/DemoWebsite.v8/config/serilog.user.config b/src/DemoWebsite.v8/config/serilog.user.config
deleted file mode 100644
index 8f20740..0000000
--- a/src/DemoWebsite.v8/config/serilog.user.config
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/DemoWebsite.v8/config/splashes/noNodes.aspx b/src/DemoWebsite.v8/config/splashes/noNodes.aspx
deleted file mode 100644
index 46a27a4..0000000
--- a/src/DemoWebsite.v8/config/splashes/noNodes.aspx
+++ /dev/null
@@ -1,61 +0,0 @@
-<%@ Page Language="C#" AutoEventWireup="True" Inherits="Umbraco.Web.UI.Config.Splashes.NoNodes" CodeBehind="NoNodes.aspx.cs" %>
-<%@ Import Namespace="Umbraco.Core.Configuration" %>
-<%@ Import Namespace="Umbraco.Core.IO" %>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Welcome to your Umbraco installation
-
You're seeing this wonderful page because your website doesn't contain any published content yet.
-
-
-
-
-
-
-
Easy start with Umbraco.tv
-
We have created a bunch of 'how-to' videos, to get you easily started with Umbraco. Learn how to build projects in just a couple of minutes. Easiest CMS in the world.
-
-
Umbraco.tv →
-
-
-
-
Be a part of the community
-
The Umbraco community is the best of its kind, be sure to visit, and if you have any questions, we're sure that you can get your answers from the community.
-
-
our.Umbraco →
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/DemoWebsite.v8/config/tinyMceConfig.config b/src/DemoWebsite.v8/config/tinyMceConfig.config
deleted file mode 100644
index 7f7cb65..0000000
--- a/src/DemoWebsite.v8/config/tinyMceConfig.config
+++ /dev/null
@@ -1,74 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- paste
- anchor
- charmap
- table
- lists
- advlist
- hr
- autolink
- directionality
- tabfocus
- searchreplace
- fullscreen
-
-
-
-
- font
-
-
-
-
- raw
-
-
diff --git a/src/DemoWebsite.v8/config/umbracoSettings.config b/src/DemoWebsite.v8/config/umbracoSettings.config
deleted file mode 100644
index 5bb0c10..0000000
--- a/src/DemoWebsite.v8/config/umbracoSettings.config
+++ /dev/null
@@ -1,266 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
- 1
-
-
-
-
-
-
-
- your@email.here
-
-
-
-
-
-
-
- …
-
-
- Click to end preview mode
-
-
-
-
- ]]>
-
-
-
- throw
-
-
- ashx,aspx,ascx,config,cshtml,vbhtml,asmx,air,axd,swf,xml,xhtml,html,htm,php,htaccess,xamlx
-
-
- assets/img/login.jpg
-
-
- assets/img/application/umbraco_logo_white.svg
-
-
-
-
- false
-
- true
-
- false
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/DemoWebsite.v8/packages.config b/src/DemoWebsite.v8/packages.config
deleted file mode 100644
index 978870a..0000000
--- a/src/DemoWebsite.v8/packages.config
+++ /dev/null
@@ -1,77 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/DemoWebsite.v9/.gitignore b/src/DemoWebsite.v9/.gitignore
deleted file mode 100644
index b612d22..0000000
--- a/src/DemoWebsite.v9/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-/wwwroot
-/Smidge
\ No newline at end of file
diff --git a/src/DemoWebsite.v9/App_Plugins/MyContentBlocksAddon/mcba-button.html b/src/DemoWebsite.v9/App_Plugins/MyContentBlocksAddon/mcba-button.html
deleted file mode 100644
index f2dbca5..0000000
--- a/src/DemoWebsite.v9/App_Plugins/MyContentBlocksAddon/mcba-button.html
+++ /dev/null
@@ -1,4 +0,0 @@
-
- 🔺
- 🔻
-
\ No newline at end of file
diff --git a/src/DemoWebsite.v9/App_Plugins/MyContentBlocksAddon/mcba-button.js b/src/DemoWebsite.v9/App_Plugins/MyContentBlocksAddon/mcba-button.js
deleted file mode 100644
index e1238db..0000000
--- a/src/DemoWebsite.v9/App_Plugins/MyContentBlocksAddon/mcba-button.js
+++ /dev/null
@@ -1,12 +0,0 @@
-angular.module("MyContentBlocksAddon").component("mcbaButton", {
- templateUrl: "/App_Plugins/MyContentBlocksAddon/mcba-button.html",
-
- bindings: {
- block: "<",
- definition: "<",
- },
-
- require: {
- blockCtrl: "^perplexContentBlock"
- },
-});
diff --git a/src/DemoWebsite.v9/App_Plugins/MyContentBlocksAddon/mcba-init.js b/src/DemoWebsite.v9/App_Plugins/MyContentBlocksAddon/mcba-init.js
deleted file mode 100644
index 450c4dc..0000000
--- a/src/DemoWebsite.v9/App_Plugins/MyContentBlocksAddon/mcba-init.js
+++ /dev/null
@@ -1,9 +0,0 @@
-angular.module("MyContentBlocksAddon", ["perplexContentBlocks"])
-angular.module("umbraco").requires.push("MyContentBlocksAddon");
-
-angular.module("MyContentBlocksAddon").run([
- "perplexContentBlocksCustomComponents",
- function (customComponents) {
- customComponents.block.main = "mcba-main";
- customComponents.block.buttons.push("mcba-button");
- }]);
diff --git a/src/DemoWebsite.v9/App_Plugins/MyContentBlocksAddon/mcba-main.html b/src/DemoWebsite.v9/App_Plugins/MyContentBlocksAddon/mcba-main.html
deleted file mode 100644
index a999567..0000000
--- a/src/DemoWebsite.v9/App_Plugins/MyContentBlocksAddon/mcba-main.html
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
-
-
-toggle
-disable default
-enable default
-
-
-
-
-
-
-
-
disable variant
-
enable variant
-
-
-
-
-
Remove variant
-
-
-
-
-
- Add variant
-
diff --git a/src/DemoWebsite.v9/App_Plugins/MyContentBlocksAddon/mcba-main.js b/src/DemoWebsite.v9/App_Plugins/MyContentBlocksAddon/mcba-main.js
deleted file mode 100644
index d083074..0000000
--- a/src/DemoWebsite.v9/App_Plugins/MyContentBlocksAddon/mcba-main.js
+++ /dev/null
@@ -1,20 +0,0 @@
-angular.module("MyContentBlocksAddon").component("mcbaMain", {
- templateUrl: "/App_Plugins/MyContentBlocksAddon/mcba-main.html",
-
- bindings: {
- block: "<",
- definition: "<",
- },
-
- require: {
- blockCtrl: "^perplexContentBlock"
- },
-
- controller: [
- function mcbaMain() {
- this.$onInit = function () {
- // TODO
- }
- }
- ],
-});
diff --git a/src/DemoWebsite.v9/App_Plugins/MyContentBlocksAddon/package.manifest b/src/DemoWebsite.v9/App_Plugins/MyContentBlocksAddon/package.manifest
deleted file mode 100644
index ce30d1d..0000000
--- a/src/DemoWebsite.v9/App_Plugins/MyContentBlocksAddon/package.manifest
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "javascript": [
- "~/App_Plugins/MyContentBlocksAddon/mcba-init.js",
- "~/App_Plugins/MyContentBlocksAddon/mcba-main.js",
- "~/App_Plugins/MyContentBlocksAddon/mcba-button.js"
- ]
-}
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Assets/BaremetricsCalendar/public/js/Calendar.js b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Assets/BaremetricsCalendar/public/js/Calendar.js
deleted file mode 100644
index 4dabee8..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Assets/BaremetricsCalendar/public/js/Calendar.js
+++ /dev/null
@@ -1,787 +0,0 @@
-'use strict';
-
-
-(function (root, factory) {
- if (typeof define === 'function' && define.amd) {
- // AMD. Register as an anonymous module.
- define(['jquery', 'moment'], factory);
- } else if (typeof exports === 'object') {
- // Node/CommonJS
- module.exports = factory(require('jquery'), require('moment'));
- } else {
- // Browser globals
- root.Calendar = factory(jQuery, moment);
- }
-} (this, function ($, moment) {
- function Calendar(settings) {
- var self = this;
-
- this.settings = settings;
-
- this.calIsOpen = false;
- this.presetIsOpen = false;
- this.sameDayRange = settings.same_day_range || false;
-
- this.element = settings.element || $('.daterange');
- this.selected = null;
-
- this.type = this.element.hasClass('daterange--single') ? 'single' : 'double';
- this.required = settings.required == false ? false : true;
-
- this.format = settings.format || {};
- this.format.input = settings.format && settings.format.input || 'MMMM D, YYYY';
- this.format.preset = settings.format && settings.format.preset || 'll';
- this.format.jump_month = settings.format && settings.format.jump_month || 'MMMM';
- this.format.jump_year = settings.format && settings.format.jump_year || 'YYYY';
-
- this.placeholder = settings.placeholder || this.format.input;
-
- this.days_array = settings.days_array && settings.days_array.length == 7 ?
- settings.days_array : moment.weekdaysMin();
-
- this.orig_start_date = null;
- this.orig_end_date = null;
- this.orig_current_date = null;
-
- this.earliest_date = settings.earliest_date ? moment(settings.earliest_date)
- : moment('1900-01-01', 'YYYY-MM-DD');
- this.latest_date = settings.latest_date ? moment(settings.latest_date)
- : moment('2900-12-31', 'YYYY-MM-DD');
- this.end_date = settings.end_date ? moment(settings.end_date)
- : (this.type == 'double' ? moment() : null);
- this.start_date = settings.start_date ? moment(settings.start_date)
- : (this.type == 'double' ? this.end_date.clone().subtract(1, 'month') : null);
- this.current_date = settings.current_date ? moment(settings.current_date)
- : (this.type == 'single' ? moment() : null);
-
- this.presets = settings.presets == false || this.type == 'single' ? false : true;
-
- this.callback = settings.callback || this.calendarSetDates;
-
- this.calendarHTML(this.type);
-
- $('.dr-presets', this.element).click(function() {
- self.presetToggle();
- });
-
- $('.dr-list-item', this.element).click(function() {
- var start = $('.dr-item-aside', this).data('start');
- var end = $('.dr-item-aside', this).data('end');
-
- self.start_date = self.calendarCheckDate(start);
- self.end_date = self.calendarCheckDate(end);
-
- self.calendarSetDates();
- self.presetToggle();
- self.calendarSaveDates();
- });
-
- $('.dr-date', this.element).on({
- 'click': function() {
- self.calendarOpen(this);
- },
-
- 'keyup': function(event) {
- if (event.keyCode == 9 && !self.calIsOpen && !self.start_date && !self.end_date)
- self.calendarOpen(this);
- },
-
- 'keydown': function(event) {
- switch (event.keyCode) {
-
- case 9: // Tab
- if ($(self.selected).hasClass('dr-date-start')) {
- event.preventDefault();
- self.calendarCheckDates();
- self.calendarSetDates();
- $('.dr-date-end', self.element).trigger('click');
- } else {
- self.calendarCheckDates();
- self.calendarSetDates();
- self.calendarSaveDates();
- self.calendarClose('force');
- }
- break;
-
- case 13: // Enter
- event.preventDefault();
- self.calendarCheckDates();
- self.calendarSetDates();
- self.calendarSaveDates();
- self.calendarClose('force');
- break;
-
- case 27: // ESC
- self.calendarSetDates();
- self.calendarClose('force');
- break;
-
- case 38: // Up
- event.preventDefault();
- var timeframe = 'day';
-
- if (event.shiftKey)
- timeframe = 'week';
-
- if (event.metaKey)
- timeframe = 'month';
-
- var back = moment(self.current_date).subtract(1, timeframe);
-
- $(this).html(back.format(self.format.input));
- self.current_date = back;
- break;
-
- case 40: // Down
- event.preventDefault();
- var timeframe = 'day';
-
- if (event.shiftKey)
- timeframe = 'week';
-
- if (event.metaKey)
- timeframe = 'month';
-
- var forward = moment(self.current_date).add(1, timeframe);
-
- $(this).html(forward.format(self.format.input));
- self.current_date = forward;
- break;
- }
- }
- });
-
- $('.dr-month-switcher i', this.element).click(function() {
- var m = $('.dr-month-switcher span', self.element).data('month');
- var y = $('.dr-year-switcher span', self.element).data('year');
- var this_moment = moment([y, m, 1]);
- var back = this_moment.clone().subtract(1, 'month');
- var forward = this_moment.clone().add(1, 'month').startOf('day');
-
- if ($(this).hasClass('dr-left')) {
- self.calendarOpen(self.selected, back);
- } else if ($(this).hasClass('dr-right')) {
- self.calendarOpen(self.selected, forward);
- }
- });
-
- $('.dr-year-switcher i', this.element).click(function() {
- var m = $('.dr-month-switcher span', self.element).data('month');
- var y = $('.dr-year-switcher span', self.element).data('year');
- var this_moment = moment([y, m, 1]);
- var back = this_moment.clone().subtract(1, 'year');
- var forward = this_moment.clone().add(1, 'year').startOf('day');
-
-
- if ($(this).hasClass('dr-left')) {
- self.calendarOpen(self.selected, back);
- } else if ($(this).hasClass('dr-right')) {
- self.calendarOpen(self.selected, forward);
- }
- });
-
- $('.dr-dates-dash', this.element).click(function() {
- $('.dr-date-start', self.element).trigger('click');
- });
-
- // Once you click into a selection.. this lets you click out
- this.element.on('click', function() {
- document.addEventListener('click', function (event) {
- var contains = $(event.target).parents(self.element);
-
- if (!contains.length) {
- if (self.presetIsOpen)
- self.presetToggle();
-
- if (self.calIsOpen) {
- if ($(self.selected).hasClass('dr-date-end'))
- self.calendarSaveDates();
-
- self.calendarSetDates();
- self.calendarClose('force');
- }
- }
- });
- });
- }
-
-
- Calendar.prototype.presetToggle = function() {
- if (this.presetIsOpen == false) {
- this.orig_start_date = this.start_date;
- this.orig_end_date = this.end_date;
- this.orig_current_date = this.current_date;
-
- this.presetIsOpen = true;
- } else if (this.presetIsOpen) {
- this.presetIsOpen = false;
- }
-
- if (this.calIsOpen == true)
- this.calendarClose();
-
- $('.dr-preset-list', this.element).slideToggle(200);
- $('.dr-input', this.element).toggleClass('dr-active');
- $('.dr-presets', this.element).toggleClass('dr-active');
- this.element.toggleClass('dr-active');
- }
-
-
- Calendar.prototype.presetCreate = function() {
- var self = this;
- var ul_presets = $('');
- var presets = typeof self.settings.presets === 'object' ? self.settings.presets :
- [{
- label: 'Last 30 days',
- start: moment(self.latest_date).subtract(29, 'days'),
- end: self.latest_date
- },{
- label: 'Last month',
- start: moment(self.latest_date).subtract(1, 'month').startOf('month'),
- end: moment(self.latest_date).subtract(1, 'month').endOf('month')
- },{
- label: 'Last 3 months',
- start: moment(self.latest_date).subtract(3, 'month').startOf('month'),
- end: moment(self.latest_date).subtract(1, 'month').endOf('month')
- },{
- label: 'Last 6 months',
- start: moment(self.latest_date).subtract(6, 'month').startOf('month'),
- end: moment(self.latest_date).subtract(1, 'month').endOf('month')
- },{
- label: 'Last year',
- start: moment(self.latest_date).subtract(1, 'year').startOf('year'),
- end: moment(self.latest_date).subtract(1, 'year').endOf('year')
- },{
- label: 'All time',
- start: self.earliest_date,
- end: self.latest_date
- }];
-
- if (moment(self.latest_date).diff(moment(self.latest_date).startOf('month'), 'days') >= 6 &&
- typeof self.settings.presets !== 'object'
- ) {
- presets.splice(1, 0, {
- label: 'This month',
- start: moment(self.latest_date).startOf('month'),
- end: self.latest_date
- });
- }
-
- $.each(presets, function(i, d) {
- if (moment(d.start).isBefore(self.earliest_date)) {
- d.start = self.earliest_date;
- }
- if (moment(d.start).isAfter(self.latest_date)) {
- d.start = self.latest_date;
- }
- if (moment(d.end).isBefore(self.earliest_date)) {
- d.end = self.earliest_date;
- }
- if (moment(d.end).isAfter(self.latest_date)) {
- d.end = self.latest_date;
- }
-
- var startISO = moment(d.start).toISOString();
- var endISO = moment(d.end).toISOString();
- var string = moment(d.start).format(self.format.preset) +' – '+ moment(d.end).format(self.format.preset);
-
- if ($('.dr-preset-list', self.element).length) {
- var item = $('.dr-preset-list .dr-list-item:nth-of-type('+ (i + 1) +') .dr-item-aside', self.element);
- item.data('start', startISO);
- item.data('end', endISO);
- item.html(string);
- } else {
- ul_presets.append(''+ d.label +
- ''+ string +' '+
- ' ');
- }
- });
-
- return ul_presets;
- }
-
-
- Calendar.prototype.calendarSetDates = function() {
- $('.dr-date-start', this.element).html(moment(this.start_date).format(this.format.input));
- $('.dr-date-end', this.element).html(moment(this.end_date).format(this.format.input));
-
- if (!this.start_date && !this.end_date) {
- var old_date = $('.dr-date', this.element).html();
- var new_date = moment(this.current_date).format(this.format.input);
-
- if (old_date.length === 0 && !this.required)
- new_date = '';
-
- if (old_date != new_date)
- $('.dr-date', this.element).html(new_date);
- }
- }
-
-
- Calendar.prototype.calendarSaveDates = function() {
- if (this.type === 'double') {
- if (!moment(this.orig_end_date).isSame(this.end_date) || !moment(this.orig_start_date).isSame(this.start_date))
- return this.callback();
- } else {
- if (!this.required || !moment(this.orig_current_date).isSame(this.current_date))
- return this.callback();
- }
- }
-
- Calendar.prototype.calendarCheckDate = function(d) {
- // Today
- if (d === 'today' || d === 'now')
- return moment().isAfter(this.latest_date) ? this.latest_date :
- moment().isBefore(this.earliest_date) ? this.earliest_date : moment();
-
- // Earliest
- if (d === 'earliest')
- return this.earliest_date;
-
- // Latest
- if (d === 'latest')
- return this.latest_date;
-
- // Convert string to a date if keyword ago or ahead exists
- if (d && (/\bago\b/.test(d) || /\bahead\b/.test(d)))
- return this.stringToDate(d);
-
- var regex = /(?:\d)((?:st|nd|rd|th)?,?)/;
- var d_array = d ? d.replace(regex, '').split(' ') : [];
-
- // Add current year if year is not included
- if (d_array.length == 2) {
- d_array.push(moment().format(this.format.jump_year));
- d = d_array.join(' ');
- }
-
- // Convert using settings format
- var parsed_d = this.parseDate(d);
-
- if (!parsed_d.isValid())
- return moment(d); // occurs when parsing preset dates
-
- return parsed_d;
- }
-
- Calendar.prototype.calendarCheckDates = function() {
- var startTxt = $('.dr-date-start', this.element).html();
- var endTxt = $('.dr-date-end', this.element).html();
- var c = this.calendarCheckDate($(this.selected).html());
- var s;
- var e;
-
- // Modify strings via some specific keywords to create valid dates
- // Finally set all strings as dates
- if (startTxt === 'ytd' || endTxt === 'ytd') { // Year to date
- s = moment().startOf('year');
- e = moment().endOf('year');
- } else {
- s = this.calendarCheckDate(startTxt);
- e = this.calendarCheckDate(endTxt);
- }
-
- if (c.isBefore(this.earliest_date))
- c = this.earliest_date;
- if (s.isBefore(this.earliest_date))
- s = this.earliest_date;
- if (e.isBefore(this.earliest_date) || e.isBefore(s))
- e = s.clone().add(6, 'day');
-
- if (c.isAfter(this.latest_date))
- c = this.latest_date;
- if (e.isAfter(this.latest_date))
- e = this.latest_date;
- if (s.isAfter(this.latest_date) || s.isAfter(e))
- s = e.clone().subtract(6, 'day');
-
- // Push and save if it's valid otherwise return to previous state
- if (this.type === 'double') {
-
- // Is this a valid date?
- if (s.isSame(e) && !this.sameDayRange)
- return this.calendarSetDates();
-
- this.start_date = s.isValid() ? s : this.start_date;
- this.end_date = e.isValid() ? e : this.end_date;
- }
-
- this.current_date = c.isValid() ? c : this.current_date;
- }
-
-
- Calendar.prototype.stringToDate = function(str) {
- var date_arr = str.split(' ');
-
- if (date_arr[2] === 'ago') {
- return moment(this.current_date).subtract(date_arr[0], date_arr[1]);
- }
-
- else if (date_arr[2] === 'ahead') {
- return moment(this.current_date).add(date_arr[0], date_arr[1]);
- }
-
- return this.current_date;
- }
-
-
- Calendar.prototype.calendarOpen = function(selected, switcher) {
- var self = this;
- var other;
- var cal_width = $('.dr-dates', this.element).innerWidth() - 8;
-
- this.selected = selected || this.selected;
-
- if (this.presetIsOpen == true)
- this.presetToggle();
-
- if (this.calIsOpen == true) {
- this.calendarClose(switcher ? 'switcher' : undefined);
- } else if ($(this.selected).html().length) {
- this.orig_start_date = this.start_date;
- this.orig_end_date = this.end_date;
- this.orig_current_date = this.current_date;
- }
-
- this.calendarCheckDates();
- this.calendarCreate(switcher);
- this.calendarSetDates();
-
- var next_month = moment(switcher || this.current_date).add(1, 'month').startOf('month').startOf('day');
- var past_month = moment(switcher || this.current_date).subtract(1, 'month').endOf('month');
- var next_year = moment(switcher || this.current_date).add(1, 'year').startOf('month').startOf('day');
- var past_year = moment(switcher || this.current_date).subtract(1, 'year').endOf('month');
- var this_moment = moment(switcher || this.current_date);
-
- $('.dr-month-switcher span', this.element)
- .data('month', this_moment.month())
- .html(this_moment.format(this.format.jump_month));
- $('.dr-year-switcher span', this.element)
- .data('year', this_moment.year())
- .html(this_moment.format(this.format.jump_year));
-
- $('.dr-switcher i', this.element).removeClass('dr-disabled');
-
- if (next_month.isAfter(this.latest_date))
- $('.dr-month-switcher .dr-right', this.element).addClass('dr-disabled');
-
- if (past_month.isBefore(this.earliest_date))
- $('.dr-month-switcher .dr-left', this.element).addClass('dr-disabled');
-
- if (next_year.isAfter(this.latest_date))
- $('.dr-year-switcher .dr-right', this.element).addClass('dr-disabled');
-
- if (past_year.isBefore(this.earliest_date))
- $('.dr-year-switcher .dr-left', this.element).addClass('dr-disabled');
-
- $('.dr-day', this.element).on({
- mouseenter: function() {
- var selected = $(this);
- var start_date = moment(self.start_date);
- var end_date = moment(self.end_date);
- var current_date = moment(self.current_date);
-
- if ($(self.selected).hasClass("dr-date-start")) {
- selected.addClass('dr-hover dr-hover-before');
- $('.dr-start', self.element).css({'border': 'none', 'padding-left': '0.3125rem'});
- setMaybeRange('start');
- }
-
- if ($(self.selected).hasClass("dr-date-end")) {
- selected.addClass('dr-hover dr-hover-after');
- $('.dr-end', self.element).css({'border': 'none', 'padding-right': '0.3125rem'});
- setMaybeRange('end');
- }
-
- if (!self.start_date && !self.end_date)
- selected.addClass('dr-maybe');
-
- $('.dr-selected', self.element).css('background-color', 'transparent');
-
- function setMaybeRange(type) {
- other = undefined;
-
- self.range(6 * 7).forEach(function(i) {
- var next = selected.next().data('date');
- var prev = selected.prev().data('date');
- var curr = selected.data('date');
-
- if (!curr)
- return false;
-
- if (!prev)
- prev = curr;
-
- if (!next)
- next = curr;
-
- if (type == 'start') {
- if (moment(next).isSame(self.end_date) || (self.sameDayRange && moment(curr).isSame(self.end_date)))
- return false;
-
- if (moment(curr).isAfter(self.end_date)) {
- other = other || moment(curr).add(6, 'day').startOf('day');
-
- if (i > 5 || (next ? moment(next).isAfter(self.latest_date) : false)) {
- $(selected).addClass('dr-end');
- other = moment(curr);
- return false;
- }
- }
-
- selected = selected.next().addClass('dr-maybe');
- } else if (type == 'end') {
- if (moment(prev).isSame(self.start_date) || (self.sameDayRange && moment(curr).isSame(self.start_date)))
- return false;
-
- if (moment(curr).isBefore(self.start_date)) {
- other = other || moment(curr).subtract(6, 'day');
-
- if (i > 5 || (prev ? moment(prev).isBefore(self.earliest_date) : false)) {
- $(selected).addClass('dr-start');
- other = moment(curr);
- return false;
- }
- }
-
- selected = selected.prev().addClass('dr-maybe');
- }
- });
- }
- },
- mouseleave: function() {
- if ($(this).hasClass('dr-hover-before dr-end'))
- $(this).removeClass('dr-end');
-
- if ($(this).hasClass('dr-hover-after dr-start'))
- $(this).removeClass('dr-start');
-
- $(this).removeClass('dr-hover dr-hover-before dr-hover-after');
- $('.dr-start, .dr-end', self.element).css({'border': '', 'padding': ''});
- $('.dr-maybe:not(.dr-current)', self.element).removeClass('dr-start dr-end');
- $('.dr-day', self.element).removeClass('dr-maybe');
- $('.dr-selected', self.element).css('background-color', '');
- }
- });
-
- if (/iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream) {
- $('.dr-day', this.element).on({
- touchstart: function() {
- self.selectOneDate(other, self, $(this).data('date'));
- }
- });
-
- $('div[contenteditable]', this.element).removeAttr('contenteditable');
- } else {
- $('.dr-day', this.element).on({
- mousedown: function () {
- self.selectOneDate(other, self, $(this).data('date'));
- }
- });
- }
-
- $('.dr-calendar', this.element)
- .css('width', cal_width)
- .slideDown(200);
- $('.dr-input', this.element).addClass('dr-active');
- $(selected).addClass('dr-active').focus();
- this.element.addClass('dr-active');
-
- this.calIsOpen = true;
- }
-
-
- Calendar.prototype.calendarClose = function(type) {
- var self = this;
-
- if (!this.calIsOpen || this.presetIsOpen || type == 'force') {
- $('.dr-calendar', this.element).slideUp(200, function() {
- $('.dr-day', self.element).remove();
- });
- } else {
- $('.dr-day', this.element).remove();
- }
-
- if (type == 'switcher') {
- return false;
- }
-
- $('.dr-input, .dr-date', this.element).removeClass('dr-active');
- this.element.removeClass('dr-active');
-
- this.calIsOpen = false;
- }
-
-
- Calendar.prototype.calendarCreate = function(switcher) {
- var self = this;
- var array = this.calendarArray(this.start_date, this.end_date, this.current_date, switcher);
-
- array.forEach(function(d, i) {
- var classString = "dr-day";
-
- if (d.fade)
- classString += " dr-fade";
-
- if (d.start)
- classString += " dr-start";
-
- if (d.end)
- classString += " dr-end";
-
- if (d.current)
- classString += " dr-current";
-
- if (d.selected)
- classString += " dr-selected";
-
- if (d.outside)
- classString += " dr-outside";
-
- $('.dr-day-list', self.element).append(''+ d.str +' ');
- });
- }
-
-
- Calendar.prototype.calendarArray = function(start, end, current, switcher) {
- var self = this;
- current = moment(current || start || end).startOf('day');
-
- var reference = switcher || current || start || end;
-
- var startRange = moment(reference).startOf('month').startOf('week');
- var endRange = moment(startRange).add(6*7 - 1, 'days').endOf('day');
-
- var daysInRange = [];
- var d = moment(startRange);
- while ( d.isBefore(endRange) ) {
- daysInRange.push( {
- str: +d.format('D'),
- start: start && d.isSame(start, 'day'),
- end: end && d.isSame(end, 'day'),
- current: current && d.isSame(current, 'day'),
- selected: start && end && d.isBetween(start, end),
- date: d.toISOString(),
- outside: d.isBefore(self.earliest_date) || d.isAfter(self.latest_date),
- fade: !d.isSame(reference, 'month')
- } );
- d.add(1, 'd');
- }
-
- return daysInRange;
- }
-
-
- Calendar.prototype.calendarHTML = function(type) {
- var ul_days_of_the_week = $('');
- var days = this.days_array.splice(moment.localeData().firstDayOfWeek()).concat(this.days_array.splice(0, moment.localeData().firstDayOfWeek()));
-
- $.each(days, function(i, elem) {
- ul_days_of_the_week.append('' + elem + ' ');
- });
-
- if (type == "double")
- return this.element.append('' +
-
- '' +
- '
' +
- '
' +
- '
' +
- ' ' +
- 'April ' +
- ' ' +
- '
' +
- '
' +
- ' ' +
- '2015 ' +
- ' ' +
- '
' +
- '
' +
- ul_days_of_the_week[0].outerHTML +
- '
' +
- '
' +
- (this.presets ? this.presetCreate()[0].outerHTML : '') +
- '
');
-
- return this.element.append('' +
-
- '' +
- '
' +
- '
' +
- '
' +
- ' ' +
- ' ' +
- ' ' +
- '
' +
- '
' +
- ' ' +
- ' ' +
- ' ' +
- '
' +
- '
' +
- ul_days_of_the_week[0].outerHTML +
- '
' +
- '
' +
- '
');
- }
-
-
- Calendar.prototype.parseDate = function(d) {
- if (moment.defaultZone !== null && moment.hasOwnProperty('tz')) {
- return moment.tz(d, this.format.input, moment.defaultZone.name);
- } else {
- return moment(d, this.format.input);
- }
- }
-
-
- Calendar.prototype.range = function(length) {
- var range = new Array(length);
-
- for (var idx = 0; idx < length; idx++) {
- range[idx] = idx;
- }
-
- return range;
- }
-
-
- Calendar.prototype.selectOneDate = function(other, cal, date) {
- var string = moment(date).format(cal.format.input);
-
- if (other) {
- $('.dr-date', cal.element)
- .not(cal.selected)
- .html(other.format(cal.format.input));
- }
-
- $(cal.selected).html(string);
- cal.calendarOpen(cal.selected);
-
- if ($(cal.selected).hasClass('dr-date-start')) {
- $('.dr-date-end', cal.element).trigger('click');
- } else {
- cal.calendarSaveDates();
- cal.calendarClose('force');
- }
- }
-
-
- return Calendar;
-}));
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Assets/Email-Example/sample-image.jpg b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Assets/Email-Example/sample-image.jpg
deleted file mode 100644
index 1334432..0000000
Binary files a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Assets/Email-Example/sample-image.jpg and /dev/null differ
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Assets/Email-Example/umbraco-logo.png b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Assets/Email-Example/umbraco-logo.png
deleted file mode 100644
index e299463..0000000
Binary files a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Assets/Email-Example/umbraco-logo.png and /dev/null differ
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Assets/aspnet-validation/dist/aspnet-validation.min.js b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Assets/aspnet-validation/dist/aspnet-validation.min.js
deleted file mode 100644
index e442df5..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Assets/aspnet-validation/dist/aspnet-validation.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.aspnetValidation=t():e.aspnetValidation=t()}(window,function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var a=t[n]={i:n,l:!1,exports:{}};return e[n].call(a.exports,a,a.exports,r),a.l=!0,a.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var a in e)r.d(n,a,function(t){return e[t]}.bind(null,a));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=0)}([function(e,t,r){"use strict";r.r(t),r.d(t,"MvcValidationProviders",function(){return o}),r.d(t,"ValidationService",function(){return s});var n=function(e,t,r,n){return new(r||(r=Promise))(function(a,i){function o(e){try{u(n.next(e))}catch(e){i(e)}}function s(e){try{u(n.throw(e))}catch(e){i(e)}}function u(e){e.done?a(e.value):new r(function(t){t(e.value)}).then(o,s)}u((n=n.apply(e,t||[])).next())})},a=function(e,t){var r,n,a,i,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(r)throw new TypeError("Generator is already executing.");for(;o;)try{if(r=1,n&&(a=2&i[0]?n.return:i[0]?n.throw||((a=n.return)&&a.call(n),0):n.next)&&!(a=a.call(n,i[1])).done)return a;switch(n=0,a&&(i=[2&i[0],a.value]),i[0]){case 0:case 1:a=i;break;case 4:return o.label++,{value:i[1],done:!1};case 5:o.label++,n=i[1],i=[0];continue;case 7:i=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===i[0]||2===i[0])){o=0;continue}if(3===i[0]&&(!a||i[1]>a[0]&&i[1]-1){var a=e.substr(0,n)+"."+r,i=document.getElementsByName(a)[0];if(i)return i}return document.getElementsByName(r)[0]}var o=function(){return function(){this.required=function(e,t,r){return Boolean(e)},this.stringLength=function(e,t,r){if(!e)return!0;if(r.min){var n=parseInt(r.min);if(e.lengtha)return!1}return!0},this.compare=function(e,t,r){if(!r.other)return!0;var n=i(t.name,r.other);return!n||n.value===e},this.range=function(e,t,r){if(!e)return!0;var n=parseFloat(e);return!isNaN(n)&&(!(r.min&&nparseFloat(r.max)))},this.regex=function(e,t,r){return!e||!r.pattern||new RegExp(r.pattern).test(e)},this.email=function(e,t,r){return!e||/^([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+|\x22([^\x0d\x22\x5c\x80-\xff]|\x5c[\x00-\x7f])*\x22)(\x2e([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+|\x22([^\x0d\x22\x5c\x80-\xff]|\x5c[\x00-\x7f])*\x22))*\x40([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+|\x5b([^\x0d\x5b-\x5d\x80-\xff]|\x5c[\x00-\x7f])*\x5d)(\x2e([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+|\x5b([^\x0d\x5b-\x5d\x80-\xff]|\x5c[\x00-\x7f])*\x5d))*(\.\w{2,})+$/.test(e)},this.creditcard=function(e,t,r){if(!e)return!0;if(/[^0-9 \-]+/.test(e))return!1;var n,a,i=0,o=0,s=!1;if((e=e.replace(/\D/g,"")).length<13||e.length>19)return!1;for(n=e.length-1;n>=0;n--)a=e.charAt(n),o=parseInt(a,10),s&&(o*=2)>9&&(o-=9),i+=o,s=!s;return i%10==0},this.url=function(e,t,r){return!e||new RegExp("^(?:(?:https?|ftp)://)(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,}))\\.?)(?::\\d{2,5})?(?:[/?#]\\S*)?$","i").test(e)},this.phone=function(e,t,r){return!e||!/[\+\-\s][\-\s]/g.test(e)&&/^\+?[0-9\-\s]+$/.test(e)},this.remote=function(e,t,r){if(!e)return!0;for(var n=r.additionalfields.split(","),a={},o=0,s=n;o=200&&n.status<300){var a=JSON.parse(n.responseText);e(a)}else t({status:n.status,statusText:n.statusText,data:n.responseText})},n.onerror=function(e){t({status:n.status,statusText:n.statusText,data:n.responseText})}})}}}(),s=function(){function e(){this.providers={},this.messageFor={},this.elementUIDs=[],this.elementByUID={},this.formInputs={},this.validators={},this.elementEvents={},this.summary={},this.debounce=300}return e.prototype.addProvider=function(e,t){this.providers[e]||(this.providers[e]=t)},e.prototype.addMvcProviders=function(){var e=new o;this.addProvider("required",e.required),this.addProvider("length",e.stringLength),this.addProvider("maxlength",e.stringLength),this.addProvider("minlength",e.stringLength),this.addProvider("equalto",e.compare),this.addProvider("range",e.range),this.addProvider("regex",e.regex),this.addProvider("creditcard",e.creditcard),this.addProvider("email",e.email),this.addProvider("url",e.url),this.addProvider("phone",e.phone),this.addProvider("remote",e.remote)},e.prototype.scanMessages=function(){for(var e=document.querySelectorAll("[data-valmsg-for]"),t=0;t>>0,s=0;sTe(e)?(d=e+1,_-Te(e)):(d=e,_),{year:d,dayOfYear:r}}function Ce(e,a,t){var s,n,d=Ne(e.year(),a,t),r=Math.floor((e.dayOfYear()-d-1)/7)+1;return r<1?s=r+Ie(n=e.year()-1,a,t):r>Ie(e.year(),a,t)?(s=r-Ie(e.year(),a,t),n=e.year()+1):(n=e.year(),s=r),{week:s,year:n}}function Ie(e,a,t){var s=Ne(e,a,t),n=Ne(e+1,a,t);return(Te(e)-s+n)/7}C("w",["ww",2],"wo","week"),C("W",["WW",2],"Wo","isoWeek"),O("week","w"),O("isoWeek","W"),E("week",5),E("isoWeek",5),ie("w",B),ie("ww",B,V),ie("W",B),ie("WW",B,V),Me(["w","ww","W","WW"],function(e,a,t,s){a[s.substr(0,1)]=g(e)});function Ue(e,a){return e.slice(a,7).concat(e.slice(0,a))}C("d",0,"do","day"),C("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),C("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),C("dddd",0,0,function(e){return this.localeData().weekdays(this,e)}),C("e",0,0,"weekday"),C("E",0,0,"isoWeekday"),O("day","d"),O("weekday","e"),O("isoWeekday","E"),E("day",11),E("weekday",11),E("isoWeekday",11),ie("d",B),ie("e",B),ie("E",B),ie("dd",function(e,a){return a.weekdaysMinRegex(e)}),ie("ddd",function(e,a){return a.weekdaysShortRegex(e)}),ie("dddd",function(e,a){return a.weekdaysRegex(e)}),Me(["dd","ddd","dddd"],function(e,a,t,s){var n=t._locale.weekdaysParse(e,s,t._strict);null!=n?a.d=n:Y(t).invalidWeekday=e}),Me(["d","e","E"],function(e,a,t,s){a[s]=g(e)});var Ge="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_");var Ve="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_");var Ke="Su_Mo_Tu_We_Th_Fr_Sa".split("_");var Ze=re;var $e=re;var Be=re;function qe(){function e(e,a){return a.length-e.length}var a,t,s,n,d,r=[],_=[],i=[],o=[];for(a=0;a<7;a++)t=c([2e3,1]).day(a),s=this.weekdaysMin(t,""),n=this.weekdaysShort(t,""),d=this.weekdays(t,""),r.push(s),_.push(n),i.push(d),o.push(s),o.push(n),o.push(d);for(r.sort(e),_.sort(e),i.sort(e),o.sort(e),a=0;a<7;a++)_[a]=me(_[a]),i[a]=me(i[a]),o[a]=me(o[a]);this._weekdaysRegex=new RegExp("^("+o.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+i.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+_.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+r.join("|")+")","i")}function Qe(){return this.hours()%12||12}function Xe(e,a){C(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),a)})}function ea(e,a){return a._meridiemParse}C("H",["HH",2],0,"hour"),C("h",["hh",2],0,Qe),C("k",["kk",2],0,function(){return this.hours()||24}),C("hmm",0,0,function(){return""+Qe.apply(this)+F(this.minutes(),2)}),C("hmmss",0,0,function(){return""+Qe.apply(this)+F(this.minutes(),2)+F(this.seconds(),2)}),C("Hmm",0,0,function(){return""+this.hours()+F(this.minutes(),2)}),C("Hmmss",0,0,function(){return""+this.hours()+F(this.minutes(),2)+F(this.seconds(),2)}),Xe("a",!0),Xe("A",!1),O("hour","h"),E("hour",13),ie("a",ea),ie("A",ea),ie("H",B),ie("h",B),ie("k",B),ie("HH",B,V),ie("hh",B,V),ie("kk",B,V),ie("hmm",q),ie("hmmss",Q),ie("Hmm",q),ie("Hmmss",Q),le(["H","HH"],Ye),le(["k","kk"],function(e,a,t){var s=g(e);a[Ye]=24===s?0:s}),le(["a","A"],function(e,a,t){t._isPm=t._locale.isPM(e),t._meridiem=e}),le(["h","hh"],function(e,a,t){a[Ye]=g(e),Y(t).bigHour=!0}),le("hmm",function(e,a,t){var s=e.length-2;a[Ye]=g(e.substr(0,s)),a[ye]=g(e.substr(s)),Y(t).bigHour=!0}),le("hmmss",function(e,a,t){var s=e.length-4,n=e.length-2;a[Ye]=g(e.substr(0,s)),a[ye]=g(e.substr(s,2)),a[fe]=g(e.substr(n)),Y(t).bigHour=!0}),le("Hmm",function(e,a,t){var s=e.length-2;a[Ye]=g(e.substr(0,s)),a[ye]=g(e.substr(s))}),le("Hmmss",function(e,a,t){var s=e.length-4,n=e.length-2;a[Ye]=g(e.substr(0,s)),a[ye]=g(e.substr(s,2)),a[fe]=g(e.substr(n))});var aa,ta=Se("Hours",!0),sa={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:Oe,monthsShort:Pe,week:{dow:0,doy:6},weekdays:Ge,weekdaysMin:Ke,weekdaysShort:Ve,meridiemParse:/[ap]\.?m?\.?/i},na={},da={};function ra(e){return e?e.toLowerCase().replace("_","-"):e}function _a(e){var a=null;if(!na[e]&&"undefined"!=typeof module&&module&&module.exports)try{a=aa._abbr,require("./locale/"+e),ia(a)}catch(e){}return na[e]}function ia(e,a){var t;return e&&((t=o(a)?ma(e):oa(e,a))?aa=t:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),aa._abbr}function oa(e,a){if(null===a)return delete na[e],null;var t,s=sa;if(a.abbr=e,null!=na[e])S("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),s=na[e]._config;else if(null!=a.parentLocale)if(null!=na[a.parentLocale])s=na[a.parentLocale]._config;else{if(null==(t=_a(a.parentLocale)))return da[a.parentLocale]||(da[a.parentLocale]=[]),da[a.parentLocale].push({name:e,config:a}),null;s=t._config}return na[e]=new j(b(s,a)),da[e]&&da[e].forEach(function(e){oa(e.name,e.config)}),ia(e),na[e]}function ma(e){var a;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return aa;if(!_(e)){if(a=_a(e))return a;e=[e]}return function(e){for(var a,t,s,n,d=0;d=a&&r(n,t,!0)>=a-1)break;a--}d++}return aa}(e)}function ua(e){var a,t=e._a;return t&&-2===Y(e).overflow&&(a=t[Le]<0||11je(t[he],t[Le])?ce:t[Ye]<0||24Ie(t,d,r)?Y(e)._overflowWeeks=!0:null!=i?Y(e)._overflowWeekday=!0:(_=Re(t,s,n,d,r),e._a[he]=_.year,e._dayOfYear=_.dayOfYear)}(e),null!=e._dayOfYear&&(d=la(e._a[he],s[he]),(e._dayOfYear>Te(d)||0===e._dayOfYear)&&(Y(e)._overflowDayOfYear=!0),t=Je(d,0,e._dayOfYear),e._a[Le]=t.getUTCMonth(),e._a[ce]=t.getUTCDate()),a=0;a<3&&null==e._a[a];++a)e._a[a]=r[a]=s[a];for(;a<7;a++)e._a[a]=r[a]=null==e._a[a]?2===a?1:0:e._a[a];24===e._a[Ye]&&0===e._a[ye]&&0===e._a[fe]&&0===e._a[ke]&&(e._nextDay=!0,e._a[Ye]=0),e._d=(e._useUTC?Je:function(e,a,t,s,n,d,r){var _;return e<100&&0<=e?(_=new Date(e+400,a,t,s,n,d,r),isFinite(_.getFullYear())&&_.setFullYear(e)):_=new Date(e,a,t,s,n,d,r),_}).apply(null,r),n=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[Ye]=24),e._w&&void 0!==e._w.d&&e._w.d!==n&&(Y(e).weekdayMismatch=!0)}}var ha=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,La=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,ca=/Z|[+-]\d\d(?::?\d\d)?/,Ya=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],ya=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],fa=/^\/?Date\((\-?\d+)/i;function ka(e){var a,t,s,n,d,r,_=e._i,i=ha.exec(_)||La.exec(_);if(i){for(Y(e).iso=!0,a=0,t=Ya.length;at.valueOf():t.valueOf()this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},Mt.isLocal=function(){return!!this.isValid()&&!this._isUTC},Mt.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},Mt.isUtc=Ra,Mt.isUTC=Ra,Mt.zoneAbbr=function(){return this._isUTC?"UTC":""},Mt.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},Mt.dates=t("dates accessor is deprecated. Use date instead.",_t),Mt.months=t("months accessor is deprecated. Use month instead",Ae),Mt.years=t("years accessor is deprecated. Use year instead",ve),Mt.zone=t("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",function(e,a){return null!=e?("string"!=typeof e&&(e=-e),this.utcOffset(e,a),this):-this.utcOffset()}),Mt.isDSTShifted=t("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",function(){if(!o(this._isDSTShifted))return this._isDSTShifted;var e={};if(k(e,this),(e=va(e))._a){var a=e._isUTC?c(e._a):Ha(e._a);this._isDSTShifted=this.isValid()&&0 11) {
- calendar.year += Math.floor(Math.abs(calendar.month)/12);
- calendar.month -= 12;
- }
- return calendar;
- },
-
- /**
- * defaults and localisation
- */
- defaults = {
-
- // bind the picker to a form field
- field: null,
-
- // automatically show/hide the picker on `field` focus (default `true` if `field` is set)
- bound: undefined,
-
- // data-attribute on the input field with an aria assistance tekst (only applied when `bound` is set)
- ariaLabel: 'Use the arrow keys to pick a date',
-
- // position of the datepicker, relative to the field (default to bottom & left)
- // ('bottom' & 'left' keywords are not used, 'top' & 'right' are modifier on the bottom/left position)
- position: 'bottom left',
-
- // automatically fit in the viewport even if it means repositioning from the position option
- reposition: true,
-
- // the default output format for `.toString()` and `field` value
- format: 'YYYY-MM-DD',
-
- // the toString function which gets passed a current date object and format
- // and returns a string
- toString: null,
-
- // used to create date object from current input string
- parse: null,
-
- // the initial date to view when first opened
- defaultDate: null,
-
- // make the `defaultDate` the initial selected value
- setDefaultDate: false,
-
- // first day of week (0: Sunday, 1: Monday etc)
- firstDay: 0,
-
- // the default flag for moment's strict date parsing
- formatStrict: false,
-
- // the minimum/earliest date that can be selected
- minDate: null,
- // the maximum/latest date that can be selected
- maxDate: null,
-
- // number of years either side, or array of upper/lower range
- yearRange: 10,
-
- // show week numbers at head of row
- showWeekNumber: false,
-
- // Week picker mode
- pickWholeWeek: false,
-
- // used internally (don't config outside)
- minYear: 0,
- maxYear: 9999,
- minMonth: undefined,
- maxMonth: undefined,
-
- startRange: null,
- endRange: null,
-
- isRTL: false,
-
- // Additional text to append to the year in the calendar title
- yearSuffix: '',
-
- // Render the month after year in the calendar title
- showMonthAfterYear: false,
-
- // Render days of the calendar grid that fall in the next or previous month
- showDaysInNextAndPreviousMonths: false,
-
- // Allows user to select days that fall in the next or previous month
- enableSelectionDaysInNextAndPreviousMonths: false,
-
- // how many months are visible
- numberOfMonths: 1,
-
- // when numberOfMonths is used, this will help you to choose where the main calendar will be (default `left`, can be set to `right`)
- // only used for the first display or when a selected date is not visible
- mainCalendar: 'left',
-
- // Specify a DOM element to render the calendar in
- container: undefined,
-
- // Blur field when date is selected
- blurFieldOnSelect : true,
-
- // internationalization
- i18n: {
- previousMonth : 'Previous Month',
- nextMonth : 'Next Month',
- months : ['January','February','March','April','May','June','July','August','September','October','November','December'],
- weekdays : ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'],
- weekdaysShort : ['Sun','Mon','Tue','Wed','Thu','Fri','Sat']
- },
-
- // Theme Classname
- theme: null,
-
- // events array
- events: [],
-
- // callback function
- onSelect: null,
- onOpen: null,
- onClose: null,
- onDraw: null,
-
- // Enable keyboard input
- keyboardInput: true
- },
-
-
- /**
- * templating functions to abstract HTML rendering
- */
- renderDayName = function(opts, day, abbr)
- {
- day += opts.firstDay;
- while (day >= 7) {
- day -= 7;
- }
- return abbr ? opts.i18n.weekdaysShort[day] : opts.i18n.weekdays[day];
- },
-
- renderDay = function(opts)
- {
- var arr = [];
- var ariaSelected = 'false';
- if (opts.isEmpty) {
- if (opts.showDaysInNextAndPreviousMonths) {
- arr.push('is-outside-current-month');
-
- if(!opts.enableSelectionDaysInNextAndPreviousMonths) {
- arr.push('is-selection-disabled');
- }
-
- } else {
- return ' ';
- }
- }
- if (opts.isDisabled) {
- arr.push('is-disabled');
- }
- if (opts.isToday) {
- arr.push('is-today');
- }
- if (opts.isSelected) {
- arr.push('is-selected');
- ariaSelected = 'true';
- }
- if (opts.hasEvent) {
- arr.push('has-event');
- }
- if (opts.isInRange) {
- arr.push('is-inrange');
- }
- if (opts.isStartRange) {
- arr.push('is-startrange');
- }
- if (opts.isEndRange) {
- arr.push('is-endrange');
- }
- return '' +
- '' +
- opts.day +
- ' ' +
- ' ';
- },
-
- renderWeek = function (d, m, y) {
- // Lifted from http://javascript.about.com/library/blweekyear.htm, lightly modified.
- var onejan = new Date(y, 0, 1),
- weekNum = Math.ceil((((new Date(y, m, d) - onejan) / 86400000) + onejan.getDay()+1)/7);
- return '' + weekNum + ' ';
- },
-
- renderRow = function(days, isRTL, pickWholeWeek, isRowSelected)
- {
- return '' + (isRTL ? days.reverse() : days).join('') + ' ';
- },
-
- renderBody = function(rows)
- {
- return '' + rows.join('') + ' ';
- },
-
- renderHead = function(opts)
- {
- var i, arr = [];
- if (opts.showWeekNumber) {
- arr.push(' ');
- }
- for (i = 0; i < 7; i++) {
- arr.push('' + renderDayName(opts, i, true) + ' ');
- }
- return '' + (opts.isRTL ? arr.reverse() : arr).join('') + ' ';
- },
-
- renderTitle = function(instance, c, year, month, refYear, randId)
- {
- var i, j, arr,
- opts = instance._o,
- isMinYear = year === opts.minYear,
- isMaxYear = year === opts.maxYear,
- html = '',
- monthHtml,
- yearHtml,
- prev = true,
- next = true;
-
- for (arr = [], i = 0; i < 12; i++) {
- arr.push('
opts.maxMonth) ? 'disabled="disabled"' : '') + '>' +
- opts.i18n.months[i] + ' ');
- }
-
- monthHtml = '
' + opts.i18n.months[month] + '' + arr.join('') + '
';
-
- if (isArray(opts.yearRange)) {
- i = opts.yearRange[0];
- j = opts.yearRange[1] + 1;
- } else {
- i = year - opts.yearRange;
- j = 1 + year + opts.yearRange;
- }
-
- for (arr = []; i < j && i <= opts.maxYear; i++) {
- if (i >= opts.minYear) {
- arr.push('
' + (i) + ' ');
- }
- }
- yearHtml = '
' + year + opts.yearSuffix + '' + arr.join('') + '
';
-
- if (opts.showMonthAfterYear) {
- html += yearHtml + monthHtml;
- } else {
- html += monthHtml + yearHtml;
- }
-
- if (isMinYear && (month === 0 || opts.minMonth >= month)) {
- prev = false;
- }
-
- if (isMaxYear && (month === 11 || opts.maxMonth <= month)) {
- next = false;
- }
-
- if (c === 0) {
- html += '
' + opts.i18n.previousMonth + ' ';
- }
- if (c === (instance._o.numberOfMonths - 1) ) {
- html += '
' + opts.i18n.nextMonth + ' ';
- }
-
- return html += '
';
- },
-
- renderTable = function(opts, data, randId)
- {
- return '' + renderHead(opts) + renderBody(data) + '
';
- },
-
-
- /**
- * Pikaday constructor
- */
- Pikaday = function(options)
- {
- var self = this,
- opts = self.config(options);
-
- self._onMouseDown = function(e)
- {
- if (!self._v) {
- return;
- }
- e = e || window.event;
- var target = e.target || e.srcElement;
- if (!target) {
- return;
- }
-
- if (!hasClass(target, 'is-disabled')) {
- if (hasClass(target, 'pika-button') && !hasClass(target, 'is-empty') && !hasClass(target.parentNode, 'is-disabled')) {
- self.setDate(new Date(target.getAttribute('data-pika-year'), target.getAttribute('data-pika-month'), target.getAttribute('data-pika-day')));
- if (opts.bound) {
- sto(function() {
- self.hide();
- if (opts.blurFieldOnSelect && opts.field) {
- opts.field.blur();
- }
- }, 100);
- }
- }
- else if (hasClass(target, 'pika-prev')) {
- self.prevMonth();
- }
- else if (hasClass(target, 'pika-next')) {
- self.nextMonth();
- }
- }
- if (!hasClass(target, 'pika-select')) {
- // if this is touch event prevent mouse events emulation
- if (e.preventDefault) {
- e.preventDefault();
- } else {
- e.returnValue = false;
- return false;
- }
- } else {
- self._c = true;
- }
- };
-
- self._onChange = function(e)
- {
- e = e || window.event;
- var target = e.target || e.srcElement;
- if (!target) {
- return;
- }
- if (hasClass(target, 'pika-select-month')) {
- self.gotoMonth(target.value);
- }
- else if (hasClass(target, 'pika-select-year')) {
- self.gotoYear(target.value);
- }
- };
-
- self._onKeyChange = function(e)
- {
- e = e || window.event;
-
- if (self.isVisible()) {
-
- switch(e.keyCode){
- case 13:
- case 27:
- if (opts.field) {
- opts.field.blur();
- }
- break;
- case 37:
- e.preventDefault();
- self.adjustDate('subtract', 1);
- break;
- case 38:
- self.adjustDate('subtract', 7);
- break;
- case 39:
- self.adjustDate('add', 1);
- break;
- case 40:
- self.adjustDate('add', 7);
- break;
- }
- }
- };
-
- self._onInputChange = function(e)
- {
- var date;
-
- if (e.firedBy === self) {
- return;
- }
- if (opts.parse) {
- date = opts.parse(opts.field.value, opts.format);
- } else if (hasMoment) {
- date = moment(opts.field.value, opts.format, opts.formatStrict);
- date = (date && date.isValid()) ? date.toDate() : null;
- }
- else {
- date = new Date(Date.parse(opts.field.value));
- }
- if (isDate(date)) {
- self.setDate(date);
- }
- if (!self._v) {
- self.show();
- }
- };
-
- self._onInputFocus = function()
- {
- self.show();
- };
-
- self._onInputClick = function()
- {
- self.show();
- };
-
- self._onInputBlur = function()
- {
- // IE allows pika div to gain focus; catch blur the input field
- var pEl = document.activeElement;
- do {
- if (hasClass(pEl, 'pika-single')) {
- return;
- }
- }
- while ((pEl = pEl.parentNode));
-
- if (!self._c) {
- self._b = sto(function() {
- self.hide();
- }, 50);
- }
- self._c = false;
- };
-
- self._onClick = function(e)
- {
- e = e || window.event;
- var target = e.target || e.srcElement,
- pEl = target;
- if (!target) {
- return;
- }
- if (!hasEventListeners && hasClass(target, 'pika-select')) {
- if (!target.onchange) {
- target.setAttribute('onchange', 'return;');
- addEvent(target, 'change', self._onChange);
- }
- }
- do {
- if (hasClass(pEl, 'pika-single') || pEl === opts.trigger) {
- return;
- }
- }
- while ((pEl = pEl.parentNode));
- if (self._v && target !== opts.trigger && pEl !== opts.trigger) {
- self.hide();
- }
- };
-
- self.el = document.createElement('div');
- self.el.className = 'pika-single' + (opts.isRTL ? ' is-rtl' : '') + (opts.theme ? ' ' + opts.theme : '');
-
- addEvent(self.el, 'mousedown', self._onMouseDown, true);
- addEvent(self.el, 'touchend', self._onMouseDown, true);
- addEvent(self.el, 'change', self._onChange);
-
- if (opts.keyboardInput) {
- addEvent(document, 'keydown', self._onKeyChange);
- }
-
- if (opts.field) {
- if (opts.container) {
- opts.container.appendChild(self.el);
- } else if (opts.bound) {
- document.body.appendChild(self.el);
- } else {
- opts.field.parentNode.insertBefore(self.el, opts.field.nextSibling);
- }
- addEvent(opts.field, 'change', self._onInputChange);
-
- if (!opts.defaultDate) {
- if (hasMoment && opts.field.value) {
- opts.defaultDate = moment(opts.field.value, opts.format).toDate();
- } else {
- opts.defaultDate = new Date(Date.parse(opts.field.value));
- }
- opts.setDefaultDate = true;
- }
- }
-
- var defDate = opts.defaultDate;
-
- if (isDate(defDate)) {
- if (opts.setDefaultDate) {
- self.setDate(defDate, true);
- } else {
- self.gotoDate(defDate);
- }
- } else {
- self.gotoDate(new Date());
- }
-
- if (opts.bound) {
- this.hide();
- self.el.className += ' is-bound';
- addEvent(opts.trigger, 'click', self._onInputClick);
- addEvent(opts.trigger, 'focus', self._onInputFocus);
- addEvent(opts.trigger, 'blur', self._onInputBlur);
- } else {
- this.show();
- }
- };
-
-
- /**
- * public Pikaday API
- */
- Pikaday.prototype = {
-
-
- /**
- * configure functionality
- */
- config: function(options)
- {
- if (!this._o) {
- this._o = extend({}, defaults, true);
- }
-
- var opts = extend(this._o, options, true);
-
- opts.isRTL = !!opts.isRTL;
-
- opts.field = (opts.field && opts.field.nodeName) ? opts.field : null;
-
- opts.theme = (typeof opts.theme) === 'string' && opts.theme ? opts.theme : null;
-
- opts.bound = !!(opts.bound !== undefined ? opts.field && opts.bound : opts.field);
-
- opts.trigger = (opts.trigger && opts.trigger.nodeName) ? opts.trigger : opts.field;
-
- opts.disableWeekends = !!opts.disableWeekends;
-
- opts.disableDayFn = (typeof opts.disableDayFn) === 'function' ? opts.disableDayFn : null;
-
- var nom = parseInt(opts.numberOfMonths, 10) || 1;
- opts.numberOfMonths = nom > 4 ? 4 : nom;
-
- if (!isDate(opts.minDate)) {
- opts.minDate = false;
- }
- if (!isDate(opts.maxDate)) {
- opts.maxDate = false;
- }
- if ((opts.minDate && opts.maxDate) && opts.maxDate < opts.minDate) {
- opts.maxDate = opts.minDate = false;
- }
- if (opts.minDate) {
- this.setMinDate(opts.minDate);
- }
- if (opts.maxDate) {
- this.setMaxDate(opts.maxDate);
- }
-
- if (isArray(opts.yearRange)) {
- var fallback = new Date().getFullYear() - 10;
- opts.yearRange[0] = parseInt(opts.yearRange[0], 10) || fallback;
- opts.yearRange[1] = parseInt(opts.yearRange[1], 10) || fallback;
- } else {
- opts.yearRange = Math.abs(parseInt(opts.yearRange, 10)) || defaults.yearRange;
- if (opts.yearRange > 100) {
- opts.yearRange = 100;
- }
- }
-
- return opts;
- },
-
- /**
- * return a formatted string of the current selection (using Moment.js if available)
- */
- toString: function(format)
- {
- format = format || this._o.format;
- if (!isDate(this._d)) {
- return '';
- }
- if (this._o.toString) {
- return this._o.toString(this._d, format);
- }
- if (hasMoment) {
- return moment(this._d).format(format);
- }
- return this._d.toDateString();
- },
-
- /**
- * return a Moment.js object of the current selection (if available)
- */
- getMoment: function()
- {
- return hasMoment ? moment(this._d) : null;
- },
-
- /**
- * set the current selection from a Moment.js object (if available)
- */
- setMoment: function(date, preventOnSelect)
- {
- if (hasMoment && moment.isMoment(date)) {
- this.setDate(date.toDate(), preventOnSelect);
- }
- },
-
- /**
- * return a Date object of the current selection
- */
- getDate: function()
- {
- return isDate(this._d) ? new Date(this._d.getTime()) : null;
- },
-
- /**
- * set the current selection
- */
- setDate: function(date, preventOnSelect)
- {
- if (!date) {
- this._d = null;
-
- if (this._o.field) {
- this._o.field.value = '';
- fireEvent(this._o.field, 'change', { firedBy: this });
- }
-
- return this.draw();
- }
- if (typeof date === 'string') {
- date = new Date(Date.parse(date));
- }
- if (!isDate(date)) {
- return;
- }
-
- var min = this._o.minDate,
- max = this._o.maxDate;
-
- if (isDate(min) && date < min) {
- date = min;
- } else if (isDate(max) && date > max) {
- date = max;
- }
-
- this._d = new Date(date.getTime());
- setToStartOfDay(this._d);
- this.gotoDate(this._d);
-
- if (this._o.field) {
- this._o.field.value = this.toString();
- fireEvent(this._o.field, 'change', { firedBy: this });
- }
- if (!preventOnSelect && typeof this._o.onSelect === 'function') {
- this._o.onSelect.call(this, this.getDate());
- }
- },
-
- /**
- * change view to a specific date
- */
- gotoDate: function(date)
- {
- var newCalendar = true;
-
- if (!isDate(date)) {
- return;
- }
-
- if (this.calendars) {
- var firstVisibleDate = new Date(this.calendars[0].year, this.calendars[0].month, 1),
- lastVisibleDate = new Date(this.calendars[this.calendars.length-1].year, this.calendars[this.calendars.length-1].month, 1),
- visibleDate = date.getTime();
- // get the end of the month
- lastVisibleDate.setMonth(lastVisibleDate.getMonth()+1);
- lastVisibleDate.setDate(lastVisibleDate.getDate()-1);
- newCalendar = (visibleDate < firstVisibleDate.getTime() || lastVisibleDate.getTime() < visibleDate);
- }
-
- if (newCalendar) {
- this.calendars = [{
- month: date.getMonth(),
- year: date.getFullYear()
- }];
- if (this._o.mainCalendar === 'right') {
- this.calendars[0].month += 1 - this._o.numberOfMonths;
- }
- }
-
- this.adjustCalendars();
- },
-
- adjustDate: function(sign, days) {
-
- var day = this.getDate() || new Date();
- var difference = parseInt(days)*24*60*60*1000;
-
- var newDay;
-
- if (sign === 'add') {
- newDay = new Date(day.valueOf() + difference);
- } else if (sign === 'subtract') {
- newDay = new Date(day.valueOf() - difference);
- }
-
- this.setDate(newDay);
- },
-
- adjustCalendars: function() {
- this.calendars[0] = adjustCalendar(this.calendars[0]);
- for (var c = 1; c < this._o.numberOfMonths; c++) {
- this.calendars[c] = adjustCalendar({
- month: this.calendars[0].month + c,
- year: this.calendars[0].year
- });
- }
- this.draw();
- },
-
- gotoToday: function()
- {
- this.gotoDate(new Date());
- },
-
- /**
- * change view to a specific month (zero-index, e.g. 0: January)
- */
- gotoMonth: function(month)
- {
- if (!isNaN(month)) {
- this.calendars[0].month = parseInt(month, 10);
- this.adjustCalendars();
- }
- },
-
- nextMonth: function()
- {
- this.calendars[0].month++;
- this.adjustCalendars();
- },
-
- prevMonth: function()
- {
- this.calendars[0].month--;
- this.adjustCalendars();
- },
-
- /**
- * change view to a specific full year (e.g. "2012")
- */
- gotoYear: function(year)
- {
- if (!isNaN(year)) {
- this.calendars[0].year = parseInt(year, 10);
- this.adjustCalendars();
- }
- },
-
- /**
- * change the minDate
- */
- setMinDate: function(value)
- {
- if(value instanceof Date) {
- setToStartOfDay(value);
- this._o.minDate = value;
- this._o.minYear = value.getFullYear();
- this._o.minMonth = value.getMonth();
- } else {
- this._o.minDate = defaults.minDate;
- this._o.minYear = defaults.minYear;
- this._o.minMonth = defaults.minMonth;
- this._o.startRange = defaults.startRange;
- }
-
- this.draw();
- },
-
- /**
- * change the maxDate
- */
- setMaxDate: function(value)
- {
- if(value instanceof Date) {
- setToStartOfDay(value);
- this._o.maxDate = value;
- this._o.maxYear = value.getFullYear();
- this._o.maxMonth = value.getMonth();
- } else {
- this._o.maxDate = defaults.maxDate;
- this._o.maxYear = defaults.maxYear;
- this._o.maxMonth = defaults.maxMonth;
- this._o.endRange = defaults.endRange;
- }
-
- this.draw();
- },
-
- setStartRange: function(value)
- {
- this._o.startRange = value;
- },
-
- setEndRange: function(value)
- {
- this._o.endRange = value;
- },
-
- /**
- * refresh the HTML
- */
- draw: function(force)
- {
- if (!this._v && !force) {
- return;
- }
- var opts = this._o,
- minYear = opts.minYear,
- maxYear = opts.maxYear,
- minMonth = opts.minMonth,
- maxMonth = opts.maxMonth,
- html = '',
- randId;
-
- if (this._y <= minYear) {
- this._y = minYear;
- if (!isNaN(minMonth) && this._m < minMonth) {
- this._m = minMonth;
- }
- }
- if (this._y >= maxYear) {
- this._y = maxYear;
- if (!isNaN(maxMonth) && this._m > maxMonth) {
- this._m = maxMonth;
- }
- }
-
- randId = 'pika-title-' + Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 2);
-
- for (var c = 0; c < opts.numberOfMonths; c++) {
- html += '' + renderTitle(this, c, this.calendars[c].year, this.calendars[c].month, this.calendars[0].year, randId) + this.render(this.calendars[c].year, this.calendars[c].month, randId) + '
';
- }
-
- this.el.innerHTML = html;
-
- if (opts.bound) {
- if(opts.field.type !== 'hidden') {
- sto(function() {
- opts.trigger.focus();
- }, 1);
- }
- }
-
- if (typeof this._o.onDraw === 'function') {
- this._o.onDraw(this);
- }
-
- if (opts.bound) {
- // let the screen reader user know to use arrow keys
- opts.field.setAttribute('aria-label', opts.ariaLabel);
- }
- },
-
- adjustPosition: function()
- {
- var field, pEl, width, height, viewportWidth, viewportHeight, scrollTop, left, top, clientRect, leftAligned, bottomAligned;
-
- if (this._o.container) return;
-
- this.el.style.position = 'absolute';
-
- field = this._o.trigger;
- pEl = field;
- width = this.el.offsetWidth;
- height = this.el.offsetHeight;
- viewportWidth = window.innerWidth || document.documentElement.clientWidth;
- viewportHeight = window.innerHeight || document.documentElement.clientHeight;
- scrollTop = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop;
- leftAligned = true;
- bottomAligned = true;
-
- if (typeof field.getBoundingClientRect === 'function') {
- clientRect = field.getBoundingClientRect();
- left = clientRect.left + window.pageXOffset;
- top = clientRect.bottom + window.pageYOffset;
- } else {
- left = pEl.offsetLeft;
- top = pEl.offsetTop + pEl.offsetHeight;
- while((pEl = pEl.offsetParent)) {
- left += pEl.offsetLeft;
- top += pEl.offsetTop;
- }
- }
-
- // default position is bottom & left
- if ((this._o.reposition && left + width > viewportWidth) ||
- (
- this._o.position.indexOf('right') > -1 &&
- left - width + field.offsetWidth > 0
- )
- ) {
- left = left - width + field.offsetWidth;
- leftAligned = false;
- }
- if ((this._o.reposition && top + height > viewportHeight + scrollTop) ||
- (
- this._o.position.indexOf('top') > -1 &&
- top - height - field.offsetHeight > 0
- )
- ) {
- top = top - height - field.offsetHeight;
- bottomAligned = false;
- }
-
- this.el.style.left = left + 'px';
- this.el.style.top = top + 'px';
-
- addClass(this.el, leftAligned ? 'left-aligned' : 'right-aligned');
- addClass(this.el, bottomAligned ? 'bottom-aligned' : 'top-aligned');
- removeClass(this.el, !leftAligned ? 'left-aligned' : 'right-aligned');
- removeClass(this.el, !bottomAligned ? 'bottom-aligned' : 'top-aligned');
- },
-
- /**
- * render HTML for a particular month
- */
- render: function(year, month, randId)
- {
- var opts = this._o,
- now = new Date(),
- days = getDaysInMonth(year, month),
- before = new Date(year, month, 1).getDay(),
- data = [],
- row = [];
- setToStartOfDay(now);
- if (opts.firstDay > 0) {
- before -= opts.firstDay;
- if (before < 0) {
- before += 7;
- }
- }
- var previousMonth = month === 0 ? 11 : month - 1,
- nextMonth = month === 11 ? 0 : month + 1,
- yearOfPreviousMonth = month === 0 ? year - 1 : year,
- yearOfNextMonth = month === 11 ? year + 1 : year,
- daysInPreviousMonth = getDaysInMonth(yearOfPreviousMonth, previousMonth);
- var cells = days + before,
- after = cells;
- while(after > 7) {
- after -= 7;
- }
- cells += 7 - after;
- var isWeekSelected = false;
- for (var i = 0, r = 0; i < cells; i++)
- {
- var day = new Date(year, month, 1 + (i - before)),
- isSelected = isDate(this._d) ? compareDates(day, this._d) : false,
- isToday = compareDates(day, now),
- hasEvent = opts.events.indexOf(day.toDateString()) !== -1 ? true : false,
- isEmpty = i < before || i >= (days + before),
- dayNumber = 1 + (i - before),
- monthNumber = month,
- yearNumber = year,
- isStartRange = opts.startRange && compareDates(opts.startRange, day),
- isEndRange = opts.endRange && compareDates(opts.endRange, day),
- isInRange = opts.startRange && opts.endRange && opts.startRange < day && day < opts.endRange,
- isDisabled = (opts.minDate && day < opts.minDate) ||
- (opts.maxDate && day > opts.maxDate) ||
- (opts.disableWeekends && isWeekend(day)) ||
- (opts.disableDayFn && opts.disableDayFn(day));
-
- if (isEmpty) {
- if (i < before) {
- dayNumber = daysInPreviousMonth + dayNumber;
- monthNumber = previousMonth;
- yearNumber = yearOfPreviousMonth;
- } else {
- dayNumber = dayNumber - days;
- monthNumber = nextMonth;
- yearNumber = yearOfNextMonth;
- }
- }
-
- var dayConfig = {
- day: dayNumber,
- month: monthNumber,
- year: yearNumber,
- hasEvent: hasEvent,
- isSelected: isSelected,
- isToday: isToday,
- isDisabled: isDisabled,
- isEmpty: isEmpty,
- isStartRange: isStartRange,
- isEndRange: isEndRange,
- isInRange: isInRange,
- showDaysInNextAndPreviousMonths: opts.showDaysInNextAndPreviousMonths,
- enableSelectionDaysInNextAndPreviousMonths: opts.enableSelectionDaysInNextAndPreviousMonths
- };
-
- if (opts.pickWholeWeek && isSelected) {
- isWeekSelected = true;
- }
-
- row.push(renderDay(dayConfig));
-
- if (++r === 7) {
- if (opts.showWeekNumber) {
- row.unshift(renderWeek(i - before, month, year));
- }
- data.push(renderRow(row, opts.isRTL, opts.pickWholeWeek, isWeekSelected));
- row = [];
- r = 0;
- isWeekSelected = false;
- }
- }
- return renderTable(opts, data, randId);
- },
-
- isVisible: function()
- {
- return this._v;
- },
-
- show: function()
- {
- if (!this.isVisible()) {
- this._v = true;
- this.draw();
- removeClass(this.el, 'is-hidden');
- if (this._o.bound) {
- addEvent(document, 'click', this._onClick);
- this.adjustPosition();
- }
- if (typeof this._o.onOpen === 'function') {
- this._o.onOpen.call(this);
- }
- }
- },
-
- hide: function()
- {
- var v = this._v;
- if (v !== false) {
- if (this._o.bound) {
- removeEvent(document, 'click', this._onClick);
- }
- this.el.style.position = 'static'; // reset
- this.el.style.left = 'auto';
- this.el.style.top = 'auto';
- addClass(this.el, 'is-hidden');
- this._v = false;
- if (v !== undefined && typeof this._o.onClose === 'function') {
- this._o.onClose.call(this);
- }
- }
- },
-
- /**
- * GAME OVER
- */
- destroy: function()
- {
- var opts = this._o;
-
- this.hide();
- removeEvent(this.el, 'mousedown', this._onMouseDown, true);
- removeEvent(this.el, 'touchend', this._onMouseDown, true);
- removeEvent(this.el, 'change', this._onChange);
- if (opts.keyboardInput) {
- removeEvent(document, 'keydown', this._onKeyChange);
- }
- if (opts.field) {
- removeEvent(opts.field, 'change', this._onInputChange);
- if (opts.bound) {
- removeEvent(opts.trigger, 'click', this._onInputClick);
- removeEvent(opts.trigger, 'focus', this._onInputFocus);
- removeEvent(opts.trigger, 'blur', this._onInputBlur);
- }
- }
- if (this.el.parentNode) {
- this.el.parentNode.removeChild(this.el);
- }
- }
-
- };
-
- return Pikaday;
-}));
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Assets/promise-polyfill/dist/polyfill.min.js b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Assets/promise-polyfill/dist/polyfill.min.js
deleted file mode 100644
index 09fa4d5..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Assets/promise-polyfill/dist/polyfill.min.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n():"function"==typeof define&&define.amd?define(n):n()}(0,function(){"use strict";function e(e){var n=this.constructor;return this.then(function(t){return n.resolve(e()).then(function(){return t})},function(t){return n.resolve(e()).then(function(){return n.reject(t)})})}function n(e){return!(!e||"undefined"==typeof e.length)}function t(){}function o(e){if(!(this instanceof o))throw new TypeError("Promises must be constructed via new");if("function"!=typeof e)throw new TypeError("not a function");this._state=0,this._handled=!1,this._value=undefined,this._deferreds=[],c(e,this)}function r(e,n){for(;3===e._state;)e=e._value;0!==e._state?(e._handled=!0,o._immediateFn(function(){var t=1===e._state?n.onFulfilled:n.onRejected;if(null!==t){var o;try{o=t(e._value)}catch(r){return void f(n.promise,r)}i(n.promise,o)}else(1===e._state?i:f)(n.promise,e._value)})):e._deferreds.push(n)}function i(e,n){try{if(n===e)throw new TypeError("A promise cannot be resolved with itself.");if(n&&("object"==typeof n||"function"==typeof n)){var t=n.then;if(n instanceof o)return e._state=3,e._value=n,void u(e);if("function"==typeof t)return void c(function(e,n){return function(){e.apply(n,arguments)}}(t,n),e)}e._state=1,e._value=n,u(e)}catch(r){f(e,r)}}function f(e,n){e._state=2,e._value=n,u(e)}function u(e){2===e._state&&0===e._deferreds.length&&o._immediateFn(function(){e._handled||o._unhandledRejectionFn(e._value)});for(var n=0,t=e._deferreds.length;t>n;n++)r(e,e._deferreds[n]);e._deferreds=null}function c(e,n){var t=!1;try{e(function(e){t||(t=!0,i(n,e))},function(e){t||(t=!0,f(n,e))})}catch(o){if(t)return;t=!0,f(n,o)}}var a=setTimeout;o.prototype["catch"]=function(e){return this.then(null,e)},o.prototype.then=function(e,n){var o=new this.constructor(t);return r(this,new function(e,n,t){this.onFulfilled="function"==typeof e?e:null,this.onRejected="function"==typeof n?n:null,this.promise=t}(e,n,o)),o},o.prototype["finally"]=e,o.all=function(e){return new o(function(t,o){function r(e,n){try{if(n&&("object"==typeof n||"function"==typeof n)){var u=n.then;if("function"==typeof u)return void u.call(n,function(n){r(e,n)},o)}i[e]=n,0==--f&&t(i)}catch(c){o(c)}}if(!n(e))return o(new TypeError("Promise.all accepts an array"));var i=Array.prototype.slice.call(e);if(0===i.length)return t([]);for(var f=i.length,u=0;i.length>u;u++)r(u,i[u])})},o.resolve=function(e){return e&&"object"==typeof e&&e.constructor===o?e:new o(function(n){n(e)})},o.reject=function(e){return new o(function(n,t){t(e)})},o.race=function(e){return new o(function(t,r){if(!n(e))return r(new TypeError("Promise.race accepts an array"));for(var i=0,f=e.length;f>i;i++)o.resolve(e[i]).then(t,r)})},o._immediateFn="function"==typeof setImmediate&&function(e){setImmediate(e)}||function(e){a(e,0)},o._unhandledRejectionFn=function(e){void 0!==console&&console&&console.warn("Possible Unhandled Promise Rejection:",e)};var l=function(){if("undefined"!=typeof self)return self;if("undefined"!=typeof window)return window;if("undefined"!=typeof global)return global;throw Error("unable to locate global object")}();"Promise"in l?l.Promise.prototype["finally"]||(l.Promise.prototype["finally"]=e):l.Promise=o});
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Assets/themes/default/umbracoforms.js b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Assets/themes/default/umbracoforms.js
deleted file mode 100644
index 5126408..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Assets/themes/default/umbracoforms.js
+++ /dev/null
@@ -1,689 +0,0 @@
-(function () {
-
-
- // polyfill for matches and closest
- if (!Element.prototype.matches) Element.prototype.matches = Element.prototype.msMatchesSelector;
- if (!Element.prototype.closest) Element.prototype.closest = function (selector) {
- var el = this;
- while (el) {
- if (el.matches(selector)) {
- return el;
- }
- el = el.parentElement;
- }
- };
-
-
-
- //execute init() on document ready
- if (document.readyState === "complete" || (document.readyState !== "loading" && !document.documentElement.doScroll)) {
- listen();
- } else {
- document.addEventListener("DOMContentLoaded", listen);
- }
-
- function listen() {
- if (typeof umbracoFormsCollection === "undefined") {
- //this will occur if this js file is loaded before the inline scripts, in which case
- //we'll listen for the inline scripts to execute a custom event.
- document.addEventListener("umbracoFormLoaded", init);
- }
- else {
- initCollection(umbracoFormsCollection);
- }
- }
-
- function initCollection(formsCollection) {
- configureUmbracoFormsValidation();
-
- for (var i = 0; i < formsCollection.length; i++) {
- init({ form: formsCollection[i] });
- }
- }
-
- function init(e) {
-
- var formItem = JSON.parse(decodeURI(e.form));
-
- var forms = document.querySelectorAll('.umbraco-forms-form');
-
- for(var i = 0; i < forms.length; i++) {
- var form = forms[i];
-
- dependencyCheck(form);
-
- var page = form.querySelector('.umbraco-forms-page');
- var conditions = new UmbracoFormsConditions(page,
- formItem.pageButtonConditions,
- formItem.fieldSetConditions,
- formItem.fieldConditions,
- formItem.recordValues);
- conditions.watch();
-
- applyFormAccessibility(form);
- }
- }
-
- /** Configures the jquery validation for Umbraco forms */
- function configureUmbracoFormsValidation() {
-
- if (window.aspnetValidation !== undefined) {
- // Asp-net validation setup:
-
- var validationService = new aspnetValidation.ValidationService();
-
- // TODO: equivilant to this:
- /*
- $.validator.setDefaults({
- ignore: ":hidden"
- });
- */
-
- var required = function (value, element) {
- // Handle single and multiple checkboxes:
- if(element.type.toLowerCase() === "checkbox" || element.type.toLowerCase() === "radio") {
- var allCheckboxesOfThisName = element.form.querySelectorAll("input[name='"+element.name+"']");
- for (var i=0; i 0) {
- return;
- }
-
- var hasValidationFramework = false;
-
- if (window.jQuery && $ && $.validator !== undefined) {
- hasValidationFramework = true;
- } else if (window.aspnetValidation !== undefined) {
- hasValidationFramework = true;
- }
-
- if(hasValidationFramework === false) {
- errorMessage = errorMessage + "Umbraco Forms requires a validation framework to run, please read documentation for posible options.";
- }
-
- if (errorMessage !== "") {
- errorElement.innerHTML = errorMessage + ' See Umbraco Forms Documentation ';
-
- formEl.insertBefore(errorElement, formEl.childNodes[0]);
- }
- }
- }
-
- /**
- * Applies form accessibility improvements.
- * @param {Element} formEl the element of the form.
- */
- function applyFormAccessibility(formEl) {
- setFocusToFirstElementOnValidationError(formEl);
- }
-
- /**
- * Monitors for validation errors and when found sets the focus to the first field with an error.
- * @param {Element} formEl the element of the form.
- */
- function setFocusToFirstElementOnValidationError(formEl) {
- if ("MutationObserver" in window === false) {
- return;
- }
-
- // To implement this, we are relying on on monitoring for validation message elements, which only fires when there are changes.
- // So if you have two errors, and fix the first one, it wouldn't then highlight the second one on re-submitting the form.
- // Unless we reset the validation messages on submit, so they get changed back on errors.
- if (window.aspnetValidation !== undefined) {
- var form = formEl.getElementsByTagName('form')[0];
- var handleResetValidationMessages = function (event) {
- resetValidationMessages(form);
- };
- form.addEventListener('submit', handleResetValidationMessages, false);
- } else {
- // For jquery.validate, we need to hook this in as part of the submit handler coded in configureUmbracoFormsValidation();
- }
-
- // Watch for changes to the validation error messages in the DOM tree using a MutationObserver.
- // See: https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver
- var observer = new MutationObserver(function (mutationRecords) {
- for (var i = 0; i < mutationRecords.length; i++) {
- var mutationRecord = mutationRecords[i];
- if (mutationRecord.target.className === 'field-validation-error') {
- setFocusOnFormField(mutationRecord.target);
- break;
- }
- }
- });
-
- observer.observe(formEl, {
- attributes: true,
- attributeFilter: ['class'],
- childList: false,
- characterData: false,
- subtree: true
- });
- }
-
- /**
- * Resets the validation messages for a form.
- * @param {Element} formEl the element of the form.
- */
- function resetValidationMessages(formEl) {
- var validationErrorMessageElements = formEl.getElementsByClassName('field-validation-error');
- for (var i = 0; i < validationErrorMessageElements.length; i++) {
- validationErrorMessageElements[i].className = 'field-validation-valid';
- }
- }
-
- /**
- * Sets the focus to the form field input element associated with the provided validation message element.
- * @param {Element} validationErrorEl the element of the validation error.
- */
- function setFocusOnFormField(validationErrorEl) {
- var formFieldElement = validationErrorEl.previousElementSibling;
- while (formFieldElement) {
- if (formFieldElement.tagName.toLowerCase() === 'input' ||
- formFieldElement.tagName.toLowerCase() === 'textarea' ||
- formFieldElement.tagName.toLowerCase() === 'select') {
- formFieldElement.focus();
- break;
- }
-
- if (formFieldElement.classList.contains("radiobuttonlist") ||
- formFieldElement.classList.contains("checkboxlist")) {
- for (var i = 0; i < formFieldElement.children.length; i++) {
- var formFieldChildElement = formFieldElement.children[i];
- if (formFieldChildElement.tagName.toLowerCase() === 'input') {
- formFieldChildElement.focus();
- break;
- }
- }
-
- break;
- }
-
- formFieldElement = formFieldElement.previousElementSibling;
- }
- }
-
- /**
- * Class to handle Umbraco Forms conditional statements
- * @param {any} form a reference to the form
- * @param {any} pageButtonConditions a reference to the page button conditions
- * @param {any} fieldsetConditions a reference to the fieldset conditions
- * @param {any} fieldConditions a reference to the field conditions
- * @param {any} values the form values
- * @return {Object} reference to the created class
- */
- function UmbracoFormsConditions(form, pageButtonConditions, fieldsetConditions, fieldConditions, values) {
-
- //our conditions "class" - must always be newed to work as it uses a form instance to operate on
- //load all the information from the dom and serverside info and then the class will take care of the rest
-
- var self = {};
- self.form = form;
- self.pageButtonConditions = pageButtonConditions;
- self.fieldsetConditions = fieldsetConditions;
- self.fieldConditions = fieldConditions;
- self.values = values;
- self.dataTypes = {};
-
- //Iterates through all the form elements found on the page to update the registered value
- function populateFieldValues(page, formValues, dataTypes) {
-
- var selectFields = page.querySelectorAll("select");
- for (let i = 0; i < selectFields.length; i++) {
- const field = selectFields[i];
- formValues[field.getAttribute("id")] = field.value ? field.querySelector("option[value='" + field.value.replace(/'/g, "\\'") + "']").innerText : null;
- dataTypes[field.getAttribute("id")] = "select";
- }
-
- var textareaFields = page.querySelectorAll("textarea");
- for (let i=0; i 0;
- },
- IsNot: function (value, unexpected, dataType) {
- if (value == null) {
- return (unexpected != value);
- }
- var values = value.split(';;');
- var matchingUnexpected = values.filter(
- function (o) {
- return o === unexpected;
- });
-
- if (dataType === "checkbox") {
- if (unexpected.toUpperCase() === "TRUE" || unexpected.toUpperCase() === "ON") {
- unexpected = "true"
- } else if (unexpected.toUpperCase() === "FALSE" || unexpected.toUpperCase() === "OFF") {
- unexpected = "false"
- }
- }
- return (value || "") !== unexpected && matchingUnexpected.length === 0;
- },
- GreaterThen: function (value, limit) {
- return parseInt(value) > parseInt(limit);
- },
- LessThen: function (value, limit) {
- return parseInt(value) < parseInt(limit);
- },
- StartsWith: function (value, criteria) {
- return value && value.indexOf(criteria) === 0;
- },
- EndsWith: function (value, criteria) {
- return value && value.indexOf(criteria) === value.length - criteria.length;
- },
- Contains: function (value, criteria) {
- return value && value.indexOf(criteria) > -1;
- }
- };
-
- self.watch = function () {
- // This is a special case for pikaday
- // The only way around to pickup the value, for now, is to
- // subscribe to blur events
- var datepickerfields = self.form.querySelectorAll('.datepickerfield');
- for(let i = 0; i < datepickerfields.length; i++) {
- const field = datepickerfields[i];
- field.addEventListener('blur', function () {
- if(this.value===""){
- // Here comes the hack
- // Force the hidden datepicker field the datepicker field
- var id = this.getAttribute("id");
- var hiddenDatePickerField = id.substr(0, id.length-2);
- self.values[hiddenDatePickerField]="";
- document.getElementById(hiddenDatePickerField).value="";// sadly we cant use querySelector with current mark-up (would need to prefix IDs)
- }
-
- populateFieldValues(self.form, self.values, self.dataTypes);
- //process the conditions
- self.run();
- }.bind(field));
- }
- //subscribe to change events
- var changeablefields = self.form.querySelectorAll("input, textarea, select");
- for(let i = 0; i < changeablefields.length; i++) {
- const field = changeablefields[i];
- field.addEventListener("change", function () {
- populateFieldValues(self.form, self.values, self.dataTypes);
- //process the conditions
- self.run();
- }.bind(field));
- }
-
- //register all values from the current fields on the page
- populateFieldValues(self.form, self.values, self.dataTypes);
-
- //the initial run-through of all the conditions
- self.run();
- };
-
- self.run = function () {
- var fsId,
- fieldId,
-
- /*
- fsConditions = params.fsConditions || {},
- fieldConditions = params.fieldConditions || {},
- values = params.values || {},*/
-
- cachedResults = {};
-
- function evaluateRuleInstance(rule) {
- var value = self.values[rule.field],
- dataType = self.dataTypes[rule.field],
- func = self.operators[rule.operator],
- result = value !== null && func(value, rule.value, dataType);
- return result;
- }
-
- function evaluateRule(rule) {
- var dependencyIsVisible = true;
-
- if (self.fieldConditions[rule.field]) {
- dependencyIsVisible = isVisible(rule.field, self.fieldConditions[rule.field]);
- }
-
- if (dependencyIsVisible) {
- return evaluateRuleInstance(rule);
- }
- else {
- return false;
- }
- }
-
- function evaluateCondition(id, condition) {
- // This was once pretty. Now it needs refactoring again. :)
-
- var any = condition.logicType === "Any",
- all = condition.logicType === "All",
- fieldsetVisibilities = {},
- hasHiddenFieldset = false,
- success = true,
- rule,
- i;
-
- // If we don't have any rules defined, we must return false (as neither 'any' nor 'all' of the conditions
- // can be considered passing).
- if (condition.rules.length === 0) {
- return false;
- }
-
- for (i = 0; i < condition.rules.length; i++) {
- rule = condition.rules[i];
-
- if (id === rule.field || id === rule.fieldsetId) {
- throw new Error("Field or fieldset " + id + " has a condition on itself.");
- }
-
- if (fieldsetVisibilities[rule.fieldsetId] !== undefined) {
- continue;
- }
-
- if (self.fieldsetConditions[rule.fieldsetId]) {
-
- fieldsetVisibilities[rule.fieldsetId] =
- isVisible(rule.fieldsetId, self.fieldsetConditions[rule.fieldsetId]);
-
- if (!fieldsetVisibilities[rule.fieldsetId]) {
- hasHiddenFieldset = true;
- }
- }
- else {
- fieldsetVisibilities[rule.fieldsetId] = true;
- }
- }
-
- if (all && hasHiddenFieldset) {
- return false;
- }
-
- for (i = 0; i < condition.rules.length; i++) {
- rule = condition.rules[i];
-
- if (fieldsetVisibilities[rule.fieldsetId]) {
- success = evaluateRule(condition.rules[i]);
- }
- else {
- success = false;
- }
-
- if (any && success) {
- break;
- }
- if (all && !success) {
- break;
- }
- }
- return success;
- }
-
- function evaluateConditionVisibility(id, condition) {
- var show = condition.actionType === "Show",
- cachedResult = cachedResults[id];
-
- var success;
- if (cachedResult === undefined) {
- cachedResults[id] = show; // set default value to avoid circular issues
- success = (cachedResults[id] = evaluateCondition(id, condition));
- } else {
- success = cachedResult;
- }
-
- var visible = !(success ^ show);
- return visible;
- }
-
- function isVisible(id, condition) {
- if (condition) {
- return evaluateConditionVisibility(id, condition);
- }
- return true;
- }
-
- function handleCondition(element, id, condition) {
- var shouldShow = isVisible(id, condition);
- if (element) {
- if (shouldShow) {
- element.style.display = "";
- }
- else {
- element.style.display = "none";
- }
- }
- }
-
- for (pageId in self.pageButtonConditions) {
- if (Object.prototype.hasOwnProperty.call(self.pageButtonConditions, pageId)) {
- var pageElem = document.getElementById(pageId);
- if (pageElem) {
- handleCondition(pageElem.querySelector("input[name='__next'], button[name='__next']"), fsId, self.pageButtonConditions[pageId], "Page");
- }
- }
- }
-
- for (fsId in self.fieldsetConditions) {
- if (Object.prototype.hasOwnProperty.call(self.fieldsetConditions, fsId)) {
- handleCondition(document.getElementById(fsId), fsId, self.fieldsetConditions[fsId], "Fieldset");// sadly we cant use querySelector with current mark-up (would need to prefix IDs)
- }
- }
-
- for (fieldId in self.fieldConditions) {
- if (Object.prototype.hasOwnProperty.call(self.fieldConditions, fieldId)) {
- if (document.getElementById(fieldId)) {
- handleCondition(document.getElementById(fieldId).closest(".umbraco-forms-field"),// sadly we cant use querySelector with current mark-up (would need to prefix IDs)
- fieldId,
- self.fieldConditions[fieldId],
- "Field");
- }
- }
- }
- };
-
- return self;
- }
-})();
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Assets/umbracoforms-conditions.js b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Assets/umbracoforms-conditions.js
deleted file mode 100644
index 954d62a..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Assets/umbracoforms-conditions.js
+++ /dev/null
@@ -1,156 +0,0 @@
-var umbracoForms = umbracoForms || {};
-(function (uf) {
- var conditions = uf.conditions || {},
- operators = conditions.operators || {
- Is: function (value, expected) {
- return (value || "") === expected;
- },
- IsNot: function (value, unexpected) {
- return (value || "") !== unexpected;
- },
- GreaterThen: function (value, limit) {
- return parseInt(value) > parseInt(limit);
- },
- LessThen: function (value, limit) {
- return parseInt(value) < parseInt(limit);
- },
- StartsWith: function (value, criteria) {
- return value && value.indexOf(criteria) === 0;
- },
- EndsWith: function (value, criteria) {
- return value && value.indexOf(criteria) === value.length - criteria.length;
- },
- Contains: function (value, criteria) {
- return value && value.indexOf(criteria) > -1;
- }
- };
-
- uf.conditions = conditions;
- uf.conditions.operators = operators;
-
- conditions.handle = function (params) {
- var fsId,
- fieldId,
- fsConditions = params.fsConditions || {},
- fieldConditions = params.fieldConditions || {},
- values = params.values || {},
- dataTypes = params.dataTypes || {},
- cachedResults = {};
-
- function evaluateRuleInstance(rule) {
- var value = values[rule.field],
- dataType = dataTypes[rule.Field],
- func = operators[rule.operator],
- result = value !== null && func(value, rule.value, dataType);
- // console.log(rule.field + ": " + value + " " + rule.operator + " " + rule.value + " = " + result + "\n");
- return result;
- }
-
- function evaluateRule(rule) {
- var dependencyIsVisible = true;
-
- if (fieldConditions[rule.field]) {
- dependencyIsVisible = isVisible(rule.field, fieldConditions[rule.field]);
- }
-
- if (dependencyIsVisible) {
- return evaluateRuleInstance(rule);
- } else {
- return false;
- }
- }
-
- function evaluateCondition(id, condition) {
- // This was once pretty. Now it needs refactoring again. :)
-
- var any = condition.logicType === "Any",
- all = condition.logicType === "All",
- fieldsetVisibilities = {},
- hasHiddenFieldset = false,
- success = true,
- rule,
- i;
-
- for (i = 0; i < condition.rules.length; i++) {
- rule = condition.rules[i];
-
- if (id === rule.field || id === rule.fieldsetId) {
- throw new Error("Field or fieldset " + id + " has a condition on itself.");
- }
-
- if (fieldsetVisibilities[rule.fieldsetId] !== undefined) {
- continue;
- }
-
- if (fsConditions[rule.fieldsetId]) {
- fieldsetVisibilities[rule.fieldsetId] = isVisible(rule.fieldsetId, fsConditions[rule.fieldsetId]);
- if (!fieldsetVisibilities[rule.fieldsetId]) {
- hasHiddenFieldset = true;
- }
- } else {
- fieldsetVisibilities[rule.fieldsetId] = true;
- }
- }
-
- if (all && hasHiddenFieldset) {
- return false;
- }
-
- for (i = 0; i < condition.rules.length; i++) {
- rule = condition.rules[i];
-
- if (fieldsetVisibilities[rule.fieldsetId]) {
- success = evaluateRule(condition.rules[i]);
- } else {
- success = false;
- }
-
- if (any && success) {
- break;
- }
- if (all && !success) {
- break;
- }
- }
- return success;
- }
-
- function evaluateConditionVisibility(id, condition) {
- var show = condition.actionType === "Show",
- cachedResult = cachedResults[id],
- success = cachedResult === undefined
- ? (cachedResults[id] = evaluateCondition(id, condition))
- : cachedResult,
- visible = !(success ^ show);
- return visible;
- }
-
- function isVisible(id, condition) {
- if (condition) {
- return evaluateConditionVisibility(id, condition);
- }
- return true;
- }
-
- function handleCondition(element, id, condition) {
- // console.log(type + " " + id);
- var shouldShow = isVisible(id, condition);
- if (shouldShow) {
- // console.log("showing " + id + "\n");
- element.show();
- } else {
- // console.log("hiding " + id + "\n");
- element.hide();
- }
- }
-
- for (fsId in fsConditions) {
- handleCondition($("#" + fsId), fsId, fsConditions[fsId], "Fieldset");
- }
-
- for (fieldId in fieldConditions) {
- handleCondition($("#" + fieldId).closest(".contourField"), fieldId, fieldConditions[fieldId], "Field");
- }
- }
-
-}(umbracoForms));
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Assets/umbracoforms-dependencies.js b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Assets/umbracoforms-dependencies.js
deleted file mode 100644
index d1cfa99..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Assets/umbracoforms-dependencies.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- Umbraco Forms - Dependencies Checker
-*/
-
-window.performDependencyChecks = function (formId){
-
- //Only perform check if the global 'Umbraco.Sys' is null/undefined
- //If present means we are in backoffice & that this is being rendered as a macro preview
- //We do not need to perform this check here
- if (typeof Umbraco !== 'undefined' && typeof Umbraco.Sys !== 'undefined'){
- return;
- }
- else {
- //Check that a Form ID is passed into the function
- if(formId){
-
- //Select the wrapping div around the form
- //umbraco_form_GUID
- var umbracoForm = document.getElementById('contour_form_' + formId);
-
- var errorElement = document.createElement('div');
- errorElement.className='umbraco-forms missing-library';
- errorElement.style.color = '#fff';
- errorElement.style.backgroundColor = '#9d261d';
- errorElement.style.padding = '15px';
- errorElement.style.margin = '10px 0';
- var errorMessage = "";
-
- //Ensure umbracoForm is not null
- if(umbracoForm) {
-
- //Check for jQuery
- if (typeof jQuery == 'undefined') {
- errorMessage = errorMessage + 'jQuery has not been loaded & is required for Umbraco Forms.';
- } else {
- //These only work if jQuery is present, so it's in the else block
-
- //Check for jQuery Validation
- if(!$.validator) {
- errorMessage = errorMessage + ' jQuery Validate has not been loaded & is required for Umbraco Forms.'
- }
-
- //Check for jQuery Validation Unobtrusive
- //Only works if jQuery validator has been loaded
- if($.validator && !$.validator.unobtrusive) {
- errorMessage = errorMessage + ' jQuery Validate Unobtrusive has not been loaded & is required for Umbraco Forms.';
- }
- }
- if(errorMessage !== "") {
- errorElement.innerHTML = errorMessage + ' See Umbraco Forms Documentation ';
- umbracoForm.insertBefore(errorElement, umbracoForm.childNodes[0]);
- }
- }
- }
- }
-}
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Assets/umbracoforms.js b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Assets/umbracoforms.js
deleted file mode 100644
index 0027d0f..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Assets/umbracoforms.js
+++ /dev/null
@@ -1,36 +0,0 @@
-(function ($) {
-
- if ($.validator != undefined) {
-
- $.validator.setDefaults({
- ignore: ":hidden"
- });
-
- $.validator.unobtrusive.adapters.addBool("requiredcb", "required");
-
- $.validator.addMethod('umbracoforms_regex', function(value, element) {
-
- var regex = $(element).attr("data-regex");
- var val = $(element).val();
- if (val.length == 0) {
- return true;
- }
- return val.match(regex);
- });
-
- $.validator.unobtrusive.adapters.addBool("regex", "umbracoforms_regex");
-
- $('.contour input[type=submit]').not('.cancel').click(function (evt) {
- evt.preventDefault();
- var self = $(this);
- var frm = self.closest('form');
- frm.validate();
- if (frm.valid()) {
- frm.submit();
- self.attr('disabled', 'disabled');
-
- }
- });
- }
-} (jQuery));
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Data/Templates/commentform.json b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Data/Templates/commentform.json
deleted file mode 100644
index 2c723b2..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Data/Templates/commentform.json
+++ /dev/null
@@ -1,107 +0,0 @@
-{
- "name": "Comment form",
- "created": "2014-11-25T10:40:19.605+01:00",
- "pages": [
- {
- "fieldSets": [
- {
- "caption": null,
- "sortOrder": 0,
- "id": "00000000-0000-0000-0000-000000000000",
- "page": "00000000-0000-0000-0000-000000000000",
- "containers": [
- {
- "caption": null,
- "width": 12,
- "fields": [
- {
- "caption": "Name",
- "tooltip": null,
- "placeholder": null,
- "cssClass": null,
- "alias": "name",
- "id": "8eb355c3-ad0c-4037-8005-2c102378af24",
- "fieldTypeId": "3f92e01b-29e2-4a30-bf33-9df5580ed52c",
- "prevalueSourceId": "00000000-0000-0000-0000-000000000000",
- "dataSourceFieldKey": null,
- "mandatory": true,
- "regex": null,
- "requiredErrorMessage": null,
- "invalidErrorMessage": null,
- "condition": null,
- "settings": {
- "DefaultValue": ""
- },
- "preValues": []
- },
- {
- "caption": "Email",
- "tooltip": null,
- "placeholder": null,
- "cssClass": null,
- "alias": "email",
- "id": "391d2431-5de3-4614-8da0-96f835bddc2a",
- "fieldTypeId": "3f92e01b-29e2-4a30-bf33-9df5580ed52c",
- "prevalueSourceId": "00000000-0000-0000-0000-000000000000",
- "dataSourceFieldKey": null,
- "mandatory": true,
- "regex": "^[_a-z0-9-]+(\\.[_a-z0-9-]+)*@[a-z0-9-]+(\\.[a-z0-9-]+)*(\\.[a-z]{2,4})$",
- "requiredErrorMessage": null,
- "invalidErrorMessage": null,
- "condition": null,
- "settings": {
- "DefaultValue": ""
- },
- "preValues": []
- },
- {
- "caption": "Comment",
- "tooltip": null,
- "placeholder": null,
- "cssClass": null,
- "alias": "comment",
- "id": "7259baad-caa7-46a3-b506-1ced1e749b47",
- "fieldTypeId": "023f09ac-1445-4bcb-b8fa-ab49f33bd046",
- "prevalueSourceId": "00000000-0000-0000-0000-000000000000",
- "dataSourceFieldKey": null,
- "mandatory": true,
- "regex": null,
- "requiredErrorMessage": null,
- "invalidErrorMessage": null,
- "condition": null,
- "settings": {
- "DefaultValue": ""
- },
- "preValues": []
- }
- ]
- }
- ]
- }
- ],
- "caption": "Your comment",
- "sortOrder": 0,
- "id": "00000000-0000-0000-0000-000000000000",
- "form": "00000000-0000-0000-0000-000000000000"
- }
- ],
- "id": "c4d184f7-cd28-47f7-b3f7-c2637f7aa937",
- "fieldIndicationType": "MarkMandatoryFields",
- "indicator": "*",
- "showValidationSummary": false,
- "hideFieldValidation": false,
- "requiredErrorMessage": "Please provide a value for {0}",
- "invalidErrorMessage": "Please provide a valid value for {0}",
- "messageOnSubmit": "Thank you",
- "goToPageOnSubmit": 0,
- "xPathOnSubmit": null,
- "manualApproval": false,
- "storeRecordsLocally": true,
- "cssClass": null,
- "disableDefaultStylesheet": false,
- "workflows": [],
- "datasource": null,
- "submitLabel": "Submit",
- "nextLabel": "Next",
- "prevLabel": "Previous"
-}
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Data/Templates/contactform.json b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Data/Templates/contactform.json
deleted file mode 100644
index 0682d8d..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Data/Templates/contactform.json
+++ /dev/null
@@ -1,106 +0,0 @@
-{
- "name": "Contact form",
- "created": "2014-09-26T10:25:42.7504+02:00",
- "pages": [
- {
- "fieldSets": [
- {
- "caption": null,
- "sortOrder": 0,
- "id": "00000000-0000-0000-0000-000000000000",
- "page": "00000000-0000-0000-0000-000000000000",
- "containers": [
- {
- "caption": null,
- "width": 12,
- "fields": [
- {
- "caption": "Name",
- "tooltip": null,
- "placeholder": null,
- "cssClass": null,
- "alias": "name",
- "id": "f6718dda-0e45-48f9-bf8f-ecfe8a500a9e",
- "fieldTypeId": "3f92e01b-29e2-4a30-bf33-9df5580ed52c",
- "prevalueSourceId": "00000000-0000-0000-0000-000000000000",
- "dataSourceFieldKey": null,
- "mandatory": false,
- "regex": null,
- "requiredErrorMessage": null,
- "invalidErrorMessage": null,
- "condition": null,
- "settings": {
- "DefaultValue": ""
- },
- "preValues": []
- },
- {
- "caption": "Email",
- "tooltip": null,
- "placeholder": null,
- "cssClass": null,
- "alias": "email",
- "id": "c9204231-7756-4e10-cb50-60870fb4bb73",
- "fieldTypeId": "3f92e01b-29e2-4a30-bf33-9df5580ed52c",
- "prevalueSourceId": "00000000-0000-0000-0000-000000000000",
- "dataSourceFieldKey": null,
- "mandatory": false,
- "regex": null,
- "requiredErrorMessage": null,
- "invalidErrorMessage": null,
- "condition": null,
- "settings": {
- "DefaultValue": ""
- },
- "preValues": []
- },
- {
- "caption": "Message",
- "tooltip": null,
- "placeholder": null,
- "cssClass": null,
- "alias": "message",
- "id": "d69e4ea5-4957-4b27-f572-cae872e2dc75",
- "fieldTypeId": "023f09ac-1445-4bcb-b8fa-ab49f33bd046",
- "prevalueSourceId": "00000000-0000-0000-0000-000000000000",
- "dataSourceFieldKey": null,
- "mandatory": false,
- "regex": null,
- "requiredErrorMessage": null,
- "invalidErrorMessage": null,
- "condition": null,
- "settings": {
- "DefaultValue": ""
- },
- "preValues": []
- }
- ]
- }
- ]
- }
- ],
- "caption": "Contact Us",
- "sortOrder": 0,
- "id": "00000000-0000-0000-0000-000000000000",
- "form": "00000000-0000-0000-0000-000000000000"
- }
- ],
- "id": "0369af3b-8b18-438b-8b3a-87feedec84ea",
- "fieldIndicationType": "MarkMandatoryFields",
- "indicator": "*",
- "showValidationSummary": false,
- "hideFieldValidation": false,
- "requiredErrorMessage": "Please provide a value for {0}",
- "invalidErrorMessage": "Please provide a valid value for {0}",
- "messageOnSubmit": "Thank you",
- "goToPageOnSubmit": 0,
- "xPathOnSubmit": null,
- "manualApproval": false,
- "storeRecordsLocally": true,
- "disableDefaultStylesheet": false,
- "workflows": [],
- "datasource": null,
- "submitLabel": "Submit",
- "nextLabel": "Next",
- "prevLabel": "Prev"
-}
\ No newline at end of file
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Directives/umb-forms-content-picker.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Directives/umb-forms-content-picker.html
deleted file mode 100644
index 437e690..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Directives/umb-forms-content-picker.html
+++ /dev/null
@@ -1,21 +0,0 @@
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Directives/umb-forms-designer-new.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Directives/umb-forms-designer-new.html
deleted file mode 100644
index 92a80ed..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Directives/umb-forms-designer-new.html
+++ /dev/null
@@ -1,324 +0,0 @@
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Directives/umb-forms-entry-detail.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Directives/umb-forms-entry-detail.html
deleted file mode 100644
index 9251f1f..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Directives/umb-forms-entry-detail.html
+++ /dev/null
@@ -1,71 +0,0 @@
-
-
-
-
-
-
-
-
- {{ detail.name }}
-
-
-
- Is sensitive data
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Directives/umb-forms-file-upload-editor.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Directives/umb-forms-file-upload-editor.html
deleted file mode 100644
index fc4f083..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Directives/umb-forms-file-upload-editor.html
+++ /dev/null
@@ -1,38 +0,0 @@
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Directives/umb-forms-inline-prevalue-editor.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Directives/umb-forms-inline-prevalue-editor.html
deleted file mode 100644
index cd8ac1b..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Directives/umb-forms-inline-prevalue-editor.html
+++ /dev/null
@@ -1,4 +0,0 @@
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Directives/umb-forms-prevalue-editor.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Directives/umb-forms-prevalue-editor.html
deleted file mode 100644
index 73f4208..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Directives/umb-forms-prevalue-editor.html
+++ /dev/null
@@ -1,31 +0,0 @@
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Directives/umb-forms-regexpicker.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Directives/umb-forms-regexpicker.html
deleted file mode 100644
index 7674500..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Directives/umb-forms-regexpicker.html
+++ /dev/null
@@ -1,19 +0,0 @@
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Directives/umb-forms-render-type.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Directives/umb-forms-render-type.html
deleted file mode 100644
index 3762d24..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Directives/umb-forms-render-type.html
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Fonts/icomoon.eot b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Fonts/icomoon.eot
deleted file mode 100644
index 2f4b5cd..0000000
Binary files a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Fonts/icomoon.eot and /dev/null differ
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Fonts/icomoon.svg b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Fonts/icomoon.svg
deleted file mode 100644
index 140a8df..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Fonts/icomoon.svg
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
-Generated by IcoMoon
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Fonts/icomoon.ttf b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Fonts/icomoon.ttf
deleted file mode 100644
index 4010977..0000000
Binary files a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Fonts/icomoon.ttf and /dev/null differ
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Fonts/icomoon.woff b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Fonts/icomoon.woff
deleted file mode 100644
index d9e1562..0000000
Binary files a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Fonts/icomoon.woff and /dev/null differ
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Images/close.png b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Images/close.png
deleted file mode 100644
index f62d1a7..0000000
Binary files a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Images/close.png and /dev/null differ
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Images/recaptcha.png b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Images/recaptcha.png
deleted file mode 100644
index dbd41f0..0000000
Binary files a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Images/recaptcha.png and /dev/null differ
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Images/recaptcha2.png b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Images/recaptcha2.png
deleted file mode 100644
index 7572776..0000000
Binary files a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Images/recaptcha2.png and /dev/null differ
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Images/recaptcha3.png b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Images/recaptcha3.png
deleted file mode 100644
index 2e224b5..0000000
Binary files a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Images/recaptcha3.png and /dev/null differ
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Images/succes-green.png b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Images/succes-green.png
deleted file mode 100644
index 5658a6d..0000000
Binary files a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Images/succes-green.png and /dev/null differ
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Images/workflows/slack/icon.svg b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Images/workflows/slack/icon.svg
deleted file mode 100644
index df3987a..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Images/workflows/slack/icon.svg
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/RazorTemplates/HtmlTable.cshtml b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/RazorTemplates/HtmlTable.cshtml
deleted file mode 100644
index e69de29..0000000
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Xslt/DataTables_json.xslt b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Xslt/DataTables_json.xslt
deleted file mode 100644
index 537f691..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Xslt/DataTables_json.xslt
+++ /dev/null
@@ -1,92 +0,0 @@
-
-
-
-
-
-
-
-
-
- function date2number(s) { return Number(new Date(s)); }
-
-
-
-
-
- { "iTotalDisplayRecords": " ","iTotalRecords": " ",
- "formFields" : [
- "Id","Created","IP","Page Id","Link",
-
- " ",
-
- ],
- "aaData": [
-
-
-
-
-
- [
- " ",
- " ",
- " ",
- " ",
- "<a href=' ' target='_blank'> </a>"
-
-
-
-
-
-
-
-
-
-
- ,
-
-
-
-
-
-
-
-
-
-
- ," "
-
-
-
- ,
- " ",
-
-
-
- " ",
-
-
-
- " "
-
-
-
-
-
-
-
-
-
- ],
-
- ]}
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Xslt/DataTables_json_medtrust.xslt b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Xslt/DataTables_json_medtrust.xslt
deleted file mode 100644
index fecdfea..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Xslt/DataTables_json_medtrust.xslt
+++ /dev/null
@@ -1,82 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
- { "iTotalDisplayRecords": " ","iTotalRecords": " ", "aaData": [
-
-
-
-
-
- [
- " ",
- " ",
- " ",
- " ",
- "<a href=' ' target='_blank'> </a>"
-
-
-
-
-
-
-
-
-
-
- ,
-
-
-
-
-
-
-
-
-
-
- ," "
-
-
- ,
- " ",
-
-
-
- " ",
-
-
-
- " "
-
-
-
-
-
-
-
-
-
- ],
-
- ]}
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Xslt/Html.xslt b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Xslt/Html.xslt
deleted file mode 100644
index 76214ad..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Xslt/Html.xslt
+++ /dev/null
@@ -1,96 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Export of data from umbraco forms
-
-
-
-
- Export of data from umbraco forms
-
-
-
- State
-
-
- Submitted
-
-
- Page ID
-
-
- IP
-
-
- Member Key
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ,
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Xslt/Templates/Schema2/UmbracoContourListComments.xslt b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Xslt/Templates/Schema2/UmbracoContourListComments.xslt
deleted file mode 100644
index 606a171..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Xslt/Templates/Schema2/UmbracoContourListComments.xslt
+++ /dev/null
@@ -1,65 +0,0 @@
-
-
-]>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- No comments
-
-
- 1 comment
-
-
- comments
-
-
-
-
-
-
-
-
-
-
-
-
-
- Says:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Xslt/Templates/UmbracoContourListComments.xslt b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Xslt/Templates/UmbracoContourListComments.xslt
deleted file mode 100644
index e08ee63..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Xslt/Templates/UmbracoContourListComments.xslt
+++ /dev/null
@@ -1,59 +0,0 @@
-
- ]>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- No comments
-
-
- 1 comment
-
-
- comments
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Xslt/excel.xslt b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Xslt/excel.xslt
deleted file mode 100644
index 8cb5463..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Xslt/excel.xslt
+++ /dev/null
@@ -1,59 +0,0 @@
-
-
-
-
-
-
-
-
-
-
- "State","Submitted","PageId","URL","IP","MemberId",
-
-
-
-
- " "
-
- ,
-
-
-
-
-
- " "," / / "," "," "," ","",
-
-
-
-
-
-
-
-
- " "
-
-
-
- ,
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Xslt/postAsXmlSample.xslt b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Xslt/postAsXmlSample.xslt
deleted file mode 100644
index f692ee5..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Xslt/postAsXmlSample.xslt
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
- 1
- 1
- 1
- new
-
-
-
-
-
-
-
-
-
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Xslt/sendXsltEmailSample.xslt b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Xslt/sendXsltEmailSample.xslt
deleted file mode 100644
index 67ba9cb..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Xslt/sendXsltEmailSample.xslt
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
-
-
-
-
-
-
-
- Intro
-
- Hello, this is a sample email using xslt to convert a record into a custom email
-
-
- the fields
-
-
-
-
- Caption:
-
-
-
-
-
-
-
-
- The actual xml
-
-
-
-
-
-
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Xslt/xml.xslt b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Xslt/xml.xslt
deleted file mode 100644
index d3d3e23..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/Xslt/xml.xslt
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/FieldTypes/Recaptcha2.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/FieldTypes/Recaptcha2.html
deleted file mode 100644
index 81f522a..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/FieldTypes/Recaptcha2.html
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/FieldTypes/checkbox.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/FieldTypes/checkbox.html
deleted file mode 100644
index a68767c..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/FieldTypes/checkbox.html
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/FieldTypes/checkboxlist.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/FieldTypes/checkboxlist.html
deleted file mode 100644
index 18242a6..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/FieldTypes/checkboxlist.html
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
- {{preValue}}
-
-
-
- {{preValue.value}}
-
-
-
-
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/FieldTypes/dataconsent.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/FieldTypes/dataconsent.html
deleted file mode 100644
index 8199910..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/FieldTypes/dataconsent.html
+++ /dev/null
@@ -1,3 +0,0 @@
-
- {{ field.settings.AcceptCopy }}
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/FieldTypes/datepicker.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/FieldTypes/datepicker.html
deleted file mode 100644
index b836474..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/FieldTypes/datepicker.html
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/FieldTypes/dropdownlist.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/FieldTypes/dropdownlist.html
deleted file mode 100644
index 8bf0786..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/FieldTypes/dropdownlist.html
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
- Choose...
- {{preValue}}
- {{preValue.value}}
-
-
-
-
-
-
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/FieldTypes/fileupload.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/FieldTypes/fileupload.html
deleted file mode 100644
index cb75843..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/FieldTypes/fileupload.html
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/FieldTypes/hiddenfield.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/FieldTypes/hiddenfield.html
deleted file mode 100644
index 7c048d0..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/FieldTypes/hiddenfield.html
+++ /dev/null
@@ -1,3 +0,0 @@
-
- {{field.caption}}
-
\ No newline at end of file
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/FieldTypes/password.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/FieldTypes/password.html
deleted file mode 100644
index 9f486d2..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/FieldTypes/password.html
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/FieldTypes/radiobuttonlist.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/FieldTypes/radiobuttonlist.html
deleted file mode 100644
index 999ca23..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/FieldTypes/radiobuttonlist.html
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
- {{preValue}}
-
-
-
- {{preValue.value}}
-
-
-
-
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/FieldTypes/recaptcha.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/FieldTypes/recaptcha.html
deleted file mode 100644
index d5411e1..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/FieldTypes/recaptcha.html
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/FieldTypes/recaptcha3.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/FieldTypes/recaptcha3.html
deleted file mode 100644
index 8c5acec..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/FieldTypes/recaptcha3.html
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/FieldTypes/text.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/FieldTypes/text.html
deleted file mode 100644
index 620589b..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/FieldTypes/text.html
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/FieldTypes/textarea.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/FieldTypes/textarea.html
deleted file mode 100644
index aa624de..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/FieldTypes/textarea.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/FieldTypes/textfield.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/FieldTypes/textfield.html
deleted file mode 100644
index b5ea8d7..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/FieldTypes/textfield.html
+++ /dev/null
@@ -1,6 +0,0 @@
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/RenderTypes/date.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/RenderTypes/date.html
deleted file mode 100644
index 371c060..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/RenderTypes/date.html
+++ /dev/null
@@ -1 +0,0 @@
-{{field | date:'medium'}}
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/RenderTypes/file.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/RenderTypes/file.html
deleted file mode 100644
index 8a768a8..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/RenderTypes/file.html
+++ /dev/null
@@ -1,15 +0,0 @@
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/RenderTypes/member.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/RenderTypes/member.html
deleted file mode 100644
index 7422b52..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/RenderTypes/member.html
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
No member submitted this record
-
-
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/RenderTypes/number.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/RenderTypes/number.html
deleted file mode 100644
index 98f6063..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/RenderTypes/number.html
+++ /dev/null
@@ -1 +0,0 @@
-{{ field }}
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/RenderTypes/text.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/RenderTypes/text.html
deleted file mode 100644
index 98f6063..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/RenderTypes/text.html
+++ /dev/null
@@ -1 +0,0 @@
-{{ field }}
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/checkbox.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/checkbox.html
deleted file mode 100644
index de3c24d..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/checkbox.html
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/documentmapper.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/documentmapper.html
deleted file mode 100644
index 05f7f5f..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/documentmapper.html
+++ /dev/null
@@ -1,59 +0,0 @@
-
-
-
- -- choose type --
-
-
-
-
-
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/dropdownlist.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/dropdownlist.html
deleted file mode 100644
index c0ac84f..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/dropdownlist.html
+++ /dev/null
@@ -1,3 +0,0 @@
-
- -- choose --
-
\ No newline at end of file
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/emailtemplatepicker.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/emailtemplatepicker.html
deleted file mode 100644
index 495fb98..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/emailtemplatepicker.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/fieldmapper.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/fieldmapper.html
deleted file mode 100644
index 4e2ed0b..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/fieldmapper.html
+++ /dev/null
@@ -1,57 +0,0 @@
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/file-upload.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/file-upload.html
deleted file mode 100644
index d3afbc0..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/file-upload.html
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-
-
: {{vm.filePercentage}}%
-
-
-
-
- : {{vm.savedPath}}
-
-
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/file.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/file.html
deleted file mode 100644
index 7b4f0f8..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/file.html
+++ /dev/null
@@ -1,5 +0,0 @@
-
- {{setting.value}}
-
-
Pick
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/numericfield.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/numericfield.html
deleted file mode 100644
index 72fa799..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/numericfield.html
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/password.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/password.html
deleted file mode 100644
index 50091c4..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/password.html
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/passwordnoautocomplete.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/passwordnoautocomplete.html
deleted file mode 100644
index 9a4d019..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/passwordnoautocomplete.html
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/pickers.connectionstring.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/pickers.connectionstring.html
deleted file mode 100644
index b094e60..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/pickers.connectionstring.html
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
- -- choose connectionstring --
-
-
\ No newline at end of file
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/pickers.content.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/pickers.content.html
deleted file mode 100644
index b0e6df9..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/pickers.content.html
+++ /dev/null
@@ -1,16 +0,0 @@
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/pickers.contentwithxpath.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/pickers.contentwithxpath.html
deleted file mode 100644
index a351931..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/pickers.contentwithxpath.html
+++ /dev/null
@@ -1,83 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Show xpath query help
- Hide xpath query help
-
-
-
-
- Use Xpath query to set a root node on the tree, either based on a search from the root of the content tree, or by using a context-aware placeholder.
-
-
-
- Placeholders finds the nearest published ID and runs its query from there. so for instance:
-
-
$parent/newsArticle
-
- Will try to get the parent if available, but will then fall back to the nearest ancestor and query for all news articles there.
-
-
-
- Available placeholders:
-
- $current
: current page or closest found ancestor
- $parent
: parent page or closest found ancestor
- $root
: root of the content tree
- $site
: Ancestor node at level 1
-
-
-
-
-
-
- Cancel and clear query
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/pickers.datatype.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/pickers.datatype.html
deleted file mode 100644
index cffd019..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/pickers.datatype.html
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
- -- choose type --
-
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/pickers.documenttype.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/pickers.documenttype.html
deleted file mode 100644
index 980b10b..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/pickers.documenttype.html
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
- -- choose type --
-
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/range.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/range.html
deleted file mode 100644
index 8280219..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/range.html
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/standardfieldmapper.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/standardfieldmapper.html
deleted file mode 100644
index 9b2e349..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/standardfieldmapper.html
+++ /dev/null
@@ -1,37 +0,0 @@
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/textarea.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/textarea.html
deleted file mode 100644
index bee0c24..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/textarea.html
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/textfield.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/textfield.html
deleted file mode 100644
index 1b67e3c..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/textfield.html
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/textfieldnoautocomplete.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/textfieldnoautocomplete.html
deleted file mode 100644
index bc1f45c..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/textfieldnoautocomplete.html
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/textstring.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/textstring.html
deleted file mode 100644
index 1b18253..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Common/SettingTypes/textstring.html
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Dashboards/forms.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Dashboards/forms.html
deleted file mode 100644
index 9ae5634..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Dashboards/forms.html
+++ /dev/null
@@ -1,239 +0,0 @@
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/DataSource/delete.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/DataSource/delete.html
deleted file mode 100644
index 2a613ce..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/DataSource/delete.html
+++ /dev/null
@@ -1,14 +0,0 @@
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/DataSource/dialogs/wizard.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/DataSource/dialogs/wizard.html
deleted file mode 100644
index 279247d..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/DataSource/dialogs/wizard.html
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/DataSource/edit.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/DataSource/edit.html
deleted file mode 100644
index 9d4a3a8..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/DataSource/edit.html
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/copy.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/copy.html
deleted file mode 100644
index 216217d..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/copy.html
+++ /dev/null
@@ -1,43 +0,0 @@
-
-
-
-
{{ title }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/create.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/create.html
deleted file mode 100644
index f511435..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/create.html
+++ /dev/null
@@ -1,66 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/delete.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/delete.html
deleted file mode 100644
index 80322a1..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/delete.html
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
- {{vm.title}}
-
-
-
-
-
-
-
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/dialogs/additem.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/dialogs/additem.html
deleted file mode 100644
index 8d2a887..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/dialogs/additem.html
+++ /dev/null
@@ -1,33 +0,0 @@
-
\ No newline at end of file
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/dialogs/entriesdetail.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/dialogs/entriesdetail.html
deleted file mode 100644
index e4e2905..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/dialogs/entriesdetail.html
+++ /dev/null
@@ -1,47 +0,0 @@
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/dialogs/entriessettings.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/dialogs/entriessettings.html
deleted file mode 100644
index 735b01a..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/dialogs/entriessettings.html
+++ /dev/null
@@ -1,47 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/dialogs/fieldsetsettings.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/dialogs/fieldsetsettings.html
deleted file mode 100644
index 42d9278..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/dialogs/fieldsetsettings.html
+++ /dev/null
@@ -1,70 +0,0 @@
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/dialogs/fieldsettings.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/dialogs/fieldsettings.html
deleted file mode 100644
index d9118ef..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/dialogs/fieldsettings.html
+++ /dev/null
@@ -1,144 +0,0 @@
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/dialogs/formsettings.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/dialogs/formsettings.html
deleted file mode 100644
index d049a09..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/dialogs/formsettings.html
+++ /dev/null
@@ -1,128 +0,0 @@
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/edit.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/edit.html
deleted file mode 100644
index dca38c3..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/edit.html
+++ /dev/null
@@ -1,41 +0,0 @@
-
-
-
-
-
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/entries.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/entries.html
deleted file mode 100644
index 3963ba9..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/entries.html
+++ /dev/null
@@ -1,305 +0,0 @@
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/move.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/move.html
deleted file mode 100644
index dd92001..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/move.html
+++ /dev/null
@@ -1,48 +0,0 @@
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/overlays/fieldsetsettings/fieldset-settings.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/overlays/fieldsetsettings/fieldset-settings.html
deleted file mode 100644
index 9c5037c..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/overlays/fieldsetsettings/fieldset-settings.html
+++ /dev/null
@@ -1,114 +0,0 @@
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/overlays/fieldsettings/field-settings.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/overlays/fieldsettings/field-settings.html
deleted file mode 100644
index e75e57f..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/overlays/fieldsettings/field-settings.html
+++ /dev/null
@@ -1,280 +0,0 @@
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/overlays/fieldtypepicker/field-type-picker.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/overlays/fieldtypepicker/field-type-picker.html
deleted file mode 100644
index eff6ea6..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/overlays/fieldtypepicker/field-type-picker.html
+++ /dev/null
@@ -1,61 +0,0 @@
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/overlays/formpicker/formpicker.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/overlays/formpicker/formpicker.html
deleted file mode 100644
index 2d74e6c..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/overlays/formpicker/formpicker.html
+++ /dev/null
@@ -1,38 +0,0 @@
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/overlays/pagesettings/page-settings.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/overlays/pagesettings/page-settings.html
deleted file mode 100644
index c76dfdb..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/overlays/pagesettings/page-settings.html
+++ /dev/null
@@ -1,94 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/overlays/themepicker/themepicker.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/overlays/themepicker/themepicker.html
deleted file mode 100644
index f2bb520..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/overlays/themepicker/themepicker.html
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/overlays/workflows/submit-message-workflow-settings.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/overlays/workflows/submit-message-workflow-settings.html
deleted file mode 100644
index 27521a1..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/overlays/workflows/submit-message-workflow-settings.html
+++ /dev/null
@@ -1,46 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/overlays/workflows/workflow-settings.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/overlays/workflows/workflow-settings.html
deleted file mode 100644
index 52da5b4..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/overlays/workflows/workflow-settings.html
+++ /dev/null
@@ -1,53 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/overlays/workflows/workflow-types.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/overlays/workflows/workflow-types.html
deleted file mode 100644
index 1e0eb68..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/overlays/workflows/workflow-types.html
+++ /dev/null
@@ -1,58 +0,0 @@
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/overlays/workflows/workflows-overview.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/overlays/workflows/workflows-overview.html
deleted file mode 100644
index 52814b0..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/overlays/workflows/workflows-overview.html
+++ /dev/null
@@ -1,129 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/rename.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/rename.html
deleted file mode 100644
index 9b4d1fc..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/rename.html
+++ /dev/null
@@ -1,21 +0,0 @@
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/views/design/design.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/views/design/design.html
deleted file mode 100644
index deec519..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/views/design/design.html
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/views/settings/settings.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/views/settings/settings.html
deleted file mode 100644
index ca2017b..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/views/settings/settings.html
+++ /dev/null
@@ -1,134 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/workflows.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/workflows.html
deleted file mode 100644
index c5a1721..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Form/workflows.html
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
-
-
-
Form workflows
-
-
-
-
-
-
-
Form workflows allow you to add additional functionality to a form, like sending an email, posting to a third party service...
-
When the form is submitted, it should...
-
These actions will execute when the user has filled in the fields and submits the final step of the form.
-
-
-
Add an action
-
-
When form records are approved I want to ...
-
These actions wil execute when the submitted form record is approved. In case your form is set to manual approve these actions will be triggered from the records viewer.
-
-
Add an action
-
-
-
-
-
-
-
-
-
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/FormSecurity/edit.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/FormSecurity/edit.html
deleted file mode 100644
index fc3f983..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/FormSecurity/edit.html
+++ /dev/null
@@ -1,101 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ form.FormName }}
- {{ form.Fields }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/GridEditors/FormPicker.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/GridEditors/FormPicker.html
deleted file mode 100644
index f523e9b..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/GridEditors/FormPicker.html
+++ /dev/null
@@ -1,16 +0,0 @@
-
\ No newline at end of file
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Icons/slack.svg b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Icons/slack.svg
deleted file mode 100644
index 082d453..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/Icons/slack.svg
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/PreValueSource/delete.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/PreValueSource/delete.html
deleted file mode 100644
index 794ccfc..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/PreValueSource/delete.html
+++ /dev/null
@@ -1,14 +0,0 @@
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/PreValueSource/edit.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/PreValueSource/edit.html
deleted file mode 100644
index 1002871..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/PreValueSource/edit.html
+++ /dev/null
@@ -1,77 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{prevalue.id}}
- {{prevalue.value}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/PropertyEditors/formpicker.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/PropertyEditors/formpicker.html
deleted file mode 100644
index 29f7e7b..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/PropertyEditors/formpicker.html
+++ /dev/null
@@ -1,36 +0,0 @@
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/PropertyEditors/formpicker.prevalues.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/PropertyEditors/formpicker.prevalues.html
deleted file mode 100644
index 96f7841..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/PropertyEditors/formpicker.prevalues.html
+++ /dev/null
@@ -1,29 +0,0 @@
-
\ No newline at end of file
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/PropertyEditors/themepicker.html b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/PropertyEditors/themepicker.html
deleted file mode 100644
index 437821d..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/backoffice/PropertyEditors/themepicker.html
+++ /dev/null
@@ -1,28 +0,0 @@
-
\ No newline at end of file
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/js/umbraco.forms.js b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/js/umbraco.forms.js
deleted file mode 100644
index 96e88ad..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/js/umbraco.forms.js
+++ /dev/null
@@ -1,6540 +0,0 @@
-angular.module("umbraco").controller("UmbracoForms.RenderTypes.FileController",
- function($scope){
-
-
-
- var imageExts = ['jpg','jpeg','png','gif','bmp'];
-
- $scope.files = $scope.field.replace('~', '').split(',');
-
- $scope.isImage = function(filepath){
- return imageExts.indexOf( $scope.getExtension(filepath) ) >= 0;
- };
-
- $scope.getExtension = function(filepath){
- return filepath.substring(filepath.lastIndexOf(".")+1).toLowerCase();
- };
-
- $scope.getFileName = function(filepath){
- return filepath.substring(filepath.lastIndexOf("/")+1);
- };
-
- $scope.getPreview = function(filepath){
- return filepath.replace('~','') + "?width=400";
- };
-
- });
-
-angular.module("umbraco").controller("UmbracoForms.SettingTypes.DocumentMapperController",
- function ($scope, $routeParams,pickerResource) {
-
- if (!$scope.setting.value) {
-
- } else {
- var value = JSON.parse($scope.setting.value);
- $scope.doctype = value.doctype;
- $scope.nameField = value.nameField;
- $scope.nameStaticValue = value.nameStaticValue;
-
- //Need to merge the fields (fetch everytime we load in case of renames or new properties added or removed)
- pickerResource.updateMappedProperties($scope.doctype, value.properties).then(function (response) {
- $scope.properties = response.data;
- });
- }
-
- pickerResource.getAllDocumentTypesWithAlias().then(function (response) {
- $scope.doctypes = response.data;
- });
-
- pickerResource.getAllFields($routeParams.id).then(function (response) {
- $scope.fields = response.data;
- });
-
- $scope.setDocType = function() {
-
- pickerResource.getAllProperties($scope.doctype).then(function (response) {
- $scope.properties = response.data;
- });
- };
-
- $scope.setValue = function() {
-
- var val = {};
- val.doctype = $scope.doctype;
- val.nameField = $scope.nameField;
- val.nameStaticValue = $scope.nameStaticValue;
- val.properties = $scope.properties;
-
- $scope.setting.value = JSON.stringify(val);
- };
- });
-
-angular.module("umbraco").controller("UmbracoForms.SettingTypes.EmailTemplatePicker",
- function ($scope, pickerResource, editorService) {
-
- $scope.openTreePicker = function() {
-
- var treePickerOverlay = {
- treeAlias: "EmailTemplates",
- section:"forms",
- entityType: "email-template",
- multiPicker: false,
- onlyInitialized: false,
- select: function(node){
- pickerResource.getVirtualPathForEmailTemplate(node.id).then(function (response) {
- //Set the picked template file path as the setting value
- $scope.setting.value = response.data.path;
- });
-
- editorService.close();
- },
- close: function (model) {
- editorService.close();
- }
- };
-
- editorService.treePicker(treePickerOverlay);
-
- };
-
- });
-
-angular.module("umbraco").controller("UmbracoForms.SettingTypes.FieldMapperController",
- function ($scope, $routeParams, pickerResource) {
-
- function init() {
-
- if (!$scope.setting.value) {
- $scope.mappings = [];
- } else {
- $scope.mappings = JSON.parse($scope.setting.value);
- }
-
- var formId = $routeParams.id;
-
- if (formId === -1 && $scope.model && $scope.model.fields) {
-
- } else {
-
- pickerResource.getAllFields($routeParams.id).then(function (response) {
- $scope.fields = response.data;
- });
- }
- }
-
- $scope.addMapping = function () {
- $scope.mappings.push({
- alias: "",
- value: "",
- staticValue: ""
- });
- };
-
- $scope.deleteMapping = function (index) {
- $scope.mappings.splice(index, 1);
- $scope.setting.value = JSON.stringify($scope.mappings);
- };
-
- $scope.stringifyValue = function () {
- $scope.setting.value = JSON.stringify($scope.mappings);
- };
-
- init();
-
- });
-
-
-(function () {
- "use strict";
-
- function FileUploadSettingsController($scope, Upload, notificationsService) {
-
- var vm = this;
- vm.isUploading = false;
- vm.filePercentage = 0;
- vm.savedPath = $scope.setting.value;
-
- vm.uploadFile = function(file){
-
- // console.log('savedPath', vm.savedPath);
-
- Upload.upload({
- url: "backoffice/UmbracoForms/PreValueFile/PostAddFile",
- fields: {
- 'previousPath': vm.savedPath
- },
- file: file
- })
- .progress(function(evt) {
- // set uploading status on file
- vm.isUploading = true;
-
- // calculate progress in percentage
- var progressPercentage = parseInt(100.0 * evt.loaded / evt.total, 10);
-
- // set percentage property on file
- vm.filePercentage = progressPercentage;
-
- // console.log('progress', progressPercentage);
- })
- .success(function(data, status, headers, config) {
- // console.log('success data', data);
-
- //Set the path for the PreValue setting & will get saved into the JSON
- $scope.setting.value = data.FilePath;
- vm.savedPath = data.FilePath;
-
- //Reset
- vm.isUploading = false;
- vm.filePercentage = 0;
- })
- .error(function(evt, status, headers, config) {
-
- //Loop over notifications from response from API to show them
- if (angular.isArray(evt.notifications)) {
- for (var i = 0; i < evt.notifications.length; i++) {
- notificationsService.showNotification(evt.notifications[i]);
- }
- }
-
- //Reset
- vm.isUploading = false;
- vm.filePercentage = 0;
-
- });
-
- };
-
- };
-
- angular.module("umbraco").controller("UmbracoForms.SettingTypes.FileUpload", FileUploadSettingsController);
-})();
-angular.module("umbraco").controller("UmbracoForms.SettingTypes.File",
- function ($scope, editorService) {
-
- $scope.openMediaPicker = function () {
-
- var mediaPicker = {
- submit: function (model) {
- var selectedImage = model.selection[0];
- populateFile(selectedImage);
-
- editorService.close();
- },
- close: function () {
- editorService.close();
- }
- };
-
- editorService.mediaPicker(mediaPicker);
- };
-
- $scope.clear = function () {
- $scope.setting.value = undefined;
- };
-
- function populateFile(item) {
- $scope.setting.value = item.image;
- }
- });
-
-angular.module("umbraco").controller("UmbracoForms.SettingTypes.NumericFieldController",
- function ($scope) {
-
- var vm = this;
-
- // The prevalues setting is a string array in order: Min, Max, Default Value.
- vm.min = parseFloat($scope.setting.prevalues[0]);
- vm.max = parseFloat($scope.setting.prevalues[1]);
- var defaultValue = parseFloat($scope.setting.prevalues[2]);
-
- // Set the provided default value.
- if (!$scope.setting.value) {
- $scope.setting.value = defaultValue;
- }
-
- // Ensure we have a number.
- vm.value = parseFloat($scope.setting.value);
-
- vm.change = function () {
- // Convert it back to a string.
- $scope.setting.value = vm.value.toString();
- }
-
-});
-
-angular.module("umbraco").controller("UmbracoForms.SettingTypes.Pickers.CheckboxController", function ($scope) {
-
- var vm = this;
-
- // Prevalues are a single element, containing a boolean value indicating whether the default value
- // when no setting is applied should be "checked"
- var defaultToTrue = $scope.setting.prevalues.length > 0 && $scope.setting.prevalues[0] ? true : false;
-
- vm.toggle = toggle;
-
- vm.checked = false;
- if (defaultToTrue) {
- vm.checked = $scope.setting.value !== 'False';
- } else {
- vm.checked = $scope.setting.value === 'True';
- }
-
- function toggle() {
- vm.checked = !vm.checked;
-
- if (vm.checked) {
- $scope.setting.value = 'True'
- } else {
- $scope.setting.value = 'False'
- }
- }
-});
-
-angular.module("umbraco").controller("UmbracoForms.SettingTypes.Pickers.ConnectionStringController",
- function ($scope, $routeParams, pickerResource) {
- pickerResource.getAllConnectionStrings().then(function (response) {
- $scope.strings = response.data;
- });
- });
-angular.module("umbraco").controller("UmbracoForms.SettingTypes.Pickers.ContentController",
- function ($scope, $routeParams, editorService, entityResource, iconHelper) {
-
- if (!$scope.setting) {
- $scope.setting = {};
- }
-
-
- var val = parseInt($scope.setting.value);
-
-
- if (!isNaN(val) && angular.isNumber(val)) {
- //node
- $scope.showQuery = false;
-
- entityResource.getById($scope.setting.value, "Document").then(function (item) {
- item.icon = iconHelper.convertFromLegacyIcon(item.icon);
- $scope.node = item;
- });
- }
-
- $scope.openContentPicker = function () {
-
- var contentPicker = {
- submit: function(model) {
- var selectedNode = model.selection[0];
- populate(selectedNode);
- editorService.close();
- },
- close: function() {
- editorService.close();
- }
- };
- editorService.contentPicker(contentPicker);
- };
-
-
- $scope.clear = function () {
- $scope.id = undefined;
- $scope.node = undefined;
- $scope.setting.value = undefined;
- };
-
- function populate(item) {
- $scope.clear();
- item.icon = iconHelper.convertFromLegacyIcon(item.icon);
- $scope.node = item;
- $scope.id = item.id;
- $scope.setting.value = item.id;
- }
-
-});
-angular.module("umbraco").controller("UmbracoForms.SettingTypes.Pickers.ContentWithXpathController",
- function ($scope, editorService, entityResource, iconHelper) {
-
- $scope.queryIsVisible = false;
- $scope.helpIsVisible = false;
- $scope.query = "";
-
-
- if (!$scope.setting) {
- $scope.setting = {};
- }
-
- function init() {
-
- if (valueIsEntityId($scope.setting.value)) {
- entityResource.getById($scope.setting.value, "Document").then(function (item) {
- item.icon = iconHelper.convertFromLegacyIcon(item.icon);
- $scope.node = item;
- });
-
- } else if ($scope.setting.value) {
-
- $scope.queryIsVisible = true;
- $scope.query = $scope.setting.value;
-
- }
-
- }
-
- function valueIsEntityId(value) {
- // Check we have a positive integer.
- return /^([1-9]\d*)$/.test(value);
- }
-
- $scope.openContentPicker = function () {
-
- var contentPicker = {
- submit: function (model) {
- populate(model.selection[0]);
- editorService.close();
- },
- close: function () {
- editorService.close();
- }
- };
- editorService.contentPicker(contentPicker);
-
- };
-
- $scope.showQuery = function () {
- $scope.queryIsVisible = true;
- };
-
- $scope.toggleHelp = function () {
- $scope.helpIsVisible = !$scope.helpIsVisible;
- };
-
- $scope.setXpath = function () {
- $scope.setting.value = $scope.query;
- };
-
- $scope.clear = function () {
- $scope.id = undefined;
- $scope.node = undefined;
- $scope.setting.value = undefined;
- $scope.query = undefined;
- $scope.queryIsVisible = false;
- };
-
- function populate(item) {
- $scope.clear();
- item.icon = iconHelper.convertFromLegacyIcon(item.icon);
- $scope.node = item;
- $scope.id = item.id;
- $scope.setting.value = item.id;
- }
-
- init();
-
- });
-
-angular.module("umbraco").controller("UmbracoForms.SettingTypes.Pickers.DataTypeController",
- function ($scope, $routeParams, pickerResource) {
- pickerResource.getAllDataTypes().then(function (response) {
- $scope.datatypes = response.data;
- });
- });
-angular.module("umbraco").controller("UmbracoForms.SettingTypes.Pickers.DocumentTypeController",
- function ($scope, $routeParams, pickerResource) {
- pickerResource.getAllDocumentTypesWithAlias().then(function (response) {
- $scope.doctypes = response.data;
- });
- });
-angular.module("umbraco").controller("UmbracoForms.SettingTypes.RangeController",
- function ($scope) {
-
- var vm = this;
-
- // The prevalues setting is a string array in order: Min, Max, Step, Default.
- var min = parseFloat($scope.setting.prevalues[0]);
- var max = parseFloat($scope.setting.prevalues[1]);
- var step = parseFloat($scope.setting.prevalues[2]);
- var defaultValue = parseFloat($scope.setting.prevalues[3]);
- var stepDecimalPlaces = getDecimalPlaces(step);
-
- // Set the provided default value.
- if (!$scope.setting.value) {
- $scope.setting.value = defaultValue;
- }
-
- // Ensure we have a number.
- vm.value = parseFloat($scope.setting.value);
-
- vm.sliderOptions = {
- start: [vm.value],
- step: step,
- tooltips: [true],
- format: {
- to: function (value) {
- return value.toFixed(stepDecimalPlaces);
- },
- from: function (value) {
- return Number(value);
- }
- },
- range: {
- min: min,
- max: max,
- },
- pips: {
- mode: "steps",
- density: 100,
- format: {
- to: function (value) {
- return value.toFixed(stepDecimalPlaces);
- },
- from: function (value) {
- return Number(value);
- }
- },
- }
- };
-
- function getDecimalPlaces(value) {
- // Hat-tip: https://stackoverflow.com/a/17369245/489433
- if (Math.floor(value) === value) {
- return 0;
- }
-
- return value.toString().split(".")[1].length || 0;
- }
-
- vm.change = function (values) {
- // Convert it back to a string anytime the range slider value changed.
- // We're only supporting a single value, so as value provided is an array, we just take the first value.
- $scope.setting.value = values[0].toString();
- }
-
- });
-
-angular.module("umbraco").controller("UmbracoForms.SettingTypes.StandardFieldMapperController",
- function ($scope) {
-
- function init() {
-
- if (!$scope.setting.value) {
- $scope.mappings = [];
- } else {
- $scope.mappings = JSON.parse($scope.setting.value);
- }
-
- // Add standard mappings. We could add more to these after the intial release, so will make sure to
- // check each one to see if exists from the saved setting value.
- // Should include all defined in Umbraco.Forms.Core.Providers.Models.StandardFieldMapping
- var hasMapping = function (mappings, fieldName) {
- return mappings.filter(function (e) { return e.field === fieldName; }).length > 0;
- };
-
- var ensureDefaultMapping = function (mappings, fieldName) {
- if (!hasMapping($scope.mappings, fieldName)) {
- mappings.push({
- field: fieldName
- });
- }
- };
-
- ensureDefaultMapping($scope.mappings, "FormId");
- ensureDefaultMapping($scope.mappings, "FormName");
- ensureDefaultMapping($scope.mappings, "PageUrl");
- ensureDefaultMapping($scope.mappings, "SubmissionDate");
- }
-
- $scope.friendlyName = function (field) {
- switch (field) {
- case "FormId":
- return "Form ID";
- case "FormName":
- return "Form name";
- case "PageUrl":
- return "Page URL";
- case "SubmissionDate":
- return "Submission date/time";
- default:
- return field;
- }
- }
-
- $scope.toggleInclude = function (mapping) {
- mapping.include = !mapping.include;
- if (mapping.include) {
- mapping.keyName = mapping.field;
- } else {
- mapping.keyName = "";
- }
- $scope.setting.value = JSON.stringify($scope.mappings);
- };
-
- $scope.stringifyValue = function () {
- $scope.setting.value = JSON.stringify($scope.mappings);
- };
-
- init();
-
- });
-
-angular.module("umbraco")
- .controller("UmbracoForms.Dashboards.FormsController",
- function ($scope, $location, $cookies, formResource, licensingResource, updatesResource, notificationsService, userService, securityResource, recordResource, localizationService) {
-
- var vm = this;
-
- vm.isLoading = true;
-
- vm.overlay = {
- show: false,
- };
-
- localizationService.localizeMany(
- [
- "formsDashboard_installOverlayTitle",
- "formsDashboard_installOverlayDescription"]
- ).then(function (labels) {
- vm.overlay.title = labels[0];
- vm.overlay.description = labels[1];
- });
-
- var packageInstall = $cookies.get("umbPackageInstallId");
-
- if (packageInstall) {
- vm.overlay.show = true;
- $cookies.put("umbPackageInstallId", "");
- }
-
- //Default for canManageForms is false
- //Need a record in security to ensure user has access to edit/create forms
- vm.userCanManageForms = false;
-
- //Get Current User - To Check if the user Type is Admin
- userService.getCurrentUser().then(function (response) {
- vm.currentUser = response;
- vm.isAdminUser = response.userGroups.includes("admin");
-
- securityResource.getByUserId(vm.currentUser.id).then(function (response) {
- vm.userCanManageForms = response.data.userSecurity.manageForms;
- });
- });
-
- //if not initial install, but still do not have forms - display a message
- if (!vm.overlay.show) {
-
- //Check if we have any forms created yet - by chekcing number of items back from JSON response
- formResource.getOverView().then(function (response) {
- if (response.data.length === 0) {
- vm.overlay.show = true;
-
- localizationService.localizeMany(
- [
- "formsDashboard_emptyOverlayTitle",
- "formsDashboard_emptyOverlayDescription"]
- ).then(function (labels) {
- vm.overlay.title = labels[0];
- vm.overlay.description = labels[1];
- });
- }
- });
- }
-
- vm.getLicenses = function (config) {
-
- vm.loginError = false;
- vm.hasLicenses = undefined;
- vm.isLoading = true;
-
- licensingResource.getAvailableLicenses(config).then(function (response) {
- var licenses = response.data;
- var currentDomain = window.location.hostname;
-
- vm.hasLicenses = licenses.length > 0;
- _.each(licenses, function (lic) {
- if (lic.bindings && lic.bindings.indexOf(currentDomain) >= 0) {
- lic.currentDomainMatch = true;
- }
- });
-
- vm.configuredLicenses = _.sortBy(_.filter(licenses, function (license) { return license.configured; }), 'currentDomainMatch');
- vm.openLicenses = _.filter(licenses, function (license) { return license.configured === false; });
- vm.isLoading = false;
-
- }, function (err) {
- vm.loginError = true;
- vm.hasLicenses = undefined;
- vm.isLoading = false;
- });
-
- };
-
-
- vm.configure = function (config) {
- vm.isLoading = true;
- licensingResource.configureLicense(config).then(function (response) {
- vm.configuredLicenses.length = 0;
- vm.openLicenses.length = 0;
- vm.loadStatus();
- localizationService.localizeMany(["formsDashboard_licenseConfiguredNotificationTitle", "formsDashboard_licenseConfiguredNotificationMessage"]).then(function (labels) {
- notificationsService.success(labels[0], labels[1]);
- });
- });
- };
-
- vm.loadStatus = function () {
- licensingResource.getLicenseStatus().then(function (response) {
- vm.status = response.data;
- vm.isLoading = false;
- });
-
- updatesResource.getUpdateStatus().then(function (response) {
- vm.version = response.data;
- });
-
- updatesResource.getVersion().then(function (response) {
- vm.currentVersion = response.data;
- });
-
- updatesResource.getSavePlainTextPasswordsConfiguration().then(function (response) {
- vm.savePlainTextPasswords = response.data.toString() === "true";
- });
-
-
- };
-
- //TODO: Can this die/go away?!
- vm.upgrade = function () {
- //Let's triple check the user is of the userType Admin
- if (!$scope.isAdminUser) {
- //The user is not an admin & should have not hit this method but if they hack the UI they could potentially see the UI perhaps?
- localizationService.localizeMany(["formsDashboard_insufficientPermissionsError", "formsDashboard_insufficientPermissionsUpgradeMessage"]).then(function (labels) {
- notificationsService.success(labels[0], labels[1]);
- });
- return;
- }
-
- vm.installing = true;
- updatesResource.installLatest($scope.version.remoteVersion).then(function (response) {
- window.location.reload();
- }, function (reason) {
- //Most likely the 403 Unauthorised back from server side
- //The error is caught already & shows a notification so need to do it here
- //But stop the loading bar from spining forever
- vm.installing = false;
- });
- };
-
-
- vm.create = function () {
-
- //Let's triple check the user is of the userType Admin
- if (!vm.userCanManageForms) {
- //The user is not an admin & should have not hit this method but if they hack the UI they could potentially see the UI perhaps?
- localizationService.localizeMany(["formsDashboard_insufficientPermissionsError", "formsDashboard_insufficientPermissionsMessage"]).then(function (labels) {
- notificationsService.success(labels[0], labels[1]);
- });
- return;
- }
-
- $location.url("forms/Form/edit/-1?template=&create=true");
- };
-
-
- vm.configuration = { domain: window.location.hostname };
- vm.loadStatus();
-
-
- /////////////////////
-
- vm.initialFormsLimit = 4;
- vm.formsLimit = 4; //Show top 4 by default
-
- vm.hasUnrestrictedLicense = function (status) {
- return status &&
- status.licenseLimitations &&
- status.licenseLimitations.includes("*not* associated with any ips or domains");
- };
-
- vm.displayLicensedDomains = function (status) {
- if (status && status.validDomains && status.validDomains.length > 0) {
- return ("" +
- status.validDomains
- .split("|")
- .join(" ") +
- " ").replace(" ", "");
- }
-
- return "";
- };
-
- vm.showMore = function () {
- var incrementLimitBy = 8;
- vm.formsLimit = vm.formsLimit + incrementLimitBy;
- getRecordCounts();
- };
-
- function getRecordCounts() {
- _.each(vm.forms, function (form, index) {
-
- // Only get record counts for forms that are a) visible and b) already populated.
- if (index >= vm.formsLimit || form.gotEntries) {
- return;
- }
-
- var filter = { form: form.id };
-
- recordResource.getRecordsCount(filter).then(function (response) {
- form.entries = response.data.count;
- form.gotEntries = true;
- });
- });
- }
-
- // Get all forms and populate visible ones with recorcd counts.
- formResource.getOverView().then(function (response) {
- vm.forms = response.data;
- getRecordCounts();
- });
-
- });
-
-angular.module("umbraco")
-.controller("UmbracoForms.Editors.DataSource.DeleteController",
- function ($scope, dataSourceResource, navigationService, treeService) {
- $scope.delete = function (id) {
- dataSourceResource.deleteByGuid(id).then(function () {
-
- treeService.removeNode($scope.currentNode);
- navigationService.hideNavigation();
-
- });
-
- };
- $scope.cancelDelete = function () {
- navigationService.hideNavigation();
- };
- });
-angular.module("umbraco").controller("UmbracoForms.Editors.DataSource.EditController",
- function ($scope, $routeParams, dataSourceResource, editorState, notificationsService, editorService, navigationService, formHelper, userService, securityResource, localizationService, providerLocalizationHelper) {
-
- //On load/init of 'editing' a prevalue source then
- //Let's check & get the current user's form security
- var currentUserId = null;
-
- userService.getCurrentUser().then(function (response) {
- currentUserId = response.id;
-
- //Now we can make a call to form securityResource
- securityResource.getByUserId(currentUserId).then(function (response) {
- $scope.security = response.data;
-
- //Check if we have access to current form OR manage forms has been disabled
- if (!$scope.security.userSecurity.manageDataSources) {
-
- //Show error notification
- localizationService.localizeMany(["formPermissions_accessDeniedTitle", "formDataSources_accessDeniedMessage"]).then(function (labels) {
- notificationsService.error(labels[0], labels[1]);
- });
-
- //Resync tree so that it's removed & hides
- navigationService.syncTree({ tree: "datasource", path: ['-1'], forceReload: true, activate: false }).then(function (response) {
-
- //Response object contains node object & activate bool
- //Can then reload the root node -1 for this tree 'Forms Folder'
- navigationService.reloadNode(response.node);
- });
-
- //Don't need to wire anything else up
- return;
- }
- });
- });
-
- if ($routeParams.create) {
- //we are creating so get an empty data type item
- dataSourceResource.getScaffold().then(function (response) {
- $scope.loaded = true;
- $scope.dataSource = response.data;
-
- dataSourceResource.getAllDataSourceTypesWithSettings()
- .then(function (resp) {
- $scope.types = resp.data;
- localizationService.localizeMany(providerLocalizationHelper.getLocalizationKeys("formProviderDataSources", $scope.types)).then(function (labels) {
- providerLocalizationHelper.applyLocalizationLabels($scope.types, labels);
- });
- });
-
- //set a shared state
- editorState.set($scope.form);
- });
- }
- else {
- //we are editing so get the content item from the server
- dataSourceResource.getByGuid($routeParams.id)
- .then(function (response) {
-
- $scope.dataSource = response.data;
-
- dataSourceResource.getAllDataSourceTypesWithSettings()
- .then(function (resp) {
- $scope.types = resp.data;
- localizationService.localizeMany(providerLocalizationHelper.getLocalizationKeys("formProviderDataSources", $scope.types)).then(function (labels) {
- providerLocalizationHelper.applyLocalizationLabels($scope.types, labels);
- setTypeAndSettings();
- $scope.loaded = true;
- });
- });
-
- //set a shared state
- editorState.set($scope.dataSource);
- });
- }
-
- $scope.setType = function () {
- setTypeAndSettings();
- };
-
- $scope.save = function () {
- if (formHelper.submitForm({ scope: $scope })) {
-
- //set settings
- $scope.dataSource.settings = {};
- if ($scope.dataSource.$type) {
- angular.forEach($scope.dataSource.$type.settings, function (setting) {
- var key = setting.alias;
- var value = setting.value;
- $scope.dataSource.settings[key] = value;
-
- });
- }
-
- //validate settings
- localizationService.localizeMany([
- "formDataSources_saveSuccessTitle",
- "formDataSources_saveErrorTitle",
- "formMessages_saveErrorMessage"]).then(function (labels) {
- dataSourceResource.validateSettings($scope.dataSource)
- .then(function (response) {
-
- $scope.errors = response.data;
-
- if ($scope.errors.length > 0) {
- $scope.dataSource.valid = false;
- angular.forEach($scope.errors, function (error) {
-
- notificationsService.error(labels[1], error.Message);
-
- });
- } else {
- //save
- dataSourceResource.save($scope.dataSource)
- .then(function (response) {
-
- $scope.dataSource = response.data;
- //set a shared state
- editorState.set($scope.dataSource);
- setTypeAndSettings();
- navigationService.syncTree({ tree: "datasource", path: [String($scope.dataSource.id)], forceReload: true });
- notificationsService.success(labels[0], "");
- $scope.dataSource.valid = true;
- $scope.dataSourceForm.$dirty = false;
- }, function (err) {
- notificationsService.error(labels[1], "");
- });
- }
- }, function (err) {
- notificationsService.error(labels[1], labels[2]);
- });
- });
- }
- };
-
- $scope.showWizard = function () {
- var dataSourcesSettings = {
- view: "/App_Plugins/UmbracoForms/backoffice/Datasource/dialogs/wizard.html",
- dataSourceId: $scope.dataSource.id,
- size: 'medium'
- };
-
- editorService.open(dataSourcesSettings);
- };
-
- var setTypeAndSettings = function () {
- $scope.dataSource.$type = _.where($scope.types, { id: $scope.dataSource.formDataSourceTypeId })[0];
-
- //set settings
- angular.forEach($scope.dataSource.settings, function (setting) {
- for (var key in $scope.dataSource.settings) {
- if ($scope.dataSource.settings.hasOwnProperty(key)) {
- if (_.where($scope.dataSource.$type.settings, { alias: key }).length > 0) {
- _.where($scope.dataSource.$type.settings, { alias: key })[0].value = $scope.dataSource.settings[key];
- }
-
- }
- }
- });
- };
-
-
-
- });
-
-angular.module("umbraco")
-.controller("UmbracoForms.Editors.DataSource.WizardController",
- function ($scope, $routeParams, dataSourceWizardResource, navigationService, notificationsService, editorService) {
-
- $scope.currentStep = 1;
- dataSourceWizardResource.getScaffold($scope.model.dataSourceId).then(function (response) {
-
- $scope.wizard = response.data;
-
- $scope.hasPrimaryKeys = $scope.wizard.mappings.length != _.where($scope.wizard.mappings, { prevalueKeyField: null }).length;
-
- dataSourceWizardResource.getAllFieldTypes()
- .then(function (resp) {
- $scope.fieldtypes = resp.data;
- $scope.ready = true;
- });
- });
-
-
- $scope.createForm = function() {
-
- dataSourceWizardResource.createForm($scope.wizard)
- .then(function (resp) {
- editorService.closeAll();
- notificationsService.success("Form created", "");
- });
- };
-
-
- $scope.cancel = function() {
- editorService.closeAll();
- };
-
- $scope.gotoStep = function (step) {
- $scope.currentStep = step;
- }
-
- $scope.gotoThirdStep = function() {
- if ($scope.hasPrimaryKeys) {
- $scope.currentStep = 3;
- } else {
- $scope.currentStep = 4;
- }
- }
- $scope.goBackToThirdStep = function() {
- if ($scope.hasPrimaryKeys) {
- $scope.currentStep = 3;
- } else {
- $scope.currentStep = 2;
- }
- }
- });
-angular.module("umbraco")
- .controller("UmbracoForms.Editors.Form.CopyController",
- function ($scope, formResource, navigationService, localizationService, utilityService) {
-
- $scope.dialogTreeApi = {};
- $scope.title = "";
- $scope.copiedForm = {
- name: "",
- copyWorkflows: false,
- copyToNewFolder: false,
- copyToFolder: null,
- };
-
- localizationService.localize("formCopy_title", [$scope.currentNode.name]).then(function (val) {
- $scope.title = utilityService.hexHtmlToString(val);
- });
-
- function parseFolderId(id) {
- return id.substring("folder-".length);
- }
-
- //Copy Function run from button on click
- $scope.copyForm = function (formId) {
-
- var copyToFolderId = null;
- if ($scope.copiedForm.copyToNewFolder) {
- copyToFolderId = $scope.copiedForm.copyToFolder.id == "-1"
- ? "-1"
- : parseFolderId($scope.copiedForm.copyToFolder.id);
- }
-
- //Perform copy in formResource
- formResource.copy(formId, $scope.copiedForm.name, $scope.copiedForm.copyWorkflows, copyToFolderId).then(function (response) {
-
- //Reload the tree
- navigationService.syncTree({ tree: "form", path: response.data.path.split(","), forceReload: true, activate: false });
-
- //Once 200 OK then reload tree & hide copy dialog navigation
- navigationService.hideNavigation();
- });
- };
-
- function nodeSelectHandler(args) {
- args.event.preventDefault();
- args.event.stopPropagation();
-
- if ($scope.copiedForm.copyToFolder) {
- //un-select if there's a current one selected
- $scope.copiedForm.copyToFolder.selected = false;
- }
-
- $scope.copiedForm.copyToFolder = args.node;
- $scope.copiedForm.copyToFolder.selected = true;
- }
-
- $scope.onTreeInit = function () {
- $scope.dialogTreeApi.callbacks.treeNodeSelect(nodeSelectHandler);
- };
-
- //Cancel button - closes dialog
- $scope.cancelCopy = function () {
- navigationService.hideNavigation();
- }
- });
-
-angular.module("umbraco")
- .controller("UmbracoForms.Editors.Form.CreateController",
- function ($scope, $location, formResource, navigationService, formHelper, formsValidationService) {
- $scope.model = {
- folderName: "",
- creatingFolder: false
- };
-
- var node = $scope.currentNode;
-
- formResource.getAllTemplates().then(function (response) {
- $scope.model.formTemplates = response.data;
- });
-
- function navigateToCreateForm(templateAlias) {
- $location
- .path("/forms/Form/edit/" + $scope.currentNode.id)
- .search("create", "true")
- .search("template", templateAlias);
- navigationService.hideNavigation();
- }
-
- $scope.createEmptyForm = function () {
- navigateToCreateForm("");
- };
-
- $scope.createTemplateForm = function (templateAlias) {
- navigateToCreateForm(templateAlias);
- };
-
- $scope.showCreateFolderForm = function () {
- $scope.model.creatingFolder = true;
- };
-
- $scope.createFolder = function () {
- $scope.model.errorMessage = null;
- if (formHelper.submitForm({ scope: $scope, formCtrl: $scope.createFolderForm })) {
-
- formResource.createFolder(node.id, $scope.model.folderName).then(function (response) {
-
- navigationService.hideMenu();
-
- var folder = response.data;
-
- var currPath = node.path ? node.path : "-1";
-
- navigationService.syncTree({
- tree: "form",
- path: (currPath + ",folder-" + folder.id).split(','),
- forceReload: true,
- activate: true
- });
-
- formHelper.resetForm({ scope: $scope, formCtrl: $scope.createFolderForm });
-
- }, function (err) {
-
- formHelper.resetForm({ scope: $scope, formCtrl: $scope.createFolderForm, hasErrors: true });
- $scope.model.errorMessage = formsValidationService.getErrorMessageFromExceptionResponse(err);
-
- });
- }
- };
-
- $scope.hideDialog = function () {
- navigationService.hideDialog(true);
- };
- });
-
-(function () {
- "use strict";
-
- function Controller($scope, formResource, navigationService, notificationsService, treeService, localizationService, utilityService) {
-
- var vm = this;
- vm.buttonState = "init";
-
- vm.performDelete = performDelete;
- vm.cancelDelete = cancelDelete;
-
- var folderIdPrefix = "folder-";
- vm.deletingFolder = $scope.currentNode.id.startsWith(folderIdPrefix);
-
- // Forms can always be deleted...
- vm.canDelete = !vm.deletingFolder;
-
- vm.title = "";
- localizationService.localize("formDelete_title", [vm.deletingFolder ? "folder" : "form", $scope.currentNode.name]).then(function (val) {
- vm.title = utilityService.hexHtmlToString(val);
- });
-
- function parseFolderId(id) {
- return id.substring(folderIdPrefix.length);
- }
-
- // ...but folders can only be deleted if empty (don't want to risk a mistaken click wiping out a tonne of records).
- if (vm.deletingFolder) {
- formResource.isFolderEmpty(parseFolderId($scope.currentNode.id)).then(function (result) {
- vm.canDelete = result.data;
- });
- }
-
- function performDelete(id) {
-
- vm.buttonState = "busy";
-
- localizationService.localizeMany(
- [
- "formDelete_successMessageForForm",
- "formDelete_failedMessageForForm",
- "formDelete_successMessageForFolder",
- "formDelete_failedMessageForFolder"])
- .then(function (labels) {
- if (vm.deletingFolder) {
- formResource.deleteFolderByGuid(parseFolderId(id)).then(function () {
- vm.buttonState = "success";
- treeService.removeNode($scope.currentNode);
- navigationService.hideNavigation();
-
- notificationsService.success(labels[2]);
- }, function (err) {
- vm.buttonState = "error";
- notificationsService.error(labels[3], err.data.Message);
- });
-
- } else {
- formResource.deleteByGuid(id).then(function () {
- vm.buttonState = "success";
- treeService.removeNode($scope.currentNode);
- navigationService.hideNavigation();
-
- notificationsService.success(labels[0]);
- }, function (err) {
- vm.buttonState = "error";
- notificationsService.error(labels[1], err.data.Message);
- });
- }
- });
- }
-
- function cancelDelete() {
- navigationService.hideNavigation();
- };
- }
-
- angular.module("umbraco").controller("UmbracoForms.Editors.Form.DeleteController", Controller);
-
-})();
-
-angular.module("umbraco").controller("UmbracoForms.Editors.Form.EditController",
-
- function ($scope, $routeParams, formResource, editorState, editorService, formService, notificationsService, contentEditingHelper, formHelper, navigationService, userService, securityResource, localizationService, providerLocalizationHelper) {
-
-
- //On load/init of 'editing' a form then
- //Let's check & get the current user's form security
- var currentUserId = null;
- var currentFormSecurity = null;
-
- $scope.page = {
- loading: true
- };
- $scope.page.contentApps = [];
-
- //By default set to have access (in case we do not find the current user's per individual form security item)
- $scope.hasAccessToCurrentForm = true;
-
- $scope.displayEditor = true;
-
- function createAndLocalizeApps() {
- localizationService.localizeMany(["general_design", "general_settings"]).then(function (labels) {
- // Using unshift and reversing order to default apps appear first before any custom ones that may have been loaded for the form.
- $scope.page.contentApps.unshift(
- {
- "name": labels[1],
- "alias": "settings",
- "icon": "icon-settings",
- "view": "/App_Plugins/UmbracoForms/backoffice/Form/views/settings/settings.html",
- "active": false
- }
- );
- $scope.page.contentApps.unshift(
- {
- "name": labels[0],
- "alias": "design",
- "icon": "icon-document-dashed-line",
- "view": "/App_Plugins/UmbracoForms/backoffice/Form/views/design/design.html",
- "active": true
- }
- );
- });
- }
-
- userService.getCurrentUser().then(function (response) {
- currentUserId = response.id;
-
- //Now we can make a call to form securityResource
- securityResource.getByUserId(currentUserId).then(function (response) {
- $scope.security = response.data;
-
- //Use _underscore.js to find a single item in the JSON array formsSecurity
- //where the FORM guid matches the one we are currently editing (if underscore does not find an item it returns an empty array)
- //As _.findWhere not in Umb .1.6 using _.where() that lists multiple matches - checking that we have only item in the array (ie one match)
- currentFormSecurity = _.where(response.data.formsSecurity, { Form: $routeParams.id });
-
- if (currentFormSecurity.length === 1) {
- //Check & set if we have access to the form
- //if we have no entry in the JSON array by default its set to true (so won't prevent)
- $scope.hasAccessToCurrentForm = currentFormSecurity[0].HasAccess;
- }
-
- //Check if we have access to current form OR manage forms has been disabled
- if (!$scope.hasAccessToCurrentForm || !$scope.security.userSecurity.manageForms) {
-
- //Show error notification
- localizationService.localizeMany(["formPermissions_accessDeniedTitle", "formEdit_accessDeniedMessage"]).then(function (labels) {
- notificationsService.success(labels[0], labels[1]);
- });
-
- //Resync tree so that it's removed & hides
- navigationService.syncTree({ tree: "form", path: ['-1'], forceReload: true, activate: false }).then(function (response) {
-
- //Response object contains node object & activate bool
- //Can then reload the root node -1 for this tree 'Forms Folder'
- navigationService.reloadNode(response.node);
- });
-
- //Don't need to wire anything else up
- return;
- }
- });
- });
-
- if ($routeParams.create) {
-
- //we are creating so get an empty data type item
- //formResource.getScaffold($routeParams.template)
- formResource.getScaffoldWithWorkflows($routeParams.template)
- .then(function (response) {
- $scope.form = response.data;
-
- //set a shared state
- editorState.set($scope.form);
-
- // Prepare default and custom content apps.
- $scope.page.contentApps = $scope.form.apps;
- createAndLocalizeApps();
-
- $scope.page.loading = false;
- });
-
- } else {
-
- $scope.workflowsUrl = "#/forms/form/workflows/" + $routeParams.id;
- $scope.entriesUrl = "#/forms/form/entries/" + $routeParams.id;
-
- //we are editing so get the content item from the server
- formResource.getWithWorkflowsByGuid($routeParams.id)
- .then(function (response) {
-
- $scope.form = response.data;
-
- localizationService.localizeMany(providerLocalizationHelper.getLocalizationKeysForFormWorkflows($scope.form.formWorkflows)).then(function (labels) {
- providerLocalizationHelper.applyLocalizationLabelsToFormWorkflows($scope.form.formWorkflows, labels);
-
- $scope.saved = true;
-
- //As we are editing an item we can highlight it in the tree
- navigationService.syncTree({ tree: "form", path: response.data.path.split(','), forceReload: false });
-
- // this should be removed in next major version
- angular.forEach($scope.form.pages, function (page) {
- angular.forEach(page.fieldSets, function (fieldSet) {
- angular.forEach(fieldSet.containers, function (container) {
- angular.forEach(container.fields, function (field) {
- field.removePrevalueEditor = true;
- });
- });
- });
- });
-
- //set a shared state
- editorState.set($scope.form);
-
- // Prepare default and custom content apps.
- $scope.page.contentApps = $scope.form.apps;
- createAndLocalizeApps();
-
- $scope.page.loading = false;
-
- });
- }, function (reason) {
- //Includes ExceptionMessage, StackTrace etc from the WebAPI
- var jsonErrorResponse = reason.data;
-
- //Show notification message, a sticky Error message
- localizationService.localize("formEdit_unableToLoadForm").then(function (val) {
- notificationsService.add({ headline: val, message: jsonErrorResponse.ExceptionMessage, type: 'error', sticky: true });
- });
-
- //Hide the entire form UI
- $scope.displayEditor = false;
- });
-
-
- }
-
- $scope.editForm = function (form, section) {
- editorService.open(
- {
- template: "/App_Plugins/UmbracoForms/backoffice/Form/dialogs/formsettings.html",
- form: form,
- section: section,
- page: $scope.currentPage
- });
- };
-
- function parseFolderId(id) {
- return id.substring("folder-".length);
- }
-
- $scope.save = function () {
- if (formHelper.submitForm({ scope: $scope })) {
-
- $scope.page.saveButtonState = "busy";
-
- //make sure we set correct widths on all containers
- formService.syncContainerWidths($scope.form);
-
- //if creating a new form, assign the parent folder
- if ($routeParams.create && $routeParams.id != "-1") {
- $scope.form.folderId = parseFolderId($routeParams.id);
- }
-
- formResource.saveWithWorkflows($scope.form).then(function (response) {
- formHelper.resetForm({ scope: $scope });
-
- contentEditingHelper.handleSuccessfulSave({
- scope: $scope,
- savedContent: response.data
- });
-
- $scope.ready = true;
-
- //set a shared state
- editorState.set($scope.form);
-
- $scope.page.saveButtonState = "success";
- navigationService.syncTree({ tree: "form", path: response.data.path.split(','), forceReload: true });
-
- localizationService.localize("formEdit_formSaved").then(function (val) {
- notificationsService.success(val, "");
- });
-
-
- }, function (err) {
-
- formHelper.handleError(err);
-
- $scope.page.saveButtonState = "error";
-
- });
- }
-
- };
-
-
- });
-
-angular.module("umbraco").controller("UmbracoForms.Editors.Form.EntriesController",
- function ($scope, $routeParams, recordResource, formResource, editorService, userService, securityResource, notificationsService, navigationService, overlayService, localizationService, utilityService) {
-
- // On load/init of 'editing' a form then
- // Let's check & get the current user's form security
- var currentUserId = null;
- var currentFormSecurity = null;
-
- var vm = this;
- vm.pagination = {
- pageNumber: 1,
- totalPages: 1
- };
- vm.allIsChecked = false;
- vm.selectedEntry = {};
- vm.showEntryDetails = false;
- vm.userLocale = "";
-
- vm.nextPage = nextPage;
- vm.prevPage = prevPage;
- vm.goToPageNumber = goToPageNumber;
- vm.viewEntryDetails = viewEntryDetails;
- vm.closeEntryDetails = closeEntryDetails;
- vm.nextEntryDetails = nextEntryDetails;
- vm.prevEntryDetails = prevEntryDetails;
- vm.datePickerChange = datePickerChange;
- vm.toggleRecordState = toggleRecordState;
- vm.canEditSensitiveData = false;
-
- vm.keyboardShortcutsOverview = [];
-
- localizationService.localizeMany([
- "formEntries_entryDetails",
- "formEntries_nextEntry",
- "formEntries_previousEntry",
- "formEntries_closeDetails"]).then(function (labels) {
- vm.keyboardShortcutsOverview.push({
- "name": labels[0],
- "shortcuts": [
- {
- "description": labels[1],
- "keys": [
- {
- "key": "→"
- }
- ]
- },
- {
- "description": labels[2],
- "keys": [
- {
- "key": "←"
- }
- ]
- },
- {
- "description": labels[3],
- "keys": [
- {
- "key": "esc"
- }
- ]
- }
- ]
- });
- });
-
- vm.title = "";
-
- // By default set to have access (in case we do not find the current user's per individual form security item)
- $scope.hasAccessToCurrentForm = true;
-
- userService.getCurrentUser().then(function (response) {
- currentUserId = response.id;
- vm.userLocale = response.locale;
-
- // Set the API controller response on the Angular ViewModel
- vm.canEditSensitiveData = response.userGroups.indexOf("sensitiveData") !== -1;
-
- // Now we can make a call to form securityResource
- securityResource.getByUserId(currentUserId).then(function (response) {
- $scope.security = response.data;
-
- // Use _underscore.js to find a single item in the JSON array formsSecurity
- // where the FORM guid matches the one we are currently editing (if underscore does not find an item it returns undefinied)
- currentFormSecurity = _.where(response.data.formsSecurity, { Form: $routeParams.id });
-
- if (currentFormSecurity.length === 1) {
- // Check & set if we have access to the form
- // if we have no entry in the JSON array by default its set to true (so won't prevent)
- $scope.hasAccessToCurrentForm = currentFormSecurity[0].HasAccess;
- }
-
- // Check if we have access to current form OR manage forms has been disabled
- if (!$scope.hasAccessToCurrentForm || !$scope.security.userSecurity.manageForms) {
-
- // Show error notification
- localizationService.localizeMany(["formPermissions_accessDeniedTitle", "formEntries_accessDeniedMessage"]).then(function (labels) {
- notificationsService.success(labels[0], labels[1]);
- });
-
- // Resync tree so that it's removed & hides
- navigationService.syncTree({ tree: "form", path: ['-1'], forceReload: true, activate: false }).then(function (response) {
-
- // Response object contains node object & activate bool
- // Can then reload the root node -1 for this tree 'Forms Folder'
- navigationService.reloadNode(response.node);
- });
-
- // Don't need to wire anything else up
- return;
- }
- });
- });
-
-
- formResource.getWithWorkflowsByGuid($routeParams.id) // We could call getByGuid here, as we don't need the workflows.
- // But this request gets us a FormDesign object, which has the path populated.
- .then(function (response) {
- $scope.form = response.data;
- $scope.loaded = true;
-
- localizationService.localize("formEntries_title", [$scope.form.name]).then(function (val) {
- vm.title = utilityService.hexHtmlToString(val);
- });
-
- // As we are editing an item we can highlight it in the tree.
- // We get back the path to the form, so we need to add one more element to the end which is the id of the "entries" node, made up of the
- // form's Id suffixed with "_entries".
- var path = $scope.form.path.split(',');
- path.push(path[path.length - 1] + "_entries");
- navigationService.syncTree({ tree: "form", path: path, forceReload: false });
-
- // Populate the available recordset actions (we need to do this after retrieving the form, so
- // we can filter out those not appropriate for forms that are automatically approved).
- recordResource.getRecordSetActions().then(function (response) {
- $scope.recordSetActions = response.data.filter(function (action) {
- return $scope.form.manualApproval || action.isAvailableForApprovedRecords;
- });
- });
-
- });
-
- $scope.states = [
- {
- "name": "Approved",
- "isChecked": true
- },
- {
- "name": "Submitted",
- "isChecked": true
- }
- ];
-
- $scope.filter = {
- startIndex: 1, // Page Number
- length: 20, // No per page
- form: $routeParams.id,
- sortBy: "created",
- sortOrder: "descending",
- states: ["Approved", "Submitted"],
- localTimeOffset: new Date().getTimezoneOffset()
- };
-
- $scope.records = [];
-
- // Default value
- $scope.loading = false;
-
- $scope.toggleRecordStateSelection = function (recordState) {
- var idx = $scope.filter.states.indexOf(recordState);
-
- // is currently selected
- if (idx > -1) {
- $scope.filter.states.splice(idx, 1);
- }
-
- // is newly selected
- else {
- $scope.filter.states.push(recordState);
- }
- };
-
- $scope.hiddenFields = [2];
- $scope.toggleSelection = function toggleSelection(field) {
- var idx = $scope.hiddenFields.indexOf(field);
-
- // is currently selected
- if (idx > -1) {
- $scope.hiddenFields.splice(idx, 1);
- } else {
- $scope.hiddenFields.push(field);
- }
- };
-
-
- $scope.edit = function (schema) {
- editorService.open(
- {
- view: "/App_Plugins/UmbracoForms/backoffice/Form/dialogs/entriessettings.html",
- schema: schema,
- toggle: $scope.toggleSelection,
- hiddenFields: $scope.hiddenFields,
- filter: $scope.filter,
- size: 'medium'
- });
- };
-
- // $scope.pagination = [];
-
-
- function nextPage(pageNumber) {
- $scope.filter.startIndex++;
- $scope.loadRecords($scope.filter);
- }
-
- function prevPage(pageNumber) {
- $scope.filter.startIndex--;
- $scope.loadRecords($scope.filter);
- }
-
- function goToPageNumber(pageNumber) {
- // do magic here
- $scope.filter.startIndex = pageNumber;
- $scope.loadRecords($scope.filter);
- }
-
- function viewEntryDetails(schema, entry, event) {
-
- vm.selectedEntry = {};
-
- var entryIndex = $scope.records.results.indexOf(entry);
- // get the count of the entry across the pagination: entries pr page * page index + entry index
- var entryCount = $scope.filter.length * ($scope.filter.startIndex - 1) + (entryIndex + 1);
-
- vm.selectedEntry = entry;
- vm.selectedEntry.index = entryIndex;
- vm.selectedEntry.entryCount = entryCount;
- vm.selectedEntry.details = [];
-
- if (schema && entry) {
- for (var index = 0; index < schema.length; index++) {
- var schemaItem = schema[index];
-
- // Select the value from the entry.fields array
- var valueItem = entry.fields[index];
-
- // Create new object to push into details above (so our angular view is much neater)
- var itemToPush = {
- name: schemaItem.name,
- value: valueItem,
- view: schemaItem.view[0] === '~' || schemaItem.view[0] === '/'
- ? schemaItem.view.replace('~/', '/')
- : '/App_Plugins/UmbracoForms/backoffice/Common/RenderTypes/' + schemaItem.view + '.html',
- containsSensitiveData: schemaItem.containsSensitiveData
- };
-
- var excludeItems = ["member", "state", "created", "updated", "recordId"];
-
- if (excludeItems.indexOf(schemaItem.id) === -1) {
- vm.selectedEntry.details.push(itemToPush);
- }
-
- }
- }
-
- localizationService.localize("formEntries_selectedEntryPaging", [vm.selectedEntry.entryCount, $scope.records.totalNumberOfResults]).then(function (val) {
- vm.selectedEntryPaging = val;
- });
-
- vm.showEntryDetails = true;
-
- if (event) {
- event.stopPropagation();
- }
- }
-
- function closeEntryDetails() {
- vm.selectedEntry = {};
- vm.showEntryDetails = false;
- }
-
- function nextEntryDetails() {
-
- // get the current index and plus 1 to get the next item in the array
- var nextEntryIndex = vm.selectedEntry.index + 1;
- var entriesCount = $scope.records.results.length;
- var currentPage = $scope.filter.startIndex;
- var totalNumberOfPages = $scope.records.totalNumberOfPages;
-
- if (nextEntryIndex < entriesCount) {
-
- var entry = $scope.records.results[nextEntryIndex];
- viewEntryDetails($scope.records.schema, entry);
-
- } else if (totalNumberOfPages > 1 && currentPage < totalNumberOfPages) {
-
- $scope.filter.startIndex++;
- vm.pagination.pageNumber++;
-
- recordResource.getRecords($scope.filter).then(function (response) {
- $scope.records = response.data;
- $scope.allIsChecked = ($scope.selectedRows.length >= $scope.records.results.length);
- vm.pagination.totalPages = response.data.totalNumberOfPages;
-
- limitRecordFields($scope.records);
-
- // get the first item from the new collection
- var entry = $scope.records.results[0];
- viewEntryDetails($scope.records.schema, entry);
-
- });
-
- }
-
- }
-
- function prevEntryDetails() {
-
-
- var prevEntryIndex = vm.selectedEntry.index - 1;
- var totalNumberOfPages = $scope.records.totalNumberOfPages;
- var currentPage = $scope.filter.startIndex;
-
- if (vm.selectedEntry.index > 0) {
-
- var entry = $scope.records.results[prevEntryIndex];
- viewEntryDetails($scope.records.schema, entry);
-
- } else if (totalNumberOfPages > 1 && currentPage !== 1) {
-
- $scope.filter.startIndex--;
- vm.pagination.pageNumber--;
-
- recordResource.getRecords($scope.filter).then(function (response) {
- $scope.records = response.data;
- $scope.allIsChecked = ($scope.selectedRows.length >= $scope.records.results.length);
- vm.pagination.totalPages = response.data.totalNumberOfPages;
-
- limitRecordFields($scope.records);
-
- // get the last item from the new collection
- var lastEntryIndex = $scope.records.results.length - 1;
- var entry = $scope.records.results[lastEntryIndex];
- viewEntryDetails($scope.records.schema, entry);
-
- });
-
- }
- }
-
- function datePickerChange(dateRange) {
- $scope.filter.startDate = dateRange.startDate;
- $scope.filter.endDate = dateRange.endDate;
- $scope.filterChanged();
- }
-
- function toggleRecordState(recordState) {
- if (recordState.isChecked) {
- $scope.filter.states.push(recordState.name);
- } else {
- var index = $scope.filter.states.indexOf(recordState.name);
- if (index !== -1) {
- $scope.filter.states.splice(index, 1);
- }
- }
- $scope.filterChanged();
- }
-
- $scope.next = function () {
- $scope.filter.startIndex++;
- };
-
- $scope.prev = function () {
- $scope.filter.startIndex--;
- };
-
- $scope.goToPage = function (index) {
- $scope.filter.startIndex = index;
- };
-
-
- $scope.search = _.debounce(function (resetIndex) {
-
- // Set loading to true
- $scope.loading = true;
-
- $scope.reset(resetIndex);
-
- $scope.$apply(function () {
- recordResource.getRecords($scope.filter).then(function (response) {
- // Got results back - set loading to false]
- $scope.loading = false;
-
- $scope.records = response.data;
- vm.pagination.totalPages = response.data.totalNumberOfPages;
-
- limitRecordFields($scope.records);
-
- });
- });
-
-
- }, 300);
-
-
- $scope.filterChanged = function () {
- var resetIndex = true;
- $scope.search(resetIndex);
- };
-
- $scope.loadRecords = function (filter, append) {
-
- // Set loading to true
- $scope.loading = true;
-
- recordResource.getRecords(filter).then(function (response) {
- // Got response from server
- $scope.loading = false;
-
- if (append) {
- $scope.records = $scope.records.results.concat(response.data.results);
- } else {
- $scope.records = response.data;
- }
-
- $scope.allIsChecked = ($scope.selectedRows.length >= $scope.records.results.length);
-
- limitRecordFields($scope.records);
-
- vm.pagination.totalPages = response.data.totalNumberOfPages;
-
- });
- };
-
- $scope.loadRecords($scope.filter);
-
- function limitRecordFields(records) {
- // function to limit how many fields are
- // shown in the entries table
-
- var falseFromIndex = 2;
- var falseToIndex = records.schema.length - 5;
- var trueFalseArray = [];
-
- // make array of true/false (show the generic fields that are flagged to show, plus the first 3 fields from the form)
- angular.forEach(records.schema, function (schema, index) {
- if ((index <= falseFromIndex || index >= falseToIndex) && schema.showOnListingScreen) {
- trueFalseArray.push(true);
- } else {
- trueFalseArray.push(false);
- }
- });
-
- // set array for schema
- records.showSchemaArray = trueFalseArray;
-
- // set array for row fields
- angular.forEach(records.results, function (result) {
- result.showRecordsArray = trueFalseArray;
- });
- }
-
- $scope.reset = function (resetIndex) {
- $scope.selectedRows.length = 0;
- $scope.allIsChecked = false;
-
- if (resetIndex) {
- $scope.filter.startIndex = 1;
- }
-
- };
-
- $scope.clearSelection = function () {
- $scope.selectedRows.length = 0;
- vm.allIsChecked = false;
-
- for (var i = 0; i < $scope.records.results.length; i++) {
- var row = $scope.records.results[i];
- row.selected = false;
- }
- };
-
- $scope.more = function () {
- $scope.filter.startIndex++;
- $scope.loadRecords($scope.filter, true);
- };
-
- $scope.selectedRows = [];
-
- $scope.toggleRow = function (row) {
- row.selected = !row.selected;
- if (row.selected) {
- $scope.selectedRows.push(row.id);
- $scope.allIsChecked = ($scope.selectedRows.length >= $scope.records.results.length);
- } else {
- var i = $scope.selectedRows.indexOf(row.id);
- $scope.selectedRows.splice(i, 1);
- $scope.allIsChecked = false;
- }
-
- localizationService.localize("formEntries_selectedRowsDescription", [$scope.selectedRows.length, $scope.records.totalNumberOfResults]).then(function (val) {
- $scope.selectedRowsDescription = val;
- });
- };
-
- $scope.toggleRowLegacy = function (row) {
- if (row.selected) {
- $scope.selectedRows.push(row.id);
- $scope.allIsChecked = ($scope.selectedRows.length >= $scope.records.results.length);
- } else {
- var i = $scope.selectedRows.indexOf(row.id);
- $scope.selectedRows.splice(i, 1);
- $scope.allIsChecked = false;
- }
- };
-
- $scope.allIsChecked = false;
- $scope.toggleAllLegacy = function ($event) {
- var checkbox = $event.target;
- $scope.selectedRows.length = 0;
-
- for (var i = 0; i < $scope.records.results.length; i++) {
- var entity = $scope.records.results[i];
- entity.selected = checkbox.checked;
-
- if (checkbox.checked) {
- $scope.selectedRows.push(entity.id);
- }
- }
- };
-
- $scope.toggleAll = function () {
-
- var newValue = !$scope.allIsChecked;
-
- for (var i = 0; i < $scope.records.results.length; i++) {
- var entity = $scope.records.results[i];
-
- if (entity.selected !== newValue) {
- $scope.toggleRow(entity);
- }
-
- }
-
- };
-
- $scope.executeRecordSetAction = function (action) {
-
- // Get the data we need in order to send to the API Endpoint
- var model = {
- formId: $scope.form.id,
- recordKeys: $scope.selectedRows,
- actionId: action.id
- };
-
- var performAction = function () {
- $scope.recordSetActionExecuting = true;
- localizationService.localizeMany(["formEntries_executeCompleteTitle", "formEntries_executeSuccessMessage", "formEntries_executeErrorMessage"]).then(function (labels) {
- recordResource.executeRecordSetAction(model).then(function (response) {
- $scope.reset(true);
- $scope.loadRecords($scope.filter, false);
- $scope.recordSetActionExecuting = false;
- notificationsService.success(labels[0], labels[1].replace("%0%", action.name));
- }, function (err) {
- // Error Function - so get an error response from API
- notificationsService.error(
- labels[0],
- labels[2]
- .replace("%0%", action.name)
- .replace("%1%", err));
- });
- });
- };
-
- var presentConfirmation = function (confirmMessage) {
- var overlay = {
- view: "confirm",
- title: "Confirmation",
- content: confirmMessage,
- closeButtonLabel: "No",
- submitButtonLabel: "Yes",
- submitButtonStyle: "danger",
- close: function () {
- overlayService.close();
- },
- submit: function () {
- performAction();
- overlayService.close();
- }
- };
- overlayService.open(overlay);
- };
-
- // Check if the action we are running requires a confirmation and that we have a message to be displayed.
- if (action.needsConfirm && action.confirmMessage.length > 0) {
-
- // See if we have a localizable message.
- if (action.confirmMessage[0] === "@") {
- localizationService.localize(action.confirmMessage).then(function (val) {
- presentConfirmation(val);
- });
- } else {
- presentConfirmation(action.confirmMessage);
- }
- }
- else {
- // No confirmation required, so execute immediately.
- performAction();
- }
- };
- });
-
-angular.module("umbraco").controller("UmbracoForms.Editors.Form.EntriesSettingsController",
- function ($scope, $log, $timeout, exportResource, utilityService, editorService, localizationService, providerLocalizationHelper) {
-
- //The Form ID is found in the filter object we pass into the dialog
- var formId = $scope.model.filter.form;
-
- exportResource.getExportTypes(formId).then(function (response) {
- $scope.exportTypes = response.data;
- localizationService.localizeMany(providerLocalizationHelper.getLocalizationKeys("formProviderExportTypes", $scope.exportTypes)).then(function (labels) {
- providerLocalizationHelper.applyLocalizationLabels($scope.exportTypes, labels);
- });
- });
-
- $scope.close = function () {
- editorService.closeAll();
- };
-
- $scope.export = function (type, filter) {
- if ($scope.exporting) {
- return;
- }
-
- $scope.exporting = true;
-
- filter.exportType = type.id;
-
- //Check if we need to do server time offset to the date we are displaying
- var serverTimeNeedsOffsetting = utilityService.serverTimeNeedsOffsetting();
-
- if (serverTimeNeedsOffsetting) {
- // Use the localOffset to correct the server times with the client browser's offset
- filter.localTimeOffset = new Date().getTimezoneOffset();
- }
-
- exportResource.generateExport(filter).then(function (response) {
- var url = exportResource.getExportUrl(response.data.formId, response.data.fileName);
-
- var iframe = document.createElement('iframe');
- iframe.id = "hiddenDownloadframe";
- iframe.style.display = 'none';
- document.body.appendChild(iframe);
- iframe.src = url;
-
- //remove all traces
- $timeout(function () {
- document.body.removeChild(iframe);
- $scope.exporting = false;
- }, 1000);
-
- });
- };
-
- });
-
-angular.module("umbraco")
- .controller("UmbracoForms.Editors.Form.MoveController",
- function ($scope, formResource, treeService, navigationService, eventsService, notificationsService, formsValidationService, localizationService) {
-
- $scope.dialogTreeApi = {};
- $scope.source = _.clone($scope.currentNode);
-
- $scope.title = "";
- $scope.successMessage = "";
- localizationService.localize("formMove_title", [$scope.source.name]).then(function (val) {
- $scope.title = val;
- });
-
- var folderIdPrefix = "folder-";
- var movingFolder = $scope.currentNode.id.startsWith(folderIdPrefix);
-
- function nodeSelectHandler(args) {
- args.event.preventDefault();
- args.event.stopPropagation();
-
- if ($scope.target) {
- //un-select if there's a current one selected
- $scope.target.selected = false;
- }
-
- $scope.target = args.node;
- $scope.target.selected = true;
- }
-
- function parseFolderId(id) {
- return id.substring(folderIdPrefix.length);
- }
-
- $scope.move = function () {
-
- $scope.errorMessage = null;
-
- var handleSuccess = function (type, path) {
- $scope.errorMessage = null;
-
- treeService.removeNode($scope.currentNode);
-
- navigationService.syncTree({ tree: "form", path: path.split(','), forceReload: true, activate: true });
-
- localizationService.localize("formMove_successMessage", [$scope.source.name, $scope.target.name]).then(function (val) {
- $scope.successMessage = val;
- });
-
- localizationService.localizeMany(
- [
- "formMove_successNotificationHeader",
- "formMove_successNotificationDescriptionForForm",
- "formMove_successNotificationDescriptionForFolder"])
- .then(function (labels) {
- notificationsService.showNotification({
- type: 0,
- header: labels[0],
- message: type === "form" ? labels[1] : labels[2],
- });
- });
-
- navigationService.hideMenu();
-
- eventsService.emit('app.refreshEditor');
- };
-
- var handleError = function (err) {
- $scope.errorMessage = formsValidationService.getErrorMessageFromExceptionResponse(err);
- };
-
- if (movingFolder) {
- formResource.moveFolder($scope.target.id, parseFolderId($scope.source.id))
- .then(function (response) {
- handleSuccess("folder", response.data);
- }, function (err) {
- handleError(err);
- });
- } else {
- formResource.moveForm($scope.target.id, $scope.source.id)
- .then(function (response) {
- handleSuccess("form", response.data);
- }, function (err) {
- handleError(err);
- });
- }
-
- };
-
- $scope.onTreeInit = function () {
- $scope.dialogTreeApi.callbacks.treeNodeSelect(nodeSelectHandler);
- };
-
- $scope.close = function () {
- navigationService.hideDialog();
- };
-
- });
-
-(function () {
- "use strict";
-
- function Controller($scope, formResource, navigationService, formHelper, notificationsService, formsValidationService, localizationService) {
-
- var vm = this;
- vm.buttonState = "init";
- vm.errorMessage = null;
-
- var node = $scope.currentNode;
- vm.newName = node.name;
-
- vm.performRename = performRename;
- vm.cancelRename = cancelRename;
-
- var folderIdPrefix = "folder-";
- vm.deletingFolder = $scope.currentNode.id.startsWith(folderIdPrefix);
-
- function parseFolderId(id) {
- return id.substring(folderIdPrefix.length);
- }
-
- function performRename() {
-
- if (vm.deletingFolder) {
-
- vm.errorMessage = null;
- if (formHelper.submitForm({ scope: $scope, formCtrl: $scope.renameForm })) {
-
- formResource.renameFolder(parseFolderId(node.id), vm.newName).then(function (response) {
-
- var path = $scope.currentNode.path;
-
- navigationService.syncTree({
- tree: "form",
- path: path.split(','),
- forceReload: true,
- activate: true
- });
-
- localizationService.localizeMany(
- [
- "formRename_successNotificationHeader",
- "formRename_successNotificationDescriptionForFolder"])
- .then(function (labels) {
- notificationsService.showNotification({
- type: 0,
- header: labels[0],
- message: labels[1],
- });
- });
-
- navigationService.hideMenu();
-
- }, function (err) {
-
- formHelper.resetForm({ scope: $scope, formCtrl: $scope.createFolderForm, hasErrors: true });
- vm.errorMessage = formsValidationService.getErrorMessageFromExceptionResponse(err);
- });
- }
-
- } else {
- // Only folder renames are supported, but keeping this placeholder in in case
- // we wanted to implement for forms too.
- }
-
- }
-
- function cancelRename() {
- navigationService.hideNavigation();
- };
- }
-
- angular.module("umbraco").controller("UmbracoForms.Editors.Form.RenameController", Controller);
-
-})();
-
-/**
- * @ngdoc controller
- * @name UmbracoForms.Overlays.FieldsetSettingsOverlay
- * @function
- *
- * @description
- * The controller for the Fieldset Settings dialog
- */
-
-(function () {
- "use strict";
-
- function FieldsetSettingsOverlay($scope, formService, editorService, localizationService) {
-
- var vm = this;
-
- vm.actionTypes = [];
- vm.logicTypes = [];
- vm.operators = [];
-
- vm.deleteConditionRule = deleteConditionRule;
- vm.addConditionRule = addConditionRule;
- vm.conditionFieldSelected = conditionFieldSelected;
- vm.canAddColumn = canAddColumn;
- vm.addColumn = addColumn;
- vm.removeColumn = removeColumn;
- vm.toggleConditions = toggleConditions;
- vm.close = close;
- vm.submit = submit;
-
- vm.labels = {};
- vm.enableConditionsToggleText = "";
-
- vm.fieldSetContainersDescription = "";
-
- var localizeLabels = localizationService.localize("formConditions_enableConditions").then(function (val) {
- vm.enableConditionsToggleText = val;
- });
-
- var oldFieldset = "";
- var oldContainers = "";
-
- function init() {
-
- vm.actionTypes = formService.getActionTypes();
- vm.logicTypes = formService.getLogicTypes();
- vm.operators = formService.getOperators();
-
- localizeConditionSelectors(vm.actionTypes, "actionType");
- localizeConditionSelectors(vm.logicTypes, "logicType");
- localizeConditionSelectors(vm.operators, "operator");
-
- if (localizeLabels) {
- localizeLabels.then(function () { });
- }
-
- if (!$scope.model.fieldset.condition) {
- $scope.model.fieldset.condition = {};
- $scope.model.fieldset.condition.actionType = vm.actionTypes[0].value;
- $scope.model.fieldset.condition.logicType = vm.logicTypes[0].value;
- }
-
- oldFieldset = angular.copy($scope.model.fieldset);
- oldContainers = angular.copy($scope.model.fieldset.containers);
-
- setColumnCountDescription();
- }
-
- function localizeConditionSelectors(types, key) {
- if (types) {
- var keys = [];
- for (var i = 0; i < types.length; i++) {
- keys.push("formConditions_" + key + types[i].value);
- }
-
- localizationService.localizeMany(keys).then(function (labels) {
- for (var i = 0; i < labels.length; i++) {
- types[i].name = labels[i];
- }
- });
- }
- }
-
- function deleteConditionRule(rules, rule) {
- formService.deleteConditionRule(rules, rule);
- }
-
- function toggleConditions() {
- $scope.model.fieldset.condition.enabled = !$scope.model.fieldset.condition.enabled;
- }
-
- function addConditionRule(condition) {
- formService.addEmptyConditionRule(condition);
- // set default operator
- var lastIndex = condition.rules.length - 1;
- condition.rules[lastIndex].operator = vm.operators[0].value;
- }
-
- function conditionFieldSelected(selectedField, rule) {
- formService.populateConditionRulePrevalues(selectedField, rule, $scope.model.fields);
- }
-
- function canAddColumn() {
- var index = $scope.model.fieldset.containers.length;
- return index < parseInt(Umbraco.Sys.ServerVariables.umbracoPlugins.forms.maxNumberOfColumnsInFormGroup);
- }
-
- function addColumn() {
- if (!canAddColumn()) {
- return;
- }
- var index = $scope.model.fieldset.containers.length;
- formService.addContainer($scope.model.fieldset, index);
- setColumnCountDescription();
- }
-
- function removeColumn(container) {
- formService.deleteContainer($scope.model.fieldset, container);
- setColumnCountDescription();
- }
-
- function setColumnCountDescription() {
- if ($scope.model.fieldset.containers) {
- var tokens = [$scope.model.fieldset.containers.length];
- localizationService.localize("fieldSetColumns_columnNumberDescription", tokens).then(function (val) {
- vm.fieldSetContainersDescription = val;
- });
- }
- }
-
- function close(model) {
-
- $scope.model.fieldset.containers = oldContainers;
- $scope.model.fieldset = oldFieldset;
-
- editorService.close();
- };
-
- function submit() {
- editorService.close();
- };
-
- init();
- }
-
- angular.module("umbraco").controller("UmbracoForms.Overlays.FieldsetSettingsOverlay", FieldsetSettingsOverlay);
-
-})();
-
-/**
- * @ngdoc controller
- * @name UmbracoForms.Overlays.FieldSettingsOverlay
- * @function
- *
- * @description
- * The controller for the Field Settings dialog
- */
-
-(function () {
- "use strict";
-
- function FieldSettingsOverlay($scope, localizationService, formService, userService, editorService, formHelper) {
-
- var vm = this;
-
- vm.showValidationPattern = false;
- vm.focusOnPatternField = false;
- vm.focusOnMandatoryField = false;
- vm.canEditSensitiveData = false; //Default to false - until we check with the server for this user to see if they have rights to edit/set this property
- vm.loading = true; //We need to do a serverside call lookup at init/active to check is user has access to sensitive data
- vm.selectedValidationType = {};
- vm.actionTypes = [];
- vm.logicTypes = [];
- vm.operators = [];
- vm.mandatoryToggleText = "";
- vm.sensitiveDataToggleText = "";
- vm.enableConditionsToggleText = "";
- vm.multipleFilesToggleTextOn = "";
- vm.multipleFilesToggleTextOff = "";
-
- var localizeValidation = localizationService.localizeMany(
- [
- "validation_validateAsEmail",
- "validation_validateAsNumber",
- "validation_validateAsUrl",
- "validation_enterCustomValidation",
- "validation_fieldIsMandatory"]
- ).then(function (labels) {
- vm.validationTypes = [{
- "name": labels[0],
- "key": "email",
- "pattern": "^[a-zA-Z0-9_\.\+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-\.]+$",
- "enableEditing": true
- }, {
- "name": labels[1],
- "key": "number",
- "pattern": "^[0-9]*$",
- "enableEditing": true
- }, {
- "name": labels[2],
- "key": "url",
- "pattern": "https?\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,}",
- "enableEditing": true
- }, {
- "name": labels[3],
- "key": "custom",
- "pattern": "",
- "enableEditing": true
- }];
-
- vm.mandatoryToggleText = labels[4];
- });
-
- var localizeLabels = localizationService.localizeMany(
- [
- "fieldSettings_sensitiveDataLabel",
- "formConditions_enableConditions",
- "fieldSettings_multipleFilesToggleTextOn",
- "fieldSettings_multipleFilesToggleTextOff"]
- ).then(function (labels) {
- vm.sensitiveDataToggleText = labels[0];
- vm.enableConditionsToggleText = labels[1];
- vm.multipleFilesToggleTextOn = labels[2];
- vm.multipleFilesToggleTextOff = labels[3];
- });
-
- vm.changeValidationType = changeValidationType;
- vm.changeValidationPattern = changeValidationPattern;
- vm.openFieldTypePicker = openFieldTypePicker;
- vm.deleteConditionRule = deleteConditionRule;
- vm.addConditionRule = addConditionRule;
- vm.getPrevalues = getPrevalues;
- vm.conditionFieldSelected = conditionFieldSelected;
- vm.submitOnEnter = submitOnEnter;
- vm.submit = submit;
- vm.close = close;
- vm.toggleConditions = toggleConditions;
- vm.toggleMandatory = toggleMandatory;
- vm.toggleSensitiveData = toggleSensitiveData;
- vm.toggleAllowMultipleFileUploads = toggleAllowMultipleFileUploads;
- vm.matchValidationType = matchValidationType;
-
-
- //Creating duplicate of the fields array on the model
- //As the select for the conditions needs to ensure it does not include itself
-
- //Need to use angular.copy() otherwise when we remove item in fieldConditions its data-binding back down to the original model.fields
- vm.fieldConditions = angular.copy($scope.model.fields);
-
- //Trying not to use _underscore.js
- //Loop over array until we find the item where the ID matches & remove object from the array
- for (var i = 0; i < vm.fieldConditions.length; i++) {
- if (vm.fieldConditions[i].id === $scope.model.field.id) {
- vm.fieldConditions.splice(i, 1);
- break;
- }
- }
-
- function activate() {
- vm.actionTypes = formService.getActionTypes();
- vm.logicTypes = formService.getLogicTypes();
- vm.operators = formService.getOperators();
-
- localizeConditionSelectors(vm.actionTypes, "actionType");
- localizeConditionSelectors(vm.logicTypes, "logicType");
- localizeConditionSelectors(vm.operators, "operator");
-
- localizeLabels.then(function () { });
-
- //Verify that the current user is allowed to view & change the property 'containsSensitiveData'
- userService.getCurrentUser().then(function (user) {
-
- //Set the API controller response on the Angular ViewModel
- vm.canEditSensitiveData = user.userGroups.indexOf("sensitiveData") !== -1;
-
- //Got a response back from promise - so lets load up the UI
- vm.loading = false;
- });
-
- if (!$scope.model.field.condition) {
- $scope.model.field.condition = {};
- $scope.model.field.condition.actionType = vm.actionTypes[0].value;
- $scope.model.field.condition.logicType = vm.logicTypes[0].value;
- }
-
- matchValidationType();
-
- // If the prevalue source Id hasn't been defined, ensure angularjs doesn't add an initial empty
- // select list option by initialising to the first empty value (the 'Choose...' prompt.)
- // See: https://stackoverflow.com/a/12654812/489433
- if (!$scope.model.field.prevalueSourceId) {
- $scope.model.field.prevalueSourceId = '00000000-0000-0000-0000-000000000000';
- }
- }
-
- function localizeConditionSelectors(types, key) {
- if (types) {
- var keys = [];
- for (var i = 0; i < types.length; i++) {
- keys.push("formConditions_" + key + types[i].value);
- }
-
- localizationService.localizeMany(keys).then(function (labels) {
- for (var i = 0; i < labels.length; i++) {
- types[i].name = labels[i];
- }
- });
- }
- }
-
- function changeValidationPattern() {
- matchValidationType();
- }
-
- function openFieldTypePicker(field) {
-
- vm.focusOnMandatoryField = false;
-
- var fieldTypePicker = {
- view: "/App_Plugins/UmbracoForms/backoffice/Form/overlays/fieldtypepicker/field-type-picker.html",
- title: "Choose answer type",
- hideSubmitButton: true,
- size: "medium",
- submit: function (model) {
-
- formService.loadFieldTypeSettings(field, model.fieldType);
-
- // this should be removed in next major version
- field.removePrevalueEditor = true;
-
- editorService.close();
- },
- close: function (model) {
- editorService.close();
- }
- };
- editorService.open(fieldTypePicker);
- }
-
- function matchValidationType() {
-
- if ($scope.model.field.regex !== null && $scope.model.field.regex !== "" && $scope.model.field.regex !== undefined) {
-
- return localizeValidation.then(function () {
- var match = false;
- // find and show if a match from the list has been chosen
- angular.forEach(vm.validationTypes, function (validationType, index) {
- if ($scope.model.field.regex === validationType.pattern) {
- vm.selectedValidationType = validationType;
- vm.showValidationPattern = true;
- match = true;
- }
- });
- if (!match) {
- // if there is no match - choose the custom validation option.
- angular.forEach(vm.validationTypes, function (validationType) {
- if (validationType.key === "custom") {
- vm.selectedValidationType = validationType;
- vm.showValidationPattern = true;
- }
- });
- }
- });
- }
-
- }
-
- function toggleConditions() {
- $scope.model.field.condition.enabled = !$scope.model.field.condition.enabled;
- }
- function toggleSensitiveData() {
- $scope.model.field.containsSensitiveData = !$scope.model.field.containsSensitiveData;
- }
- function toggleMandatory() {
- $scope.model.field.mandatory = !$scope.model.field.mandatory;
- }
- function toggleAllowMultipleFileUploads() {
- $scope.model.field.allowMultipleFileUploads = !$scope.model.field.allowMultipleFileUploads;
- }
- function changeValidationType(selectedValidationType) {
-
- if (selectedValidationType) {
- $scope.model.field.regex = selectedValidationType.pattern;
- vm.showValidationPattern = true;
-
- // set focus on textarea
- if (selectedValidationType.key === "custom") {
- vm.focusOnPatternField = true;
- }
-
- } else {
- $scope.model.field.regex = "";
- vm.showValidationPattern = false;
- }
-
- }
-
- function conditionFieldSelected(selectedField, rule) {
- formService.populateConditionRulePrevalues(selectedField, rule, $scope.model.fields);
- }
-
- function deleteConditionRule(rules, rule) {
- formService.deleteConditionRule(rules, rule);
- }
-
- function addConditionRule(condition) {
- formService.addEmptyConditionRule(condition);
- // set default operator
- var lastIndex = condition.rules.length - 1;
- condition.rules[lastIndex].operator = vm.operators[0].value;
- }
-
- function getPrevalues(field) {
- formService.loadFieldTypePrevalues(field);
- }
-
- function submitOnEnter(event) {
- if (event && event.keyCode === 13) {
- submit();
- }
- }
-
- function submit() {
- if ($scope.model.submit) {
- if (formHelper.submitForm({ scope: $scope })) {
- $scope.model.submit($scope.model);
- }
- }
- }
-
- function close() {
- if ($scope.model.close) {
- $scope.model.close();
- }
- }
-
- activate();
-
- }
-
- angular.module("umbraco").controller("UmbracoForms.Overlays.FieldSettingsOverlay", FieldSettingsOverlay);
-
-})();
-
-(function () {
- "use strict";
-
- function FieldTypePickerOverlayController($scope, formResource, localizationService, providerLocalizationHelper) {
-
- var vm = this;
-
- vm.fieldTypes = [];
- vm.searchTerm = "";
-
- vm.pickFieldType = pickFieldType;
- vm.filterItems = filterItems;
- vm.showDetailsOverlay = showDetailsOverlay;
- vm.hideDetailsOverlay = hideDetailsOverlay;
- vm.close = close;
-
- function init() {
-
- // get workflows with settings
- formResource.getAllFieldTypesWithSettings()
- .then(function (response) {
- vm.fieldTypes = response.data;
- localizationService.localizeMany(providerLocalizationHelper.getLocalizationKeys("formProviderFieldTypes", vm.fieldTypes)).then(function (labels) {
- providerLocalizationHelper.applyLocalizationLabels(vm.fieldTypes, labels);
- });
- });
- }
-
-
- function pickFieldType(selectedFieldType) {
- $scope.model.fieldType = selectedFieldType;
- $scope.model.submit($scope.model);
- }
-
- function filterItems() {
- // clear item details
- $scope.model.itemDetails = null;
- }
-
- function showDetailsOverlay(workflowType) {
-
- var workflowDetails = {};
- workflowDetails.icon = workflowType.icon;
- workflowDetails.title = workflowType.name;
- workflowDetails.description = workflowType.description;
-
- $scope.model.itemDetails = workflowDetails;
-
- }
-
- function hideDetailsOverlay() {
- $scope.model.itemDetails = null;
- }
-
- function close() {
- if ($scope.model.close) {
- $scope.model.close();
- }
- }
-
- init();
-
- }
-
- angular.module("umbraco").controller("UmbracoForms.Overlays.FieldTypePickerOverlayController", FieldTypePickerOverlayController);
-})();
-
-(function () {
- "use strict";
-
- function FormPickerOverlayController($scope, $http, formPickerResource, notificationsService) {
-
- var vm = this;
-
- vm.loading = false;
- vm.forms = [];
- vm.error = null;
-
- vm.pickForm = pickForm;
-
- function onInit() {
-
- vm.loading = true;
-
- // set default title
- if(!$scope.model.title) {
- $scope.model.title = "Select a form";
- }
-
- // we don't need the submit button for a multi picker because we submit on select for the single picker
- if(!$scope.model.multiPicker) {
- $scope.model.hideSubmitButton = true;
- }
-
- // make sure we have an array to push to
- if(!$scope.model.selectedForms) {
- $scope.model.selectedForms = [];
- }
-
- // get the available forms
- formPickerResource.getFormsForPicker($scope.model.allowedForms || null).then(function (response) {
- vm.forms = response;
- vm.loading = false;
- }, function (err) {
- //Error callback from - getting all Forms
- //Unsure what exception/error we would encounter
- //Would be just an empty collection if we cant find/get any
- vm.error = "An Error has occured while loading!";
- vm.loading = false;
- });
- }
-
- function pickForm(form) {
-
- if(form.selected) {
-
- // if form is already selected we deselect and remove it from the picked forms array
- form.selected = false;
-
- angular.forEach($scope.model.selectedForms, function(selectedForm, index){
- if(selectedForm.id === form.id) {
- $scope.model.selectedForms.splice(index, 1);
- }
- });
-
- } else {
-
- // set selected flag so we can show checkmark icon
- form.selected = true;
-
- // store selected form in an array
- $scope.model.selectedForms.push(form);
-
- // if it's not a multipicker - submit the overlay
- if(!$scope.model.multiPicker) {
- $scope.model.submit($scope.model);
- }
-
- }
-
- }
-
- onInit();
-
- }
-
- angular.module("umbraco").controller("UmbracoForms.FormPickerOverlayController", FormPickerOverlayController);
-
-})();
-
-/**
- * @ngdoc controller
- * @name UmbracoForms.Overlays.PageSettingsOverlay
- * @function
- *
- * @description
- * The controller for the Page Settings dialog
- */
-
-(function () {
- "use strict";
-
- function PageSettingsOverlay($scope, formService, editorService, localizationService) {
-
- var vm = this;
-
- vm.actionTypes = [];
- vm.logicTypes = [];
- vm.operators = [];
-
- vm.deleteConditionRule = deleteConditionRule;
- vm.addConditionRule = addConditionRule;
- vm.conditionFieldSelected = conditionFieldSelected;
- vm.toggleConditions = toggleConditions;
- vm.close = close;
- vm.submit = submit;
-
- vm.enableConditionsToggleText = "";
-
- var localizeLabels = localizationService.localize("formConditions_enableConditions")
- .then(function (val) {
- vm.enableConditionsToggleText = val;
- });
-
- var oldButtonCondition;
-
- function init() {
- vm.actionTypes = formService.getActionTypes();
- vm.logicTypes = formService.getLogicTypes();
- vm.operators = formService.getOperators();
-
- localizeConditionSelectors(vm.actionTypes, "actionType");
- localizeConditionSelectors(vm.logicTypes, "logicType");
- localizeConditionSelectors(vm.operators, "operator");
-
- localizeLabels.then(function () { });
-
- oldButtonCondition = angular.copy($scope.model.page.buttonCondition);
-
- if (!$scope.model.page.buttonCondition) {
- $scope.model.page.buttonCondition = {};
- $scope.model.page.buttonCondition.actionType = vm.actionTypes[0].value;
- $scope.model.page.buttonCondition.logicType = vm.logicTypes[0].value;
- }
- }
-
- function localizeConditionSelectors(types, key) {
- if (types) {
- var keys = [];
- for (var i = 0; i < types.length; i++) {
- keys.push("formConditions_" + key + types[i].value);
- }
-
- localizationService.localizeMany(keys).then(function (labels) {
- for (var i = 0; i < labels.length; i++) {
- types[i].name = labels[i];
- }
- });
- }
- }
-
- function deleteConditionRule(rules, rule) {
- formService.deleteConditionRule(rules, rule);
- }
-
- function toggleConditions() {
- $scope.model.page.buttonCondition.enabled = !$scope.model.page.buttonCondition.enabled;
- }
-
- function addConditionRule(condition) {
- formService.addEmptyConditionRule(condition);
- // set default operator
- var lastIndex = condition.rules.length - 1;
- condition.rules[lastIndex].operator = vm.operators[0].value;
- }
-
- function conditionFieldSelected(selectedField, rule) {
- formService.populateConditionRulePrevalues(selectedField, rule, $scope.model.fields);
- }
-
- function close() {
- $scope.model.page.buttonCondition = oldButtonCondition;
- editorService.close();
- };
-
- function submit() {
- editorService.close();
- };
-
- init();
- }
-
- angular.module("umbraco").controller("UmbracoForms.Overlays.PageSettingsOverlay", PageSettingsOverlay);
-
-})();
-
-(function () {
- "use strict";
-
- function ThemePickerOverlayController($scope, themePickerResource) {
-
- var vm = this;
-
- vm.loading = false;
- vm.themes = [];
- vm.error = null;
-
- vm.pickTheme = pickTheme;
-
- function onInit() {
-
- vm.loading = true;
-
- // set default title
- if(!$scope.model.title) {
- $scope.model.title = "Select a theme";
- }
-
- // we don't need the submit button for a multi picker because we submit on select for the single picker
- if(!$scope.model.multiPicker) {
- $scope.model.hideSubmitButton = true;
- }
-
- // make sure we have an array to push to
- if(!$scope.model.selectedThemes) {
- $scope.model.selectedThemes = [];
- }
-
- // get the available forms
- themePickerResource.getThemes().then(function (response) {
- vm.themes = response;
- vm.loading = false;
- }, function (err) {
- //Error callback from - getting all Forms
- //Unsure what exception/error we would encounter
- //Would be just an empty collection if we cant find/get any
- vm.error = "An Error has occured while loading!";
- vm.loading = false;
- });
- }
-
- function pickTheme(theme) {
-
- if(theme.selected) {
-
- // if form is already selected we deselect and remove it from the picked forms array
- theme.selected = false;
-
- angular.forEach($scope.model.selectedThemes, function(selectedTheme, index){
- if(selectedTheme.name === theme.name) {
- $scope.model.selectedThemes.splice(index, 1);
- }
- });
-
- } else {
-
- // set selected flag so we can show checkmark icon
- theme.selected = true;
-
- // store selected form in an array
- $scope.model.selectedThemes.push(theme);
-
- // if it's not a multipicker - submit the overlay
- if(!$scope.model.multiPicker) {
- $scope.model.submit($scope.model);
- }
-
- }
-
- }
-
- onInit();
-
- }
-
- angular.module("umbraco").controller("UmbracoForms.ThemePickerOverlayController", ThemePickerOverlayController);
-
-})();
-
-(function () {
- "use strict";
-
- function WorkflowSettingsOverlayController($scope, workflowResource, localizationService, providerLocalizationHelper) {
-
- var vm = this;
-
- vm.workflowTypes = [];
- vm.focusWorkflowName = true;
-
- var prepareDataForEdit = function () {
- // Transform includeSensitiveData field from an integer derived from an enum to a boolean,
- // for user selection via a check-box.
- $scope.model.workflow.includeSensitiveData = $scope.model.workflow.includeSensitiveData == 1 ? true : false;
-
- // Localize the workflow name, description and settings.
- localizationService.localizeMany(providerLocalizationHelper.getLocalizationKeys("formProviderWorkflows", [$scope.model.workflow], $scope.model.workflow.workflowTypeName)).then(function (labels) {
- providerLocalizationHelper.applyLocalizationLabels([$scope.model.workflow], labels, true);
- });
- };
-
- if ($scope.model.workflow) {
- prepareDataForEdit();
- }
-
- if ($scope.model.workflowType && $scope.model.workflowType.id) {
- workflowResource.getScaffoldWorkflowType($scope.model.workflowType.id).then(function (response) {
- $scope.model.workflow = response.data;
- prepareDataForEdit();
- });
- }
-
- vm.toggleActive = function () {
- $scope.model.workflow.active = !$scope.model.workflow.active;
- $scope.workflowSettingsForm.$setDirty();
- }
-
- vm.toggleIncludeSensitiveData = function () {
- $scope.model.workflow.includeSensitiveData = !$scope.model.workflow.includeSensitiveData;
- $scope.workflowSettingsForm.$setDirty();
- }
-
- vm.close = function () {
- $scope.model.close($scope.workflowSettingsForm.$dirty);
- };
-
- vm.submit = function () {
- $scope.model.submit($scope.model);
- };
- }
-
- angular.module("umbraco").controller("UmbracoForms.Overlays.WorkflowSettingsOverlayController", WorkflowSettingsOverlayController);
-})();
-
-(function () {
- "use strict";
-
- function WorkflowsOverviewOverlayController($scope, workflowResource, notificationsService, editorService, overlayService, localizationService) {
-
- var vm = this;
- // massive hack to fix submit when pressing enter
- vm.focusOverlay = true;
-
- vm.openWorkflowsTypesOverlay = openWorkflowsTypesOverlay;
- vm.editWorkflow = editWorkflow;
- vm.removeWorkflow = removeWorkflow;
- vm.editSubmitMessageWorkflow = editSubmitMessageWorkflow;
-
- if (!$scope.model.formWorkflows.onSubmit) {
- $scope.model.formWorkflows.onSubmit = [];
- }
- if (!$scope.model.formWorkflows.onApprove) {
- $scope.model.formWorkflows.onApprove = [];
- }
-
- vm.workflowsSortableOptions = {
- distance: 10,
- tolerance: "pointer",
- connectWith: ".umb-forms-workflows__sortable-wrapper",
- opacity: 0.7,
- scroll: true,
- cursor: "move",
- zIndex: 6000,
- handle: ".sortable-handle",
- items: ".sortable",
- placeholder: "umb-forms-workflow__workflow-placeholder",
- start: function (e, ui) {
- ui.placeholder.height(ui.item.height());
- },
- stop: function (event, ui) {
- updateSortOrder($scope.model.formWorkflows.onSubmit);
- updateSortOrder($scope.model.formWorkflows.onApprove);
- }
- };
-
- function updateSortOrder(array) {
- var sortOrder = 0;
- for (var i = 0; i < array.length; i++) {
- var arrayItem = array[i];
- if (arrayItem.isDeleted === false) {
- arrayItem.sortOrder = sortOrder;
- sortOrder++;
- }
- }
- }
-
- function openWorkflowsTypesOverlay(workflowTypeArray) {
- // set overlay settings and open overlay
- localizationService.localize("formWorkflows_chooseWorkflow").then(function (val) {
- var workflowsTypesOverlay = {
- view: "/App_Plugins/UmbracoForms/backoffice/Form/overlays/workflows/workflow-types.html",
- title: val,
- fields: $scope.model.fields,
- size: "medium",
- submit: function (model) {
-
- // set sortOrder
- workflowTypeArray.push(model.workflow);
- updateSortOrder(workflowTypeArray);
-
- editorService.close();
- },
- close: function () {
- editorService.close();
- }
- };
-
- editorService.open(workflowsTypesOverlay);
- });
- }
-
- function editWorkflow(workflow, collection, index) {
-
- // Take a clone of the original workflow so can reset if the changes aren't submitted.
- var preEditedWorkflow = JSON.parse(JSON.stringify(workflow));
-
- var workflowSettingsOverlay = {
- view: "/App_Plugins/UmbracoForms/backoffice/Form/overlays/workflows/workflow-settings.html",
- title: workflow.name,
- workflow: workflow,
- fields: $scope.model.fields,
- size: "medium",
- submit: function (model) {
-
- //Validate settings
- workflowResource.validateWorkflowSettings(model.workflow).then(function (response) {
- if (response.data.length > 0) {
- angular.forEach(response.data, function (error) {
- notificationsService.error("Workflow failed to save", error.Message);
- });
- } else {
- editorService.close();
- }
-
- });
- },
- close: function (hasChanges) {
- // Reset to original values after confirmation if changes were made and 'Submit' button was not used.
- if (hasChanges) {
- localizationService.localizeMany([
- "formWorkflows_closeConfirmationTitle",
- "formWorkflows_closeConfirmationMessage",
- "general_no",
- "general_yes"]).then(function (labels) {
- var overlay = {
- view: "confirm",
- title: labels[0],
- content: labels[1],
- closeButtonLabel: labels[2],
- submitButtonLabel: labels[3],
- submitButtonStyle: "danger",
- close: function () {
- // Keep workflow settings editor open.
- overlayService.close();
- },
- submit: function () {
- // Reset changes and close workflow settings editor.
- $scope.model.formWorkflows[collection][index] = preEditedWorkflow;
- overlayService.close();
- editorService.close();
- }
- };
- overlayService.open(overlay);
- });
- } else {
- // No changes detected, so just close.
- editorService.close();
- }
- }
- };
-
- editorService.open(workflowSettingsOverlay);
- }
-
- function editSubmitMessageWorkflow() {
-
- localizationService.localize("formWorkflows_messageOnSubmit").then(function (val) {
- var submitMessageWorkflowOverlay = {
- view: "/App_Plugins/UmbracoForms/backoffice/Form/overlays/workflows/submit-message-workflow-settings.html",
- title: val,
- messageOnSubmit: $scope.model.messageOnSubmit,
- goToPageOnSubmit: $scope.model.goToPageOnSubmit,
- size: "medium",
- submit: function (model) {
-
- $scope.model.messageOnSubmit = model.messageOnSubmit;
- $scope.model.goToPageOnSubmit = model.goToPageOnSubmit;
- editorService.close();
- },
- close: function () {
- editorService.close();
- }
- };
- editorService.open(submitMessageWorkflowOverlay);
- });
- }
-
- function removeWorkflow(workflow, event, workflowTypeArray) {
- workflow.isDeleted = true;
- updateSortOrder(workflowTypeArray);
- event.stopPropagation();
- }
-
- vm.close = function () {
- $scope.model.close();
- }
-
- vm.submit = function () {
- $scope.model.submit($scope.model);
- }
-
- }
-
- angular.module("umbraco").controller("UmbracoForms.Overlays.WorkflowsOverviewOverlayController", WorkflowsOverviewOverlayController);
-})();
-
-(function () {
- "use strict";
-
- function WorkflowTypesOverlayController($scope, workflowResource, notificationsService, editorService, overlayService, localizationService, providerLocalizationHelper) {
-
- var vm = this;
-
- vm.workflowTypes = [];
- vm.searchTerm = "";
-
- vm.pickWorkflowType = pickWorkflowType;
- vm.filterItems = filterItems;
- vm.showDetailsOverlay = showDetailsOverlay;
- vm.hideDetailsOverlay = hideDetailsOverlay;
-
- function init() {
-
- // get workflows with settings
- workflowResource.getAllWorkflowTypesWithSettings()
- .then(function (response) {
- vm.workflowTypes = response.data;
- setDefaultWorkflowIcon(vm.workflowTypes);
- localizationService.localizeMany(providerLocalizationHelper.getLocalizationKeys("formProviderWorkflows", vm.workflowTypes)).then(function (labels) {
- providerLocalizationHelper.applyLocalizationLabels(vm.workflowTypes, labels);
- });
- });
-
- }
-
- function setDefaultWorkflowIcon(workflowTypes) {
-
- for (var i = 0; i < workflowTypes.length; i++) {
- var workflowType = workflowTypes[i];
- if (!workflowType.icon) {
- workflowType.icon = "icon-mindmap";
- }
- }
- }
-
- function pickWorkflowType(selectedWorkflowType) {
-
- // set overlay settings + open overlay
- var workflowSettingsOverlay = {
- view: "/App_Plugins/UmbracoForms/backoffice/Form/overlays/workflows/workflow-settings.html",
- title: selectedWorkflowType.name,
- workflow: $scope.model.workflow,
- workflowType: selectedWorkflowType,
- fields: $scope.model.fields,
- size: "medium",
- submit: function (model) {
- workflowResource.validateWorkflowSettings(model.workflow).then(function (response) {
- if (response.data.length > 0) {
- angular.forEach(response.data, function (error) {
- notificationsService.error("Workflow failed to save", error.Message);
- });
- } else {
-
- //Need to add the properties to the $scope from this submitted model
- $scope.model.workflow = model.workflow;
-
- // submit overlay and return the model
- $scope.model.submit($scope.model);
-
- // close the infinite editor
- editorService.close();
- }
-
- });
- },
- close: function (hasChanges) {
- if (hasChanges) {
- localizationService.localizeMany([
- "formWorkflows_closeConfirmationTitle",
- "formWorkflows_closeConfirmationMessage",
- "general_no",
- "general_yes"]).then(function (labels) {
- var overlay = {
- view: "confirm",
- title: labels[0],
- content: labels[1],
- closeButtonLabel: labels[2],
- submitButtonLabel: labels[3],
- submitButtonStyle: "danger",
- close: function () {
- // Keep workflow settings editor open.
- overlayService.close();
- },
- submit: function () {
- // Close workflow settings editor.
- overlayService.close();
- editorService.close();
- }
- };
- overlayService.open(overlay);
- });
- } else {
- // No changes detected, so just close.
- editorService.close();
- }
- }
- };
-
- editorService.open(workflowSettingsOverlay);
- }
-
- function filterItems() {
- // clear item details
- $scope.model.itemDetails = null;
- }
-
- function showDetailsOverlay(workflowType) {
-
- var workflowDetails = {};
- workflowDetails.icon = workflowType.icon;
- workflowDetails.title = workflowType.name;
- workflowDetails.description = workflowType.description;
-
- $scope.model.itemDetails = workflowDetails;
-
- }
-
- function hideDetailsOverlay() {
- $scope.model.itemDetails = null;
- }
-
- vm.close = function () {
- $scope.model.close();
- }
-
- init();
-
- }
-
- angular.module("umbraco").controller("UmbracoForms.Overlays.WorkflowTypesOverlayController", WorkflowTypesOverlayController);
-})();
-
-/**
- * @ngdoc controller
- * @name UmbracoForms.Editors.Form.FormDesignController
- * @function
- *
- * @description
- * The controller for the Umbraco Forns type editor
- */
-(function () {
- "use strict";
-
- function formDesignController(formResource, userService, securityResource, localizationService, providerLocalizationHelper) {
-
- var vm = this;
- var currentUser = {};
-
- vm.currentPage = {};
- vm.security = {};
-
- //Get PreValues for the current form we are editing/designing
- formResource.getPrevalueSources().then(function (resp) {
- vm.prevaluesources = resp.data;
-
- formResource.getAllFieldTypesWithSettings().then(function (resp) {
- vm.fieldtypes = resp.data;
- localizationService.localizeMany(providerLocalizationHelper.getLocalizationKeys("formProviderFieldTypes", vm.fieldtypes)).then(function (labels) {
- providerLocalizationHelper.applyLocalizationLabels(vm.fieldtypes, labels);
- vm.ready = true;
- });
- });
- });
-
- userService.getCurrentUser().then(function (response) {
- currentUser = response;
-
- //Now we can make a call to form securityResource
- securityResource.getByUserId(currentUser.id).then(function (response) {
- vm.security = response.data;
- });
-
- });
-
- }
-
- angular.module("umbraco").controller("UmbracoForms.Editors.Form.FormDesignController", formDesignController);
-})();
-
-(function () {
- "use strict";
-
- function FormSecurityEditController($scope, $routeParams, securityResource, notificationsService, navigationService, localizationService) {
-
- var vm = this;
-
- vm.page = { name: "Form Security" };
- vm.security = {};
- vm.save = save;
- vm.loading = true;
-
- function init() {
-
- // Ensure the current item we are editing is highlighted in the tree.
- // Note: doesn't work for the admin user (as this leads to a path of -1 which is also used for the tree's root node).
- navigationService.syncTree({ tree: "formsecurity", path: [String($routeParams.id)], forceReload: true });
-
- securityResource.getByUserId($routeParams.id).then(function (resp) {
- vm.security = resp.data;
- vm.loading = false;
- });
- }
-
- vm.toggleManageForms = function () {
- vm.security.userSecurity.manageForms = !vm.security.userSecurity.manageForms;
- }
-
- vm.toggleManageWorkflows = function () {
- vm.security.userSecurity.manageWorkflows = !vm.security.userSecurity.manageWorkflows;
- }
-
- vm.toggleManageDataSources = function () {
- vm.security.userSecurity.manageDataSources = !vm.security.userSecurity.manageDataSources;
- }
-
- vm.togglePreValueSources = function () {
- vm.security.userSecurity.managePreValueSources = !vm.security.userSecurity.managePreValueSources;
- }
-
- vm.toggleFormAccess = function (form) {
- form.HasAccess = !form.HasAccess;
- }
-
- function save() {
-
- localizationService.localizeMany(["formSecurity_saveSuccessTitle", "formSecurity_saveErrorTitle"]).then(function (labels) {
- // Add a property to the object to save the Umbraco User ID taken from the routeParam.
- vm.security.userSecurity.user = $routeParams.id;
-
- securityResource.save(vm.security).then(function (response) {
- vm.security = response.data;
- notificationsService.success(labels[0], "");
-
- // SecurityForm is the name of the
- // Set it back to Pristine after we save, so when we browse away we don't get the 'discard changes' notification
- $scope.securityForm.$setPristine();
-
- }, function (err) {
- notificationsService.error(labels[1], "");
- });
- });
- }
-
- init();
-
- }
-
- angular.module("umbraco").controller("UmbracoForms.Editors.Security.EditController", FormSecurityEditController);
-
-})();
-
-
-angular.module("umbraco")
- .controller("Umbraco.Forms.GridEditors.FormPickerController",
- function ($scope, $timeout, editorService, macroResource, macroService, $routeParams, $sce) {
-
- $scope.title = "Click to insert form";
- $scope.macroAlias = "renderUmbracoForm";
-
- $scope.setFormMacro = function () {
-
- var dialogData = {
- richTextEditor: true,
- macroData: $scope.control.value || {
- macroAlias: $scope.macroAlias
- }
- };
-
- var macroPicker = {
- dialogData: dialogData,
- submit: function (model) {
- var macroObject = macroService.collectValueData(model.selectedMacro, model.macroParams, dialogData.renderingEngine);
-
- $scope.control.value = {
- macroAlias: macroObject.macroAlias,
- macroParamsDictionary: macroObject.macroParamsDictionary
- };
-
- $scope.setPreview($scope.control.value);
- editorService.close();
- },
- close: function () {
- editorService.close();
- }
- };
- editorService.macroPicker(macroPicker);
- };
-
- $scope.setPreview = function (macro) {
- var contentId = $routeParams.id;
-
- macroResource.getMacroResultAsHtmlForEditor(macro.macroAlias, contentId, macro.macroParamsDictionary)
- .then(function (htmlResult) {
- $scope.title = macro.macroAlias;
- if (htmlResult.trim().length > 0 && htmlResult.indexOf("Macro:") < 0) {
- // Replace the form tag with a div and indicate trusted HTML for accurate preview in the grid editor.
- // See: https://github.com/umbraco/Umbraco.Forms.Issues/issues/612
- htmlResult = htmlResult.replace(' ', '');
- $scope.preview = $sce.trustAsHtml(htmlResult);
- }
- });
-
- };
-
- $timeout(function () {
- if ($scope.control.$initializing) {
- $scope.setFormMacro();
- } else if ($scope.control.value) {
- $scope.setPreview($scope.control.value);
- }
- }, 200);
- });
-
-angular.module("umbraco")
-.controller("UmbracoForms.Editors.PreValueSource.DeleteController",
- function ($scope, preValueSourceResource, navigationService, treeService) {
- $scope.delete = function (id) {
- preValueSourceResource.deleteByGuid(id).then(function () {
-
- treeService.removeNode($scope.currentNode);
- navigationService.hideNavigation();
-
- });
-
- };
- $scope.cancelDelete = function () {
- navigationService.hideNavigation();
- };
- });
-angular.module("umbraco").controller("UmbracoForms.Editors.PreValueSource.EditController",
- function ($scope, $routeParams, preValueSourceResource, editorState, notificationsService, navigationService, formHelper, userService, securityResource, localizationService, providerLocalizationHelper) {
-
- //On load/init of 'editing' a prevalue source then
- //Let's check & get the current user's form security
- var currentUserId = null;
-
- userService.getCurrentUser().then(function (response) {
- currentUserId = response.id;
-
- //Now we can make a call to form securityResource
- securityResource.getByUserId(currentUserId).then(function (response) {
- $scope.security = response.data;
-
- //Check if we have access to current form OR manage forms has been disabled
- if (!$scope.security.userSecurity.managePreValueSources) {
-
- //Show error notification
- localizationService.localizeMany(["formPermissions_accessDeniedTitle", "formPrevalueSources_accessDeniedMessage"]).then(function (labels) {
- notificationsService.error(labels[0], labels[1]);
- });
-
- //Resync tree so that it's removed & hides
- navigationService.syncTree({ tree: "prevaluesource", path: ['-1'], forceReload: true, activate: false }).then(function (response) {
-
- //Response object contains node object & activate bool
- //Can then reload the root node -1 for this tree 'Forms Folder'
- navigationService.reloadNode(response.node);
- });
-
- //Don't need to wire anything else up
- return;
- }
- });
- });
-
- if ($routeParams.create) {
- //we are creating so get an empty data type item
- preValueSourceResource.getScaffold()
- .then(function (response) {
- $scope.loaded = true;
- $scope.preValueSource = response.data;
-
- preValueSourceResource.getAllPreValueSourceTypesWithSettings()
- .then(function (resp) {
- $scope.types = resp.data;
- localizationService.localizeMany(providerLocalizationHelper.getLocalizationKeys("formProviderPrevalueSources", $scope.types)).then(function (labels) {
- providerLocalizationHelper.applyLocalizationLabels($scope.types, labels);
- });
- });
-
- //set a shared state
- editorState.set($scope.form);
- });
- } else {
-
- //we are editing so get the content item from the server
- preValueSourceResource.getByGuid($routeParams.id)
- .then(function (response) {
-
- $scope.preValueSource = response.data;
-
- preValueSourceResource.getAllPreValueSourceTypesWithSettings()
- .then(function (resp) {
- $scope.types = resp.data;
- localizationService.localizeMany(providerLocalizationHelper.getLocalizationKeys("formProviderPrevalueSources", $scope.types)).then(function (labels) {
- providerLocalizationHelper.applyLocalizationLabels($scope.types, labels);
- setTypeAndSettings();
- getPrevalues();
- $scope.loaded = true;
- });
- });
-
- //As we are editing an item we can highlight it in the tree
- navigationService.syncTree({ tree: "prevaluesource", path: [String($routeParams.id)], forceReload: false });
-
- //set a shared state
- editorState.set($scope.preValueSource);
- });
- }
-
- $scope.setType = function () {
- $scope.prevalues = null;
- setTypeAndSettings();
- };
-
- $scope.save = function () {
-
- if (formHelper.submitForm({ scope: $scope })) {
- //set settings
- $scope.preValueSource.settings = {};
- if ($scope.preValueSource.$type) {
- angular.forEach($scope.preValueSource.$type.settings, function (setting) {
- var key = setting.alias;
- var value = setting.value;
- $scope.preValueSource.settings[key] = value;
-
- });
- }
-
- //validate settings
- localizationService.localizeMany([
- "formPrevalueSources_saveSuccessTitle",
- "formPrevalueSources_saveErrorTitle",
- "formMessages_saveErrorMessage"]).then(function (labels) {
- preValueSourceResource.validateSettings($scope.preValueSource)
- .then(function (response) {
-
- $scope.errors = response.data;
-
- if ($scope.errors.length > 0) {
- angular.forEach($scope.errors, function (error) {
-
- notificationsService.error(labels[1], error.Message);
- });
- } else {
- //save
- preValueSourceResource.save($scope.preValueSource)
- .then(function (response) {
-
- $scope.preValueSource = response.data;
- //set a shared state
- editorState.set($scope.preValueSource);
- setTypeAndSettings();
- getPrevalues();
- $scope.preValueSourceForm.$dirty = false;
- navigationService.syncTree({
- tree: "prevaluesource",
- path: [String($scope.preValueSource.id)],
- forceReload: true
- });
- notificationsService.success(labels[0], "");
- }, function (err) {
- notificationsService.error(labels[1], "");
- });
- }
-
- }, function (err) {
- notificationsService.error(labels[1], labels[2]);
- });
- });
- }
- };
-
- var setTypeAndSettings = function () {
- $scope.preValueSource.$type = _.where($scope.types, { id: $scope.preValueSource.fieldPreValueSourceTypeId })[0];
-
- //set settings
- angular.forEach($scope.preValueSource.settings, function (setting) {
- for (var key in $scope.preValueSource.settings) {
- if ($scope.preValueSource.settings.hasOwnProperty(key)) {
- if (_.where($scope.preValueSource.$type.settings, { alias: key }).length > 0) {
- _.where($scope.preValueSource.$type.settings, { alias: key })[0].value = $scope.preValueSource.settings[key];
- }
-
- }
- }
- });
- };
-
- var getPrevalues = function () {
-
- preValueSourceResource.getPreValues($scope.preValueSource)
- .then(function (response) {
- $scope.prevalues = response.data;
- });
- };
-
- });
-
-(function () {
- "use strict";
-
- function FormPickerController($scope, $location, formPickerResource, userService, securityResource) {
-
- var vm = this;
- var allowedForms = null;
- var formSecurity = null;
-
- vm.loading = true;
- vm.selectedForm = null;
- vm.error = null;
-
- vm.openFormPicker = openFormPicker;
- vm.remove = remove;
-
- vm.openFormDesigner = openFormDesigner;
- vm.openFormEntries = openFormEntries;
-
- function onInit() {
-
- if ($scope.model.config && $scope.model.config.allowedForms) {
- allowedForms = $scope.model.config.allowedForms;
- }
-
- userService.getCurrentUser().then(function (response) {
- var currentUserId = response.id;
- securityResource.getByUserId(currentUserId).then(function (response) {
- formSecurity = response.data.formsSecurity;
-
- //Only do this is we have a value saved
- if ($scope.model.value) {
-
- formPickerResource.getPickedForm($scope.model.value).then(function (response) {
- setSelectedForm(response);
- }, function (err) {
- //The 500 err will get caught by UmbRequestHelper & show the stacktrace in YSOD dialog if in debug or generic red error to see logs
-
- //Got an error from the HTTP API call
- //Most likely cause is the picked/saved form no longer exists & has been deleted
- //Need to bubble this up in the UI next to prop editor to make it super obvious
-
- //Using Angular Copy - otherwise the data binding will be updated
- //So the error message wont make sense, if the user then updates/picks a new form as the model.value will update too
- var currentValue = angular.copy($scope.model.value);
-
- //Put something in the prop editor UI - some kind of red div or text
- vm.error = "The saved/picked form with id '" + currentValue + "' no longer exists. Pick another form below or clear out the old saved form";
- });
-
- }
- });
- });
- }
-
- function openFormPicker() {
- if (!vm.formPickerOverlay) {
- vm.formPickerOverlay = {
- view: "../App_Plugins/UmbracoForms/backoffice/Form/overlays/formpicker/formpicker.html",
- allowedForms: allowedForms,
- show: true,
- submit: function (model) {
-
- // save form for UI and save on property model
- if (model.selectedForms && model.selectedForms.length > 0) {
- setSelectedForm(model.selectedForms[0]);
- $scope.model.value = model.selectedForms[0].id;
- }
-
- vm.formPickerOverlay.show = false;
- vm.formPickerOverlay = null;
-
- },
- close: function (oldModel) {
- vm.formPickerOverlay.show = false;
- vm.formPickerOverlay = null;
- }
- }
- }
- }
-
- function setSelectedForm(form) {
- vm.selectedForm = form;
- vm.selectedForm.icon = "icon-umb-contour";
-
- // Set properties indicating if the current user has access to the selected form.
- if (formSecurity) {
- var formSecurityForForm = formSecurity.filter(function (fs) {
- return fs.Form == vm.selectedForm.id;
- });
- if (formSecurityForForm.length > 0) {
- vm.selectedForm.canEditForm = formSecurityForForm[0].HasAccess;
- vm.selectedForm.canViewEntries = formSecurityForForm[0].HasAccess;
- }
- }
- }
-
- function openFormDesigner() {
- $location.url("forms/Form/edit/" + vm.selectedForm.id);
- }
-
- function openFormEntries() {
- $location.url("forms/Form/entries/" + vm.selectedForm.id);
- }
-
- function remove() {
- vm.selectedForm = null;
- $scope.model.value = null;
- }
-
- onInit();
-
- }
-
- angular.module("umbraco").controller("UmbracoForms.FormPickerController", FormPickerController);
-})();
-
-(function () {
- "use strict";
-
- function FormPickerPrevaluesController($scope, $http, formPickerResource, notificationsService) {
-
- var vm = this;
-
- vm.openFormPicker = openFormPicker;
- vm.remove = remove;
-
- function onInit() {
-
- if(!$scope.model.value) {
- $scope.model.value = [];
- }
-
- if(!vm.forms) {
- vm.forms = [];
- }
-
- if($scope.model.value && $scope.model.value.length > 0) {
- formPickerResource.getPickedForms($scope.model.value).then(function(response){
- vm.forms = response;
- });
-
- }
-
- }
-
- function openFormPicker() {
- if (!vm.formPickerOverlay) {
- vm.formPickerOverlay = {
- view: "../App_Plugins/UmbracoForms/backoffice/Form/overlays/formpicker/formpicker.html",
- multiPicker: true,
- show: true,
- submit: function (model) {
-
- if(model.selectedForms && model.selectedForms.length > 0) {
- selectForms(model.selectedForms);
- }
-
- vm.formPickerOverlay.show = false;
- vm.formPickerOverlay = null;
-
- },
- close: function (oldModel) {
- vm.formPickerOverlay.show = false;
- vm.formPickerOverlay = null;
- }
- }
- }
- }
-
- function selectForms(selectedForms) {
- angular.forEach(selectedForms, function (selectedForm) {
- // make sure the form isn't already picked
- if($scope.model.value.indexOf(selectedForm.id) === -1) {
- // store form object on view model
- vm.forms.push(selectedForm);
- // store id for value
- $scope.model.value.push(selectedForm.id);
- }
- });
- }
-
- function remove(selectedForm) {
-
- //remove from view model
- angular.forEach($scope.model.value, function(formId, index){
- if(formId === selectedForm.id) {
- $scope.model.value.splice(index, 1);
- }
- })
-
- // remove from model.value
- angular.forEach(vm.forms, function(form, index){
- if(form.id === selectedForm.id) {
- vm.forms.splice(index, 1);
- }
- });
-
- }
-
- onInit();
-
- }
-
- angular.module("umbraco").controller("UmbracoForms.FormPickerPrevaluesController", FormPickerPrevaluesController);
-})();
-
-(function () {
- "use strict";
-
- function ThemePickerController($scope, themePickerResource) {
-
- var vm = this;
-
- vm.loading = true;
- vm.selectedTheme = null;
- vm.error = null;
-
- vm.openThemePicker = openThemePicker;
- vm.remove = remove;
-
- function onInit() {
-
- //Only do this is we have a value saved
- if ($scope.model.value) {
-
- vm.selectedTheme = {};
- vm.selectedTheme.name = $scope.model.value;
- vm.selectedTheme.icon = "icon-brush";
- }
- }
-
- function openThemePicker() {
- if (!vm.themePickerOverlay) {
- vm.themePickerOverlay = {
- view: "../App_Plugins/UmbracoForms/backoffice/Form/overlays/themepicker/themepicker.html",
- show: true,
- submit: function (model) {
-
- vm.selectedTheme = model.selectedThemes[0];
- vm.selectedTheme.icon = "icon-brush";
- $scope.model.value = model.selectedThemes[0].name;
-
- vm.themePickerOverlay.show = false;
- vm.themePickerOverlay = null;
-
- },
- close: function (oldModel) {
- vm.themePickerOverlay.show = false;
- vm.formthemePickerOverlayPickerOverlay = null;
- }
- }
- }
- }
-
- function remove() {
- vm.selectedTheme = null;
- $scope.model.value = null;
- }
-
- onInit();
-
- }
-
- angular.module("umbraco").controller("UmbracoForms.ThemePickerController", ThemePickerController);
-})();
-
-function dataSourceResource($http) {
-
- var apiRoot = "backoffice/UmbracoForms/DataSource/";
-
- return {
-
- getScaffold: function (template) {
- return $http.get(apiRoot + "GetScaffold");
- },
-
- getByGuid: function (id) {
- return $http.get(apiRoot + "GetByGuid?guid=" + id);
- },
- deleteByGuid: function (id) {
- return $http.delete(apiRoot + "DeleteByGuid?guid=" + id);
- },
- save: function (preValueSource) {
- return $http.post(apiRoot + "PostSave", preValueSource);
- },
-
- validateSettings: function (preValueSource) {
- return $http.post(apiRoot + "ValidateSettings", preValueSource);
- },
-
- getAllDataSourceTypesWithSettings: function () {
- return $http.get(apiRoot + "GetAllDataSourceTypesWithSettings");
- }
- };
-}
-
-angular.module('umbraco.resources').factory('dataSourceResource', dataSourceResource);
-function dataSourceWizardResource($http) {
-
- var apiRoot = "backoffice/UmbracoForms/DataSourceWizard/";
-
- return {
-
- getScaffold: function (id) {
- return $http.get(apiRoot + "GetScaffold?guid=" + id);
- },
-
- getAllFieldTypes: function () {
- return $http.get(apiRoot + "GetAllFieldTypes");
- },
-
- createForm: function (wizard) {
- return $http.post(apiRoot + "CreateForm", wizard);
- }
- };
-}
-
-angular.module('umbraco.resources').factory('dataSourceWizardResource', dataSourceWizardResource);
-/**
- * @ngdoc service
- * @name umbraco.resources.dashboardResource
- * @description Handles loading the dashboard manifest
- **/
-function exportResource($http) {
- //the factory object returned
- var apiRoot = "backoffice/UmbracoForms/Export/";
-
- return {
-
- getExportTypes: function (formId) {
- return $http.get(apiRoot + "GetExportTypes?formId=" + formId);
- },
-
- generateExport: function (config) {
- return $http.post(apiRoot + "PostGenerateExport", config);
- },
-
- getExportUrl: function (formId, fileName) {
- return apiRoot + "GetExport?formId=" + formId + "&fileName=" + fileName;
- },
-
- getExport: function (token) {
- return $http.get(apiRoot + "GetExport?token=" + token);
- }
-
- };
-}
-
-angular.module('umbraco.resources').factory('exportResource', exportResource);
-
-function fieldResource($http) {
-
- var apiRoot = "backoffice/UmbracoForms/Field/";
-
- return {
- validateSettings: function (field) {
- return $http.post(apiRoot + "ValidateSettings", field);
- }
- };
-}
-
-angular.module('umbraco.resources').factory('fieldResource', fieldResource);
-/**
- * @ngdoc service
- * @name umbraco.resources.dashboardResource
- * @description Handles loading the dashboard manifest
- **/
-function formResource($http) {
- //the factory object returned
- var apiRoot = "backoffice/UmbracoForms/Form/";
-
- return {
-
- getScaffold: function (template) {
- return $http.get(apiRoot + "GetScaffold?template=" + template);
- },
-
- getScaffoldWithWorkflows: function (template) {
- return $http.get(apiRoot + "GetScaffoldWithWorkflows?template=" + template);
- },
-
- getAllTemplates: function () {
- return $http.get(apiRoot + "GetFormTemplates");
- },
-
- getOverView: function () {
- return $http.get(apiRoot + 'GetOverView');
- },
-
- getByGuid: function (id) {
- return $http.get(apiRoot + "GetByGuid?guid=" + id);
- },
-
- getWithWorkflowsByGuid: function (id) {
- return $http.get(apiRoot + "GetWithWorkflowsByGuid?guid=" + id);
- },
-
- deleteByGuid: function (id) {
- return $http.delete(apiRoot + "DeleteByGuid?guid=" + id);
- },
-
- save: function (form) {
- return $http.post(apiRoot + "PostSave", form);
- },
-
- saveWithWorkflows: function (formWithWorkflows) {
- return $http.post(apiRoot + "SaveForm", formWithWorkflows);
- },
-
- getAllFieldTypes: function () {
- return $http.get(apiRoot + "GetAllFieldTypes");
- },
-
- getAllFieldTypesWithSettings: function () {
- return $http.get(apiRoot + "GetAllFieldTypesWithSettings");
- },
- getPrevalueSources: function () {
- return $http.get(apiRoot + "GetPrevalueSources");
- },
-
- copy: function (id, newFormName, copyWorkflows, copyToFolderId) {
- return $http.post(apiRoot + "CopyForm", { guid: id, newName: newFormName, copyWorkflows: copyWorkflows, copyToFolderId: copyToFolderId });
- },
-
- createFolder: function (parentId, name) {
- return $http.post(apiRoot + "CreateFolder", { parentId: parentId, name: name });
- },
-
- renameFolder: function (id, name) {
- return $http.post(apiRoot + "RenameFolder", { id: id, name: name });
- },
-
- moveFolder: function (parentId, id) {
- return $http.post(apiRoot + "MoveFolder", { parentId: parentId, id: id });
- },
-
- moveForm: function (parentId, id) {
- return $http.post(apiRoot + "MoveForm", { parentId: parentId, id: id });
- },
-
- isFolderEmpty: function (id) {
- return $http.get(apiRoot + "IsFolderEmpty?guid=" + id);
- },
-
- deleteFolderByGuid: function (id) {
- return $http.delete(apiRoot + "DeleteFolderByGuid?guid=" + id);
- },
-
- };
-}
-
-angular.module('umbraco.resources').factory('formResource', formResource);
-
-/**
- * @ngdoc service
- * @name umbraco.resources.formPickerResource
- * @description Used for picking Umbraco Forms with the Form Picker Property Editor
- **/
-function formPickerResource($http, umbRequestHelper) {
- //the factory object returned
-
- //TODO: Use the same way way in core to register URLs in Global Umbraco.Sys.ServerVariables
- var apiRoot = "backoffice/UmbracoForms/FormPicker/";
-
- return {
-
- getFormsForPicker : function(formGuids){
- return umbRequestHelper.resourcePromise(
- $http.post(apiRoot + 'GetFormsForPicker', formGuids),
- "Failed to retrieve Forms to pick"
- );
- },
-
- getPickedForm: function (id) {
- return umbRequestHelper.resourcePromise(
- $http.get(apiRoot + "GetPickedForm?formGuid=" + id),
- "The picked/saved form with id '" + id + "' does not exist"
- );
- },
-
- getPickedForms: function (formGuids) {
- return umbRequestHelper.resourcePromise(
- $http.post(apiRoot + "GetPickedForms", formGuids),
- "The picked/saved form with id '" + formGuids + "' does not exist"
- );
- }
- };
-}
-
-angular.module('umbraco.resources').factory('formPickerResource', formPickerResource);
-
-/**
- * @ngdoc service
- * @name umbraco.resources.dashboardResource
- * @description Handles loading the dashboard manifest
- **/
-function licensingResource($http) {
- //the factory object returned
- var apiRoot = "backoffice/UmbracoForms/Licensing/";
-
- return {
-
- getLicenseStatus: function () {
- return $http.get(apiRoot + "GetLicenseStatus");
- },
-
- getAvailableLicenses: function (config) {
- return $http.post(apiRoot + "PostRetrieveAvailableLicenses", config);
- },
-
- configureLicense: function (config) {
- return $http.post(apiRoot + "PostConfigureLicense", config);
- }
-
- };
-}
-
-angular.module('umbraco.resources').factory('licensingResource', licensingResource);
-
-function pickerResource($http) {
-
- var apiRoot = "backoffice/UmbracoForms/Picker/";
-
- return {
- getAllConnectionStrings: function () {
- return $http.get(apiRoot + "GetAllConnectionStrings");
- },
- getAllDataTypes: function () {
- return $http.get(apiRoot + "GetAllDataTypes");
- },
- getAllDocumentTypes: function () {
- return $http.get(apiRoot + "GetAllDocumentTypes");
- },
- getAllDocumentTypesWithAlias: function () {
- return $http.get(apiRoot + "GetAllDocumentTypesWithAlias");
- },
- getAllMediaTypes: function () {
- return $http.get(apiRoot + "GetAllMediaTypes");
- },
- getAllFields: function (formGuid) {
- return $http.get(apiRoot + "GetAllFields?formGuid="+formGuid);
- },
- getAllProperties: function (doctypeAlias) {
- return $http.get(apiRoot + "GetAllProperties?doctypeAlias=" + doctypeAlias);
- },
- updateMappedProperties: function(doctypeAlias, currentSavedProperties){
-
- var dataToPost = {
- "doctypeAlias": doctypeAlias,
- "currentProperties": currentSavedProperties
- };
-
- return $http.post(apiRoot + "PostUpdateMappedProperties", dataToPost);
- },
- getVirtualPathForEmailTemplate: function(encodedPath){
- return $http.get(apiRoot + "GetVirtualPathForEmailTemplate?encodedPath=" + encodedPath);
- }
-
- };
-}
-
-angular.module('umbraco.resources').factory('pickerResource', pickerResource);
-function preValueSourceResource($http) {
-
- var apiRoot = "backoffice/UmbracoForms/PreValueSource/";
-
- return {
-
- getScaffold: function (template) {
- return $http.get(apiRoot + "GetScaffold");
- },
-
- getByGuid: function (id) {
- return $http.get(apiRoot + "GetByGuid?guid=" + id);
- },
- deleteByGuid: function (id) {
- return $http.delete(apiRoot + "DeleteByGuid?guid=" + id);
- },
- save: function (preValueSource) {
- return $http.post(apiRoot + "PostSave", preValueSource);
- },
-
- validateSettings: function (preValueSource) {
- return $http.post(apiRoot + "ValidateSettings", preValueSource);
- },
-
- getPreValues: function (preValueSource) {
- return $http.post(apiRoot + "GetPreValues", preValueSource);
- },
-
- getPreValuesByGuid: function (preValueSourceId) {
- return $http.get(apiRoot + "GetPreValuesByGuid?preValueSourceId=" + preValueSourceId);
- },
-
- getAllPreValueSourceTypesWithSettings: function () {
- return $http.get(apiRoot + "GetAllPreValueSourceTypesWithSettings");
- }
- };
-}
-
-angular.module('umbraco.resources').factory('preValueSourceResource', preValueSourceResource);
-
-/**
- * @ngdoc service
- * @name umbraco.resources.dashboardResource
- * @description Handles loading the dashboard manifest
- **/
-function recordResource($http) {
- //the factory object returned
- var apiRoot = "backoffice/UmbracoForms/Record/";
-
- return {
-
- getRecords: function (filter) {
- return $http.post(apiRoot + "PostRetrieveRecords", filter);
- },
-
- getRecordsCount: function (filter) {
- return $http.post(apiRoot + "PostRetrieveRecordsCount", filter);
- },
-
- getRecordSetActions: function () {
- return $http.get(apiRoot + "GetRecordSetActions");
- },
-
- executeRecordSetAction : function(model){
- return $http.post(apiRoot + "PostExecuteRecordSetAction", model);
- }
-
- };
-}
-
-angular.module('umbraco.resources').factory('recordResource', recordResource);
-
-function securityResource($http) {
-
- var apiRoot = "backoffice/UmbracoForms/FormSecurity/";
-
- return {
- getByUserId: function (userId) {
- return $http.get(apiRoot + "GetByUserId?userId=" + userId);
- },
-
- save: function (userSecurity) {
- return $http.post(apiRoot + "PostSave", userSecurity);
- }
- };
-}
-
-angular.module('umbraco.resources').factory('securityResource', securityResource);
-/**
- * @ngdoc service
- * @name umbraco.resources.themePickerResource
- * @description Used for picking Umbraco Forms with the Form Picker Property Editor
- **/
-function themePickerResource($http, umbRequestHelper) {
- //the factory object returned
-
- //TODO: Use the same way way in core to register URLs in Global Umbraco.Sys.ServerVariables
- var apiRoot = "backoffice/UmbracoForms/ThemePicker/";
-
- return {
-
- getThemes : function(){
- return umbRequestHelper.resourcePromise(
- $http.get(apiRoot + 'GetThemes'),
- "Failed to retrieve Form Themes to pick"
- );
- }
- };
-}
-
-angular.module('umbraco.resources').factory('themePickerResource', themePickerResource);
-
-/**
- * @ngdoc service
- * @name umbraco.resources.dashboardResource
- * @description Handles loading the dashboard manifest
- **/
-function updatesResource($http) {
- //the factory object returned
- var apiRoot = "backoffice/UmbracoForms/Updates/";
-
- return {
- getUpdateStatus: function () {
- return $http.get(apiRoot + "GetUpdateStatus");
- },
-
- installLatest: function (version) {
- return $http.get(apiRoot + "InstallLatest?version=" + version);
- },
-
- getVersion: function() {
- return $http.get(apiRoot + "GetVersion");
- },
-
- getSavePlainTextPasswordsConfiguration: function() {
- return $http.get(apiRoot + "GetSavePlainTextPasswordsConfiguration");
- }
- };
-}
-
-angular.module('umbraco.resources').factory('updatesResource', updatesResource);
-
-function workflowResource($http) {
-
- var apiRoot = "backoffice/UmbracoForms/Workflow/";
-
- return {
-
- getAllWorkflowTypesWithSettings: function () {
- return $http.get(apiRoot + "GetAllWorkflowTypesWithSettings");
- },
-
- getAllWorkflows: function (formGuid) {
- return $http.get(apiRoot + "GetAllWorkflows?formGuid=" + formGuid);
- },
-
- getScaffoldWorkflowType: function(workflowTypeId){
- return $http.get(apiRoot + "GetScaffoldWorkflowType?workflowTypeId="+ workflowTypeId);
- },
-
- validateWorkflowSettings: function(workflowViewModel){
- return $http.post(apiRoot + "ValidateWorkflowSettings", workflowViewModel);
- }
-
- };
-}
-
-angular.module('umbraco.resources').factory('workflowResource', workflowResource);
-
-angular.module("umbraco.directives")
- .directive('umbFormsAutoFocus', function($timeout) {
-
- return function(scope, element, attr){
-
- var update = function() {
-
- //if it uses its default naming
- if(element.val().indexOf(" field") >= 0){
- element.focus();
- }
-
- };
-
- $timeout(function() {
- update();
- });
-
-
- scope.$watch(attr.umbFormsFocusOn, function (_focusVal) {
- $timeout(function () {
- if (_focusVal) {
- element.focus();
- element.select();
- update();
- }
- });
- });
- };
-});
-
-angular.module("umbraco.directives")
- .directive('umbFormsAutoSize', function($timeout) {
-
- return function(scope, element, attr){
- var domEl = element[0];
- var update = function(force) {
-
- if(force === true){
- element.height(0);
- }
-
- if(domEl.scrollHeight !== domEl.clientHeight){
- element.height(domEl.scrollHeight);
- }
- };
-
-
- element.bind('keyup keydown keypress change', update);
- element.bind('blur', function(){ update(true); });
-
- $timeout(function() {
- update();
- });
- };
-});
-
-angular.module("umbraco.directives")
- .directive('umbFormsContentPicker', function (entityResource, iconHelper, editorService) {
- return {
- restrict: 'E',
- replace: true,
- templateUrl: '/App_Plugins/UmbracoForms/Directives/umb-forms-content-picker.html',
- require: "ngModel",
- link: function (scope, element, attr, ctrl) {
-
- ctrl.$render = function() {
- var val = parseInt(ctrl.$viewValue);
-
- if (!isNaN(val) && angular.isNumber(val) && val > 0) {
-
- entityResource.getById(val, "Document").then(function(item) {
- item.icon = iconHelper.convertFromLegacyIcon(item.icon);
- scope.node = item;
- });
- }
- };
-
- scope.openContentPicker = function () {
- var contentPickerOverlay = {
- submit: function(model) {
- populate(model.selection[0]);
- editorService.close();
- },
- close: function(){
- editorService.close();
- }
- };
-
- editorService.contentPicker(contentPickerOverlay);
- };
-
- scope.clear = function () {
- scope.id = undefined;
- scope.node = undefined;
- updateModel(0);
- };
-
- function populate(item) {
- scope.clear();
- item.icon = iconHelper.convertFromLegacyIcon(item.icon);
- scope.node = item;
- scope.id = item.id;
- updateModel(item.id);
- }
-
- function updateModel(id) {
- ctrl.$setViewValue(id);
-
- }
- }
- };
-});
-
-angular.module("umbraco.directives").directive('umbFormsDateRangePicker', function (assetsService) {
- return {
- restrict: 'A',
- scope: {
- userLocale: "@",
- onChange: "="
- },
- template: '
',
- link: function (scope, element) {
- assetsService.load([
- "~/App_Plugins/UmbracoForms/Assets/moment/min/moment-with-locales.min.js",
- "~/App_Plugins/UmbracoForms/Assets/BaremetricsCalendar/public/js/Calendar.js"
- ]).then(function () {
- new Calendar({
- element: element.firstChild,
- earliest_date: '2000-01-01',
- latest_date: moment(),
- start_date: moment().subtract(29, 'days'),
- end_date: moment(),
- same_day_range: true,
- callback: function () {
- // Date update/changed
- var dateFilter = {
- startDate: moment(this.start_date).format('YYYY-MM-DD'),
- endDate: moment(this.end_date).format('YYYY-MM-DD')
- };
-
- if (scope.onChange) {
- scope.onChange(dateFilter);
- }
- }
- });
- });
-
- // Load CSS as dependancy (load the seperate CSS for the editor to avoid it blocking our JS loading)
- assetsService.loadCss("/App_Plugins/UmbracoForms/Assets/BaremetricsCalendar/public/css/application.css");
- }
- };
-});
-
-angular.module("umbraco.directives")
- .directive('ufDelayedMouseleave', function ($timeout, $parse) {
- return {
- restrict: 'A',
- link: function (scope, element, attrs, ctrl) {
- var active = false;
- var fn = $parse(attrs.ufDelayedMouseleave);
- element.on("mouseleave", function(event) {
- var callback = function() {
- fn(scope, {$event:event});
- };
-
- active = false;
- $timeout(function(){
- if(active === false){
- scope.$apply(callback);
- }
- }, 650);
- });
-
- element.on("mouseenter", function(event, args){
- active = true;
- });
- }
- };
- });
-
-angular.module("umbraco.directives")
- .directive('umbFormsDesignerNew', function (formService, fieldResource, workflowResource, notificationsService, editorService, overlayService, localizationService) {
- return {
- scope: {
- form: "=",
- fieldtypes: "=",
- prevaluesources: "=",
- security: "="
- },
- transclude: true,
- restrict: 'E',
- replace: true,
- templateUrl: '/App_Plugins/UmbracoForms/Directives/umb-forms-designer-new.html',
- link: function (scope, element, attrs, ctrl) {
-
- scope.sortingMode = false;
- scope.sortingButtonKey = "general_reorder";
- scope.state = "";
-
- scope.ruleOperators = formService.getOperators();
- var operatorKeys = [];
- for (var i = 0; i < scope.ruleOperators.length; i++) {
- operatorKeys.push("formConditions_operator" + scope.ruleOperators[i].value);
- }
- localizationService.localizeMany(operatorKeys).then(function (labels) {
- for (var i = 0; i < scope.ruleOperators.length; i++) {
- scope.ruleOperators[i].name = labels[i];
- }
- });
-
-
- // *********************************************
- // Sorting management functions
- // *********************************************
-
-
- scope.setActive = function (fieldSet) {
-
- angular.forEach(scope.form.pages, function (page) {
- angular.forEach(page.fieldSets, function (fieldset) {
-
- if (fieldset.state === "active") {
- fieldset.state = "InActive";
- }
-
- });
- });
-
- fieldSet.state = "active";
- };
-
- scope.sortablePages = {
- distance: 10,
- tolerance: "pointer",
- opacity: 0.7,
- scroll: true,
- cursor: "move",
- placeholder: "umb-forms__page-placeholder",
- zIndex: 6000,
- handle: ".sortable-handle",
- items: ".sortable",
- start: function (e, ui) {
- ui.placeholder.height(ui.item.height());
- }
- };
-
- scope.sortableFieldsets = {
- distance: 10,
- tolerance: "pointer",
- connectWith: ".umb-forms__fieldsets",
- opacity: 0.7,
- scroll: true,
- cursor: "move",
- placeholder: "umb-forms__fieldset-placeholder",
- zIndex: 6000,
- handle: ".sortable-handle",
- items: ".sortable",
- start: function (e, ui) {
- ui.placeholder.height(ui.item.height());
- },
- over: function (e, ui) {
- scope.$apply(function () {
- $(e.target).scope().page.dropOnEmpty = true;
- });
- },
- out: function (e, ui) {
- scope.$apply(function () {
- $(e.target).scope().page.dropOnEmpty = false;
- });
- }
- };
-
- scope.sortableFields = {
- distance: 10,
- tolerance: "pointer",
- connectWith: ".umb-forms__fields",
- opacity: 0.7,
- scroll: true,
- cursor: "move",
- placeholder: "umb-forms__field-placeholder",
- zIndex: 6000,
- handle: ".sortable-handle",
- items: ".sortable",
- start: function (e, ui) {
- ui.placeholder.height(ui.item.height());
- },
- over: function (e, ui) {
- scope.$apply(function () {
- $(e.target).scope().container.dropOnEmpty = true;
- });
- },
- out: function (e, ui) {
- scope.$apply(function () {
- $(e.target).scope().container.dropOnEmpty = false;
- });
- }
- };
-
- scope.toggleSortingMode = function () {
- scope.sortingMode = !scope.sortingMode;
-
- if (scope.sortingMode) {
- scope.sortingButtonKey = "general_reorderDone";
- } else {
- scope.sortingButtonKey = "general_reorder";
- }
-
- };
-
- // *********************************************
- // Form management functions
- // *********************************************
- scope.initForm = function (form, fieldtypes) {
- formService.initForm(form, fieldtypes);
- };
-
- // *********************************************
- // Copy prompt
- // *********************************************
- scope.toggleCopyPrompt = function (object) {
- object.copyPrompt = !object.copyPrompt;
- };
-
- scope.hideCopyPrompt = function (object) {
- object.copyPrompt = false;
- };
-
- // *********************************************
- // Delete prompt
- // *********************************************
- scope.toggleDeletePrompt = function (object) {
- object.deletePrompt = !object.deletePrompt;
- };
-
- scope.hideDeletePrompt = function (object) {
- object.deletePrompt = false;
- };
-
- // *********************************************
- // Page management functions
- // *********************************************
-
- scope.addPage = function (form) {
- formService.addPage(form);
- };
-
- scope.removePage = function (pages, index) {
- pages.splice(index, 1);
- };
-
- scope.formHasFields = function (form) {
- var hasFields = false;
-
- angular.forEach(scope.form.pages, function (page) {
- angular.forEach(page.fieldSets, function (fieldset) {
- angular.forEach(fieldset.containers, function (container) {
- if (container.fields.length > 0) {
- hasFields = true;
- }
- });
- });
- });
-
- return hasFields;
- };
-
- scope.pageHasFields = function (page) {
-
- var hasFields = false;
-
- angular.forEach(page.fieldSets, function (fieldset) {
- angular.forEach(fieldset.containers, function (container) {
- if (container.fields.length > 0) {
- hasFields = true;
- }
- });
- });
-
- return hasFields;
-
- };
-
- scope.editPage = function (page) {
- populateFields();
-
- localizationService.localize("formEdit_editPage").then(function (val) {
- var pageSettingsOverlay = {
- view: "/App_Plugins/UmbracoForms/backoffice/Form/overlays/pagesettings/page-settings.html",
- title: val,
- page: page,
- fields: scope.fields,
- size: "medium"
- };
- editorService.open(pageSettingsOverlay);
- });
- };
-
- // *********************************************
- // Fieldset management functions
- // *********************************************
-
- scope.addFieldset = function (page) {
- // always add it last
- var _index = page.fieldSets.length;
- formService.addFieldset(page, _index);
- };
-
- scope.copyFieldset = function (page, fieldset) {
- fieldset.copyPrompt = false;
- formService.copyFieldset(page, fieldset, getExistingFieldAliases());
- };
-
- scope.removeFieldset = function (page, fieldset) {
- formService.deleteFieldset(page, fieldset);
- };
-
- scope.editFieldset = function (fieldset) {
- populateFields();
-
- localizationService.localize("formEdit_editGroup").then(function (val) {
- var fieldsetSettingsOverlay = {
- view: "/App_Plugins/UmbracoForms/backoffice/Form/overlays/fieldsetsettings/fieldset-settings.html",
- title: val,
- fieldset: fieldset,
- fields: scope.fields,
- size: "medium"
- };
- editorService.open(fieldsetSettingsOverlay);
- });
- };
-
-
- // *********************************************
- // Field management functions
- // *********************************************
-
- var addOrUpdateField = function (model, field) {
- field.settings = {};
-
- for (var i = 0; i < model.field.$fieldType.settings.length; i++) {
- var setting = model.field.$fieldType.settings[i];
- var key = setting.alias;
- var value = setting.value || "";
- field.settings[key] = value;
- }
-
- fieldResource.validateSettings(field).then(function (response) {
- if (response.data.length > 0) {
- localizationService.localize("formEdit_saveFailedFailedTitle").then(function (errorTitle) {
- angular.forEach(response.data, function (error) {
- notificationsService.error(errorTitle, error.Message);
- });
- });
- } else {
- editorService.close();
- }
- });
- };
-
- scope.addField = function (fieldset, container) {
-
- populateFields();
-
- var emptyField = formService.addEmptyField(container);
-
- localizationService.localize("formEdit_addQuestion").then(function (val) {
- var fieldSettingsEditor = {
- view: "/App_Plugins/UmbracoForms/backoffice/Form/overlays/fieldsettings/field-settings.html",
- title: val,
- field: emptyField,
- fields: scope.fields,
- size: "medium",
- prevalueSources: scope.prevaluesources,
- submit: function (model) {
- addOrUpdateField(model, emptyField);
- },
- close: function () {
- formService.deleteField(fieldset, container, emptyField);
- editorService.close();
- }
- };
- editorService.open(fieldSettingsEditor);
- });
- };
-
- scope.openFieldSettings = function (field) {
-
- populateFields();
-
- scope.setFieldType(field);
-
- localizationService.localize("formEdit_editQuestion").then(function (val) {
- var fieldSettingsOverlay = {
- view: "/App_Plugins/UmbracoForms/backoffice/Form/overlays/fieldsettings/field-settings.html",
- title: val,
- field: field,
- fields: scope.fields,
- size: "medium",
- prevalueSources: scope.prevaluesources,
- submit: function (model) {
- addOrUpdateField(model, field);
- },
- close: function () {
- editorService.close();
- }
- };
- editorService.open(fieldSettingsOverlay);
- });
- };
-
- scope.removeField = function (fieldset, container, field) {
- formService.deleteField(fieldset, container, field);
- };
-
- scope.copyField = function (container, field) {
- field.copyPrompt = false;
- formService.copyField(container, field, getExistingFieldAliases());
- };
-
- scope.setFieldType = function (field) {
-
- //set settings
- angular.forEach(field.settings, function (setting) {
- for (var key in field.settings) {
- if (field.settings.hasOwnProperty(key)) {
- if (_.where(field.$fieldType.settings, { alias: key }).length > 0) {
- _.where(field.$fieldType.settings, { alias: key })[0].value = field.settings[key];
- }
- }
- }
- });
-
- };
-
- // *********************************************
- // Field conditions
- // *********************************************
-
- scope.getFieldNameFromGuid = function (selectedFieldId) {
- populateFields();
- for (var i = 0; i < scope.fields.length; i++) {
- var field = scope.fields[i];
- if (field.id === selectedFieldId) {
- return field.caption;
- }
- }
- };
-
- scope.getRuleOperatorName = function (operator) {
- for (var i = 0; i < scope.ruleOperators.length; i++) {
- if (scope.ruleOperators[i].value === operator) {
- return scope.ruleOperators[i].name;
- }
- }
- return operator;
- };
-
- // *********************************************
- // Button functions
- // *********************************************
-
- scope.editWorkflows = function () {
-
- if (scope.security && scope.security.userSecurity.manageWorkflows) {
-
- populateFields();
-
- var oldFormWorkflows = angular.copy(scope.form.formWorkflows);
- var oldMessageOnSubmit = angular.copy(scope.form.messageOnSubmit);
- var oldGoToPageOnSubmit = angular.copy(scope.form.goToPageOnSubmit);
-
- localizationService.localize("formEdit_editQuestion").then(function (val) {
- var workflowOverlay = {
- view: "/App_Plugins/UmbracoForms/backoffice/Form/overlays/workflows/workflows-overview.html",
- title: val,
- formWorkflows: scope.form.formWorkflows,
- messageOnSubmit: scope.form.messageOnSubmit,
- goToPageOnSubmit: scope.form.goToPageOnSubmit,
- submitLabel: scope.form.submitLabel,
- manualApproval: scope.form.manualApproval,
- fields: scope.fields,
- size: "medium",
- submit: function (model) {
- scope.form.formWorkflows = model.formWorkflows;
- scope.form.messageOnSubmit = model.messageOnSubmit;
- scope.form.goToPageOnSubmit = model.goToPageOnSubmit;
-
- editorService.close();
- },
- close: function () {
- // reset the model
- scope.form.formWorkflows = oldFormWorkflows;
- scope.form.messageOnSubmit = oldMessageOnSubmit;
- scope.form.goToPageOnSubmit = oldGoToPageOnSubmit;
-
- editorService.close();
- }
- };
- editorService.open(workflowOverlay);
- });
- }
- };
-
- scope.editWorkflowSettings = function (workflow, collection, index) {
-
- if (scope.security && scope.security.userSecurity.manageWorkflows) {
-
-
- populateFields();
-
- // Take a clone of the original workflow so can reset if the changes aren't submitted.
- var preEditedWorkflow = JSON.parse(JSON.stringify(workflow));
-
- var workflowSettingsOverlay = {
- view: "/App_Plugins/UmbracoForms/backoffice/Form/overlays/workflows/workflow-settings.html",
- workflow: workflow,
- fields: scope.fields,
- title: workflow.name,
- size: "medium",
- submit: function (model) {
-
- // Validate settings
- workflowResource.validateWorkflowSettings(model.workflow).then(function (response) {
- if (response.data.length > 0) {
- localizationService.localize("formWorkflows_saveFailedTitle").then(function (errorTitle) {
- angular.forEach(response.data, function (error) {
- notificationsService.error(errorTitle, error.Message);
- });
- });
- } else {
- editorService.close();
- }
- });
- },
- close: function (hasChanges) {
- // Reset to original values after confirmation if changes were made and 'Submit' button was not used.
- if (hasChanges) {
- localizationService.localizeMany([
- "formWorkflows_closeConfirmationTitle",
- "formWorkflows_closeConfirmationMessage",
- "general_no",
- "general_yes"]).then(function (labels) {
- var overlay = {
- view: "confirm",
- title: labels[0],
- content: labels[1],
- closeButtonLabel: labels[2],
- submitButtonLabel: labels[3],
- submitButtonStyle: "danger",
- close: function () {
- // Keep workflow settings editor open.
- overlayService.close();
- },
- submit: function () {
- // Reset changes and close workflow settings editor.
- scope.form.formWorkflows[collection][index] = preEditedWorkflow;
- overlayService.close();
- editorService.close();
- }
- };
- overlayService.open(overlay);
- });
- } else {
- // No changes detected, so just close.
- editorService.close();
- }
- }
- };
-
- editorService.open(workflowSettingsOverlay);
- }
- };
-
- scope.editSubmitMessageWorkflow = function () {
-
- localizationService.localize("formWorkflows_messageOnSubmit").then(function (val) {
- var submitMessageWorkflowOverlay = {
- view: "/App_Plugins/UmbracoForms/backoffice/Form/overlays/workflows/submit-message-workflow-settings.html",
- title: val,
- messageOnSubmit: scope.form.messageOnSubmit,
- goToPageOnSubmit: scope.form.goToPageOnSubmit,
- size: "medium",
- submit: function (model) {
- scope.form.messageOnSubmit = model.messageOnSubmit;
- scope.form.goToPageOnSubmit = model.goToPageOnSubmit;
-
- editorService.close();
- },
- close: function () {
- editorService.close();
- }
-
- };
-
- editorService.open(submitMessageWorkflowOverlay);
- });
- };
-
- // *********************************************
- // Internal functions
- // *********************************************
- var populateFields = function () {
- scope.fields = [];
- angular.forEach(scope.form.pages, function (page) {
- angular.forEach(page.fieldSets, function (fieldset) {
- angular.forEach(fieldset.containers, function (container) {
- angular.forEach(container.fields, function (field) {
- scope.fields.push(field);
- });
- });
- });
- });
- };
-
- var getExistingFieldAliases = function () {
- var aliases = [];
- angular.forEach(scope.form.pages, function (page) {
- angular.forEach(page.fieldSets, function (fieldset) {
- angular.forEach(fieldset.containers, function (container) {
- angular.forEach(container.fields, function (field) {
- aliases.push(field.alias);
- });
- });
- });
- });
- return aliases;
- };
-
- scope.initForm(scope.form, scope.fieldtypes);
- }
- };
- });
-
-(function () {
- 'use strict';
-
- function FormsEntryDetail(userService, currentUserResource, editorService) {
-
- function link(scope, el, attr, ctrl) {
-
- scope.canLinkToContent = false;
- scope.canLinkToMembers = false;
- userService.getCurrentUser().then(function (user) {
-
- // First check the user can access the content section.
- var canAccessContentSection = user.allowedSections.indexOf("content") !== -1;
- if (canAccessContentSection) {
-
- // If so, also check they have permissions to browse the node with the id from where the form was posted.
- currentUserResource.checkPermission('F', scope.entry.umbracoPage.id)
- .then(function (data) {
- scope.canLinkToContent = data;
- });
- }
-
- // For members, just need to check access to section.
- scope.canLinkToMembers = user.allowedSections.indexOf("member") !== -1;
- });
-
- scope.openContent = function (id) {
- editorService.contentEditor(
- {
- id: id,
- close: function () {
- editorService.close();
- }
- });
- };
-
- var getMember = function (entry) {
- for (var i = 0; i < entry.fields.length; i++) {
- if (entry.fields[i] && entry.fields[i].ContentTypeAlias === "Member") {
- return entry.fields[i];
- }
- }
-
- return null;
- };
-
- scope.hasMember = function (entry) {
- return getMember(entry) !== null;
- };
-
- scope.getMemberDetails = function (entry) {
- var member = getMember(entry);
- if (member) {
- return member.Name + " (" + member.Email + ")";
- }
-
- return "";
- };
-
- scope.openMember = function (entry) {
- var member = getMember(entry);
- if (member) {
- editorService.memberEditor(
- {
- id: member.Key,
- close: function () {
- editorService.close();
- }
- });
- }
- };
-
- }
-
- var directive = {
- restrict: 'E',
- replace: true,
- templateUrl: '/App_Plugins/UmbracoForms/Directives/umb-forms-entry-detail.html',
- scope: {
- entry: '=',
- sensitiveDataAccess: '='
- },
- link: link
- };
-
- return directive;
- }
-
- angular.module('umbraco.directives').directive('umbFormsEntryDetail', FormsEntryDetail);
-
-})();
-
-angular.module("umbraco.directives")
- .directive('umbFormsFileUploadEditor', function (notificationsService, overlayService, localizationService) {
- return {
- restrict: 'E',
- replace: true,
- templateUrl: '/App_Plugins/UmbracoForms/Directives/umb-forms-file-upload-editor.html',
- require: "ngModel",
- link: function (scope, element, attr, ctrl) {
- localizationService.localizeMany(["formFileUpload_allowAllFiles", "formFileUpload_allowOnlySpecifiedFiles"]).then(function (labels) {
- scope.allowedFileTypes = [
- { Type: '', Name: labels[0], Checked: false },
- { Type: 'pdf', Name: 'PDF', Checked: false },
- { Type: 'docx', Name: "DOCX", Checked: false },
- { Type: 'xlsx', Name: "XLSX", Checked: false },
- { Type: 'txt', Name: "TXT", Checked: false },
- { Type: 'png', Name: "PNG", Checked: false },
- { Type: 'jpg', Name: "JPG", Checked: false },
- { Type: 'gif', Name: "GIF", Checked: false }
- ];
- scope.allowedFileTypesToggleTextOn = labels[0];
- scope.allowedFileTypesToggleTextOff = labels[1];
- });
- ctrl.$render = function () {
- if (Object.prototype.toString.call(ctrl.$viewValue) === '[object Array]') {
- ctrl.$viewValue.forEach(function (allowedFileType) {
- if (allowedFileType.Checked === undefined || allowedFileType.Checked === null) {
- allowedFileType.Checked = undefined;
- }
- else if (typeof (allowedFileType.Checked) === "string" && allowedFileType.Checked.toLowerCase() === 'false') {
- allowedFileType.Checked = false;
- }
- else if (typeof (allowedFileType.Checked) === "string" && allowedFileType.Checked.toLowerCase() === 'true') {
- allowedFileType.Checked = true;
- }
- });
- scope.allowedFileTypes = ctrl.$viewValue;
- }
- updateModel();
- };
- function updateModel() {
- ctrl.$setViewValue(scope.allowedFileTypes);
- }
- scope.deleteAllowedFileType = function (idx) {
- var performDelete = function () {
- scope.allowedFileTypes.splice(idx, 1);
- updateModel();
- };
- localizationService.localizeMany([
- "formFileUpload_deleteAllowedFileTypeConfirmationTitle",
- "formFileUpload_deleteAllowedFileTypeConfirmationDescription",
- "general_no",
- "general_yes"]).then(function (labels) {
- var overlay = {
- view: "confirm",
- title: labels[0],
- content: labels[1],
- closeButtonLabel: labels[2],
- submitButtonLabel: labels[3],
- submitButtonStyle: "danger",
- close: function () {
- overlayService.close();
- },
- submit: function () {
- performDelete();
- overlayService.close();
- }
- };
- overlayService.open(overlay);
- });
- };
- scope.addAllowedFileType = function () {
- if (!scope.newAllowedFileType) {
- return;
- }
- scope.newAllowedFileType = scope.newAllowedFileType.replace(/[^a-zA-Z0-9]/g, "");
- if (scope.newAllowedFileType.length === 0) {
- return;
- }
- var indexOfExisting = scope.allowedFileTypes.findIndex(function (p) { return p.Name.toUpperCase() === scope.newAllowedFileType.toUpperCase(); });
- //Check that our array does not already contain the same item
- if (indexOfExisting < 0) {
- scope.allowedFileTypes.push({ Type: scope.newAllowedFileType, Name: scope.newAllowedFileType.toUpperCase(), Checked: undefined });
- scope.newAllowedFileType = '';
- // Disable the "allow all" checkbox
- scope.allowedFileTypes.forEach(function (allowedFileType) {
- if (allowedFileType.Type === '') {
- allowedFileType.Checked = false;
- }
- });
- updateModel();
- } else {
- //Notify user they are trying to add a prevalue that already exists
- localizationService.localizeMany([
- "formFileUpload_duplicateFileTypeErrorTitle",
- "formFileUpload_duplicateFileTypeErrorMessage"]).then(function (labels) {
- notificationsService.error(labels[0], labels[1]);
- });
- }
- };
- scope.switchAllowedPredefined = function (allowedFileType, updateProvidedFileType) {
- // When updating from the "allow all files" toggle, we need to set the new "checked" value.
- // From the check-boxes, it's done for us.
- if (updateProvidedFileType) {
- allowedFileType.Checked = !allowedFileType.Checked;
- }
- if (allowedFileType !== undefined) {
- // When allowing all, disable all other checkboxes
- if (allowedFileType.Type === '' && allowedFileType.Checked === true) {
- scope.allowedFileTypes.forEach(function (allowedFileType) {
- if (allowedFileType.Type !== '' && allowedFileType.Checked !== undefined) {
- allowedFileType.Checked = false;
- }
- });
- }
- // When allowing a specific type and if All is enabled, disable all
- if (allowedFileType.Type !== '' && allowedFileType.Checked === true && allowedFileType.Checked !== undefined) {
- scope.allowedFileTypes.forEach(function (allowedFileType) {
- if (allowedFileType.Type === '') {
- allowedFileType.Checked = false;
- }
- });
- }
- updateModel();
- }
- };
- }
- };
- });
-
-angular.module("umbraco.directives")
- .directive('umbFormsInlinePrevalueEditor', function (notificationsService, localizationService) {
- return {
- restrict: 'E',
- replace: true,
- templateUrl: '/App_Plugins/UmbracoForms/Directives/umb-forms-inline-prevalue-editor.html',
- require: "ngModel",
- link: function (scope, element, attr, ctrl) {
- scope.prevalues = [];
-
- ctrl.$render = function () {
- if (Object.prototype.toString.call(ctrl.$viewValue) === '[object Array]') {
- scope.prevalues = ctrl.$viewValue;
- }
- };
-
- function updateModel() {
- ctrl.$setViewValue(scope.prevalues);
- }
-
- function addPrevalue() {
-
- //Check that our array does not already contain the same item
- if (scope.prevalues.indexOf(scope.newPrevalue) < 0) {
- scope.prevalues.push(scope.newPrevalue);
- scope.newPrevalue = '';
- updateModel();
- } else {
- //Notify user they are trying to add a prevalue that already exists
- localizationService.localizeMany([
- "formPrevalues_duplicateErrorTitle",
- "formPrevalues_duplicateAddErrorMessage"]).then(function (labels) {
- notificationsService.error(labels[0], labels[1]);
- });
- }
- }
-
- scope.addPrevalue = function () {
- addPrevalue();
- };
-
- }
- };
- });
-
-angular.module("umbraco.directives")
- .directive('umbFormsPrevalueEditor', function (notificationsService, localizationService) {
- return {
- restrict: 'E',
- replace: true,
- templateUrl: '/App_Plugins/UmbracoForms/Directives/umb-forms-prevalue-editor.html',
- require: "ngModel",
- link: function (scope, element, attr, ctrl) {
-
- scope.prevalues = [];
- scope.editIndex = -1;
- scope.deleteIndex = -1;
-
- scope.addLabel = "";
- scope.saveLabel = "";
- localizationService.localizeMany(["general_add", "buttons_save"]).then(function (labels) {
- scope.addLabel = labels[0];
- scope.saveLabel = labels[1];
- });
-
- ctrl.$render = function () {
- if (Object.prototype.toString.call(ctrl.$viewValue) === '[object Array]') {
- scope.prevalues = ctrl.$viewValue;
- }
- };
-
- function updateModel() {
- ctrl.$setViewValue(scope.prevalues);
- }
-
- scope.editPrevalue = function (idx) {
- scope.editIndex = idx;
- scope.newPrevalue = scope.prevalues[idx];
- };
-
- scope.deletePrevalue = function (idx) {
- scope.prevalues.splice(idx, 1);
- updateModel();
- };
-
- scope.addPrevalue = function () {
-
- // Check that our array does not already contain the same item (and if editing, make sure not to check against self).
- var otherPrevalues = scope.prevalues.slice();
- if (scope.isEditing()) {
- otherPrevalues.splice(scope.editIndex, 1);
- }
-
- if (otherPrevalues.indexOf(scope.newPrevalue) < 0) {
- if (scope.isEditing()) {
- scope.prevalues[scope.editIndex] = scope.newPrevalue;
- } else {
- scope.prevalues.push(scope.newPrevalue);
- }
-
- scope.newPrevalue = '';
- scope.editIndex = -1;
- updateModel();
- } else {
- // Notify user they are trying to add a prevalue that already exists.
- localizationService.localizeMany([
- "formPrevalues_duplicateErrorTitle",
- "formPrevalues_duplicateEditErrorMessage",
- "formPrevalues_duplicateAddErrorMessage"]).then(function (labels) {
- notificationsService.error(labels[0], scope.isEditing() ? labels[1] : labels[2]);
- });
- }
- };
-
- scope.cancelEditing = function () {
- scope.newPrevalue = '';
- scope.editIndex = -1;
- };
-
- scope.isEditing = function () {
- return scope.editIndex >= 0;
- };
-
- scope.showDeletePrompt = function (idx) {
- scope.deleteIndex = idx;
- };
-
- scope.isDeleting = function (idx) {
- return scope.deleteIndex === idx;
- };
-
- scope.hideDeletePrompt = function () {
- scope.deleteIndex = -1;
- };
-
- }
- };
- });
-
-(function () {
- 'use strict';
-
- function FormsRenderType() {
-
- var directive = {
- restrict: 'E',
- replace: true,
- templateUrl: '/App_Plugins/UmbracoForms/Directives/umb-forms-render-type.html',
- scope: {
- view: '=',
- field: '=',
- sensitive: '=',
- hasAccess: '=',
- name: '='
- }
- };
-
- return directive;
- }
-
- angular.module('umbraco.directives').directive('umbFormsRenderType', FormsRenderType);
-
-})();
-
-function formService(preValueSourceResource) {
-
- var generateGUID = function () {
- var d = new Date().getTime();
-
- var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
- var r = (d + Math.random() * 16) % 16 | 0;
- d = Math.floor(d / 16);
- return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16);
- });
-
- return uuid;
- };
-
- var generateCopiedAlias = function (alias, existingFieldAliases) {
-
- var result;
-
- // Check if the string already ends with a number, if so increment.
- var matches = alias.match(/\d+$/);
- if (matches) {
- var prefix = alias.substring(0, alias.length - matches[0].length);
- var existingNumberSuffix = parseInt(matches[0], 10);
- var newNumberSuffix = existingNumberSuffix + 1;
- result = prefix + newNumberSuffix;
- } else {
- // Otherwise just suffix with '2'
- result = alias + '2';
- }
-
- // Check it's not an existing alias.
- var clashesWithExistingAlias = false;
- for (var i = 0; i < existingFieldAliases.length; i++) {
- if (existingFieldAliases[i] === result) {
- clashesWithExistingAlias = true;
- break;
- }
- }
-
- // If it matches an existing alias, recursively call to generate another. Otherwise return the new, unique alias.
- return clashesWithExistingAlias ? generateCopiedAlias(result, existingFieldAliases) : result;
- };
-
- var service = {
- fieldTypes: [],
- actionTypes: [
- {
- name: "Show",
- value: "Show"
- },
- {
- name: "Hide",
- value: "Hide"
- }
- ],
- logicTypes: [
- {
- name: "all",
- value: "All"
- },
- {
- name: "any",
- value: "Any"
- }
- ],
- operators: [
- {
- name: "is",
- value: "Is"
- },
- {
- name: "is not",
- value: "IsNot"
- },
- {
- name: "is greater than",
- value: "GreaterThen"
- },
- {
- name: "is less than",
- value: "LessThen"
- },
- {
- name: "contains",
- value: "Contains"
- },
- {
- name: "starts with",
- value: "StartsWith"
- },
- {
- name: "ends with",
- value: "EndsWith"
- }
- ],
-
- getActionTypes: function () {
- return service.actionTypes;
- },
-
- getLogicTypes: function () {
- return service.logicTypes;
- },
-
- getOperators: function () {
- return service.operators;
- },
-
- initForm: function (form, fieldtypes) {
- service.fieldTypes = fieldtypes;
-
- if (!form.pages || form.pages.length === 0) {
- service.addPage(form);
- } else {
-
- _.each(service.getAllFields(form), function (field) {
-
- if (!field.$fieldType) {
- service.setFieldType(field, field.fieldTypeId);
- }
-
- });
- }
- },
-
- addPage: function (form, index) {
- var p = { caption: "", fieldSets: [], id: generateGUID() };
- service.addFieldset(p);
-
- if (form.pages.length > index) {
- form.pages.splice(index, 0, p);
- } else {
- form.pages.push(p);
- }
- },
-
- addFieldset: function (page, index) {
- var fs = { caption: "", containers: [], id: generateGUID() };
- service.addContainer(fs);
-
- if (page.fieldSets.length > index) {
- page.fieldSets.splice(index, 0, fs);
- } else {
- page.fieldSets.push(fs);
- }
- },
-
- copyFieldset: function (page, fieldset, existingFieldAliases) {
- var index = page.fieldSets.indexOf(fieldset);
- if (index >= 0) {
- service.copyFieldsetAtIndex(page, fieldset, index, existingFieldAliases);
- }
- },
-
- copyFieldsetAtIndex: function (page, fieldset, index, existingFieldAliases) {
- var copiedFieldset = JSON.parse(JSON.stringify(fieldset)); // Need to do a full clone here to ensure that the container and field collections are new objects.
- copiedFieldset.id = generateGUID();
-
- for (var i = 0; i < copiedFieldset.containers.length; i++) {
- for (var j = 0; j < copiedFieldset.containers[i].fields.length; j++) {
- var copiedField = copiedFieldset.containers[i].fields[j];
- copiedField.id = generateGUID();
- copiedField.alias = generateCopiedAlias(copiedField.alias, existingFieldAliases);
- existingFieldAliases.push(copiedField.alias); // Make sure to add the generated alias to the list of existing ones, so it's used in further duplicate checks.
- }
- }
-
- page.fieldSets.splice(index + 1, 0, copiedFieldset);
- },
-
- deleteFieldset: function (page, fieldset) {
- if (page.fieldSets.length > 1) {
- var index = page.fieldSets.indexOf(fieldset);
- page.fieldSets.splice(index, 1);
- } else {
- fieldset.containers.length = 0;
- service.addContainer(fieldset);
- }
- },
-
- deleteFieldsetAtIndex: function (page, index) {
- if (page.fieldSets.length > 1) {
- page.fieldSets.splice(index, 1);
- } else {
- fieldset.containers.length = 0;
- service.addContainer(fieldset);
- }
- },
-
- splitFieldset: function (page, fieldset, container, splitAtIndex) {
-
- var newfieldset = { caption: "", containers: [{ caption: "", fields: [] }] };
- var insertAt = page.fieldSets.indexOf(fieldset);
-
- page.fieldSets.splice(insertAt + 1, 0, newfieldset);
-
- var oldFields = container.fields.slice(0, splitAtIndex + 1);
- var newFields = container.fields.slice(splitAtIndex + 1);
-
- newfieldset.containers[0].fields = newFields;
- container.fields = oldFields;
- },
-
- addContainer: function (fieldset, index) {
- var c = { caption: "", fields: [] };
-
- if (fieldset.containers.length > index) {
- fieldset.containers.splice(index, 0, c);
- } else {
- fieldset.containers.push(c);
- }
- },
-
- splitContainer: function (fieldset, container, splitAtIndex) {
-
- var newContainer = { caption: "", fields: [] };
- var insertAt = fieldset.containers.indexOf(container);
-
- fieldset.containers.splice(insertAt - 1, 0, newContainer);
- var newFields = container.fields.slice(0, splitAtIndex + 1);
- var oldFields = container.fields.slice(splitAtIndex + 1);
-
- newContainer.fields = newFields;
- container.fields = oldFields;
- },
-
- deleteContainer: function (fieldset, container) {
- //only delete the container if there are multiple ones on this fieldseet
- //otherwise keep it and just clear its contents
- if (fieldset.containers.length > 1) {
- var index = fieldset.containers.indexOf(container);
- if (index >= 0) {
- service.deleteContainerAtIndex(fieldset, index);
- }
- } else {
- container.fields.length = 0;
- }
- },
-
- deleteContainerAtIndex: function (fieldset, index) {
-
- if (fieldset.containers.length > 1) {
- fieldset.containers.splice(index, 1);
- } else {
- fieldset.containers.length = 0;
- }
- },
-
-
- syncContainerWidths: function (form) {
- _.each(form.pages, function (page) {
- _.each(page.fieldSets, function (fieldset) {
- var containers = fieldset.containers.length;
- var avrg = Math.floor(12 / containers);
- _.each(fieldset.containers, function (container) {
- container.width = avrg;
- });
- });
- });
- },
-
- addField: function (container, fieldtype, index) {
- var newField = {
- caption: "",
- id: generateGUID(),
- settings: {},
- preValues: [],
- $focus: true
- };
-
- service.loadFieldTypeSettings(newField, fieldtype);
-
- if (container.fields.length > index) {
- container.fields.splice(index, 0, newField);
- } else {
- container.fields.push(newField);
- }
-
- },
-
- addEmptyField: function (container) {
-
- var newField = {
- caption: "",
- alias: "",
- id: generateGUID(),
- settings: {},
- preValues: [],
- $focus: true
- };
-
- container.fields.push(newField);
-
- return newField;
-
- },
-
- getAllFields: function (form) {
- var fields = [];
- if (form.pages) {
- _.each(form.pages, function (page) {
- if (page.fieldSets) {
- _.each(page.fieldSets, function (fieldset) {
- if (fieldset.containers) {
- _.each(fieldset.containers, function (container) {
- if (container.fields) {
- _.each(container.fields, function (field) {
- fields.push(field);
- });
- }
- });
- }
- });
- }
- });
- }
-
- return fields;
- },
-
- copyField: function (container, field, existingFieldAliases) {
- var index = container.fields.indexOf(field);
- if (index >= 0) {
- service.copyFieldAtIndex(container, field, index, existingFieldAliases);
- }
- },
-
- copyFieldAtIndex: function (container, field, index, existingFieldAliases) {
- var copiedField = JSON.parse(JSON.stringify(field)); // Ensure a deep clone of the field.
- copiedField.id = generateGUID();
- copiedField.alias = generateCopiedAlias(field.alias, existingFieldAliases);
- container.fields.splice(index + 1, 0, copiedField);
- },
-
- deleteField: function (fieldset, container, field) {
- var index = container.fields.indexOf(field);
- if (index >= 0) {
- service.deleteFieldAtIndex(fieldset, container, index);
- }
- },
-
- deleteFieldAtIndex: function (fieldset, container, index) {
- container.fields.splice(index, 1);
- if (container.fields.length === 0) {
- service.deleteContainer(fieldset, container);
- }
- },
-
- setFieldType: function (field, fieldTypeId) {
- //get field type
- field.fieldTypeId = fieldTypeId;
-
- var fldt = _.find(service.fieldTypes, function (ft) { return ft.id === field.fieldTypeId; });
- field.$fieldType = fldt;
-
- service.loadFieldTypeSettings(field, field.$fieldType);
-
-
- service.loadFieldTypePrevalues(field);
-
- },
-
- loadFieldTypePrevalues: function (field) {
-
- if (field.prevalueSourceId !== null && field.prevalueSourceId !== "00000000-0000-0000-0000-000000000000") {
-
- preValueSourceResource.getPreValuesByGuid(field.prevalueSourceId)
- .then(function (response) {
- field.$preValues = response.data;
-
- });
- } else {
- field.$preValues = null;
- }
-
- },
-
- loadFieldTypeSettings: function (field, fieldtype) {
-
- var stng = angular.copy(fieldtype.settings);
-
- if (field.fieldTypeId !== fieldtype.id) {
- field.settings = {};
- }
-
- field.fieldTypeId = fieldtype.id;
- field.$fieldType = fieldtype;
-
- if (fieldtype.settings) {
- _.each(fieldtype.settings, function (setting) {
- if (!field.settings[setting.alias]) {
- field.settings[setting.alias] = "";
- }
- });
- }
- },
-
-
- deleteConditionRule: function (rules, rule) {
- var index = rules.indexOf(rule);
- rules.splice(index, 1);
- },
-
- addConditionRule: function (condition) {
- if (!condition.rules) {
- condition.rules = [];
- }
-
- condition.rules.push({
- field: condition.$newrule.field,
- operator: condition.$newrule.operator,
- value: condition.$newrule.value
- });
- },
-
- addEmptyConditionRule: function (condition) {
- if (!condition.rules) {
- condition.rules = [];
- }
-
- condition.rules.push({
- field: "",
- operator: "",
- value: ""
- });
- },
-
- populateConditionRulePrevalues: function (selectedField, rule, fields) {
-
- for (var i = 0; i < fields.length; i++) {
- var field = fields[i];
-
- if (field.id === selectedField) {
-
- // prevalues and be stored in both $preValues and preValues
- if (field.$preValues && field.$preValues.length > 0) {
-
- rule.$preValues = field.$preValues;
-
- } else if (field.preValues && field.preValues.length > 0) {
-
- var rulePreValuesObjectArray = [];
-
- // make prevalues to object array
- for (var preValueIndex = 0; preValueIndex < field.preValues.length; preValueIndex++) {
-
- var preValue = field.preValues[preValueIndex];
- var preValueObject = {
- value: preValue
- };
-
- rulePreValuesObjectArray.push(preValueObject);
- }
-
- rule.$preValues = rulePreValuesObjectArray;
-
- } else {
- rule.$preValues = null;
- }
-
- }
- }
-
- }
-
- };
-
- return service;
-}
-angular.module('umbraco.services').factory('formService', formService);
-
-(function () {
- 'use strict';
-
- function validationService() {
-
- function getErrorMessageFromExceptionResponse(err) {
-
- var errorMessage = err.data.Message;
- if (err.data.ModelState) {
- var modelStateValues = Object.keys(err.data.ModelState).map(function (key) {
- return err.data.ModelState[key][0];
- });
- errorMessage = modelStateValues.join(" ");
- }
-
- return errorMessage;
- }
-
- var service = {
- getErrorMessageFromExceptionResponse: getErrorMessageFromExceptionResponse
- };
-
- return service;
- }
-
- angular.module('umbraco.services').factory('formsValidationService', validationService);
-
-})();
-
-(function () {
- 'use strict';
-
- function providerLocalizationHelper() {
-
- var convertNameForKey = function (name) {
- // Hat-tip: https://stackoverflow.com/a/2970667
- return name.replace(/(?:^\w|[A-Z]|\b\w)/g, function (word, index) {
- return index === 0 ? word.toLowerCase() : word.toUpperCase();
- }).replace(/\W+/g, '');
- };
-
- var getLocalizationKeys = function (stem, types, name) {
- var keys = [];
- for (var i = 0; i < types.length; i++) {
- var systemName = name || types[i].name; // 'name' will be provided if we're working with an instance of a type, e.g. a
- // workflow, when we'll also have a single-element array.
- var keyStem = stem + "_" + convertNameForKey(systemName);
-
- // Add keys for the type's name and description.
- keys.push(keyStem + "Name");
- keys.push(keyStem + "Description");
-
- // Add keys for each setting.
- if (types[i].settings) {
- for (var j = 0; j < types[i].settings.length; j++) {
- var keySettingStem = keyStem + types[i].settings[j].alias;
- keys.push(keySettingStem + "Label");
- keys.push(keySettingStem + "Description");
- }
- }
- }
-
- return keys;
- };
-
- var getLocalizationKeysForFormWorkflows = function (formWorkflows) {
- var keys = [];
-
- var stem = "formProviderWorkflows";
-
- var getKeysForWorkflows = function (workflows, keys) {
- for (var i = 0; i < workflows.length; i++) {
- var keyStem = stem + "_" + convertNameForKey(workflows[i].workflowTypeName);
-
- // Add keys for the workflow's name and description.
- keys.push(keyStem + "Name");
- keys.push(keyStem + "Description");
- }
- };
-
- getKeysForWorkflows(formWorkflows.onSubmit, keys);
- getKeysForWorkflows(formWorkflows.onApprove, keys);
-
- return keys;
- };
-
- var labelIsTranslated = function (label) {
- // If localized label is in []s, it means we didn't localize the key.
- return !(label[0] === "[" && label[label.length - 1] === "]");
- };
-
- var applyLocalizationLabels = function (types, labels, omitSettingName) {
- var labelIndex = 0;
- for (var i = 0; i < types.length; i++) {
-
- // Update the name and description (we omit setting the name when working with an instance of a type, e.g. a workflow).
- if (!omitSettingName && labelIsTranslated(labels[labelIndex])) {
- types[i].name = labels[labelIndex];
- }
- labelIndex++;
- if (labelIsTranslated(labels[labelIndex])) {
- types[i].description = labels[labelIndex];
- }
- labelIndex++;
-
- // Update the settings.
- if (types[i].settings) {
- for (var j = 0; j < types[i].settings.length; j++) {
- if (labelIsTranslated(labels[labelIndex])) {
- // Got a localized key, so set it on the type. Otherwise we leave the English label and
- // description defined on the Setting attribute.
- types[i].settings[j].name = labels[labelIndex];
- types[i].settings[j].description = labels[labelIndex + 1];
- }
- labelIndex = labelIndex + 2; // incerement by 2 as we have two localized labels for each setting (label and description).
- }
- }
- }
- };
-
- var applyLocalizationLabelsToFormWorkflows = function (formWorkflows, labels) {
-
- var applyToWorkflows = function (workflows, labels, labelIndex) {
- for (var i = 0; i < workflows.length; i++) {
- // Update the name and description.
- if (labelIsTranslated(labels[labelIndex])) {
- workflows[i].workflowTypeName = labels[labelIndex];
- }
- labelIndex++;
- if (labelIsTranslated(labels[labelIndex])) {
- workflows[i].workflowTypeDescription = labels[labelIndex];
- }
- labelIndex++;
- }
-
- return labelIndex;
- };
-
- var nextLabelIndex = applyToWorkflows(formWorkflows.onSubmit, labels, 0);
- applyToWorkflows(formWorkflows.onApprove, labels, nextLabelIndex);
- };
-
- var service = {
- getLocalizationKeys: getLocalizationKeys,
- getLocalizationKeysForFormWorkflows: getLocalizationKeysForFormWorkflows,
- applyLocalizationLabels: applyLocalizationLabels,
- applyLocalizationLabelsToFormWorkflows: applyLocalizationLabelsToFormWorkflows
- };
-
- return service;
- }
-
- angular.module('umbraco.services').factory('providerLocalizationHelper', providerLocalizationHelper);
-
-})();
-
-/**
- * Compares two software version numbers (e.g. "1.7.1" or "1.2b").
- *
- *
- * @param {string} v1 The first version to be compared.
- * @param {string} v2 The second version to be compared.
- * @param {object} [options] Optional flags that affect comparison behavior:
- *
- *
- * lexicographical: true compares each part of the version strings lexicographically instead of
- * naturally; this allows suffixes such as "b" or "dev" but will cause "1.10" to be considered smaller than
- * "1.2".
- *
- *
- * zeroExtend: true changes the result if one version string has less parts than the other. In
- * this case the shorter string will be padded with "zero" parts instead of being considered smaller.
- *
- *
- * @returns {number|NaN}
- *
- * 0 if the versions are equal
- * a negative integer iff v1 < v2
- * a positive integer iff v1 > v2
- * NaN if either version string is in the wrong format
- *
- */
-
-(function () {
- 'use strict';
-
- function utilityService() {
-
- function compareVersions(v1, v2, options) {
-
- var lexicographical = options && options.lexicographical,
- zeroExtend = options && options.zeroExtend,
- v1parts = v1.split('.'),
- v2parts = v2.split('.');
-
- function isValidPart(x) {
- return (lexicographical ? /^\d+[A-Za-z]*$/ : /^\d+$/).test(x);
- }
-
- if (!v1parts.every(isValidPart) || !v2parts.every(isValidPart)) {
- return NaN;
- }
-
- if (zeroExtend) {
- while (v1parts.length < v2parts.length) {
- v1parts.push("0");
- }
- while (v2parts.length < v1parts.length) {
- v2parts.push("0");
- }
- }
-
- if (!lexicographical) {
- v1parts = v1parts.map(Number);
- v2parts = v2parts.map(Number);
- }
-
- for (var i = 0; i < v1parts.length; ++i) {
- if (v2parts.length === i) {
- return 1;
- }
-
- if (v1parts[i] === v2parts[i]) {
- continue;
- } else if (v1parts[i] > v2parts[i]) {
- return 1;
- } else {
- return -1;
- }
- }
-
- if (v1parts.length !== v2parts.length) {
- return -1;
- }
-
- return 0;
- }
-
- function serverTimeNeedsOffsetting() {
- //Check if we need to do server time offset to the date we are displaying
- var needsOffsetting = false;
- var serverOffset = 0;
-
- //Check we have a serverTimeOffset in the Umbraco global JS object
- if (Umbraco.Sys.ServerVariables.application.serverTimeOffset !== undefined) {
-
- // C# server offset
- // Will return something like 120
- serverOffset = Umbraco.Sys.ServerVariables.application.serverTimeOffset;
-
- //Current local user's date/time offset in JS
- // Will return something like -120
- var localOffset = new Date().getTimezoneOffset();
-
- // If these aren't equal then offsetting is needed
- // note the minus in front of serverOffset needed
- // because C# and javascript return the inverse offset
- needsOffsetting = (-serverOffset !== localOffset);
- }
-
- return needsOffsetting;
- }
-
- function hexHtmlToString(s) {
- // Hat-tip: https://stackoverflow.com/a/70081499/489433
- var REG_HEX = /([a-fA-F0-9]+);/g;
- return s.replace(REG_HEX, function (match, grp) {
- var num = parseInt(grp, 16);
- return String.fromCharCode(num);
- });
- }
-
- var service = {
-
- compareVersions: compareVersions,
- serverTimeNeedsOffsetting: serverTimeNeedsOffsetting,
- hexHtmlToString: hexHtmlToString
-
- };
-
- return service;
-
- }
-
-
- angular.module('umbraco.services').factory('utilityService', utilityService);
-
-
-})();
-
-
-// Testing if filter already exists, otherwise we will create it.
-angular.module("umbraco.filters").config(function($injector, $provide) {
- if($injector.has('truncateFilter')) {
- // Yep, we already got the filter!
- } else {
-
- // injecting the filter on the provider, notice we need to add 'Filter' to the name for it to be a filter.
- $provide.provider('truncateFilter', function() {
- return {
- $get: function () {
-
- // Filter code
- return function (value, wordwise, max, tail) {
-
- if (!value) return '';
-
- /*
- Overload-fix to support Forms Legacy Version:
-
- We are making this hack to support the old version of the truncate filter.
- The old version took different attributes, this code block checks if the first argument isnt a boolean, meaning its not the new version, meaning that the filter is begin used in the old way.
- Therefor we use the second argument(max) to indicate wether we want a tail (…) and using the first argument(wordwise) as the second argument(max amount of characters)
- */
- if (typeof(wordwise) !== 'boolean') {
- // switch arguments around to fit Forms version.
- if (max !== true) {
- tail = '';
- }
- max = wordwise;
- wordwise = false;
- }
- // !end of overload fix.
-
- max = parseInt(max, 10);
- if (!max) return value;
- if (value.length <= max) return value;
-
- tail = (!tail && tail !== '') ? '…' : tail;
-
- if (wordwise && value.substr(max, 1) === ' ') {
- max++;
- }
- value = value.substr(0, max);
-
- if (wordwise) {
- var lastspace = value.lastIndexOf(' ');
- if (lastspace !== -1) {
- value = value.substr(0, lastspace+1);
- }
- }
-
- return value + tail;
- };
- }
- }
- });
- }
-});
-
-angular.module('umbraco.filters').filter('fileName', function() {
-
- return function(input) {
-
- // The input will be a path like so, we just want my-panda-photo.jpg
- // /media/forms/upload/f2ab8761-6a75-4c9d-a281-92e5e508856a/my-panda-photo.jpg
-
- input = input.split('\\').pop().split('/').pop();
-
- return input;
- };
-
-});
-angular.module('umbraco.filters').filter('momentDateTimeZone', function($filter) {
-
- return function (input, momentFormat) {
- var parseDate = moment.utc(input);
- return parseDate.format(momentFormat);
- };
-
-});
-
-angular.module('umbraco.filters').filter('relativeDate', function($filter) {
-
- return function (input) {
-
- var now = moment();
- //Hack: Removing the Z so that moment doesn't apply an offset to the time when parsing it
- var parseDate = moment(input.replace("Z", ""));
-
- //Check the date is valid
- if(parseDate.isValid() === false){
- //Parse the value through the default date filter with the value & setting the param/format to medium {{ value | date:'medium' }}
- return $filter('date')(input, 'medium');
- }
-
- return parseDate.from(now);;
- };
-
-});
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/lang/en-gb.xml b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/lang/en-gb.xml
deleted file mode 100644
index 7d44c62..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/lang/en-gb.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
- Used to organise forms
-
-
-
- Check this box to save submitted records in a database.
- This will allow you to view and export them from the queries overview.
- If you don't want to store data (due to policies in your organisation), leave the box un-checked.
-
-
-
-
- Exports all files uploading in form submissions to a zip archive, organised as the files are stored on disk.
- Exports all files uploading in form submissions to a zip archive, organised in a sub-folder per entry.
-
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/lang/en-us.xml b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/lang/en-us.xml
deleted file mode 100644
index b4dab45..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/lang/en-us.xml
+++ /dev/null
@@ -1,689 +0,0 @@
-
-
-
- Forms
-
-
- Your forms
- Show more
- Entries
- There is a new version available
- Congratulations
- You've just installed Umbraco Forms - Let's create your first form
- Create a form
- You do not have any forms setup yet, how about creating one now?
- Create a form
- There is a new version available
- You can now install Umbraco Forms
- Upgrade now
- Downloading and upgrading forms...
- Invalid license
- Your current Forms license is only valid for:
- Please re-configure your license below.
- Thank you for trying out Umbraco Forms
- To continue using Umbraco Forms, you must purchase a license, or use an existing license
- Configure existing license
- Buy license
- Buying a license
-
-
- It only takes a few minutes to buy a license for Umbraco Forms and your license is instantly delivered .
-
-
- The steps are:
-
- Click the buy button below
- Checkout with Credit Card (or invoice)
- Configure the license inside Umbraco Forms and you're up and running
-
-
- ]]>
-
- Buy Umbraco Forms
-
- FAQ:
- What does it cost?
- Pricing starts at €209 and is a one time fee (no subscription).
- What does a license cover?
- A license covers a single domain and will also work on all subdomains. It also includes two additional development domains.
- Can I add additional domains to the license?
- Yes, additional domains can be added. You can purchase additional domains to your license from your account on Umbraco.com.
- More questions?
-
- Don't worry, there's more details in the documentation and you're also more than welcome to get in touch with us . We usually respond within a couple of hours.
-
- ]]>
-
- Configure an Umbraco Forms license
-
- If you've already bought Umbraco Forms, you can automatically retrieve and configure your license here. Simply enter your umbraco.com credentials below and we'll
- find your license.
-
-
- FAQ:
- I don't know what my credentials are?
-
- It's a combination of your e-mail and password from when you placed your order. You can always reset your password here .
-
- How do I buy a license?
-
- If you don't have a license, you can get one from here and only takes a few minutes .
-
- ]]>
-
- Find Licenses
- Invalid email or password
- No Umbraco Forms licenses available on this account
- Available Licenses
- Found
- on the account
- Has no domains assigned
- Please set a domain on this license
- Configure and Install
- Install this license
- Valid domains
- This license is valid on the curent domain
- This license is not valid on the curent domain
-
- Warning: your configuration settings are set to save plain text passwords!
- When you use a password field on any of your forms, the data your visitors will enter in that field will be stored in plain text. This is a security issue and should be avoided.
- To fix this issue, you can go in to your Umbraco:Forms:Security:SavePlainTextPasswords file and set the key SavePlainTextPasswords to False .
- After updating this setting, make sure to recycle the application pool for the site for the new setting to become active.
- Note: password values will still be passed on to workflows, regardless of the setting in configuration.
- ]]>
-
- Current installed version of Umbraco Forms:
- License configured
- Umbraco Forms has been configured for use on this website.
- Insufficient Permissions
- You do not have permissions to create and manage forms.
- Only Admin users have the ability to upgrade Umbraco Forms.
- Licensed domains
-
-
- Copying form '%0%'
- Enter a name for the copied form
- Also copy workflows?
- Copy to a new folder?
- Select the location for copied form
-
-
- Create a new form or folder
- Empty form
- Starting from scratch
- Folder
- Used to organize forms
- Enter a folder name
-
-
- Access denied
-
-
- Please check if your settings are valid.
-
-
- Add question
- Group is empty
- Drop a question here...
- Yaay.. let go
- Page is empty
- Drop a group here...
- Add new group
- Add new page
- Untitled page (optional)
- Untitled group (optional)
- Field failed to save
- You do not have access to edit this form.
- Form saved
- Unable to load form
- Help text
- Edit Page
- Edit Group
- Add Question
- Edit Question
- Workflows
-
-
- Allow all files
- Allow only specified files
- Predefined allowed file types
- User defined allowed file types
- Confirmation
- Are you sure you want to delete this?
- File type error
- Unable to add file type as this is a duplicate.
- Pick File
- Uploading
- Current file
-
-
- Add new item here
- Prevalue error
- Unable to add value as it would create a duplicate.
- Unable to edit value as it would create a duplicate.
-
-
- Are you sure you want to delete the %0% '%1%'?
- Please note this can take lots of time depending on the number of records.
- The selected folder cannot be deleted as it is not empty.
- Successfully deleted the form.
- Form failed to delete.
- Successfully deleted the folder.
- Folder failed to delete.
-
-
- %0% Entries
- Filter entries...
- %0% of %1% selected
- Export
- Choose a format to export form records to
- Currently submissions are not stored in the database.
- To enable this, go to form settings and activate the "Store Records" feature.
- No submissions added yet in this date range.
- We couldn't find any submissions, are you sure you published the form? Or try expanding the date range.
- We couldn't find any submissions matching your search.
- Try searching for something else, maybe you're lucky next time.
- Entry %0% of %1%
- Previous entry
- Next entry
- You do not have access to view this form's entries.
- Executed action
- Successfully executed action %0%
- Failed to execute action %0% due to error: %1%.
- Entry details
- Close details
- Submitted on
- Updated on
- From page
- Member
- State
- Unique ID
-
-
- %0% to in the tree structure below.]]>
- %0% was moved underneath %1% .]]>
- Moved
- The form was moved to the selected location.
- The folder was moved to the selected location.
-
-
- Enter the new name
- Renamed
- The folder was renamed.
-
-
- Conditions
- Enable conditions
- Show
- Hide
- all
- any
- is
- is not
- is greater than
- is less than
- contains
- starts with
- ends with
- this fieldset if
- of the following match
- Select field
- Add condition
- Optionally define conditions for the display of the "Submit" or "Next" button for the page.
-
- %1% of the following match:]]>
-
-
- %1% of the following match:]]>
-
-
- %1% of the following match:]]>
-
-
-
- No themes available. Add themes to /Views/Partials/Forms/Themes
-
-
- Workflow Name
- Give a descriptive name for your workflow
- Active
- Enable or disable the workflow
- Include Sensitive Data
- Include sensitive data when executing this workflow?
- Submit message / Go to page
- Approve
- automatic
- No workflows are added
- configure workflow
- Workflow failed to save
- Confirmation
- Changes have been made which have not been saved. Are you sure you wish to close?
- Choose workflow
- On
- On Submit
- We will run these workflows for you when the form is submitted
- On Approve
- These workflows will run when the entry is approved
- this happens automatically after the submit event with the current form settings
- Submit message / Go to page
- Show a message when the form is submitted or go to an Umbraco page
- Add workflow
- Message on submit
- Show a message when the form is submitted
- Go to page
- Go to an Umbraco page when the form is submitted
-
-
- Columns
- Set how many columns you wish to have in your group.
- This group currently has %0%.
- Add column
-
-
- Enter question...
- Enter help text...
- Required label
- Choose answer type
- Sensitive data
- Prevent the data from being viewed and exported if a user doesn't have sufficient permissions.
- Yes, this field stores sensitive data
- Allowed file upload types
- Prevalues
- Either provide here a list of options (prevalues) specific for this field, or select a predefined prevalue source.
- Provides a list of options (prevalues) for the field.
- Items
- Prevalue source
- Press enter to add a value
- Settings
- Mandatory
- Enter a regular expression
- Enter a field invalid message...
- Allow multiple file uploads
- Multiple files allowed
- Single file only
-
-
- Store Records
-
- Check this box to save submitted records in a database.
- This will allow you to view and export them from the queries overview.
- If you don't want to store data (due to policies in your organization), leave the box un-checked.
-
- Yes, keep submitted records in a database so they can be viewed and exported later.
- Captions
- Change the captions for the Submit, Next and Previous buttons.
- 'Submit' button label
- 'Next' button label
- 'Previous' button label
- Styling
- Add one or more classes to wrap your form to enable custom styling, or disable default styling.
- Form CSS class
- Disable default stylesheet
- Validation
- Provide better validation messages, hide validation labels and change or disable the required/mandatory marker.
- Mandatory Error Message
- Message to display when a mandatory field was left empty
- Invalid Error Message
- Message to display when a field is invalid
- Show validation summary
- Hide field validation labels
- Mark fields
- No Indicator
- Mark Mandatory Fields
- Mark Optional Fields
- Indicator
- Change the mandatory indicator symbol
- Autocomplete
- Add an attribute to control the overall form's autocompletion behaviour.
- None
- On
- Off
- Moderation
- Allow form submissions to be post moderated. Most use cases are for publicly shown entries such as blog post comments or submissions for a social campaign.
- Enable post moderation
-
-
- User form security saved
- User form security failed to save
- Manage Forms
- Grant or deny access to managing forms
- Manage Workflows
- Grant or deny access to managing all forms workflow items
- Manage Data Sources
- Grant or deny access to managing any data sources for all forms
- Manage Prevalue Sources
- Grant or deny access to managing any prevalue sources for all forms
- Form Security
- Grant or deny access to individual forms
- Form name
- Has Access
-
-
- Select the type of data source
- Create form
- Form Name
- Select fields
- Fields from the datasource you wish to include in the form.
- Setup foreign keys
- Select the value column for foreign key fields.
- Select type
- Field type you wish to use for the included fields (or default value).
- Default value
- Are you sure you want to delete the data source %0%?
- Datasource saved
- Datasource failed to save
- You do not have access to edit datasources
-
-
- Select the type of prevalue source
- Are you sure you want to delete the prevalue source %0%?
- Prevalue source saved
- Prevalue source failed to save
- You do not have access to edit prevalue sources
-
-
-
- Checkbox
- Renders a checkbox.
- Default Value
- Enter a default value.
-
- Multiple choice
- Renders a collection of checkboxes to select multiple answers.
- Default Value
- Enter a default value.
- Show Label
- Indicate whether the field's label should be shown when rendering the form.
-
- Data Consent
- Renders a field to ask for data consent.
- Accept Copy
- The text used to confirm consent.
-
- Date
- Renders a date picker.
- Placeholder
- Enter a placeholder value.
-
- Dropdown
- Renders a list of values in a dropdown
- Default Value
- Enter a default value.
- Allow multiple selections
- Indicate whether multiple selections from the list are allowed.
- Show Label
- Indicate whether the field's label should be shown when rendering the form.
- Autocomplete attribute
- Optionally enter a value for the autocomplete attribute.
-
- File upload
- Renders an upload field, allowing files to be uploaded.
-
- Hidden
- Renders a hidden field.
- Default Value
- Enter a default value.
-
- Password
- Renders a password field.
- Placeholder
- Enter a placeholder value.
-
- Single choice
- Renders a radio button list to enable a single choice answer.
- Default Value
- Enter a default value.
- Show Label
- Indicate whether the field's label should be shown when rendering the form.
-
- reCAPTCHA v2
- Google reCAPTCHA v3.
- Theme
- reCAPTCHA v3 theme.
- Size
- reCAPTCHA v3 size.
- Error message
- The error message to display when the user does not pass the reCAPTCHA check.
-
- reCAPTCHA v3 with score
- Google reCAPTCHA v3 with score threshold
- Score threshold
- A reCAPTCHA v3 determined score between 0 and 1, above which form submissions are accepted. A higher value will catch more spam submissions, but also increase the risk of rejections of valid entries. For most sites, 0.5 is a sensible choice..
- Error message
- The error message to display when the user does not pass the reCAPTCHA check.
-
- Title and description
- This is used to enter some descriptive text.
- Headline
- Enter a headline.
- Body Text
- Enter your copy text.
-
- Long answer
- Renders a textarea, designed for longer answers.
- Default Value
- Enter a default value.
- Placeholder
- Enter a placeholder value.
- Show Label
- Indicate whether the field's label should be shown when rendering the form.
- Autocomplete attribute
- Optionally enter a value for the autocomplete attribute.
- Number Of Rows
- Enter the number of rows displayed for entry.
- Maximum Length
- Enter the maximum number of characters accepted.
-
- Short answer
- Renders an text input field, for short answers.
- Default Value
- Enter a default value.
- Placeholder
- Enter a placeholder value.
- Show Label
- Indicate whether the field's label should be shown when rendering the form.
- Maximum Length
- Enter the maximum number of characters accepted.
- Field Type
- Select the type of information expected.
- Autocomplete attribute
- Optionally enter a value for the autocomplete attribute.
-
-
-
- Change Record State
- Changes the state of the record being processed when it matches a word.
- Words
- Comma seperated list of words to match.
- Action
- What to do if it matches.
-
- Post as XML
- Posts the form as XML to a URL.
- URL
- Enter the URL to post to.
- Method
- POST or GET.
- XSLT File
- Transform the XML before posting it.
- Fields
- Map the needed fields.
- User
- (optional)
- Password
- (optional)
-
- Send form to URL
- Sends the form to a URL, either as a HTTP POST or GET.
- URL
- Enter the URL to post to.
- Method
- POST or GET.
- Standard Fields
- Map any standard form information to send.
- Fields
- Map the needed fields.
- User
- (optional)
- Password
- (optional)
-
- Save as an XML file
- Saves the result of the form as an XML file via XSLT.
- Path
- Path to place the file.
- Extension
- File extension.
- XSLT File
- Transform the XML before saving it.
-
- Save as Umbraco content node
- Saves the form values as an content node using a specified document type.
- Document Type
- Map document type.
- Publish
- Publish node instantly.
- Save location
- Choose the location for where to save the created content node.
-
- Send email
- Send the result of the form to an email address.
- Recipient Email
- Enter the recipient email address(es).
- CC Email
- Enter the CC email addresses (if required).
- BCC Email
- Enter the BCC email addresses (if required).
- Sender Email
- Enter the sender email (if blank it will use the settings from configuration).
- Reply To Email
- Enter the email address to be used as the reply-to address (if required).
- Subject
- Enter the subject.
- Message
- Enter the introductory message.
- Attachments
- Attach file uploads to email.
-
- Send email with template (Razor)
- Send the result of the form to an email address/addresses using a Razor .cshtml template.
- Recipient Email
- Enter the recipient email address(es).
- CC Email
- Enter the CC email addresses (if required).
- BCC Email
- Enter the BCC email addresses (if required).
- Sender Email
- Enter the sender email (if blank it will use the settings from configuration).
- Reply To Email
- Enter the email address to be used as the reply-to address (if required).
- Subject
- Enter the subject.
- Email Template
- The path to the Razor view that you want to use for generating the email. Email templates are stored at /Views/Partials/Forms/Emails.
- Attachments
- Attach file uploads to email.
-
- Send XSLT transformed email
- Send the result of the form to an email address.
- Recipient Email
- Enter the recipient email address(es).
- CC Email
- Enter the CC email addresses (if required).
- BCC Email
- Enter the BCC email addresses (if required).
- Sender Email
- Enter the sender email (if blank it will use the settings from configuration).
- Reply To Email
- Enter the email address to be used as the reply-to address (if required).
- Subject
- Enter the subject.
- XSLT File
- Transform the XML before sending the email.
-
- Slack (Legacy)
- Posts the form data to a specific channel on Slack using legacy tokens.
- API Token
- Slack API token.
- Channel
- Slack channel to post to.
- Username
- The username or bot to post as.
- Avatar URL
- The full URL (including http/https) to the avatar image.
-
- Slack
- Posts the form data to a specific channel on Slack using a webhook.
- Webhook URL
- Slack Webhook URL.
-
-
-
- SQL Database
- Connects to any OLEDB supported database table and constructs a datasource from it.
- Connection String
- OleDB Compatible Connection string.
- Table Name
- Database table name.
-
-
-
- DataSource
- Stores prevalues in the prevalues table.
-
- Get values from textfile
- Upload textfile that contains the prevalues.
- Text File
- File containing the prevalues (separated by linebreaks).
-
- Umbraco Documents
- Uses nodes from a specific source as preValues.
- Root node
- Source to fetch nodes from.
- Use current page as root
- Does not work in preview mode.
- Document type
- The type of nodes you would like to use.
- List all descendants
- Don't limit to children but also include other levels.
- Order by
- Select how the prevalue list should be ordered.
-
- SQL Database
- Connects to a OLEDB compatible Database Table and constructs a prevalue source from it.
- Connection String
- OleDB compatible connection string.
- Connection String from configuration
- Choose connection string (needs to be OleDB compatible).
- Table Name
-
- Key Column
- Column containing the keys.
- Value Column
- Column containing the values.
-
- Umbraco data type PreValues
- Connects to an Umbraco data type and uses its pre-value collection.
- Data Type
- Data type to use.
-
-
-
- Excel File
- Exports all data to Excel.
-
- Save All Uploaded Files (in disk structure)
- Exports all files uploading in form submissions to a zip archive, organized as the files are stored on disk.
-
- Save All Uploaded Files (by entry)
- Exports all files uploading in form submissions to a zip archive, organized in a sub-folder per entry.
-
-
-
- Are you sure you want to delete these entries?
-
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/lang/es-es.xml b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/lang/es-es.xml
deleted file mode 100644
index bb6f865..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/lang/es-es.xml
+++ /dev/null
@@ -1,690 +0,0 @@
-
-
-
- Formulario
-
-
- Tu formularios
- Muestra más
- Entradas
- Hay una nueva versión disponible
- Felicidades
- Acabas de instalar Umbraco Forms - Vamos a crear tu primera forma
- Crear un formulario
- Aún no tienes ningún formulario configurado, que dices si creas uno ahora?
- Crear un formulario
- Hay una nueva versión disponible
- Ahora puedes instalar Umbraco Forms
- Actualizar ahora
- Descargar y actualizar formularios...
- Licencia invalida
- Tu licencia de Formularios actual solo es válida para:
- Por favor, regresa a configurar tu licencia a continuación.
- Gracias por probar Umbraco Forms
- Para seguir usando Umbraco Forms, debes comprar una licencia o usar una licencia existente
- Configurar la licencia existente
- Compra licencia
- Comprar una licencia
-
-
- Solo toma unos minutos comprar una licencia para for Umbraco Forms and your y tu licencia se entrega instantáneamente .
-
-
- Los pasos son:
-
- Haga clic en el botón de compras a continuación
- Pago con tarjeta de crédito (o factura)
- Configure la licencia dentro de Umbraco Forms y vas a estar en funcionamiento
-
-
- ]]>
-
- Compra Umbraco Forms
-
- Preguntas frecuentes:
- ¿Cuanto cuesta?
- Los precios comienzan en €209 y es un pago único (sin suscripción).
- ¿Qué cubre una licencia?
- Una licencia cubre un solo dominio y también funcionará en todos los subdominios. It also includes two additional development domains.
- ¿Puedo agregar dominios adicionales a la licencia?
- Sí, se pueden agregar dominios adicionales. Puedes comprar dominios adicionales a tu licencia desde tu cuenta en Umbraco.com.
- ¿Más preguntas
-
- No te preocupes, hay más detalles en la documentación Y también eres más que bienvenido/a a ponerte en contacto con nosotros . Generalmente respondemos en un par de horas.
-
- ]]>
-
- Configurar una licencia de Umbraco Forms
-
- Si ya has comprado Umbraco Forms, puedes recuperar y configurar tu licencia automáticamente aquí. Simplemente ingrese sus credenciales de umbraco.com debajo
- y encontraremos tu licencia.
-
-
- Preguntas frecuentes:
- ¿No sé cuáles son mis credenciales?
-
- Es una combinación de tu correo electrónico y contraseña desde el momento en que el pedido fue realizado. Siempre puedes restablecer tu contraseña aquí .
-
- ¿Cómo compro una licencia?
-
- Si no tienes una licencia, puedes obtener una desde aquí y solo te llevará unos minutos .
-
- ]]>
-
- Encontrar licencias
- Email o contraseña inválidos
- No hay licencias de Umbraco Forms disponibles en esta cuenta
- Licencias Disponibles
- Encontrada
- en la cuenta
- No tiene dominios asignados
- Por favor configure un dominio en esta licencia
- Configurar e instalar
- Instalar esta licencia
- Dominios válidos
- Esta licencia es válida en el dominio actual
- Esta licencia es válida en el dominio actual
-
- Advertencia: tus ajustes de configuración están configurados para guardar contraseñas de texto sin formato.
- Cuando utilizas un campo de contraseña en cualquiera de tus formularios, los datos que tus visitantes ingresarán en ese campo se almacenarán en texto sin formato. Este es un problema de seguridad y debe evitarse.
- Para solucionar este problema, puede ir a tu ~/App_Plugins/UmbracoForms/UmbracoForms.config archivo y establecer la clave SavePlainTextPasswords en Falso .
- Después de actualizar esta configuración, asegúrese de reciclar el grupo de aplicaciones del sitio para que la nueva configuración se active.
- Nota: los valores de contraseña se seguirán transmitiendo a los flujos de trabajo, independientemente de la configuración en UmbracoForms.config
- ]]>
-
- La versión actual instalada de Umbraco Forms:
- Licencia configurada
- Umbraco Forms se ha configurado para tu uso en este sitio web.
- Permisos insuficientes
- No tienes permisos para crear y administrar formularios.
- Solo los usuarios administradores pueden actualizar los formularios Umbraco.
- Dominios con licencia
-
-
- Copiando formulario '%0%'
- Ingresa un nombre para el formulario copiado
- ¿Quieres copiar también los flujos de trabajo?
- ¿Copiar a una carpeta nueva?
- Selecciona la ubicación del formulario copiado
-
-
- Ccrear un nuevo formulario o carpeta
- Formulario vacío
- Empezando de nuevo
- Carpeta
- Utilizado para organizar formularios
- Ingrese un nombre de carpeta
-
-
- Acceso denegado
-
-
- Por favor, compruebe si tu configuración es válida.
-
-
- Añadir pregunta
- El grupo está vacío
- Deja una pregunta aquí...
- Yaay.. vamonos
- La página esta vacía
- Pon un grupo aquí...
- Agregar un grupo nuevo
- Agregar página nuevae
- Página sin título (opcional)
- Grupo sin título (opcional)
- El campo no se pudo guardar
- No tienes acceso para editar este formulario.
- Formulario guardado
- No se puede cargar el formulario
- Texto de ayuda
- Editar página
- Editar grupo
- Añadir pregunta
- Editar pregunta
- Flujos de trabajo
-
-
- Permitir todos los archivos
- Permitir solo archivos específicos
- Tipos de archivos permitidos predefinidos
- Tipos de archivos permitidos definidos por el usuario
- Confirmación
- ¿Estás seguro/a de que quieres eliminar esto?
- Error del tipo de archivo
- No se puede agregar el tipo de archivo porque es un duplicado.
- Seleccionar archivo
- Cargando
- Archivo actual
-
-
- Agregue un nuevo elemento aquí
- Error de prevalor
- No se puede agregar valor ya que crearía un duplicado.
- No se puede agregar valor ya que crearía un duplicado.
-
-
- ¿Estás seguro/a de que quieres eliminar el %0% '%1%'?
- Tenga en cuenta que esto puede llevar mucho tiempo dependiendo de la cantidad de registros.
- La carpeta seleccionada no se puede eliminar porque no está vacía.
- El formulario se eliminó correctamente.
- El formulario no se pudo eliminar.
- Se eliminó la carpeta con éxito.
- La carpeta no se pudo borrar.
-
-
- %0% Entradas
- Filtrar entradas...
- %0% de %1% seleccionados
- Exportar
- Elija un formato para exportar registros de formulario
- Actualmente, los envíos no se almacenan en la base de datos.
- Para habilitar esto, vaya a la configuración del formulario y active la función "Almacenar registros".
- Aún no se agregaron presentaciones en este rango de fechas.
- No pudimos encontrar ningún envío, ¿está seguro de que publicaste el formulario? O intenta ampliar el intervalo de fechas.
- No pudimos encontrar ningún envío que coincida con tu búsqueda.
- Intente buscar otra cosa, tal vez tengas suerte la próxima vez.
- Entrada %0% de %1%
- Entrada anterior
- Entrada siguiente
- No tienes acceso para ver las entradas de este formulario.
- Acción ejecutada
- Acción ejecutada con éxito %0%
- FError al ejecutar la acción %0% debido a error: %1%.
- Detalles de la entrada
- Cerrar detalles
- Enviado el
- Actualizado en
- De la página
- Miembro
- Estado
- Identificación única
-
-
- %0% en la estructura de árbol a continuación.]]>
- %0% se movió debajo %1% .]]>
- Movido
- El formulario se movió al lugar seleccionado.
- El formulario se movió al lugar seleccionado.
-
-
- Ingresa el nombre nuevo
- Renombrado
- La carpeta se renombró.
-
-
- Condiciones
- Activar condiciones
- Mostrar
- Ocultar
- todo
- alguno
- es
- no es
- es mayor que
- es menos que
- contiene
- comienza con
- termina con
- este conjunto de campos si
- del siguiente partido
- Selecciona campo
- Añadir condición
- Opcionalmente, defina las condiciones para la visualización del botón "Enviar" o "Siguiente" para la página.
-
- %1% of the following match:]]>
-
-
- %1% of the following match:]]>
-
-
- %1% of the following match:]]>
-
-
-
- No hay temas disponibles. Agregar temas a / Vistas / Parciales / Formularios / Temas
-
-
- El nombre del flujo de trabajo
- Pon un nombre descriptivo a tu flujo de trabajo
- Activo
- Habilita o deshabilita el flujo de trabajo
- Incluye datos sensibles
- ¿Incluyes datos sensibles al ejecutar este flujo de trabajo?
- Enviar mensaje / Ir a la página
- Aprobar
- automatico
- No se agregan flujos de trabajo
- configurar el flujo de trabajo
- El flujo de trabajo no se pudo guardar
- Confirmación
- Se han realizado cambios que no se han guardado. ¿Estás seguro de que deseas cerrar?
- Elija el flujo de trabajo
- Al
- Al enviar
- Ejecutaremos estos flujos de trabajo cuando envíe el formulario.
- Al aprobar
- Estos flujos de trabajo se ejecutarán cuando se apruebe la entrada.
- esto sucede automáticamente después del evento de envío con la configuración actual del formulario
- Enviar mensaje / Ir a la página
- Muestre un mensaje cuando se envíe el formulario o vaya a una página de Umbraco
- Agregar flujo de trabajo
- Mensaje al enviar
- Muestre un mensaje cuando se envía el formulario
- Ir a la pagina
- Accede a una página de Umbraco cuando se envía el formulario
-
-
- Columnas
- Establece cuántas columnas deseas tener en tu grupo.
- Este grupo tiene actualmente %0%.
- Añadir columna
-
-
- Ingrese una pregunta...
- Ingrese el texto de ayuda...
- Etiqueta obligatoria
- Elige el tipo de respuesta
- Datos sensibles
- Evita que los datos sean visualizados y exportados si un usuario no tiene permisos suficientes.
- Sí, este campo almacena datos confidenciales
- Tipos permitidos de carga de archivos
- Prevalores
- Proporciona aquí una lista de opciones (prevalores) específicos para este campo o selecciona una fuente de prevalor predefinida.
- Proporciona una lista de opciones (prevalores) para el campo.
- Elementos
- Fuente de prevalor
- Presiona el botón enter para agregar un valor
- Configuraciones
- Obligatorio
- Ingresa una expresión regular
- Ingresa un mensaje de campo inválido...
- Permitir múltiples cargas de archivos
- Se permiten varios archivos
- Solo archivo individual
-
-
- Registros de la tienda
-
- Marque esta casilla para guardar los registros enviados en una base de datos.
- Esto te permitirá verlos y exportarlos desde la descripción general de las consultas.
- Si no quieres almacenar datos (debido a las políticas de tu organización), deja la casilla sin marcar.
-
- Sí, mantenga los registros enviados en una base de datos, para que se puedan ver y exportar más tarde.
- Subtítulos
- Cambia los títulos de los botones Enviar, Siguiente y Anterior.
- Etiqueta del botón "Enviar"
- Etiqueta del botón 'Siguiente'
- Etiqueta del botón "Anterior"
- Estilizar
- Agrega una o más clases para ajustar tu formulario para habilitar el estilo personalizado, deshabilitar el estilo predeterminado y cargar activos con Dependencia del cliente.
- Formulario de clase CSS
- Desactivar hoja de estilo predeterminada
- Cargar activos con dependencia del cliente
- Validación
- Proporcions mejores mensajes de validación, oculta las etiquetas de validación y cambie o deshabilite el marcador obligatorio.
- Mensaje de error obligatorio
- Mensaje para mostrar cuando un campo obligatorio se deja vacío
- Mensaje de error no válido
- Mensaje para mostrar cuando un campo no es válido
- Mostrar resumen de validación
- Ocultar etiquetas de validación de campo
- Marcar campos
- Sin indicador
- Marcar campos obligatorios
- Marcar campos opcionales
- Indicator
- Cambiar el símbolo indicador obligatorio
- Autocompletar
- Agregue un atributo para controlar el comportamiento general de autocompletar formularios.
- Ninguno
- Abierto
- Apagado
- Moderation
- Permite que los envíos de formularios sean moderados antes de la publicacion. La mayoría de los casos de uso son para entradas que se muestran públicamente, como comentarios de publicaciones de blogs o presentaciones para una campaña social.
- Habilitar la moderación de publicaciones
-
-
- Se guardó la seguridad del formulario de usuario
- No se pudo guardar la seguridad del formulario de usuario
- Gestionar formularios
- Otorgar o denegar el acceso a los formularios de gestión.
- Gestionar los flujos de trabajo
- Otorgar o denegar acceso para administrar todos los elementos del flujo de trabajo de formularios
- Gestionar fuentes de datos.
- Otorgar o denegar el acceso a la administración de cualquier fuente de datos para todos los formularios.
- Gestionar fuentes de prevalorización
- Otorgar o denegar el acceso a la gestión de fuentes de prevalor para todos los formularios.
- Seguridad del formulario
- Otorgar o denegar el acceso a formularios individuales
- Nombre del formulario
- Tiene acceso
-
-
- Seleccione el tipo de fuente de datos
- Crear formulario
- Nombre del formulario
- Seleccione campos
- Campos de la fuente de datos que desea incluir en el formulario.
- Configurar claves foráneas
- Seleccione la columna de valor para los campos de clave externa.
- Seleccione tipo
- Tipo de campo que deseas utilizar para los campos incluidos (o valor predeterminado).
- Valor predeterminado
- ¿Estás seguro de que deseas eliminar la fuente de datos %0%?
- Se guardó la fuente de datos
- No se pudo guardar la fuente de datos
- No tienes acceso para editar fuentes de datos
-
-
- Seleccione el tipo de fuente de prevalor
- ¿Estás seguro/a de que quieres eliminar la fuente de prevalencia %0%?
- Se guardó la fuente de la prevaluación
- No se pudo guardar la fuente de la prevaluación
- No tienes acceso para editar fuentes de prevalor
-
-
-
- Casilla de verificación
- Muestra una casilla de verificación.
- Valor predeterminado
- Ingrese un valor predeterminado.
-
- Opción multiple
- Muestra una colección de casillas de verificación para seleccionar varias respuestas.
- Valor predeterminado
- Ingrese un valor predeterminado.
- Mostrar etiqueta
- Indique si la etiqueta del campo debe mostrarse al renderizar el formulario.
-
- Consentimiento para los datos
- Genera un campo para solicitar el consentimiento de los datos.
- Aceptar copia
- El texto utilizado para confirmar el consentimiento.
-
- Fecha
- Genera un selector de fechas.
- Placeholder
- Ingrese un valor para el placeholder.
-
- Menú desplegable
- Muestra una lista de valores en un menú desplegable
- Valor predeterminado
- Ingrese un valor predeterminado.
- Permitir selecciones múltiples
- Indique si se permiten múltiples selecciones de la lista.
- Mostrar etiqueta
- Indique si la etiqueta del campo debe mostrarse al renderizar el formulario.
- Atributo de autocompletar
- Opcionalmente, ingrese un valor para el atributo de autocompletar.
-
- Subir archivo
- Representa un campo de carga, lo que permite cargar archivos.
-
- Oculto
- Genera un campo oculto.
- Valor predeterminado
- Ingrese un valor predeterminado.
-
- Contraseña
- Muestra un campo de contraseña.
- Placeholder
- Ingrese un valor para el campo (placeholder).
-
- Elección única
- Muestra una lista de botones de opción para habilitar una respuesta de opción única.
- Valor predeterminado
- Ingrese un valor predeterminado.
- Mostrar etiqueta
- Indique si se debe mostrar la etiqueta del campo al procesar el formulario.
-
- reCAPTCHA v2
- Google reCAPTCHA v2.
- Tema
- reCAPTCHA v2 theme.
- Talla
- reCAPTCHA v2 talla.
- Mensaje de error
- El mensaje de error que se muestra cuando el usuario no pasa la verificación reCAPTCHA.
-
- reCAPTCHA v3 con puntaje
- Google reCAPTCHA v3 con umbral de puntuación
- Umbral de puntuación
- Una puntuación determinada de reCAPTCHA v3 entre 0 y 1, por encima del cual se aceptan envíos de formularios. Un valor más alto detectará más envíos de spam, pero también aumentará el riesgo de rechazo de entradas válidas. Para la mayoría de los sitios, 0.5 es una opción sensata..
- Mensaje de error
- El mensaje de error que se muestra cuando el usuario no pasa la verificación reCAPTCHA.
-
- Título y descripción
- Esto se usa para ingresar texto descriptivo.
- Título
- Ingrese un título.
- Texto
- Ingrese el texto copiado.
-
- Respuesta larga
- Genera un área de texto, diseñada para respuestas más largas.
- Valor predeterminado
- Ingrese un valor predeterminado.
- Placeholder
- Ingrese un valor para el placeholder.
- Mostrar etiqueta
- Indique si debe mostrarse la etiqueta del campo al renderizar el formulario.
- Atributo de autocompletar
- Opcionalmente, ingrese un valor para el atributo de autocompletar.
- Número de filas
- Ingrese el número de filas que se muestran para la entrada.
- Longitud máxima
- Ingrese el número máximo de caracteres aceptados.
-
- Respuesta corta
- Reproduce un campo de entrada de texto para respuestas breves.
- Valor predeterminado
- Ingrese un valor predeterminado.
- Placeholder
- Ingrese un valor para el placeholder.
- Mostrar etiqueta
- Indique si debe mostrarse la etiqueta del campo al renderizar el formulario.
- Longitud máxima
- Ingrese el número máximo de caracteres aceptados.
- Tipo de campo
- Seleccione el tipo de información esperada.
- Atributo de autocompletar
- Opcionalmente, ingrese un valor para el atributo de autocompletar.
-
-
-
- Cambiar estado de registro
- Cambia el estado del registro que se está procesando cuando coincide con una palabra.
- Palabras
- Lista de palabras separadas por comas que deben coincidir.
- Acción
- Qué hacer si coincide.
-
- Publicar como XML
- Publica el formulario como XML en una URL.
- URL
- Ingrese la URL para publicar.
- Método
- POST o GET.
- Archivo XSLT
- Transforma el XML antes de publicarlo.
- Los campos
- Mapee los campos necesarios.
- Usuario
- (opcional)
- Contraseña
- (opcional)
-
- Enviar formulario a URL
- Envía el formulario a una URL, ya sea como HTTP POST o GET.
- URL
- Ingrese la URL para publicar.
- Método
- POST o GET.
- Campos estándar
- Selecciona cualquier información de formulario estándar para enviar.
- Campos
- Seleccione los campos que necesitas
- Usuario
- (opcional)
- Contraseña
- (opcional)
-
- Guardar como archivo XML
- Guarda el resultado del formulario como un archivo XML a través de XSLT.
- Ruta
- Ruta para colocar el archivo.
- Extensión
- Extensión de archivo.
- Archivo XSLT
- Transforma el XML antes de guardarlo.
-
- Guardar como Umbraco content node
- Guarda los valores del formulario como un nodo de contenido utilizando un tipo de documento especificado.
- Tipo de Documento
- Seleccione el tipo de documento.
- Publicar
- Publique el nodo al instante.
- Guardar ubicación
- Elija la ubicación donde guardar el nodo de contenido creado.
-
- Enviar correo electrónico
- Envíe el resultado del formulario a una dirección de correo electrónico.
- Receptor de E-mail
- Ingrese el correo electrónico del destinatario.
- CC Email
- Ingrese las direcciones de correo electrónico CC (si es necesario).
- BCC Email
- Ingrese las direcciones de correo electrónico BCC (si es necesario).
- Correo electrónico del remitente
- Ingresa el correo electrónico del remitente (si está en blanco, usará la configuración de configuración).
- Responder a un correo electrónico
- Ingresa la dirección de correo electrónico que se utilizará como dirección de respuesta (si es necesario).
- Asunto
- Ingrese el asunto.
- Mensaje
- Ingrese el mensaje introductorio.
- Archivos adjuntos
- Adjunte los archivos cargados al correo electrónico
-
- Enviar correo electrónico con plantilla (Razor)
- Envíe el resultado del formulario a una dirección / direcciones de correo electrónico utilizando una plantilla .cshtml de Razor.
- Correo electrónico del destinatario
- Ingrese la dirección/direcciones de correo electrónico del destinatario.
- CC Email
- Ingrese las direcciones de correo electrónico CC (si es necesario).
- BCC Email
- Ingrese las direcciones de correo electrónico BCC (si es necesario).
- Correo electrónico del remitente
- Ingrese el correo electrónico del remitente (si está en blanco, usará la configuración de configuración).
- Responder a un correo electrónico
- Ingrese la dirección de correo electrónico que se utilizará como dirección de respuesta (si es necesario).
- Asunto
- Ingrese el asunto.
- Plantilla de correo electrónico
- La ruta a la vista de Razor que desea usar para generar el correo electrónico. Las plantillas de correo electrónico se almacenan en /Views/Partials/Forms/Emails.
- Adjuntos
- Adjunte los archivos cargados al correo electrónico.
-
- Enviar correo electrónico transformado XSLT
- Envíe el resultado del formulario a una dirección de correo electrónico.
- Correo electrónico del destinatario
- Ingrese la dirección/direcciones de correo electrónico del destinatario.
- CC Email
- Ingrese las direcciones de correo electrónico CC (si es necesario).
- BCC Email
- Ingrese las direcciones de correo electrónico BCC (si es necesario).
- Correo electrónico del remitente
- Ingrese el correo electrónico del remitente (si está en blanco, usará la configuración de configuración).
- Responder a un correo electrónico
- Ingrese la dirección de correo electrónico que se usará como dirección de respuesta (si es necesario).
- Asunto
- Ingrese el asunto.
- Archivo XSLT
- Transforma el XML antes de enviar el correo electrónico.
-
- Slack (Legacy)
- Publica los datos del formulario en un canal específico en Slack utilizando tokens heredados.
- API Token
- Slack API token.
- Channel
- Slack channel para publicar.
- Nombre de usuario
- El nombre de usuario o bot con el que publicar.
- Avatar URL
- La URL completa (incluido http / https) de la imagen del avatar.
-
- Slack
- Publica los datos del formulario en un canal específico de Slack mediante un webhook.
- URL del webhook
- Slack Webhook URL.
-
-
-
- Base de datos SQL
- Se conecta a cualquier tabla de base de datos compatible con OLEDB y crea una fuente de datos a partir de ella.
- Connection String
- OleDB Compatible Connection string.
- Nombre de la tabla
- Nombre de la tabla de la base de datos.
-
-
-
- Fuente de datos
- Almacena los prevalores en la tabla de prevalencia.
-
- Obtener valores del archivo de texto
- Cargue el archivo de texto que contiene los prevalores.
- Archivo de texto
- El archivo que contiene los valores previos (separados por saltos de línea).
-
- Umbraco Documents
- Utiliza nodos de una fuente específica como prevalores.
- Root node
- Fuente de la que se obtienen los nodos.
- Usar la página actual como raíz
- No funciona en modo de vista previa.
- Tipo de Documento
- El tipo de nodos que te gustaría usar.
- La lista de todos los descendientes
- No se limite a los niños, sino que también incluya otros niveles.
- Ordenar por
- Seleccione cómo se debe ordenar la lista de prevalores.
-
- Base de datos SQL
- Se conecta a una tabla de base de datos compatible con OLEDB y construye una fuente de prevalor a partir de ella.
- Connection String
- Connection String con OleDB.
- Connection String de web.config
- Elija la cadena de conexión (debe ser compatible con OleDB).
- Nombre de la tabla
-
- Columna clave
- Columna que contiene las claves.
- Columna de valor
- La columna que contiene los valores.
-
- Umbraco data type PreValues
- Se conecta a un tipo de datos de Umbraco y usa su colección de prevalor.
- Tipo de datos
- Tipo de datos que se utilizarán.
-
-
-
- Archivo Excel
- Exporta todos los datos a Excel.
-
- Guardar todos los archivos cargados (en la estructura del disco)
- Exporta todos los archivos que se cargan en forma de envíos a un archivo zip, organizado a medida que los archivos se almacenan en el disco.
-
- Guardar todos los archivos cargados (por entrada)
- Exporta todos los archivos que se cargan en formularios enviados a un archivo zip, organizado en una subcarpeta por entrada.
-
-
-
- ¿Está seguro/a de que desea eliminar estas entradas?
-
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/lang/fr-fr.xml b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/lang/fr-fr.xml
deleted file mode 100644
index 3104438..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/lang/fr-fr.xml
+++ /dev/null
@@ -1,689 +0,0 @@
-
-
-
- Formulaires
-
-
- Vos formulaires
- Afficher plus
- Entrées
- Une nouvelle version est disponible
- Félicitations
- Vous venez d'installer Formulaires - Créons votre premier formulaire
- Créer un formulaire
- Vous n'avez pas encore configuré de formulaire, pourquoi ne pas en créer un maintenant?
- Créer un formulaire
- Une nouvelle version est disponible
- Vous pouvez maintenant installer Umbraco Formulaire
- Mettre à niveau maintenant
- Téléchargement et mise à jour des formulaires...
- Licence invalide
- Votre licence Forms actuelle n'est valable que pour:
- Veuillez re-configurer votre licence ci-dessous.
- Merci d'avoir essayé Umbraco Formulaire.
- Pour continuer à utiliser Umbraco Formulaire, vous devez acheter une licence, ou utiliser une licence existante Configurer une licence existante
- Configurer la licence existante
- Acheter une licence
- Acheter une licence
-
-
- L'achat d'une licence pour Umbraco Formulaire ne prend que quelques minutes et votre licence est livrée instantanément. .
-
-
- Les étapes sont les suivantes:
-
- Cliquez sur le bouton d'achat ci-dessous
- Régler par carte de crédit (ou facture)
- Configurez la licence à l'intérieur d'Umbraco Formulaires et vous êtes opérationnel
-
-
- ]]>
-
- Acheter Umbraco Formulaires
-
- FAQ:
- Combien cela coûte-t-il?
- La tarification commence à €209 et est un frais unique (pas d'abonnement).
- Que couvre une licence?
- Une licence couvre un seul domaine et fonctionnera également sur tous les sous-domaines.Elle comprend également deux modules de développement supplémentaires.
- Puis-je ajouter des domaines supplémentaires à la licence?
- Oui, il est possible d'ajouter des domaines supplémentaires.Vous pouvez acheter des domaines supplémentaires à votre licence à partir de votre compte au Umbraco.com.
- Plus de questions?
-
- Ne vous inquiétez pas , il y a plus de détails dans la documentation et vous êtes aussi plus que bienvenu pour nous contacter . Nous répondons généralement en quelques heures.
-
- ]]>
-
- Configurer une licence Umbraco Formulaires
-
- Si vous avez déjà acheté Umbraco Formulaires, vous pouvez automatiquement récupérer et configurer votre licence ici. Entrez simplement vos informations d'identification umbraco.com ci-dessous et nous trouverons votre licence.
-
-
- FAQ:
- Je ne sais pas quelles sont mes informations d'identification?
-
- Il s'agit d'une combinaison de votre e-mail et de votre mot de passe lorsque vous avez passé votre commande. Vous pouvez toujours réinitialiser votre mot de passe .
-
- Comment puis-je acheter une licence?
-
- Si vous n'avez pas de licence, vous pouvez en obtenir une ici et cela ne prend que quelques minutes .
-
- ]]>
-
- Trouver des licences
- Courriel ou mot de passe invalide
- Aucune licence Umbraco Formulaires disponible sur ce compte
- Licences disponibles
- Trouvé
- Sur le compte
- Aucun domaine n'a été attribué
- Veuillez définir un domaine sur cette licence
- Configurer et installer
- Installer cette licence
- Domaines valides
- Cette licence est valide sur le domaine actuel
- Cette licence n'est pas valide sur le domaine actuel
-
- Attention: vos paramètres de configuration sont définis pour enregistrer les mots de passe en texte brut!
- Lorsque vous utilisez un champ de mot de passe dans l'un de vos formulaires, les données que vos visiteurs entreront dans ce champ seront stockées dans un fichier de texte brut. Ceci est un problème de sécurité et doit être évité.
- Pour résoudre ce problème, vous pouvez accéder à votre ~/App_Plugins/UmbracoForms/UmbracoForms.config fichier et définir la clé SavePlainTextPasswords surfalse .
- Après avoir mis à jour ce paramètre, assurez-vous de recycler le pool d'applications pour le site pour que le nouveau paramètre devienne actif
- Note: les valeurs de mot de passe seront toujours transmises aux flux de travail indépendamment du paramètre dans leUmbracoForms.config
- ]]>
-
- Version actuelle d'Umbraco Formulaires installée:
- Licence configurée
- Umbraco Formulaires a été configuré pour être utilisé sur ce site.
- Autorisations insuffisantes
- Vous n'avez pas les permissions nécessaires pour créer et gérer des formulaires.
- Seuls les utilisateurs Admin ont la possibilité de mettre à jour Umbraco Formulaires.
- Domaines sous licence
-
-
- Copie du formulaire '%0%'
- Entrez un nom pour le formulaire copié
- Copier aussi les flux de travail?
- Copier dans un nouveau dossier?
- Sélectionner l'emplacement du formulaire copié
-
-
- Créer un nouveau formulaire ou dossier
- Formulaire vide
- Partir de zéro
- Dossier
- Utilisé pour organiser les formulaires
- Entrez un nom de dossier
-
-
- Accès refusé
-
-
- Veuillez vérifier si vos paramètres sont valides.
-
-
- Ajouter une question
- Le groupe est vide
- Déposez une question ici...
- Yaay.. laissez-vous aller
- La page est vide
- Déposer un groupe ici...
- Ajouter un nouveau groupe
- Ajouter une nouvelle page
- Page sans titre (facultatif)
- Groupe sans titre (facultatif)
- Échec de l'enregistrement du champ
- Vous n'avez pas le droit de modifier ce formulaire.
- Formulaire enregistré
- Impossible de charger le texte d'aide du formulaire
- Texte d'aide
- Modifier la page
- Modifier le groupe
- Ajouter une question
- Modifier la question
- Flux de travail
-
-
- Autoriser tous les fichiers
- Autoriser uniquement les fichiers spécifiés
- Types de fichiers autorisés prédéfinis
- Types de fichiers autorisés définis par l'utilisateur
- Confirmation
- Êtes-vous sûr de vouloir supprimer ce fichier?
- Erreur de type de fichier
- Impossible d'ajouter le type de fichier car il s'agit d'un doublon.
- Choisir le fichier
- Téléchargement...
- Du fichier actuel
-
-
- Ajouter un nouvel élément ici
- Erreur de prévalue
- Impossible d'ajouter une valeur car cela créerait un doublon.
- Impossible de modifier la valeur, car cela créerait un doublon.
-
-
- Êtes-vous sûr de vouloir supprimer le %0% '%1%'?
- Veuillez noter que cette opération peut prendre beaucoup de temps en fonction du nombre d'enregistrements.
- Le dossier sélectionné ne peut pas être supprimé car il n'est pas vide.
- formulaire a été supprimé avec succès.
- La suppression du formulaire a échoué.
- Le dossier a été supprimé.
- Le dossier n'a pas été supprimé.
-
-
- %0% Entrées
- Filtrer les entrées...
- %0% de %1% sélectionné
- Exportation
- Choisissez un format pour exporter les enregistrements du formulaire vers
- Actuellement, les soumissions ne sont pas stockées dans la base de données.
- Pour l'activer, allez dans les paramètres du formulaire et activez la fonction "Stocker les enregistrements".
- Aucune soumission n'a encore été ajoutée dans cette plage de dates.
- Nous n'avons trouvé aucune soumission, Êtes-vous sûr d'avoir publié le formulaire? Ou essayez d'étendre la plage de dates.
- Nous n'avons trouvé aucune soumission correspondant à votre recherche.
- Essayez de chercher autre chose, peut-être aurez-vous plus de chance la prochaine fois.
- Entrée %0% au %1%
- Entrée précédente
- Entrée suivante
- Vous n'avez pas le droit de voir les entrées de ce formulaire.
- Action exécutée
- Action exécutée avec succès %0%
- L'action n'a pas pu être exécutée %0% en raison d'une erreur: %1%.
- Détails de l'entrée
- Détails de la fermeture
- Soumis le
- Updated on
- Mis à jour le
- Membre
- État
- ID unique
-
-
- %0% dans l'arborescence ci-dessous.]]>
- %0% a été déplacé en dessous de %1% .]]>
- Déplacé à
- Le formulaire a été déplacé vers l'emplacement sélectionné.
- Le dossier a été déplacé vers l'emplacement sélectionné.
-
-
- Entrez le nouveau nom
- Renommé
- Le dossier a été renommé.
-
-
- Conditions
- Activer les conditions
- Afficher
- Cacher
- tout
- touy
- est
- n'est pas
- est supérieur à
- est inférieur à
- contient
- commence par
- se termine par
- ce jeu de champs si
- des éléments suivants correspondent
- Sélectionner le champ
- Ajouter une condition
- Définissez éventuellement des conditions pour l'affichage du bouton " Soumettre" ou "Suivant " de la page.
-
- %1% du match suivant:]]>
-
-
- %1% l'un des éléments suivants correspond:]]>
-
-
- %1% l'un des éléments suivants correspond:]]>
-
-
-
- Ajouter des thèmes à. Ajouter des thèmes à /Views/Partials/Forms/Themes
-
-
- Nom du flux de travail
- Donnez un nom descriptif à votre flux de travail
- Actif
- Activer ou désactiver le flux de travail
- Inclure des données sensibles
- Inclure des données sensibles lors de l'exécution de ce flux de travail?
- Soumettre le message / Aller à la page
- Approuver
- Automatiquement
- Aucun flux de travail n'est ajouté
- Configurer le flux de travail
- Le flux de travail n'a pas été enregistré
- Confirmation
- Des modifications ont été apportées qui n'ont pas été enregistrées.Êtes-vous sûr de vouloir les fermer?
- Choisir le flux de travail
- Sur soumission
- Sur Submit
- Nous exécuterons ces flux de travail pour vous lorsque le formulaire sera soumis.
- Sur approuvée
- cela se produit automatiquement après l'événement d'envoi avec les paramètres actuels du formulaire.
- this happens automatically after the submit event with the current form settings
- Envoyer un message / Aller à la page
- Afficher un message lorsque le formulaire est soumis ou aller à une page Umbraco
- Ajouter un flux de travail
- Message sur l'envoi
- Afficher un message lorsque le formulaire est soumis
- Aller à la page
- Aller à une page Umbraco lorsque le formulaire est soumis
-
-
- Colonnes
- Définissez le nombre de colonnes que vous souhaitez avoir dans votre groupe.
- Ce groupe a actuellement %0%.
- Ajouter une colonne
-
-
- Saisir une question...
- Entrer le texte d'aide...
- Étiquette requise
- Choisir le type de réponse
- Données sensibles
- Empêchez l'affichage et l'exportation des données si un utilisateur ne dispose pas des autorisations suffisantes.
- Oui, ce champ stocke des données sensibles
- Types de téléchargement de fichiers autorisés
- Prévalences
- Vous pouvez soit fournir ici une liste d'options (prévalences) spécifiques à ce champ, soit sélectionner une source de prévalences prédéfinie.
- Fournit une liste d'options (prévalues) pour le champ.
- Éléments
- Source de la prévalue
- Appuyez sur la touche "Entrée" pour ajouter une valeur
- Paramètres
- Obligatoire
- Entrez une expression régulière
- Entrez un message de champ invalide...
- Autoriser le téléchargement de plusieurs fichiers
- Plusieurs fichiers autorisés
- Fichier unique uniquement
-
-
- Stocker les enregistrements
-
- Cochez cette case pour enregistrer les enregistrements soumis dans une base de données.
- Cela vous permettra de les visualiser et de les exporter à partir de la vue d'ensemble des requêtes.
- Si vous ne souhaitez pas stocker de données (en raison des politiques de votre organisation), laissez la case décochée.
-
- Oui, conservez les enregistrements soumis dans une base de données afin de pouvoir les consulter et les exporter ultérieurement.
- Légendes
- Modifiez les légendes des boutons Soumettre, Suivant et Précédent.
- Étiquette du bouton "Soumettre"
- Étiquette du bouton "Suivant"
- Étiquette du bouton "Précédent"
- Stylisation
- Ajoutez une ou plusieurs classes pour envelopper votre formulaire afin d'activer un style personnalisé, de désactiver le style par défaut et de charger les ressources avec Client Dependency.
- La classe CSS du formulaire.
- Désactiver la feuille de style par défaut
- Chargez les ressources avec la validation de Client Dependency
- Validation
- Fournissez de meilleurs messages de validation, masquez les étiquettes de validation et modifiez ou désactivez le marqueur requis/obligatoire.
- Message d'erreur obligatoire
- Message à afficher lorsqu'un champ obligatoire est resté vide
- Message d'erreur invalide
- Message à afficher lorsqu'un champ est invalide
- Afficher le résumé de la validation
- Masquer les étiquettes de validation des champs
- Marquer les champs
- Aucun indicateur
- Marquer les champs obligatoires
- Marquer les champs facultatifs
- Indicateur
- Modifier le symbole de l'indicateur obligatoire
- Autocomplétion
- Ajoutez un attribut pour contrôler le comportement général de l'autocomplétion du formulaire.
- Aucun
- Activé
- Désactivé
- Modération
- Permet aux soumissions de formulaire d'être modérées après coup. La plupart des cas d'utilisation concernent les entrées affichées publiquement, comme les articles de blog.
- Activer la modération des messages
-
-
- La sécurité du formulaire de l'utilisateur a été sauvegardée
- La sécurité du formulaire de l'utilisateur n'a pas été sauvegardée
- Gérer les formulaires
- Accorder ou refuser l'accès à la gestion des formulaires
- Gérer les flux de travail
- Accorder ou refuser l'accès à la gestion des flux de travail de tous les formulaires
- Gérer les sources de données
- GAccorder ou refuser l'accès à la gestion de toutes les sources de données pour tous les formulaires
- Gérer les sources de pré-valeur
- Accorde ou refuse l'accès à la gestion de toutes les sources de valeurs préalables pour tous les formulaires
- Sécurité des formulaires
- Accorde ou refuse l'accès aux formulaires individuels
- Nom du formulaire
- A accès
-
-
- Sélectionnez le type de source de données
- Créer un formulaire
- Nom du formulaire
- Sélectionner les champs
- Champs de la source de données que vous souhaitez inclure dans le formulaire.
- Configurer les clés étrangères
- Sélectionnez la colonne de valeur pour les champs de clé étrangère.
- Sélectionnez le type
- Type de champ que vous souhaitez utiliser pour les champs inclus (ou valeur par défaut).
- Valeur par défaut
- Êtes-vous sûr de vouloir supprimer la source de données %0%?
- Source de données enregistrée
- La source de données n'a pas été enregistrée
- Vous n'avez pas accès à la modification des sources de données
-
-
- Sélectionnez le type de source de données prévalente
- Etes-vous sûr de vouloir supprimer la source de valeur prévalente %0%?
- Source de valeur réelle enregistrée
- Échec de l'enregistrement de la source de valeur réelle
- Vous n'avez pas accès à l'édition des sources de valeur prévalente
-
-
-
- Case à cocher
- Rend une case à cocher.
- Valeur par défaut
- Saisissez une valeur par défaut.
-
- Choix multiple
- Rend une collection de cases à cocher permettant de sélectionner plusieurs réponses.
- Valeur par défaut
- Saisissez une valeur par défaut.
- Afficher l'étiquette
- Indiquez si l'étiquette du champ doit être affichée lors du rendu du formulaire.
-
- Consentement aux données
- Rendu d'un champ pour demander le consentement des données.
- Copie d'acceptation
- Le texte utilisé pour confirmer le consentement.
-
- Date
- Rendu d'un sélecteur de date.
- Espace réservé
- Entrez une valeur de remplacement.
-
- Menu déroulant
- Rend une liste de valeurs dans une liste déroulante
- Valeur par défaut
- Saisissez une valeur par défaut.
- Autoriser les sélections multiples
- Indiquez si les sélections multiples sont autorisées dans la liste.
- Afficher l'étiquette
- Indiquez si l'étiquette du champ doit être affichée lors du rendu du formulaire.
- Attribut d'autocomplétion
- Saisissez, si vous le souhaitez, une valeur pour l'attribut de complétion automatique.
-
- Téléchargement de fichiers
- Rend un champ de téléchargement, permettant de télécharger des fichiers.
-
- Caché
- Rend un champ caché.
- Valeur par défaut
- Entrez une valeur par défaut.
-
- Mot de passe
- Rend un champ de mot de passe.
- Caractère générique
- Saisissez une valeur de remplacement.
-
- Choix unique
- Rend une liste de boutons d'option pour permettre une réponse à choix unique.
- Valeur par défaut
- Saisissez une valeur par défaut.
- Afficher l'étiquette
- Indiquez si l'étiquette du champ doit être affichée lors du rendu du formulaire.
-
- reCAPTCHA v2
- Google reCAPTCHA v2.
- Thème
- Thème de reCAPTCHA v2.
- Taille
- Taille de reCAPTCHA v2.
- Message d'erreur
- Le message d'erreur à afficher lorsque l'utilisateur ne passe pas le contrôle reCAPTCHA.
-
- reCAPTCHA v3 avec score
- Google reCAPTCHA v3 avec seuil de score
- Seuil de score
- Un score reCAPTCHA v3 déterminé entre 0 et 1, au-delà duquel les soumissions de formulaire sont acceptées. Une valeur plus élevée interceptera plus de soumissions de spam, mais augmentera également le risque de rejet d'entrées valides. Pour la plupart des sites, 0,5 est un choix judicieux..
- Message d'erreur
- Le message d'erreur à afficher lorsque l'utilisateur ne passe pas le contrôle reCAPTCHA.
-
- Titre et description
- Ce champ permet de saisir un texte descriptif.
- Titre
- Saisissez un titre.
- Texte du corps
- Entrez le texte de votre copie.
-
- Réponse longue
- Rend une zone de texte, conçue pour les réponses plus longues.
- Valeur par défaut
- Saisissez une valeur par défaut.
- Espace réservé
- Saisissez une valeur de remplacement.
- Afficher l'étiquette
- Indiquez si l'étiquette du champ doit être affichée lors du rendu du formulaire.
- Attribut d'autocomplétion
- Saisissez une valeur pour l'attribut de complétion automatique.
- Nombre de lignes
- Entrez le nombre de lignes affichées pour la saisie.
- Longueur maximale
- Saisissez le nombre maximum de caractères acceptés.
-
- Réponse courte
- Rend un champ de saisie de texte, pour les réponses courtes.
- Valeur par défaut
- Saisissez une valeur par défaut.
- Caractère générique
- Saisissez une valeur de remplacement.
- Afficher l'étiquette
- Indiquez si l'étiquette du champ doit être affichée lors du rendu du formulaire.
- Longueur maximale
- Saisissez le nombre maximum de caractères acceptés.
- Type de champ
- Sélectionnez le type d'informations attendues.
- Attribut d'autocomplétion
- Saisissez une valeur pour l'attribut de complétion automatique.
-
-
-
- Modifier l'état de l'enregistrement
- Change l'état de l'enregistrement en cours de traitement lorsqu'il correspond à un mot.
- Mots
- Liste de mots à faire correspondre, séparés par des virgules.
- Action
- Ce qu'il faut faire si le mot correspond.
-
- Poster en XML
- Affiche le formulaire en tant que XML à une URL.
- URL
- Entrez l'URL vers laquelle vous souhaitez publier le formulaire.
- Méthode
- POST ou GET.
- Fichier XSLT
- Transformez le XML avant de le publier.
- Champs
- Mapper les champs nécessaires.
- Utilisateur
- (facultatif)
- Mot de passe
- (facultatif)
-
- Envoyer le formulaire à l'URL
- Envoie le formulaire à une URL, soit en tant que HTTP POST ou GET.
- URL
- Saisissez l'URL vers laquelle vous souhaitez poster.
- Méthode
- POST ou GET.
- Champs standard
- Mapper toute information de formulaire standard à envoyer.
- Champs
- Mapper les champs nécessaires.
- Utilisateur
- (facultatif)
- Mot de passe
- passe (facultatif)
-
- Enregistrer en tant que fichier XML
- Enregistre le résultat du formulaire dans un fichier XML via XSLT.
- Chemin d'accès
- Chemin pour placer le fichier.
- Extension
- Extension du fichier.
- Fichier XSLT
- Transformer le XML avant de l'enregistrer.
-
- Enregistrer comme Umbraco noeud de contenu
- Enregistre les valeurs du formulaire comme un noeud de contenu en utilisant un type de document spécifié.
- Type de document
- Cartographier le type de document.
- Publier
- Publie le noeud instantanément.
- Emplacement d'enregistrement
- Choisissez l'emplacement où enregistrer le noeud de contenu créé.
-
- Envoyer un email
- Envoyez le résultat du formulaire à une adresse e-mail.
- Email du destinataire
- Saisissez la ou les adresses électroniques des destinataires.
- Courriel du CC
- Saisissez les adresses électroniques CC (si nécessaire).
- Courriel BCC
- Saisissez les adresses électroniques BCC (si nécessaire)..
- Email de l'expéditeur
- Saisissez l'adresse électronique de l'expéditeur (si elle est vide, elle utilisera les paramètres de configuration).
- Email de réponse
- Saisissez l'adresse électronique à utiliser comme adresse de réponse (si nécessaire).
- Sujet
- Entrez le sujet.
- Message
- Entrez le message d'introduction.
- Pièces jointes
- Joignez les fichiers téléchargés à l'e-mail.
-
- Envoyer un email avec un modèle (Razor)
- Envoyez le résultat du formulaire à une ou plusieurs adresses e-mail en utilisant un modèle Razor .cshtml template.
- Email du destinataire
- Entrez l'adresse ou les adresses électroniques du destinataire.
- Email du CC
- Saisissez les adresses électroniques CC (si nécessaire).
- Email BCC
- Saisissez les adresses électroniques des Cci (si nécessaire).
- Email de l'expéditeur
- Saisissez l'adresse électronique de l'expéditeur (si elle est vide, les paramètres de l'option configuration).
- Répondre à l'adresse électronique
- Saisissez l'adresse électronique à utiliser comme adresse de réponse (si nécessaire).
- Sujet
- Saisissez le sujet.
- Modèle d'e-mail
- Le chemin d'accès à la vue Razor que vous souhaitez utiliser pour générer l'e-mail. Les modèles d'email sont stockés dans /Views/Partials/Forms/Emails.
- Pièces jointes
- Joignez les téléchargements de fichiers à l'e-mail.
-
- Joignez les téléchargements de fichiers à l'e-mail.
- Envoyer le résultat du formulaire à une adresse email.
- Email du destinataire
- Saisissez la ou les adresses électroniques des destinataires.
- Courriel du CC
- Entrez les adresses e-mail CC (si nécessaire).
- Courriel BCC
- Saisissez les adresses électroniques des Cci (si nécessaire).
- Email de l'expéditeur
- Saisissez l'adresse électronique de l'expéditeur (si elle est vide, les paramètres de l'option configuration).
- Répondre à l'adresse électronique seront utilisés
- Saisissez l'adresse électronique à utiliser comme adresse de réponse (si nécessaire).
- Sujet
- Entrez le sujet.
- Fichier XSLT
- Transformez le XML avant d'envoyer l'e-mail.
-
- Slack (ancien)
- Transmet les données du formulaire à un canal spécifique sur Slack en utilisant les anciens jetons.
- API jetons
- Slack API jetons.
- Canal
- Canal de Slack vers lequel poster.
- Nom d'utilisateur
- Le nom d'utilisateur ou le robot sous lequel poster.
- URL de l'avatar
- L'URL complète (y compris http/https) de l'image de l'avatar.
-
- Slack
- Transmet les données du formulaire à un canal spécifique de Slack à l'aide d'un webhook.
- URL du Webhook
- Slack Webhook URL.
-
-
-
- Base de données SQL
- Se connecte à toute table de base de données supportée par OLEDB et construit une source de données à partir de celle-ci.
- Chaîne de connexion
- Chaîne de connexion compatible OleDB.
- Nom de la table
- Nom de la table de la base de données.
-
-
-
- Source de données
- Stocke les prévalences dans la table des prévalences.
-
- Obtenir des valeurs à partir d'un fichier texte
- Télécharger le fichier texte qui contient les valeurs prévalentes.
- Fichier texte
- Fichier contenant les valeurs de prévalence (séparées par des sauts de ligne).
-
- Umbraco Documents
- Utilise les noeuds d'une source spécifique comme valeurs préalables.
- Nœud racine
- Source à partir de laquelle récupérer les noeuds.
- Utiliser la page actuelle comme racine
- Ne fonctionne pas en mode aperçu.
- Document type
- Le type de noeuds que vous souhaitez utiliser.
- Lister tous les descendants
- Ne pas se limiter aux enfants mais inclure également les autres niveaux.
- Ordonner par
- Sélectionnez comment la liste de prévalence doit être ordonnée.
-
- Base de données SQL
- Se connecte à une table de base de données compatible OLEDB et construit une source de prévalence à partir de celle-ci.
- Chaîne de connexion
- Chaîne de connexion compatible OleDB.
- Chaîne de connexion à partir de web.config
- Choisissez la chaîne de connexion (doit être compatible avec OleDB).
- Nom de la table
-
- Colonne des clés
- Colonne contenant les clés.
- Colonne des valeurs
- Colonne contenant les valeurs.
-
- PréValeurs du type de données Umbraco
- Se connecte à un type de données Umbraco et utilise sa collection de pré-valeurs.
- Data Type
- Data type à utiliser.
-
-
-
- Fichier Excel
- Exporte toutes les données vers Excel.
-
- Enregistrer tous les fichiers téléchargés (dans la structure du disque)
- Exporte tous les fichiers téléchargés dans les soumissions de formulaires vers une archive zip, organisée comme les fichiers sont stockés sur le disque.
-
- Enregistrer tous les fichiers téléchargés (par entrée)
- Exporte tous les fichiers téléchargés dans les soumissions de formulaires vers une archive zip, organisée en un sous-dossier par entrée.
-
-
-
- Êtes-vous sûr de vouloir supprimer ces entrées?
-
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/lang/it-it.xml b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/lang/it-it.xml
deleted file mode 100644
index 432a147..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/lang/it-it.xml
+++ /dev/null
@@ -1,685 +0,0 @@
-
-
-
- Moduli
-
-
- I tuoi moduli
- Mostra di più
- Voci
- Esiste una nuova versione disponibile
- Congratulazioni
- Hai appena istallato i moduli Umbraco - Crea il tuo primo modulo
- Crea un modulo
- Non hai ancora configurato alcun modulo, vorresti crearne uno adesso?
- Crea un modulo
- Esiste una nuova versione disponibile
- Ora puoi istallare Umbraco Forms
- Aggiorna ora
- Scaricamento e aggiornamento moduli...
- Licenza non valida
- La tua attuale licenza per Umbraco Forms èvalida solamente per:
- Per favore riconfigura la tua licenza qui sotto.
- Grazie per aver provato Umbraco Forms
- Per continuare a usare Umbraco Forms ènecessario acquistare la licenza, oppure usare una licenza esistente
- Configura la licenza esistente
- Acquista la licenza
- Acquistare una licenza
-
-
- Bastano pochi minuti per acquistare una licenza per Umbraco Forms e la licenza ti viene inviata immediatamente.
-
-
- I passaggi sono:
-
- Clicca sul tasto acquista qui sotto
- Checkout con Carta di Credito (o fattura)
- Configura la licenza all'interno Umbraco Forms e sei subito operativo d è tutto istallato e funzionante
-
-
- ]]>
-
- Acquista Umbraco Forms
-
- FAQ:
- Quanto costa?
- Il prezzo parte da €209 ed è una tantum (nessun abbonamento).
- Cosa comprende una licenza?
- Una licenza comprende un solo domain e vale anche per tutti i subdomains. Include inoltre due domains di sviluppo ulteriori.
- E` possibile aggiungere ulteriori domains alla licenza?
- Sì, si possono aggiungere ulteriori domains. Si possono acquistare domains aggiuntivi alla tua licenza dal tuo account su Umbraco.com.
- Altre domande?
-
- Non preoccuparti, ci sono ulteriori info nella documentazione e non esitare a contattarci . Normalmente rispondiamo entro un paio d'ore.
-
- ]]>
-
- Configura la licenza Umbraco Forms
-
- Se hai gia` acquistato Umbraco Forms, puoi automaticamente recuperare e configuarare la tua licenza qui. Inserisci semplicemente le tue credenziali umbraco.com qui sotto e troveremo la tua licenza.
-
-
- FAQ:
- Non so quali sono le mie credenziali?
-
- Sono una combinazione della tua email e password usate quando hai effettuato l'ordine. Puoi sempre resettare la tua password qui .
-
- Come acquistare una licenza?
-
- Se non hai una licenza, puoi ottenerne una qui e bastano solo pochi minuti .
-
- ]]>
-
- Trova Licenze
- Email o password non valide
- Nessuna licenza Umbraco Forms disponibile su questo account
- Licenze disponibili
- Trovate
- Sull'account
- Nessun domain assegnato
- Per favore imposta un domain su questa licenza
- Configura e Istalla
- Istalla questa licenza
- Domains validi
- Questa licenza è valida sul domain attuale
- Questa licenza non è valida sul domain attuale
-
- Attenzione:le tue impostazioni di configurazione sono predisposte per salvare password in testo non criptato! !
- Quando usi un campo password sui tuoi moduli, i data che i tuoi visitatori immetteranno in quel campo saranno salvati in testo non criptato.. Questo è un problema di sicurezza e dobrebbe essere evitato.
- Per risolvere questo problema, puoi andare sul tuo ~/App_Plugins/UmbracoForms/UmbracoForms.config file e impostare il valore chiave SavePlainTextPasswords a False .
- Dopo aver aggiornato questa impostazione, assicurati di far ripartire l'applicazione del sito per attivare la nuova impostazione.
- Nota: I valori della password saranno ancora trasferiti su workflows, nonostante l'impostazione in UmbracoForms.config
- ]]>
-
- Attuale versione istallata di Umbraco Forms:
- Licenza configurata
- Umbraco Forms è stato configurato per l'uso su questo sito web.
- Permessi insufficienti
- Non hai i permessi per creare e gestire i moduli.
- Solo gli utenti amministratori hanno la capacita` di aggiornare Umbraco Forms.
- Domains con licenza
-
-
- Copia modulo '%0%'
- Immetti un nome per la copia del modulo
- Copiare anche workflows
- Copia su una nuova cartella
- Seleziona la location per la copia del modulo
-
-
- Crea un nuovo modulo o cartella
- Modulo vuoto
- Cominciare dall'inizio
- Cartella
- Usato per organizzare i moduli
- Immetti il nome di una cartella
-
-
- Accesso negato
-
-
- Per favore controlla che le tue impostazioni siano valide.
-
-
- Aggiungi una domanda
- Il gruppo è vuoto
- Rilascia una domanda qui...
- Rilascia
- La pagina è vuota
- Rilascia un gruppo qui...
- Aggiungi un nuovo gruppo
- Aggiungi una nuova pagina
- Pagina senza nome (opzionale)
- Gruppo senza nome (opzionale)
- Il campo non è stato salvato
- Non hai l'accesso per modificare questo modulo.
- Modulo salvato
- Impossibile caricare il modulo
- Testo d'aiuto
- Modifica Pagina
- Modifica Gruppo
- Aggiungi Domanda
- Modifica Domanda
- Workflows
-
-
- Consenti tutti i files
- Consenti solo files specifici
- Predefined allowed file types
- Tipi di files consentiti definiti dall'utente
- Conferma
- Sei sicuro di voler eliminare questo?
- Errore nel tipo di file
- Impossibile aggiungere un file perchè questo è un duplicato.
- Scegli File
- Caricamento
- File Corrente
-
-
- Aggiungi un nuovo elemento qui
- Errore di prevalore
- Impossibile aggiungere valori perchè si crea un duplicato.
- Impossibile modificare valori perchè si crea un duplicato.
-
-
- Sei sicuro di voler eliminare il %0% '%1%'
- Si prega di notare che questo può richiedere molto tempo a seconda del numero di records.
- la cartella selezionata non può essere eliminata perchè non è vuota.
- Modulo eliminato con successo.
- Il modulo non èstato eliminato.
- Eliminata la cartella con successo.
- La cartella non è stata eliminata.
-
-
- %0% Voci
- Filtro voci...
- %0% di %1% selezionati
- Esporto
- Scegli un formato in cui esportare i record del modulo
- Attualmente gli invii non sono archiviati nel database.
- Per abilitare questo, vai a impostazione modulo e attiva la funzione "Memorizza Record".
- Nessun invio è stato aggiunto a questo intervallo di dati.
- Non è stato possibile trovare nessun invio, sei sicuro di aver pubblicato il modulo? Oppure prova ad espandere l'intervallo dei dati.
- Non è stato possibile trovare nessun invio corrispondente alla tua ricerca.
- Prova a cercare qualcos'altro, forse sarai più fortunato la prossima volta.
- Voce %0% di %1%
- Voce precedente
- Voce successiva
- Non hai l'accesso a visualizzare le voci di questo modulo
- Azione eseguita
- Azione %0% eseguita con successo
- Non è stato possibile eseguire l'azione %0% a causa dell'errore %1%.
- Dettagli del record
- Chiudi dettagli
- Inviati su
- Aggiornati su
- Da pagina
- Membro
- Stato
- ID univoco
-
-
- %0% nella lista qui sotto.]]>
- %0% è stata spostata sotto %1% .]]>
- Spostato
- Il modulo è stato spostato nella location selezionata.
- La cartella è stata spostata nella location selezionata.
-
-
- Digita il nuovo nome
- Rinominato
- La cartella è stata rinonimata.
-
-
- Condizioni
- Abilita condizioni
- Mostra
- Nascondi
- tutte
- alcune
- è
- non è
- è più grande di
- è inferiore a
- contiene
- comincia con
- finisce con
- questo gruppo di campi se
- della seguente corrispondenza
- Seleziona campo
- Aggiungi condizione
- Facoltativamente definisci condizioni per visualizzare il tasto "Invia" o "Successiva" per la pagina.
-
- %1% della seguente corrispondenza:]]>
-
-
- %1% della seguente corrispondenza:]]>
-
-
- %1% della seguente corrispondenza:]]>
-
-
-
- Nessun tema disponibile. Aggiungi temi a /Views/Partials/Forms/Themes
-
-
- Workflow Nome
- Assegna un nome descrittivo al tuo workflow
- Attivo
- Abilita o disabilita il workflow
- Includi dati sensibili
- Includi dati sensibili durante l'esecuzione di questo workflow
- Invia messaggio/ Vai alla pagina
- Approva
- automatico
- Nessun workflow è stato aggiunto
- configura workflow
- Workflow non è stato salvato
- Conferma
- Le modifiche effettuate non sono state salvate. Sei sicuro di voler chiudere?
- Scegli workflow
- Su
- Su Invio
- Renderemo operativi questi workflows per te quando sara` stato inviato il modulo
- Su Approvazione
- Questi workflows saranno operativi quando la voce è stata approvata
- Questo si verifica automaticamente dopo l'invio con le correnti impostazioni del modulo
- Invia messaggio/Va alla pagina
- Mostra un messaggio quando il modulo è stato inviato o va a una pagina Umbraco
- Aggiungi workflow
- Messsaggio su invio
- Mostra un messaggio quando il modulo è stato inviato
- Va alla pagina
- Va alla pagina Umbraco quando il modulo è stato inviato
-
-
- Colonne
- Imposta quante colonne desideri avere nel tuo gruppo.
- Questo gruppo al momento ha %0%.
- Aggiungi colonna
-
-
- Inserisci una domanda...
- Inserisci il testo di aiuto...
- Etichetta richiesta
- Scegli il tipo di risposta
- Dati sensibili
- Impedisci la visualizzazione e l'esportazione dei dati se un utente non dispone di sufficienti autorizzazioni.
- Sì, questo campo memorizza dati sensibili
- Caricamento dei tipi di files consentiti
- Prevalori
- Fornisci qui una lista di opzioni (prevalori) specifiche per questo campo oppure seleziona una fonte predefinita di prevalore.
- Fornisci una lista di opzioni (prevalori) per il campo.
- Elementi
- Fonte di prevalore
- Premi invia per aggiungere un valore
- Impostazioni
- Obbligatorio
- Inserisci un'espressione regolare
- Inserisci un messaggio di campo non valido...
- Consenti il caricamento file multipli
- file multipli consentiti
- Solo file singolo
-
-
- Memorizza Record
-
- Seleziona questa casella per salvare nel database i record inviati.
- Questo ti permettera` di visualizzarli ed esportarli.
- Se non vuoi memorizzare i dati (in base alle politiche della tua organizzazione), non selezionare la casella.
-
- Sì,continua a inviare record nel database cosìda poterli visualizzare ed esportare in un secondo momento.
- Didascalie
- Cambia la didascalia per i tasti Invia/Successivo e Precedente.
- Etichetta tasto 'Invia'
- Etichetta tasto 'Successivo'
- Etichetta tasto 'Precedente'
- Stile
- Aggiungi uno o più classi al tuo modulo per abilitare lo stile personalizzato, disabilita lo stile predefinito e carica le risorse con Client Dependency.
- Modulo classe CSS
- Disabilita il foglio di stile predefinito
- Carica risorse con Client Dependency
- Convalida
- Fornisci messaggi di convalida migliori, nascondi etichette di convalida e cambia o disabilita il marker richiesto/obbligatorio.
- Messaggio di errore obbligatorio
- Messaggio da visualizzare quando un campo obbligatorio è stato lasciato vuoto
- Messaggio di errore non valido
- Messaggio da visualizzare quando un campo non è valido
- Mostra riepilogo convalida
- Nascondi le etichette di convalida dei campi
- Contrassegna i campi
- Nessun Indicatore
- Contrassegna i campi obbligatori
- Contrassegna i campi opzionali
- Indicatore
- Cambia il simbolo dell'indicatore obbligatorio
- Completamento automatico
- Aggiungi un attributo per controllare il comportamento di completamento automatico generale del modulo.
- Nessuno
- On
- Off
- Moderazione
- Consenti di posticipare la moderazione degli invii del modulo. La maggior parte dei casi d'uso sono per voci mostrate pubblicamente, come commenti a post di blog o invii per una campagna social.
- Abilita la moderazione posticipata
-
-
- Protezione del modulo utente salvata
- Protezione del modulo utente non è stata salvata
- Gestisci moduli
- Concedi o nega l'accesso alla gestione dei moduli
- Gestisci Workflows
- Concedi o nega l'accesso alla gestione di tutti gli elementi dei moduli workflow
- Gestisci origini dati
- Concedi o nega l'accesso alla gestione di qualsiasi origine dati per tutti i moduli
- Gestisci fonti di prevalore
- Concedi o nega l'accesso alla gestione di qualsiasi fonte di prevalore per tutti i moduli
- Sicurezza del modulo
- Concedi o nega l'accesso ai singoli moduli
- Nome del modulo
- Ha Accesso
-
-
- Seleziona il tipo di origine dati
- Crea modulo
- Nome del Modulo
- Seleziona campi
- Campi dell'origine dati che desideri includere nel modulo.
- Imposta chiavi esterne
- Seleziona la colonna del valore per i campi chiave esterna.
- Seleziona tipo
- Tipo di campo che desideri utilizzare per i campi inclusi (o valore predefinito).
- Valore predefinito
- Sei sicuro di voler eliminare l'origine dati %0%?
- Origine dati salvata
- Impossibile salvare l'origine dati
- Non hai accesso a modificare le origini dati
-
-
- Seleziona il tipo di fonte di prevalore
- Sei sicuro di voler eliminare la fonte del prevalore %0%?
- Fonte del prevalore salvata
- Impossibile salvare la fonte del prevalore
- Non hai accesso a modificare le fonti del prevalore
-
-
-
- Casella di controllo
- Visualizza una casella di controllo.
- Valore predefinito
- Inserisci un valore predefinito.
-
- Scelta multipla
- Visualizza una raccolta di caselle di controllo per selezionare più risposte.
- Valore predefinito
- Inserisci un valore predefinito.
- Mostra etichetta
- Indica se l'etichetta del campo deve essere mostrata durante la resa grafica del modulo.
-
- Consenso Dati
- Resa grafica di un campo per chiedere consenso ai dati.
- Accetta testo
- Il testo utilizzato per confermare il consenso.
-
- Data
- Resa grafica di un calendario.
- Segnaposto
- Inserisci un valore segnaposto.
-
- Lista a discesa
- Visualizza un elenco di valori in un menù a discesa
- Valore Predefinito
- Inserisci un valore predefinito.
- Consenti selezioni multiple
- Indica se sono consentite selezioni multiple dall'elenco.
- Mostra Etichetta
- Indica se l'etichetta del campo deve essere mostrata durante la resa grafica del modulo.
- Attributo di completamento automatico
- Facoltativamente, inserisci un valore per l'attributo di completamento automatico.
-
- Caricamento file
- Resa grafica di un campo di caricamento, consentire il caricamento del file.
-
- Nascosto
- Resa grafica di un campo nascosto.
- Valore Predefinito
- Inserisci un valore predefinito.
-
- Password
- Resa grafica di un campo password.?
- Segnaposto
- Inserire un valore segnaposto.
-
- Singola Scelta
- Resa grafica di un elenco di pulsanti di opzione per abilitare una risposta a scelta singola.?
- Valore Predefinito
- Inserisci un valore predefinito.
- Mostra Etichetta
- Indica se l'etichetta del campo deve esssere mostrata durante la resa grafica del modulo.
-
- reCAPTCHA v2
- Google reCAPTCHA v2.
- Tema
- Tema reCAPTCHA v2
- Dimensione
- Dimensione reCAPTCHA v2.
- Messaggio di errore
- Il messaggio di errore da visualizzare quando l'utente non supera il controllo reCAPTCHA.
-
- reCAPTCHA v3 con punteggio?
- Google reCAPTCHA v3 con soglia di punteggio
- Soglia punteggio
- Un reCAPTCHA v3 ha determinato un punteggio compreso tra 0 e 1, al di sopra del quale vengono accettati gli invii di moduli. Un valore più alto catturerà più invii di spam, ma aumenterà anche il rischio di rifiuto di voci valide. Per la maggior parte dei siti, 0,5 è una scelta ragionevole.
- Messaggio di errore
- Il messaggio di errore da visualizzare quando l'utente non supera il controllo reCAPTCHA.
-
- Titolo e descrizione
- Questo è utilizzato per inserire testo descrittivo.
- Titolo
- Inserisci un titolo.
- Corpo del Testo
- Inserisci la tua copia.
-
- Risposta lunga
- Resa grafica di un'area di testo,progettata per risposte più lunghe.
- Valore predefinito
- Inserisci un valore predefinito.
- Segnaposto
- Inserisci un volore segnaposto.
- Mostra Etichetta
- Indica se l'etichetta del campo deve essere mostrata durante la resa grafica del modulo.
- Attributo di completamento automatico
- Facoltativamente, inserisci un valore per l'attributo di completamento automatico.
- Numero Di Righe
- Inserisci il numero di righe visualizzate per voce.
-
- Risposta breve
- Resa grafica di un campo di inserimento di testo, per risposte brevi.
- Valore Predefinito
- Inserisci un valore predefinito.
- Segnaposto
- Inserisci un valore segnaposto.
- Mostra Etichetta
- Indica se l'etichetta del campo deve essere mostrata durante la resa grafica del modulo.
- Attributo di completamento automatico
- Facoltativamente, inserisci un valore per l'attributo di completamento automatico.
-
-
-
- Modifica Stato Record
- Cambia lo stato del record in elaborazione quando corrisponde a una parola.
- Parole
- Elenco separato da virgole di parole da abbinare.
- Azione
- Cosa fare se si abbina.
-
- Pubblica come XML
- Pubblica il modulo come XML a un URL.
- URL
- Inserisci l'URL su cui postare.
- Metodo
- POST o GET.
- XSLT File
- Trasforma l'XML prima di pubblicarlo.
- Campi
- Mappa i campi necessari.
- Utente
- (opzionale)
- Password
- (opzionale)
-
- Invia il modulo all'URL
- Invia il modulo a un URL, come HTTP POST o GET.
- URL
- Inserisci l'URL su cui postare.
- Metodo
- POST or GET.
- Campi Standard
- Mappa qualsiasi informazione del modulo standard da inviare.
- Campi
- Mappa i campi necessari.
- Utente
- (opzionale)
- Password
- (opzionale)
-
- Salva come XML file
- Salva il risultato del modulo come file XML tramite XSLT.
- Percorso
- Percorso per posizionare il file.
- Estensione
- Estensione del file.
- XSLT File
- Trasforma l'XML prima di salvarlo.
-
- Salva come nodo di contenuto Umbraco
- Salva i valori del modulo come nodo di contenuto utilizzando un tipo di documento specificato.
- Tipo di Documento
- Mappa il tipo di documento.
- Pubblica
- Pubblica nodo istantaneamente.
- Salva location
- Scegli la posizione dove salvare il nodo di contenuto creato.
-
- Invia email
- Invia il risultato del modulo a un indirizzo email.
- Destinatario dell'email
- Inserisci gli indirizzi email del destinatario.
- CC Email
- Inserisci gli indirizzi email CC (se richiesto).
- BCC Email
- Inserisci gli indirizzi email BCC (se richiesto).
- Mittente dell'email
- Inserisci l'email del mittente (se vuoto utilizzerà le impostazioni da configurazione).
- Rispondi All'Email
- Inserisci l'indirizzo email da utilizzare come indirizzo di risposta(se richiesto).
- Oggetto
- Inserisci l'oggetto.
- Messaggio
- Inserisci il messaggio introduttivo.
- Allegati
- Allega i file caricati all'e-mail.
-
- Invia email con modello (Razor)
- Invia il risultato del modulo a un indirizzo/indirizzi e-mail utilizzando un modello Razor .cshtml template.
- Destinatario Dell' Email
- Inserisci l' indirizzo/indirizzi email del destinatario.
- CC Email
- Inserisci gli indirizzi email CC (se richiesto).
- BCC Email
- Inserisci gli indirizzi email BCC (se richiesto).
- Email del Mittente
- Inserisci l'email del mittente (se vuoto utilizzerà le impostazioni da configurazione).
- Rispondi All'Email
- Inserisci l'indirizzo email da utilizzare come indirizzo per le risposte (se richiesto).
- Oggetto
- Inserisci l'oggetto.
- Modello Email
- Il percorso alla visualizzazione Razor che desideri utilizzare per generare l'email. I modelli di email sono archiviati in /Views/Partials/Forms/Emails.
- Allegati
- Allega i file caricati all'e-mail
-
- Invia email trasformata da XSLT
- Invia il risultato del modulo a un indirizzo email.
- Destinatario dell'Email
- Inserisci gli indirizzi del destinatario.
- CC Email
- Inserisci gli indirizzi email CC (se richiesto).
- BCC Email
- Inserisci gli indirizzi email BCC (se richiesto).
- Email del Mittente
- Inserisci l'e-mail del mittente (se vuoto utilizzerà le impostazioni da configurazione).
- Rispondi All'Email
- Inserisci l'indirizzo email da utilizzare come indirizzo per le risposte (se richiesto).
- Oggetto
- Inserisci l'oggetto.
- XSLT File
- Transform the XML before sending the email.
-
- Slack (retrodatata)
- Pubblica i dati del modulo su un canale specifico Slack utilizzando token retrodatati.
- API Token
- Slack API token.
- Canale
- Canale Slack su cui postare???
- Nome utente
- Il nome utente o il bot da pubblicare in sua vece.
- URL dell'avatar
- L'URL completo (incluso http/https) dell'immagine dell'avatar.
-
- Slack
- Pubblica i dati del modulo su un canale specifico su Slack utilizzando un webhook.
- Webhook URL
- Slack Webhook URL.
-
-
-
- Database SQL
- Si collega a qualsiasi tabella di database supportata da OLEDB e costruisce un'origine dati da essa.
- Stringa di connessione
- Stringa di connessione compatibile con OleDB.
- Nome Tabella
- Nome tabella del database.
-
-
-
- Fonte di dati
- Memorizza i prevalori nella tabella dei prevalori.
-
- Ottieni valori da file di testo
- Carica il file di testo che contiene i prevalori.
- File di Testo
- File contenente i prevalori (separati da interruzioni di riga).
-
- Documenti Umbraco
- Utilizza i nodi di un'origine specifica come prevalore.
- Nodo radice
- Sorgente da cui recuperare i nodi.
- Usa la pagina corrente come root
- Non funziona in modalità anteprima.
- Tipo di documento
- Il tipo di nodi che vorresti usare.
- Elenca tutti i discendenti
- Non limitare ai bambini ma includere anche altri livelli.
- Ordina per
- Seleziona come deve essere ordinato l'elenco dei prevalori.
-
- SQL Database
- Si connette a una tabella di database compatibile con OLEDB e costruisce una fonte di prevalore da essa.
- Stringa di Connessione
- Stringa di connessione compatibile con OleDB.
- Stringa di connessione da configurazione
- Scegli la stringa di connessione (deve essere compatibile con OleDB).
- Nome dell Tabella
-
- Colonna Chiave
- Colonna contenente le chiavi.
- Colonna valore
- Colonna contenente i valori.
-
- Tipo di dati Umbraco prevalori
- Si connette a un tipo di dati Umbraco e utilizza la sua raccolta di prevalore.
- Tipo di Dati
- Tipo di dati da usare.
-
-
-
- Excel File
- Esporta tutti i dati in Excel.
-
- Salva tutti i file caricati (nella struttura del disco)
- Esporta tutti i file caricati negli invii di moduli in un archivio zip, organizzato come i file sono archiviati su disco.
-
- Salva tutti i file caricati (per voce)
-
- Esporta tutti i file caricati negli invii dei moduli in un archivio zip, organizzato in una sottocartella per voce.
-
-
-
-
- Sei sicuro di voler eliminare queste voci?
-
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/lang/pl-pl.xml b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/lang/pl-pl.xml
deleted file mode 100644
index acbb0a3..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/lang/pl-pl.xml
+++ /dev/null
@@ -1,690 +0,0 @@
-
-
-
- Forms
-
-
- Twoje formularze
- Pokaż więcej
- Wpisy
- Nowa wersja jest dostępna
- Gratulacje
- Właśnie zainstalowałeś/aś Umbraco Forms - Stwórz swój pierwszy formularz
- Stwórz formularz
- Nie masz jeszcze skonfigurowanych formularzy, co powiesz na utworzenie go teraz?
- Stwórz formularz
- Dostępna jest nowa wersja
- Możesz teraz zainstalować Umbraco Forms
- Uaktualnij teraz
- Pobieranie i aktualizowanie formularzy...
- Nieprawidłowa licencja
- Twoja aktualna licencja Forms jest ważna tylko dla:
- Skonfiguruj ponownie swoją licencję poniżej.
- Dziękujemy za wypróbowanie Umbraco Forms
- Aby nadal korzystać z Umbraco Forms, musisz kupić licencję lub użyć istniejącej
- Skonfiguruj istniejącą licencję
- Kupowanie licencji
- Kupowanie licencji
-
-
- Kupienie licencji do Umbraco Forms zajmuje tylko kilka minut i Twoja licencja jest natychmiast dostarczana .
-
-
- Wykonaj następujące kroki:
-
- Kliknij przycisk kup poniżej
- Zapłać za pomocą karty kredytowej (lub faktury)
- Skonfiguruj licencję Umbraco Forms i gotowe
-
-
- ]]>
-
- Kup Umbraco Forms
-
- FAQ:
- Ile kosztują?
- Ceny zaczynają się od €209 i są jednorazową opłatą (bez subskrypcji).
- Co obejmuje licencja?
- Licencja obejmuje jedną domenę i będzie działać również na wszystkich subdomenach. Zawiera również dwie dodatkowe domeny programistyczne.
- Czy mogę dodać dodatkowe domeny do licencji?
- Tak, można dodać dodatkowe domeny. Możesz kupić dodatkowe domeny do swojej licencji ze swojego konta na Umbraco.com.
- Więcej pytań?
-
- Nie martw się, w dokumentacji jest więcej szczegółów i możesz się z nami skontaktować. . Zwykle odpowiadamy w ciągu kilku godzin.
-
- ]]>
-
- Skonfiguruj licencje Umbraco Forms
-
- Jeśli kupiłeś/aś już Umbraco Forms, możesz automatycznie pobrać i skonfigurować swoją licencję tutaj. Po prostu wprowadź swoje dane uwierzytelniające do umbraco.com poniżej, a my
- znajdziemy twoją licencję.
-
-
- Najczęściej zadawane pytania:
- Nie wiem, jakie są moje dane uwierzytelniające
-
- Jest to połączenie Twojego adresu e-mail i hasła z momentu złożenia zamówienia. Zawsze możesz zresetować hasło tutaj .
-
- Jak kupić licencję?
-
- Jeśli nie masz licencji, możesz nabyć ją stąd i zajmie to tylko kilka minut< /a>.
-
- ]]>
-
- Znajdź licencję
- Nieprawidłowy e-mail lub hasło
- Brak licencji Umbraco Forms dostępnych na tym koncie
- Dostępne licencje
- Znaleziono
- na koncie
- Nie ma przypisanych domen
- Ustaw domenę na tej licencji
- Konfiguruj i instaluj
- Zainstaluj tę licencję
- Prawidłowe domeny
- Ta licencja jest ważna na bieżącej domenie
- Ta licencja nie jest ważna na bieżącej domenie
-
- Ostrzeżenie: ustawienia konfiguracji są ustawione na zapisywanie haseł w postaci zwykłego tekstu!
- Gdy użyjesz pola hasła w dowolnym formularzu, dane wprowadzone przez odwiedzających w tym polu będą przechowywane w postaci zwykłego tekstu. Jest to kwestia bezpieczeństwa i należy tego unikać.
- Aby rozwiązać ten problem, musisz przejść do pliku ~/App_Plugins/UmbracoForms/UmbracoForms.config i ustawić klucz SavePlainTextPasswords na False .
- Po zaktualizowaniu tego ustawienia pamiętaj o zrestartowaniu aplikacji, aby nowe ustawienia stały się aktywne.
- Uwaga: wartości haseł będą nadal przekazywane do przepływów pracy, niezależnie od ustawienia w UmbracoForms.config
- ]]>
-
- Aktualnie zainstalowana wersja Umbraco Forms:
- Licencja skonfigurowana
- Umbraco Forms zostały skonfigurowane do użytku na tej stronie.
- Niewystarczające uprawnienia
- Nie masz uprawnień do tworzenia formularzy i zarządzania nimi.
- Tylko użytkownicy Admin mają możliwość uaktualniania Umbraco Forms.
- Licencjonowane domeny
-
-
- Kopiowanie formularza '%0%'
- Podaj nazwę skopiowanego formularza
- Kopiujesz także przepływy pracy?
- Skopiować do nowego folderu?
- Wybierz lokalizację skopiowanego formularza
-
-
- Utwórz nowy formularz lub folder
- Pusty formularz
- Zaczynając od zera
- Folder
- Używany do organizowania formularzy
- Podaj nazwę folderu
-
-
- Brak dostępu
-
-
- Sprawdź, czy ustawienia są prawidłowe.
-
-
- Dodaj pytanie
- Grupa jest pusta
- Umieść pytanie tutaj...
- Yaay .. puść
- Strona jest pusta
- Upuść grupę tutaj...
- Dodaj nową grupę
- Dodaj nową stronę
- Strona bez tytułu (opcjonalnie)
- Grupa bez tytułu (opcjonalnie)
- Pole nie zostało zapisane
- Nie masz dostępu do edycji tego formularza.
- Formularz zapisany
- Nie można załadować formularza
- Tekst pomocy
- Edytuj stronę
- Edytuj grupę
- Dodaj pytanie
- Edytuj pytanie
- Przepływ pracy
-
-
- Zezwól na wszystkie pliki
- Zezwalaj tylko na określone pliki
- Wstępnie zdefiniowane dozwolone typy plików
- Dozwolone typy plików zdefiniowane przez użytkownika
- Potwierdzam
- Czy na pewno chcesz to usunąć?
- Błąd typu pliku
- Nie można dodać typu pliku, ponieważ jest to duplikat.
- Wybierz plik
- Przesyłanie
- Bieżący plik
-
-
- Dodaj tutaj nowy element
- Błąd wartości wstępnych
- Nie można dodać wartości, ponieważ spowodowałoby to utworzenie duplikatu.
- Nie można edytować wartości, ponieważ spowodowałoby to utworzenie duplikatu.
-
-
- Czy na pewno chcesz usunąć %0% '%1%'?
- Pamiętaj, że może to zająć dużo czasu w zależności od liczby wpisów.
- Wybrany folder nie może zostać usunięty, ponieważ nie jest pusty.
- Pomyślnie usunięto formularz.
- Nie udało się usunąć formularza.
- Pomyślnie usunięto folder.
- Nie udało się usunąć folderu.
-
-
- %0% wpisów
- Filtruj wpisy ...
- %0% lub %1% zaznaczono
- Eksportuj
- Wybierz format do eksportu wpisów do formularza
- Obecnie wpisy nie są przechowywane w bazie danych.
- Aby to włączyć, przejdź do ustawień formularza i aktywuj funkcję "Przechowuj wpisy".
- Nie dodano jeszcze żadnych wpisów w tym zakresie dat.
- Nie znaleźliśmy żadnych wpisów, czy na pewno opublikowałeś/aś formularz? Ewentualnie spróbuj rozszerzyć zakres dat.
- Nie mogliśmy znaleźć żadnych wpisów pasujących do Twojego wyszukiwania.
- Spróbuj wyszukać coś innego, może następnym razem będziesz miał szczęście.
- Wpis %0% lub %1%
- Poprzedni wpis
- Następny wpis
- Nie masz dostępu do przeglądania wpisów do tego formularza.
- Wykonana akcja
- Pomyślnie wykonane działanie %0%
- Nie udało się wykonać akcji %0% z powodu błędu: %1%.
- Szczegóły wpisu
- Zamknij szczegóły
- Przesłano dnia
- Zaktualizowano
- Ze strony
- Członek
- Stan
- Unikalny identyfikator
-
-
- %0% w poniższej strukturze drzewa treści.]]>
- %0% został przeniesiony pod %1% .]]>
- Przeniesiony
- Formularz został przeniesiony do wybranej lokalizacji.
- Folder został przeniesiony do wybranej lokalizacji.
-
-
- Wprowadź nową nazwę
- Zmieniono nazwę
- Zmieniono nazwę folderu.
-
-
- Warunki
- Włącz warunki
- Pokaż
- Ukryj
- wszystkie
- dowolny
- jest
- nie jest
- jest większy niż
- jest mniejszy niż
- zawiera
- zaczyna się od
- kończy się na
- ten zestaw pól, jeśli
- następującego dopasowania
- Wybierz pole
- Dodaj warunek
- Opcjonalnie zdefiniuj warunki wyświetlania przycisku „Prześlij” lub „Dalej” dla strony.
-
- %1% z następującego dopasowania:]]>
-
-
- %1% z następującego dopasowania:]]>
-
-
- %1% z następującego dopasowania:]]>
-
-
-
- Brak dostępnych motywów. Dodaj motywy do /Views/Partials/Forms/Themes
-
-
- Nazwa przepływu pracy
- Nadaj opisową nazwę swojemu przepływowi pracy
- Aktywny
- Włącz lub wyłącz przepływ pracy
- Dołącz dane poufne
- Dołączyć poufne dane podczas wykonywania tego przepływu pracy?
- Prześlij wiadomość / Przejdź do strony
- Zatwierdź
- automatyczny
- Nie dodano żadnych przepływów pracy
- skonfiguruj przepływ pracy
- Nie udało się zapisać przepływu pracy
- Potwierdzam
- Wprowadzono zmiany, które nie zostały zapisane. Czy na pewno chcesz zamknąć?
- Wybierz przepływ pracy
- Po
- Po przesłaniu
- Uruchomimy te przepływy pracy po przesłaniu formularza
- Po zatwierdzeniu
- Te przepływy pracy zostaną uruchomione po zatwierdzeniu wpisu
- odbywa się to automatycznie po przesłaniu zdarzenia z bieżącymi ustawieniami formularza
- Prześlij wiadomość / Przejdź do strony
- Pokaż komunikat po przesłaniu formularza lub przejdź do strony Umbraco
- Dodaj przepływ pracy
- Wiadomość po przesłaniu
- Pokaż komunikat po przesłaniu formularza
- Przejdź do strony
- Przejdź do strony Umbraco po przesłaniu formularza
-
-
- Kolumny
- Ustaw liczbę kolumn, które chcesz mieć w swojej grupie.
- Ta grupa ma obecnie %0%.
- Dodaj kolumnę
-
-
- Wprowadź pytanie...
- Wprowadź tekst pomocy...
- Wymagana etykieta
- Wybierz typ odpowiedzi
- Dane poufne
- Zapobiegaj przeglądaniu i eksportowaniu danych, jeśli użytkownik nie ma wystarczających uprawnień.
- Tak, to pole przechowuje poufne dane
- Dozwolone typy przesyłania plików
- Wartości wstępne
- Podaj tutaj listę opcji (wartości wstępnych) specyficznych dla tego pola lub wybierz wstępnie zdefiniowane źródło wartości wstępnych.
- Zawiera listę opcji (wartości wstępnych) dla pola.
- Pozycje
- Źródło wartości wstępnych
- Wciśnij Enter, aby dodać wartość
- Ustawienia
- Obowiązkowe
- Wprowadź wyrażenie regularne
- Wprowadź wiadomość dla niepoprawej wartości w polu...
- Zezwalaj na przesyłanie wielu plików
- Wiele plików jest dozwolone
- Tylko jeden plik
-
-
- Przechowuj wpisy
-
- Zaznacz to pole, aby zapisać przesłane wpisy w bazie danych.
- Umożliwi to przeglądanie i eksportowanie ich z przeglądu zapytań.
- Jeśli nie chcesz przechowywać danych (ze względu na zasady obowiązujące w Twojej organizacji), pozostaw to pole niezaznaczone.
-
- Tak, przechowuj przesłane wpisy w bazie danych, aby można je było później przeglądać i eksportować.
- Tekst przycisków
- Zmień tekst przycisków Prześlij, Dalej i Poprzedni.
- Etykieta przycisku „Prześlij”
- Etykieta przycisku „Dalej”
- Etykieta przycisku „Poprzedni”
- Stylowanie
- Dodaj jedną lub więcej klas, aby otoczyć formularz, aby włączyć niestandardowe style, wyłączyć domyślne style i załadować zasoby za pomocą Client Dependency.
- Klasa CSS formularza
- Wyłącz domyślny arkusz stylów
- Załaduj zasoby z Client Dependency
- Weryfikacja
- Zapewnij lepsze komunikaty weryfikacyjne, ukryj etykiety weryfikacji i zmień lub wyłącz znacznik wymagany/obowiązkowy.
- Komunikat o błędzie pola obowiązkowego
- Komunikat do wyświetlenia, gdy obowiązkowe pole nie zostało wypełnione
- Komunikat o błędzie pola z niepoprawną wartością
- Komunikat do wyświetlenia, gdy pole jest nieprawidłowe
- Pokaż podsumowanie weryfikacji
- Ukryj etykiety sprawdzania poprawności pól
- Zaznacz pola
- Brak wskaźnika
- Zaznacz pola obowiązkowe
- Zaznacz pola opcjonalne
- Wskaźnik
- Zmień obowiązkowy symbol wskaźnika
- Autouzupełnianie
- Dodaj atrybut, aby kontrolować ogólne zachowanie autouzupełniania formularza.
- Brak
- Włączone
- Wyłączone
- Moderacja
- Zezwalaj na moderowanie przesłanych formularzy. Większość przypadków użycia dotyczy publicznie wyświetlanych wpisów, takich jak komentarze do postów na blogu lub zgłoszenia do kampanii społecznościowej.
- Włącz moderację postów
-
-
- Zapisano ustawienia formularza dla użytkownika
- Nie udało się zapisać zabezpieczeń formularza użytkownika
- Zarządzaj formularzami
- Przyznaj lub odmów dostępu do zarządzania formularzami
- Zarządzaj przepływami pracy
- Przyznaj lub odmów dostępu do zarządzania wszystkimi elementami przepływu pracy formularzy
- Zarządzaj źródłami danych
- Przyznaj lub odmów dostępu do zarządzania dowolnymi źródłami danych dla wszystkich formularzy
- Zarządzaj źródłami wartości wstępnych
- Przyznaj lub odmów dostępu do zarządzania dowolnymi źródłami wartości wstępnych dla wszystkich formularzy
- Zabezpieczenia formularzy
- Przyznaj lub odmów dostępu do poszczególnych formularzy
- Nazwa formularza
- Ma dostęp
-
-
- Wybierz typ źródła danych
- Utwórz formularz
- Nazwa formularza
- Wybierz pola
- Pola ze źródła danych, które chcesz uwzględnić w formularzu.
- Konfiguruj klucze obce
- Wybierz kolumnę wartości dla pól klucza obcego.
- Wybierz typ
- Typ pola, którego chcesz użyć dla uwzględnionych pól (lub wartość domyślna).
- Wartość domyślna
- Czy na pewno chcesz usunąć źródło danych %0%?
- Źródło danych zostało zapisane
- Nie udało się zapisać źródła danych
- Nie masz dostępu do edycji źródeł danych
-
-
- Wybierz typ źródła wartości wstępnych
- Czy na pewno chcesz usunąć źródło wartości wstępnych %0%?
- Zapisano źródło wartości wstępnych
- Nie udało się zapisać źródła wartości wstępnych
- Nie masz dostępu do edycji źródeł wartości wstępnych
-
-
-
- Pole wyboru
- Renderuje pole wyboru.
- Wartość domyślna
- Wprowadź wartość domyślną.
-
- Wielokrotny wybór
- Renderuje zbiór pól wyboru, aby wybrać wiele odpowiedzi.
- Wartość domyślna
- Wprowadź wartość domyślną.
- Pokaż etykietę
- Wskaż, czy etykieta pola powinna być pokazywana podczas renderowania formularza.
-
- Zgoda na przekazywanie danych
- Renderuje pole z prośbą o zgodę na przekazywanie danych.
- Zaakceptuj kopię
- Tekst używany do potwierdzenia zgody.
-
- Data
- Renderuje selektor dat.
- Symbol zastępczy
- Wprowadź wartość symbolu zastępczego.
-
- Menu rozwijane
- Renderuje listę wartości w menu
- Wartość domyślna
- Wprowadź wartość domyślną.
- Zezwalaj na wielokrotny wybór
- Wskaż, czy dozwolone jest wielokrotne wybieranie z listy.
- Pokaż etykietę
- Wskaż, czy etykieta pola powinna być pokazywana podczas renderowania formularza.
- Atrybut autouzupełniania
- Opcjonalnie wprowadź wartość atrybutu autouzupełniania.
-
- Przesyłanie plików
- Renderuje pole przesyłania, umożliwiając przesyłanie plików.
-
- Ukryty
- Renderuje ukryte pole.
- Wartość domyślna
- Wprowadź wartość domyślną.
-
- Hasło
- Renderuje pole hasła.
- Symbol zastępczy
- Wprowadź wartość symbolu zastępczego.
-
- Jeden wybór
- Renderuje listę przycisków opcji, aby umożliwić odpowiedź z jednym wyborem.
- Wartość domyślna
- Wprowadź wartość domyślną.
- Pokaż etykietę
- Wskaż, czy etykieta pola powinna być pokazywana podczas renderowania formularza.
-
- reCAPTCHA v2
- Google reCAPTCHA v2.
- Motyw
- Motyw reCAPTCHA v2.
- Rozmiar
- Rozmiar reCAPTCHA v2.
- Komunikat o błędzie
- Komunikat o błędzie wyświetlany, gdy użytkownik nie przejdzie testu reCAPTCHA.
-
- reCAPTCHA v3 z wynikiem
- Google reCAPTCHA v3 z progiem wyniku
- Próg wyniku
- Wynik określony przez reCAPTCHA v3 w zakresie od 0 do 1, powyżej którego można przesyłać formularze. Wyższa wartość spowoduje wyłapanie większej liczby zgłoszeń spamowych, ale także zwiększy ryzyko odrzucenia prawidłowych wpisów. W przypadku większości witryn 0,5 to rozsądny wybór.
- Komunikat o błędzie
- Komunikat o błędzie wyświetlany, gdy użytkownik nie przejdzie testu reCAPTCHA.
-
- Tytuł i opis
- Służy do wprowadzenia tekstu opisowego.
- Nagłówek
- Wprowadź nagłówek.
- Tekst główny
- Wprowadź tekst.
-
- Długa odpowiedź
- Renderuje obszar tekstowy przeznaczony do dłuższych odpowiedzi.
- Wartość domyślna
- Wprowadź wartość domyślną.
- Symbol zastępczy
- Wprowadź wartość symbolu zastępczego.
- Pokaż etykietę
- Wskaż, czy etykieta pola powinna być pokazywana podczas renderowania formularza.
- Atrybut autouzupełniania
- Opcjonalnie wprowadź wartość atrybutu autouzupełniania.
- Liczba wierszy
- Wprowadź liczbę wierszy wyświetlanych do wpisu.
- Maksymalna długość
- Wprowadź maksymalną liczbę akceptowanych znaków.
-
- Krótka odpowiedź
- Renderuje pole wprowadzania tekstu, aby uzyskać krótkie odpowiedzi.
- Wartość domyślna
- Wprowadź wartość domyślną.
- Symbol zastępczy
- Wprowadź wartość symbolu zastępczego.
- Pokaż etykietę
- Wskaż, czy etykieta pola powinna być pokazywana podczas renderowania formularza.
- Maksymalna długość
- Wprowadź maksymalną liczbę akceptowanych znaków.
- Typ pola
- Wybierz typ oczekiwanych informacji.
- Atrybut autouzupełniania
- Opcjonalnie wprowadź wartość atrybutu autouzupełniania.
-
-
-
- Zmień stan wpisu
- Zmienia stan przetwarzanego wpisu, gdy pasuje on do słowa.
- Słowa
- Lista słów oddzielonych przecinkami do dopasowania.
- Działanie
- Co zrobić, jeśli pasuje.
-
- Opublikuj jako XML
- Wysyła formularz jako XML do adresu URL.
- URL
- Wprowadź adres URL, na który chcesz to wysłać.
- Metoda
- POST lub GET.
- Plik XSLT
- Przekształć XML przed wysłaniem.
- Pola
- Zmapuj potrzebne pola.
- Użytkownik
- (opcjonalnie)
- Hasło
- (opcjonalnie)
-
- Wyślij formularz na adres URL
- Wysyła formularz na adres URL jako HTTP POST lub GET.
- URL
- Wprowadź adres URL, na który chcesz to wysłać.
- Metoda
- POST lub GET.
- Pola standardowe
- Odwzoruj dowolne standardowe informacje z formularza do wysłania.
- Pola
- Zmapuj potrzebne pola.
- Użytkownik
- (opcjonalnie)
- Hasło
- (opcjonalnie)
-
- Zapisz jako plik XML
- Zapisuje wynik formularza jako plik XML przez XSLT.
- Ścieżka
- Ścieżka do umieszczenia pliku.
- Rozszerzenie
- Rozszerzenie pliku.
- Plik XSLT
- Przekształć XML przed zapisaniem.
-
- Zapisz jako treść Umbraco
- Zapisuje wartości formularza jako treść przy użyciu określonego typu dokumentu.
- Typ dokumentu
- Mapuj typ dokumentu.
- Publikuj
- Opublikuj treść natychmiast.
- Zapisz lokalizację
- Wybierz lokalizację, w której chcesz zapisać utworzoną treść.
-
- Wyślij e-mail
- Wyślij wynik formularza na adres e-mail.
- E-mail odbiorcy
- Wprowadź adresy e-mail odbiorcy.
- Poczta CC
- Wprowadź adresy e-mail CC (jeśli są wymagane).
- BCC E-mail
- Wprowadź adresy e-mail BCC (jeśli są wymagane).
- E-mail nadawcy
- Wprowadź adres e-mail nadawcy (jeśli jest pusty, użyje ustawień z konfiguracja).
- Odpowiedz na e-mail
- Wprowadź adres e-mail, który ma być używany jako adres zwrotny (jeśli jest wymagany).
- Temat
- Wprowadź temat.
- Wiadomość
- Wprowadź wiadomość wprowadzającą.
- Załączniki
- Załącz przesłane pliki do wiadomości e-mail.
-
- Wyślij e-mail z szablonem (Razor)
- Wyślij wynik formularza na adres/adresy e-mail przy użyciu szablonu Razor .cshtml.
- E-mail odbiorcy
- Wprowadź adres(y) e-mail odbiorcy.
- CC Email
- Wprowadź adresy e-mail CC (jeśli są wymagane).
- BCC E-mail
- Wprowadź adresy e-mail BCC (jeśli są wymagane).
- E-mail nadawcy
- Wprowadź adres e-mail nadawcy (jeśli jest pusty, użyje ustawień z konfiguracja).
- Odpowiedz na e-mail
- Wprowadź adres e-mail, który ma być używany jako adres zwrotny (jeśli jest wymagany).
- Temat
- Wprowadź temat.
- Szablon wiadomości e-mail
- Ścieżka do widoku Razor, którego chcesz użyć do wygenerowania wiadomości e-mail. Szablony wiadomości e-mail są przechowywane w /Views/Partials/Forms/Emails.
- Załączniki
- Załącz przesłane pliki do wiadomości e-mail.
-
- Wyślij przekształcony e-mail XSLT
- Wyślij wynik formularza na adres e-mail.
- E-mail odbiorcy
- Wprowadź adresy e-mail odbiorcy.
- Poczta CC
- Wprowadź adresy e-mail CC (jeśli są wymagane).
- BCC E-mail
- Wprowadź adresy e-mail BCC (jeśli są wymagane).
- E-mail nadawcy
- Wprowadź adres e-mail nadawcy (jeśli pusty, użyje ustawień z konfiguracja).
- Odpowiedz na e-mail
- Wprowadź adres e-mail, który ma być używany jako adres zwrotny (jeśli jest wymagany).
- Temat
- Wprowadź temat.
- Plik XSLT
- Przekształć kod XML przed wysłaniem wiadomości e-mail.
-
- Slack (Legacy)
- Wysyła dane formularza do określonego kanału na Slack przy użyciu legacy tokenów.
- Token API
- Token API Slack.
- Kanał
- Slack kanału do publikowania.
- Nazwa użytkownika
- Nazwa użytkownika lub bota do publikowania.
- URL awatara
- Pełny adres URL (w tym http/https) obrazu awatara.
-
- Slack
- Wysyła dane formularza do określonego kanału na Slack za pomocą webhooka.
- URL webhooka
- Slack Webhook URL.
-
-
-
- Baza danych SQL
- Łączy się z dowolną tabelą bazy danych obsługiwaną przez OLEDB i tworzy z niej źródło danych.
- Ciąg połączenia
- Ciąg połączenia zgodny z OleDB.
- Nazwa tabeli
- Nazwa tabeli bazy danych.
-
-
-
- Źródło danych
- Przechowuje wartości wstępne w tabeli wartości wstępnych.
-
- Pobierz wartości z pliku tekstowego
- Prześlij plik tekstowy zawierający wartości wstępne.
- Plik tekstowy
- Plik zawierający wartości wstępne (oddzielone łamaniami linii).
-
- Dokumenty Umbraco
- Używa treści z określonego źródła jako wartości wstępnych.
- Treść główna
- Źródło pobierania treści.
- Użyj bieżącej strony jako strony głównej
- Nie działa w trybie podglądu.
- Typ dokumentu
- Typ treści, której chcesz użyć.
- Wymień wszystkich potomków
- Nie ograniczaj się do dzieci, ale uwzględnij także inne poziomy.
- Uporządkuj według
- Wybierz sposób uporządkowania listy wartości wstępnych.
-
- Baza danych SQL
- Łączy się z tabelą bazy danych zgodną z OLEDB i tworzy z niej źródło wartości wstępnych.
- Ciąg połączenia
- Parametry połączenia zgodne z OleDB.
- Ciąg połączenia z pliku web.config
- Wybierz ciąg połączenia (musi być zgodny z OleDB).
- Nazwa tabeli
-
- Kolumna kluczy
- Kolumna zawierająca klucze.
- Kolumna wartości
- Kolumna zawierająca wartości.
-
- Wartości wstępne typu danych Umbraco
- Łączy się z typem danych Umbraco i używa jego kolekcji wartości wstępnych.
- Typ danych
- Typ danych do użycia.
-
-
-
- Plik Excela
- Eksportuje wszystkie dane do Excela.
-
- Zapisz wszystkie przesłane pliki (w strukturze dysku)
- Eksportuje wszystkie pliki przesyłane w przesłanych formularzach do archiwum zip, uporządkowanego tak, jak pliki są przechowywane na dysku.
-
- Zapisz wszystkie przesłane pliki (według wpisów)
- Eksportuje wszystkie pliki przesyłane w przesłanych formularzach do archiwum zip, uporządkowane w podfolderze według wpisów.
-
-
-
- Czy na pewno chcesz usunąć te wpisy?
-
-
diff --git a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/package.manifest b/src/DemoWebsite.v9/App_Plugins/UmbracoForms/package.manifest
deleted file mode 100644
index d0ddf3f..0000000
--- a/src/DemoWebsite.v9/App_Plugins/UmbracoForms/package.manifest
+++ /dev/null
@@ -1,52 +0,0 @@
-{
- "propertyEditors": [
- {
- "alias": "UmbracoForms.FormPicker",
- "name": "Form Picker",
- "isParameterEditor": true,
- "group": "Pickers",
- "icon": "icon-umb-contour",
- "editor": {
- "view": "~/App_Plugins/UmbracoForms/backoffice/PropertyEditors/formpicker.html"
- },
- "prevalues": {
- "fields": [
- {
- "label": "Allowed forms",
- "description": "The forms allowed, if none are selected all forms will be allowed",
- "key": "allowedForms",
- "view": "~/App_Plugins/UmbracoForms/backoffice/PropertyEditors/formpicker.prevalues.html"
- }
- ]
- }
- },
- {
- "alias": "UmbracoForms.ThemePicker",
- "name": "Forms Theme Picker",
- "group": "Pickers",
- "icon": "icon-brush",
- "isParameterEditor": true,
- "editor": {
- "view": "~/App_Plugins/UmbracoForms/backoffice/PropertyEditors/themepicker.html"
- }
- }
- ],
-
- "gridEditors": [
- {
- "name": "Form",
- "alias": "umbraco_form_picker",
- "view": "/App_Plugins/UmbracoForms/backoffice/GridEditors/FormPicker.html",
- "render": "macro",
- "icon": "icon-umb-contour"
- }
- ],
-
- "css": [
- "~/App_Plugins/UmbracoForms/css/umbraco.forms.css"
- ],
-
- "javascript": [
- "~/App_Plugins/UmbracoForms/js/umbraco.forms.js"
- ]
-}
diff --git a/src/DemoWebsite.v9/DemoWebsite.v9.csproj b/src/DemoWebsite.v9/DemoWebsite.v9.csproj
deleted file mode 100644
index 9995f0c..0000000
--- a/src/DemoWebsite.v9/DemoWebsite.v9.csproj
+++ /dev/null
@@ -1,84 +0,0 @@
-
-
-
- net5.0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- true
- Always
-
-
- true
- Always
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- true
- true
-
-
-
-
- <_MakeLinks>
- :: Create link to App_Plugins\Perplex.ContentBlocks of Perplex.ContentBlocks project
- if not exist $(MSBuildProjectDirectory)\App_Plugins (
- mkdir $(MSBuildProjectDirectory)\App_Plugins
- )
-
- if not exist $(MSBuildProjectDirectory)\App_Plugins\Perplex.ContentBlocks (
- mklink /J $(MSBuildProjectDirectory)\App_Plugins\Perplex.ContentBlocks $(MSBuildProjectDirectory)\..\Perplex.ContentBlocks\App_Plugins\Perplex.ContentBlocks
- )
-
-
-
-
-
-
-
diff --git a/src/DemoWebsite.v9/Example.cs b/src/DemoWebsite.v9/Example.cs
deleted file mode 100644
index 3fffade..0000000
--- a/src/DemoWebsite.v9/Example.cs
+++ /dev/null
@@ -1,294 +0,0 @@
-using Perplex.ContentBlocks.Categories;
-using Perplex.ContentBlocks.Definitions;
-using Perplex.ContentBlocks.Presets;
-using System;
-using System.Linq;
-using Umbraco.Cms.Core.Composing;
-using Umbraco.Cms.Core.Models;
-using Umbraco.Cms.Core.PropertyEditors;
-using Umbraco.Cms.Core.Serialization;
-using Umbraco.Cms.Core.Services;
-using Umbraco.Cms.Core.Strings;
-using static Umbraco.Cms.Core.Constants;
-
-namespace DemoWebsite.v9
-{
- public class ExampleComposer : ComponentComposer { }
-
- public class ExampleComponent : IComponent
- {
- private readonly IContentBlockDefinitionRepository _definitions;
- private readonly PropertyEditorCollection _propertyEditors;
- private readonly IDataTypeService _dataTypeService;
- private readonly IContentTypeService _contentTypeService;
- private readonly IContentBlockCategoryRepository _categoryRepository;
- private readonly IContentBlocksPresetRepository _presetRepository;
- private readonly IShortStringHelper _shortStringHelper;
- private readonly IConfigurationEditorJsonSerializer _configurationEditorJsonSerializer;
- private readonly IRuntimeState _runtimeState;
-
- public ExampleComponent(
- IContentBlockDefinitionRepository definitions,
- PropertyEditorCollection propertyEditors,
- IDataTypeService dataTypeService,
- IContentTypeService contentTypeService,
- IContentBlockCategoryRepository categoryRepository,
- IContentBlocksPresetRepository presetRepository,
- IShortStringHelper shortStringHelper,
- IConfigurationEditorJsonSerializer configurationEditorJsonSerializer,
- IRuntimeState runtimeState)
- {
- _definitions = definitions;
- _propertyEditors = propertyEditors;
- _dataTypeService = dataTypeService;
- _contentTypeService = contentTypeService;
- _categoryRepository = categoryRepository;
- _presetRepository = presetRepository;
- _shortStringHelper = shortStringHelper;
- _configurationEditorJsonSerializer = configurationEditorJsonSerializer;
- _runtimeState = runtimeState;
- }
-
- public void Initialize()
- {
- if (_runtimeState.Level != Umbraco.Cms.Core.RuntimeLevel.Run)
- {
- return;
- }
-
- Guid dataTypeKey = new Guid("ec17fffe-3a33-4a08-a61a-3a6b7008e20f");
- CreateExampleBlock("exampleBlock", dataTypeKey);
-
- var specialCategoryId = new Guid("AAC6EE6A-EA54-4E90-A33B-049E39786BF5");
- _categoryRepository.Add(new ContentBlockCategory
- {
- Id = specialCategoryId,
- Name = "Specials",
- Icon = "/Media/icons.svg#icon-cat-special"
- });
-
- // Block
- var block = new ContentBlockDefinition
- {
- Name = "Example Block",
- Id = new Guid("11111111-1111-1111-1111-111111111111"),
- DataTypeKey = dataTypeKey,
- // PreviewImage will usually be a path to some image,
- // for this demo we use a base64-encoded PNG of 3x2 pixels
- PreviewImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAOxAAADsQBlSsOGwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAATSURBVAiZYzzDwPCfAQqYGJAAACokAc/b6i7NAAAAAElFTkSuQmCC",
- Description = "Example Block",
-
- Layouts = new IContentBlockLayout[]
- {
- new ContentBlockLayout
- {
- Id = new Guid("22222222-2222-2222-2222-222222222222"),
- Name = "Red",
- Description = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec vitae interdum dolor, sit amet luctus odio.",
- PreviewImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAOxAAADsQBlSsOGwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAATSURBVAiZYzzDwPCfAQqYGJAAACokAc/b6i7NAAAAAElFTkSuQmCC",
- ViewPath = "~/Views/Partials/ExampleBlock/Red.cshtml"
- },
- new ContentBlockLayout
- {
- Id = new Guid("33333333-3333-3333-3333-333333333333"),
- Name = "Green",
- Description = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec vitae interdum dolor, sit amet luctus odio. Nam laoreet at odio eu faucibus. Vivamus non rhoncus erat, sit amet efficitur ipsum.",
- PreviewImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAOxAAADsQBlSsOGwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAATSURBVAiZYyy+JPafAQqYGJAAADcdAl5UlCmyAAAAAElFTkSuQmCC",
- ViewPath = "~/Views/Partials/ExampleBlock/Green.cshtml"
- },
- new ContentBlockLayout
- {
- Id = new Guid("44444444-4444-4444-4444-444444444444"),
- Name = "Blue",
- Description = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec vitae interdum dolor, sit amet luctus odio. Nam laoreet at odio eu faucibus. Vivamus non rhoncus erat, sit amet efficitur ipsum. Pellentesque tempus tellus eu posuere varius. Nulla elementum lacus lacus. Curabitur elementum faucibus velit sed mollis.",
- PreviewImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAOxAAADsQBlSsOGwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAATSURBVAiZYzRJXfKfAQqYGJAAADOAAkAWXApqAAAAAElFTkSuQmCC",
- ViewPath = "~/Views/Partials/ExampleBlock/Blue.cshtml",
- },
- },
-
- CategoryIds = new[]
- {
- Perplex.ContentBlocks.Constants.Categories.Content,
- specialCategoryId,
- }
- };
-
- // Header
- var header = new ContentBlockDefinition
- {
- Name = "Example Header",
- Id = new Guid("55555555-5555-5555-5555-555555555555"),
- DataTypeKey = dataTypeKey,
- PreviewImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAOxAAADsQBlSsOGwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAATSURBVAiZY/zz0v8/AxQwMSABAEvFAzckGfK1AAAAAElFTkSuQmCC",
- Description = "Example Block",
-
- Layouts = new IContentBlockLayout[]
- {
- new ContentBlockLayout
- {
- Id = new Guid("66666666-6666-6666-6666-666666666666"),
- Name = "Yellow",
- Description = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec vitae interdum dolor, sit amet luctus odio.",
- PreviewImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAOxAAADsQBlSsOGwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAATSURBVAiZY/zz0v8/AxQwMSABAEvFAzckGfK1AAAAAElFTkSuQmCC",
- ViewPath = "~/Views/Partials/ExampleHeader/Yellow.cshtml"
- },
- new ContentBlockLayout
- {
- Id = new Guid("77777777-7777-7777-7777-777777777777"),
- Name = "Magenta",
- Description = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec vitae interdum dolor, sit amet luctus odio. Nam laoreet at odio eu faucibus. Vivamus non rhoncus erat, sit amet efficitur ipsum.",
- PreviewImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAOxAAADsQBlSsOGwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAATSURBVAiZY/zP8P8/AxQwMSABAEYIAwEl5g6iAAAAAElFTkSuQmCC",
- ViewPath = "~/Views/Partials/ExampleHeader/Magenta.cshtml"
- },
- },
-
- CategoryIds = new[]
- {
- Perplex.ContentBlocks.Constants.Categories.Headers,
- }
- };
-
- _definitions.Add(block);
- _definitions.Add(header);
-
- var all = _definitions.GetAll().ToList();
-
- for (int i = 0; i < all.Count; i++)
- {
- var def = all[i];
-
- for (int j = 0; j < 8; j++)
- {
- var newDef = new ContentBlockDefinition
- {
- CategoryIds = def.CategoryIds.ToList(),
- DataTypeId = def.DataTypeId,
- DataTypeKey = def.DataTypeKey,
- Description = def.Description,
- Id = new Guid($"{i}{j}{def.Id.ToString().Substring(2)}"),
- Layouts = def.Layouts.Select(l => new ContentBlockLayout
- {
- Description = l.Description,
- Id = new Guid($"{i}{j}{l.Id.ToString().Substring(2)}"),
- Name = l.Name,
- PreviewImage = l.PreviewImage,
- ViewPath = l.ViewPath,
- }).ToList(),
- Name = def.Name + $" - copy #{j + 1}",
- PreviewImage = def.PreviewImage,
- };
-
- _definitions.Add(newDef);
- }
- }
-
- _presetRepository.Add(new ContentBlocksPreset
- {
- Id = new Guid("72d1b24f-ed6d-4c27-ad21-8fec48b6060c"),
- Name = "Test",
- Blocks = new[]
- {
- new ContentBlockPreset
- {
- Id = new Guid("198bec2a-3404-409a-80e5-cb002aa5858e"),
- DefinitionId = new Guid("11111111-1111-1111-1111-111111111111"),
- LayoutId = new Guid("33333333-3333-3333-3333-333333333333"),
- Values =
- {
- ["title"] = "Preset Title value",
- },
- },
- }
- });
- }
-
- private void CreateExampleBlock(string contentTypeAlias, Guid dataTypeKey)
- {
- CreateExampleBlockElementType(contentTypeAlias);
- CreateExampleBlockDataType(contentTypeAlias, dataTypeKey);
- }
-
- private void CreateExampleBlockElementType(string contentTypeAlias)
- {
- if (_contentTypeService.Get(contentTypeAlias) != null)
- {
- // Already created
- return;
- }
-
- IContentType contentType = new ContentType(_shortStringHelper, -1)
- {
- Alias = contentTypeAlias,
- IsElement = true,
- Name = "Example Block",
- PropertyGroups = new PropertyGroupCollection(new[]
- {
- new PropertyGroup(new PropertyTypeCollection(true, new[]
- {
- new PropertyType(_shortStringHelper, PropertyEditors.Aliases.TextBox, ValueStorageType.Ntext)
- {
- PropertyEditorAlias = PropertyEditors.Aliases.TextBox,
- Name = "Title",
- Alias = "title",
- },
- new PropertyType(_shortStringHelper, PropertyEditors.Aliases.TextBox, ValueStorageType.Ntext)
- {
- PropertyEditorAlias = PropertyEditors.Aliases.TinyMce,
- Name = "Text",
- Alias = "text",
- },
- }))
- {
- Alias = "content",
- Name = "Content",
- }
- })
- };
-
- _contentTypeService.Save(contentType);
- }
-
- private void CreateExampleBlockDataType(string contentTypeAlias, Guid dataTypeKey)
- {
- if (_dataTypeService.GetDataType(dataTypeKey) != null)
- {
- // Already there
- return;
- }
-
- if (!(_propertyEditors.TryGet("Umbraco.NestedContent", out var editor) && editor is NestedContentPropertyEditor nestedContentEditor))
- {
- throw new InvalidOperationException("Nested Content property editor not found!");
- }
-
- var dataType = new DataType(nestedContentEditor, _configurationEditorJsonSerializer, -1)
- {
- Name = "Perplex.ContentBlocks - ExampleBlock",
- Key = dataTypeKey,
- Configuration = new NestedContentConfiguration
- {
- ConfirmDeletes = false,
- HideLabel = true,
- MinItems = 1,
- MaxItems = 1,
- ShowIcons = false,
- ContentTypes = new[]
- {
- new NestedContentConfiguration.ContentType
- {
- Alias = contentTypeAlias,
- TabAlias = "Content",
- Template = "{{title}}"
- }
- }
- }
- };
-
- _dataTypeService.Save(dataType);
- }
-
- public void Terminate()
- {
- }
- }
-}
diff --git a/src/DemoWebsite.v9/Program.cs b/src/DemoWebsite.v9/Program.cs
deleted file mode 100644
index 3383874..0000000
--- a/src/DemoWebsite.v9/Program.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-using Microsoft.AspNetCore.Hosting;
-using Microsoft.Extensions.Hosting;
-using Microsoft.Extensions.Logging;
-
-namespace DemoWebsite.v9
-{
- public class Program
- {
- public static void Main(string[] args)
- => CreateHostBuilder(args)
- .Build()
- .Run();
-
- public static IHostBuilder CreateHostBuilder(string[] args) =>
- Host.CreateDefaultBuilder(args)
- .ConfigureLogging(x => x.ClearProviders())
- .ConfigureWebHostDefaults(webBuilder => webBuilder.UseStartup());
- }
-}
diff --git a/src/DemoWebsite.v9/Properties/launchSettings.json b/src/DemoWebsite.v9/Properties/launchSettings.json
deleted file mode 100644
index bc61a3f..0000000
--- a/src/DemoWebsite.v9/Properties/launchSettings.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "iisSettings": {
- "windowsAuthentication": false,
- "anonymousAuthentication": true,
- "iisExpress": {
- "applicationUrl": "http://localhost:44036",
- "sslPort": 44366
- }
- },
- "profiles": {
- "IIS Express": {
- "commandName": "IISExpress",
- "launchBrowser": true,
- "environmentVariables": {
- "ASPNETCORE_ENVIRONMENT": "Development"
- }
- },
- "DemoWebsite.v9": {
- "commandName": "Project",
- "dotnetRunMessages": "true",
- "launchBrowser": true,
- "applicationUrl": "https://localhost:5001;http://localhost:5000",
- "environmentVariables": {
- "ASPNETCORE_ENVIRONMENT": "Development"
- }
- }
- }
-}
diff --git a/src/DemoWebsite.v9/Startup.cs b/src/DemoWebsite.v9/Startup.cs
deleted file mode 100644
index 9ba7cb4..0000000
--- a/src/DemoWebsite.v9/Startup.cs
+++ /dev/null
@@ -1,76 +0,0 @@
-using Microsoft.AspNetCore.Builder;
-using Microsoft.AspNetCore.Hosting;
-using Microsoft.Extensions.Configuration;
-using Microsoft.Extensions.DependencyInjection;
-using Microsoft.Extensions.Hosting;
-using System;
-using Umbraco.Cms.Core.DependencyInjection;
-using Umbraco.Extensions;
-
-namespace DemoWebsite.v9
-{
- public class Startup
- {
- private readonly IWebHostEnvironment _env;
- private readonly IConfiguration _config;
-
- ///
- /// Initializes a new instance of the class.
- ///
- /// The Web Host Environment
- /// The Configuration
- ///
- /// Only a few services are possible to be injected here https://github.com/dotnet/aspnetcore/issues/9337
- ///
- public Startup(IWebHostEnvironment webHostEnvironment, IConfiguration config)
- {
- _env = webHostEnvironment ?? throw new ArgumentNullException(nameof(webHostEnvironment));
- _config = config ?? throw new ArgumentNullException(nameof(config));
- }
-
-
-
- ///
- /// Configures the services
- ///
- ///
- /// This method gets called by the runtime. Use this method to add services to the container.
- /// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
- ///
- public void ConfigureServices(IServiceCollection services)
- {
-#pragma warning disable IDE0022 // Use expression body for methods
- services.AddUmbraco(_env, _config)
- .AddBackOffice()
- .AddWebsite()
- .AddComposers()
- .Build();
-#pragma warning restore IDE0022 // Use expression body for methods
-
- }
-
- ///
- /// Configures the application
- ///
- public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
- {
- if (env.IsDevelopment())
- {
- app.UseDeveloperExceptionPage();
- }
-
- app.UseUmbraco()
- .WithMiddleware(u =>
- {
- u.UseBackOffice();
- u.UseWebsite();
- })
- .WithEndpoints(u =>
- {
- u.UseInstallerEndpoints();
- u.UseBackOfficeEndpoints();
- u.UseWebsiteEndpoints();
- });
- }
- }
-}
diff --git a/src/DemoWebsite.v9/TestVariantSelector.cs b/src/DemoWebsite.v9/TestVariantSelector.cs
deleted file mode 100644
index 84c3f63..0000000
--- a/src/DemoWebsite.v9/TestVariantSelector.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-using Perplex.ContentBlocks.PropertyEditor.ModelValue;
-using System.Linq;
-
-using Umbraco.Cms.Core.Models.PublishedContent;
-
-
-namespace DemoWebsite.v9
-{
- public class TestVariantSelector : Perplex.ContentBlocks.Variants.IContentBlockVariantSelector
- {
- public ContentBlockVariantModelValue SelectVariant(ContentBlockModelValue block, IPublishedElement content, bool preview)
- {
- if (preview)
- {
- // Umbraco / ContentBlocks preview mode -> return default variant
- return null;
- }
-
- foreach (var variant in block.Variants ?? Enumerable.Empty())
- {
- if (variant.Alias == "test")
- {
- // If a variant with alias "test" exists for this block we want to render it.
- // If not then we will just render the default.
- return variant;
- }
- }
-
- // Render default
- return null;
- }
- }
-}
diff --git a/src/DemoWebsite.v9/TestVariantSelectorComposer.cs b/src/DemoWebsite.v9/TestVariantSelectorComposer.cs
deleted file mode 100644
index ad0c37c..0000000
--- a/src/DemoWebsite.v9/TestVariantSelectorComposer.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-using Perplex.ContentBlocks.Variants;
-using Umbraco.Cms.Core.Composing;
-using Umbraco.Cms.Core.DependencyInjection;
-using Umbraco.Extensions;
-
-namespace DemoWebsite.v9
-{
- [ComposeAfter(typeof(ContentBlocksVariantsComposer))]
- public class TestVariantSelectorComposer : IComposer
- {
- public void Compose(IUmbracoBuilder builder)
- {
- builder.Services.AddUnique();
- }
- }
-}
diff --git a/src/DemoWebsite.v9/Views/Home.cshtml b/src/DemoWebsite.v9/Views/Home.cshtml
deleted file mode 100644
index 0fda3ba..0000000
--- a/src/DemoWebsite.v9/Views/Home.cshtml
+++ /dev/null
@@ -1,9 +0,0 @@
-@inherits Umbraco.Cms.Web.Common.Views.UmbracoViewPage
-@inject IContentBlockRenderer Renderer
-
-@await Html.RenderContentBlocks(Model.ContentBlocks, Renderer)
-
-@*
- Alternatively, use renderer directly:
- @await Renderer.Render(Model.ContentBlocks, Html.PartialAsync)
-*@
diff --git a/src/DemoWebsite.v9/Views/MacroPartials/InsertUmbracoFormWithTheme.cshtml b/src/DemoWebsite.v9/Views/MacroPartials/InsertUmbracoFormWithTheme.cshtml
deleted file mode 100644
index a1ea27b..0000000
--- a/src/DemoWebsite.v9/Views/MacroPartials/InsertUmbracoFormWithTheme.cshtml
+++ /dev/null
@@ -1,52 +0,0 @@
-@inherits Umbraco.Cms.Web.Common.Macros.PartialViewMacroPage
-
-@if (Model.MacroParameters["FormGuid"] != null)
-{
- var s = Model.MacroParameters["FormGuid"].ToString();
- var theme = "";
- var includeScripts = true;
-
- @*
- If a theme is provided as a macro parameter, forms will attempt to use custom theme files
- ex: given the value "test", forms will look up views for the form and fields in a custom directory:
-
- Form will be rendered with
- /Views/Partials/Forms/Themes/test/form.cshml
-
- Fields will be rendered with
- /Views/Partials/Forms/Themes/test/FieldType/[fieldtypename].cshtml
-
- If a file is not available in the custom directory, forms will fallback to the default files in
- /Views/Partials/Forms/Themes/default/
- *@
-
- if (Model.MacroParameters.ContainsKey("FormTheme"))
- {
- theme = Model.MacroParameters["FormTheme"].ToString();
- }
-
- if (Model.MacroParameters.ContainsKey("ExcludeScripts"))
- {
-
- @*
- Inverse the boolean - RenderAction Parameter expects it to be false for exclusion
- But with default value for Macro Paramater boolean/checkbox being false
- We want to ensure by default we include the scripts next to the form
- *@
- if (Model.MacroParameters["ExcludeScripts"].ToString() == "1")
- {
- includeScripts = false;
- }
- }
-
- var form = new Guid(s);
- var recordGuid = Guid.Empty;
-
- if (string.IsNullOrEmpty(Context.Request.Query["recordId"]) == false)
- {
- Guid.TryParse(Context.Request.Query["recordId"], out recordGuid);
- }
-
-
- @(await Component.InvokeAsync("RenderForm",new { formId = form, recordId = recordGuid, theme = theme, includeScripts = includeScripts }))
-}
diff --git a/src/DemoWebsite.v9/Views/MacroPartials/RenderUmbracoFormScripts.cshtml b/src/DemoWebsite.v9/Views/MacroPartials/RenderUmbracoFormScripts.cshtml
deleted file mode 100644
index 8ba02b1..0000000
--- a/src/DemoWebsite.v9/Views/MacroPartials/RenderUmbracoFormScripts.cshtml
+++ /dev/null
@@ -1,19 +0,0 @@
-@using Umbraco.Forms.Web.Extensions
-
-@inherits Umbraco.Cms.Web.Common.Macros.PartialViewMacroPage
-
-@{
- var formsToRender = TempData["UmbracoForms"] != null
- ? TempData.Get>("UmbracoForms")
- : new List();
-
- // Reading TempData["UmbracoForms"] should have set it to null but this doesn't
- // happen if this request didn't return a 200 OK status. https://stackoverflow.com/a/7630709/5018
- // Explictly clear it so that on the next request the scripts don't get rendered.
- TempData.Remove("UmbracoForms");
-}
-
-@foreach (Guid form in formsToRender)
-{
- @(await Component.InvokeAsync("RenderFormScripts", new { formId = form }))
-}
diff --git a/src/DemoWebsite.v9/Views/Partials/ExampleBlock/Blue.cshtml b/src/DemoWebsite.v9/Views/Partials/ExampleBlock/Blue.cshtml
deleted file mode 100644
index 619556e..0000000
--- a/src/DemoWebsite.v9/Views/Partials/ExampleBlock/Blue.cshtml
+++ /dev/null
@@ -1,5 +0,0 @@
-@inherits UmbracoViewPage>
-
-
diff --git a/src/DemoWebsite.v9/Views/Partials/ExampleBlock/Green.cshtml b/src/DemoWebsite.v9/Views/Partials/ExampleBlock/Green.cshtml
deleted file mode 100644
index 6e82c52..0000000
--- a/src/DemoWebsite.v9/Views/Partials/ExampleBlock/Green.cshtml
+++ /dev/null
@@ -1,5 +0,0 @@
-@inherits UmbracoViewPage>
-
-
diff --git a/src/DemoWebsite.v9/Views/Partials/ExampleBlock/Red.cshtml b/src/DemoWebsite.v9/Views/Partials/ExampleBlock/Red.cshtml
deleted file mode 100644
index c712e17..0000000
--- a/src/DemoWebsite.v9/Views/Partials/ExampleBlock/Red.cshtml
+++ /dev/null
@@ -1,5 +0,0 @@
-@inherits UmbracoViewPage>
-
-
diff --git a/src/DemoWebsite.v9/Views/Partials/ExampleBlock/_ExampleBlock.cshtml b/src/DemoWebsite.v9/Views/Partials/ExampleBlock/_ExampleBlock.cshtml
deleted file mode 100644
index 74e7f0a..0000000
--- a/src/DemoWebsite.v9/Views/Partials/ExampleBlock/_ExampleBlock.cshtml
+++ /dev/null
@@ -1,6 +0,0 @@
-@inherits UmbracoViewPage>
-
-
-
@Model.Content.Title
- @Model.Content.Text
-
diff --git a/src/DemoWebsite.v9/Views/Partials/ExampleHeader/Magenta.cshtml b/src/DemoWebsite.v9/Views/Partials/ExampleHeader/Magenta.cshtml
deleted file mode 100644
index 9acfa91..0000000
--- a/src/DemoWebsite.v9/Views/Partials/ExampleHeader/Magenta.cshtml
+++ /dev/null
@@ -1,5 +0,0 @@
-@inherits UmbracoViewPage>
-
-
diff --git a/src/DemoWebsite.v9/Views/Partials/ExampleHeader/Yellow.cshtml b/src/DemoWebsite.v9/Views/Partials/ExampleHeader/Yellow.cshtml
deleted file mode 100644
index 29694d3..0000000
--- a/src/DemoWebsite.v9/Views/Partials/ExampleHeader/Yellow.cshtml
+++ /dev/null
@@ -1,5 +0,0 @@
-@inherits UmbracoViewPage>
-
-
diff --git a/src/DemoWebsite.v9/Views/Partials/ExampleHeader/_ExampleHeader.cshtml b/src/DemoWebsite.v9/Views/Partials/ExampleHeader/_ExampleHeader.cshtml
deleted file mode 100644
index 5857468..0000000
--- a/src/DemoWebsite.v9/Views/Partials/ExampleHeader/_ExampleHeader.cshtml
+++ /dev/null
@@ -1,6 +0,0 @@
-@inherits UmbracoViewPage>
-
-
-
@Model.Content.Title
- @Model.Content.Text
-
diff --git a/src/DemoWebsite.v9/Views/Partials/Forms/Emails/Example-Template.cshtml b/src/DemoWebsite.v9/Views/Partials/Forms/Emails/Example-Template.cshtml
deleted file mode 100644
index 34f5f0e..0000000
--- a/src/DemoWebsite.v9/Views/Partials/Forms/Emails/Example-Template.cshtml
+++ /dev/null
@@ -1,262 +0,0 @@
-@inherits Umbraco.Cms.Web.Common.Views.UmbracoViewPage
-
-@{
- //This is an example email template where you can use Razor Views to send HTML emails
-
- //You can use Umbraco.Content & Umbraco.Media etc to use Images & content from your site
- //directly in your email templates too
-
- //Strongly Typed
- //@Model.GetValue("aliasFormField")
- //@foreach (var color in Model.GetValues("checkboxField")){}
-
-
- //Images need to be absolute - so fetching domain to prefix with images
- var siteDomain = Context.Request.Scheme + "://" + Context.Request.Host;
- var assetUrl = siteDomain + "/App_plugins/UmbracoForms/Assets/Email-Example";
-
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Umbraco Forms
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- This is an example email template from Umbraco Forms Razor based email templates. You can build forms using any HTML markup you wish.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Form Results
-
-
-
-
-
-
-
- @{
- string[] ignoreFields = new string[]
- {
- "FieldType.Recaptcha2.cshtml",
- "FieldType.Recaptcha3.cshtml",
- "FieldType.Text.cshtml"
- };
- }
-
- @foreach (var field in Model.Fields.Where(x => ignoreFields.Contains(x.FieldType) == false))
- {
- @field.Name
-
-
- @switch (field.FieldType)
- {
- case "FieldType.FileUpload.cshtml":
- var fileUploadValue = field.GetValue();
- if (fileUploadValue != null && !string.IsNullOrEmpty(fileUploadValue.ToString()))
- {
- @fileUploadValue
- }
- break;
-
- case "FieldType.DatePicker.cshtml":
- var datePickerValue = field.GetValue();
- if (datePickerValue != null && !string.IsNullOrEmpty(datePickerValue.ToString()))
- {
- DateTime dt;
- var dateValid = DateTime.TryParse(datePickerValue != null ? datePickerValue.ToString() : string.Empty, out dt);
- var dateStr = dateValid ? dt.ToString("f") : "";
- @dateStr
- }
- break;
-
- default:
- var values = field.GetValues();
- if (values != null)
- {
- foreach (var value in values)
- {
- @value
- }
- }
- break;
- }
-
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/DemoWebsite.v9/Views/Partials/Forms/Export/excel.cshtml b/src/DemoWebsite.v9/Views/Partials/Forms/Export/excel.cshtml
deleted file mode 100644
index 4f3f360..0000000
--- a/src/DemoWebsite.v9/Views/Partials/Forms/Export/excel.cshtml
+++ /dev/null
@@ -1,11 +0,0 @@
-@model Umbraco.Forms.Core.Searchers.EntrySearchResultCollection
-@foreach (var header in Model.schema)
-{" @Html.Raw(header.Name)", }
-
-@foreach (var row in Model.Results)
-{
- foreach (var col in row.Fields)
- {" @Html.Raw(col).ToString().Replace(Environment.NewLine, " ")", }
-
- @Environment.NewLine
-}
\ No newline at end of file
diff --git a/src/DemoWebsite.v9/Views/Partials/Forms/Themes/bootstrap3-horizontal/Fieldtypes/FieldType.RadioButtonList.cshtml b/src/DemoWebsite.v9/Views/Partials/Forms/Themes/bootstrap3-horizontal/Fieldtypes/FieldType.RadioButtonList.cshtml
deleted file mode 100644
index bc17cd8..0000000
--- a/src/DemoWebsite.v9/Views/Partials/Forms/Themes/bootstrap3-horizontal/Fieldtypes/FieldType.RadioButtonList.cshtml
+++ /dev/null
@@ -1,30 +0,0 @@
-@model Umbraco.Forms.Web.Models.FieldViewModel
-@using Umbraco.Forms.Web
-
-@{ var i = 0; }
-
-
-
diff --git a/src/DemoWebsite.v9/Views/Partials/Forms/Themes/bootstrap3-horizontal/Form.cshtml b/src/DemoWebsite.v9/Views/Partials/Forms/Themes/bootstrap3-horizontal/Form.cshtml
deleted file mode 100644
index 5d1a48d..0000000
--- a/src/DemoWebsite.v9/Views/Partials/Forms/Themes/bootstrap3-horizontal/Form.cshtml
+++ /dev/null
@@ -1,122 +0,0 @@
-@model Umbraco.Forms.Web.Models.FormViewModel
-@using Umbraco.Forms.Core.Enums
-@using Umbraco.Forms.Web
-@using Umbraco.Forms.Web.Models
-@using Umbraco.Forms.Web.Services
-@inject IFormThemeResolver FormThemeResolver
-@*Set a default class on all fields - needed by bootstrap*@
-@Html.SetFormFieldClass("form-control")
-
-@* Wrap all fields in a form-group - needed by bootstrap to correctly display fields horizontally*@
-@Html.SetFormFieldWrapperClass("form-group")
-
-
-
-
- @if (string.IsNullOrEmpty(Model.CurrentPage.Caption) == false)
- {
-
- }
-
- @if (Model.ShowValidationSummary)
- {
- @Html.ValidationSummary(false)
- }
-
- @foreach (FieldsetViewModel fs in Model.CurrentPage.Fieldsets)
- {
-
-
-
- @if (string.IsNullOrEmpty(fs.Caption) == false)
- {
- @fs.Caption
- }
-
-
-
- @foreach (var c in fs.Containers)
- {
-
-
- }
-
-
-
-
- }
-
-
-
-
-
-
-
-
-
-
-
-@await Html.PartialAsync("Forms/Themes/default/ScrollToFormScript")
diff --git a/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/DatePicker.cshtml b/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/DatePicker.cshtml
deleted file mode 100644
index 5037f42..0000000
--- a/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/DatePicker.cshtml
+++ /dev/null
@@ -1,37 +0,0 @@
-@using System.Globalization
-@using Newtonsoft.Json
-@using Microsoft.Extensions.Options
-@using Umbraco.Forms.Core
-@using Umbraco.Forms.Core.Configuration
-@using Umbraco.Forms.Web
-
-@inject IOptionsSnapshot Configuration
-
-@{
- int datePickerYearRange = Configuration.Value.DatePickerYearRange;
-
- Html.AddFormThemeCssFile("~/App_Plugins/UmbracoForms/Assets/pikaday/pikaday.css");
- Html.AddFormThemeScriptFile("~/App_Plugins/UmbracoForms/Assets/moment/min/moment-with-locales.min.js");
- Html.AddFormThemeScriptFile("~/App_Plugins/UmbracoForms/Assets/pikaday/pikaday.js");
- Html.AddFormThemeScriptFile("~/App_Plugins/UmbracoForms/Assets/datepicker.init.js");
-
- var locales = new
- {
- previousMonth = "<<",
- nextMonth = ">>",
- months = CultureInfo.CurrentCulture.DateTimeFormat.MonthNames,
- weekdays = CultureInfo.CurrentCulture.DateTimeFormat.DayNames,
- weekdaysShort = CultureInfo.CurrentCulture.DateTimeFormat.AbbreviatedDayNames
- };
-
- //only render the script block below one time per page
- var alreadyRendered = Context.Items.ContainsKey("__formDatePickerRendered");
- Context.Items["__formDatePickerRendered"] = true;
-}
-
-@if (!alreadyRendered)
-{
-
-}
diff --git a/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Fieldtypes/FieldType.CheckBox.cshtml b/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Fieldtypes/FieldType.CheckBox.cshtml
deleted file mode 100644
index 366602d..0000000
--- a/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Fieldtypes/FieldType.CheckBox.cshtml
+++ /dev/null
@@ -1,9 +0,0 @@
-@model Umbraco.Forms.Web.Models.FieldViewModel
-
- data-val="true" data-val-requiredcb="@Model.RequiredErrorMessage"}
- @if (Model.ContainsValue(true) || Model.ContainsValue("true") || Model.ContainsValue("on"))
- {checked="checked" }
-
-/>
-
diff --git a/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Fieldtypes/FieldType.CheckBoxList.cshtml b/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Fieldtypes/FieldType.CheckBoxList.cshtml
deleted file mode 100644
index 613d24f..0000000
--- a/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Fieldtypes/FieldType.CheckBoxList.cshtml
+++ /dev/null
@@ -1,20 +0,0 @@
-@model Umbraco.Forms.Web.Models.FieldViewModel
-@using Umbraco.Forms.Web
-
-@{ var i = 0; }
-
-
-@foreach (Umbraco.Forms.Web.Models.PrevalueViewModel pv in Model.PreValues)
-{
- data-val="true" data-val-required="@Model.RequiredErrorMessage" data-rule-required="true" data-msg-required="@Model.RequiredErrorMessage"}
- @if (Model.ContainsValue(pv.Value)){checked="checked" }/>
-
- @pv.Value
-
-
- i++;
-}
-
diff --git a/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Fieldtypes/FieldType.DataConsent.cshtml b/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Fieldtypes/FieldType.DataConsent.cshtml
deleted file mode 100644
index 3d635bd..0000000
--- a/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Fieldtypes/FieldType.DataConsent.cshtml
+++ /dev/null
@@ -1,14 +0,0 @@
-@model Umbraco.Forms.Web.Models.FieldViewModel
-@{
- var acceptCopy = string.Empty;
- Model.AdditionalSettings.TryGetValue("AcceptCopy", out acceptCopy);
-}
- data-val="true" data-val-required="@Model.RequiredErrorMessage" data-rule-required="true" data-msg-required="@Model.RequiredErrorMessage"}
- @if (Model.ContainsValue(true) || Model.ContainsValue("true") || Model.ContainsValue("on"))
- {checked="checked" }
-
-/>
-
-
-@acceptCopy
diff --git a/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Fieldtypes/FieldType.DatePicker.cshtml b/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Fieldtypes/FieldType.DatePicker.cshtml
deleted file mode 100644
index aebea12..0000000
--- a/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Fieldtypes/FieldType.DatePicker.cshtml
+++ /dev/null
@@ -1,26 +0,0 @@
-@model Umbraco.Forms.Web.Models.FieldViewModel
-@{
- string val = Model.Values?.LastOrDefault()?.ToString() ?? string.Empty;
- if (Model.ValueAsObject != null && !Equals(Model.ValueAsObject, string.Empty))
- {
- try
- {
- DateTime d;
- d = (DateTime) Model.ValueAsObject;
- val = d.ToShortDateString();
- }
- catch {
- //ignore
- }
- }
-}
-
-
- data-val="true" data-val-required="@Model.RequiredErrorMessage" }}
- @{if(string.IsNullOrEmpty(Model.PlaceholderText) == false){placeholder="@Model.PlaceholderText" }}/>
diff --git a/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Fieldtypes/FieldType.DropDownList.cshtml b/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Fieldtypes/FieldType.DropDownList.cshtml
deleted file mode 100644
index f9635c8..0000000
--- a/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Fieldtypes/FieldType.DropDownList.cshtml
+++ /dev/null
@@ -1,24 +0,0 @@
-@model Umbraco.Forms.Web.Models.FieldViewModel
-@using Umbraco.Forms.Web
-@{
- var settings = Model.AdditionalSettings;
- var autocompleteAttribute = Model.GetSettingValue("AutocompleteAttribute", string.Empty);
- var allowMultiple = settings.ContainsKey("AllowMultipleSelections") && settings["AllowMultipleSelections"].ToLower() == "true";
-}
-
-autocomplete="@autocompleteAttribute" }
- @if (allowMultiple) { multiple }
- @if (Model.Mandatory) { data-val="true" data-val-required="@Model.RequiredErrorMessage" }>
- @if (!allowMultiple)
- {
-
- }
- @foreach (var pv in Model.PreValues)
- {
- @: @pv.Value
- }
-
diff --git a/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Fieldtypes/FieldType.FileUpload.cshtml b/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Fieldtypes/FieldType.FileUpload.cshtml
deleted file mode 100644
index 617a1e1..0000000
--- a/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Fieldtypes/FieldType.FileUpload.cshtml
+++ /dev/null
@@ -1,23 +0,0 @@
-@using Umbraco.Forms.Core.Providers.FieldTypes
-@model Umbraco.Forms.Web.Models.FieldViewModel
-
-@{
- var isValid = (Model.Mandatory && Model.Values != null && Model.Values.Any()) || (!Model.Mandatory);
-}
-
-
-@if (Model.Values != null && Model.Values.Any())
-{
-
- Current File/s:
- @foreach (string filePath in Model.Values)
- {
- var fileName = filePath.Split(new[] { FileUpload.EncryptedFilePathAndFileNameSeparator }, StringSplitOptions.None).Last();
-
- @fileName
-
- }
-
-}
diff --git a/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Fieldtypes/FieldType.HiddenField.cshtml b/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Fieldtypes/FieldType.HiddenField.cshtml
deleted file mode 100644
index fe3228d..0000000
--- a/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Fieldtypes/FieldType.HiddenField.cshtml
+++ /dev/null
@@ -1,4 +0,0 @@
-@model Umbraco.Forms.Web.Models.FieldViewModel
-
-
-
diff --git a/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Fieldtypes/FieldType.PasswordField.cshtml b/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Fieldtypes/FieldType.PasswordField.cshtml
deleted file mode 100644
index d553302..0000000
--- a/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Fieldtypes/FieldType.PasswordField.cshtml
+++ /dev/null
@@ -1,9 +0,0 @@
-@model Umbraco.Forms.Web.Models.FieldViewModel
-@using Umbraco.Forms.Web
-
- placeholder="@Model.PlaceholderText"}}
-@{if(Model.Mandatory || Model.Validate){data-val="true" }}
-@{if (Model.Mandatory) { data-val-required="@Model.RequiredErrorMessage" }}
-@{if (Model.Validate) { data-val-regex="@Model.InvalidErrorMessage" data-val-regex-pattern="@Model.Regex" }}
-/>
diff --git a/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Fieldtypes/FieldType.RadioButtonList.cshtml b/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Fieldtypes/FieldType.RadioButtonList.cshtml
deleted file mode 100644
index fa737d4..0000000
--- a/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Fieldtypes/FieldType.RadioButtonList.cshtml
+++ /dev/null
@@ -1,17 +0,0 @@
-@model Umbraco.Forms.Web.Models.FieldViewModel
-@using Umbraco.Forms.Web
-
-@{ var i = 0; }
-
-
-@foreach (Umbraco.Forms.Web.Models.PrevalueViewModel pv in Model.PreValues)
-{
- data-val="true" data-val-required="@Model.RequiredErrorMessage" data-rule-required="true" data-msg-required="@Model.RequiredErrorMessage"}
- @if (Model.ContainsValue(pv.Value)){checked="checked" } />
- @pv.Value
-
-
- i++;
-}
-
diff --git a/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Fieldtypes/FieldType.Recaptcha2.cshtml b/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Fieldtypes/FieldType.Recaptcha2.cshtml
deleted file mode 100644
index c52da08..0000000
--- a/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Fieldtypes/FieldType.Recaptcha2.cshtml
+++ /dev/null
@@ -1,32 +0,0 @@
-@using System.Linq
-@using Microsoft.Extensions.Options
-@using Umbraco.Forms.Core.Configuration
-
-@inject IOptionsSnapshot Configuration
-
-@model Umbraco.Forms.Web.Models.FieldViewModel
-@{
- var siteKey = Configuration.Value.PublicKey;
- var theme = "clean";
- var themeSetting = Model.AdditionalSettings.FirstOrDefault(x => x.Key == "Theme");
- if (themeSetting.Value != "")
- {
- theme = themeSetting.Value;
- }
- var size = "normal";
- var sizeSetting = Model.AdditionalSettings.FirstOrDefault(x => x.Key == "Size");
- if (sizeSetting.Value != "")
- {
- size = sizeSetting.Value;
- }
-
- if (!string.IsNullOrEmpty(siteKey))
- {
-
-
- }
- else
- {
- ERROR: ReCaptcha v2 is missing the Site Key. Please update the configuration to include a value at: @(Umbraco.Forms.Core.Constants.Configuration.SectionKeys.FieldTypes.Recaptcha3):PublicKey
- }
-}
diff --git a/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Fieldtypes/FieldType.Recaptcha3.cshtml b/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Fieldtypes/FieldType.Recaptcha3.cshtml
deleted file mode 100644
index 7c034bb..0000000
--- a/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Fieldtypes/FieldType.Recaptcha3.cshtml
+++ /dev/null
@@ -1,46 +0,0 @@
-@using Microsoft.Extensions.Options
-@using Umbraco.Forms.Core.Configuration
-@using Umbraco.Forms.Web
-
-@inject IOptionsSnapshot Configuration
-
-@model Umbraco.Forms.Web.Models.FieldViewModel
-@{
- var siteKey = Configuration.Value.SiteKey;
-
- if (!string.IsNullOrEmpty(siteKey))
- {
- @* Google JS reCAPTHA API *@
- Html.AddFormThemeScriptFile("https://www.google.com/recaptcha/api.js?render=" + siteKey);
-
- @* Hidden Field to store token from invisible reCAPTCHA *@
-
-
-
- }
- else
- {
- ERROR: reCAPTCHA v3 is missing the Site Key. Please update the configuration to include a value at: @(Umbraco.Forms.Core.Constants.Configuration.SectionKeys.FieldTypes.Recaptcha3):SiteKey
- }
-}
diff --git a/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Fieldtypes/FieldType.Text.cshtml b/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Fieldtypes/FieldType.Text.cshtml
deleted file mode 100644
index 109f2f2..0000000
--- a/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Fieldtypes/FieldType.Text.cshtml
+++ /dev/null
@@ -1,19 +0,0 @@
-@model Umbraco.Forms.Web.Models.FieldViewModel
-@using Umbraco.Forms.Web
-
-@{
- var settings = Model.AdditionalSettings;
- var hasCaption = (settings.ContainsKey("Caption") && !string.IsNullOrEmpty(settings["Caption"]));
- var hasBody = (settings.ContainsKey("BodyText") && !string.IsNullOrEmpty(settings["BodyText"]));
-}
-
-
diff --git a/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Fieldtypes/FieldType.Textarea.cshtml b/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Fieldtypes/FieldType.Textarea.cshtml
deleted file mode 100644
index 29a520f..0000000
--- a/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Fieldtypes/FieldType.Textarea.cshtml
+++ /dev/null
@@ -1,21 +0,0 @@
-@model Umbraco.Forms.Web.Models.FieldViewModel
-@using Umbraco.Forms.Web
-
-@{
- var autocompleteAttribute = Model.GetSettingValue("AutocompleteAttribute", string.Empty);
- var numberOfRows = Model.GetSettingValue("NumberOfRows", global::Umbraco.Forms.Core.Providers.FieldTypes.Textarea.DefaultNumberOfRows);
- var maxLength = Model.GetSettingValue("MaximumLength", 0);
-}
- placeholder="@Model.PlaceholderText" } }
- @{if (string.IsNullOrEmpty(autocompleteAttribute) == false) { autocomplete="@autocompleteAttribute" } }
- @{if (maxLength > 0) { maxlength="@maxLength" } }
- @{if (Model.Mandatory || Model.Validate) { data-val="true" } }
- @{if (Model.Mandatory) { data-val-required="@Model.RequiredErrorMessage" }}
- @{if (Model.Validate) { data-val-regex="@Model.InvalidErrorMessage" data-val-regex-pattern="@Html.Raw(Model.Regex)" }}>@Model.ValueAsHtmlString
-
diff --git a/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Fieldtypes/FieldType.Textfield.cshtml b/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Fieldtypes/FieldType.Textfield.cshtml
deleted file mode 100644
index ac37642..0000000
--- a/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Fieldtypes/FieldType.Textfield.cshtml
+++ /dev/null
@@ -1,16 +0,0 @@
-@using Umbraco.Forms.Web
-@model Umbraco.Forms.Web.Models.FieldViewModel
-@{
- var maxLength = Model.GetSettingValue("MaximumLength", 255);
- var fieldType = Model.GetSettingValue("FieldType", "text");
- var autocompleteAttribute = Model.GetSettingValue("AutocompleteAttribute", string.Empty);
-}
- placeholder="@Model.PlaceholderText" }}
- @{if (string.IsNullOrEmpty(autocompleteAttribute) == false) { autocomplete="@autocompleteAttribute" }}
- @{if (Model.Mandatory || Model.Validate) { data-val="true" }}
- @{if (Model.Mandatory) { data-val-required="@Model.RequiredErrorMessage" }}
- @{if (Model.Validate) { data-val-regex="@Model.InvalidErrorMessage" data-val-regex-pattern="@Html.Raw(Model.Regex)" }} />
-
-
-
diff --git a/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Form.cshtml b/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Form.cshtml
deleted file mode 100644
index ec43754..0000000
--- a/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Form.cshtml
+++ /dev/null
@@ -1,136 +0,0 @@
-@using Umbraco.Forms.Core.Enums
-@using Umbraco.Forms.Web
-@using Umbraco.Forms.Web.Models
-@using Umbraco.Forms.Web.Services
-
-@model Umbraco.Forms.Web.Models.FormViewModel
-
-@inject IFormThemeResolver FormThemeResolver
-
-@{
- // here we load in the needed default assets for the form
- // this means that 3rd party themes can override these by implementing their own form.cshtml file
- //it will simply hook into standard way forms load assets
- if (Model.DisableDefaultStylesheet == false)
- {
- Html.SetFormThemeCssFile(Model, "~/App_Plugins/UmbracoForms/Assets/themes/default/style.css");
- }
-}
-
-
-
-
- @if (string.IsNullOrEmpty(Model.CurrentPage.Caption) == false)
- {
-
- }
-
- @if (Model.ShowValidationSummary)
- {
- @Html.ValidationSummary(false)
- }
-
-
- @foreach (FieldsetViewModel fs in Model.CurrentPage.Fieldsets)
- {
-
-
- @if (string.IsNullOrEmpty(fs.Caption) == false)
- {
- @fs.Caption
- }
-
-
-
- @foreach (var c in fs.Containers)
- {
-
- }
-
-
-
- }
-
-
-
-
-
-
-
-
-
-@await Html.PartialAsync("Forms/Themes/default/ScrollToFormScript")
diff --git a/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Render.cshtml b/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Render.cshtml
deleted file mode 100644
index 5f49012..0000000
--- a/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Render.cshtml
+++ /dev/null
@@ -1,64 +0,0 @@
-@using Umbraco.Extensions
-@using Umbraco.Forms.Web.Services
-
-@model Umbraco.Forms.Web.Models.FormViewModel
-
-@inject IFormThemeResolver FormThemeResolver
-
-@using Umbraco.Forms.Web
-
-@*
- This view is used as the default render view for all forms, unless a theme
- is chosen, which contains a override of render.cshtm
- Normally, you would not need to override this view, as you would have to
- replicate all functionality of this view seperately
-*@
-
-@{
- //Get the actual view to render the form html
- var formThemedView = FormThemeResolver.GetFormView(Model);
-
- //get the script.cshtml view to render client-side assets
- var formScriptView = FormThemeResolver.GetScriptView(Model);
-
-}
-
-@* In case the form has been marked as submitted - the FormThemeResolver will return the submitted.cshtml file and look for a custom
- view. In case there is no view found - it will default to /themes/default/submitted which will just display the standard message
-*@
-@if (Model.SubmitHandled)
-{
- @await Html.PartialAsync(formThemedView);
-
-} else {
-
- @*Standard form and wrapper *@
-
-
- @using (Html.BeginUmbracoForm("HandleForm", null, Model.HtmlAttributes ))
- {
- @* Standard form meta data *@
-
- @Html.HiddenFor(x => Model.FormId, new {id = (string)null})
- @Html.HiddenFor(x => Model.FormName, new {id = (string)null})
- @Html.HiddenFor(x => Model.RecordId, new {id = (string)null})
- @Html.HiddenFor(x => Model.PreviousClicked, new {id = (string)null})
- @Html.HiddenFor(x => Model.Theme, new {id = (string)null})
-
- @* These 2 cannot use the htmlhelper *@
-
-
-
- @* Render the form html *@
- @await Html.PartialAsync(formThemedView)
- }
-
-
- @* Form Scripts *@
- @if (Model.RenderScriptFiles)
- {
- @* Render the scripts.cshtml file to included standard conditionals and validation logic *@
- await Html.RenderPartialAsync(formScriptView);
- }
-
-}
diff --git a/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Script.cshtml b/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Script.cshtml
deleted file mode 100644
index 4836378..0000000
--- a/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Script.cshtml
+++ /dev/null
@@ -1,43 +0,0 @@
-@model Umbraco.Forms.Web.Models.FormViewModel
-
-@using Newtonsoft.Json
-@using Umbraco.Forms.Core
-@using Umbraco.Forms.Web
-
-@{
- var formJsObj = new
- {
- formId = Model.FormClientId,
- pageButtonConditions = Model.PageButtonConditions,
- fieldSetConditions = Model.FieldsetConditions,
- fieldConditions = Model.FieldConditions,
- recordValues = Model.GetFieldsNotDisplayed()
- };
-
- Html.AddFormThemeScriptFile("~/App_Plugins/UmbracoForms/Assets/themes/default/umbracoforms.js");
-}
-
-
-
-@* Only render out scripts on the page if the form has not been submitted yet *@
-@if (Model.SubmitHandled == false)
-{
- @*
- If the current page of the form has any Partial view files attached to render
- Likely used by events and third parties adding tracking or other 3rd party functionality to a form
- *@
- if (Model.CurrentPage.PartialViewFiles.Any())
- {
- foreach (var partial in Model.CurrentPage.PartialViewFiles)
- {
- @await Html.PartialAsync(partial.Value)
- }
- }
-
- @* Render references to javascript files needed by fields on the current page*@
- @Html.RenderFormsScripts(Url, Model, Model.JavaScriptTagAttributes)
- @Html.RenderFormsStylesheets(Url, Model)
-}
diff --git a/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/ScrollToFormScript.cshtml b/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/ScrollToFormScript.cshtml
deleted file mode 100644
index 8051440..0000000
--- a/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/ScrollToFormScript.cshtml
+++ /dev/null
@@ -1,40 +0,0 @@
-@model Umbraco.Forms.Web.Models.FormViewModel
-
-@if (!ViewData.ModelState.IsValid || Model.SubmitHandled)
-{
-
-}
diff --git a/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Submitted.cshtml b/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Submitted.cshtml
deleted file mode 100644
index 01b63b8..0000000
--- a/src/DemoWebsite.v9/Views/Partials/Forms/Themes/default/Submitted.cshtml
+++ /dev/null
@@ -1,8 +0,0 @@
-@model Umbraco.Forms.Web.Models.FormViewModel
-
-
-
- @Model.MessageOnSubmit
-
-
-@await Html.PartialAsync("Forms/Themes/default/ScrollToFormScript")
diff --git a/src/DemoWebsite.v9/Views/Shared/_Layout.cshtml b/src/DemoWebsite.v9/Views/Shared/_Layout.cshtml
deleted file mode 100644
index 3f356e7..0000000
--- a/src/DemoWebsite.v9/Views/Shared/_Layout.cshtml
+++ /dev/null
@@ -1,16 +0,0 @@
-@using Umbraco.Forms.Web
-@inherits UmbracoViewPage
-
-
-
-
-
-
- @Model.Name
- @Html.RenderUmbracoFormDependencies()
-
-
-
- @RenderBody()
-
-
diff --git a/src/DemoWebsite.v9/Views/_ViewImports.cshtml b/src/DemoWebsite.v9/Views/_ViewImports.cshtml
deleted file mode 100644
index 94600c2..0000000
--- a/src/DemoWebsite.v9/Views/_ViewImports.cshtml
+++ /dev/null
@@ -1,7 +0,0 @@
-@using Microsoft.AspNetCore.Html
-@using Umbraco.Extensions
-@using Perplex.ContentBlocks.Rendering
-@using Umbraco.Cms.Web.Common.PublishedModels
-@using Umbraco.Cms.Web.Common.Views
-@using Umbraco.Cms.Core.Models.PublishedContent
-@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
diff --git a/src/DemoWebsite.v9/Views/_ViewStart.cshtml b/src/DemoWebsite.v9/Views/_ViewStart.cshtml
deleted file mode 100644
index 2de6241..0000000
--- a/src/DemoWebsite.v9/Views/_ViewStart.cshtml
+++ /dev/null
@@ -1,3 +0,0 @@
-@{
- Layout = "~/Views/Shared/_Layout.cshtml";
-}
diff --git a/src/DemoWebsite.v9/appsettings.Development.json b/src/DemoWebsite.v9/appsettings.Development.json
deleted file mode 100644
index fee0ce2..0000000
--- a/src/DemoWebsite.v9/appsettings.Development.json
+++ /dev/null
@@ -1,41 +0,0 @@
-{
- "$schema" : "./umbraco/config/appsettings-schema.json",
- "Serilog": {
- "MinimumLevel": {
- "Default": "Information"
- },
- "WriteTo": [
- {
- "Name": "Async",
- "Args": {
- "configure": [
- {
- "Name": "Console"
- }
- ]
- }
- }
- ]
- },
- "Umbraco": {
- "CMS": {
- "Content": {
- "MacroErrors": "Throw"
- },
- "Global": {
- "Smtp": {
- "From": "your@email.here",
- "Host": "localhost",
- "Port": 25
- }
- },
- "Hosting": {
- "Debug": true
- },
- "RuntimeMinification": {
- "useInMemoryCache": true,
- "cacheBuster": "Timestamp"
- }
- }
- }
-}
\ No newline at end of file
diff --git a/src/DemoWebsite.v9/appsettings.json b/src/DemoWebsite.v9/appsettings.json
deleted file mode 100644
index 6d09405..0000000
--- a/src/DemoWebsite.v9/appsettings.json
+++ /dev/null
@@ -1,32 +0,0 @@
-{
- "$schema": "./umbraco/config/appsettings-schema.json",
- "Serilog": {
- "MinimumLevel": {
- "Default": "Information",
- "Override": {
- "Microsoft": "Warning",
- "Microsoft.Hosting.Lifetime": "Information",
- "System": "Warning"
- }
- }
- },
- "ConnectionStrings": {
- "umbracoDbDSN": "Data Source=|DataDirectory|\\Umbraco.sdf;Flush Interval=1;"
- },
- "Umbraco": {
- "CMS": {
- "Hosting": {
- "Debug": false
- },
- "ModelsBuilder": {
- "ModelsMode": "SourceCodeManual"
- },
- "Global": {
- "Id": "326a686b-cf25-48b4-8258-3b13afb03e6c"
- },
- "WebRouting": {
- "DisableRedirectUrlTracking": true
- }
- }
- }
-}
\ No newline at end of file
diff --git a/src/DemoWebsite.v9/umbraco/models/ExampleBlock.generated.cs b/src/DemoWebsite.v9/umbraco/models/ExampleBlock.generated.cs
deleted file mode 100644
index 20ae2c9..0000000
--- a/src/DemoWebsite.v9/umbraco/models/ExampleBlock.generated.cs
+++ /dev/null
@@ -1,64 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-//
-// Umbraco.ModelsBuilder.Embedded v9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c
-//
-// Changes to this file will be lost if the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-using System;
-using System.Linq.Expressions;
-using Umbraco.Cms.Core.Models.PublishedContent;
-using Umbraco.Cms.Core.PublishedCache;
-using Umbraco.Cms.Infrastructure.ModelsBuilder;
-using Umbraco.Cms.Core;
-using Umbraco.Extensions;
-
-namespace Umbraco.Cms.Web.Common.PublishedModels
-{
- /// Example Block
- [PublishedModel("exampleBlock")]
- public partial class ExampleBlock : PublishedElementModel
- {
- // helpers
-#pragma warning disable 0109 // new is redundant
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- public new const string ModelTypeAlias = "exampleBlock";
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- public new const PublishedItemType ModelItemType = PublishedItemType.Content;
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- public new static IPublishedContentType GetModelContentType(IPublishedSnapshotAccessor publishedSnapshotAccessor)
- => PublishedModelUtility.GetModelContentType(publishedSnapshotAccessor, ModelItemType, ModelTypeAlias);
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- public static IPublishedPropertyType GetModelPropertyType(IPublishedSnapshotAccessor publishedSnapshotAccessor, Expression> selector)
- => PublishedModelUtility.GetModelPropertyType(GetModelContentType(publishedSnapshotAccessor), selector);
-#pragma warning restore 0109
-
- private IPublishedValueFallback _publishedValueFallback;
-
- // ctor
- public ExampleBlock(IPublishedElement content, IPublishedValueFallback publishedValueFallback)
- : base(content, publishedValueFallback)
- {
- _publishedValueFallback = publishedValueFallback;
- }
-
- // properties
-
- ///
- /// Text
- ///
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- [ImplementPropertyType("text")]
- public virtual global::Umbraco.Cms.Core.Strings.IHtmlEncodedString Text => this.Value(_publishedValueFallback, "text");
-
- ///
- /// Title
- ///
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- [ImplementPropertyType("title")]
- public virtual string Title => this.Value(_publishedValueFallback, "title");
- }
-}
diff --git a/src/DemoWebsite.v9/umbraco/models/File.generated.cs b/src/DemoWebsite.v9/umbraco/models/File.generated.cs
deleted file mode 100644
index 7294190..0000000
--- a/src/DemoWebsite.v9/umbraco/models/File.generated.cs
+++ /dev/null
@@ -1,71 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-//
-// Umbraco.ModelsBuilder.Embedded v9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c
-//
-// Changes to this file will be lost if the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-using System;
-using System.Linq.Expressions;
-using Umbraco.Cms.Core.Models.PublishedContent;
-using Umbraco.Cms.Core.PublishedCache;
-using Umbraco.Cms.Infrastructure.ModelsBuilder;
-using Umbraco.Cms.Core;
-using Umbraco.Extensions;
-
-namespace Umbraco.Cms.Web.Common.PublishedModels
-{
- /// File
- [PublishedModel("File")]
- public partial class File : PublishedContentModel
- {
- // helpers
-#pragma warning disable 0109 // new is redundant
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- public new const string ModelTypeAlias = "File";
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- public new const PublishedItemType ModelItemType = PublishedItemType.Media;
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- public new static IPublishedContentType GetModelContentType(IPublishedSnapshotAccessor publishedSnapshotAccessor)
- => PublishedModelUtility.GetModelContentType(publishedSnapshotAccessor, ModelItemType, ModelTypeAlias);
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- public static IPublishedPropertyType GetModelPropertyType(IPublishedSnapshotAccessor publishedSnapshotAccessor, Expression> selector)
- => PublishedModelUtility.GetModelPropertyType(GetModelContentType(publishedSnapshotAccessor), selector);
-#pragma warning restore 0109
-
- private IPublishedValueFallback _publishedValueFallback;
-
- // ctor
- public File(IPublishedContent content, IPublishedValueFallback publishedValueFallback)
- : base(content, publishedValueFallback)
- {
- _publishedValueFallback = publishedValueFallback;
- }
-
- // properties
-
- ///
- /// Size: in bytes
- ///
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- [ImplementPropertyType("umbracoBytes")]
- public virtual long UmbracoBytes => this.Value(_publishedValueFallback, "umbracoBytes");
-
- ///
- /// Type
- ///
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- [ImplementPropertyType("umbracoExtension")]
- public virtual string UmbracoExtension => this.Value(_publishedValueFallback, "umbracoExtension");
-
- ///
- /// File
- ///
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- [ImplementPropertyType("umbracoFile")]
- public virtual string UmbracoFile => this.Value(_publishedValueFallback, "umbracoFile");
- }
-}
diff --git a/src/DemoWebsite.v9/umbraco/models/Folder.generated.cs b/src/DemoWebsite.v9/umbraco/models/Folder.generated.cs
deleted file mode 100644
index 8207bf4..0000000
--- a/src/DemoWebsite.v9/umbraco/models/Folder.generated.cs
+++ /dev/null
@@ -1,50 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-//
-// Umbraco.ModelsBuilder.Embedded v9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c
-//
-// Changes to this file will be lost if the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-using System;
-using System.Linq.Expressions;
-using Umbraco.Cms.Core.Models.PublishedContent;
-using Umbraco.Cms.Core.PublishedCache;
-using Umbraco.Cms.Infrastructure.ModelsBuilder;
-using Umbraco.Cms.Core;
-using Umbraco.Extensions;
-
-namespace Umbraco.Cms.Web.Common.PublishedModels
-{
- /// Folder
- [PublishedModel("Folder")]
- public partial class Folder : PublishedContentModel
- {
- // helpers
-#pragma warning disable 0109 // new is redundant
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- public new const string ModelTypeAlias = "Folder";
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- public new const PublishedItemType ModelItemType = PublishedItemType.Media;
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- public new static IPublishedContentType GetModelContentType(IPublishedSnapshotAccessor publishedSnapshotAccessor)
- => PublishedModelUtility.GetModelContentType(publishedSnapshotAccessor, ModelItemType, ModelTypeAlias);
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- public static IPublishedPropertyType GetModelPropertyType(IPublishedSnapshotAccessor publishedSnapshotAccessor, Expression> selector)
- => PublishedModelUtility.GetModelPropertyType(GetModelContentType(publishedSnapshotAccessor), selector);
-#pragma warning restore 0109
-
- private IPublishedValueFallback _publishedValueFallback;
-
- // ctor
- public Folder(IPublishedContent content, IPublishedValueFallback publishedValueFallback)
- : base(content, publishedValueFallback)
- {
- _publishedValueFallback = publishedValueFallback;
- }
-
- // properties
- }
-}
diff --git a/src/DemoWebsite.v9/umbraco/models/Home.generated.cs b/src/DemoWebsite.v9/umbraco/models/Home.generated.cs
deleted file mode 100644
index 3fa63de..0000000
--- a/src/DemoWebsite.v9/umbraco/models/Home.generated.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-//
-// Umbraco.ModelsBuilder.Embedded v9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c
-//
-// Changes to this file will be lost if the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-using System;
-using System.Linq.Expressions;
-using Umbraco.Cms.Core.Models.PublishedContent;
-using Umbraco.Cms.Core.PublishedCache;
-using Umbraco.Cms.Infrastructure.ModelsBuilder;
-using Umbraco.Cms.Core;
-using Umbraco.Extensions;
-
-namespace Umbraco.Cms.Web.Common.PublishedModels
-{
- /// Home
- [PublishedModel("home")]
- public partial class Home : PublishedContentModel
- {
- // helpers
-#pragma warning disable 0109 // new is redundant
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- public new const string ModelTypeAlias = "home";
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- public new const PublishedItemType ModelItemType = PublishedItemType.Content;
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- public new static IPublishedContentType GetModelContentType(IPublishedSnapshotAccessor publishedSnapshotAccessor)
- => PublishedModelUtility.GetModelContentType(publishedSnapshotAccessor, ModelItemType, ModelTypeAlias);
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- public static IPublishedPropertyType GetModelPropertyType(IPublishedSnapshotAccessor publishedSnapshotAccessor, Expression> selector)
- => PublishedModelUtility.GetModelPropertyType(GetModelContentType(publishedSnapshotAccessor), selector);
-#pragma warning restore 0109
-
- private IPublishedValueFallback _publishedValueFallback;
-
- // ctor
- public Home(IPublishedContent content, IPublishedValueFallback publishedValueFallback)
- : base(content, publishedValueFallback)
- {
- _publishedValueFallback = publishedValueFallback;
- }
-
- // properties
-
- ///
- /// Content Blocks
- ///
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- [ImplementPropertyType("contentBlocks")]
- public virtual global::Perplex.ContentBlocks.Rendering.IContentBlocks ContentBlocks => this.Value(_publishedValueFallback, "contentBlocks");
- }
-}
diff --git a/src/DemoWebsite.v9/umbraco/models/Image.generated.cs b/src/DemoWebsite.v9/umbraco/models/Image.generated.cs
deleted file mode 100644
index 8375df3..0000000
--- a/src/DemoWebsite.v9/umbraco/models/Image.generated.cs
+++ /dev/null
@@ -1,85 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-//
-// Umbraco.ModelsBuilder.Embedded v9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c
-//
-// Changes to this file will be lost if the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-using System;
-using System.Linq.Expressions;
-using Umbraco.Cms.Core.Models.PublishedContent;
-using Umbraco.Cms.Core.PublishedCache;
-using Umbraco.Cms.Infrastructure.ModelsBuilder;
-using Umbraco.Cms.Core;
-using Umbraco.Extensions;
-
-namespace Umbraco.Cms.Web.Common.PublishedModels
-{
- /// Image
- [PublishedModel("Image")]
- public partial class Image : PublishedContentModel
- {
- // helpers
-#pragma warning disable 0109 // new is redundant
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- public new const string ModelTypeAlias = "Image";
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- public new const PublishedItemType ModelItemType = PublishedItemType.Media;
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- public new static IPublishedContentType GetModelContentType(IPublishedSnapshotAccessor publishedSnapshotAccessor)
- => PublishedModelUtility.GetModelContentType(publishedSnapshotAccessor, ModelItemType, ModelTypeAlias);
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- public static IPublishedPropertyType GetModelPropertyType(IPublishedSnapshotAccessor publishedSnapshotAccessor, Expression> selector)
- => PublishedModelUtility.GetModelPropertyType(GetModelContentType(publishedSnapshotAccessor), selector);
-#pragma warning restore 0109
-
- private IPublishedValueFallback _publishedValueFallback;
-
- // ctor
- public Image(IPublishedContent content, IPublishedValueFallback publishedValueFallback)
- : base(content, publishedValueFallback)
- {
- _publishedValueFallback = publishedValueFallback;
- }
-
- // properties
-
- ///
- /// Size: in bytes
- ///
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- [ImplementPropertyType("umbracoBytes")]
- public virtual long UmbracoBytes => this.Value(_publishedValueFallback, "umbracoBytes");
-
- ///
- /// Type
- ///
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- [ImplementPropertyType("umbracoExtension")]
- public virtual string UmbracoExtension => this.Value(_publishedValueFallback, "umbracoExtension");
-
- ///
- /// Image
- ///
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- [ImplementPropertyType("umbracoFile")]
- public virtual global::Umbraco.Cms.Core.PropertyEditors.ValueConverters.ImageCropperValue UmbracoFile => this.Value(_publishedValueFallback, "umbracoFile");
-
- ///
- /// Height: in pixels
- ///
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- [ImplementPropertyType("umbracoHeight")]
- public virtual int UmbracoHeight => this.Value(_publishedValueFallback, "umbracoHeight");
-
- ///
- /// Width: in pixels
- ///
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- [ImplementPropertyType("umbracoWidth")]
- public virtual int UmbracoWidth => this.Value(_publishedValueFallback, "umbracoWidth");
- }
-}
diff --git a/src/DemoWebsite.v9/umbraco/models/Member.generated.cs b/src/DemoWebsite.v9/umbraco/models/Member.generated.cs
deleted file mode 100644
index ea5d7af..0000000
--- a/src/DemoWebsite.v9/umbraco/models/Member.generated.cs
+++ /dev/null
@@ -1,99 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-//
-// Umbraco.ModelsBuilder.Embedded v9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c
-//
-// Changes to this file will be lost if the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-using System;
-using System.Linq.Expressions;
-using Umbraco.Cms.Core.Models.PublishedContent;
-using Umbraco.Cms.Core.PublishedCache;
-using Umbraco.Cms.Infrastructure.ModelsBuilder;
-using Umbraco.Cms.Core;
-using Umbraco.Extensions;
-
-namespace Umbraco.Cms.Web.Common.PublishedModels
-{
- /// Member
- [PublishedModel("Member")]
- public partial class Member : PublishedContentModel
- {
- // helpers
-#pragma warning disable 0109 // new is redundant
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- public new const string ModelTypeAlias = "Member";
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- public new const PublishedItemType ModelItemType = PublishedItemType.Member;
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- public new static IPublishedContentType GetModelContentType(IPublishedSnapshotAccessor publishedSnapshotAccessor)
- => PublishedModelUtility.GetModelContentType(publishedSnapshotAccessor, ModelItemType, ModelTypeAlias);
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- public static IPublishedPropertyType GetModelPropertyType(IPublishedSnapshotAccessor publishedSnapshotAccessor, Expression> selector)
- => PublishedModelUtility.GetModelPropertyType(GetModelContentType(publishedSnapshotAccessor), selector);
-#pragma warning restore 0109
-
- private IPublishedValueFallback _publishedValueFallback;
-
- // ctor
- public Member(IPublishedContent content, IPublishedValueFallback publishedValueFallback)
- : base(content, publishedValueFallback)
- {
- _publishedValueFallback = publishedValueFallback;
- }
-
- // properties
-
- ///
- /// Is Approved
- ///
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- [ImplementPropertyType("umbracoMemberApproved")]
- public virtual bool UmbracoMemberApproved => this.Value(_publishedValueFallback, "umbracoMemberApproved");
-
- ///
- /// Comments
- ///
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- [ImplementPropertyType("umbracoMemberComments")]
- public virtual string UmbracoMemberComments => this.Value(_publishedValueFallback, "umbracoMemberComments");
-
- ///
- /// Failed Password Attempts
- ///
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- [ImplementPropertyType("umbracoMemberFailedPasswordAttempts")]
- public virtual int UmbracoMemberFailedPasswordAttempts => this.Value(_publishedValueFallback, "umbracoMemberFailedPasswordAttempts");
-
- ///
- /// Last Lockout Date
- ///
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- [ImplementPropertyType("umbracoMemberLastLockoutDate")]
- public virtual global::System.DateTime UmbracoMemberLastLockoutDate => this.Value(_publishedValueFallback, "umbracoMemberLastLockoutDate");
-
- ///
- /// Last Login Date
- ///
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- [ImplementPropertyType("umbracoMemberLastLogin")]
- public virtual global::System.DateTime UmbracoMemberLastLogin => this.Value(_publishedValueFallback, "umbracoMemberLastLogin");
-
- ///
- /// Last Password Change Date
- ///
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- [ImplementPropertyType("umbracoMemberLastPasswordChangeDate")]
- public virtual global::System.DateTime UmbracoMemberLastPasswordChangeDate => this.Value(_publishedValueFallback, "umbracoMemberLastPasswordChangeDate");
-
- ///
- /// Is Locked Out
- ///
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- [ImplementPropertyType("umbracoMemberLockedOut")]
- public virtual bool UmbracoMemberLockedOut => this.Value(_publishedValueFallback, "umbracoMemberLockedOut");
- }
-}
diff --git a/src/DemoWebsite.v9/umbraco/models/UmbracoMediaArticle.generated.cs b/src/DemoWebsite.v9/umbraco/models/UmbracoMediaArticle.generated.cs
deleted file mode 100644
index fb8ef1e..0000000
--- a/src/DemoWebsite.v9/umbraco/models/UmbracoMediaArticle.generated.cs
+++ /dev/null
@@ -1,71 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-//
-// Umbraco.ModelsBuilder.Embedded v9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c
-//
-// Changes to this file will be lost if the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-using System;
-using System.Linq.Expressions;
-using Umbraco.Cms.Core.Models.PublishedContent;
-using Umbraco.Cms.Core.PublishedCache;
-using Umbraco.Cms.Infrastructure.ModelsBuilder;
-using Umbraco.Cms.Core;
-using Umbraco.Extensions;
-
-namespace Umbraco.Cms.Web.Common.PublishedModels
-{
- /// Article
- [PublishedModel("umbracoMediaArticle")]
- public partial class UmbracoMediaArticle : PublishedContentModel
- {
- // helpers
-#pragma warning disable 0109 // new is redundant
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- public new const string ModelTypeAlias = "umbracoMediaArticle";
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- public new const PublishedItemType ModelItemType = PublishedItemType.Media;
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- public new static IPublishedContentType GetModelContentType(IPublishedSnapshotAccessor publishedSnapshotAccessor)
- => PublishedModelUtility.GetModelContentType(publishedSnapshotAccessor, ModelItemType, ModelTypeAlias);
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- public static IPublishedPropertyType GetModelPropertyType(IPublishedSnapshotAccessor publishedSnapshotAccessor, Expression> selector)
- => PublishedModelUtility.GetModelPropertyType(GetModelContentType(publishedSnapshotAccessor), selector);
-#pragma warning restore 0109
-
- private IPublishedValueFallback _publishedValueFallback;
-
- // ctor
- public UmbracoMediaArticle(IPublishedContent content, IPublishedValueFallback publishedValueFallback)
- : base(content, publishedValueFallback)
- {
- _publishedValueFallback = publishedValueFallback;
- }
-
- // properties
-
- ///
- /// Size: in bytes
- ///
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- [ImplementPropertyType("umbracoBytes")]
- public virtual long UmbracoBytes => this.Value(_publishedValueFallback, "umbracoBytes");
-
- ///
- /// Type
- ///
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- [ImplementPropertyType("umbracoExtension")]
- public virtual string UmbracoExtension => this.Value(_publishedValueFallback, "umbracoExtension");
-
- ///
- /// Article
- ///
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- [ImplementPropertyType("umbracoFile")]
- public virtual string UmbracoFile => this.Value(_publishedValueFallback, "umbracoFile");
- }
-}
diff --git a/src/DemoWebsite.v9/umbraco/models/UmbracoMediaAudio.generated.cs b/src/DemoWebsite.v9/umbraco/models/UmbracoMediaAudio.generated.cs
deleted file mode 100644
index b3976cf..0000000
--- a/src/DemoWebsite.v9/umbraco/models/UmbracoMediaAudio.generated.cs
+++ /dev/null
@@ -1,71 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-//
-// Umbraco.ModelsBuilder.Embedded v9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c
-//
-// Changes to this file will be lost if the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-using System;
-using System.Linq.Expressions;
-using Umbraco.Cms.Core.Models.PublishedContent;
-using Umbraco.Cms.Core.PublishedCache;
-using Umbraco.Cms.Infrastructure.ModelsBuilder;
-using Umbraco.Cms.Core;
-using Umbraco.Extensions;
-
-namespace Umbraco.Cms.Web.Common.PublishedModels
-{
- /// Audio
- [PublishedModel("umbracoMediaAudio")]
- public partial class UmbracoMediaAudio : PublishedContentModel
- {
- // helpers
-#pragma warning disable 0109 // new is redundant
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- public new const string ModelTypeAlias = "umbracoMediaAudio";
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- public new const PublishedItemType ModelItemType = PublishedItemType.Media;
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- public new static IPublishedContentType GetModelContentType(IPublishedSnapshotAccessor publishedSnapshotAccessor)
- => PublishedModelUtility.GetModelContentType(publishedSnapshotAccessor, ModelItemType, ModelTypeAlias);
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- public static IPublishedPropertyType GetModelPropertyType(IPublishedSnapshotAccessor publishedSnapshotAccessor, Expression> selector)
- => PublishedModelUtility.GetModelPropertyType(GetModelContentType(publishedSnapshotAccessor), selector);
-#pragma warning restore 0109
-
- private IPublishedValueFallback _publishedValueFallback;
-
- // ctor
- public UmbracoMediaAudio(IPublishedContent content, IPublishedValueFallback publishedValueFallback)
- : base(content, publishedValueFallback)
- {
- _publishedValueFallback = publishedValueFallback;
- }
-
- // properties
-
- ///
- /// Size: in bytes
- ///
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- [ImplementPropertyType("umbracoBytes")]
- public virtual long UmbracoBytes => this.Value(_publishedValueFallback, "umbracoBytes");
-
- ///
- /// Type
- ///
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- [ImplementPropertyType("umbracoExtension")]
- public virtual string UmbracoExtension => this.Value(_publishedValueFallback, "umbracoExtension");
-
- ///
- /// Audio
- ///
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- [ImplementPropertyType("umbracoFile")]
- public virtual string UmbracoFile => this.Value(_publishedValueFallback, "umbracoFile");
- }
-}
diff --git a/src/DemoWebsite.v9/umbraco/models/UmbracoMediaVectorGraphics.generated.cs b/src/DemoWebsite.v9/umbraco/models/UmbracoMediaVectorGraphics.generated.cs
deleted file mode 100644
index 6522005..0000000
--- a/src/DemoWebsite.v9/umbraco/models/UmbracoMediaVectorGraphics.generated.cs
+++ /dev/null
@@ -1,71 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-//
-// Umbraco.ModelsBuilder.Embedded v9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c
-//
-// Changes to this file will be lost if the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-using System;
-using System.Linq.Expressions;
-using Umbraco.Cms.Core.Models.PublishedContent;
-using Umbraco.Cms.Core.PublishedCache;
-using Umbraco.Cms.Infrastructure.ModelsBuilder;
-using Umbraco.Cms.Core;
-using Umbraco.Extensions;
-
-namespace Umbraco.Cms.Web.Common.PublishedModels
-{
- /// Vector Graphics (SVG)
- [PublishedModel("umbracoMediaVectorGraphics")]
- public partial class UmbracoMediaVectorGraphics : PublishedContentModel
- {
- // helpers
-#pragma warning disable 0109 // new is redundant
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- public new const string ModelTypeAlias = "umbracoMediaVectorGraphics";
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- public new const PublishedItemType ModelItemType = PublishedItemType.Media;
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- public new static IPublishedContentType GetModelContentType(IPublishedSnapshotAccessor publishedSnapshotAccessor)
- => PublishedModelUtility.GetModelContentType(publishedSnapshotAccessor, ModelItemType, ModelTypeAlias);
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- public static IPublishedPropertyType GetModelPropertyType(IPublishedSnapshotAccessor publishedSnapshotAccessor, Expression> selector)
- => PublishedModelUtility.GetModelPropertyType(GetModelContentType(publishedSnapshotAccessor), selector);
-#pragma warning restore 0109
-
- private IPublishedValueFallback _publishedValueFallback;
-
- // ctor
- public UmbracoMediaVectorGraphics(IPublishedContent content, IPublishedValueFallback publishedValueFallback)
- : base(content, publishedValueFallback)
- {
- _publishedValueFallback = publishedValueFallback;
- }
-
- // properties
-
- ///
- /// Size: in bytes
- ///
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- [ImplementPropertyType("umbracoBytes")]
- public virtual long UmbracoBytes => this.Value(_publishedValueFallback, "umbracoBytes");
-
- ///
- /// Type
- ///
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- [ImplementPropertyType("umbracoExtension")]
- public virtual string UmbracoExtension => this.Value(_publishedValueFallback, "umbracoExtension");
-
- ///
- /// Vector Graphics
- ///
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- [ImplementPropertyType("umbracoFile")]
- public virtual string UmbracoFile => this.Value(_publishedValueFallback, "umbracoFile");
- }
-}
diff --git a/src/DemoWebsite.v9/umbraco/models/UmbracoMediaVideo.generated.cs b/src/DemoWebsite.v9/umbraco/models/UmbracoMediaVideo.generated.cs
deleted file mode 100644
index 6d6e3d2..0000000
--- a/src/DemoWebsite.v9/umbraco/models/UmbracoMediaVideo.generated.cs
+++ /dev/null
@@ -1,71 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-//
-// Umbraco.ModelsBuilder.Embedded v9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c
-//
-// Changes to this file will be lost if the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-using System;
-using System.Linq.Expressions;
-using Umbraco.Cms.Core.Models.PublishedContent;
-using Umbraco.Cms.Core.PublishedCache;
-using Umbraco.Cms.Infrastructure.ModelsBuilder;
-using Umbraco.Cms.Core;
-using Umbraco.Extensions;
-
-namespace Umbraco.Cms.Web.Common.PublishedModels
-{
- /// Video
- [PublishedModel("umbracoMediaVideo")]
- public partial class UmbracoMediaVideo : PublishedContentModel
- {
- // helpers
-#pragma warning disable 0109 // new is redundant
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- public new const string ModelTypeAlias = "umbracoMediaVideo";
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- public new const PublishedItemType ModelItemType = PublishedItemType.Media;
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- public new static IPublishedContentType GetModelContentType(IPublishedSnapshotAccessor publishedSnapshotAccessor)
- => PublishedModelUtility.GetModelContentType(publishedSnapshotAccessor, ModelItemType, ModelTypeAlias);
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- public static IPublishedPropertyType GetModelPropertyType(IPublishedSnapshotAccessor publishedSnapshotAccessor, Expression> selector)
- => PublishedModelUtility.GetModelPropertyType(GetModelContentType(publishedSnapshotAccessor), selector);
-#pragma warning restore 0109
-
- private IPublishedValueFallback _publishedValueFallback;
-
- // ctor
- public UmbracoMediaVideo(IPublishedContent content, IPublishedValueFallback publishedValueFallback)
- : base(content, publishedValueFallback)
- {
- _publishedValueFallback = publishedValueFallback;
- }
-
- // properties
-
- ///
- /// Size: in bytes
- ///
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- [ImplementPropertyType("umbracoBytes")]
- public virtual long UmbracoBytes => this.Value(_publishedValueFallback, "umbracoBytes");
-
- ///
- /// Type
- ///
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- [ImplementPropertyType("umbracoExtension")]
- public virtual string UmbracoExtension => this.Value(_publishedValueFallback, "umbracoExtension");
-
- ///
- /// Video
- ///
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Umbraco.ModelsBuilder.Embedded", "9.0.0-rc001+4f06c1f33a54daf4752a439778626202960db68c")]
- [ImplementPropertyType("umbracoFile")]
- public virtual string UmbracoFile => this.Value(_publishedValueFallback, "umbracoFile");
- }
-}
diff --git a/src/Directory.Build.props b/src/Directory.Build.props
new file mode 100644
index 0000000..16edf36
--- /dev/null
+++ b/src/Directory.Build.props
@@ -0,0 +1,14 @@
+
+
+
+ 3.0.0-alpha.1
+ Perplex Digital
+ https://github.com/PerplexDigital/Perplex.ContentBlocks
+ icon.png
+
+ https://github.com/PerplexDigital/Perplex.ContentBlocks
+ git
+ MIT
+
+
+
diff --git a/src/Perplex.ContentBlocks.Core/Perplex.ContentBlocks.Core.csproj b/src/Perplex.ContentBlocks.Core/Perplex.ContentBlocks.Core.csproj
index 4392b8a..ff5df34 100644
--- a/src/Perplex.ContentBlocks.Core/Perplex.ContentBlocks.Core.csproj
+++ b/src/Perplex.ContentBlocks.Core/Perplex.ContentBlocks.Core.csproj
@@ -1,36 +1,30 @@
- net5.0;net472
+ net6.0
+ enable
+ enable
+ Nullable
+ /
+ embedded
+ True
+ False
-
-
+
Perplex.ContentBlocks.Core
- 2.1.9
- Perplex Digital
Perplex.ContentBlocks assembly only
umbraco
- https://github.com/PerplexDigital/Perplex.ContentBlocks
Perplex.ContentBlocks
Perplex.ContentBlocks
- icon.png
-
- https://github.com/PerplexDigital/Perplex.ContentBlocks
- git
- MIT
-
-
-
-
-
-
+
+
-
+
True
diff --git a/src/Perplex.ContentBlocks.sln b/src/Perplex.ContentBlocks.sln
index 965e0b3..3966906 100644
--- a/src/Perplex.ContentBlocks.sln
+++ b/src/Perplex.ContentBlocks.sln
@@ -1,16 +1,10 @@
Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 16
-VisualStudioVersion = 16.0.29519.181
+# Visual Studio Version 17
+VisualStudioVersion = 17.7.34003.232
MinimumVisualStudioVersion = 10.0.40219.1
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DemoWebsite.v8", "DemoWebsite.v8\DemoWebsite.v8.csproj", "{138B10FE-3907-4D28-A1A9-02FB6C630580}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DemoWebsite.v8.Legacy", "DemoWebsite.v8.Legacy\DemoWebsite.v8.Legacy.csproj", "{F316A8CA-EBCD-42CF-B37A-F44694E79505}"
-EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Perplex.ContentBlocks", "Perplex.ContentBlocks\Perplex.ContentBlocks.csproj", "{CC00D01F-A987-4E6F-9983-FFAC97CE27A3}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DemoWebsite.v9", "DemoWebsite.v9\DemoWebsite.v9.csproj", "{F6389055-AAD7-43D1-8EC7-F34C7183DAB0}"
-EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Perplex.ContentBlocks.Core", "Perplex.ContentBlocks.Core\Perplex.ContentBlocks.Core.csproj", "{1282FAD9-5B28-4DBA-BF0E-0F8982085F59}"
EndProject
Global
@@ -19,22 +13,10 @@ Global
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {138B10FE-3907-4D28-A1A9-02FB6C630580}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {138B10FE-3907-4D28-A1A9-02FB6C630580}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {138B10FE-3907-4D28-A1A9-02FB6C630580}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {138B10FE-3907-4D28-A1A9-02FB6C630580}.Release|Any CPU.Build.0 = Release|Any CPU
- {F316A8CA-EBCD-42CF-B37A-F44694E79505}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {F316A8CA-EBCD-42CF-B37A-F44694E79505}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {F316A8CA-EBCD-42CF-B37A-F44694E79505}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {F316A8CA-EBCD-42CF-B37A-F44694E79505}.Release|Any CPU.Build.0 = Release|Any CPU
{CC00D01F-A987-4E6F-9983-FFAC97CE27A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CC00D01F-A987-4E6F-9983-FFAC97CE27A3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CC00D01F-A987-4E6F-9983-FFAC97CE27A3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CC00D01F-A987-4E6F-9983-FFAC97CE27A3}.Release|Any CPU.Build.0 = Release|Any CPU
- {F6389055-AAD7-43D1-8EC7-F34C7183DAB0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {F6389055-AAD7-43D1-8EC7-F34C7183DAB0}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {F6389055-AAD7-43D1-8EC7-F34C7183DAB0}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {F6389055-AAD7-43D1-8EC7-F34C7183DAB0}.Release|Any CPU.Build.0 = Release|Any CPU
{1282FAD9-5B28-4DBA-BF0E-0F8982085F59}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1282FAD9-5B28-4DBA-BF0E-0F8982085F59}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1282FAD9-5B28-4DBA-BF0E-0F8982085F59}.Release|Any CPU.ActiveCfg = Release|Any CPU
diff --git a/src/Perplex.ContentBlocks/Perplex.ContentBlocks.csproj b/src/Perplex.ContentBlocks/Perplex.ContentBlocks.csproj
index 83c110d..2663be0 100644
--- a/src/Perplex.ContentBlocks/Perplex.ContentBlocks.csproj
+++ b/src/Perplex.ContentBlocks/Perplex.ContentBlocks.csproj
@@ -1,56 +1,21 @@
-
+
- net5.0;net472
+ net6.0
-
-
- false
+
Perplex.ContentBlocks
- 2.1.9
- Perplex Digital
- Block based content editor for Umbraco
umbraco umbraco-marketplace
- https://github.com/PerplexDigital/Perplex.ContentBlocks
- icon.png
-
- https://github.com/PerplexDigital/Perplex.ContentBlocks
- git
- NU5128
- MIT
+ Block based content editor for Umbraco
+ false
-
+
True
- content\App_Plugins\Perplex.ContentBlocks
- Always
-
-
-
-
-
- True
-
-
-
- True
- buildTransitive\net472;buildTransitive\net5.0
-
-
-
-
-
-
-
-
-
-
-
-
- all
-
+
+
diff --git a/src/Perplex.ContentBlocks/build/Perplex.ContentBlocks.targets b/src/Perplex.ContentBlocks/build/Perplex.ContentBlocks.targets
deleted file mode 100644
index b7da078..0000000
--- a/src/Perplex.ContentBlocks/build/Perplex.ContentBlocks.targets
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
- <_PackageRelativeDir>App_Plugins\Perplex.ContentBlocks\
- <_PackageProjectDir>$(MSBuildProjectDirectory)\$(_PackageRelativeDir)
- <_ContentFilesSource>$(MSBuildThisFileDirectory)..\..\content\$(_PackageRelativeDir)**
- <_ContentFilesDestination>$(_PackageProjectDir)**
-
-
-
- <_ContentFilesSource Include="$(_ContentFilesSource)" />
- <_ContentFilesDestination Include="$(_ContentFilesDestination)" />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- $(_PackageRelativeDir)%(RecursiveDir)%(Filename)%(Extension)
-
-
-
-
-
diff --git a/src/Perplex.ContentBlocks/compilerconfig.json b/src/Perplex.ContentBlocks/compilerconfig.json
deleted file mode 100644
index 42dd7e6..0000000
--- a/src/Perplex.ContentBlocks/compilerconfig.json
+++ /dev/null
@@ -1,6 +0,0 @@
-[
- {
- "outputFile": "App_Plugins/Perplex.ContentBlocks/perplex.content-blocks.css",
- "inputFile": "App_Plugins/Perplex.ContentBlocks/perplex.content-blocks.less"
- }
-]
\ No newline at end of file
diff --git a/src/Perplex.ContentBlocks/compilerconfig.json.defaults b/src/Perplex.ContentBlocks/compilerconfig.json.defaults
deleted file mode 100644
index 832a7dd..0000000
--- a/src/Perplex.ContentBlocks/compilerconfig.json.defaults
+++ /dev/null
@@ -1,63 +0,0 @@
-{
- "compilers": {
- "less": {
- "autoPrefix": "",
- "cssComb": "none",
- "ieCompat": true,
- "strictMath": false,
- "strictUnits": false,
- "relativeUrls": true,
- "rootPath": "",
- "sourceMapRoot": "",
- "sourceMapBasePath": "",
- "sourceMap": false
- },
- "sass": {
- "autoPrefix": "",
- "includePath": "",
- "indentType": "space",
- "indentWidth": 2,
- "outputStyle": "nested",
- "Precision": 5,
- "relativeUrls": true,
- "sourceMapRoot": "",
- "lineFeed": "",
- "sourceMap": false
- },
- "stylus": {
- "sourceMap": false
- },
- "babel": {
- "sourceMap": false
- },
- "coffeescript": {
- "bare": false,
- "runtimeMode": "node",
- "sourceMap": false
- },
- "handlebars": {
- "root": "",
- "noBOM": false,
- "name": "",
- "namespace": "",
- "knownHelpersOnly": false,
- "forcePartial": false,
- "knownHelpers": [],
- "commonjs": "",
- "amd": false,
- "sourceMap": false
- }
- },
- "minifiers": {
- "css": {
- "enabled": false,
- "termSemicolons": true,
- "gzip": false
- },
- "javascript": {
- "enabled": true,
- "termSemicolons": true,
- "gzip": false
- }
- }
-}
\ No newline at end of file
diff --git a/pkg/nuget/icon.png b/src/Perplex.ContentBlocks/icon.png
similarity index 100%
rename from pkg/nuget/icon.png
rename to src/Perplex.ContentBlocks/icon.png