⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frames.php

📁 PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。
💻 PHP
📖 第 1 页 / 共 2 页
字号:
<?php
/**
 *  Base include file for SimpleTest
 *  @package    SimpleTest
 *  @subpackage WebTester
 *  @version    $Id: frames.php 1672 2008-03-02 04:47:34Z edwardzyang $
 */

/**#@+
 *  include other SimpleTest class files
 */
require_once(dirname(__FILE__) . '/page.php');
require_once(dirname(__FILE__) . '/user_agent.php');
/**#@-*/

/**
 *    A composite page. Wraps a frameset page and
 *    adds subframes. The original page will be
 *    mostly ignored. Implements the SimplePage
 *    interface so as to be interchangeable.
 *    @package SimpleTest
 *    @subpackage WebTester
 */
class SimpleFrameset {
    var $_frameset;
    var $_frames;
    var $_focus;
    var $_names;

    /**
     *    Stashes the frameset page. Will make use of the
     *    browser to fetch the sub frames recursively.
     *    @param SimplePage $page        Frameset page.
     */
    function SimpleFrameset(&$page) {
        $this->_frameset = &$page;
        $this->_frames = array();
        $this->_focus = false;
        $this->_names = array();
    }

    /**
     *    Adds a parsed page to the frameset.
     *    @param SimplePage $page    Frame page.
     *    @param string $name        Name of frame in frameset.
     *    @access public
     */
    function addFrame(&$page, $name = false) {
        $this->_frames[] = &$page;
        if ($name) {
            $this->_names[$name] = count($this->_frames) - 1;
        }
    }

    /**
     *    Replaces existing frame with another. If the
     *    frame is nested, then the call is passed down
     *    one level.
     *    @param array $path        Path of frame in frameset.
     *    @param SimplePage $page   Frame source.
     *    @access public
     */
    function setFrame($path, &$page) {
        $name = array_shift($path);
        if (isset($this->_names[$name])) {
            $index = $this->_names[$name];
        } else {
            $index = $name - 1;
        }
        if (count($path) == 0) {
            $this->_frames[$index] = &$page;
            return;
        }
        $this->_frames[$index]->setFrame($path, $page);
    }

    /**
     *    Accessor for current frame focus. Will be
     *    false if no frame has focus. Will have the nested
     *    frame focus if any.
     *    @return array     Labels or indexes of nested frames.
     *    @access public
     */
    function getFrameFocus() {
        if ($this->_focus === false) {
            return array();
        }
        return array_merge(
                array($this->_getPublicNameFromIndex($this->_focus)),
                $this->_frames[$this->_focus]->getFrameFocus());
    }

    /**
     *    Turns an internal array index into the frames list
     *    into a public name, or if none, then a one offset
     *    index.
     *    @param integer $subject    Internal index.
     *    @return integer/string     Public name.
     *    @access private
     */
    function _getPublicNameFromIndex($subject) {
        foreach ($this->_names as $name => $index) {
            if ($subject == $index) {
                return $name;
            }
        }
        return $subject + 1;
    }

    /**
     *    Sets the focus by index. The integer index starts from 1.
     *    If already focused and the target frame also has frames,
     *    then the nested frame will be focused.
     *    @param integer $choice    Chosen frame.
     *    @return boolean           True if frame exists.
     *    @access public
     */
    function setFrameFocusByIndex($choice) {
        if (is_integer($this->_focus)) {
            if ($this->_frames[$this->_focus]->hasFrames()) {
                return $this->_frames[$this->_focus]->setFrameFocusByIndex($choice);
            }
        }
        if (($choice < 1) || ($choice > count($this->_frames))) {
            return false;
        }
        $this->_focus = $choice - 1;
        return true;
    }

