<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Получение помощи — Sage Tutorial in Russian v5.9</title> <link rel="stylesheet" href="_static/sage.css" type="text/css" /> <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '', VERSION: '5.9', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true }; </script> <script type="text/javascript" src="_static/jquery.js"></script> <script type="text/javascript" src="_static/underscore.js"></script> <script type="text/javascript" src="_static/doctools.js"></script> <script type="text/javascript" src="_static/translations.js"></script> <link rel="shortcut icon" href="_static/favicon.ico"/> <link rel="top" title="Sage Tutorial in Russian v5.9" href="index.html" /> <link rel="up" title="Тур по Sage" href="tour.html" /> <link rel="next" title="Базовая алгебра и вычисления" href="tour_algebra.html" /> <link rel="prev" title="Присваивание, сравнение и арифметика" href="tour_assignment.html" /> <link rel="icon" href="_static/sageicon.png" type="image/x-icon" /> </head> <body> <div class="related"> <h3>Просмотр</h3> <ul> <li class="right" style="margin-right: 10px"> <a href="genindex.html" title="Словарь-указатель" accesskey="I">словарь</a></li> <li class="right" > <a href="py-modindex.html" title="Python Module Index" >модули</a> |</li> <li class="right" > <a href="tour_algebra.html" title="Базовая алгебра и вычисления" accesskey="N">следующий</a> |</li> <li class="right" > <a href="tour_assignment.html" title="Присваивание, сравнение и арифметика" accesskey="P">предыдущий</a> |</li> <a href="../index.html"><img src="_static/sagelogo.png" style="vertical-align: middle" title="Sage Logo"></a> <li><a href="index.html">Sage Tutorial in Russian v5.9</a> »</li> <li><a href="tour.html" accesskey="U">Тур по Sage</a> »</li> </ul> </div> <div class="document"> <div class="documentwrapper"> <div class="bodywrapper"> <div class="body"> <div class="section" id="chapter-help"> <span id="id1"></span><h1>Получение помощи<a class="headerlink" href="#chapter-help" title="Ссылка на этот заголовок">¶</a></h1> <p>В Sage есть исчерпывающая встроенная документация, к которой можно получить доступ, напечатав имя функции или константы с последующим вопросительным знаком:</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: tan?</span> <span class="go">Type: <class 'sage.calculus.calculus.Function_tan'></span> <span class="go">Definition: tan( [noargspec] )</span> <span class="go">Docstring:</span> <span class="go"> The tangent function</span> <span class="go"> EXAMPLES:</span> <span class="go"> sage: tan(pi)</span> <span class="go"> 0</span> <span class="go"> sage: tan(3.1415)</span> <span class="go"> -0.0000926535900581913</span> <span class="go"> sage: tan(3.1415/4)</span> <span class="go"> 0.999953674278156</span> <span class="go"> sage: tan(pi/4)</span> <span class="go"> 1</span> <span class="go"> sage: tan(1/2)</span> <span class="go"> tan(1/2)</span> <span class="go"> sage: RR(tan(1/2))</span> <span class="go"> 0.546302489843790</span> <span class="go">sage: log2?</span> <span class="go">Type: <class 'sage.functions.constants.Log2'></span> <span class="go">Definition: log2( [noargspec] )</span> <span class="go">Docstring:</span> <span class="go"> The natural logarithm of the real number 2.</span> <span class="go"> EXAMPLES:</span> <span class="go"> sage: log2</span> <span class="go"> log2</span> <span class="go"> sage: float(log2)</span> <span class="go"> 0.69314718055994529</span> <span class="go"> sage: RR(log2)</span> <span class="go"> 0.693147180559945</span> <span class="go"> sage: R = RealField(200); R</span> <span class="go"> Real Field with 200 bits of precision</span> <span class="go"> sage: R(log2)</span> <span class="go"> 0.69314718055994530941723212145817656807550013436025525412068</span> <span class="go"> sage: l = (1-log2)/(1+log2); l</span> <span class="go"> (1 - log(2))/(log(2) + 1)</span> <span class="go"> sage: R(l)</span> <span class="go"> 0.18123221829928249948761381864650311423330609774776013488056</span> <span class="go"> sage: maxima(log2)</span> <span class="go"> log(2)</span> <span class="go"> sage: maxima(log2).float()</span> <span class="go"> .6931471805599453</span> <span class="go"> sage: gp(log2)</span> <span class="go"> 0.6931471805599453094172321215 # 32-bit</span> <span class="go"> 0.69314718055994530941723212145817656807 # 64-bit</span> <span class="go">sage: sudoku?</span> <span class="go">File: sage/local/lib/python2.5/site-packages/sage/games/sudoku.py</span> <span class="go">Type: <type 'function'></span> <span class="go">Definition: sudoku(A)</span> <span class="go">Docstring:</span> <span class="go"> Solve the 9x9 Sudoku puzzle defined by the matrix A.</span> <span class="go"> EXAMPLE:</span> <span class="go"> sage: A = matrix(ZZ,9,[5,0,0, 0,8,0, 0,4,9, 0,0,0, 5,0,0,</span> <span class="go"> 0,3,0, 0,6,7, 3,0,0, 0,0,1, 1,5,0, 0,0,0, 0,0,0, 0,0,0, 2,0,8, 0,0,0,</span> <span class="go"> 0,0,0, 0,0,0, 0,1,8, 7,0,0, 0,0,4, 1,5,0, 0,3,0, 0,0,2,</span> <span class="go"> 0,0,0, 4,9,0, 0,5,0, 0,0,3])</span> <span class="go"> sage: A</span> <span class="go"> [5 0 0 0 8 0 0 4 9]</span> <span class="go"> [0 0 0 5 0 0 0 3 0]</span> <span class="go"> [0 6 7 3 0 0 0 0 1]</span> <span class="go"> [1 5 0 0 0 0 0 0 0]</span> <span class="go"> [0 0 0 2 0 8 0 0 0]</span> <span class="go"> [0 0 0 0 0 0 0 1 8]</span> <span class="go"> [7 0 0 0 0 4 1 5 0]</span> <span class="go"> [0 3 0 0 0 2 0 0 0]</span> <span class="go"> [4 9 0 0 5 0 0 0 3]</span> <span class="go"> sage: sudoku(A)</span> <span class="go"> [5 1 3 6 8 7 2 4 9]</span> <span class="go"> [8 4 9 5 2 1 6 3 7]</span> <span class="go"> [2 6 7 3 4 9 5 8 1]</span> <span class="go"> [1 5 8 4 6 3 9 7 2]</span> <span class="go"> [9 7 4 2 1 8 3 6 5]</span> <span class="go"> [3 2 6 7 9 5 4 1 8]</span> <span class="go"> [7 8 2 9 3 4 1 5 6]</span> <span class="go"> [6 3 5 1 7 2 8 9 4]</span> <span class="go"> [4 9 1 8 5 6 7 2 3]</span> </pre></div> </div> <p>Sage также предоставляет возможность ‘Автозавершения’: напечатайте несколько первых букв названия функции и нажмите <tt class="docutils literal"><span class="pre">TAB</span></tt>. Например, если напечатать <tt class="docutils literal"><span class="pre">ta</span></tt> и нажать <tt class="docutils literal"><span class="pre">TAB</span></tt>, Sage выведет <tt class="docutils literal"><span class="pre">tachyon,</span> <span class="pre">tan,</span> <span class="pre">tanh,</span> <span class="pre">taylor</span></tt>. Данная функция является хорошим способом поиска имен функций или других конструкций в Sage.</p> </div> <div class="section" id="section-functions"> <span id="id2"></span><h1>Функции, отступы и счетчики<a class="headerlink" href="#section-functions" title="Ссылка на этот заголовок">¶</a></h1> <p>Для того, чтобы определить функцию в Sage, используйте команду <tt class="docutils literal"><span class="pre">def</span></tt> и двоеточие после списка имен переменных:</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: def is_even(n):</span> <span class="gp">... </span> <span class="k">return</span> <span class="n">n</span><span class="o">%</span><span class="mi">2</span> <span class="o">==</span> <span class="mi">0</span> <span class="gp">...</span> <span class="go">sage: is_even(2)</span> <span class="go">True</span> <span class="go">sage: is_even(3)</span> <span class="go">False</span> </pre></div> </div> <p>Заметка: В зависимости от версии учебного пособия на второй строке этого примера можно увидеть <tt class="docutils literal"><span class="pre">...</span></tt>. Не печатайте их, так как они служат лишь для того, чтобы показать отступы в коде.</p> <p>Не определяйте типов аргументов. Можно определить несколько видов ввода, аргументы которых могут иметь значения по умолчанию. Например, функция в следующем примере использует <tt class="docutils literal"><span class="pre">divisor=2</span></tt>, если <tt class="docutils literal"><span class="pre">divisor</span></tt> не задан.</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: def is_divisible_by(number, divisor=2):</span> <span class="gp">... </span> <span class="k">return</span> <span class="n">number</span><span class="o">%</span><span class="n">divisor</span> <span class="o">==</span> <span class="mi">0</span> <span class="go">sage: is_divisible_by(6,2)</span> <span class="go">True</span> <span class="go">sage: is_divisible_by(6)</span> <span class="go">True</span> <span class="go">sage: is_divisible_by(6, 5)</span> <span class="go">False</span> </pre></div> </div> <p>Также можно задавать вводные данные в явном виде при вызове функции. Если задавать параметры явно, то порядок не важен:</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: is_divisible_by(6, divisor=5)</span> <span class="go">False</span> <span class="go">sage: is_divisible_by(divisor=2, number=6)</span> <span class="go">True</span> </pre></div> </div> <p>В Python блоки кода не отделяются фигурными скобками или другими обозначениями, как в других языках. Вместо этого используются отступы. Например, следующее выдаст синтаксическую ошибку, так как перед <tt class="docutils literal"><span class="pre">return</span></tt> нет такого же количества отступов, как в предыдущих строках.</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: def even(n):</span> <span class="gp">... </span> <span class="n">v</span> <span class="o">=</span> <span class="p">[]</span> <span class="gp">... </span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="n">n</span><span class="p">):</span> <span class="gp">... </span> <span class="k">if</span> <span class="n">i</span> <span class="o">%</span> <span class="mi">2</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> <span class="gp">... </span> <span class="n">v</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="gp">... </span> <span class="k">return</span> <span class="n">v</span> <span class="go">Syntax Error:</span> <span class="go"> return v</span> </pre></div> </div> <p>Если добавить отступы, функция будет работать:</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: def even(n):</span> <span class="gp">... </span> <span class="n">v</span> <span class="o">=</span> <span class="p">[]</span> <span class="gp">... </span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="n">n</span><span class="p">):</span> <span class="gp">... </span> <span class="k">if</span> <span class="n">i</span> <span class="o">%</span> <span class="mi">2</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> <span class="gp">... </span> <span class="n">v</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="gp">... </span> <span class="k">return</span> <span class="n">v</span> <span class="go">sage: even(10)</span> <span class="go">[4, 6, 8]</span> </pre></div> </div> <p>Точки с запятой не нужны на концах строк. Можно расположить несколько утверждений на одной строке, отделенных точками с запятой:</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: a = 5; b = a + 3; c = b^2; c</span> <span class="go">64</span> </pre></div> </div> <p>Если требуется расположить строку кода на нескольких строках, используйте <tt class="docutils literal"><span class="pre">\</span></tt>:</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: 2 + \</span> <span class="gp">... </span> <span class="mi">3</span> <span class="go">5</span> </pre></div> </div> <p>В Sage счетчики производят итерации по интервалу целых чисел. Например, первая строчка в примере означает то же самое, что <tt class="docutils literal"><span class="pre">for(i=0;</span> <span class="pre">i<3;</span> <span class="pre">i++)</span></tt> в C++ или Java:</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: for i in range(3):</span> <span class="gp">... </span> <span class="k">print</span> <span class="n">i</span> <span class="go">0</span> <span class="go">1</span> <span class="go">2</span> </pre></div> </div> <p>Первая строчка в следующем примере эквивалентна <tt class="docutils literal"><span class="pre">for(i=2;i<5;i++)</span></tt>.</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: for i in range(2,5):</span> <span class="gp">... </span> <span class="k">print</span> <span class="n">i</span> <span class="go">2</span> <span class="go">3</span> <span class="go">4</span> </pre></div> </div> <p>Третий аргумент задает шаг. Следующее эквивалентно <tt class="docutils literal"><span class="pre">for(i=1;i<6;i+=2)</span></tt>.</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: for i in range(1,6,2):</span> <span class="gp">... </span> <span class="k">print</span> <span class="n">i</span> <span class="go">1</span> <span class="go">3</span> <span class="go">5</span> </pre></div> </div> <p>Часто требуется создать таблицу для вывода чисел, посчитанных в Sage. Легкий способ — использовать форматирование строк. Ниже создается таблица с тремя столбцами шириной 6, содержащая таблицу квадратов и кубов:</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: for i in range(5):</span> <span class="gp">... </span> <span class="k">print</span> <span class="s">'</span><span class="si">%6s</span><span class="s"> </span><span class="si">%6s</span><span class="s"> </span><span class="si">%6s</span><span class="s">'</span><span class="o">%</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">i</span><span class="o">^</span><span class="mi">2</span><span class="p">,</span> <span class="n">i</span><span class="o">^</span><span class="mi">3</span><span class="p">)</span> <span class="go"> 0 0 0</span> <span class="go"> 1 1 1</span> <span class="go"> 2 4 8</span> <span class="go"> 3 9 27</span> <span class="go"> 4 16 64</span> </pre></div> </div> <p>Самым базовым типом данных в Sage является список — набор различных объектов. Например, команда <tt class="docutils literal"><span class="pre">range</span></tt> создаст список:</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: range(2,10)</span> <span class="go">[2, 3, 4, 5, 6, 7, 8, 9]</span> </pre></div> </div> <p>Далее показан пример более сложного списка:</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: v = [1, "hello", 2/3, sin(x^3)]</span> <span class="go">sage: v</span> <span class="go">[1, 'hello', 2/3, sin(x^3)]</span> </pre></div> </div> <p>Индексы в списке начинаются с нуля, как во многих языках программирования.</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: v[0]</span> <span class="go">1</span> <span class="go">sage: v[3]</span> <span class="go">sin(x^3)</span> </pre></div> </div> <p>Используйте <tt class="docutils literal"><span class="pre">len(v)</span></tt> для того, чтобы получить длину <tt class="docutils literal"><span class="pre">v</span></tt>; <tt class="docutils literal"><span class="pre">v.append(obj)</span></tt> для того, чтобы добавить новый объект к концу <tt class="docutils literal"><span class="pre">v</span></tt>, и <tt class="docutils literal"><span class="pre">del</span> <span class="pre">v[i]</span></tt>, чтобы удалить <img class="math" src="_images/math/34857b3ba74ce5cd8607f3ebd23e9015908ada71.png" alt="i"/>-й элемент из <tt class="docutils literal"><span class="pre">v</span></tt>:</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: len(v)</span> <span class="go">4</span> <span class="go">sage: v.append(1.5)</span> <span class="go">sage: v</span> <span class="go">[1, 'hello', 2/3, sin(x^3), 1.50000000000000]</span> <span class="go">sage: del v[1]</span> <span class="go">sage: v</span> <span class="go">[1, 2/3, sin(x^3), 1.50000000000000]</span> </pre></div> </div> <p>Другой очень важный тип данных — словарь (или ассоциативный массив). Он работает, как список, но может быть индексирован почти любым объектом (индексы должны быть неизменимыми):</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: d = {'hi':-2, 3/8:pi, e:pi}</span> <span class="go">sage: d['hi']</span> <span class="go">-2</span> <span class="go">sage: d[e]</span> <span class="go">pi</span> </pre></div> </div> <p>Также можно определить новый тип данных с использованием классов. Инкапсулирование математических объектов в классах — это мощная техника, которая может помочь упростить и организовать программы в Sage. Ниже показан пример класса, который состоит из списка положительных чётных целых чисел до <em>n</em>; он получен из встроенного типа <tt class="docutils literal"><span class="pre">list</span></tt>.</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: class Evens(list):</span> <span class="gp">... </span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">n</span><span class="p">):</span> <span class="gp">... </span> <span class="bp">self</span><span class="o">.</span><span class="n">n</span> <span class="o">=</span> <span class="n">n</span> <span class="gp">... </span> <span class="nb">list</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">range</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="n">n</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">))</span> <span class="gp">... </span> <span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="gp">... </span> <span class="k">return</span> <span class="s">"Even positive numbers up to n."</span> </pre></div> </div> <p>Метод <tt class="docutils literal"><span class="pre">__init__</span></tt> вызывается для инициализации объекта при его создании; метод <tt class="docutils literal"><span class="pre">__repr__</span></tt> выведет все объекты. Конструктор списка вызывается во второй строчке метода <tt class="docutils literal"><span class="pre">__init__</span></tt>. Объект класса <tt class="docutils literal"><span class="pre">Evens</span></tt> создается в следующем виде:</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: e = Evens(10)</span> <span class="go">sage: e</span> <span class="go">Even positive numbers up to n.</span> </pre></div> </div> <p>Заметьте, что <tt class="docutils literal"><span class="pre">e</span></tt> выводится с помощью метода <tt class="docutils literal"><span class="pre">__repr__</span></tt>, который был задан нами. Для просмотра списка чисел используйте функцию <tt class="docutils literal"><span class="pre">list</span></tt>:</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: list(e)</span> <span class="go">[2, 4, 6, 8, 10]</span> </pre></div> </div> <p>Можно обратиться к атрибуту <tt class="docutils literal"><span class="pre">n</span></tt> или использовать <tt class="docutils literal"><span class="pre">e</span></tt> как список.</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: e.n</span> <span class="go">10</span> <span class="go">sage: e[2]</span> <span class="go">6</span> </pre></div> </div> </div> </div> </div> </div> <div class="sphinxsidebar"> <div class="sphinxsidebarwrapper"> <h3><a href="index.html">Содержание</a></h3> <ul> <li><a class="reference internal" href="#">Получение помощи</a></li> <li><a class="reference internal" href="#section-functions">Функции, отступы и счетчики</a></li> </ul> <h4>Предыдущий раздел</h4> <p class="topless"><a href="tour_assignment.html" title="предыдущая глава">Присваивание, сравнение и арифметика</a></p> <h4>Следующий раздел</h4> <p class="topless"><a href="tour_algebra.html" title="следующая глава">Базовая алгебра и вычисления</a></p> <h3>На этой странице</h3> <ul class="this-page-menu"> <li><a href="_sources/tour_help.txt" rel="nofollow">Показать исходный текст</a></li> </ul> <div id="searchbox" style="display: none"> <h3>Быстрый поиск</h3> <form class="search" action="search.html" method="get"> <input type="text" name="q" size="18" /> <!-- The shading of the "Go" button should be consistent --> <!-- with the colour of the header and footer. See the file --> <!-- doc/common/themes/sage/theme.conf for colours used by --> <!-- the Sage theme. --> <input type="submit" style="background-color: #B8B9F6" value="Искать" /> <input type="hidden" name="check_keywords" value="yes" /> <input type="hidden" name="area" value="default" /> </form> <p class="searchtip" style="font-size: 90%"> Введите слова для поиска или имя модуля, класса или функции. </p> </div> <script type="text/javascript">$('#searchbox').show(0);</script> </div> </div> <div class="clearer"></div> </div> <div class="related"> <h3>Просмотр</h3> <ul> <li class="right" style="margin-right: 10px"> <a href="genindex.html" title="Словарь-указатель" >словарь</a></li> <li class="right" > <a href="py-modindex.html" title="Python Module Index" >модули</a> |</li> <li class="right" > <a href="tour_algebra.html" title="Базовая алгебра и вычисления" >следующий</a> |</li> <li class="right" > <a href="tour_assignment.html" title="Присваивание, сравнение и арифметика" >предыдущий</a> |</li> <a href="../index.html"><img src="_static/sagelogo.png" style="vertical-align: middle" title="Sage Logo"></a> <li><a href="index.html">Sage Tutorial in Russian v5.9</a> »</li> <li><a href="tour.html" >Тур по Sage</a> »</li> </ul> </div> <div class="footer"> © Copyright 2005--2011, The Sage Development Team. При создании использован <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3. </div> <script type="text/javascript"> /*global jQuery, window */ /* Sphinx sidebar toggle. Putting this code at the end of the body * enables the toggle for the live, static, and offline docs. Note: * sage.misc.html.math_parse() eats jQuery's dollar-sign shortcut. */ var jq = jQuery; jq(document).ready(function () { var bar, bod, bg, fg, key, tog, wid_old, wid_new, resize, get_state, set_state; bod = jq('div.bodywrapper'); bar = jq('div.sphinxsidebar'); tog = jq('<div class="sphinxsidebartoggle"></div>'); /* Delayed resize helper. Not perfect but good enough. */ resize = function () { setTimeout(function () { tog.height(bod.height()); }, 100); }; jq(window).resize(function () { resize(); }); /* Setup and add the toggle. See Sphinx v0.5.1 default.css. */ fg = jq('div.sphinxsidebar p a').css('color') || 'rgb(152, 219, 204)'; bg = jq('div.document').css('background-color') || 'rgb(28, 78, 99)'; wid_old = '230px'; wid_new = '5px'; tog.css('background-color', bg) .css('border-width', '0px') .css('border-right', wid_new + ' ridge ' + bg) .css('cursor', 'pointer') .css('position', 'absolute') .css('left', '-' + wid_new) .css('top', '0px') .css('width', wid_new); bod.css('position', 'relative'); bod.prepend(tog); resize(); /* Cookie helpers. */ key = 'sphinxsidebar='; set_state = function (s) { var date = new Date(); /* Expiry in 7 days. */ date.setTime(date.getTime() + (7 * 24 * 3600 * 1000)); document.cookie = key + encodeURIComponent(s) + '; expires=' + date.toUTCString() + '; path=/'; }; get_state = function () { var i, c, crumbs = document.cookie.split(';'); for (i = 0; i < crumbs.length; i += 1) { c = crumbs[i].replace(/^\s+/, ''); if (c.indexOf(key) === 0) { return decodeURIComponent(c.substring(key.length, c.length)); } } return null; }; /* Event handlers. */ tog.mouseover(function (ev) { tog.css('border-right-color', fg); }).mouseout(function (ev) { tog.css('border-right-color', bg); }).click(function (ev) { if (bod.hasClass('wide')) { bod.removeClass('wide'); bod.css('margin-left', wid_old); bar.css('width', wid_old); bar.show(); set_state('visible'); } else { set_state('hidden'); bar.hide(); bar.css('width', '0px'); bod.css('margin-left', wid_new); bod.addClass('wide'); } resize(); }); /* Hide the normally visible sidebar? */ if (get_state() === 'hidden') { tog.trigger('click'); } else { set_state('visible'); } }); </script> </body> </html>