shimabox/screru

View on GitHub
src/View/Observer.php

Summary

Maintainability
B
6 hrs
Test Coverage
F
37%
<?php

namespace SMB\Screru\View;

use Facebook\WebDriver\Remote\RemoteWebDriver;

/**
 * Observer
 */
class Observer implements Observable
{
    /**
     * はじめて画面が描画されたときに行う処理
     * @var \Closure
     */
    private $_processForFirstRender;

    /**
     * はじめて画面が描画されたときに行う処理をセット
     * @param \Closure $func
     */
    public function processForFirstRender(\Closure $func)
    {
        $this->_processForFirstRender = $func;
    }

    /**
     * clear processForFirstRender
     */
    public function clearProcessForFirstRender()
    {
        $this->_processForFirstRender = null;
    }

    /**
     * はじめて画面が描画されたときに行う処理
     * 
     * @param RemoteWebDriver $driver
     * @param int $contentsWidth  実際のコンテンツ横幅
     * @param int $contentsHeight 実際のコンテンツ縦幅
     * @param int $scrolledWidth  現在スクロール済みの横幅
     * @param int $scrolledHeight 現在スクロール済みの縦幅
     */
    public function notifyFirstRender(
        RemoteWebDriver $driver,
        $contentsWidth,
        $contentsHeight,
        $scrolledWidth,
        $scrolledHeight
    ) {
        if ($this->_processForFirstRender === null) {
            return;
        }

        call_user_func_array($this->_processForFirstRender, [
            $driver,
            $contentsWidth,
            $contentsHeight,
            $scrolledWidth,
            $scrolledHeight
        ]);
    }

    /**
     * 画面スクロールが行われたときに行う処理
     * @var \Closure
     */
    private $_processForScreenScroll;

    /**
     * 画面スクロールが行われたときに行う処理
     * @param \Closure $func
     */
    public function processForScreenScroll(\Closure $func)
    {
        $this->_processForScreenScroll = $func;
    }

    /**
     * clear processForScreenScroll
     */
    public function clearProcessForScreenScroll()
    {
        $this->_processForScreenScroll = null;
    }

    /**
     * 画面スクロールが行われたときに行う処理
     * 
     * @param RemoteWebDriver $driver
     * @param int $contentsWidth  実際のコンテンツ横幅
     * @param int $contentsHeight 実際のコンテンツ縦幅
     * @param int $scrolledWidth  現在スクロール済みの横幅
     * @param int $scrolledHeight 現在スクロール済みの縦幅
     */
    public function notifyScreenScroll(
        RemoteWebDriver $driver,
        $contentsWidth,
        $contentsHeight,
        $scrolledWidth,
        $scrolledHeight
    ) {
        if ($this->_processForScreenScroll === null) {
            return;
        }

        call_user_func_array($this->_processForScreenScroll, [
            $driver,
            $contentsWidth,
            $contentsHeight,
            $scrolledWidth,
            $scrolledHeight
        ]);
    }

    /**
     * 横幅が最初に末端まで到達したときに行う処理
     * @var \Closure
     */
    private $_processForViewWidthHasReachedEndForFirst;

    /**
     * 横幅が最初に末端まで到達したときに行う処理をセット
     * @param \Closure $func
     */
    public function processForViewWidthHasReachedEndForFirst(\Closure $func)
    {
        $this->_processForViewWidthHasReachedEndForFirst = $func;
    }

    /**
     * clear processForViewWidthHasReachedEndForFirst
     */
    public function clearProcessForViewWidthHasReachedEndForFirst()
    {
        $this->_processForViewWidthHasReachedEndForFirst = null;
    }
 
    /**
     * 横幅が最初に末端まで到達したときに行う処理
     * 
     * @param RemoteWebDriver $driver
     * @param int $contentsWidth  実際のコンテンツ横幅
     * @param int $contentsHeight 実際のコンテンツ縦幅
     * @param int $scrolledWidth  現在スクロール済みの横幅
     * @param int $scrolledHeight 現在スクロール済みの縦幅
     */
    public function notifyThatViewWidthHasReachedEndForFirst(
        RemoteWebDriver $driver,
        $contentsWidth,
        $contentsHeight,
        $scrolledWidth,
        $scrolledHeight
    ) {
        if ($this->_processForViewWidthHasReachedEndForFirst === null) {
            return;
        }

        call_user_func_array($this->_processForViewWidthHasReachedEndForFirst, [
            $driver,
            $contentsWidth,
            $contentsHeight,
            $scrolledWidth,
            $scrolledHeight
        ]);
    }

    /**
     * 最初の縦スクロールが行われたときに行う処理
     * @var \Closure
     */
    private $_processForFirstVerticalScroll;

    /**
     * 最初の縦スクロールが行われたときに行う処理処理をセット
     * @param \Closure $func
     */
    public function processForFirstVerticalScroll(\Closure $func)
    {
        $this->_processForFirstVerticalScroll = $func;
    }

    /**
     * clear processForFirstVerticalScroll
     */
    public function clearProcessForFirstVerticalScroll()
    {
        $this->_processForFirstVerticalScroll = null;
    }

    /**
     * 最初の縦スクロールが行われたときに行う処理
     * 
     * @param RemoteWebDriver $driver
     * @param int $contentsWidth  実際のコンテンツ横幅
     * @param int $contentsHeight 実際のコンテンツ縦幅
     * @param int $scrolledWidth  現在スクロール済みの横幅
     * @param int $scrolledHeight 現在スクロール済みの縦幅
     */
    public function notifyFirstVerticalScroll(
        RemoteWebDriver $driver,
        $contentsWidth,
        $contentsHeight,
        $scrolledWidth,
        $scrolledHeight
    ) {
        if ($this->_processForFirstVerticalScroll === null) {
            return;
        }

        call_user_func_array($this->_processForFirstVerticalScroll, [
            $driver,
            $contentsWidth,
            $contentsHeight,
            $scrolledWidth,
            $scrolledHeight
        ]);
    }

    /**
     * 縦幅が最初に末端まで到達したときに行う処理
     * @var \Closure
     */
    private $_processForViewHeightHasReachedEndForFirst;

    /**
     * 縦幅が最初に末端まで到達したときに行う処理をセット
     * @param \Closure $func
     */
    public function processForViewHeightHasReachedEndForFirst(\Closure $func)
    {
        $this->_processForViewHeightHasReachedEndForFirst = $func;
    }

    /**
     * clear processForViewHeightHasReachedEndForFirst
     */
    public function clearProcessForViewHeightHasReachedEndForFirst()
    {
        $this->_processForViewHeightHasReachedEndForFirst = null;
    }

    /**
     * 縦幅が最初に末端まで到達したときに行う処理
     * 
     * @param RemoteWebDriver $driver
     * @param int $contentsWidth  実際のコンテンツ横幅
     * @param int $contentsHeight 実際のコンテンツ縦幅
     * @param int $scrolledWidth  現在スクロール済みの横幅
     * @param int $scrolledHeight 現在スクロール済みの縦幅
     */
    public function notifyThatViewHeightHasReachedEndForFirst(
        RemoteWebDriver $driver,
        $contentsWidth,
        $contentsHeight,
        $scrolledWidth,
        $scrolledHeight
    ) {
        if ($this->_processForViewHeightHasReachedEndForFirst === null) {
            return;
        }

        call_user_func_array($this->_processForViewHeightHasReachedEndForFirst, [
            $driver,
            $contentsWidth,
            $contentsHeight,
            $scrolledWidth,
            $scrolledHeight
        ]);
    }

    /**
     * 最後の画面が描画されるときに行う処理
     * @var \Closure
     */
    private $_processForLastRender;

    /**
     * 最後の画面が描画されるときに行う処理をセット
     * @param \Closure $func
     */
    public function processForLastRender(\Closure $func)
    {
        $this->_processForLastRender = $func;
    }

    /**
     * clear processForLastRender
     */
    public function clearProcessForLastRender()
    {
        $this->_processForLastRender = null;
    }

    /**
     * 最後の画面が描画されるときに行う処理
     * 
     * @param RemoteWebDriver $driver
     * @param int $contentsWidth  実際のコンテンツ横幅
     * @param int $contentsHeight 実際のコンテンツ縦幅
     * @param int $scrolledWidth  現在スクロール済みの横幅
     * @param int $scrolledHeight 現在スクロール済みの縦幅
     */
    public function notifyLastRender(
        RemoteWebDriver $driver,
        $contentsWidth,
        $contentsHeight,
        $scrolledWidth,
        $scrolledHeight
    ) {
        if ($this->_processForLastRender === null) {
            return;
        }

        call_user_func_array($this->_processForLastRender, [
            $driver,
            $contentsWidth,
            $contentsHeight,
            $scrolledWidth,
            $scrolledHeight
        ]);
    }

    /**
     * 画面の描画が完了したときに行う処理
     * @var \Closure
     */
    private $_processForRenderComplete;

    /**
     * 画面の描画が完了したときに行う処理をセット
     * @param \Closure $func
     */
    public function processForRenderComplete(\Closure $func)
    {
        $this->_processForRenderComplete = $func;
    }

    /**
     * clear processForRenderComplete
     */
    public function clearProcessForRenderComplete()
    {
        $this->_processForRenderComplete = null;
    }

    /**
     * 画面の描画が完了したときに行う処理
     * 
     * @param RemoteWebDriver $driver
     * @param int $contentsWidth  実際のコンテンツ横幅
     * @param int $contentsHeight 実際のコンテンツ縦幅
     * @param int $scrolledWidth  現在スクロール済みの横幅
     * @param int $scrolledHeight 現在スクロール済みの縦幅
     */
    public function notifyRenderComplete(
        RemoteWebDriver $driver,
        $contentsWidth,
        $contentsHeight,
        $scrolledWidth,
        $scrolledHeight
    ) {
        if ($this->_processForRenderComplete === null) {
            return;
        }

        call_user_func_array($this->_processForRenderComplete, [
            $driver,
            $contentsWidth,
            $contentsHeight,
            $scrolledWidth,
            $scrolledHeight
        ]);
    }
}