HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
File: D:/HostingSpaces/HKemperman1/osthoes.nl/wwwroot/DesktopModules/Journal/Scripts/mentionsInput.js
(function($) {
	$.fn.mentionsInput = function(options) {
		if (this.length == 0)
			return this;
		options = $.extend({}, $.fn.mentionsInput.defaultOptions, options);
		var serviceFramework = options.servicesFramework;
	    var getBaseServicePath = function() {
            return serviceFramework.getServiceRoot('Journal') + 'Services/';
	    };

	    return this.each(function() {
	        var $this = $(this);
	        $this.data("mentions", []);
	        var getPosition = function () {
			    var element = $this.get(0);
			    if ('selectionStart' in element) {
				    // Standard-compliant browsers
				    return element.selectionStart;
			    } else if (document.selection) {
				    // IE
				    element.focus();
				    var sel = document.selection.createRange();
				    var selLen = document.selection.createRange().text.length;
				    sel.moveStart('character', -element.value.length);
				    return sel.text.length - selLen;
			    } else {
				    return -1;
			    }
		    };

		    var getContentByCursor = function() {
			    var position = getPosition();
			    if (position > 0) {
				    if ($this.val().length > position) {
					    for (var i = position; i < $this.val().length; i++) {
						    if (/\s/.test($this.val()[i])) {
							    position = i;
							    break;
						    } else if (i == $this.val().length - 1) {
							    position = i + 1;
						    }
					    }
				    }
				    var content = $this.val().substr(0, position);
				    var result = new RegExp(options.identityChar + "([\\S]+?)$").exec(content);
				    if (result) {
					    return result[1];
				    }
			    }

			    return null;
		    };

	        var addMention = function(item) {
	            var mentions = $this.data("mentions");
                if (!itemExists(item)) {
                    mentions.push(item);
                }
	        };

	        var itemExists = function(item) {
	            var mentions = $this.data("mentions");
	            var exists = false;
	            for (var i = 0; i < mentions.length; i++) {
	                if (mentions[i].displayName == item.displayName) {
	                    exists = true;
	                    break;
	                }
	            }

	            return exists;
	        };

	        var rebuildMentions = function() {
	            var mentions = $this.data("mentions");
	            var content = $this.val();
	            for (var i = mentions.length - 1; i >= 0; i--) {
	                if (content.toLowerCase().indexOf(options.identityChar + mentions[i].displayName.toLowerCase()) == -1) {
	                    mentions.splice(i, 1);
	                }
	            }
	        };

	        var filter = function(data) {
	            for (var i = data.length - 1; i >= 0; i--) {
	                if (itemExists(data[i])) {
	                    data.splice(i, 1);
	                }
	            }

	            return data;
	        };

	        $this.bind("click", function() {
	            $this.autocomplete("search");
	        }).bind("keydown", function (event) {
	            var keyCode = $.ui.keyCode;
	            if (event.keyCode == keyCode.ENTER) {
	                var ac = $this.data('ui-autocomplete');
	                if ($this.attr("menuOpen") && !ac.menu.active) {
	                    return false;
	                }
	            }
	        }).bind("keyup", function(event) {
	            var keyCode = $.ui.keyCode;
	            switch (event.keyCode) {
	            case keyCode.PAGE_UP:
	            case keyCode.PAGE_DOWN:
	            case keyCode.UP:
	            case keyCode.DOWN:
	            case keyCode.TAB:
                case keyCode.ENTER:
	                return;
	            default:
	                $this.autocomplete("search");
	            }
	        }).bind("input change", function (e) {
	            rebuildMentions();
	        }).autocomplete({
	            autoFocus: true,
	            source: function(request, response) {
	                var content = getContentByCursor();
	                if (content && content.length >= options.minLength) {
	                    $.ajax({
	                        type: "GET",
	                        cache: false,
	                        url: getBaseServicePath() + "GetSuggestions",
	                        beforeSend: serviceFramework.setModuleHeaders,
	                        data: {
	                            keyword: content
	                        }
	                    }).done(function(data) {
	                        response(filter(data));
	                    }).fail(function() {
	                        //displayMessage(settings.searchErrorText, "dnnFormWarning");
	                        response({});
	                    });
	                }
	            },
	            minLength: options.minLength,
	            select: function(event, ui) {
	                var key = options.identityChar + ui.item.key;
	                $this.val($this.val().replace(new RegExp(key + " " + "|" + key + "$", "g"), options.identityChar + ui.item.displayName + " "));
	                addMention(ui.item);
	                return false;
	            },
	            search: function(event, ui) {
	                var content = getContentByCursor();
	                if (!content || content.length < options.minLength) {
	                    $this.autocomplete('close');
	                    return false;
	                }
	            },
	            focus: function(event, ui) {
	                event.preventDefault();
	            },
	            close: function(event, ui) {
	                $this.attr("menuOpen", false);
	            }
	        });

	        $this.data('ui-autocomplete')._renderItem = function(ul, item) {
	            return $('<li></li>')
	                .data('ui-autocomplete-item', item)
	                .append('<a><img src="' + item.avatar + '" /><span class="dn">' + item.displayName + '<span></a>')
	                .appendTo(ul);
	        };

	        $this.data('ui-autocomplete')._renderMenu = function(ul, items) {
	            var that = this;
	            $.each(items, function(index, item) {
	                that._renderItemData(ul, item);
	            });
	            $this.attr("menuOpen", true);
	        };
	    });
	};

	$.fn.mentionsInput.defaultOptions = {
		identityChar: '@',
		minLength: 1
	};
})(window.jQuery);