Compare commits

...

49 Commits

Author SHA1 Message Date
Kevin Giszewski bbab61d416 Attempt at fixing #429 2017-09-13 12:03:21 -04:00
Kevin Giszewski 5e3e37af31 Update package.nuspec 2017-09-12 10:57:13 -04:00
Kevin Giszewski dbf1bffe34 Update package_binaries.nuspec 2017-09-12 10:56:53 -04:00
Kevin Giszewski cbf87264ac Update package_courier.nuspec 2017-09-12 10:56:41 -04:00
Kevin Giszewski 353c3da22a Update Information Collection Disclosure.md 2017-09-12 10:27:07 -04:00
Kevin Giszewski 9d15e0c696 Update README.md 2017-09-12 10:26:10 -04:00
Kevin Giszewski 7dc7b8f938 Update README.md 2017-09-12 10:25:26 -04:00
Kevin Giszewski f8302b0926 Update README.md 2017-09-12 10:22:12 -04:00
Kevin Giszewski 1cb3f4e266 Merge branch 'master' of https://github.com/kgiszewski/Archetype 2017-09-12 10:16:40 -04:00
Kevin Giszewski d2b7a9a92b Delete tonic_logo_50.png 2017-09-12 10:16:24 -04:00
Kevin Giszewski 245f4ed972 Update TOS -> Disclosure 2017-09-12 10:15:06 -04:00
Kevin Giszewski 19ef383a71 Update Information Collection Disclosure.md 2017-09-12 10:12:57 -04:00
Kevin Giszewski af2287d2fc Add files via upload 2017-09-12 10:12:43 -04:00
Kevin Giszewski e4c206211f Delete optout2.png 2017-09-12 10:12:34 -04:00
Kevin Giszewski 57a199d235 Update Information Collection Disclosure.md 2017-09-12 10:11:45 -04:00
Kevin Giszewski 2a98005ae7 Add files via upload 2017-09-12 10:11:27 -04:00
Kevin Giszewski 69a7256538 Delete optout.png 2017-09-12 10:10:53 -04:00
Kevin Giszewski 38dc405183 Rename Information Collection Disclosure to Information Collection Disclosure.md 2017-09-12 10:06:17 -04:00
Kevin Giszewski d6874e7cd8 Update Information Collection Disclosure 2017-09-12 10:02:09 -04:00
Kevin Giszewski c1e732e3de Update and rename Terms of Service.md to Information Collection Disclosure 2017-09-12 10:01:42 -04:00
Kevin Giszewski 02ffe4db4a Update Terms of Service.md 2017-09-12 09:50:46 -04:00
Kevin Giszewski c79be2f6db Update Terms of Service.md 2017-09-12 09:49:33 -04:00
Kevin Giszewski f0c15ade5d Update Terms of Service.md 2017-09-12 09:48:02 -04:00
Kevin Giszewski 9f8acedf6f Add files via upload 2017-09-12 09:46:18 -04:00
Kevin Giszewski aba3bdd2c4 Update Terms of Service.md 2017-09-12 09:44:59 -04:00
Kevin Giszewski de491f9687 Update Terms of Service.md 2017-09-12 09:43:57 -04:00
Kevin Giszewski 2becf8a1ba Merge pull request #426 from kgiszewski/feature/version-check
Feature/version check
2017-09-12 09:31:03 -04:00
Kevin Giszewski 68a5a9893d Update Sponsors.md 2017-09-08 09:15:11 -04:00
Kevin Giszewski 3ed08c447c Update Sponsors.md 2017-09-08 09:14:44 -04:00
Kevin Giszewski d557ec1edb Update README.md 2017-09-08 09:07:30 -04:00
Kevin Giszewski 4fb7cdc5e5 Create Sponsors.md 2017-09-08 09:06:29 -04:00
Kevin Giszewski 5fa225b460 Update README.md 2017-09-08 09:05:34 -04:00
Kevin Giszewski b1f8c6a732 Merge pull request #425 from Nicholas-Westby/feature/422-label-template-enhancements
Feature/422 label template enhancements
2017-09-07 14:26:48 -04:00
Nicholas-Westby fa265d3019 Avoid exception when there is no label template. 2017-09-07 08:30:09 -07:00
Kevin Giszewski 42661c27f4 Update archetype.config.html 2017-09-07 09:21:48 -04:00
Kevin Giszewski b398e0e677 Merge pull request #427 from GertyEngrie/feature/required-property-indication
Indicate in the datatype configuration if a property is required or not
2017-09-07 09:17:36 -04:00
Gerty Engrie 62e481d49c Indicate in the datatype configuration if a property is required or not 2017-09-07 11:30:21 +02:00
Kevin Giszewski b14645f13f Update Terms of Service.md 2017-09-06 17:25:05 -04:00
Kevin Giszewski b8741726bc Update README.md 2017-09-06 17:21:35 -04:00
Kevin Giszewski d392c4f705 Update Terms of Service.md 2017-09-06 17:20:16 -04:00
Kevin Giszewski 119b0c7680 Create Terms of Service.md 2017-09-06 17:19:43 -04:00
Nicholas-Westby d46d64c52b Allow for other data types to be used with label template functions. 2017-09-06 08:18:43 -07:00
Nicholas-Westby 45318cf061 Merge remote-tracking branch 'upstream/master' into feature/422-label-template-enhancements 2017-09-05 21:01:55 -07:00
Nicholas-Westby b9abf0d6a3 Allow for services to be injected into label template functions.
Allow the value returned from a label template function to be recursively resolved until it finally becomes a string.
2017-09-05 20:51:45 -07:00
Nicholas-Westby e00229984c Label templates can now return a promise that eventually resolves to a string. 2017-09-05 19:39:33 -07:00
Nicholas-Westby 155f212062 New approach to splitting the label template (will make the upcoming promises work easier). In short, each substring is stored into an array, those items are modified, then when all the modifications are done the substrings are combined again. 2017-09-04 20:26:16 -07:00
Nicholas-Westby 86a8112fbd Fixed regex so it doesn't match empty strings.
Removed unused variable.
2017-09-04 19:15:49 -07:00
Nicholas-Westby 810fa95c65 Removed some extraneous and probably buggy code related to label templates. 2017-09-04 19:06:12 -07:00
Nicholas-Westby 9bcd9d67ae Update the Archetype controller to allow for fieldset titles to be loaded using promises (still need to actually allow for promises). 2017-09-04 15:49:30 -07:00
13 changed files with 384 additions and 117 deletions
+13
View File
@@ -0,0 +1,13 @@
# Information Collection Disclosure
As of version v1.16.0, we are checking your installed version of Archetype against the current version. In this process we collect the current version of Archetype along with the current version of Umbraco that you are running. We use these values to help determine a response message to you. You may opt-out of this process by 'un-checking' the option in any of the Archetypes you have configured in the `Developer->Data Types` section of Umbraco.
![opt out](assets/optout3.png)
This is a global setting that will set an `AppSetting` and update a file located at `~/config/archetype.config.js`. If you manually change the setting it will require an app reload to refresh to runtime values. If somehow this file becomes corrupt, a new file will be generated and you will again have to opt out.
We identify your install only by a randomly generated GUID. We WILL NOT store your IP address or hostname during the update check.
Part of the reason we collect this information is to also ascertain how many active installs exist. If this number is sufficiently high, we can plan accordingly and attempt to keep this project going.
We would ask that you reach out to the Archetype team via creating an issue on this site if you have any questions or concerns. We truly want Archetype to be a win-win for all involved.
+10 -5
View File
@@ -1,11 +1,11 @@
Archetype
=========
![alt tag](http://imulus.github.io/Archetype/images/logo.png)
![alt tag](http://kgiszewski.github.io/Archetype/images/logo.png)
![alt tag](http://imulus.github.io/Archetype/images/example1.png)
![alt tag](http://kgiszewski.github.io/Archetype/images/example1.png)
## Installation
Install the selected <a href='https://github.com/imulus/Archetype/releases'>release</a> through the Umbraco package installer or via <a href='http://www.nuget.org/packages/Archetype/'>NuGet</a>.
Install the selected <a href='https://github.com/kgiszewski/Archetype/releases'>release</a> through the Umbraco package installer or via <a href='http://www.nuget.org/packages/Archetype/'>NuGet</a>.
## Official Docs ##
https://github.com/kgiszewski/ArchetypeManual
@@ -16,17 +16,22 @@ Get up and running in 15 minutes! https://www.youtube.com/watch?v=79LksNwGjLk
Follow us on Twitter https://twitter.com/ArchetypeKit
## Core Team ##
* Kevin Giszewski (founder/project lead) - University of Notre Dame - https://kevin.giszewski.com/
* Kevin Giszewski (founder/project lead) - Tonic - https://kevin.giszewski.com/
* Tom Fulton (founder) - Tonic - http://hellotonic.com/
* Lee Kelleher - Umbrella - http://www.umbrellainc.co.uk/
* Matt Brailsford - The Outfield - http://www.theoutfield.co.uk/
* Kenn Jacobsen - Vertica - http://kennjacobsen.dk/
## Donate!
## Sponsor us\Donate!
[![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=KBKWLURGLGU6L)
This project is funded by the core team members' time only. We don't charge for Archetype but it does take quite a bit of effort to keep it up-to-date with Umbraco core changes. If you're making a few bucks off of Archetype, we wouldn't refuse a donation :)
[Learn more](Sponsors.md) about sponsorship!
## Information Collection Disclosure
Please read the information disclosure [here](Information%20Collection%20Disclosure.md).
## Contribute ##
Want to contribute to Archetype? You'll want to use Grunt (our task runner) to help you integrate with a local copy of Umbraco.
+13
View File
@@ -0,0 +1,13 @@
# Sponsorship
Are you a company that depends on Archetype? We would love for you to sponsor us! Here's some suggested ways below!
## Sponsor a Sprint
We have a [backlog](https://github.com/kgiszewski/Archetype/issues), it gets worked on when either we have a personal need, we get bored or when we get a sponsorship. If you want to sponsor a sprint, we can give you thanks on social media and if you're really generous, we can put your logo and link on a well placed spot in a version release. [Contact us](https://twitter.com/ArchetypeKit) to get started.
## Donations
If you want to quietly support us, you can also send us a donation:
[![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=KBKWLURGLGU6L)
+57 -1
View File
@@ -42,8 +42,56 @@ angular.module("umbraco").controller("Imulus.ArchetypeController", function ($sc
}
//helper to get $eval the labelTemplate
$scope.fieldsetTitles = [];
$scope.getFieldsetTitle = function (fieldsetConfigModel, fieldsetIndex) {
return archetypeLabelService.getFieldsetTitle($scope, fieldsetConfigModel, fieldsetIndex);
// Ensure the collection of titles is large enough.
ensureEnoughTitles(fieldsetIndex + 1);
var title = $scope.fieldsetTitles[fieldsetIndex];
// Return the title if it's already been loaded.
if (title.loaded) {
return title.value;
}
// Return early if the title is still loading.
if (title.loading) {
return;
}
// Start loading the title.
title.loading = true;
title.loaded = false;
title.value = null;
archetypeLabelService.getFieldsetTitle($scope, fieldsetConfigModel, fieldsetIndex)
.then(function(value) {
// Finished loading the title.
title.loaded = true;
title.loading = false;
title.value = value;
});
// Still loading a title, so do not return a title.
};
$scope.$on('archetypeEntityCacheUpdated', function(event, entity) {
$scope.fieldsetTitles = _.reject($scope.fieldsetTitles, function(title) {
return title.loaded;
});
});
/**
* Ensure the collection of fieldset titles is large enough to accommodate the number of fieldsets.
* @param count The number of fieldsets.
*/
function ensureEnoughTitles(count) {
while ($scope.fieldsetTitles.length < count) {
$scope.fieldsetTitles.push({
loading: false,
loaded: false,
value: null
});
}
}
//sort config
@@ -697,6 +745,14 @@ angular.module("umbraco").controller("Imulus.ArchetypeController", function ($sc
fileManager.setFiles($scope.model.alias, archetypeFiles);
}
// Deep watch for changes.
$scope.$watch('model.value', function () {
// Empty titles. If the value has changed, the titles may have changed.
$scope.fieldsetTitles = [];
}, true);
//watch for changes
$scope.$watch('model.value', function (v) {
if ($scope.model.config.developerMode) {
+71 -63
View File
@@ -6,101 +6,109 @@ angular.module('umbraco.services').factory('archetypeCacheService', function (ar
var isDatatypeLookupLoading = false;
var datatypeCache = [];
var broadcastEntityCacheUpdated = function(scope, entity) {
scope.$broadcast("archetypeEntityCacheUpdated", entity);
}
return {
getDataTypeFromCache: function(guid) {
return _.find(datatypeCache, function (dt){
return dt.dataTypeGuid == guid;
});
},
getDataTypeFromCache: function(guid) {
return _.find(datatypeCache, function (dt){
return dt.dataTypeGuid == guid;
});
},
addDatatypeToCache: function(datatype, dataTypeGuid) {
addDatatypeToCache: function(datatype, dataTypeGuid) {
var cachedDatatype = this.getDataTypeFromCache(dataTypeGuid);
if(!cachedDatatype) {
datatype.dataTypeGuid = dataTypeGuid;
datatypeCache.push(datatype);
datatype.dataTypeGuid = dataTypeGuid;
datatypeCache.push(datatype);
}
},
},
getDatatypeByGuid: function(guid) {
var cachedDatatype = this.getDataTypeFromCache(guid);
getDatatypeByGuid: function(guid) {
var cachedDatatype = this.getDataTypeFromCache(guid);
if(cachedDatatype) {
return cachedDatatype;
}
if(cachedDatatype) {
return cachedDatatype;
}
//go get it from server, but this should already be pre-populated from the directive, but I suppose I'll leave this in in case used ad-hoc
if (!isDatatypeLookupLoading) {
isDatatypeLookupLoading = true;
//go get it from server, but this should already be pre-populated from the directive, but I suppose I'll leave this in in case used ad-hoc
if (!isDatatypeLookupLoading) {
isDatatypeLookupLoading = true;
archetypePropertyEditorResource.getDataType(guid).then(function(datatype) {
archetypePropertyEditorResource.getDataType(guid).then(function(datatype) {
datatype.dataTypeGuid = guid;
datatype.dataTypeGuid = guid;
datatypeCache.push(datatype);
datatypeCache.push(datatype);
isDatatypeLookupLoading = false;
isDatatypeLookupLoading = false;
return datatype;
});
}
return datatype;
});
}
return null;
return null;
},
getEntityById: function(scope, id, type) {
var cachedEntity = _.find(entityCache, function (e){
return e.id == id;
});
getEntityById: function(scope, id, type) {
var cachedEntity = _.find(entityCache, function (e){
return e.id == id;
});
if(cachedEntity) {
return cachedEntity;
}
if(cachedEntity) {
return cachedEntity;
}
//go get it from server
if (!isEntityLookupLoading) {
isEntityLookupLoading = true;
//go get it from server
if (!isEntityLookupLoading) {
isEntityLookupLoading = true;
scope.resources.entityResource.getById(id, type).then(function(entity) {
scope.resources.entityResource.getById(id, type).then(function(entity) {
entityCache.push(entity);
entityCache.push(entity);
isEntityLookupLoading = false;
isEntityLookupLoading = false;
broadcastEntityCacheUpdated(scope, entity);
return entity;
});
}
return entity;
});
}
return null;
},
return null;
},
getEntityByUmbracoId: function(scope, udi, type) {
var cachedEntity = _.find(entityCache, function (e){
return e.udi == udi;
});
getEntityByUmbracoId: function(scope, udi, type) {
var cachedEntity = _.find(entityCache, function (e){
return e.udi == udi;
});
if(cachedEntity) {
return cachedEntity;
}
if(cachedEntity) {
return cachedEntity;
}
//go get it from server
if (!isEntityLookupLoading) {
isEntityLookupLoading = true;
//go get it from server
if (!isEntityLookupLoading) {
isEntityLookupLoading = true;
scope.resources.entityResource.getByIds([udi], type).then(function (entities) {
// prevent infinite lookups with a default entity
var entity = entities.length > 0 ? entities[0] : { udi: udi, name: "" };
scope.resources.entityResource.getByIds([udi], type).then(function (entities) {
// prevent infinite lookups with a default entity
var entity = entities.length > 0 ? entities[0] : { udi: udi, name: "" };
entityCache.push(entity);
entityCache.push(entity);
isEntityLookupLoading = false;
isEntityLookupLoading = false;
return entity;
});
}
broadcastEntityCacheUpdated(scope, entity);
return null;
}
return entity;
});
}
return null;
}
}
});
+211 -39
View File
@@ -1,6 +1,183 @@
angular.module('umbraco.services').factory('archetypeLabelService', function (archetypeCacheService) {
angular.module('umbraco.services').factory('archetypeLabelService', function (archetypeCacheService, $q, $injector) {
//private
/**
* This will repeatedly wait for all promises in an array of promises to resolve, and it allows
* for promises to be added to the array (i.e., if you add more promises, those added promises
* will also be resolved too).
* @param promises The array of promises.
* @returns {*} The promise that will resolve once all promises in the array resolve.
*/
function repeatedlyWaitForPromises(promises) {
// Remember the original number of promises being resolved.
var originalLength = promises.length;
return $q.all(promises).then(function () {
// If there are new promises, resolve those too.
if (promises.length > originalLength) {
promises = promises.slice(originalLength);
return repeatedlyWaitForPromises(promises);
}
});
}
/**
* Processes a value to be used in a fieldset label. Since it might be a promise or a function, the
* value is repeatedly processed until it becomes a string.
* @param labelValue The value to be used in the fieldset label.
* @param promises The collection of promises to add any promises to.
* @param match The current matched substring object in a label template.
*/
function processLabelValue(labelValue, promises, match) {
// Normalize null/undefined values to an empty string.
if(!labelValue) {
labelValue = "";
}
// Check the type of value (may be a string, promise, function, or other).
if (isString(labelValue)) {
// handle collapsing dollar signs in labels (#387)
if (labelValue.indexOf("$$") >= 0) {
labelValue = labelValue.replace(/\$\$/g, "$$$$$$$$");
}
// Set a new value now that it has been processed.
match.value = labelValue;
} else if (isPromise(labelValue)) {
// Remember the promise so we can wait for it to be completed before constructing the
// fieldset label.
promises.push(labelValue);
labelValue.then(function (value) {
// The value will probably be a string, but recursively process it in case it's
// something else.
processLabelValue(value, promises, match);
});
} else if (_.isFunction(labelValue)) {
// Allow for the function to accept injected parameters, and invoke it.
labelValue = $injector.invoke(labelValue);
// Recursively check result (may be a string, promise, or another function (another
// function would be pretty strange, though I see no reason to disallow it).
processLabelValue(labelValue, promises, match);
} else {
// Some other data type (e.g., number, date, object).
match.value = labelValue;
}
}
/**
* Checks if the specified value is of type string.
* @param value The value to check the type of.
* @returns {boolean} True, if the value is a string; otherwise, false.
*/
function isString(value) {
if (value === null) {
return false;
} else if (typeof value === 'string') {
return true;
} else if (value instanceof String) {
return true;
} else {
return false;
}
}
/**
* Checks if the specified value is a JavaScript promise.
* @param value The value that may be a promise.
* @returns {*} True, if the value appears to be a promise; otherwise, false.
*/
function isPromise(value) {
return value && _.isFunction(value.then);
}
/**
* Splits a string value into a collection based on a regular expression.
* @param rgx The regular expression to use to find matches in the string value.
* @param value The string value to split.
* @returns {Array} A collection of objects, each representing a portion of the supplied
* string. Each object will contain the substring value, as well as a property
* indicating whether or not that substring was matched the regular expression.
*/
function splitByRegex(rgx, value) {
// Validate input.
if (!rgx || !value) {
return [];
}
// Variables.
var substring,
splitParts = [],
nextIndex = 0,
index;
// Reset regex so we get all the matches.
rgx.lastIndex = 0;
// Loop through each match until there are no more matches.
var match = rgx.exec(value);
while (match) {
// Extract match index.
index = match.index;
// Is there text between the prior match and this one?
if (nextIndex < index) {
substring = value.substring(nextIndex, index);
splitParts.push({
isMatch: false,
value: substring
});
}
// Remember the end of this match for the next loop iteration.
nextIndex = rgx.lastIndex;
// Store info about this match.
substring = value.substring(index, nextIndex);
splitParts.push({
isMatch: true,
value: substring
});
// Get next match.
match = rgx.exec(value);
}
// The text after the last match.
if (nextIndex < value.length) {
substring = value.substring(nextIndex);
splitParts.push({
isMatch: false,
value: substring
});
}
// Reset regex in case somebody else wants to use it.
rgx.lastIndex = 0;
// Return information about the matches.
return splitParts;
}
function executeFunctionByName(functionName, context) {
var args = Array.prototype.slice.call(arguments).splice(2);
@@ -243,41 +420,34 @@ angular.module('umbraco.services').factory('archetypeLabelService', function (ar
return {
getFieldsetTitle: function(scope, fieldsetConfigModel, fieldsetIndex) {
//console.log(scope.model.config);
if(!fieldsetConfigModel)
return "";
return $q.when("");
var fieldset = scope.model.value.fieldsets[fieldsetIndex];
var fieldsetConfig = scope.getConfigFieldsetByAlias(fieldset.alias);
var template = fieldsetConfigModel.labelTemplate;
var promises = [];
if (template.length < 1)
return fieldsetConfig.label;
return $q.when(fieldsetConfig.label);
var rgx = /({{(.*?)}})*/g;
var results;
var parsedTemplate = template;
var rawMatches = template.match(rgx);
var matches = [];
_.each(rawMatches, function(match){
if(match) {
matches.push(match);
}
});
var rgx = /{{.*?}}/g;
var matches = splitByRegex(rgx, template);
_.each(matches, function (match) {
// Skip over substrings that didn't match the regex (they do not require a transformation).
if (!match.isMatch) {
return;
}
// split the template in case it consists of multiple property aliases and/or functions
var templates = match.replace("{{", '').replace("}}", '').split("|");
var templates = match.value.replace("{{", '').replace("}}", '').split("|");
var templateLabelValue = "";
for(var i = 0; i < templates.length; i++) {
// stop looking for a template label value if a previous template part already yielded a value
if(templateLabelValue != "") {
if(templateLabelValue !== "") {
break;
}
@@ -288,7 +458,7 @@ angular.module('umbraco.services').factory('archetypeLabelService', function (ar
var endParamsIndexOf = template.indexOf(")");
//if passed a function
if(beginParamsIndexOf != -1 && endParamsIndexOf != -1)
if(beginParamsIndexOf !== -1 && endParamsIndexOf !== -1)
{
var functionName = template.substring(0, beginParamsIndexOf);
var propertyAlias = template.substring(beginParamsIndexOf + 1, endParamsIndexOf).split(',')[0];
@@ -297,7 +467,7 @@ angular.module('umbraco.services').factory('archetypeLabelService', function (ar
var beginArgsIndexOf = template.indexOf(',');
if(beginArgsIndexOf != -1) {
if(beginArgsIndexOf !== -1) {
var argsString = template.substring(beginArgsIndexOf + 1, endParamsIndexOf).trim();
@@ -317,7 +487,7 @@ angular.module('umbraco.services').factory('archetypeLabelService', function (ar
//determine the type of editor
var propertyConfig = _.find(fieldsetConfigModel.properties, function(property){
return property.alias == propertyAlias;
return property.alias === propertyAlias;
});
if(propertyConfig) {
@@ -331,29 +501,31 @@ angular.module('umbraco.services').factory('archetypeLabelService', function (ar
if(label) {
templateLabelValue = label;
}
else {
templateLabelValue = templateLabelValue;
}
}
}
else {
return templateLabelValue;
}
}
}
}
if(!templateLabelValue) {
templateLabelValue = "";
}
// handle collapsing dollar signs in labels (#387)
if (templateLabelValue.indexOf("$$") >= 0) {
templateLabelValue = templateLabelValue.replace(/\$\$/g, "$$$$$$$$");
}
parsedTemplate = parsedTemplate.replace(match, templateLabelValue);
// Process the value (i.e., reduce any functions or promises down to strings).
processLabelValue(templateLabelValue, promises, match);
});
// Wait for all of the promises to resolve before constructing the full fieldset label.
return repeatedlyWaitForPromises(promises).then(function () {
// Extract string values and combine them into a single string.
var substrings = _.map(matches, function (value) {
return value.value;
});
var combinedSubstrigs = substrings.join('');
// Return the title.
return combinedSubstrigs;
});
return parsedTemplate;
}
}
});
@@ -12,7 +12,7 @@
<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>
<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> <a class="manual-link" href="https://github.com/kgiszewski/Archetype/blob/master/Information%20Collection%20Disclosure.md" target="_blank">Information Collection Disclosure</a></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>
+2 -2
View File
@@ -4,7 +4,7 @@
<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://github.com/kgiszewski/Archetype/blob/master/Information%20Collection%20Disclosure.md" target="_blank">Information Collection Disclosure</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> |
@@ -62,7 +62,7 @@
<i class="icon icon-navigation handle" ng-show="canSortProperty(fieldset)"></i>
</div>
<div class="archetypePropertyTitle" ng-click="focusProperty(fieldset.properties, property)">
{{property.label}} ({{property.alias}}) - <span>{{getDataTypeNameByGuid(property.dataTypeGuid)}}</span>
{{property.label}}<span ng-if="property.required" class="property-required">*</span> ({{property.alias}}) - <span>{{getDataTypeNameByGuid(property.dataTypeGuid)}}</span>
</div>
<div class="archetypePropertyCollapser" ng-hide="property.collapse && property.label">
<div>
Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

+2 -2
View File
@@ -9,10 +9,10 @@
<projectUrl>http://github.com/kgiszewski/archetype</projectUrl>
<description><![CDATA[Archetype for Umbraco]]></description>
<tags>umbraco</tags>
<iconUrl>http://imulus.github.io/Archetype/images/logo.png</iconUrl>
<iconUrl>http://kgiszewski.github.io/Archetype/images/logo.png</iconUrl>
<licenseUrl><%= licenseUrl %></licenseUrl>
<dependencies>
<dependency id="Archetype.Binaries" version="<%= version %>" />
</dependencies>
</metadata>
</package>
</package>
+2 -2
View File
@@ -9,10 +9,10 @@
<projectUrl>http://github.com/kgiszewski/archetype</projectUrl>
<description><![CDATA[Archetype binaries for Umbraco]]></description>
<tags>umbraco</tags>
<iconUrl>http://imulus.github.io/Archetype/images/logo.png</iconUrl>
<iconUrl>http://kgiszewski.github.io/Archetype/images/logo.png</iconUrl>
<licenseUrl><%= licenseUrl %></licenseUrl>
<dependencies>
<dependency id="UmbracoCms.Core" version="7.2.2" />
</dependencies>
</metadata>
</package>
</package>
+2 -2
View File
@@ -9,10 +9,10 @@
<projectUrl>http://github.com/kgiszewski/archetype</projectUrl>
<description><![CDATA[Archetype Courier extension for Umbraco]]></description>
<tags>umbraco</tags>
<iconUrl>http://imulus.github.io/Archetype/images/logo.png</iconUrl>
<iconUrl>http://kgiszewski.github.io/Archetype/images/logo.png</iconUrl>
<licenseUrl><%= licenseUrl %></licenseUrl>
<dependencies>
<dependency id="Archetype.Binaries" version="<%= version %>" />
</dependencies>
</metadata>
</package>
</package>