Merge remote-tracking branch 'refs/remotes/imulus/master'

This commit is contained in:
kjac
2016-04-27 20:59:42 +02:00
6 changed files with 46 additions and 20 deletions
+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
##News and Updates##
Follow us on Twitter https://twitter.com/ArchetypeKit
##Core Team##
+29 -11
View File
@@ -277,19 +277,19 @@ angular.module("umbraco").controller("Imulus.ArchetypeController", function ($sc
return true;
}
$scope.isDisabledByPublishing = function (fieldset) {
$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) {
if (fieldset.expireDateModel && fieldset.expireDateModel.value && (moment() > moment(fieldset.expireDateModel.value))) {
// an expired release affects the fieldset
return moment() > moment(fieldset.expireDateModel.value);
return true;
}
if (fieldset.releaseDateModel && fieldset.releaseDateModel.value) {
if (fieldset.releaseDateModel && fieldset.releaseDateModel.value && (moment(fieldset.releaseDateModel.value) > moment())) {
// a pending release affects the fieldset
return moment(fieldset.releaseDateModel.value) > moment();
return true;
}
return false;
}
@@ -317,13 +317,15 @@ angular.module("umbraco").controller("Imulus.ArchetypeController", function ($sc
}
function addCustomProperties(fieldsets) {
_.each(fieldsets, function (fieldset) {
addCustomPropertiesToFieldset(fieldset);
// 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 = {
@@ -362,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();
@@ -384,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);
}
}
@@ -446,6 +456,9 @@ 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);
});
@@ -558,13 +571,18 @@ angular.module("umbraco").controller("Imulus.ArchetypeController", function ($sc
return $scope.activeSubmitWatcher;
}
$scope.submitWatcherOnSubmit = function (args) {
_.each($scope.model.value.fieldsets, function(fieldset) {
$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);
});
$scope.$broadcast("archetypeFormSubmitting", args);
}
});
function toUtc(date) {
if (!date) {
+4 -2
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;
}
+3 -3
View File
@@ -1,9 +1,9 @@
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();
scope.$on("formSubmitting", function (ev, args) {
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(args);
@@ -22,4 +22,4 @@ angular.module("umbraco.directives").directive('archetypeSubmitWatcher', functio
activeSubmitWatcher: '='
}
}
});
});
+3
View File
@@ -319,6 +319,9 @@
}
}
.settingsHeader {
label {
display: inline-block;
}
&:hover {
cursor: pointer;
label {
+5 -4
View File
@@ -6,8 +6,7 @@
<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>
<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>
@@ -22,7 +21,7 @@
<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 }}">
@@ -47,7 +46,7 @@
</div>
<div class="settings" ng-show="showSettings">
<!-- misc fieldset settings go here -->
<div ng-show="canPublish()">
<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">
@@ -67,6 +66,8 @@
</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>