Как выбрать диапазон и изменить цвет шрифта указанных c слов в веб-надстройках Outlook - PullRequest
0 голосов
/ 19 апреля 2020

В веб-надстройке Outlook я хочу выделить текст в теле письма, сохранить его в качестве отслеживаемого объекта, а затем применить к нему стилизацию, как в веб-надстройке Word. В Word я делаю это следующим образом:

 //used to store current selected range 
var selection=null;

$scope.getSelectedText = function () {
     Word.run(function (context) {
            if (selection) {
                context.trackedObjects.remove(selection);
            }
            selection = context.document.getSelection();
            context.trackedObjects.add(selection);
            context.load(selection, 'text');
            return context.sync()
                .then(function () {
                    if (!selection.text) {
                        systemService.errorHandler("Please select any text from the document");
                        return false;
                    }
                }).then(context.sync);
        })
         .catch(systemService.errorHandler);
    };

//highlight Words in the selected range or body
   $scope.highlightWords = function (item) {

    var color = systemService.getColor(item.gradeText);
    var filteredWords = JSON.parse(localStorage.getItem("List")) || [];
    var promise = new OfficeExtension.Promise(function (resolve, reject) { resolve(null); });

    Word.run(function (context) {
        var selectedRange = (selection) ? selection : context.document.body;
        selectedRange.load('text');
        return context.sync().then(function () {

            if (selectedRange.text == "") {
                systemService.showNotification("Alert:", "No text found in the document!");
                return;
            }

            filteredWords.forEach(function (word) {
                promise = promise.then(function () {
                    return highlightRange(word, color);
                })
            });
        });

    }).catch(function (error) {
        console.log('Error: ' + JSON.stringify(error));
        if (error instanceof OfficeExtension.Error) {
            console.log('Debug info: ' + JSON.stringify(error.debugInfo));
        }
    });
}

function highlightRange(word, color) {
    return Word.run(selection, function (context) {
        var range = (selection) ? selection : context.document.body;
        var searchResults = null;
        searchResults = range.search(word, { ignorePunct: true, matchCase: false, matchWholeWord: true });

        searchResults.load('font');
        return context.sync().then(function () {
            for (var i = 0; i < searchResults.items.length; i++) {
                searchResults.items[i].font.color = color;
                searchResults.items[i].font.bold = true;
            }
        }).then(context.sync());

    }).catch(function (error) {
        console.log('Error: ' + JSON.stringify(error));
        if (error instanceof OfficeExtension.Error) {
            console.log('Debug info: ' + JSON.stringify(error.debugInfo));
        }
    });
}
//highlight Words in the selected range or body

Я пробовал несколько способов сделать это, но есть проблема при отслеживании выбранного объекта. В Word мы можем сохранить диапазон и манипулировать им сверхурочно по мере необходимости, но в Outlook пользователь должен сохранять выбранный контент для выполнения операций с ним (например, изменение цвета шрифта и т. Д. c.). Кроме того, есть ли у нас какие-либо свойства шрифта, доступные для надстроек Outlook, таких как Word?

...