v8: Edit embed in grid (#4899)

This commit is contained in:
Bjarne Fyrstenborg
2019-09-05 17:53:04 +02:00
committed by Sebastiaan Janssen
parent 73a61e65de
commit 1b0113d3aa
6 changed files with 110 additions and 46 deletions

View File

@@ -408,7 +408,19 @@
margin-bottom: 10px;
}
.umb-grid .umb-editor-preview {
position: relative;
.umb-editor-preview-overlay {
cursor: pointer;
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
z-index: 1;
}
}
// Active states
// -------------------------

View File

@@ -7,6 +7,7 @@
var origWidth = 500;
var origHeight = 300;
vm.loading = false;
vm.trustedPreview = null;
$scope.model.embed = {
@@ -17,9 +18,16 @@
preview: "",
success: false,
info: "",
supportsDimensions: ""
supportsDimensions: false
};
if ($scope.model.original) {
angular.extend($scope.model.embed, $scope.model.original);
showPreview();
}
vm.toggleConstrain = toggleConstrain;
vm.showPreview = showPreview;
vm.changeSize = changeSize;
vm.submit = submit;
@@ -37,10 +45,10 @@
if ($scope.model.embed.url) {
$scope.model.embed.show = true;
$scope.model.embed.preview = "<div class=\"umb-loader\" style=\"height: 10px; margin: 10px 0px;\"></div>";
$scope.model.embed.info = "";
$scope.model.embed.success = false;
vm.loading = true;
$http({
method: 'GET',
@@ -54,29 +62,41 @@
$scope.model.embed.preview = "";
switch (response.data.OEmbedStatus) {
case 0:
//not supported
$scope.model.embed.preview = "";
$scope.model.embed.info = "Not supported";
$scope.model.embed.success = false;
$scope.model.embed.supportsDimensions = false;
vm.trustedPreview = null;
break;
case 1:
//error
$scope.model.embed.preview = "";
$scope.model.embed.info = "Could not embed media - please ensure the URL is valid";
$scope.model.embed.success = false;
$scope.model.embed.supportsDimensions = false;
vm.trustedPreview = null;
break;
case 2:
$scope.model.embed.success = true;
$scope.model.embed.supportsDimensions = response.data.SupportsDimensions;
$scope.model.embed.preview = response.data.Markup;
vm.trustedPreview = $sce.trustAsHtml(response.data.Markup);
$scope.model.embed.supportsDimensions = response.data.SupportsDimensions;
$scope.model.embed.success = true;
break;
}
vm.loading = false;
}, function() {
$scope.model.embed.success = false;
$scope.model.embed.supportsDimensions = false;
$scope.model.embed.preview = "";
$scope.model.embed.info = "Could not embed media - please ensure the URL is valid";
});
vm.loading = false;
});
} else {
$scope.model.embed.supportsDimensions = false;
$scope.model.embed.preview = "";
@@ -105,6 +125,10 @@
}
function toggleConstrain() {
$scope.model.embed.constrain = !$scope.model.embed.constrain;
}
function submit() {
if($scope.model && $scope.model.submit) {
$scope.model.submit($scope.model);

View File

@@ -16,7 +16,7 @@
<umb-box-content>
<umb-control-group label="@general_url">
<input id="url" class="umb-property-editor input-block-level" type="text" style="margin-bottom: 10px;" ng-model="model.embed.url" ng-keyup="$event.keyCode == 13 ? vm.showPreview() : null" focus-when="{{true}}" required />
<input type="text" id="url" class="umb-property-editor input-block-level" ng-model="model.embed.url" ng-keyup="$event.keyCode == 13 ? vm.showPreview() : null" focus-when="{{true}}" required />
<umb-button
type="button"
action="vm.showPreview()"
@@ -24,24 +24,30 @@
label-key="general_retrieve">
</umb-button>
</umb-control-group>
<umb-control-group>
<p ng-bind="model.embed.info"></p>
<div ng-bind-html="vm.trustedPreview"></div>
</umb-control-group>
<div ng-show="model.embed.supportsDimensions">
<umb-control-group label="@general_width">
<input type="number" pattern="[0-9]*" min="0" ng-model="model.embed.width" ng-blur="vm.changeSize('width')" />
<umb-load-indicator ng-if="vm.loading"></umb-load-indicator>
<div ng-if="!vm.loading">
<umb-control-group>
<p ng-bind="model.embed.info"></p>
<div ng-bind-html="vm.trustedPreview"></div>
</umb-control-group>
<div ng-show="model.embed.supportsDimensions && model.embed.success">
<umb-control-group label="@general_width">
<input type="number" pattern="[0-9]*" min="0" ng-model="model.embed.width" ng-blur="vm.changeSize('width')" />
</umb-control-group>
<umb-control-group label="@general_height">
<input type="number" pattern="[0-9]*" min="0" ng-model="model.embed.height" ng-blur="vm.changeSize('height')" />
</umb-control-group>
<umb-control-group label="@general_height">
<input type="number" pattern="[0-9]*" min="0" ng-model="model.embed.height" ng-blur="vm.changeSize('height')" />
</umb-control-group>
<umb-control-group label="@general_constrain">
<input id="constrain" type="checkbox" ng-model="model.embed.constrain" />
</umb-control-group>
<umb-control-group label="@general_constrain">
<umb-toggle checked="model.embed.constrain" on-click="vm.toggleConstrain()"></umb-toggle>
</umb-control-group>
</div>
</div>
</umb-box-content>
@@ -62,6 +68,7 @@
button-style="success"
label-key="general_submit"
state="vm.saveButtonState"
disabled="!model.embed.url.length || !model.embed.preview.length"
action="vm.submit(model)">
</umb-button>
</umb-editor-footer-content-right>

View File

@@ -1,26 +1,42 @@
angular.module("umbraco")
.controller("Umbraco.PropertyEditors.Grid.EmbedController",
function ($scope, $timeout, $sce, editorService) {
function getEmbed() {
return $sce.trustAsHtml($scope.control.value);
}
$scope.embedHtml = getEmbed();
$scope.$watch('control.value', function(newValue, oldValue) {
if(angular.equals(newValue, oldValue)){
return; // simply skip that
}
function onInit() {
$scope.embedHtml = getEmbed();
}, false);
$scope.setEmbed = function() {
var embedPreview = angular.isObject($scope.control.value) && $scope.control.value.preview ? $scope.control.value.preview : $scope.control.value;
$scope.trustedValue = embedPreview ? $sce.trustAsHtml(embedPreview) : null;
if(!$scope.control.value) {
$timeout(function(){
if($scope.control.$initializing){
$scope.setEmbed();
}
}, 200);
}
}
$scope.setEmbed = function () {
var original = angular.isObject($scope.control.value) ? $scope.control.value : null;
var embed = {
submit: function(model) {
$scope.control.value = model.embed.preview;
original: original,
submit: function (model) {
var embed = {
constrain: model.embed.constrain,
height: model.embed.height,
width: model.embed.width,
url: model.embed.url,
info: model.embed.info,
preview: model.embed.preview
};
$scope.control.value = embed;
$scope.trustedValue = $sce.trustAsHtml(embed.preview);
editorService.close();
},
close: function() {
@@ -29,5 +45,6 @@ angular.module("umbraco")
};
editorService.embed(embed);
};
onInit();
});

View File

@@ -1,10 +1,13 @@
<div ng-controller="Umbraco.PropertyEditors.Grid.EmbedController">
<div class="umb-editor-placeholder" ng-click="setEmbed()" ng-if="control.value === null">
<i class="icon icon-movie-alt"></i>
<div class="help-text"><localize key="grid_clickToEmbed">Click to embed</localize></div>
</div>
<div class="umb-editor-placeholder" ng-click="setEmbed()" ng-if="trustedValue === null">
<i class="icon icon-movie-alt"></i>
<div class="help-text"><localize key="grid_clickToEmbed">Click to embed</localize></div>
</div>
<div ng-if="control.value" ng-bind-html="embedHtml"></div>
<div class="umb-editor-preview" ng-if="control.value" ng-click="setEmbed()">
<div class="umb-editor-preview-overlay"></div>
<div ng-bind-html="trustedValue"></div>
</div>
</div>

View File

@@ -584,6 +584,7 @@
<key alias="closewindow">Luk vindue</key>
<key alias="comment">Kommentar</key>
<key alias="confirm">Bekræft</key>
<key alias="constrain">Proportioner</key>
<key alias="constrainProportions">Behold proportioner</key>
<key alias="content">Indhold</key>
<key alias="continue">Fortsæt</key>