Compare commits

...

14 Commits

Author SHA1 Message Date
Kevin Giszewski 9a2e14d8f6 Add sponsors 2017-09-08 09:09:38 -04:00
Kevin Giszewski 7d8a6e28fa Test Sponsors 2017-09-07 14:15:28 -04:00
Kevin Giszewski 6a9c56df58 Add locking to the file saving. Update casing on English lang files. 2017-09-07 13:13:37 -04:00
Kevin Giszewski 078f4a506e Add obfuscation 2017-09-07 11:01:29 -04:00
Kevin Giszewski a54170b915 Naming is hard. 2017-09-07 09:08:47 -04:00
Kevin Giszewski 757ba890f5 Update links and blurb in the config 2017-09-07 09:03:39 -04:00
Kevin Giszewski a127dac03a Move off the web.config in favor of an Archetype config 2017-09-07 08:55:26 -04:00
Kevin Giszewski 77ec2d7a9c Update meta.json 2017-09-06 21:22:00 -04:00
Kevin Giszewski 0d55f0ed86 Add a URL to the notification 2017-09-06 21:00:32 -04:00
Kevin Giszewski 6a7ac205bc Update the url to call and use JSON Convert 2017-09-06 19:53:25 -04:00
Kevin Giszewski 1cb2139137 More WIP 2017-09-06 18:32:48 -04:00
Kevin Giszewski b9179f4140 WIP on version checking 2017-09-06 12:20:52 -04:00
Kevin Giszewski bae1ee508b Update README.md 2017-09-04 17:26:56 -04:00
Kevin Giszewski 20b6a78af1 Update some stuffs for nuget 2017-08-18 09:20:45 -04:00
26 changed files with 452 additions and 59 deletions
+5 -2
View File
@@ -85,6 +85,7 @@ module.exports = function(grunt) {
'app/controllers/controller_versioned.js',
'app/controllers/config.controller.js',
'app/controllers/config.dialog.controller.js',
'app/controllers/config.global.controller.js',
'app/directives/archetypeproperty.js',
'app/directives/archetypesubmitwatcher.js',
'app/directives/archetypecustomview.js',
@@ -95,7 +96,8 @@ module.exports = function(grunt) {
'app/resources/archetypePropertyEditorResource.js',
'app/services/archetypeService.js',
'app/services/archetypeLabelService.js',
'app/services/archetypeCacheService.js'
'app/services/archetypeCacheService.js',
'app/services/archetypeGlobalConfigService.js'
],
dest: '<%= basePath %>/js/archetype.js'
}
@@ -269,7 +271,8 @@ module.exports = function(grunt) {
'app/controllers/*.js',
'!app/controllers/controller.js',
'!app/controllers/config.controller.js',
'!app/controllers/config.dialog.controller.js'
'!app/controllers/config.dialog.controller.js',
'!app/controllers/config.global.controller.js'
],
less: [
'app/less/*.less',
+2
View File
@@ -10,6 +10,8 @@ Install the selected <a href='https://github.com/imulus/Archetype/releases'>rele
## Official Docs ##
https://github.com/kgiszewski/ArchetypeManual
Get up and running in 15 minutes! https://www.youtube.com/watch?v=79LksNwGjLk
## News and Updates ##
Follow us on Twitter https://twitter.com/ArchetypeKit
@@ -1,9 +1,7 @@
using System.Collections.Generic;
using System;
using System.Diagnostics;
using System.Linq;
using System.Net;
using System.Reflection;
using System.Web.Http;
using AutoMapper;
using Umbraco.Core.Models;
@@ -11,12 +9,14 @@ using Umbraco.Web.Models.ContentEditing;
using Umbraco.Web.Mvc;
using Umbraco.Web.Editors;
using Archetype.Extensions;
using Archetype.Models;
namespace Archetype.Api
{
/// <summary>
/// Controller that handles datatype related interactions.
/// </summary>
/// <seealso cref="Umbraco.Web.Editors.UmbracoAuthorizedJsonController" />
[PluginController("ArchetypeApi")]
public class ArchetypeDataTypeController : UmbracoAuthorizedJsonController
{
@@ -24,14 +24,14 @@ namespace Archetype.Api
{
return
global::Umbraco.Core.PropertyEditors.PropertyEditorResolver.Current.PropertyEditors
.Select(x => new {defaultPreValues = x.DefaultPreValuesForArchetype(), alias = x.Alias, view = x.ValueEditor.View});
.Select(x => new { defaultPreValues = x.DefaultPreValuesForArchetype(), alias = x.Alias, view = x.ValueEditor.View });
}
/// <summary>
/// Gets all datatypes.
/// </summary>
/// <returns></returns>
public object GetAll()
public object GetAll()
{
var dataTypes = Services.DataTypeService.GetAllDataTypeDefinitions();
return dataTypes.Select(t => new { guid = t.Key, name = t.Name });
@@ -68,11 +68,14 @@ namespace Archetype.Api
public object GetByGuid(Guid guid, string contentTypeAlias, string propertyTypeAlias, string archetypeAlias, int nodeId)
{
var dataType = Services.DataTypeService.GetDataTypeDefinitionById(guid);
if (dataType == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
var dataTypeDisplay = Mapper.Map<IDataTypeDefinition, DataTypeDisplay>(dataType);
return new { selectedEditor = dataTypeDisplay.SelectedEditor, preValues = dataTypeDisplay.PreValues, contentTypeAlias = contentTypeAlias, propertyTypeAlias = propertyTypeAlias, archetypeAlias = archetypeAlias, nodeId = nodeId };
}
@@ -82,19 +85,58 @@ namespace Archetype.Api
/// <returns></returns>
public object GetDllVersion()
{
return new {dllVersion = _version()};
return new { dllVersion = ArchetypeHelper.Instance.DllVersion() };
}
/// <summary>
/// Gets the DLL version from the file.
/// Globals the settings.
/// </summary>
/// <returns></returns>
private string _version()
/// <returns>System.Object.</returns>
[HttpGet]
public object GlobalSettings()
{
var asm = Assembly.GetExecutingAssembly();
var fvi = FileVersionInfo.GetVersionInfo(asm.Location);
return new
{
isCheckingForUpdates = ArchetypeGlobalSettings.Instance.CheckForUpdates
};
}
return fvi.FileVersion;
/// <summary>
/// Sets the check for updates.
/// </summary>
/// <param name="isChecking">if set to <c>true</c> [is checking].</param>
[HttpPost]
public void SetCheckForUpdates([FromBody] bool isChecking)
{
ArchetypeGlobalSettings.Instance.CheckForUpdates = isChecking;
ArchetypeGlobalSettings.Instance.Save();
}
/// <summary>
/// Checks for updates.
/// </summary>
/// <returns>System.Object.</returns>
[HttpPost]
public object CheckForUpdates()
{
if (!ArchetypeGlobalSettings.Instance.CheckForUpdates)
{
return new
{
isUpdateAvailable = false
};
}
var updateNotificationModel = ArchetypeHelper.Instance.CheckForUpdates();
return new
{
isUpdateAvailable = updateNotificationModel.IsUpdateAvailable,
headline = updateNotificationModel.Headline,
type = updateNotificationModel.Type,
message = updateNotificationModel.Message,
url = updateNotificationModel.Url
};
}
}
}
@@ -129,6 +129,7 @@
<Private>False</Private>
</Reference>
<Reference Include="System" />
<Reference Include="System.Configuration" />
<Reference Include="System.Core" />
<Reference Include="System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL">
<Private>False</Private>
@@ -238,6 +239,8 @@
<Compile Include="Extensions\ArchetypePropertyModelExtensions.cs" />
<Compile Include="Extensions\PropertyEditorExtensions.cs" />
<Compile Include="Extensions\StringExtensions.cs" />
<Compile Include="Models\ArchetypeConfigFileModel.cs" />
<Compile Include="Models\ArchetypeGlobalSettings.cs" />
<Compile Include="Models\ArchetypeModel.cs" />
<Compile Include="Models\ArchetypePreValue.cs" />
<Compile Include="Models\ArchetypePreValueFieldset.cs" />
@@ -248,6 +251,7 @@
<Compile Include="Models\ArchetypePublishedContent.cs" />
<Compile Include="Models\ArchetypePublishedContentSet.cs" />
<Compile Include="Models\ArchetypePublishedProperty.cs" />
<Compile Include="Models\ArchetypeUpdateNotification.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Properties\VersionInfo.cs" />
<Compile Include="PropertyConverters\ArchetypeValueConverter.cs" />
@@ -12,5 +12,8 @@
public const string CacheKey_DataTypeByGuid = "";
public const string CacheKey_PreValueFromDataTypeId = "Archetype_GetArchetypePreValueFromDataTypeId_";
public const string UmbracoVersionAlias = "umbracoConfigurationStatus";
public const string NotificationUrl = "https://api.gizmo42.com/v1/archetype/check-for-updates";
}
}
@@ -1,12 +1,21 @@
using System;
using System.Configuration;
using System.Linq;
using System.Net.Http;
using System.Text;
using Archetype.Models;
using Newtonsoft.Json;
using Umbraco.Core;
using Umbraco.Core.Logging;
using Umbraco.Core.Models;
using Umbraco.Core.Models.PublishedContent;
using System.Reflection;
using System.Diagnostics;
using System.Net;
/// <summary>
/// The Extensions namespace.
/// </summary>
namespace Archetype.Extensions
{
/// <summary>
@@ -14,20 +23,52 @@ namespace Archetype.Extensions
/// </summary>
public class ArchetypeHelper
{
/// <summary>
/// The json settings
/// </summary>
protected JsonSerializerSettings _jsonSettings;
/// <summary>
/// The application
/// </summary>
protected ApplicationContext _app;
private static readonly ArchetypeHelper _instance = new ArchetypeHelper();
internal static ArchetypeHelper Instance { get { return _instance; } }
/// <summary>
/// The pad lock
/// </summary>
private static readonly object _padLock = new object();
/// <summary>
/// The instance
/// </summary>
private static ArchetypeHelper _instance = new ArchetypeHelper();
/// <summary>
/// Initializes a new instance of the <see cref="ArchetypeHelper"/> class.
/// Gets the instance.
/// </summary>
internal ArchetypeHelper()
/// <value>The instance.</value>
internal static ArchetypeHelper Instance {
get
{
if (_instance == null)
{
lock (_padLock)
{
if (_instance == null)
{
_instance = new ArchetypeHelper();
}
}
}
return _instance;
}
}
/// <summary>
/// Initializes a new instance of the <see cref="ArchetypeHelper" /> class.
/// </summary>
private ArchetypeHelper()
{
var dcr = new Newtonsoft.Json.Serialization.DefaultContractResolver();
dcr.DefaultMembersSearchFlags |= System.Reflection.BindingFlags.NonPublic;
dcr.DefaultMembersSearchFlags |= BindingFlags.NonPublic;
_jsonSettings = new JsonSerializerSettings { ContractResolver = dcr };
_app = ApplicationContext.Current;
@@ -36,9 +77,7 @@ namespace Archetype.Extensions
/// <summary>
/// Gets the json serializer settings.
/// </summary>
/// <value>
/// The json serializer settings.
/// </value>
/// <value>The json serializer settings.</value>
internal JsonSerializerSettings JsonSerializerSettings { get { return _jsonSettings; } }
/// <summary>
@@ -46,7 +85,7 @@ namespace Archetype.Extensions
/// </summary>
/// <param name="sourceJson">The source JSON.</param>
/// <param name="dataTypePreValues">The data type pre values.</param>
/// <returns></returns>
/// <returns>ArchetypeModel.</returns>
internal ArchetypeModel DeserializeJsonToArchetype(string sourceJson, PreValueCollection dataTypePreValues)
{
try
@@ -78,7 +117,7 @@ namespace Archetype.Extensions
/// <param name="sourceJson">The source JSON.</param>
/// <param name="dataTypeId">The data type identifier.</param>
/// <param name="hostContentType">Type of the host content.</param>
/// <returns></returns>
/// <returns>ArchetypeModel.</returns>
internal ArchetypeModel DeserializeJsonToArchetype(string sourceJson, int dataTypeId, PublishedContentType hostContentType = null)
{
try
@@ -108,21 +147,66 @@ namespace Archetype.Extensions
/// Determines whether datatypeId has had it's PVC overridden.
/// </summary>
/// <param name="dataTypeId">The data type identifier.</param>
/// <returns></returns>
/// <returns><c>true</c> if [is property value converter overridden] [the specified data type identifier]; otherwise, <c>false</c>.</returns>
internal bool IsPropertyValueConverterOverridden(int dataTypeId)
{
var prevalues = GetArchetypePreValueFromDataTypeId(dataTypeId);
if (prevalues == null)
return false;
return prevalues.OverrideDefaultPropertyValueConverter;
}
/// <summary>
/// Checks for updates.
/// </summary>
/// <returns>ArchetypeUpdateNotification.</returns>
internal ArchetypeUpdateNotification CheckForUpdates()
{
try
{
using (var client = new HttpClient())
{
var content = new StringContent(JsonConvert.SerializeObject(new
{
umbracoVersion = ConfigurationManager.AppSettings[Constants.UmbracoVersionAlias],
archetypeVersion = DllVersion(),
id = ArchetypeGlobalSettings.Instance.Id
}), Encoding.UTF8, "application/json");
client.DefaultRequestHeaders.Add("x-api-key-id", ArchetypeGlobalSettings.Instance.ApiKey.ToString());
var response = client.PostAsync(new Uri(Constants.NotificationUrl), content).Result;
if (response.StatusCode == HttpStatusCode.OK)
{
var responseString = response.Content.ReadAsStringAsync().Result;
return JsonConvert.DeserializeObject<ArchetypeUpdateNotification>(responseString);
}
return new ArchetypeUpdateNotification
{
IsUpdateAvailable = false
};
}
}
catch (Exception ex)
{
//if anything goes wrong let's make sure we don't break their site
return new ArchetypeUpdateNotification
{
IsUpdateAvailable = false
};
}
}
/// <summary>
/// Gets the archetype pre value from data type identifier.
/// </summary>
/// <param name="dataTypeId">The data type identifier.</param>
/// <returns></returns>
/// <returns>ArchetypePreValue.</returns>
private ArchetypePreValue GetArchetypePreValueFromDataTypeId(int dataTypeId)
{
return _app.ApplicationCache.RuntimeCache.GetCacheItem(
@@ -147,7 +231,7 @@ namespace Archetype.Extensions
/// Gets the archetype pre value from pre values collection.
/// </summary>
/// <param name="dataTypePreValues">The data type pre values.</param>
/// <returns></returns>
/// <returns>ArchetypePreValue.</returns>
private ArchetypePreValue GetArchetypePreValueFromPreValuesCollection(PreValueCollection dataTypePreValues)
{
var preValueAsString = dataTypePreValues.PreValuesAsDictionary.First().Value.Value;
@@ -159,7 +243,7 @@ namespace Archetype.Extensions
/// Gets the data type by unique identifier.
/// </summary>
/// <param name="guid">The unique identifier.</param>
/// <returns></returns>
/// <returns>IDataTypeDefinition.</returns>
internal IDataTypeDefinition GetDataTypeByGuid(Guid guid)
{
return (IDataTypeDefinition)ApplicationContext.Current.ApplicationCache.RuntimeCache.GetCacheItem(
@@ -172,6 +256,7 @@ namespace Archetype.Extensions
/// </summary>
/// <param name="archetype">The Archetype to add the additional metadata to</param>
/// <param name="preValue">The configuration of the Archetype</param>
/// <param name="hostContentType">Type of the host content.</param>
private void RetrieveAdditionalProperties(ref ArchetypeModel archetype, ArchetypePreValue preValue, PublishedContentType hostContentType = null)
{
foreach (var fieldset in preValue.Fieldsets)
@@ -197,7 +282,6 @@ namespace Archetype.Extensions
/// <summary>
/// Retrieves additional metadata that isn't available on the stored model of an ArchetypePreValue
/// </summary>
/// <param name="archetype">The Archetype to add the additional metadata to</param>
/// <param name="preValue">The configuration of the Archetype</param>
private void RetrieveAdditionalProperties(ref ArchetypePreValue preValue)
{
@@ -209,5 +293,18 @@ namespace Archetype.Extensions
}
}
}
/// <summary>
/// Gets the DLL version from the file.
/// </summary>
/// <returns>System.String.</returns>
internal string DllVersion()
{
var asm = Assembly.GetExecutingAssembly();
var fvi = FileVersionInfo.GetVersionInfo(asm.Location);
return fvi.FileVersion;
}
}
}
@@ -0,0 +1,10 @@
using System;
namespace Archetype.Models
{
public class ArchetypeConfigFileModel
{
public Guid Id { get; set; }
public bool CheckForUpdates { get; set; }
}
}
@@ -0,0 +1,134 @@
using System;
using System.IO;
using System.Text;
using Newtonsoft.Json;
using Umbraco.Core.IO;
using Umbraco.Core.Logging;
namespace Archetype.Models
{
public class ArchetypeGlobalSettings
{
public bool CheckForUpdates { get; set; }
public Guid Id { get; set; }
public Guid ApiKey = _getApiKey();
private static ArchetypeGlobalSettings _instance;
private static string _pathToConfig = @"~/Config/Archetype.config.js";
private static readonly string _mappedPathToConfig = IOHelper.MapPath(_pathToConfig);
private static object _padLock = new object();
private ArchetypeGlobalSettings()
{
}
public static ArchetypeGlobalSettings Instance
{
get
{
if (_instance == null)
{
lock (_padLock)
{
if (_instance == null)
{
_instance = new ArchetypeGlobalSettings();
_loadSettingsFromConfigFile();
}
}
}
return _instance;
}
}
public void Save()
{
lock (_padLock)
{
//write to JSON
var configFileModel = new ArchetypeConfigFileModel
{
Id = _instance.Id,
CheckForUpdates = _instance.CheckForUpdates
};
var serializedJson = JsonConvert.SerializeObject(configFileModel, Formatting.Indented);
File.WriteAllText(_mappedPathToConfig, serializedJson);
}
}
private static void _loadSettingsFromConfigFile()
{
try
{
if (File.Exists(_mappedPathToConfig))
{
//load
var deserializedConfigFile = JsonConvert.DeserializeObject<ArchetypeConfigFileModel>(File.ReadAllText(_mappedPathToConfig));
if (deserializedConfigFile != null)
{
_instance.Id = deserializedConfigFile.Id;
_instance.CheckForUpdates = deserializedConfigFile.CheckForUpdates;
}
else
{
_createNewConfigFile("Config file model was null!");
}
}
else
{
_createNewConfigFile("Config file was missing!");
}
}
catch (Exception ex)
{
LogHelper.Error<ArchetypeGlobalSettings>(ex.Message, ex);
_createNewConfigFile("Exception!");
}
}
private static void _createNewConfigFile(string reason)
{
//write a new file with defaults
LogHelper.Info<ArchetypeGlobalSettings>(string.Format("Generating a new config file reason: {0}", reason));
_instance.Id = Guid.NewGuid();
_instance.CheckForUpdates = true;
_instance.Save();
}
private static Guid _getApiKey()
{
//this is just obfuscation and an attempt to keep out most but not the determined hacker
var array = new []
{
"RTA4MUZDRjA=",
"NzkzQS1BRDIw",
"OTI3QjFDNjkwQTYy",
"MjI0OQ=="
};
return new Guid(string.Format("{0}-{1}-{3}-{2}",
_decodeBase64(array[0]),
_decodeBase64(array[1]),
_decodeBase64(array[2]),
_decodeBase64(array[3])
));
}
private static string _decodeBase64(string input)
{
return Encoding.UTF8.GetString(Convert.FromBase64String(input));
}
}
}
@@ -0,0 +1,11 @@
namespace Archetype.Models
{
public class ArchetypeUpdateNotification
{
public bool IsUpdateAvailable { get; set; }
public string Headline { get; set; }
public string Type { get; set; }
public string Message { get; set; }
public string Url { get; set; }
}
}
@@ -5,7 +5,7 @@ using System.Runtime.InteropServices;
[assembly: AssemblyTitle("Archetype")]
[assembly: AssemblyDescription("Archetype's supporting code library for Umbraco")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Imulus")]
[assembly: AssemblyCompany("Kevin Giszewski LLC")]
[assembly: AssemblyProduct("Archetype")]
[assembly: AssemblyCopyright("MIT Licensed")]
[assembly: AssemblyTrademark("")]
@@ -1,4 +1,4 @@
using System.Reflection;
[assembly: AssemblyVersion("1.15.1")]
[assembly: AssemblyFileVersion("1.15.1")]
[assembly: AssemblyVersion("1.16.0")]
[assembly: AssemblyFileVersion("1.16.0")]
+12 -1
View File
@@ -1,4 +1,4 @@
angular.module("umbraco").controller("Imulus.ArchetypeConfigController", function ($scope, $http, assetsService, dialogService, archetypePropertyEditorResource) {
angular.module("umbraco").controller("Imulus.ArchetypeConfigController", function ($scope, $http, assetsService, dialogService, archetypePropertyEditorResource, archetypeGlobalConfigService, notificationsService) {
//$scope.model.value = "";
//console.log($scope.model.value);
@@ -16,6 +16,17 @@ angular.module("umbraco").controller("Imulus.ArchetypeConfigController", functio
archetypePropertyEditorResource.getDllVersion().then(function(data){
$scope.dllVersion = data.dllVersion;
});
archetypeGlobalConfigService.checkForUpdates().then(function(data) {
if(data.isUpdateAvailable) {
notificationsService.add({
headline: data.headline,
type: data.type,
message: data.message,
url: data.url
});
}
});
//ini the render model
initConfigRenderModel();
@@ -1,4 +1,5 @@
angular.module('umbraco').controller('ArchetypeConfigOptionsController', function ($scope) {
//handles a fieldset group add
$scope.addFieldsetGroup = function () {
$scope.dialogData.model.fieldsetGroups.push({ name: "" });
@@ -0,0 +1,21 @@
angular.module('umbraco').controller('ArchetypeConfigGlobalOptionsController', function ($scope, archetypeGlobalConfigService) {
$scope.globalSettings = {};
$scope.confirmCheckNewVersionChange = function() {
archetypeGlobalConfigService.setCheckForUpdates($scope.globalSettings.checkForNewVersion);
}
function getGlobalSettings()
{
archetypeGlobalConfigService.globalSettings().then(function(data) {
$scope.globalSettings.checkForNewVersion = data.isCheckingForUpdates;
});
}
init();
function init()
{
getGlobalSettings();
}
});
+2 -2
View File
@@ -11,7 +11,7 @@
"maxFieldsets": "Max Fieldsets",
"maxFieldsetsDescription": "How many Fieldsets are allowed? Entering '1' will disable the controls. Default is unlimited.",
"enableMultipleFieldsets": "Enable Multiple Fieldsets?",
"enableMultipleFieldsetsDescription": "Allows multiple types of fieldsets within this archetype.",
"enableMultipleFieldsetsDescription": "Allows multiple types of fieldsets within this Archetype.",
"hideFieldsetToolbar": "Hide Fieldset Toolbar?",
"hideFieldsetToolbarDescription": "Hides the fieldset toolbar that appears when more than one fieldset model appears.",
"customWrapperClass": "Custom Wrapper Class",
@@ -23,7 +23,7 @@
"toggleDeveloperMode": "Toggle Developer Mode",
"toggleDeveloperModeDescription": "Turn on for developer options.",
"configModel": "Config Model",
"configModelDescription": "Be careful editing the text below, it controls the schema for this archetype.",
"configModelDescription": "Be careful editing the text below, it controls the schema for this Archetype.",
"helpText": "Help Text",
"defaultValue": "Default Value",
"dataType": "DataType",
+2 -2
View File
@@ -11,7 +11,7 @@
"maxFieldsets": "Max Fieldsets",
"maxFieldsetsDescription": "How many Fieldsets are allowed? Entering '1' will disable the controls. Default is unlimited.",
"enableMultipleFieldsets": "Enable Multiple Fieldsets?",
"enableMultipleFieldsetsDescription": "Allows multiple types of fieldsets within this archetype.",
"enableMultipleFieldsetsDescription": "Allows multiple types of fieldsets within this Archetype.",
"hideFieldsetToolbar": "Hide Fieldset Toolbar?",
"hideFieldsetToolbarDescription": "Hides the fieldset toolbar that appears when more than one fieldset model appears.",
"customWrapperClass": "Custom Wrapper Class",
@@ -23,7 +23,7 @@
"toggleDeveloperMode": "Toggle Developer Mode",
"toggleDeveloperModeDescription": "Turn on for developer options.",
"configModel": "Config Model",
"configModelDescription": "Be careful editing the text below, it controls the schema for this archetype.",
"configModelDescription": "Be careful editing the text below, it controls the schema for this Archetype.",
"helpText": "Help Text",
"defaultValue": "Default Value",
"dataType": "DataType",
+2 -2
View File
@@ -11,7 +11,7 @@
"maxFieldsets": "Max Fieldsets",
"maxFieldsetsDescription": "How many Fieldsets are allowed? Entering '1' will disable the controls. Default is unlimited.",
"enableMultipleFieldsets": "Enable Multiple Fieldsets?",
"enableMultipleFieldsetsDescription": "Allows multiple types of fieldsets within this archetype.",
"enableMultipleFieldsetsDescription": "Allows multiple types of fieldsets within this Archetype.",
"hideFieldsetToolbar": "Hide Fieldset Toolbar?",
"hideFieldsetToolbarDescription": "Hides the fieldset toolbar that appears when more than one fieldset model appears.",
"customWrapperClass": "Custom Wrapper Class",
@@ -23,7 +23,7 @@
"toggleDeveloperMode": "Toggle Developer Mode",
"toggleDeveloperModeDescription": "Turn on for developer options.",
"configModel": "Config Model",
"configModelDescription": "Be careful editing the text below, it controls the schema for this archetype.",
"configModelDescription": "Be careful editing the text below, it controls the schema for this Archetype.",
"helpText": "Help Text",
"defaultValue": "Default Value",
"dataType": "DataType",
+24
View File
@@ -357,6 +357,7 @@
}
}
}
.settings {
padding: 14px;
background-color: #f8f8f8;
@@ -391,6 +392,7 @@
.archetypeEditorControls {
float: right;
}
.archetypeEditorControls, .archetypeFieldsetGroups {
i {
cursor: pointer;
@@ -429,6 +431,26 @@
.manual-link {
color: blue;
}
.donate-link {
font-weight: 700;
}
.sponsors {
padding-bottom: 10px;
margin-bottom: 5px;
margin-left: 5px;
display: inline-table;
float: right;
a {
float: none;
}
h4 {
border-bottom: 1px solid #ccc;
}
}
ul {
list-style: none;
@@ -449,6 +471,8 @@
.archetypeFieldsets {
margin-left: 0;
border-top: 5px solid;
padding-top: 5px;
}
.archetypeFieldsetWrapper {
@@ -0,0 +1,19 @@
angular.module('umbraco.services').factory('archetypeGlobalConfigService', function ($q, $http, umbRequestHelper) {
return {
globalSettings: function () {
return umbRequestHelper.resourcePromise(
$http.get("backoffice/ArchetypeApi/ArchetypeDataType/globalSettings"), 'Failed to get whether or not we are checking for updates!'
);
},
setCheckForUpdates: function (isChecking) {
return umbRequestHelper.resourcePromise(
$http.post("backoffice/ArchetypeApi/ArchetypeDataType/SetCheckForUpdates", isChecking), 'Failed to update check status!'
);
},
checkForUpdates: function () {
return umbRequestHelper.resourcePromise(
$http.post("backoffice/ArchetypeApi/ArchetypeDataType/checkForUpdates", { }), 'Failed to check for updates!'
);
}
}
});
@@ -11,9 +11,11 @@
<div>
<label for="archetypeOverrideDefaultConverter"><input type="checkbox" id="archetypeOverrideDefaultConverter" ng-model="dialogData.model.overrideDefaultPropertyValueConverter" /><archetype-localize key="overrideDefaultConverter">Override Default Property Value Converter?</archetype-localize><small><archetype-localize key="overrideDefaultConverterDescription">Check this if you wish to use your own custom property value converter.</archetype-localize></small></label>
</div>
<div ng-controller="ArchetypeConfigGlobalOptionsController">
<label for="archetypeCheckForNewVersion"><input type="checkbox" id="archetypeCheckForNewVersion" ng-model="globalSettings.checkForNewVersion" ng-click="confirmCheckNewVersionChange();" /><archetype-localize key="checkForNewVersion">Automatically check for newer versions?</archetype-localize><small><archetype-localize key="checkForNewVersionDescription">Check this if you wish to be notified when a newer version of Archetype is available. This is a application level setting.</archetype-localize></small></label>
</div>
<div>
<label for="archetypeAdvancedOptionsConfigModel"><archetype-localize key="configModel">Config Model</archetype-localize><small><archetype-localize key="configModelDescription">Be careful editing the text below, it controls the schema for this archetype.</archetype-localize></small></label>
<label for="archetypeAdvancedOptionsConfigModel"><archetype-localize key="configModel">Config Model</archetype-localize><small><archetype-localize key="configModelDescription">Be careful editing the text below, it controls the schema for this Archetype.</archetype-localize></small></label>
<textarea class="archetypeDeveloperModel" id="archetypeAdvancedOptionsConfigModel" ng-model="dialogData.model" ng-change="dialogData.modelChanged = true"></textarea>
</div>
</div>
+12 -3
View File
@@ -1,8 +1,17 @@
{{VERSION_HTML}}
<div class="archetypeConfig" ng-controller="Imulus.ArchetypeConfigController">
<h2 class="archetype-headline"><img src="../App_Plugins/Archetype/assets/logo_50.png"/>Archetype<small>{{dllVersion}}</small><a href="https://twitter.com/archetypekit" target="_blank"><img src="../App_Plugins/Archetype/assets/twitter.png"/></a></h2>
<p>At a minimum your Archetype needs at least one fieldset with at least one property. You can configure it to allow for multiple types of fieldsets within a single Archetype and you can even add another Archetype as a property. Please use the link below for the full manual:</p>
<p><a class="manual-link" href="https://github.com/kgiszewski/ArchetypeManual" target="_blank">Archetype Manual</a></p>
<h2 class="archetype-headline"><img src="../App_Plugins/Archetype/assets/logo_50.png"/>Archetype<small>{{dllVersion}}</small></h2>
<p>At a minimum your Archetype needs at least one fieldset with at least one property. Please use the link below for the full manual. We would really love a donation if you find Archetype useful. Your company can also sponsor a sprint!</p>
<p>
<a class="manual-link" href="https://github.com/kgiszewski/ArchetypeManual" target="_blank">Archetype Manual</a> |
<a class="manual-link" href="https://github.com/kgiszewski/Archetype/blob/master/Terms%20of%20Service.md" target="_blank">Terms of Service</a> |
<a class="manual-link" href="https://www.youtube.com/watch?v=79LksNwGjLk" target="_blank">Quick Start Video</a> |
<a class="manual-link" href="https://twitter.com/archetypekit" target="_blank">Twitter</a> |
<a class="manual-link" href="https://github.com/kgiszewski/Archetype" target="_blank">GitHub</a> |
<a class="manual-link" href="https://github.com/kgiszewski/Archetype/blob/master/Sponsors.md" target="_blank">Become a sponsor</a> |
<a class="manual-link donate-link" href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=KBKWLURGLGU6L" target="_blank">Donate!</a>
</p>
<ul class="archetypeFieldsets" ui-sortable="sortableOptions" ng-model="archetypeConfigRenderModel.fieldsets">
<li ng-repeat="fieldset in archetypeConfigRenderModel.fieldsets" ng-hide="fieldset.remove">
<div class="archetypeFieldsetWrapper" >
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

+4 -4
View File
@@ -1,9 +1,9 @@
{
"name": "Archetype",
"version": "1.15.1",
"url": "http://github.com/imulus/archetype/",
"author": "Imulus - Kevin Giszewski - Tom Fulton - Lee Kelleher - Matt Brailsford - Kenn Jacobsen - Et. Al.",
"authorUrl": "http://imulus.com/",
"version": "1.16.0",
"url": "http://github.com/kgiszewski/archetype/",
"author": "Kevin Giszewski - Tom Fulton - Lee Kelleher - Matt Brailsford - Kenn Jacobsen - Nicholas Westby - Et. Al.",
"authorUrl": "http://github.com/kgiszewski/archetype/",
"license": "MIT",
"licenseUrl": "http://opensource.org/licenses/MIT"
}
+4 -4
View File
@@ -4,12 +4,12 @@
<id>Archetype</id>
<version><%= version %></version>
<title><%= name %></title>
<authors>imulus, kgiszewski, tomfulton</authors>
<owners>imulus, kgiszewski, tomfulton</owners>
<projectUrl>http://github.com/imulus/archetype</projectUrl>
<authors>kgiszewski, tomfulton</authors>
<owners>kgiszewski, tomfulton</owners>
<projectUrl>http://github.com/kgiszewski/archetype</projectUrl>
<description><![CDATA[Archetype for Umbraco]]></description>
<tags>umbraco</tags>
<iconUrl>http://github.com/imulus/archetype/raw/master/assets/logo.png</iconUrl>
<iconUrl>http://imulus.github.io/Archetype/images/logo.png</iconUrl>
<licenseUrl><%= licenseUrl %></licenseUrl>
<dependencies>
<dependency id="Archetype.Binaries" version="<%= version %>" />
+4 -4
View File
@@ -4,12 +4,12 @@
<id>Archetype.Binaries</id>
<version><%= version %></version>
<title><%= name %></title>
<authors>imulus, kgiszewski, tomfulton</authors>
<owners>imulus, kgiszewski, tomfulton</owners>
<projectUrl>http://github.com/imulus/archetype</projectUrl>
<authors>kgiszewski, tomfulton</authors>
<owners>kgiszewski, tomfulton</owners>
<projectUrl>http://github.com/kgiszewski/archetype</projectUrl>
<description><![CDATA[Archetype binaries for Umbraco]]></description>
<tags>umbraco</tags>
<iconUrl>http://github.com/imulus/archetype/raw/master/assets/logo.png</iconUrl>
<iconUrl>http://imulus.github.io/Archetype/images/logo.png</iconUrl>
<licenseUrl><%= licenseUrl %></licenseUrl>
<dependencies>
<dependency id="UmbracoCms.Core" version="7.2.2" />
+2 -2
View File
@@ -6,10 +6,10 @@
<title><%= name %></title>
<authors>leekelleher</authors>
<owners>kgiszewski, leekelleher</owners>
<projectUrl>http://github.com/imulus/archetype</projectUrl>
<projectUrl>http://github.com/kgiszewski/archetype</projectUrl>
<description><![CDATA[Archetype Courier extension for Umbraco]]></description>
<tags>umbraco</tags>
<iconUrl>http://github.com/imulus/archetype/raw/master/assets/logo.png</iconUrl>
<iconUrl>http://imulus.github.io/Archetype/images/logo.png</iconUrl>
<licenseUrl><%= licenseUrl %></licenseUrl>
<dependencies>
<dependency id="Archetype.Binaries" version="<%= version %>" />