Compare commits

..

52 Commits

Author SHA1 Message Date
kgiszewski dc3c1a72a8 Add some null checks 2016-05-03 10:11:13 -04:00
kgiszewski 3a30c7ba40 Force tostring if a value is present 2016-05-02 13:59:58 -04:00
kgiszewski fb305c9d0e Fix label padding in the config 2016-04-28 11:35:05 -04:00
kgiszewski b71564bfb5 Merge branch 'pr/351' 2016-04-26 07:51:50 -04:00
kgiszewski ba8a6cf65c Merge branch 'master' into pr/351 2016-04-26 07:37:33 -04:00
kjac 394572a8fc Yet another stab at fixing it
By tracking the fieldsets that have been expanded (loaded), we can make
sure the submit watchers fire appropriately, even when the fieldsets are
collapsed down again.

Apart from hopefully fixing the publishing issues for collapsed
fieldsets, this also adds a performance gain if the users expand and
collapse the same fieldsets more than once, since the fieldsets now only
load the first time they're expanded (instead of every time).

This also - at least partially - fixes the validation issue #325
introduced by #301
2016-04-23 10:14:56 +02:00
kgiszewski c7114b63f5 Merge branch 'master' of github.com:imulus/Archetype 2016-04-18 11:02:10 -04:00
kgiszewski 9704a8b591 Merge branch 'pr/345' 2016-04-18 11:02:00 -04:00
kjac 0b6af3b4e1 Another stab at fixing publishing for collapsed fieldsets
Make sure we've loaded moment.js before attempting to use it.

