Silverstripe 4 TinyMCE 插件:如何保存和恢复每条记录唯一的滚动位置

问题描述 投票:0回答:1

我正在为 Silverstripe CMS 开发一个 TinyMCE 插件,用于在编辑和保存长文本内容后保存和恢复滚动位置。当前的实现可以很好地使用 sessionStorage.setItem('tinymceScrollPosition',scrollPosition); 恢复单个会话中的滚动位置。但是,在不同记录之间切换时我遇到了问题。

问题在于,编辑新记录时会使用上次编辑记录中保存的滚动位置。我知道发生这种情况是因为 sessionStorage 中存储的密钥每条记录不是唯一的。

目标:

我需要为 TinyMCE 编辑器实例创建一个唯一的标识符,以便可以单独为每条记录正确保存和恢复滚动位置。

当前实施:

这是我的插件中的相关代码片段:

(function() {
    tinymce.create('tinymce.plugins.scrollposition', {
        init:function(ed,url){

            // Restore scroll position when TinyMCE is initialized
            ed.on('init',function(){
                console.log('Editor initialized. Attempting to restore scroll position.');
                var savedScrollPosition=sessionStorage.getItem('tinymceScrollPosition');
                if(savedScrollPosition!==null){
                    var iframeWindow=ed.getWin();
                    iframeWindow.scrollTo(0,parseInt(savedScrollPosition,10));
                    //console.log('Restored scroll position: '+savedScrollPosition);
                    sessionStorage.removeItem('tinymceScrollPosition');
                }else{
                    //console.log('No scroll position found in sessionStorage.');
                }
            });

            // Save scroll position when content changes, or the editor loses focus
            function saveScrollPosition(){
                var iframeWindow=ed.getWin();
                var scrollPosition=iframeWindow.scrollY;
                sessionStorage.setItem('tinymceScrollPosition',scrollPosition);
                //console.log('Saved scroll position: '+scrollPosition);
            }

            ed.on('NodeChange',saveScrollPosition);
            ed.on('blur',saveScrollPosition);
            ed.on('PostProcess',saveScrollPosition);
            ed.on('BeforeUnload',saveScrollPosition);
        },

        getInfo:function(){
            return{
                longname:'Scroll Position Plugin',
                author:'',
                authorurl:'',
                version:"1.0"
            };
        }
    });

    tinymce.PluginManager.add('scrollposition',tinymce.plugins.scrollposition);
})();

问题:

如何为每条记录生成TinyMCE编辑器的唯一标识符,以便在记录之间切换时正确保存和恢复滚动位置?任何有关如何修改我当前方法的指导或建议将不胜感激。

其他背景:

我正在使用 Silverstripe 4。 可以使用编辑器 ID (ed.id),但我不确定如何将其唯一地绑定到每条记录。 (来自银条) 我需要避免覆盖不同记录之间的滚动位置。

plugins tinymce-4 silverstripe-4
1个回答
0
投票

没关系!

我做了一个模块: https://github.com/seppzzz/HtmlEditor-Save-Scroll-Position

© www.soinside.com 2019 - 2024. All rights reserved.