Merge "Rewrite <labeled> directive to render editable labels"

This commit is contained in:
Jenkins 2015-07-30 21:23:29 +00:00 committed by Gerrit Code Review
commit 97c5fd246b
8 changed files with 33 additions and 31 deletions

View File

@ -73,7 +73,7 @@
<div ng-repeat="row in panel | extractFields | chunks:2 track by $index"> <div ng-repeat="row in panel | extractFields | chunks:2 track by $index">
<div ng-repeat="(label, field) in row track by field.uid()"> <div ng-repeat="(label, field) in row track by field.uid()">
<div ng-if="field.isAtomic()" class="col-xs-6"> <div ng-if="field.isAtomic()" class="col-xs-6">
<labeled label="{$ label $}" for="{$ field.uid() $}"> <labeled label="label" for="{$ field.uid() $}">
<typed-field value="field" type="{$ field.getType() $}"></typed-field> <typed-field value="field" type="{$ field.getType() $}"></typed-field>
</labeled> </labeled>
</div> </div>

View File

@ -41,6 +41,7 @@
* */ * */
.directive('typedField', typedField) .directive('typedField', typedField)
.directive('editableTitle', editableTitle)
.directive('labeled', labeled); .directive('labeled', labeled);
function labeled() { function labeled() {
@ -49,12 +50,27 @@
templateUrl: '/static/merlin/templates/labeled.html', templateUrl: '/static/merlin/templates/labeled.html',
transclude: true, transclude: true,
scope: { scope: {
label: '@', label: '=',
for: '@' for: '@'
} }
}; };
} }
function editableTitle() {
return {
restrict: 'E',
templateUrl: '/static/merlin/templates/title.html',
scope: {
ngModel: '='
},
link: function(scope) {
if (angular.isFunction(scope.ngModel)) {
scope.editable = true;
}
}
};
}
function editable() { function editable() {
return { return {
restrict: 'E', restrict: 'E',
@ -136,12 +152,7 @@
panel: '=content' panel: '=content'
}, },
link: function(scope) { link: function(scope) {
if (angular.isDefined(scope.panel)) { scope.isCollapsed = false;
scope.isCollapsed = false;
if (angular.isFunction(scope.panel.title)) {
scope.editable = true;
}
}
} }
}; };
} }
@ -152,16 +163,12 @@
templateUrl: '/static/merlin/templates/collapsible-group.html', templateUrl: '/static/merlin/templates/collapsible-group.html',
transclude: true, transclude: true,
scope: { scope: {
group: '=content',
title: '=', title: '=',
onAdd: '&', onAdd: '&',
onRemove: '&' onRemove: '&'
}, },
link: function(scope, element, attrs) { link: function(scope, element, attrs) {
scope.isCollapsed = false; scope.isCollapsed = false;
if (angular.isFunction(scope.title)) {
scope.editable = true;
}
if ( attrs.onAdd && attrs.additive !== 'false' ) { if ( attrs.onAdd && attrs.additive !== 'false' ) {
scope.additive = true; scope.additive = true;
} }

View File

@ -3,9 +3,7 @@
<div class="col-xs-10"> <div class="col-xs-10">
<h5><a ng-click="isCollapsed = !isCollapsed" class="collapse-entries" href=""> <h5><a ng-click="isCollapsed = !isCollapsed" class="collapse-entries" href="">
<i class="fa" ng-class="isCollapsed ? 'fa-plus-square-o' : 'fa-minus-square-o'"></i></a> <i class="fa" ng-class="isCollapsed ? 'fa-plus-square-o' : 'fa-minus-square-o'"></i></a>
<editable ng-if="editable" ng-model="title" <editable-title ng-model="title"></editable-title>
ng-model-options="{getterSetter: true}"></editable>
<span ng-if="!editable">{$ ::title $}</span>
</h5> </h5>
</div> </div>
<div ng-if="additive" class="add-btn col-xs add-entry"> <div ng-if="additive" class="add-btn col-xs add-entry">

View File

@ -3,9 +3,7 @@
<h4 class="panel-title"> <h4 class="panel-title">
<a ng-click="isCollapsed = !isCollapsed" href=""> <a ng-click="isCollapsed = !isCollapsed" href="">
<i class="fa fa-lg" ng-class="isCollapsed ? 'fa-caret-right' : 'fa-caret-down'"></i></a> <i class="fa fa-lg" ng-class="isCollapsed ? 'fa-caret-right' : 'fa-caret-down'"></i></a>
<editable ng-if="editable" ng-model="panel.title" <editable-title ng-model="panel.title"></editable-title>
ng-model-options="{getterSetter: true}"></editable>
<span ng-if="!editable">{$ ::panel.title $}</span>
<a href="" ng-show="panel.removable" ng-click="panel.remove()"> <a href="" ng-show="panel.removable" ng-click="panel.remove()">
<i class="fa fa-times-circle pull-right"></i></a> <i class="fa fa-times-circle pull-right"></i></a>
</h4> </h4>

View File

@ -1,10 +1,7 @@
<div class="row bottom-xs dictionary"> <div class="row bottom-xs dictionary">
<div ng-class="value.inline ? 'col-xs-10' : 'col-xs-12'"> <div ng-class="value.inline ? 'col-xs-10' : 'col-xs-12'">
<div ng-repeat="(key, field) in value | extractFields track by field.uid()"> <div ng-repeat="(key, field) in value | extractFields track by field.uid()">
<div ng-if="field.isAtomic()" class="form-group"> <labeled ng-if="field.isAtomic()" label="field.keyValue" for="{$ field.uid() $}">
<label for="{$ field.uid() $}">
<editable ng-model="field.keyValue" ng-model-options="{getterSetter: true}"></editable>
</label>
<div class="input-group"> <div class="input-group">
<typed-field id="{$ field.uid() $}" value="field" type="{$ field.getType() $}"></typed-field> <typed-field id="{$ field.uid() $}" value="field" type="{$ field.getType() $}"></typed-field>
<span class="input-group-btn"> <span class="input-group-btn">
@ -13,11 +10,9 @@
</button> </button>
</span> </span>
</div> </div>
</div> </labeled>
<div ng-if="!field.isAtomic()"> <div ng-if="!field.isAtomic()">
<collapsible-group ng-if="!field.inline" content="field" <collapsible-group ng-if="!field.inline" class="col-xs-12" title="field.keyValue"
class="col-xs-12"
title="field.keyValue"
on-remove="value.removeItem(field.keyValue())" on-remove="value.removeItem(field.keyValue())"
additive="{$ field.isAdditive() $}" on-add="field.add()"> additive="{$ field.isAdditive() $}" on-add="field.add()">
<typed-field value="field" type="{$ field.getType() $}"></typed-field> <typed-field value="field" type="{$ field.getType() $}"></typed-field>

View File

@ -2,20 +2,19 @@
<div ng-repeat="row in value | extractFields | chunks:2 track by $index"> <div ng-repeat="row in value | extractFields | chunks:2 track by $index">
<div ng-repeat="(key, field) in row track by field.uid()"> <div ng-repeat="(key, field) in row track by field.uid()">
<div ng-if="field.isAtomic()" class="col-xs-6"> <div ng-if="field.isAtomic()" class="col-xs-6">
<labeled label="{$ key $}" for="{$ field.uid() $}"> <labeled label="key" for="{$ field.uid() $}">
<typed-field value="field" type="{$ field.getType() $}"></typed-field> <typed-field value="field" type="{$ field.getType() $}"></typed-field>
</labeled> </labeled>
</div> </div>
<div ng-if="!field.isAtomic()"> <div ng-if="!field.isAtomic()">
<collapsible-group ng-if="!field.inline" class="col-xs-12" <collapsible-group ng-if="!field.inline" class="col-xs-12" title="key"
content="field" title="key"
additive="{$ field.isAdditive() $}" on-add="field.add()"> additive="{$ field.isAdditive() $}" on-add="field.add()">
<div ng-class="field.isPlainStructure() ? 'col-xs-6' : 'col-xs-12'"> <div ng-class="field.isPlainStructure() ? 'col-xs-6' : 'col-xs-12'">
<typed-field value="field" type="{$ field.getType() $}"></typed-field> <typed-field value="field" type="{$ field.getType() $}"></typed-field>
</div> </div>
</collapsible-group> </collapsible-group>
<labeled ng-if="field.inline" class="col-xs-6" <labeled ng-if="field.inline" class="col-xs-6"
label="{$ key $}" for="{$ field.uid() $}"> label="key" for="{$ field.uid() $}">
<typed-field value="field" type="{$ field.getType() $}"></typed-field> <typed-field value="field" type="{$ field.getType() $}"></typed-field>
</labeled> </labeled>
</div> </div>

View File

@ -1,4 +1,6 @@
<div class="form-group"> <div class="form-group">
<label for="{$ for $}">{$ label $}</label> <label for="{$ for $}">
<editable-title ng-model="label"></editable-title>
</label>
<div ng-transclude></div> <div ng-transclude></div>
</div> </div>

View File

@ -0,0 +1,3 @@
<editable ng-if="editable" ng-model="ngModel"
ng-model-options="{getterSetter: true}"></editable>
<span ng-if="!editable">{$ ::ngModel $}</span>