Also a small update to styles to accommodate 7.4
2016-04-10 19:23:31 +02:00
kjac 4b874dc5b5 Another stab at fixing publishing for collapsed fieldsets 2016-04-06 20:40:29 +02:00
Kevin Giszewski a081d97546 Update README.md 2016-04-06 09:31:13 -04:00
kjac 6b79a508bb Fix publishing when all fieldsets are collapsed
Because of the lazy loading of property editors, the
submitWatcherOnSubmit method is not necessarily called when an Archetype
is saved. This is indeed the case when all fieldsets are collapsed.
2016-04-04 21:28:19 +02:00
kjac e1f67a738b Merge remote-tracking branch 'refs/remotes/imulus/master' 2016-04-04 20:34:37 +02:00
kgiszewski 4410f1bb81 Bump version to v1.13 2016-04-04 13:08:58 -04:00
kgiszewski 5c2a99987a Fix style so text won't overflow out. 2016-04-04 12:47:39 -04:00
kgiszewski 715a2bf6d5 Fixed missing dialogData from enablePublishing 2016-04-04 12:03:52 -04:00
kjac d9ffb4b097 Merge remote-tracking branch 'refs/remotes/origin/master' into publishing
# Conflicts:
#	app/less/archetype.less
2016-04-03 12:53:30 +02:00
kjac c409922469 Merge remote-tracking branch 'refs/remotes/imulus/master' 2016-04-03 12:43:03 +02:00
kgiszewski 6b40d1e20b Merge branch 'pr/348' 2016-04-02 19:17:51 -04:00
kgiszewski 3e91b1c2c3 Why do I have to keep committing this? 2016-04-02 19:14:30 -04:00
kgiszewski 38eafc0063 Merge branch 'pr/350' 2016-04-02 19:11:43 -04:00
kgiszewski 89aeca9bf0 Add version to json config 2016-04-02 19:11:39 -04:00
kgiszewski 2b6d87d97c Bump version to v1.12.4 2016-04-02 19:10:54 -04:00
kjac 1ca113b455 Fix issue 342 2016-03-31 23:44:52 +02:00
kjac 8228b2dae5 Scope icon styles to fieldset controls only 2016-03-31 08:17:43 +02:00
kjac 22f24ec882 Merge remote-tracking branch 'refs/remotes/imulus/master' 2016-03-31 08:02:33 +02:00
kjac e33eb863e6 #326 - support tags (and other built-in datatypes) 2016-03-29 16:01:14 +02:00
Kevin Giszewski 6bcf291c99 Update README.md 2016-03-29 09:41:05 -04:00
kjac a424a7e4f3 Revert addDefaultProperties to master and adjust addCustomProperties accordingly 2016-03-23 08:38:07 +01:00
kjac 75fa2bb1bb Fix formatting 2016-03-22 19:58:48 +01:00
kjac 5585244d32 Merge remote-tracking branch 'refs/remotes/origin/master' into publishing 2016-03-22 19:40:59 +01:00
kjac 41fa8fa40d Merge remote-tracking branch 'refs/remotes/imulus/master' 2016-03-22 19:38:10 +01:00
kjac 9336f4508a Handle publishing in UTC 2016-03-22 19:35:40 +01:00
kgiszewski f9e5012b4e Merge branch 'master' into pr/338 2016-03-22 11:59:44 -04:00
kgiszewski 61d215e16c Merge branch 'master' of github.com:imulus/Archetype 2016-03-22 11:53:21 -04:00
kgiszewski e1e34be10d Merge branch 'master' into pr/311 2016-03-22 11:36:37 -04:00
Kevin Giszewski 796be76d94 Merge pull request #339 from imulus/feature/74-style
Update style for 7.4
2016-03-21 14:57:49 -04:00
kjac 8f7024c32a Comments 2016-03-20 14:05:31 +01:00
kjac dea307ff8e Filter out fieldsets based on publishing 2016-03-20 13:51:14 +01:00
kjac d69a10de48 Clean up 2016-03-20 13:37:34 +01:00
kjac b93df7a4c0 Add custom properties to new fieldsets 2016-03-20 13:28:22 +01:00
kjac 48dbdebec5 Create expandable settings group and fix icon activation 2016-03-20 13:21:43 +01:00
kjac 65837fa74c Undo a few things 2016-03-20 12:08:23 +01:00
kjac 29a73336e3 Merge remote-tracking branch 'refs/remotes/imulus/master' into publishing 2016-03-20 12:04:52 +01:00
kjac 0dfa8edc95 Merge remote-tracking branch 'refs/remotes/imulus/master' 2016-03-20 12:03:54 +01:00
kjac 0584c4eda5 Prototype (work in progress) 2016-03-20 12:02:21 +01:00
kgiszewski 4eb901fbba Fix #318 2016-03-15 10:04:59 -04:00
Greg Fyans b7875dd850 Added native label for RJP.MultiUrlPicker data type 2016-03-15 10:28:14 +00:00
Kevin Giszewski 19989e556e Update README.md 2016-03-10 12:10:30 -05:00
Kevin Giszewski 9250d66953 Update README.md 2016-03-10 12:07:53 -05:00
kjac b36f83eaf6 Merge remote-tracking branch 'refs/remotes/imulus/master' 2016-03-05 21:14:47 +01:00
kgiszewski e640a9b4f4 This depends on a core PR. 2015-12-14 09:53:01 -05:00
22 changed files with 400 additions and 86 deletions
+9 -1
View File
@@ -7,12 +7,20 @@ Archetype
## 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>.
## Official Docs ##
https://github.com/kgiszewski/ArchetypeManual
##News and Updates##
Follow us on Twitter https://twitter.com/ArchetypeKit
##Core Team##
* Kevin Giszewski (founder/project lead) - University of Notre Dame - 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/
## 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.
@@ -23,6 +23,12 @@ namespace Archetype.Models
[JsonProperty("id")]
public Guid Id { get; set; }
[JsonProperty("releaseDate")]
public DateTime? ReleaseDate { get; set; }
[JsonProperty("expireDate")]
public DateTime? ExpireDate { get; set; }
/// <summary>
/// Initializes a new instance of the <see cref="ArchetypeFieldsetModel"/> class.
/// </summary>
@@ -129,6 +135,17 @@ namespace Archetype.Models
return Properties.FirstOrDefault(p => p.Alias.InvariantEquals(propertyAlias));
}
/// <summary>
/// Is this fieldset disabled, either explicitly or by other means?
/// </summary>
/// <returns>true if this fieldset is disabled, false otherwise</returns>
internal bool IsDisabled()
{
return Disabled
|| (ReleaseDate.HasValue && ReleaseDate > DateTime.UtcNow)
|| (ExpireDate.HasValue && DateTime.UtcNow > ExpireDate);
}
#endregion
}
}
@@ -32,7 +32,7 @@ namespace Archetype.Models
/// </returns>
public IEnumerator<ArchetypeFieldsetModel> GetEnumerator()
{
return this.Fieldsets.Where(f => f.Disabled == false).GetEnumerator();
return this.Fieldsets.Where(f => f.IsDisabled() == false).GetEnumerator();
}
//possibly obsolete?
@@ -31,6 +31,9 @@ namespace Archetype.Models
[JsonProperty("enableDisabling")]
public bool EnableDisabling { get; set; }
[JsonProperty("enablePublishing")]
public bool EnablePublishing { get; set; }
[JsonProperty("hideFieldsetControls")]
public bool HideFieldsetControls { get; set; }
@@ -98,7 +98,7 @@ namespace Archetype.Models
public bool IsDraft
{
get { return _fieldset.Disabled; }
get { return _fieldset.IsDisabled(); }
}
public PublishedItemType ItemType
@@ -19,7 +19,7 @@ namespace Archetype.Models
var count = archetype.Fieldsets.Count();
_items = archetype.Fieldsets
.Where(x => x.Disabled == false)
.Where(x => x.IsDisabled() == false)
.Select(x => new ArchetypePublishedContent(x, this))
.ToArray();
}
@@ -1,4 +1,4 @@
using System.Reflection;
[assembly: AssemblyVersion("1.12.3")]
[assembly: AssemblyFileVersion("1.12.3")]
[assembly: AssemblyVersion("1.13.0")]
[assembly: AssemblyFileVersion("1.13.0")]
@@ -95,7 +95,7 @@ namespace Archetype.PropertyEditors
if(propDef == null || propDef.DataTypeGuid == null) continue;
var dtd = ArchetypeHelper.Instance.GetDataTypeByGuid(Guid.Parse(propDef.DataTypeGuid));
var propType = new PropertyType(dtd) {Alias = propDef.Alias};
var prop = new Property(propType, propDef.Value);
var prop = new Property(propType, (propDef.Value != null) ? propDef.Value.ToString() : null);
var propEditor = PropertyEditorResolver.Current.GetByAlias(dtd.PropertyEditorAlias);
propDef.Value = propEditor.ValueEditor.ConvertDbToString(prop, propType, dataTypeService);
}
@@ -135,7 +135,7 @@ namespace Archetype.PropertyEditors
{
var dtd = ArchetypeHelper.Instance.GetDataTypeByGuid(Guid.Parse(propDef.DataTypeGuid));
var propType = new PropertyType(dtd) {Alias = propDef.Alias};
var prop = new Property(propType, propDef.Value);
var prop = new Property(propType, (propDef.Value != null) ? propDef.Value.ToString() : null);
var propEditor = PropertyEditorResolver.Current.GetByAlias(dtd.PropertyEditorAlias);
propDef.Value = propEditor.ValueEditor.ConvertDbToEditor(prop, propType, dataTypeService);
}
@@ -175,6 +175,10 @@ namespace Archetype.PropertyEditors
var uploadedFiles = editorValue.AdditionalData.ContainsKey("files") ? editorValue.AdditionalData["files"] as IEnumerable<ContentItemFile> : null;
foreach (var fieldset in archetype.Fieldsets)
{
// make sure the publishing dates are in UTC
fieldset.ReleaseDate = EnsureUtcDate(fieldset.ReleaseDate);
fieldset.ExpireDate = EnsureUtcDate(fieldset.ExpireDate);
// assign an id to the fieldset if it has none (e.g. newly created fieldset)
fieldset.Id = fieldset.Id == Guid.Empty ? Guid.NewGuid() : fieldset.Id;
// find the corresponding fieldset in the current Archetype value (if any)
@@ -211,7 +215,7 @@ namespace Archetype.PropertyEditors
var propData = new ContentPropertyData(propDef.Value, preValues, additionalData);
var propEditor = PropertyEditorResolver.Current.GetByAlias(dtd.PropertyEditorAlias);
// make sure to send the current property value (if any) to the PE ValueEditor
propDef.Value = propEditor.ValueEditor.ConvertEditorToDb(propData, currentProperty != null ? currentProperty.Value : null);
propDef.Value = propEditor.ValueEditor.ConvertEditorToDb(propData, currentProperty != null ? (currentProperty.Value != null) ? currentProperty.Value.ToString() : null : null);
}
catch (Exception ex)
{
@@ -237,6 +241,20 @@ namespace Archetype.PropertyEditors
? new ArchetypePropertyEditor()
: (PropertyEditor) new TextboxPropertyEditor();
}
/// <summary>
/// Ensures that a datetime is in UTC
/// </summary>
/// <param name="dateTime">The datetime</param>
/// <returns>The datetime in UTC (or null if it's not set)</returns>
private DateTime? EnsureUtcDate(DateTime? dateTime)
{
if(dateTime.HasValue == false || dateTime.Value.Kind == DateTimeKind.Utc)
{
return dateTime;
}
return new DateTime(dateTime.Value.Ticks, DateTimeKind.Utc);
}
}
#endregion
+7 -3
View File
@@ -6,7 +6,7 @@ angular.module("umbraco").controller("Imulus.ArchetypeConfigController", functio
//define empty items
var newPropertyModel = '{"alias": "", "remove": false, "collapse": false, "label": "", "helpText": "", "dataTypeGuid": "0cc0eba1-9960-42c9-bf9b-60e150b429ae", "value": ""}';
var newFieldsetModel = '{"alias": "", "remove": false, "collapse": false, "labelTemplate": "", "icon": "", "label": "", "properties": [' + newPropertyModel + '], "group": null}';
var defaultFieldsetConfigModel = JSON.parse('{"showAdvancedOptions": false, "startWithAddButton": false, "hideFieldsetToolbar": false, "enableMultipleFieldsets": false, "hideFieldsetControls": false, "hidePropertyLabel": false, "maxFieldsets": null, "enableCollapsing": true, "enableCloning": false, "enableDisabling": true, "enableDeepDatatypeRequests": false, "fieldsets": [' + newFieldsetModel + '], "fieldsetGroups": []}');
var defaultFieldsetConfigModel = JSON.parse('{"showAdvancedOptions": false, "startWithAddButton": false, "hideFieldsetToolbar": false, "enableMultipleFieldsets": false, "hideFieldsetControls": false, "hidePropertyLabel": false, "maxFieldsets": null, "enableCollapsing": true, "enableCloning": false, "enableDisabling": true, "enableDeepDatatypeRequests": false, "enablePublishing": false, "fieldsets": [' + newFieldsetModel + '], "fieldsetGroups": []}');
//ini the model
$scope.model.value = $scope.model.value || defaultFieldsetConfigModel;
@@ -313,9 +313,13 @@ angular.module("umbraco").controller("Imulus.ArchetypeConfigController", functio
dialogService.open({
template: template,
show: true,
callback: function(data) {
callback: function (data) {
// replace the entire render model if it was changed (in developer options)
if (data.model && data.modelChanged) {
$scope.archetypeConfigRenderModel = data.model;
}
},
dialogData: $scope.archetypeConfigRenderModel
dialogData: { model: $scope.archetypeConfigRenderModel }
});
}
+3 -5
View File
@@ -1,17 +1,15 @@
angular.module('umbraco').controller('ArchetypeConfigOptionsController', function ($scope) {
$scope.model = $scope.dialogData;
//handles a fieldset group add
$scope.addFieldsetGroup = function () {
$scope.model.fieldsetGroups.push({ name: "" });
$scope.dialogData.model.fieldsetGroups.push({ name: "" });
}
//handles a fieldset group removal
$scope.removeFieldsetGroup = function ($index) {
$scope.model.fieldsetGroups.splice($index, 1);
$scope.dialogData.model.fieldsetGroups.splice($index, 1);
}
$scope.apply = function(index) {
$scope.submit($scope.model);
$scope.submit($scope.dialogData);
}
});
+126 -2
View File
@@ -148,6 +148,8 @@ angular.module("umbraco").controller("Imulus.ArchetypeController", function ($sc
}
}
addCustomPropertiesToFieldset(newFieldset);
$scope.setDirty();
$scope.$broadcast("archetypeAddFieldset", {index: $index, visible: countVisible()});
@@ -239,6 +241,66 @@ angular.module("umbraco").controller("Imulus.ArchetypeController", function ($sc
///&& $scope.model.config.fieldsets.length == 1;
}
//helper that returns if an item can use publishing
$scope.canPublish = function () {
return $scope.model.config.enablePublishing;
}
//helper that returns if the "misc fieldset configuration" section should be visible
$scope.canConfigure = function () {
// currently the only thing in the "misc fieldset configuration" section is the publishing setup
return $scope.canPublish();
}
$scope.showDisableIcon = function (fieldset) {
if ($scope.canDisable() == false) {
return false;
}
// disabled state takes precedence over publishing
if (fieldset.disabled) {
return true;
}
return $scope.isDisabledByPublishing(fieldset) == false;
}
$scope.showPublishingIcon = function (fieldset) {
if ($scope.canPublish() == false) {
return false;
}
if ($scope.canDisable()) {
// disabled state takes precedence over publishing
if (fieldset.disabled) {
return false;
}
return $scope.isDisabledByPublishing(fieldset);
}
return true;
}
$scope.isDisabledByPublishing = function(fieldset) {
if ($scope.canPublish() === false) {
return false;
}
// NOTE: all comparison is done in local datetime
// - that's fine because the selected local datetimes will be converted to UTC datetimes when submitted
if (fieldset.expireDateModel && fieldset.expireDateModel.value && (moment() > moment(fieldset.expireDateModel.value))) {
// an expired release affects the fieldset
return true;
}
if (fieldset.releaseDateModel && fieldset.releaseDateModel.value && (moment(fieldset.releaseDateModel.value) > moment())) {
// a pending release affects the fieldset
return true;
}
return false;
}
$scope.isDisabled = function(fieldset) {
if (fieldset.disabled) {
return true;
}
return $scope.isDisabledByPublishing(fieldset);
}
//helper, ini the render model from the server (model.value)
function init() {
$scope.model.value = removeNulls($scope.model.value);
@@ -254,6 +316,30 @@ angular.module("umbraco").controller("Imulus.ArchetypeController", function ($sc
});
}
function addCustomProperties(fieldsets) {
// make sure we have loaded moment.js before using it
assetsService.loadJs("lib/moment/moment-with-locales.js").then(function() {
_.each(fieldsets, function(fieldset) {
addCustomPropertiesToFieldset(fieldset);
});
});
}
function addCustomPropertiesToFieldset(fieldset) {
// create models for publish configuration (utilizing the built-in datepicker data type)
// NOTE: all datetimes must be converted from UTC to local
fieldset.releaseDateModel = {
alias: _.uniqueId("archetypeReleaseDate_"),
view: "datepicker",
value: fromUtc(fieldset.releaseDate)
};
fieldset.expireDateModel = {
alias: _.uniqueId("archetypeExpireDate_"),
view: "datepicker",
value: fromUtc(fieldset.expireDate)
};
}
//helper to get the correct fieldset from config
$scope.getConfigFieldsetByAlias = function(alias) {
return _.find($scope.model.config.fieldsets, function(fieldset){
@@ -278,6 +364,12 @@ angular.module("umbraco").controller("Imulus.ArchetypeController", function ($sc
return fieldset.collapse;
}
// added to track loaded fieldsets
$scope.loadedFieldsets = [];
$scope.isLoaded = function (fieldset) {
return $scope.loadedFieldsets.indexOf(fieldset) >= 0;
}
//helper for expanding/collapsing fieldsets
$scope.focusFieldset = function(fieldset){
fixDisableSelection();
@@ -300,12 +392,14 @@ angular.module("umbraco").controller("Imulus.ArchetypeController", function ($sc
if(!fieldset && $scope.model.value.fieldsets.length == 1)
{
$scope.model.value.fieldsets[0].collapse = false;
$scope.loadedFieldsets.push($scope.model.value.fieldsets[0]);
return;
}
if(iniState && fieldset)
{
fieldset.collapse = !iniState;
$scope.loadedFieldsets.push(fieldset);
}
}
@@ -361,6 +455,12 @@ angular.module("umbraco").controller("Imulus.ArchetypeController", function ($sc
// reset submit watcher counter on save
$scope.activeSubmitWatcher = 0;
// init loaded fieldsets tracking
$scope.loadedFieldsets = _.where($scope.model.value.fieldsets, { collapse: false });
// create properties needed for the backoffice to work (data that is not serialized to DB)
addCustomProperties($scope.model.value.fieldsets);
});
//helper to count what is visible
@@ -470,7 +570,31 @@ angular.module("umbraco").controller("Imulus.ArchetypeController", function ($sc
$scope.activeSubmitWatcher++;
return $scope.activeSubmitWatcher;
}
$scope.submitWatcherOnSubmit = function () {
$scope.$broadcast("archetypeFormSubmitting");
$scope.submitWatcherOnSubmit = function (args) {
$scope.$broadcast("archetypeFormSubmitting", args);
}
// we'll use our own "archetypeFormSubmitting" event to save custom properties, as at least some
// of the editors store their values back to the model on the core "formSubmitting" event
$scope.$on("archetypeFormSubmitting", function (ev, args) {
_.each($scope.model.value.fieldsets, function (fieldset) {
// extract the publish configuration from the fieldsets (and convert local datetimes to UTC)
fieldset.releaseDate = toUtc(fieldset.releaseDateModel.value);
fieldset.expireDate = toUtc(fieldset.expireDateModel.value);
});
});
function toUtc(date) {
if (!date) {
return null;
}
return moment(date, "YYYY-MM-DD HH:mm:ss").utc().toDate();
}
function fromUtc(date) {
if (!date) {
return null;
}
return moment(moment.utc(date).toDate()).format("YYYY-MM-DD HH:mm:ss")
}
});
+12 -8
View File
@@ -93,9 +93,11 @@ angular.module("umbraco.directives").directive('archetypeProperty', function ($c
}
}
//upload, colorpicker datatype hack
if(view.indexOf('fileupload.html') != -1 || view.indexOf('colorpicker.html') != -1) {
//hacks for various built-in datatyps including upload, colorpicker and tags
if (!scope.propertyForm) {
scope.propertyForm = scope.form;
}
if (!scope.model.validation) {
scope.model.validation = {};
scope.model.validation.mandatory = 0;
}
@@ -115,14 +117,16 @@ angular.module("umbraco.directives").directive('archetypeProperty', function ($c
});
scope.$on('archetypeFormSubmitting', function (ev, args) {
// validate all fieldset properties
_.each(scope.fieldset.properties, function (property) {
archetypeService.validateProperty(scope.fieldset, property, configFieldsetModel);
});
if(args.action !== 'save') {
// validate all fieldset properties
_.each(scope.fieldset.properties, function (property) {
archetypeService.validateProperty(scope.fieldset, property, configFieldsetModel);
});
var validationKey = "validation-f" + scope.fieldsetIndex;
var validationKey = "validation-f" + scope.fieldsetIndex;
ngModelCtrl.$setValidity(validationKey, scope.fieldset.isValid);
ngModelCtrl.$setValidity(validationKey, scope.fieldset.isValid);
}
// did the value change (if it did, it most likely did so during the "formSubmitting" event)
var property = archetypeService.getFieldsetProperty(scope);
+4 -3
View File
@@ -1,11 +1,12 @@
angular.module("umbraco.directives").directive('archetypeSubmitWatcher', function ($rootScope) {
var linker = function (scope, element, attrs, ngModelCtrl) {
// call the load callback on scope to obtain the ID of this submit watcher
var id = scope.loadCallback();
var id = scope.loadCallback ? scope.loadCallback() : 0;
scope.$on("formSubmitting", function (ev, args) {
// on the "formSubmitting" event, call the submit callback on scope to notify the Archetype controller to do it's magic
if (id == scope.activeSubmitWatcher) {
scope.submitCallback();
scope.submitCallback(args);
}
});
}
@@ -21,4 +22,4 @@ angular.module("umbraco.directives").directive('archetypeSubmitWatcher', functio
activeSubmitWatcher: '='
}
}
});
});
+8 -1
View File
@@ -44,5 +44,12 @@
"fieldsetGroups":"Fieldset-grupper",
"fieldsetGroupsDescription":"Hvis du har mange fieldsets, skal du måske overveje at gruppere dem i fieldset-vælgeren. Når du først har defineret dine grupper her, vil en gruppe-vælger dukke op i fieldset-editoren, og du kan derefter vælge grupper for alle dine fieldsets.",
"fieldsetGroupName":"Navn",
"addFieldsetGroup":"Tilføj gruppe"
"addFieldsetGroup":"Tilføj gruppe",
"enablePublishing": "Aktivér fieldset-publicering?",
"enablePublishingDescription": "Tillad automatisk udgivelse og udløb for fieldsets",
"publish": "Publicering",
"publishHelpText": "Konfigurér udgivelses- og udløbsdato for dette element",
"publishReleaseDate": "Udgivelsesdato",
"publishExpireDate": "Udløbsdato",
"settings": "Indstillinger"
}
+8 -1
View File
@@ -44,5 +44,12 @@
"fieldsetGroups":"Fieldset-grupper",
"fieldsetGroupsDescription":"Hvis du har mange fieldsets, skal du måske overveje at gruppere dem i fieldset-vælgeren. Når du først har defineret dine grupper her, vil en gruppe-vælger dukke op i fieldset-editoren, og du kan derefter vælge grupper for alle dine fieldsets.",
"fieldsetGroupName":"Navn",
"addFieldsetGroup":"Tilføj gruppe"
"addFieldsetGroup":"Tilføj gruppe",
"enablePublishing": "Aktivér fieldset-publicering?",
"enablePublishingDescription": "Tillad automatisk udgivelse og udløb for fieldsets",
"publish": "Publicering",
"publishHelpText": "Konfigurér udgivelses- og udløbsdato for dette element",
"publishReleaseDate": "Udgivelsesdato",
"publishExpireDate": "Udløbsdato",
"settings": "Indstillinger"
}
+98 -28
View File
@@ -33,18 +33,6 @@
margin-left: 0;
}
.icon {
color: #ddd;
padding: 2px;
font-size: 16px;
&:hover {
color: #333;
}
&.icon-delete:hover {
color: #b94a48;
}
}
.fieldsetIcon {
float: left;
padding: 0 4px 0 0;
@@ -52,6 +40,17 @@
vertical-align: text-bottom;
}
.caret {
margin: 8px 1px 0 2px;
&.caret-right {
border-bottom: 4px solid transparent;
border-top: 4px solid transparent;
border-left: 4px solid #ddd;
content: "";
margin-top: 6px;
}
}
fieldset {
border-bottom: 1px dashed #dddddd;
padding: 0;
@@ -76,6 +75,19 @@
}
}
.publishOptions {
.publishDate {
display: inline-block;
vertical-align: top;
margin-right: 20px;
label {
padding: 0 !important;
margin: 0 !important;
}
}
}
}
.archetypeFieldsetLabel {
@@ -127,16 +139,7 @@
}
.caret {
margin: 8px 1px 0 2px;
position: absolute;
&.caret-right {
border-bottom: 4px solid transparent;
border-top: 4px solid transparent;
border-left: 4px solid #ddd;
content: "";
margin-top: 6px;
}
}
label {
@@ -163,6 +166,30 @@
position: absolute;
right: 15px;
top: 0;
.icon {
color: #ddd;
padding: 2px;
font-size: 16px;
&:hover {
color: #333;
}
&.icon-delete:hover {
color: #b94a48;
}
&.icon-disabled {
cursor: default;
&:hover {
color: #ddd;
}
}
&.icon-active {
color: #333;
&:hover {
color: #333;
}
}
}
}
&:hover {
@@ -284,6 +311,34 @@
}
}
}
.settingsWrapper {
&:hover {
caret {
background-color: #333;
}
}
.settingsHeader {
label {
display: inline-block;
}
&:hover {
cursor: pointer;
label {
text-decoration: underline;
}
.caret-right {
border-left-color: #333;
}
}
}
.settings {
padding: 14px;
background-color: #f8f8f8;
overflow: hidden;
}
}
}
.archetypeEditor, .archetypeConfig {
@@ -339,6 +394,7 @@
label {
width: 120px;
padding-left: 0;
}
.archetypeEditorControls {
@@ -362,8 +418,10 @@
.archetypeFieldsetOption {
margin-bottom: 15px;
margin-right: 15px;
input[type=text]{
max-width: 300px;
max-width: 100%;
width: 100%;
}
}
@@ -374,15 +432,20 @@
height: 130px;
}
.archetypeOptions label{
width: 400px;
.archetypeOptions {
.btn {
margin-bottom: 5px;
}
label{
width: 400px;
}
}
.archetypePropertiesWrapper {
border: 1px solid #ddd;
padding: 8px;
margin: -40px 10px 10px 140px;
max-width: 475px;
ul {
padding: 0;
@@ -395,12 +458,13 @@
background-color: #eee;
input[type=text] {
max-width: 190px;
width: auto;
max-width: 100%;
width: 100%;
}
select {
max-width: 160px;
max-width: 100%;
width: 100%;
}
}
@@ -413,6 +477,10 @@
label {
width: 100%;
}
input[type=text] {
width: 100%;
}
input[type=checkbox] {
margin-top: 0;
@@ -460,8 +528,10 @@
.archetypePropertyCollapser {
margin-top: 10px;
div {
margin-bottom: 10px;
margin-right: 15px;
}
}
+14
View File
@@ -31,6 +31,8 @@ angular.module('umbraco.services').factory('archetypeLabelService', function (ar
return coreMediaPicker(value, scope, datatype);
case "Umbraco.DropDown":
return coreDropdown(value, scope, datatype);
case "RJP.MultiUrlPicker":
return rjpMultiUrlPicker(value, scope, {});
default:
return "";
}
@@ -149,6 +151,18 @@ angular.module('umbraco.services').factory('archetypeLabelService', function (ar
return strippedText.substring(0, args.contentLength) + suffix;
}
function rjpMultiUrlPicker(values, scope, args) {
var names = [];
_.each(values, function (value) {
if (value.name) {
names.push(value.name);
}
});
return names.join(", ");
}
return {
getFieldsetTitle: function(scope, fieldsetConfigModel, fieldsetIndex) {
@@ -3,18 +3,18 @@
<div class="umb-panel-body no-header with-footer umb-scrollable archetypeAdvancedOptions">
<h3><archetype-localize key="developer_options">Developer Options</archetype-localize></h3>
<div>
<label for="archetypeAdvancedOptionsDeepDatatypeRequest"><input type="checkbox" id="archetypeAdvancedOptionsDeepDatatypeRequest" ng-model="model.enableDeepDatatypeRequests"/><archetype-localize key="deepDatatypeRequest">Enable Deep Datatype Requests?</archetype-localize><small><archetype-localize key="deepDatatypeRequestDescription">Allows for easier datatype interception at the cost of caching performance.</archetype-localize></small></label>
<label for="archetypeAdvancedOptionsDeepDatatypeRequest"><input type="checkbox" id="archetypeAdvancedOptionsDeepDatatypeRequest" ng-model="dialogData.model.enableDeepDatatypeRequests" /><archetype-localize key="deepDatatypeRequest">Enable Deep Datatype Requests?</archetype-localize><small><archetype-localize key="deepDatatypeRequestDescription">Allows for easier datatype interception at the cost of caching performance.</archetype-localize></small></label>
</div>
<div>
<label for="archetypeAdvancedOptionsDeveloperMode"><input type="checkbox" id="archetypeAdvancedOptionsDeveloperMode" ng-model="model.developerMode"/><archetype-localize key="toggleDeveloperMode">Enable Developer Mode?</archetype-localize><small><archetype-localize key="toggleDeveloperModeDescription">Toggle Developer Mode</archetype-localize></small></label>
<label for="archetypeAdvancedOptionsDeveloperMode"><input type="checkbox" id="archetypeAdvancedOptionsDeveloperMode" ng-model="dialogData.model.developerMode" /><archetype-localize key="toggleDeveloperMode">Enable Developer Mode?</archetype-localize><small><archetype-localize key="toggleDeveloperModeDescription">Toggle Developer Mode</archetype-localize></small></label>
</div>
<div>
<label for="archetypeOverrideDefaultConverter"><input type="checkbox" id="archetypeOverrideDefaultConverter" ng-model="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>
<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>
<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="model"></textarea>
<textarea class="archetypeDeveloperModel" id="archetypeAdvancedOptionsConfigModel" ng-model="dialogData.model" ng-change="dialogData.modelChanged = true"></textarea>
</div>
</div>
<div class="umb-panel-footer">
+15 -12
View File
@@ -3,46 +3,49 @@
<div class="umb-panel-body no-header with-footer umb-scrollable archetypeAdvancedOptions">
<h3><archetype-localize key="global_fieldset_options">Global Fieldset Options</archetype-localize></h3>
<div>
<label for="archetypeAdvancedOptionsStartWithAddButton"><input type="checkbox" id="archetypeAdvancedOptionsStartWithAddButton" ng-model="model.startWithAddButton"/><archetype-localize key="startWithAddButton">Start With Add Button?</archetype-localize><small><archetype-localize key="startWithAddButtonDescription">Empty property shows an add button instead of providing a default fieldset.</archetype-localize></small></label>
<label for="archetypeAdvancedOptionsStartWithAddButton"><input type="checkbox" id="archetypeAdvancedOptionsStartWithAddButton" ng-model="dialogData.model.startWithAddButton"/><archetype-localize key="startWithAddButton">Start With Add Button?</archetype-localize><small><archetype-localize key="startWithAddButtonDescription">Empty property shows an add button instead of providing a default fieldset.</archetype-localize></small></label>
</div>
<div>
<label for="archetypeAdvancedOptionsHideLabels"><input type="checkbox" id="archetypeAdvancedOptionsHideLabels" ng-model="model.hidePropertyLabels"/><archetype-localize key="hidePropertyLabels">Hide Property Labels?</archetype-localize><small><archetype-localize key="hidePropertyLabelsDescription">Hides the property labels.</archetype-localize></small></label>
<label for="archetypeAdvancedOptionsHideLabels"><input type="checkbox" id="archetypeAdvancedOptionsHideLabels" ng-model="dialogData.model.hidePropertyLabels"/><archetype-localize key="hidePropertyLabels">Hide Property Labels?</archetype-localize><small><archetype-localize key="hidePropertyLabelsDescription">Hides the property labels.</archetype-localize></small></label>
</div>
<div>
<label for="archetypeAdvancedOptionsCollapsing"><input type="checkbox" id="archetypeAdvancedOptionsCollapsing" ng-model="model.enableCollapsing"/><archetype-localize key="enableCollapsing">Enable Collapsing?</archetype-localize><small><archetype-localize key="enableCollapsingDescription">Enable fieldset collapsing.</archetype-localize></small></label>
<label for="archetypeAdvancedOptionsCollapsing"><input type="checkbox" id="archetypeAdvancedOptionsCollapsing" ng-model="dialogData.model.enableCollapsing"/><archetype-localize key="enableCollapsing">Enable Collapsing?</archetype-localize><small><archetype-localize key="enableCollapsingDescription">Enable fieldset collapsing.</archetype-localize></small></label>
</div>
<div>
<label for="archetypeAdvancedOptionsMaxFieldsets"><archetype-localize key="maxFieldsets">Max Fieldsets</archetype-localize><small><archetype-localize key="maxFieldsetsDescription">How many Fieldsets are allowed? Entering '1' will disable the controls. Default is unlimited.</archetype-localize></small></label>
<input type="number" id="archetypeAdvancedOptionsMaxFieldsets" class="archetypeMaxFieldsets" ng-model="model.maxFieldsets"/>
<input type="number" id="archetypeAdvancedOptionsMaxFieldsets" class="archetypeMaxFieldsets" ng-model="dialogData.model.maxFieldsets"/>
</div>
<h4><archetype-localize key="fieldsetControls">Fieldset controls</archetype-localize></h4>
<div>
<label for="archetypeAdvancedOptionsHideControls"><input type="checkbox" id="archetypeAdvancedOptionsHideControls" ng-model="model.hideFieldsetControls"/><archetype-localize key="hideFieldsetControls">Hide Fieldset Controls?</archetype-localize><small><archetype-localize key="hideFieldsetControlsDescription">Hides the fieldset add/remove/sort controls.</archetype-localize></small></label>
<label for="archetypeAdvancedOptionsHideControls"><input type="checkbox" id="archetypeAdvancedOptionsHideControls" ng-model="dialogData.model.hideFieldsetControls"/><archetype-localize key="hideFieldsetControls">Hide Fieldset Controls?</archetype-localize><small><archetype-localize key="hideFieldsetControlsDescription">Hides the fieldset add/remove/sort controls.</archetype-localize></small></label>
</div>
<div>
<label for="archetypeAdvancedOptionsCloning"><input type="checkbox" id="archetypeAdvancedOptionsCloning" ng-model="model.enableCloning"/><archetype-localize key="enableCloning">Enable Cloning?</archetype-localize><small><archetype-localize key="enableCloningDescription">Enable fieldset cloning.</archetype-localize></small></label>
<label for="archetypeAdvancedOptionsCloning"><input type="checkbox" id="archetypeAdvancedOptionsCloning" ng-model="dialogData.model.enableCloning"/><archetype-localize key="enableCloning">Enable Cloning?</archetype-localize><small><archetype-localize key="enableCloningDescription">Enable fieldset cloning.</archetype-localize></small></label>
</div>
<div>
<label for="archetypeAdvancedOptionsDisabling"><input type="checkbox" id="archetypeAdvancedOptionsDisabling" ng-model="model.enableDisabling" /><archetype-localize key="enableDisabling">Enable Fieldset Disabling?</archetype-localize><small><archetype-localize key="enableDisablingDescription">Allows fieldsets to be individually enabled/disabled.</archetype-localize></small></label>
<label for="archetypeAdvancedOptionsDisabling"><input type="checkbox" id="archetypeAdvancedOptionsDisabling" ng-model="dialogData.model.enableDisabling" /><archetype-localize key="enableDisabling">Enable Fieldset Disabling?</archetype-localize><small><archetype-localize key="enableDisablingDescription">Allows fieldsets to be individually enabled/disabled.</archetype-localize></small></label>
</div>
<div>
<label for="archetypeAdvancedOptionsPublishing"><input type="checkbox" id="archetypeAdvancedOptionsPublishing" ng-model="dialogData.model.enablePublishing" /><archetype-localize key="enablePublishing">Enable Fieldset Publishing?</archetype-localize><small><archetype-localize key="enablePublishingDescription">Allows fieldsets to be automatically published and/or unpublished.</archetype-localize></small></label>
</div>
<h4><archetype-localize key="multipleFieldsets">Multiple fieldsets</archetype-localize></h4>
<div>
<label for="archetypeAdvancedOptionsMultipleFieldsets"><input type="checkbox" id="archetypeAdvancedOptionsMultipleFieldsets" ng-model="model.enableMultipleFieldsets"/><archetype-localize key="enableMultipleFieldsets">Enable Multiple Fieldsets?</archetype-localize><small><archetype-localize key="enableMultipleFieldsetsDescription">Allows multiple types of fieldsets within this archetype.</archetype-localize></small></label>
<label for="archetypeAdvancedOptionsMultipleFieldsets"><input type="checkbox" id="archetypeAdvancedOptionsMultipleFieldsets" ng-model="dialogData.model.enableMultipleFieldsets"/><archetype-localize key="enableMultipleFieldsets">Enable Multiple Fieldsets?</archetype-localize><small><archetype-localize key="enableMultipleFieldsetsDescription">Allows multiple types of fieldsets within this archetype.</archetype-localize></small></label>
</div>
<div ng-show="model.enableMultipleFieldsets">
<div ng-show="dialogData.model.enableMultipleFieldsets">
<label><archetype-localize key="fieldsetGroups">Fieldset groups</archetype-localize></label>
<small><archetype-localize key="fieldsetGroupsDescription">If you have a lot of fieldsets to choose from, you may want to consider grouping them in the fieldset picker. Once you have created your groups here, a group picker will be displayed in the fieldset editor and you can assign your fieldsets to their respective groups.</archetype-localize></small>
<div class="archetypeFieldsetGroups">
<ul ui-sortable="sortableOptions" ng-model="model.fieldsetGroups">
<li ng-repeat="fieldsetGroup in model.fieldsetGroups">
<ul ui-sortable="sortableOptions" ng-model="dialogData.model.fieldsetGroups">
<li ng-repeat="fieldsetGroup in dialogData.model.fieldsetGroups">
<div>
<input id="archetypeFieldsetGroupName_{{$index}}" type="text" ng-model="fieldsetGroup.name" />
<i class="icon icon-delete" ng-click="removeFieldsetGroup($index)"></i>
<i class="icon icon-navigation handle" ng-show="model.fieldsetGroups.length > 1"></i>
<i class="icon icon-navigation handle" ng-show="dialogData.model.fieldsetGroups.length > 1"></i>
</div>
</li>
</ul>
@@ -4,19 +4,19 @@
<h3><archetype-localize key="custom_style_script_options">Custom Style/Script Options</archetype-localize></h3>
<div>
<label for="archetypeAdvancedOptionsCustomClass"><archetype-localize key="customWrapperClass">Custom Wrapper Class</archetype-localize><small><archetype-localize key="customWrapperClassDescription">(Optional) Enter a custom CSS class that will be applied to the wrapper div.</archetype-localize></small></label>
<input type="text" id="archetypeAdvancedOptionsCustomClass" ng-model="model.customCssClass"/>
<input type="text" id="archetypeAdvancedOptionsCustomClass" ng-model="dialogData.model.customCssClass"/>
</div>
<div>
<label for="archetypeAdvancedOptionsCustomCss"><archetype-localize key="cssFile">CSS File</archetype-localize><small><archetype-localize key="cssFileDescription">(Optional) Enter a path for a custom CSS file to be included on the page.</archetype-localize></small></label>
<input type="text" id="archetypeAdvancedOptionsCustomCss" ng-model="model.customCssPath"/>
<input type="text" id="archetypeAdvancedOptionsCustomCss" ng-model="dialogData.model.customCssPath"/>
</div>
<div>
<label for="archetypeAdvancedOptionsCustomJs"><archetype-localize key="jsFile">JS File</archetype-localize><small><archetype-localize key="jsFileDescription">(Optional) Enter a path for a custom JS file to be included on the page.</archetype-localize></small></label>
<input type="text" id="archetypeAdvancedOptionsCustomJs" ng-model="model.customJsPath"/>
<input type="text" id="archetypeAdvancedOptionsCustomJs" ng-model="dialogData.model.customJsPath"/>
</div>
<div>
<label for="archetypeAdvancedOptionsCustomView"><archetype-localize key="viewFile">View File</archetype-localize><small><archetype-localize key="viewFileDescription">(Optional) Enter a path for a custom view file to be used to render this Archetype.</archetype-localize></small></label>
<input type="text" id="archetypeAdvancedOptionsCustomView" ng-model="model.customViewPath"/>
<input type="text" id="archetypeAdvancedOptionsCustomView" ng-model="dialogData.model.customViewPath"/>
</div>
</div>
<div class="umb-panel-footer">
+41 -5
View File
@@ -6,9 +6,8 @@
<fieldset ng-class="['archetype-fieldset-' + fieldset.alias, (getFieldsetValidity(fieldset) == false ? 'archetypeFieldsetError' : '')]" ng-init="fieldsetConfigModel = getConfigFieldsetByAlias(fieldset.alias)">
<div class="archetypeFieldsetLabel" ng-class="{enableCollapsing: model.config.enableCollapsing}">
<div ng-click="focusFieldset(fieldset)" class="label-sub module-label">
<span class="caret" ng-hide="fieldset.collapse || !model.config.enableCollapsing"></span>
<span class="caret caret-right" ng-show="fieldset.collapse && model.config.enableCollapsing"></span>
<label ng-class="{dimmed: fieldset.disabled}">
<span class="caret" ng-class="{'caret-right': isCollapsed(fieldset)}" ng-show="model.config.enableCollapsing"></span>
<label ng-class="{dimmed: isDisabled(fieldset)}">
<i class="fieldsetIcon icon ng-class:fieldsetConfigModel.icon"></i>
<span ng-bind="getFieldsetTitle(fieldsetConfigModel, $index)"></span>
</label>
@@ -17,11 +16,12 @@
<i class="icon icon-add" ng-show="canAdd()" ng-click="openFieldsetPicker($index, $event)"></i>
<i class="icon icon-navigation handle" ng-show="canSort()"></i>
<i class="icon icon-documents" ng-click="cloneRow($index)" ng-show="canClone()"></i>
<i class="icon icon-power" ng-click="enableDisable(fieldset)" ng-show="canDisable()"></i>
<i class="icon icon-power" ng-class="{'icon-active': fieldset.disabled}" ng-click="enableDisable(fieldset)" ng-show="showDisableIcon(fieldset)"></i>
<i class="icon icon-time icon-disabled" ng-class="{'icon-active': isDisabledByPublishing(fieldset)}" ng-show="showPublishingIcon(fieldset)"></i>
<i class="icon icon-delete" ng-click="removeRow($index)" ng-show="canRemove()"></i>
</div>
</div>
<div class="archetypeCollapser animate-hide" ng-hide="model.config.enableCollapsing && isCollapsed(fieldset)" ng-if="!isCollapsed(fieldset)">
<div class="archetypeCollapser animate-hide" ng-hide="model.config.enableCollapsing && isCollapsed(fieldset)" ng-if="isLoaded(fieldset)">
<form class="form-inline">
<div ng-class="[('archetype-property-' + property.alias), (getPropertyValidity($parent.$index, property.alias) === false ? 'archetypePropertyError' : '')]" class="archetypeProperty control-group" ng-repeat="property in fieldsetConfigModel.properties">
<label ng-hide="model.config.hidePropertyLabels == '1'" class="control-label" for="archetype-property-{{model.alias}}-f{{$parent.$index}}-{{property.alias}}-p{{$index}}" ng-attr-title="{{ isDebuggingEnabled || model.config.developerMode ? property.alias : null }}">
@@ -36,6 +36,42 @@
<archetype-submit-watcher active-submit-watcher="activeSubmitWatcher" load-callback="submitWatcherOnLoad" submit-callback="submitWatcherOnSubmit"></archetype-submit-watcher>
</div>
</div>
<div class="control-group archetypeProperty settingsWrapper" ng-show="canConfigure()">
<div ng-click="showSettings = !showSettings" class="settingsHeader">
<span class="caret" ng-show="showSettings"></span>
<span class="caret caret-right" ng-hide="showSettings"></span>
<label>
<span><archetype-localize key="settings">Settings</archetype-localize></span>
</label>
</div>
<div class="settings" ng-show="showSettings">
<!-- misc fieldset settings go here -->
<div ng-if="fieldset.releaseDateModel" ng-show="canPublish()">
<label ng-hide="model.config.hidePropertyLabels == '1'" class="control-label">
<span><archetype-localize key="publish">Publishing</archetype-localize></span>
<div class="archetypeFieldsetHelpText">
<small><archetype-localize key="publishHelpText">Configure automatic publishing and/or unpublishing of this item</archetype-localize></small>
</div>
</label>
<div class="publishOptions" ng-class="[(model.config.hidePropertyLabels == '1' ? 'controls-no-label' : 'controls')]">
<div class="publishDate">
<label for="{{fieldset.releaseDateModel.alias}}">
<archetype-localize key="publishReleaseDate">Publish at</archetype-localize>
</label>
<umb-editor model="fieldset.releaseDateModel"></umb-editor>
</div>
<div class="publishDate">
<label for="{{fieldset.expireDateModel.alias}}">
<archetype-localize key="publishExpireDate">Unpublish at</archetype-localize>
</label>
<umb-editor model="fieldset.expireDateModel"></umb-editor>
</div>
<!-- we need a submit watcher here to make sure the publish dates are saved back to their models -->
<archetype-submit-watcher active-submit-watcher="activeSubmitWatcher" load-callback="submitWatcherOnLoad" submit-callback="submitWatcherOnSubmit"></archetype-submit-watcher>
</div>
</div>
</div>
</div>
</form>
</div>
</fieldset>
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "Archetype",
"version": "1.12.3",
"version": "1.13.0",
"url": "http://github.com/imulus/archetype/",
"author": "Imulus - Kevin Giszewski - Tom Fulton - Lee Kelleher - Matt Brailsford - Kenn Jacobsen - Et. Al.",
"authorUrl": "http://imulus.com/",