    /**
     *    Sets the focus by name. If already focused and the
     *    target frame also has frames, then the nested frame
     *    will be focused.
     *    @param string $name    Chosen frame.
     *    @return boolean        True if frame exists.
     *    @access public
     */
    function setFrameFocus($name) {
        if (is_integer($this->_focus)) {
            if ($this->_frames[$this->_focus]->hasFrames()) {
                return $this->_frames[$this->_focus]->setFrameFocus($name);
            }
        }
        if (in_array($name, array_keys($this->_names))) {
            $this->_focus = $this->_names[$name];
            return true;
        }
        return false;
    }

    /**
     *    Clears the frame focus.
     *    @access public
     */
    function clearFrameFocus() {
        $this->_focus = false;
        $this->_clearNestedFramesFocus();
    }

    /**
     *    Clears the frame focus for any nested frames.
     *    @access private
     */
    function _clearNestedFramesFocus() {
        for ($i = 0; $i < count($this->_frames); $i++) {
            $this->_frames[$i]->clearFrameFocus();
        }
    }

    /**
     *    Test for the presence of a frameset.
     *    @return boolean        Always true.
     *    @access public
     */
    function hasFrames() {
        return true;
    }

    /**
     *    Accessor for frames information.
     *    @return array/string      Recursive hash of frame URL strings.
     *                              The key is either a numerical
     *                              index or the name attribute.
     *    @access public
     */
    function getFrames() {
        $report = array();
        for ($i = 0; $i < count($this->_frames); $i++) {
            $report[$this->_getPublicNameFromIndex($i)] =
                    $this->_frames[$i]->getFrames();
        }
        return $report;
    }

    /**
     *    Accessor for raw text of either all the pages or
     *    the frame in focus.
     *    @return string        Raw unparsed content.
     *    @access public
     */
    function getRaw() {
        if (is_integer($this->_focus)) {
            return $this->_frames[$this->_focus]->getRaw();
        }
        $raw = '';
        for ($i = 0; $i < count($this->_frames); $i++) {
            $raw .= $this->_frames[$i]->getRaw();
        }
        return $raw;
    }

    /**
     *    Accessor for plain text of either all the pages or
     *    the frame in focus.
     *    @return string        Plain text content.
     *    @access public
     */
    function getText() {
        if (is_integer($this->_focus)) {
            return $this->_frames[$this->_focus]->getText();
        }
        $raw = '';
        for ($i = 0; $i < count($this->_frames); $i++) {
            $raw .= ' ' . $this->_frames[$i]->getText();
        }
        return trim($raw);
    }

    /**
     *    Accessor for last error.
     *    @return string        Error from last response.
     *    @access public
     */
    function getTransportError() {
        if (is_integer($this->_focus)) {
            return $this->_frames[$this->_focus]->getTransportError();
        }
        return $this->_frameset->getTransportError();
    }

    /**
     *    Request method used to fetch this frame.
     *    @return string      GET, POST or HEAD.
     *    @access public
     */
    function getMethod() {
        if (is_integer($this->_focus)) {
            return $this->_frames[$this->_focus]->getMethod();
        }
        return $this->_frameset->getMethod();
    }

    /**
     *    Original resource name.
     *    @return SimpleUrl        Current url.
     *    @access public
     */
    function getUrl() {
        if (is_integer($this->_focus)) {
            $url = $this->_frames[$this->_focus]->getUrl();
            $url->setTarget($this->_getPublicNameFromIndex($this->_focus));
        } else {
            $url = $this->_frameset->getUrl();
        }
        return $url;
    }

    /**
     *    Page base URL.
     *    @return SimpleUrl        Current url.
     *    @access public
     */
    function getBaseUrl() {
        if (is_integer($this->_focus)) {
            $url = $this->_frames[$this->_focus]->getBaseUrl();
        } else {
            $url = $this->_frameset->getBaseUrl();
        }
        return $url;
    }

    /**
     *    Expands expandomatic URLs into fully qualified
     *    URLs for the frameset page.
     *    @param SimpleUrl $url        Relative URL.
     *    @return SimpleUrl            Absolute URL.
     *    @access public
     */
    function expandUrl($url) {
        return $this->_frameset->expandUrl($url);
    }

    /**
     *    Original request data.
     *    @return mixed              Sent content.
     *    @access public
     */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -