пользовательский стиль sharepoint для страницы в режиме редактирования - PullRequest
3 голосов
/ 20 июля 2011

Я хочу, чтобы следующий фрагмент кода на главной странице выполнялся, если текущая загруженная страница находится в режиме редактирования следующим образом:

<!-- If edit mode, then add the following script -->
<script type="text/javascript">
    document.documentElement.className += ' edit-mode';
</script>
<!-- End if -->

просто, мой скрипт добавит класс edit-mode к тегу html, вот и все.

как я могу это сделать?

Спасибо

Ответы [ 4 ]

6 голосов
/ 24 июля 2011

Вы можете использовать элемент управления PublishingWebControls: EditModePanel. Этот элемент управления будет обрабатывать информацию, включенную в этот тег, когда страница находится в режиме редактирования.

<PublishingWebControls:EditModePanel runat="server" id="IncludeEditModeClass" > 
    <asp:Content>
        <script type="text/javascript">
                document.documentElement.className += ' edit-mode';
        </script>
    </asp:Content> 
</PublishingWebControls:EditModePanel> 
0 голосов
/ 25 февраля 2016

Чтобы получить желаемый результат, вам нужно добавить следующий фрагмент кода на главной странице.

<script type="text/javascript">
		var inDesignMode = document.forms[MSOWebPartPageFormName].MSOLayout_InDesignMode.value;
		
		if (inDesignMode == "1")
		{
		    // page is in edit mode
				<!-- If edit mode, then add the following script -->
				
					document.documentElement.className += ' edit-mode';
				
				<!-- End if -->
		
		}
		else
		{
		    // page is in browse mode 
		} 

   </script> 
0 голосов
/ 26 ноября 2011

Этот код работает, если вы используете его как букмарклет:

javascript:if%20(document.forms['aspnetForm']['MSOLayout_InDesignMode']%20!=%20null)%20document.forms['aspnetForm']['MSOLayout_InDesignMode'].value%20=%201;if%20(document.forms['aspnetForm']['MSOAuthoringConsole_FormContext']%20!=%20null)%20document.forms['aspnetForm']['MSOAuthoringConsole_FormContext'].value%20=%201;theForm.submit();

Я пытался преобразовать его в простой Javascript, но он не будет работать в моей консоли Firefox Javascript Console.

SP_EditPage: function(){
    var thisdocument = window.content.document;
    if (thisdocument.forms['aspnetForm']['MSOLayout_InDesignMode'] != null) 
        thisdocument.forms['aspnetForm']['MSOLayout_InDesignMode'].value = 1;
    if (thisdocument.forms['aspnetForm']['MSOAuthoringConsole_FormContext'] != null) 
        thisdocument.forms['aspnetForm']['MSOAuthoringConsole_FormContext'].value = 1;
        theForm.submit();   
},

Мне очень интересно, если кто-нибудь может заставить его работать в простом JavaScript!Он говорит мне: Ошибка: TypeError: thisdocument.forms.aspnetForm не определена Исходный файл: Javascript Командная строка: 2

Букмарклет пришел с сайта этого сотрудника: http://blog.mastykarz.nl/sharepoint-developer-bookmarklets/

Вот еще один,Он запускает страницу редактирования с открытой боковой панелью.Этот работает хорошо для меня:

SP_EditPage: function(){
    var thisdocument = getBrowser().contentWindow.document;
    if(thisdocument.location.href.search('ToolPaneView=') == -1 ){
        if (thisdocument.location.search.indexOf('?') == 0){
            thisdocument.location=(thisdocument.location.href + '&ToolPaneView=2'); 
        }else{
            thisdocument.location=(thisdocument.location.href + '?ToolPaneView=2'); 
        } 
    } else {
        thisdocument.location=thisdocument.location.href;
    }   
},
0 голосов
/ 21 июля 2011

, так как экспертов по SharePoint нет, я сделал обходной путь для решения своей проблемы, и ниже моего решения в двух версиях, сначала в jQuery, а затем с использованием чистого JavaScript,

, в основном я пытался искатьспециальные классы, которые существуют только в режиме редактирования, например .ms-SPZoneLabel - это класс, который переносит зону веб-части в режиме редактирования, .edit-mode-panel - это класс, который переносит поле для ввода данных на страницах статьи, а .ewiki-margin ввики-страницы ...

// jQuery version
$(function(){
    if ($('.ms-SPZoneLabel, .edit-mode-panel, .ewiki-margin').length) {
        document.documentElement.className += ' edit-mode';
    }
});

// pure javascript way
(function(){

    // defining fall back getElementsByClassName if not exist (IE) 
    if(!document.getElementsByClassName) {
        document.getElementsByClassName = function(cl) {
            var retnode = [];
            var myclass = new RegExp('\\b'+cl+'\\b');
            var elem = this.getElementsByTagName('*');
            for (var i = 0; i < elem.length; i++) {
                var classes = elem[i].className;
                if (myclass.test(classes)) {
                    retnode.push(elem[i]);
                } 
            }
            return retnode;
        };
    }
    // then checking if there's any webpart zone in the page
    if( document.getElementsByClassName('ms-SPZoneLabel').length || 
        document.getElementsByClassName('edit-mode-panel').length || 
        document.getElementsByClassName('ewiki-margin').length) {
        document.documentElement.className += ' edit-mode';
    }

})();

если у кого-то есть лучшее решение (например, тег ASP для определения его на стороне сервера), пожалуйста, запишите свое решение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...