понедельник, 23 мая 2011 г.

Прокрутка рабочей области страницы

На стандартной странице SharePoint прокручивается только рабочая область страницы, без ленты.

Реализовано это в файле init.js (в функции FixRibbonAndWorkspaceDimensions) автоматическим присвоением блоку s4-workspace определенной ширины и высоты.

Например, параметр высота задается так:

Если лента свернута, s4-ribbonrow.высота = 44px + WebPartAdderUpdatePanelContainer.высота

Если лента развернута, s4-ribbonrow.высота = 155px + WebPartAdderUpdatePanelContainer.высота

s4-workspace.высота = window.innerHeight – s4-ribbonrow.высота – s4-ribbonrow.

Исходный код этой функции:

function FixRibbonAndWorkspaceDimensions() {
    a: ;
    g_frl = true;
    var b = GetCachedElement("s4-ribbonrow"), a = GetCachedElement("s4-workspace"), f = GetCachedElement("s4-titlerow"), c = GetCachedElement("s4-bodyContainer");
    if (!b || !a || !c) return;
    if (!g_setWidthInited) {
        var h = true;
        if (a.className.indexOf("s4-nosetwidth") > -1) h = false;
        g_setWidth = h;
        g_setWidthInited = true
    } else var h = g_setWidth;
    var l = RibbonIsMinimized() ? 44 : 135, j = l + g_wpadderHeight;
    if (GetCurrentEltStyle(b, "visibility") == "hidden") j = 0;
    b.style.height = j + "px";
    var d = g_viewportHeight;
    if (null === d) { d = GetViewportHeight(); g_viewportHeight = d } var e = d - b.offsetHeight - AbsTop(b);
    if (e < 0) e = 0; a.style.height = e + "px";
    if (h) {
        a.style.width = document.documentElement.clientWidth + "px";
        if (c.offsetWidth < a.clientWidth) c.style.width = a.clientWidth + "px";
        if (f) {
            f.style.width = Math.max(c.offsetWidth - 1, 0) + "px"; f.className += " ms-titlerowborder"
        }
    } var m = browseris.ie && browseris.iever == 7 && !browseris.ie8standard;
    if (!g_setScrollPos) {
        browseris.firefox && browseris.firefox36up && window.scroll(0, 0);
        if (window.location.search.match("[?&]IsDlg=1")) if (!m || a.scrollHeight < a.clientHeight) a.style.overflowY = "auto";
        var g = document.getElementById("_maintainWorkspaceScrollPosition");
        if (g != null && g.value != null) a.scrollTop = g.value;
        g_setScrollPos = true
    } for (var k = [].concat(g_workspaceResizedHandlers), i = 0, n = k.length; i < n; i++) k[i]();

g_frl = false
}

Можете переопределить данную функцию - в свою главную страницу скопировать данный код в блок <script> и внести необходимые изменения.

При работе в диалоге под размерами экрана подразумевается размер элемента iframe, в котором содержится страница.

Сначала автоматически под содержимое подгоняется размер iframe, а затем размер s4-workspace.

Комментариев нет:

Отправить комментарий