Skip to content

Instantly share code, notes, and snippets.

@LennardF1989
Last active March 2, 2021 10:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save LennardF1989/d37f0a6e3159ba3581999117ad717c70 to your computer and use it in GitHub Desktop.
Save LennardF1989/d37f0a6e3159ba3581999117ad717c70 to your computer and use it in GitHub Desktop.
Beyond Umbraco - Hooking AngularJS (again)
//Source: https://github.com/umbraco/Umbraco-CMS/blob/34e80d86e8c0b754f6b7a02e307f53cb32806bbe/src/Umbraco.Web.UI.Client/src/common/directives/components/tags/umbtagseditor.directive.js#L229
function addTagOnEnter(e) {
var code = e.keyCode || e.which;
if (code == 13) {
if ($element.find('.tags-' + vm.inputId).parent().find(".tt-menu .tt-cursor").length === 0) {
e.preventDefault();
addTag();
}
}
}
angular.module("umbraco.directives").config(function ($provide) {
$provide.decorator("umbTagsEditorDirective", function ($delegate) {
var directive = $delegate[0];
//TODO
return $delegate;
});
});
var originalController = directive.controller;
directive.controller = function ($rootScope, assetsService, umbRequestHelper, angularHelper, $timeout, $element) {
//originalController.call(this, $rootScope, assetsService, umbRequestHelper, angularHelper, $timeout, $element);
originalController.apply(this, arguments);
}
var originalAddTag = this.addTag;
this.addTag = function() {
var vm = this;
vm.tagToAdd
.split(" ")
.forEach(x => addSingleTag(x));
function addSingleTag(x) {
vm.tagToAdd = x;
originalAddTag();
}
};
//NOTE: Copied from umbtagseditor.directive.js
this.addTagOnEnter = function(e) {
var code = e.keyCode || e.which;
if (code === 13) {
var vm = this;
if ($element.find(".tags-" + vm.inputId).parent().find(".tt-menu .tt-cursor").length === 0) {
e.preventDefault();
vm.addTag();
}
}
}
<!-- Source: https://github.com/umbraco/Umbraco-CMS/blob/34e80d86e8c0b754f6b7a02e307f53cb32806bbe/src/Umbraco.Web.UI.Client/src/views/propertyeditors/tags/tags.html -->
<div ng-controller="Umbraco.PropertyEditors.TagsController" class="umb-property-editor umb-tags">
<umb-tags-editor value="model.value"
config="model.config"
validation="model.validation"
on-value-changed="valueChanged(value)"
culture="model.culture"
input-id="{{model.alias}}">
</umb-tags-editor>
</div>
<!-- Source: https://github.com/umbraco/Umbraco-CMS/blob/34e80d86e8c0b754f6b7a02e307f53cb32806bbe/src/Umbraco.Web.UI.Client/src/views/components/tags/umb-tags-editor.html#L23 -->
<input type="text"
id="{{vm.inputId}}"
class="typeahead tags-{{vm.inputId}}"
ng-model="vm.tagToAdd"
ng-keydown="vm.addTagOnEnter($event)"
ng-blur="vm.addTag()"
ng-maxlength="200"
maxlength="200"
localize="placeholder"
placeholder="@placeholders_enterTags" />
//Source: https://github.com/umbraco/Umbraco-CMS/blob/34e80d86e8c0b754f6b7a02e307f53cb32806bbe/src/Umbraco.Web.UI.Client/src/common/directives/components/tags/umbtagseditor.directive.js#L9
angular
.module('umbraco.directives')
.component('umbTagsEditor', {
transclude: true,
templateUrl: 'views/components/tags/umb-tags-editor.html',
controller: umbTagsEditorController,
controllerAs: 'vm',
bindings: {
value: "<",
config: "<",
validation: "<",
culture: "<?",
inputId: "@?",
onValueChanged: "&"
}
});
//Source: https://github.com/umbraco/Umbraco-CMS/blob/34e80d86e8c0b754f6b7a02e307f53cb32806bbe/src/Umbraco.Web.UI.Client/src/common/directives/components/tags/umbtagseditor.directive.js
vm.addTagOnEnter = addTagOnEnter;
vm.addTag = addTag;
vm.tagToAdd = "";
function addTagOnEnter(e) {
var code = e.keyCode || e.which;
if (code == 13) {
if ($element.find('.tags-' + vm.inputId).parent().find(".tt-menu .tt-cursor").length === 0) {
e.preventDefault();
addTag();
}
}
}
function addTag() {
addTagInternal(vm.tagToAdd);
vm.tagToAdd = "";
typeahead.typeahead('val', '');
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment