diff --git a/media/CodeMirror-0.62/LICENSE b/media/CodeMirror-0.62/LICENSE deleted file mode 100644 index 44ceed6..0000000 --- a/media/CodeMirror-0.62/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ - Copyright (c) 2007-2009 Marijn Haverbeke - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any - damages arising from the use of this software. - - Permission is granted to anyone to use this software for any - purpose, including commercial applications, and to alter it and - redistribute it freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must - not claim that you wrote the original software. If you use this - software in a product, an acknowledgment in the product - documentation would be appreciated but is not required. - - 2. Altered source versions must be plainly marked as such, and must - not be misrepresented as being the original software. - - 3. This notice may not be removed or altered from any source - distribution. - - Marijn Haverbeke - marijnh at gmail diff --git a/media/CodeMirror-0.62/bigtest.html b/media/CodeMirror-0.62/bigtest.html deleted file mode 100644 index 04ebcda..0000000 --- a/media/CodeMirror-0.62/bigtest.html +++ /dev/null @@ -1,1296 +0,0 @@ - -
- -This page demonstrates CodeMirror's -JavaScript parser. Note that the ugly buttons at the top are not are -not part of CodeMirror proper -- they demonstrate the way it can be -embedded in a web-application.
- -This page demonstrates CodeMirror's -Lua parser. Written by Franciszek -Wawrzak, released under a BSD-style license.
- -This is a complex demonstration of the PHP+HTML+JavaScript+CSS mixed-mode - syntax highlight capabilities of CodeMirror. - <?php ... ?> tags use the PHP parser, <script> tags use the JavaScript - parser, and <style> tags use the CSS parser. The rest of the content is - parsed using the XML parser in HTML mode.
- -Features of the PHP parser: -
- This is a simple demonstration of the Python syntax highlighting module - for CodeMirror. -
-- Features of this parser include: -
-Written by Timothy Farrell (license). Special -thanks to Adam Brand and Marijn Haverbeke for their help in debugging -and providing for this parser.
- -Demonstration of CodeMirror's CSS -highlighter.
- -This is a simple demonstration of the XML/HTML indentation module -for CodeMirror. The javascript file contains some comments with -more information.
- -CodeMirror is a JavaScript library that can be used to create a -relatively pleasant editor interface for code-like content ― -computer programs, HTML markup, and similar. If a parser has been -written for the language you are editing (see below for a list of -supported languages), the code will be coloured, and the editor will -help you with indentation.
- -To get a look at CodeMirror, see the test pages for the various -parsers...
- -Or take a look at some real-world uses of the system...
- -30-05-2009: Version
-0.62: Introduces Python
-and Lua parsers. Add
-setParser
(on-the-fly mode changing) and
-clearHistory
methods. Make parsing passes time-based
-instead of lines-based (see the passTime
option).
04-03-2009: Version
-0.61: Add line numbers support (see lineNumbers
-option in manual). Support a mode where tab
-'shifts' indentation instead of resetting it (see
-tabMode="shift"
). Add indentUnit
option to
-configure indentation depths. Make it possible to grab the editor's
-keyboard input, which is useful when popping up dialogs (see
-grabKeys
/ungrabKeys
). Fix a lot of small
-bugs, among which the various issues related to pasting in Internet
-Explorer.
29-12-2008: Version
-0.60: This release makes lots of internal changes, so test before
-you upgrade. More robust selection-preservation on IE, allowing styles
-with different font sizes. New activeTokens
and
-cursorActivity
callbacks, and a more powerful, line-based
-interface for inspecting and manipulating the content of the editor
-(see manual). Fixes the
-replaceSelection
problem in IE, and a lot of other,
-smaller issues.
28-09-2008: Version
-0.58: Add parsers for SPARQL and HTML-mixed-mode (nests CSS and JS
-parsers). Also: bracket highlighting, a 'dumb tabs' mode, an
-onChange
callback, and heaps of bugfixes. See the manual
-for details on the new features.
04-07-2008: Version -0.57: A CSS parser and a nice tokenizer framework, bugfixes in the -XML parser, a few browser-issue workarounds, one of which should fix -the age-old Firefox cursor-showing-on-wrong line bug.
- -At this time, the following browsers are supported:
- -Making it work on other browsers that have decent support for the -W3C DOM model should not be too hard, but I am not actively testing -against those.
- -All of CodeMirror is released under a zlib-style license. To get it, you can download the -latest -release or the current development -snapshot as zip files, or use the darcs version control system to get -the repository:
- -darcs get http://marijn.haverbeke.nl/codemirror- -
This second method is recommended if you are planning to hack on -CodeMirror ― it makes it easy to record your patches and share them -with me. To see the repository online, visit the CodeMirror -darcsweb.
- -There is a Google group (a -sort of mailing list/newsgroup thingy) for discussion and news related -to CodeMirror. You can also e-mail me directly: Marijn Haverbeke.
- -This page demonstrates CodeMirror's -JavaScript parser. Note that the ugly buttons at the top are not are -not part of CodeMirror proper -- they demonstrate the way it can be -embedded in a web-application.
- -Inside the editor, the tab key is used to re-indent the current - selection (or the current line when nothing is selected), and - pressing enter will, apart from inserting a line break, - automatically indent the new line. Pressing control-enter will - cause the whole buffer to be re-coloured, which can be helpful - when some colouring has become out-of-date without the editor - noticing it.
- -The editor sports an undo/redo system, accessible with - control-z (undo) and control-y (redo). Safari will not allow - client scripts to capture control-z presses, but you can use - control-backspace instead on that browser.
- -The key-combination control-[ triggers a paren-blink: If the - cursor is directly after a '(', ')', '[', ']', '{', or '}', the - editor looks for the matching character, and highlights these - characters for a moment. There is an option to enable this to - happen any time the user types something or moves the cursor.
- -To use CodeMirror in a document, you should add a script tag to
- load codemirror.js
. This
- adds two objects to your environment, CodeMirror
and
- CodeMirrorConfig
. The first is the interface to the
- editor, the second can be used to configure it. (Note that this is
- the only name-space pollution you can expect from CodeMirror --
- all other cruft is kept inside the IFRAMEs that it creates when
- you open an editor.)
To add an editor to a document, you must choose a place, a - parser, and a style-sheet for it. For example, to append an - XML editor to the body of the document, you do:
- -var editor = new CodeMirror(document.body, { - parserfile: "parsexml.js", - stylesheet: "xmlcolors.css" -});- -
The first argument to the CodeMirror
constructor
- can be a DOM node, in which case the editor gets appended to that
- node, or a function, which will be called with the IFRAME node as
- argument, and which is expected to place that node somewhere in
- the document.
The second (optional) argument is an object that specifies
- options. A set of default options (see below) is present in the
- CodeMirrorConfig
object, but each instance of the
- editor can be given a set of specific options to override these
- defaults. In this case, we specified that the parser should be
- loaded from the "parsexml.js"
file, and
- that "xmlcolors.css"
- should be used to specify the colours of the code.
Another example:
- -var editor = new CodeMirror(CodeMirror.replace("inputfield"), { - parserfile: ["tokenizejavascript.js", "parsejavascript.js"], - path: "lib/codemirror/js/", - stylesheet: "lib/codemirror/css/jscolors.css", - content: document.getElementById("inputfield").value -});- -
Here we use the utility function
- CodeMirror.replace
to create a function that will
- replace a node in the current document (given either directly or
- by ID) with the editor. We also select the JavaScript parser this
- time, and give a path
option to tell the editor that
- its files are not located in the same directory as the current
- HTML page, but in "lib/codemirror/"
.
There is a function
- CodeMirror.isProbablySupported()
that causes some
- 1998-style browser detection to happen, returning
- false
if CodeMirror is probably not supported on the
- browser, true
if it probably is, and
- null
if it has no idea. As the name suggests, this is
- not something you can rely on, but it's usually better than
- nothing.
Another utility function, CodeMirror.fromTextArea
,
- will, given a textarea node or the id of such a node, hide the
- textarea and replace it with a CodeMirror frame. If the textarea
- was part of a form, an onsubmit
handler will be
- registered with this form, which will load the content of the
- editor into the textarea, so that it can be submitted as normal.
- This function optionally takes a configuration object as second
- argument.
var editor = CodeMirror.fromTextArea("inputfield", { - parserfile: ["tokenizejavascript.js", "parsejavascript.js"], - path: "lib/codemirror/js/", - stylesheet: "lib/codemirror/css/jscolors.css" -});- -
The reason that the script path has to be configured is that - CodeMirror will load in a bunch of extra files when an editor is - created (the parser script, among others). To be able to do this, - it has to know where to find them. These are all the JavaScript - files that are part of CodeMirror itself:
- -codemirror.js
editor.js
util.js
undo.js
stringstream.js
select.js
tokenize.js
Most of these are rather full of comments, which can be useful
- when you are trying to figure out how they work, but wastes a lot
- of bandwidth in a production system. Take a look at the
- description of the basefiles
option below if you want
- to concatenate and minimise the library.
Apart from these, there are files that implement the various
- parsers. These all start with either parse
or
- tokenize
.
There are three ways to configure CodeMirror:
- -CodeMirrorConfig
object
- before loading codemirror.js
, the
- configuration options in that object will override the
- defaults.CodeMirrorConfig
object, configuration defaults can
- be overridden after loading codemirror.js
.CodeMirror
constructor can be given a second
- argument, an object, which will override some options for just
- that editor. Options not mentioned in this object will default to
- the values in the CodeMirrorConfig
object.The options that can be specified are these (most have sensible
- defaults specified in codemirror.js
):
stylesheet
jscolors.css
for an
- example.path
parserfile
basefiles
["util.js", "stringstream.js", "select.js", "undo.js",
- "editor.js", "tokenize.js"]
, but if you put them all into
- a single file to reduce latency, or add some functionality, you
- might have to adjust that.iframeClass
null
.passDelay
passTime
continuousScanning
false
, scanning is
- disabled. When set to a number, say N
, a
- 'background' process will scan the document for
- passTime
(see above) milliseconds every
- N
milliseconds, regardless of whether anything
- changed. This makes sure non-local changes propagate through the
- document, and will help keep everything consistent. It does add
- extra processing cost, even for an idle editor. Default value is
- false
.autoMatchParens
true
,
- will cause parens to be matched every time a key is pressed or
- the user clicks on the document. Defaults to false
.
- Might be expensive for big documents.saveFunction
null
.undoDepth
onChange
undoDelay
width
, height
"600px"
or "100%"
).disableSpellcheck
true
, since for most code spell-checking
- is useless.textWrapping
true
.lineNumbers
CodeMirror-line-numbers
CSS class (in the outer
- document) to configure the width, font, colors, etcetera for the
- line-number DIV. You have to make sure that lines in the
- numbering element have the same height as lines in the editor.
- This is most easily done by giving them both the same font and
- an absolute ('pt' or 'px') font size. This option defaults to
- false
. When enabling this, you have to disable
- textWrapping
, since the line numbers don't take
- wrapped lines into account.indentUnit
2
.tabMode
"indent"
"spaces"
"default"
"shift"
indentUnit
- deeper, pressing shift-tab or ctrl-tab (whichever your browser
- does not interfere with), un-indents it.reindentOnLoad
true
,
- this causes the content of the editor to be reindented
- immediately when the editor loads. Defaults to
- false
.readOnly
true
,
- the document is not editable.initCallback
cursorActivity
activeTokens
(spanNode, tokenObject,
- editor)
arguments whenever a new token node is being
- added to the document. Can be used to do things like add event
- handlers to nodes. Should not change the DOM structure
- of the node (so no turning the span into a link), since this
- will greatly confuse the editor.parserConfig
content
options
object passed to
- individual editors as they are created.(If you want to use a CodeMirror parser to highlight a piece of
- text, without creating an editor, see this example, and the highlight.js
script.)
The following parsers come with the distribution of CodeMirror:
- -parsexml.js
(demo)useHTMLKludges
configuration option (see the
- parserConfig
option
- above), which specifies whether the content of the editor is
- HTML or XML, and things like self-closing tags (br
,
- img
) exist. This defaults to true
.
- Example colours for the styles that this parser uses are defined
- in css/xmlcolors.css
.tokenizejavascript.js
,
- parseejavascript.js
(demo)css/jscolors.css
parsecss.js
(demo)css/csscolors.css
parsehtmlmixed.js
(demo)parserfile
option looks something
- like ["parsexml.js", "parsecss.js",
- "tokenizejavascript.js", "parsejavascript.js",
- "parsehtmlmixed.js"]
.parsesparql.js
- (demo)css/sparqlcolors.css
parsedummy.js
contrib/php/js/parsephp.js
- (demo)contrib/python/js/parsepython.js
- (demo)contrib/lua/js/parselua.js
- (demo)To be as flexible as possible, CodeMirror implements a very
- plain editable field, without any accompanying buttons, bells, and
- whistles. CodeMirror
objects do, however, provide a
- number of methods that make it possible to add extra functionality
- around the editor. mirrorframe.js
provides a
- basic example of their usage.
getCode()
→
- string
setCode(string)
focus()
currentLine()
→
- number
jumpToLine(number)
selection()
→
- string
replaceSelection(string)
reindent()
reindentSelection()
getSearchCursor(string, atCursor)
→
- cursor
true
)
- or at the start of the document (false
). Returns an
- object that provides an interface for searching. Call its
- findNext()
method to search for an occurrence of
- the given string. This returns true
if something is
- found, or false
if the end of document is reached.
- When an occurrence has been found, you can call
- select()
to select it, or
- replace(string)
to replace it with a given string.
- Note that letting the user change the document, or
- programmatically changing it in any way except for calling
- replace
on the cursor itself, might cause a cursor
- object to skip back to the beginning of the document.undo()
redo()
historySize() → object
{undo, redo}
object holding the sizes of the undo
- and redo histories.clearHistory()
grabKeys(callback, filter)
normalizeEvent
in util.js
) keydown
- event object. If a second argument is given, this will be used
- to determine which events to apply the callback to. It should
- take a key code (as in event.keyCode
), and return a
- boolean, where true
means the event should be
- routed to the callback, and false
leaves the key to
- perform its normal behaviour.ungrabKeys()
grabKeys
.setParser(name)
CSSParser
).For detailed interaction with the content of the editor,
- CodeMirror exposes a line-oriented interface, which allows you to
- inspect and manipulate the document line by line. Line handles
- should be considered opaque (they are in fact the BR
- nodes at the start of the line), except that the value
- false
(but not null
) always
- denotes an invalid value. Since changing the document might cause
- some line handles to become invalid, every function that takes
- them as argument can throw
- CodeMirror.InvalidLineHandle
. These are the relevant
- methods:
cursorPosition(start)
→
- object
{line,
- character}
object representing the cursor position.
- start
defaults to true
and determines
- if the startpoint or the endpoint of the selection is used.firstLine()
→
- handle
lastLine()
→
- handle
nextLine(handle)
→
- handle
false
if that was the last line.prevLine(handle)
→
- handle
false
if that was the first line.nthLine(number)
→
- handle
false
if there is no such line.lineContent(handle)
→
- string
setLineContent(handle, string)
lineNumber(handle)
→
- number
selectLines(startHandle, startOffset,
- endHandle, endOffset)
endHandle
and
- endOffset
can be omitted to just place the cursor
- somewhere without selecting any text.insertIntoLine(handle, position,
- text)
position
can be an integer, specifying the position
- in the line where the text should be inserted, or the string
- "end"
, for the end of the line.A parser is implemented by one or more files (see
- parserfile
above) which, when loaded, add a
- Parser
object to the Editor
object
- defined by editor.js
. This
- object must support the following interface:
make(stream)
stringstream.js
),
- creates a parser. The behaviour of this parser is described
- below.electricChars
"{}"
for c-like languages).configure(object)
parserConfig
option, it will be
- called with the value of that option.firstIndentation(chars, current,
- direction)
0
is used.When the make
method is called with a string
- stream, it should return a MochiKit-style iterator: an object with
- a next
method, which will raise
- StopIteration
when it is at its end (see this
- for details). This iterator, when called, will consume input from
- the string stream, and produce a token object.
Token objects represent a single significant piece of the text
- that is being edited. A token object must have a
- value
property holding the text it stands for, and a
- style
property with the CSS class that should be used
- to colour this element. This can be anything, except that any
- whitespace at the start of a line should always have
- class "whitespace"
: The editor must be able to
- recognize these when it indents lines. Furthermore, each newline
- character must have its own separate token, which has an
- indentation
property holding a function that can be
- used to determine the proper indentation level for the next line.
- This function optionally takes the text in the first token of the
- next line, the current indentation of the line, and the
- 'direction' of the indentation as arguments, which it can use to
- adjust the indentation level. The direction argument is only
- useful for modes in which lines do not have a fixed indentation,
- and can be modified by multiple tab presses. It is
- null
for 'default' indentations (like what happens
- when the user presses enter), true
for regular tab
- presses, and false
for control-tab or shift-tab.
So far this should be pretty easy. The hard part is that this
- iterator must also have a copy
method. This method,
- called without arguments, returns a function representing the
- current state of the parser. When this state function is later
- called with a string stream as its argument, it returns a parser
- object that resumes parsing using the old state and the new input
- stream. It may assume that only one parser is active at a time,
- and can clobber the state of the old parser if it wants.
For examples, see parsejavascript.js
,
- parsexml.js
, and parsecss.js
.
This is a simple demonstration of the HTML mixed-mode indentation -module for CodeMirror. Script tags use the JS -parser, style tags use the CSS parser.
- -Demonstration of CodeMirror's Sparql -highlighter.
- -
- Topic: JavaScript, advanced browser weirdness, cool programming techniques
- Audience: Programmers, especially JavaScript programmers
- Author: Marijn Haverbeke
- Date: May 24th 2007
-
Note: some of the details given here no - longer apply to the current CodeMirror - codebase, which has evolved quite a bit in the meantime.
- -In one of his (very informative) video - lectures, Douglas Crockford remarks that writing JavaScript - for the web is 'programming in a hostile environment'. I had done - my fair share of weird workarounds, and even occasonally gave up - an on idea entirely because browsers just wouldn't support it, but - before this project I never really realized just how powerless a - programmer can be in the face of buggy, incompatible, and poorly - designed platforms.
- -The plan was not ridiculously ambitious. I wanted to 'enhance' a - textarea to the point where writing code in it is pleasant. This meant - automatic indentation and, if possible at all, syntax highlighting.
- -In this document I describe the story of implementing this, for your - education and amusement. A demonstration of the resulting program, - along with the source code, can be found at my website.
- -The very first attempt merely added auto-indentation to a textarea - element. It would scan backwards through the content of the area, - starting from the cursor, until it had enough information to decide - how to indent the current line. It took me a while to figure out a - decent model for indenting JavaScript code, but in the end this seems - to work:
- -When scanning backwards through code one has to take string values, - comments, and regular expressions (which are delimited by slashes) - into account, because braces and semicolons and such are not - significant when they appear inside them. Single-line ('//') comments - turned out to be rather inefficient to check for when doing a - backwards scan, since every time you encounter a newline you have to - go on to the next newline to determine whether this line ends in a - comment or not. Regular expressions are even worse ― without - contextual information they are impossible to distinguish from the - division operator, and I didn't get them working in this first - version.
- -To find out which line to indent, and to make sure that adding or - removing whitespace doesn't cause the cursor to jump in strange ways, - it is necessary to determine which text the user has selected. Even - though I was working with just a simple textarea at this point, this - was already a bit of a headache.
- -On W3C-standards-respecting browsers, textarea nodes have
- selectionStart
and selectionEnd
- properties which nicely give you the amount of characters before
- the start and end of the selection. Great!
Then, there is Internet Explorer. Internet Explorer also has an API - for looking at and manipulating selections. It gives you information - such as a detailed map of the space the selected lines take up on the - screen, in pixels, and of course the text inside the selection. It - does, however, not give you much of a clue on where the selection is - located in the document.
- -After some experimentation I managed to work out an elaborate
- method for getting something similar to the
- selectionStart
and selectionEnd
values
- in other browsers. It worked like this:
TextRange
object corresponding to the selection.TextRange
that covers the whole textarea element.TextRange
to the start of the second one.selectionEnd
is the second length, and selectionStart
is
- the second minus the first one.That seemed to work, but when resetting the selection after modifying
- the content of the textarea I ran into another interesting feature of
- these TextRange
s: You can move their endpoints by a given number of
- characters, which is useful when trying to set a cursor at the Nth
- character of a textarea, but in this context, newlines are not
- considered to be characters, so you'll always end up one character too
- far for every newline you passed. Of course, you can count newlines
- and compensate for this (though it is still not possible to position
- the cursor right in front of a newline). Sheesh.
After ragging on Internet Explorer for a while, let us move on and rag - on Firefox a bit. It turns out that, in Firefox, getting and setting - the text content of a DOM element is unexplainably expensive, - especially when there is a lot of text involved. As soon as I tried to - use my indentation code to indent itself (some 400 lines), I found - myself waiting for over four seconds every time I pressed enter. That - seemed a little slow.
- -The solution was obvious: Since the text inside a textarea can only be
- manipulated as one single big string, I had to spread it out over
- multiple nodes. How do you spread editable content over multiple
- nodes? Right! designMode
or contentEditable
.
Now I wasn't entirely naive about designMode
, I had been looking
- into writing a non-messy WYSIWYG editor before, and at that time I had
- concluded two things:
Basically, the good folks at Microsoft designed a really bad interface - for putting editable documents in pages, and the other browsers, not - wanting to be left behind, more or less copied that. And there isn't - much hope for a better way to do this appearing anytime soon. Wise - people probably use a Flash movie or (God forbid) a Java applet for - these kind of things, though those are not without drawbacks either.
- -Anyway, seeing how using an editable document would also make syntax - highlighting possible, I foolishly went ahead. There is something - perversely fascinating about trying to build a complicated system on a - lousy, unsuitable platform.
- -How does one do decent syntax highlighting? A very simple scanning can - tell the difference between strings, comments, keywords, and other - code. But this time I wanted to actually be able to recognize regular - expressions, so that I didn't have any blatant incorrect behaviour - anymore.
- -That brought me to the idea of doing a serious parse on the code. This - would not only make detecting regular expressions much easier, it - would also give me detailed information about the code, which can be - used to determine proper indentation levels, and to make subtle - distinctions in colouring, for example the difference between variable - names and property names.
- -And hey, when we're parsing the whole thing, it would even be possible
- to make a distinction between local and global variables, and colour
- them differently. If you've ever programmed JavaScript you can
- probably imagine how useful this would be ― it is ridiculously easy
- to accidentally create global instead of local variables. I don't
- consider myself a JavaScript rookie anymore, but it was (embarrasingly
- enough) only this week that I realized that my habit of typing for
- (name in object) ...
was creating a global variable name
, and that
- I should be typing for (var name in object) ...
instead.
Re-parsing all the code the user has typed in every time he hits a key - is obviously not feasible. So how does one combine on-the-fly - highlighting with a serious parser? One option would be to split the - code into top-level statements (functions, variable definitions, etc.) - and parse these separately. This is horribly clunky though, especially - considering the fact that modern JavaScripters often put all the code - in a file in a single big object or function to prevent namespace - pollution.
- -I have always liked continuation-passing style and generators. So the - idea I came up with is this: An interruptable, resumable parser. This - is a parser that does not run through a whole document at once, but - parses on-demand, a little bit at a time. At any moment you can create - a copy of its current state, which can be resumed later. You start - parsing at the top of the code, and keep going as long as you like, - but throughout the document, for example at every end of line, you - store a copy of the current parser state. Later on, when line 106 - changes, you grab the interrupted parser that was stored at the end of - line 105, and use it to re-parse line 106. It still knows exactly what - the context was at that point, which local variables were defined, - which unfinished statements were encountered, and so on.
- -But that, unfortunately, turned out to be not quite as easy as it - sounds.
- -Of course, when working inside an editable frame we don't just
- have to deal with text. The code will be represented by some kind
- of DOM tree. My first idea was to set the white-space:
- pre
style for the frame and try to work with mostly text,
- with the occasional coloured span
element. It turned
- out that support for white-space: pre
in browsers,
- especially in editable frames, is so hopelessly glitchy that this
- was unworkable.
Next I tried a series of div
elements, one per
- line, with span
elements inside them. This seemed to
- nicely reflect the structure of the code in a shallowly
- hierarchical way. I soon realized, however, that my code would be
- much more straightfoward when using no hierarchy whatsoever
- ― a series of span
s, with br
tags
- at the end of every line. This way, the DOM nodes form a flat
- sequence that corresponds to the sequence of the text ―
- just extract text from span
nodes and substitute
- newlines for br
nodes.
It would be a shame if the editor would fall apart as soon as
- someone pastes some complicated HTML into it. I wanted it to be
- able to deal with whatever mess it finds. This means using some
- kind of HTML-normalizer that takes arbitrary HTML and flattens it
- into a series of br
s and span
elements
- that contain a single text node. Just like the parsing process, it
- would be best if this did not have to done to the entire buffer
- every time something changes.
It took some banging my head against my keyboard, but I found a very - nice way to model this. It makes heavy use of generators, for which I - used MochiKit's iterator - framework. Bob Ippolito explains the concepts in this library very - well in his blog - post about it. (Also notice some of the dismissive comments at the - bottom of that post. They say "I don't think I really want to learn - this, so I'll make up some silly reason to condemn it.")
- -The highlighting process consists of the following elements: - normalizing the DOM tree, extracting the text from the DOM tree, - tokenizing this text, parsing the tokens, and finally adjusting the - DOM nodes to reflect the structure of the code.
- -The first two, I put into a single generator. It scans the DOM
- tree, fixing anything that is not a simple top-level
- span
or br
, and it produces the text
- content of the nodes (or a newline in case of a br
)
- as its output ― each time it is called, it yields a string.
- Continuation passing style was a good way to model this process in
- an iterator, which has to be processed one step at a time. Look at
- this simplified version:
function traverseDOM(start){ - var cc = function(){scanNode(start, stop);}; - function stop(){ - cc = stop; - throw StopIteration; - } - function yield(value, c){ - cc = c; - return value; - } - - function scanNode(node, c){ - if (node.nextSibling) - var nextc = function(){scanNode(node.nextSibling, c);}; - else - var nextc = c; - - if (/* node is proper span element */) - return yield(node.firstChild.nodeValue, nextc); - else if (/* node is proper br element */) - return yield("\n", nextc); - else - /* flatten node, yield its textual content */; - } - - return {next: function(){return cc();}}; -}- -
The variable c
stands for 'continuation', and cc
for 'current
- continuation' ― that last variable is used to store the function to
- continue with, when yielding a value to the outside world. Every time
- control leaves this function, it has to make sure that cc
is set to
- a suitable value, which is what yield
and stop
take care of.
The object that is returned contains a next
method, which is
- MochiKit's idea of an iterator, and the initial continuation just
- throws a StopIteration
, which is how MochiKit signals that an
- iterator has reached its end.
The first lines of scanNode
extend the continuation with the task of
- scanning the next node, if there is a next node. The rest of the
- function decides what kind of value to yield
. Note that this is a
- rather trivial example of this technique, since the process of going
- through these nodes is basically linear (it was much, much more
- complex in earlier versions), but still the trick with the
- continuations makes the code shorter and, for those in the know,
- clearer than the equivalent 'storing the iterator state in variables'
- approach.
The next iterator that the input passes through is the
- tokenizer. Well, actually, there is another iterator in between
- that isolates the tokenizer from the fact that the DOM traversal
- yields a bunch of separate strings, and presents them as a single
- character stream (with a convenient peek
operation),
- but this is not a very interesting one. What the tokenizer returns
- is a stream of token objects, each of which has a
- value
, its textual content, a type
, like
- "variable"
, "operator"
, or just itself,
- "{"
for example, in the case of significant
- punctuation or special keywords. They also have a
- style
, which is used later by the highlighter to give
- their span
elements a class name (the parser will
- still adjust this in some cases).
At first I assumed the parser would have to talk back to the
- tokenizer about the current context, in order to be able to
- distinguish those accursed regular expressions from divisions, but
- it seems that regular expressions are only allowed if the previous
- (non-whitespace, non-comment) token was either an operator, a
- keyword like new
or throw
, or a specific
- kind of punctuation ("[{}(,;:"
) that indicates a new
- expression can be started here. This made things considerably
- easier, since the 'regexp or no regexp' question could stay
- entirely within the tokenizer.
The next step, then, is the parser. It does not do a very
- thorough job because, firstly, it has to be fast, and secondly, it
- should not go to pieces when fed an incorrect program. So only
- superficial constructs are recognized, keywords that resemble each
- other in syntax, such as while
and if
,
- are treated in precisely the same way, as are try
and
- else
― the parser doesn't mind if an
- else
appears without an if
. Stuff that
- binds variables, var
, function
, and
- catch
to be precise, is treated with more care,
- because the parser wants to know about local variables.
Inside the parser, three kinds of context are stored. Firstly, a set - of known local variables, which is used to adjust the style of - variable tokens. Every time the parser enters a function, a new set of - variables is created. If there was already such a set (entering an - inner function), a pointer to the old one is stored in the new one. At - the end of the function, the current variable set is 'popped' off and - the previous one is restored.
- -The second kind of context is the lexical context, this keeps track of - whether we are inside a statement, block, or list. Like the variable - context, it also forms a stack of contexts, with each one containing a - pointer to the previous ones so that they can be popped off again when - they are finished. This information is used for indentation. Every - time the parser encounters a newline token, it attaches the current - lexical context and a 'copy' of itself (more about that later) to this - token.
- -The third context is a continuation context. This parser does not use - straight continuation style, instead it uses a stack of actions that - have to be performed. These actions are simple functions, a kind of - minilanguage, they act on tokens, and decide what kind of new actions - should be pushed onto the stack. Here are some examples:
- -function expression(type){ - if (type in atomicTypes) cont(maybeoperator); - else if (type == "function") cont(functiondef); - else if (type == "(") cont(pushlex("list"), expression, expect(")"), poplex); - else if (type == "operator") cont(expression); - else if (type == "[") cont(pushlex("list"), commasep(expression), expect("]"), poplex); - else if (type == "{") cont(pushlex("list"), commasep(objprop), expect("}"), poplex); - else if (type == "keyword c") cont(expression); -} - -function block(type){ - if (type == "}") cont(); - else pass(statement, block); -}- -
The function cont
(for continue), will push the actions it is given
- onto the stack (in reverse order, so that the first one will be popped
- first). Actions such as pushlex
and poplex
merely adjust the
- lexical environment, while others, such as expression
itself, do
- actual parsing. pass
, as seen in block
, is similar to cont
, but
- it does not 'consume' the current token, so the next action will again
- see this same token. In block
, this happens when the function
- determines that we are not at the end of the block yet, so it pushes
- the statement
function which will interpret the current token as the
- start of a statement.
These actions are called by a 'driver' function, which filters out the
- whitespace and comments, so that the parser actions do not have to
- think about those, and keeps track of some things like the indentation
- of the current line and the column at which the current token ends,
- which are stored in the lexical context and used for indentation.
- After calling an action, if the action called cont
, this driver
- function will return the current token, if pass
(or nothing) was
- called, it will immediately continue with the next action.
This goes to show that it is viable to write a quite elaborate - minilanguage in a macro-less language like JavaScript. I don't think - it would be possible to do something like this without closures (or - similarly powerful abstraction) though, I've certainly never seen - anything like it in Java code.
- -The way a 'copy' of the parser was produced shows a nice usage
- of closures. Like with the DOM transformer shown above, most of
- the local state of the parser is held in a closure produced by
- calling parse(stream)
. The function
- copy
, which is local to the parser function, produces
- a new closure, with copies of all the relevant variables:
function copy(){ - var _context = context, _lexical = lexical, _actions = copyArray(actions); - - return function(_tokens){ - context = _context; - lexical = _lexical; - actions = copyArray(_actions); - tokens = _tokens; - return parser; - }; -}- -
Where parser
is the object that contains the next
(driver)
- function, and a reference to this copy
function. When the function
- that copy
produces is called with a token stream as argument, it
- updates the local variables in the parser closure, and returns the
- corresponding iterator object.
Moving on, we get to the last stop in this chain of generators, the
- actual highlighter. You can view this one as taking two streams as
- input, on the one hand there is the stream of tokens from the parser,
- and on the other hand there is the DOM tree as left by the DOM
- transformer. If everything went correctly, these two should be
- synchronized. The highlighter can look at the current token, see if
- the span
in the DOM tree corresponds to it (has the same text
- content, and the correct class), and if not it can chop up the DOM
- nodes to conform to the tokens.
Every time the parser yields a newline token, the highligher
- encounters a br
element in the DOM stream. It takes the copy of the
- parser and the lexical context from this token and attaches them to
- the DOM node. This way, a new highlighting process can be started from
- that node by re-starting the copy of the parser with a new token
- stream, which reads tokens from the DOM nodes starting at that br
- element, and the indentation code can use the lexical context
- information to determine the correct indentation at that point.
All the above can be done using the DOM interface that all major - browsers have in common, and which is relatively free of weird bugs - and abberrations. However, when the user is typing in new code, this - must also be highlighted. For this to happen, the program must know - where the cursor currently is, and because it mucks up the DOM tree, - it has to restore this cursor position after doing the highlighting.
- -Re-highlighting always happens per line, because the copy of the - parser is stored only at the end of lines. Doing this every time the - user presses a key is terribly slow and obnoxious, so what I did was - keep a list of 'dirty' nodes, and as soon as the user didn't type - anyting for 300 milliseconds the program starts re-highlighting these - nodes. If it finds more than ten lines must be re-parsed, it does only - ten and waits another 300 milliseconds before it continues, this way - the browser never freezes up entirely.
- -As mentioned earlier, Internet Explorer's selection model is not the - most practical one. My attempts to build a wrapper that makes it look - like the W3C model all stranded. In the end I came to the conclusion - that I only needed two operations:
- -It turns out that the pixel-based selection model that Internet - Explorer uses, which always seemed completely ludricrous to me, is - perfect for the first case. Since the DOM transformation (generally) - does not change the position of things, storing the pixel offsets of - the selection makes it possible to restore that same selection, never - mind what happened to the underlying DOM structure.
- -[Later addition: Note that this, due to the very random design - of the TextRange - interface, only really works when the whole selection falls - within the visible part of the document.]
- -Doing the same with the W3C selection model is a lot harder. What I - ended up with was this:
- -Range
object gives you.Now in the second case (getting the top-level node at the
- cursor) the Internet Explorer cheat does not work. In the W3C
- model this is rather easy, you have to do some creative parent-
- and sibling-pointer following to arrive at the correct top-level
- node, but nothing weird. In Internet Explorer, all we have to go
- on is the parentElement
method on a
- TextRange
, which gives the first element that
- completely envelops the selection. If the cursor is inside a text
- node, this is good, that text node tells us where we are. If the
- cursor is between nodes, for example between two br
- nodes, you get to top-level node itself back, which is remarkably
- useless. In cases like this I stoop to a rather ugly hack (which
- fortunately turned out to be acceptably fast) ― I create a
- temporary empty span
with an ID inside the selection,
- get a reference to this span
by ID, take its
- previousSibling
, and remove it again.
Unfortunately, Opera's selection implementation is buggy, and it
- will give wildly incorrect Range
objects when the cursor
- is between two nodes. This is a bit of a showstopper, and until I find
- a workaround for that or it gets fixed, the highlighter doesn't work
- properly in Opera.
Also, when one presses enter in a designMode
- document in Firefox or Opera, a br
tag is inserted.
- In Internet Explorer, pressing enter causes some maniacal gnome to
- come out and start wrapping all the content before and after the
- cursor in p
tags. I suppose there is something to be
- said for that, in principle, though if you saw the tag soup of
- font
s and nested paragraphs Internet Explorer
- generates you would soon enough forget all about principle.
- Anyway, getting unwanted p
tags slowed the
- highlighter down terribly ― it had to overhaul the whole
- DOM tree to remove them again, every time the user pressed enter.
- Fortunately I could fix this by capturing the enter presses and
- manually inserting a br
tag at the cursor.
On the subject of Internet Explorer's tag soup, here is an interesting
- anecdote: One time, when testing the effect that modifying the content
- of a selection had, I inspected the DOM tree and found a "/B"
- element. This was not a closing tag, there are no closing tags in the
- DOM tree, just elements. The nodeName
of this element was actually
- "/B"
. That was when I gave up any notions of ever understanding the
- profound mystery that is Internet Explorer.
Well, I despaired at times, but I did end up with a working JavaScript - editor. I did not keep track of the amount of time I wasted on this, - but I would estimate it to be around fifty hours. Finding workarounds - for browser bugs can be a terribly nonlinear process. I just spent - half a day working on a weird glitch in Firefox that caused the cursor - in the editable frame to be displayed 3/4 line too high when it was at - the very end of the document. Then I found out that setting the - style.display of the iframe to "block" fixed this (why not?). I'm - amazed how often issues that seem hopeless do turn out to be - avoidable, even if it takes hours of screwing around and some truly - non-obvious ideas.
- -For a lot of things, JavaScript + DOM elements are a surprisingly - powerful platform. Simple interactive documents and forms can be - written in browsers with very little effort, generally less than with - most 'traditional' platforms (Java, Win32, things like WxWidgets). - Libraries like Dojo (and a similar monster I once wrote myself) even - make complex, composite widgets workable. However, when applications - go sufficiently beyond the things that browsers were designed for, the - available APIs do not give enough control, are nonstandard and buggy, - and are often poorly designed. Because of this, writing such - applications, when it is even possible, is painful process.
- -And who likes pain? Sure, when finding that crazy workaround,
- subdueing the damn browser, and getting everything to work, there
- is a certain macho thrill. But one can't help wondering how much
- easier things like preventing the user from pasting pictures in
- his source code would be on another platform. Maybe something like
- Silverlight or whatever other new browser plugin gizmos people are
- pushing these days will become the way to solve things like this
- in the future. But, personally, I would prefer for those browser
- companies to put some real effort into things like cleaning up and
- standardising shady things like designMode
, fixing
- their bugs, and getting serious about ECMAScript 4.
Which is probably not realistically going to happen anytime soon.
- -Some interesting projects similar to this:
- -If you have any remarks, criticism, or hints related to the - above, drop me an e-mail at marijnh@gmail.com. If you say - something generally interesting, I'll include your reaction here - at the bottom of this page.
- - - diff --git a/media/css/redmond/images/ui-bg_flat_0_aaaaaa_40x100.png b/media/css/redmond/images/ui-bg_flat_0_aaaaaa_40x100.png deleted file mode 100644 index 5b5dab2..0000000 Binary files a/media/css/redmond/images/ui-bg_flat_0_aaaaaa_40x100.png and /dev/null differ diff --git a/media/css/redmond/images/ui-bg_flat_55_fbec88_40x100.png b/media/css/redmond/images/ui-bg_flat_55_fbec88_40x100.png deleted file mode 100644 index 47acaad..0000000 Binary files a/media/css/redmond/images/ui-bg_flat_55_fbec88_40x100.png and /dev/null differ diff --git a/media/css/redmond/images/ui-bg_glass_75_d0e5f5_1x400.png b/media/css/redmond/images/ui-bg_glass_75_d0e5f5_1x400.png deleted file mode 100644 index 9fb564f..0000000 Binary files a/media/css/redmond/images/ui-bg_glass_75_d0e5f5_1x400.png and /dev/null differ diff --git a/media/css/redmond/images/ui-bg_glass_85_dfeffc_1x400.png b/media/css/redmond/images/ui-bg_glass_85_dfeffc_1x400.png deleted file mode 100644 index 0149515..0000000 Binary files a/media/css/redmond/images/ui-bg_glass_85_dfeffc_1x400.png and /dev/null differ diff --git a/media/css/redmond/images/ui-bg_glass_95_fef1ec_1x400.png b/media/css/redmond/images/ui-bg_glass_95_fef1ec_1x400.png deleted file mode 100644 index 4443fdc..0000000 Binary files a/media/css/redmond/images/ui-bg_glass_95_fef1ec_1x400.png and /dev/null differ diff --git a/media/css/redmond/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png b/media/css/redmond/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png deleted file mode 100644 index 81ecc36..0000000 Binary files a/media/css/redmond/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png and /dev/null differ diff --git a/media/css/redmond/images/ui-bg_inset-hard_100_f5f8f9_1x100.png b/media/css/redmond/images/ui-bg_inset-hard_100_f5f8f9_1x100.png deleted file mode 100644 index 4f3faf8..0000000 Binary files a/media/css/redmond/images/ui-bg_inset-hard_100_f5f8f9_1x100.png and /dev/null differ diff --git a/media/css/redmond/images/ui-bg_inset-hard_100_fcfdfd_1x100.png b/media/css/redmond/images/ui-bg_inset-hard_100_fcfdfd_1x100.png deleted file mode 100644 index 38c3833..0000000 Binary files a/media/css/redmond/images/ui-bg_inset-hard_100_fcfdfd_1x100.png and /dev/null differ diff --git a/media/css/redmond/images/ui-icons_217bc0_256x240.png b/media/css/redmond/images/ui-icons_217bc0_256x240.png deleted file mode 100644 index 6f4bd87..0000000 Binary files a/media/css/redmond/images/ui-icons_217bc0_256x240.png and /dev/null differ diff --git a/media/css/redmond/images/ui-icons_2e83ff_256x240.png b/media/css/redmond/images/ui-icons_2e83ff_256x240.png deleted file mode 100644 index 09d1cdc..0000000 Binary files a/media/css/redmond/images/ui-icons_2e83ff_256x240.png and /dev/null differ diff --git a/media/css/redmond/images/ui-icons_469bdd_256x240.png b/media/css/redmond/images/ui-icons_469bdd_256x240.png deleted file mode 100644 index bd2cf07..0000000 Binary files a/media/css/redmond/images/ui-icons_469bdd_256x240.png and /dev/null differ diff --git a/media/css/redmond/images/ui-icons_6da8d5_256x240.png b/media/css/redmond/images/ui-icons_6da8d5_256x240.png deleted file mode 100644 index 9f3eafa..0000000 Binary files a/media/css/redmond/images/ui-icons_6da8d5_256x240.png and /dev/null differ diff --git a/media/css/redmond/images/ui-icons_cd0a0a_256x240.png b/media/css/redmond/images/ui-icons_cd0a0a_256x240.png deleted file mode 100644 index 2ab019b..0000000 Binary files a/media/css/redmond/images/ui-icons_cd0a0a_256x240.png and /dev/null differ diff --git a/media/css/redmond/images/ui-icons_d8e7f3_256x240.png b/media/css/redmond/images/ui-icons_d8e7f3_256x240.png deleted file mode 100644 index ad2dc6f..0000000 Binary files a/media/css/redmond/images/ui-icons_d8e7f3_256x240.png and /dev/null differ diff --git a/media/css/redmond/images/ui-icons_f9bd01_256x240.png b/media/css/redmond/images/ui-icons_f9bd01_256x240.png deleted file mode 100644 index 7862502..0000000 Binary files a/media/css/redmond/images/ui-icons_f9bd01_256x240.png and /dev/null differ diff --git a/media/css/redmond/jquery-ui-1.8.14.custom.css b/media/css/redmond/jquery-ui-1.8.14.custom.css deleted file mode 100644 index 49dc0ab..0000000 --- a/media/css/redmond/jquery-ui-1.8.14.custom.css +++ /dev/null @@ -1,568 +0,0 @@ -/* - * jQuery UI CSS Framework 1.8.14 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Theming/API - */ - -/* Layout helpers -----------------------------------*/ -.ui-helper-hidden { display: none; } -.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); } -.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } -.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } -.ui-helper-clearfix { display: inline-block; } -/* required comment for clearfix to work in Opera \*/ -* html .ui-helper-clearfix { height:1%; } -.ui-helper-clearfix { display:block; } -/* end clearfix */ -.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } - - -/* Interaction Cues -----------------------------------*/ -.ui-state-disabled { cursor: default !important; } - - -/* Icons -----------------------------------*/ - -/* states and images */ -.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } - - -/* Misc visuals -----------------------------------*/ - -/* Overlays */ -.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } - - -/* - * jQuery UI CSS Framework 1.8.14 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Theming/API - * - * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Lucida%20Grande,%20Lucida%20Sans,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=5px&bgColorHeader=5c9ccc&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=55&borderColorHeader=4297d7&fcHeader=ffffff&iconColorHeader=d8e7f3&bgColorContent=fcfdfd&bgTextureContent=06_inset_hard.png&bgImgOpacityContent=100&borderColorContent=a6c9e2&fcContent=222222&iconColorContent=469bdd&bgColorDefault=dfeffc&bgTextureDefault=02_glass.png&bgImgOpacityDefault=85&borderColorDefault=c5dbec&fcDefault=2e6e9e&iconColorDefault=6da8d5&bgColorHover=d0e5f5&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=79b7e7&fcHover=1d5987&iconColorHover=217bc0&bgColorActive=f5f8f9&bgTextureActive=06_inset_hard.png&bgImgOpacityActive=100&borderColorActive=79b7e7&fcActive=e17009&iconColorActive=f9bd01&bgColorHighlight=fbec88&bgTextureHighlight=01_flat.png&bgImgOpacityHighlight=55&borderColorHighlight=fad42e&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px - */ - - -/* Component containers -----------------------------------*/ -.ui-widget { font-family: Lucida Grande, Lucida Sans, Arial, sans-serif; font-size: 1.1em; } -.ui-widget .ui-widget { font-size: 1em; } -.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Lucida Grande, Lucida Sans, Arial, sans-serif; font-size: 1em; } -.ui-widget-content { border: 1px solid #a6c9e2; background: #fcfdfd url(images/ui-bg_inset-hard_100_fcfdfd_1x100.png) 50% bottom repeat-x; color: #222222; } -.ui-widget-content a { color: #222222; } -.ui-widget-header { border: 1px solid #4297d7; background: #5c9ccc url(images/ui-bg_gloss-wave_55_5c9ccc_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; } -.ui-widget-header a { color: #ffffff; } - -/* Interaction states -----------------------------------*/ -.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #c5dbec; background: #dfeffc url(images/ui-bg_glass_85_dfeffc_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #2e6e9e; } -.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #2e6e9e; text-decoration: none; } -.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #79b7e7; background: #d0e5f5 url(images/ui-bg_glass_75_d0e5f5_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1d5987; } -.ui-state-hover a, .ui-state-hover a:hover { color: #1d5987; text-decoration: none; } -.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #79b7e7; background: #f5f8f9 url(images/ui-bg_inset-hard_100_f5f8f9_1x100.png) 50% 50% repeat-x; font-weight: bold; color: #e17009; } -.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #e17009; text-decoration: none; } -.ui-widget :active { outline: none; } - -/* Interaction Cues -----------------------------------*/ -.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fad42e; background: #fbec88 url(images/ui-bg_flat_55_fbec88_40x100.png) 50% 50% repeat-x; color: #363636; } -.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; } -.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; } -.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; } -.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; } -.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } -.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } -.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } - -/* Icons -----------------------------------*/ - -/* states and images */ -.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_469bdd_256x240.png); } -.ui-widget-content .ui-icon {background-image: url(images/ui-icons_469bdd_256x240.png); } -.ui-widget-header .ui-icon {background-image: url(images/ui-icons_d8e7f3_256x240.png); } -.ui-state-default .ui-icon { background-image: url(images/ui-icons_6da8d5_256x240.png); } -.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_217bc0_256x240.png); } -.ui-state-active .ui-icon {background-image: url(images/ui-icons_f9bd01_256x240.png); } -.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); } -.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); } - -/* positioning */ -.ui-icon-carat-1-n { background-position: 0 0; } -.ui-icon-carat-1-ne { background-position: -16px 0; } -.ui-icon-carat-1-e { background-position: -32px 0; } -.ui-icon-carat-1-se { background-position: -48px 0; } -.ui-icon-carat-1-s { background-position: -64px 0; } -.ui-icon-carat-1-sw { background-position: -80px 0; } -.ui-icon-carat-1-w { background-position: -96px 0; } -.ui-icon-carat-1-nw { background-position: -112px 0; } -.ui-icon-carat-2-n-s { background-position: -128px 0; } -.ui-icon-carat-2-e-w { background-position: -144px 0; } -.ui-icon-triangle-1-n { background-position: 0 -16px; } -.ui-icon-triangle-1-ne { background-position: -16px -16px; } -.ui-icon-triangle-1-e { background-position: -32px -16px; } -.ui-icon-triangle-1-se { background-position: -48px -16px; } -.ui-icon-triangle-1-s { background-position: -64px -16px; } -.ui-icon-triangle-1-sw { background-position: -80px -16px; } -.ui-icon-triangle-1-w { background-position: -96px -16px; } -.ui-icon-triangle-1-nw { background-position: -112px -16px; } -.ui-icon-triangle-2-n-s { background-position: -128px -16px; } -.ui-icon-triangle-2-e-w { background-position: -144px -16px; } -.ui-icon-arrow-1-n { background-position: 0 -32px; } -.ui-icon-arrow-1-ne { background-position: -16px -32px; } -.ui-icon-arrow-1-e { background-position: -32px -32px; } -.ui-icon-arrow-1-se { background-position: -48px -32px; } -.ui-icon-arrow-1-s { background-position: -64px -32px; } -.ui-icon-arrow-1-sw { background-position: -80px -32px; } -.ui-icon-arrow-1-w { background-position: -96px -32px; } -.ui-icon-arrow-1-nw { background-position: -112px -32px; } -.ui-icon-arrow-2-n-s { background-position: -128px -32px; } -.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } -.ui-icon-arrow-2-e-w { background-position: -160px -32px; } -.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } -.ui-icon-arrowstop-1-n { background-position: -192px -32px; } -.ui-icon-arrowstop-1-e { background-position: -208px -32px; } -.ui-icon-arrowstop-1-s { background-position: -224px -32px; } -.ui-icon-arrowstop-1-w { background-position: -240px -32px; } -.ui-icon-arrowthick-1-n { background-position: 0 -48px; } -.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } -.ui-icon-arrowthick-1-e { background-position: -32px -48px; } -.ui-icon-arrowthick-1-se { background-position: -48px -48px; } -.ui-icon-arrowthick-1-s { background-position: -64px -48px; } -.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } -.ui-icon-arrowthick-1-w { background-position: -96px -48px; } -.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } -.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } -.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } -.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } -.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } -.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } -.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } -.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } -.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } -.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } -.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } -.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } -.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } -.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } -.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } -.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } -.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } -.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } -.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } -.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } -.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } -.ui-icon-arrow-4 { background-position: 0 -80px; } -.ui-icon-arrow-4-diag { background-position: -16px -80px; } -.ui-icon-extlink { background-position: -32px -80px; } -.ui-icon-newwin { background-position: -48px -80px; } -.ui-icon-refresh { background-position: -64px -80px; } -.ui-icon-shuffle { background-position: -80px -80px; } -.ui-icon-transfer-e-w { background-position: -96px -80px; } -.ui-icon-transferthick-e-w { background-position: -112px -80px; } -.ui-icon-folder-collapsed { background-position: 0 -96px; } -.ui-icon-folder-open { background-position: -16px -96px; } -.ui-icon-document { background-position: -32px -96px; } -.ui-icon-document-b { background-position: -48px -96px; } -.ui-icon-note { background-position: -64px -96px; } -.ui-icon-mail-closed { background-position: -80px -96px; } -.ui-icon-mail-open { background-position: -96px -96px; } -.ui-icon-suitcase { background-position: -112px -96px; } -.ui-icon-comment { background-position: -128px -96px; } -.ui-icon-person { background-position: -144px -96px; } -.ui-icon-print { background-position: -160px -96px; } -.ui-icon-trash { background-position: -176px -96px; } -.ui-icon-locked { background-position: -192px -96px; } -.ui-icon-unlocked { background-position: -208px -96px; } -.ui-icon-bookmark { background-position: -224px -96px; } -.ui-icon-tag { background-position: -240px -96px; } -.ui-icon-home { background-position: 0 -112px; } -.ui-icon-flag { background-position: -16px -112px; } -.ui-icon-calendar { background-position: -32px -112px; } -.ui-icon-cart { background-position: -48px -112px; } -.ui-icon-pencil { background-position: -64px -112px; } -.ui-icon-clock { background-position: -80px -112px; } -.ui-icon-disk { background-position: -96px -112px; } -.ui-icon-calculator { background-position: -112px -112px; } -.ui-icon-zoomin { background-position: -128px -112px; } -.ui-icon-zoomout { background-position: -144px -112px; } -.ui-icon-search { background-position: -160px -112px; } -.ui-icon-wrench { background-position: -176px -112px; } -.ui-icon-gear { background-position: -192px -112px; } -.ui-icon-heart { background-position: -208px -112px; } -.ui-icon-star { background-position: -224px -112px; } -.ui-icon-link { background-position: -240px -112px; } -.ui-icon-cancel { background-position: 0 -128px; } -.ui-icon-plus { background-position: -16px -128px; } -.ui-icon-plusthick { background-position: -32px -128px; } -.ui-icon-minus { background-position: -48px -128px; } -.ui-icon-minusthick { background-position: -64px -128px; } -.ui-icon-close { background-position: -80px -128px; } -.ui-icon-closethick { background-position: -96px -128px; } -.ui-icon-key { background-position: -112px -128px; } -.ui-icon-lightbulb { background-position: -128px -128px; } -.ui-icon-scissors { background-position: -144px -128px; } -.ui-icon-clipboard { background-position: -160px -128px; } -.ui-icon-copy { background-position: -176px -128px; } -.ui-icon-contact { background-position: -192px -128px; } -.ui-icon-image { background-position: -208px -128px; } -.ui-icon-video { background-position: -224px -128px; } -.ui-icon-script { background-position: -240px -128px; } -.ui-icon-alert { background-position: 0 -144px; } -.ui-icon-info { background-position: -16px -144px; } -.ui-icon-notice { background-position: -32px -144px; } -.ui-icon-help { background-position: -48px -144px; } -.ui-icon-check { background-position: -64px -144px; } -.ui-icon-bullet { background-position: -80px -144px; } -.ui-icon-radio-off { background-position: -96px -144px; } -.ui-icon-radio-on { background-position: -112px -144px; } -.ui-icon-pin-w { background-position: -128px -144px; } -.ui-icon-pin-s { background-position: -144px -144px; } -.ui-icon-play { background-position: 0 -160px; } -.ui-icon-pause { background-position: -16px -160px; } -.ui-icon-seek-next { background-position: -32px -160px; } -.ui-icon-seek-prev { background-position: -48px -160px; } -.ui-icon-seek-end { background-position: -64px -160px; } -.ui-icon-seek-start { background-position: -80px -160px; } -/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ -.ui-icon-seek-first { background-position: -80px -160px; } -.ui-icon-stop { background-position: -96px -160px; } -.ui-icon-eject { background-position: -112px -160px; } -.ui-icon-volume-off { background-position: -128px -160px; } -.ui-icon-volume-on { background-position: -144px -160px; } -.ui-icon-power { background-position: 0 -176px; } -.ui-icon-signal-diag { background-position: -16px -176px; } -.ui-icon-signal { background-position: -32px -176px; } -.ui-icon-battery-0 { background-position: -48px -176px; } -.ui-icon-battery-1 { background-position: -64px -176px; } -.ui-icon-battery-2 { background-position: -80px -176px; } -.ui-icon-battery-3 { background-position: -96px -176px; } -.ui-icon-circle-plus { background-position: 0 -192px; } -.ui-icon-circle-minus { background-position: -16px -192px; } -.ui-icon-circle-close { background-position: -32px -192px; } -.ui-icon-circle-triangle-e { background-position: -48px -192px; } -.ui-icon-circle-triangle-s { background-position: -64px -192px; } -.ui-icon-circle-triangle-w { background-position: -80px -192px; } -.ui-icon-circle-triangle-n { background-position: -96px -192px; } -.ui-icon-circle-arrow-e { background-position: -112px -192px; } -.ui-icon-circle-arrow-s { background-position: -128px -192px; } -.ui-icon-circle-arrow-w { background-position: -144px -192px; } -.ui-icon-circle-arrow-n { background-position: -160px -192px; } -.ui-icon-circle-zoomin { background-position: -176px -192px; } -.ui-icon-circle-zoomout { background-position: -192px -192px; } -.ui-icon-circle-check { background-position: -208px -192px; } -.ui-icon-circlesmall-plus { background-position: 0 -208px; } -.ui-icon-circlesmall-minus { background-position: -16px -208px; } -.ui-icon-circlesmall-close { background-position: -32px -208px; } -.ui-icon-squaresmall-plus { background-position: -48px -208px; } -.ui-icon-squaresmall-minus { background-position: -64px -208px; } -.ui-icon-squaresmall-close { background-position: -80px -208px; } -.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } -.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } -.ui-icon-grip-solid-vertical { background-position: -32px -224px; } -.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } -.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } -.ui-icon-grip-diagonal-se { background-position: -80px -224px; } - - -/* Misc visuals -----------------------------------*/ - -/* Corner radius */ -.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; -khtml-border-top-left-radius: 5px; border-top-left-radius: 5px; } -.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 5px; -webkit-border-top-right-radius: 5px; -khtml-border-top-right-radius: 5px; border-top-right-radius: 5px; } -.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; -khtml-border-bottom-left-radius: 5px; border-bottom-left-radius: 5px; } -.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 5px; -webkit-border-bottom-right-radius: 5px; -khtml-border-bottom-right-radius: 5px; border-bottom-right-radius: 5px; } - -/* Overlays */ -.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); } -.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -khtml-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/* - * jQuery UI Resizable 1.8.14 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Resizable#theming - */ -.ui-resizable { position: relative;} -.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block; } -.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } -.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; } -.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; } -.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; } -.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; } -.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } -.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } -.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } -.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* - * jQuery UI Selectable 1.8.14 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Selectable#theming - */ -.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; } -/* - * jQuery UI Accordion 1.8.14 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Accordion#theming - */ -/* IE/Win - Fix animation bug - #4615 */ -.ui-accordion { width: 100%; } -.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; } -.ui-accordion .ui-accordion-li-fix { display: inline; } -.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } -.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; } -.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; } -.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } -.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; } -.ui-accordion .ui-accordion-content-active { display: block; } -/* - * jQuery UI Autocomplete 1.8.14 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Autocomplete#theming - */ -.ui-autocomplete { position: absolute; cursor: default; } - -/* workarounds */ -* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */ - -/* - * jQuery UI Menu 1.8.14 - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Menu#theming - */ -.ui-menu { - list-style:none; - padding: 2px; - margin: 0; - display:block; - float: left; -} -.ui-menu .ui-menu { - margin-top: -3px; -} -.ui-menu .ui-menu-item { - margin:0; - padding: 0; - zoom: 1; - float: left; - clear: left; - width: 100%; -} -.ui-menu .ui-menu-item a { - text-decoration:none; - display:block; - padding:.2em .4em; - line-height:1.5; - zoom:1; -} -.ui-menu .ui-menu-item a.ui-state-hover, -.ui-menu .ui-menu-item a.ui-state-active { - font-weight: normal; - margin: -1px; -} -/* - * jQuery UI Button 1.8.14 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Button#theming - */ -.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */ -.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */ -button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */ -.ui-button-icons-only { width: 3.4em; } -button.ui-button-icons-only { width: 3.7em; } - -/*button text element */ -.ui-button .ui-button-text { display: block; line-height: 1.4; } -.ui-button-text-only .ui-button-text { padding: .4em 1em; } -.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; } -.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; } -.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; } -.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; } -/* no icon support for input elements, provide padding by default */ -input.ui-button { padding: .4em 1em; } - -/*button icon element(s) */ -.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; } -.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; } -.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; } -.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } -.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } - -/*button sets*/ -.ui-buttonset { margin-right: 7px; } -.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; } - -/* workarounds */ -button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */ -/* - * jQuery UI Dialog 1.8.14 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Dialog#theming - */ -.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; } -.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; } -.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; } -.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } -.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } -.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } -.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } -.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } -.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; } -.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; } -.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } -.ui-draggable .ui-dialog-titlebar { cursor: move; } -/* - * jQuery UI Slider 1.8.14 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Slider#theming - */ -.ui-slider { position: relative; text-align: left; } -.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } -.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; } - -.ui-slider-horizontal { height: .8em; } -.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } -.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } -.ui-slider-horizontal .ui-slider-range-min { left: 0; } -.ui-slider-horizontal .ui-slider-range-max { right: 0; } - -.ui-slider-vertical { width: .8em; height: 100px; } -.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } -.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } -.ui-slider-vertical .ui-slider-range-min { bottom: 0; } -.ui-slider-vertical .ui-slider-range-max { top: 0; }/* - * jQuery UI Tabs 1.8.14 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Tabs#theming - */ -.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ -.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; } -.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; } -.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; } -.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; } -.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; } -.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ -.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; } -.ui-tabs .ui-tabs-hide { display: none !important; } -/* - * jQuery UI Datepicker 1.8.14 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Datepicker#theming - */ -.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; } -.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } -.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } -.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } -.ui-datepicker .ui-datepicker-prev { left:2px; } -.ui-datepicker .ui-datepicker-next { right:2px; } -.ui-datepicker .ui-datepicker-prev-hover { left:1px; } -.ui-datepicker .ui-datepicker-next-hover { right:1px; } -.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } -.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } -.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; } -.ui-datepicker select.ui-datepicker-month-year {width: 100%;} -.ui-datepicker select.ui-datepicker-month, -.ui-datepicker select.ui-datepicker-year { width: 49%;} -.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } -.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } -.ui-datepicker td { border: 0; padding: 1px; } -.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } -.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } -.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } -.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } - -/* with multiple calendars */ -.ui-datepicker.ui-datepicker-multi { width:auto; } -.ui-datepicker-multi .ui-datepicker-group { float:left; } -.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } -.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } -.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } -.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } -.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } -.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } -.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } -.ui-datepicker-row-break { clear:both; width:100%; font-size:0em; } - -/* RTL support */ -.ui-datepicker-rtl { direction: rtl; } -.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } -.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } -.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } -.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } -.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } -.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } -.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } -.ui-datepicker-rtl .ui-datepicker-group { float:right; } -.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } -.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } - -/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ -.ui-datepicker-cover { - display: none; /*sorry for IE5*/ - display/**/: block; /*sorry for IE5*/ - position: absolute; /*must have*/ - z-index: -1; /*must have*/ - filter: mask(); /*must have*/ - top: -4px; /*must have*/ - left: -4px; /*must have*/ - width: 200px; /*must have*/ - height: 200px; /*must have*/ -}/* - * jQuery UI Progressbar 1.8.14 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Progressbar#theming - */ -.ui-progressbar { height:2em; text-align: left; } -.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; } \ No newline at end of file diff --git a/media/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png b/media/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png deleted file mode 100644 index 954e22d..0000000 Binary files a/media/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png and /dev/null differ diff --git a/media/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png b/media/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png deleted file mode 100644 index 64ece57..0000000 Binary files a/media/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png and /dev/null differ diff --git a/media/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png b/media/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png deleted file mode 100644 index abdc010..0000000 Binary files a/media/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png and /dev/null differ diff --git a/media/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png b/media/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png deleted file mode 100644 index 9b383f4..0000000 Binary files a/media/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png and /dev/null differ diff --git a/media/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png b/media/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png deleted file mode 100644 index a23baad..0000000 Binary files a/media/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png and /dev/null differ diff --git a/media/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png b/media/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png deleted file mode 100644 index 42ccba2..0000000 Binary files a/media/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png and /dev/null differ diff --git a/media/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png b/media/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png deleted file mode 100644 index 39d5824..0000000 Binary files a/media/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png and /dev/null differ diff --git a/media/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png b/media/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png deleted file mode 100644 index f127367..0000000 Binary files a/media/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png and /dev/null differ diff --git a/media/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png b/media/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png deleted file mode 100644 index 359397a..0000000 Binary files a/media/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png and /dev/null differ diff --git a/media/css/ui-lightness/images/ui-icons_222222_256x240.png b/media/css/ui-lightness/images/ui-icons_222222_256x240.png deleted file mode 100644 index b273ff1..0000000 Binary files a/media/css/ui-lightness/images/ui-icons_222222_256x240.png and /dev/null differ diff --git a/media/css/ui-lightness/images/ui-icons_228ef1_256x240.png b/media/css/ui-lightness/images/ui-icons_228ef1_256x240.png deleted file mode 100644 index a641a37..0000000 Binary files a/media/css/ui-lightness/images/ui-icons_228ef1_256x240.png and /dev/null differ diff --git a/media/css/ui-lightness/images/ui-icons_ef8c08_256x240.png b/media/css/ui-lightness/images/ui-icons_ef8c08_256x240.png deleted file mode 100644 index 85e63e9..0000000 Binary files a/media/css/ui-lightness/images/ui-icons_ef8c08_256x240.png and /dev/null differ diff --git a/media/css/ui-lightness/images/ui-icons_ffd27a_256x240.png b/media/css/ui-lightness/images/ui-icons_ffd27a_256x240.png deleted file mode 100644 index e117eff..0000000 Binary files a/media/css/ui-lightness/images/ui-icons_ffd27a_256x240.png and /dev/null differ diff --git a/media/css/ui-lightness/images/ui-icons_ffffff_256x240.png b/media/css/ui-lightness/images/ui-icons_ffffff_256x240.png deleted file mode 100644 index 42f8f99..0000000 Binary files a/media/css/ui-lightness/images/ui-icons_ffffff_256x240.png and /dev/null differ diff --git a/media/css/ui-lightness/jquery-ui-1.8.12.custom.css b/media/css/ui-lightness/jquery-ui-1.8.12.custom.css deleted file mode 100644 index 3f7bf90..0000000 --- a/media/css/ui-lightness/jquery-ui-1.8.12.custom.css +++ /dev/null @@ -1,578 +0,0 @@ -/* - * jQuery UI CSS Framework 1.8.12 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Theming/API - */ - -/* Layout helpers -----------------------------------*/ -.ui-helper-hidden { display: none; } -.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); } -.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } -.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } -.ui-helper-clearfix { display: inline-block; } -/* required comment for clearfix to work in Opera \*/ -* html .ui-helper-clearfix { height:1%; } -.ui-helper-clearfix { display:block; } -/* end clearfix */ -.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } - - -/* Interaction Cues -----------------------------------*/ -.ui-state-disabled { cursor: default !important; } - - -/* Icons -----------------------------------*/ - -/* states and images */ -.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } - - -/* Misc visuals -----------------------------------*/ - -/* Overlays */ -.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } - - -/* - * jQuery UI CSS Framework 1.8.12 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Theming/API - * - * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Tahoma,%20Verdana,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px - */ - - -/* Component containers -----------------------------------*/ -.ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; } -.ui-widget .ui-widget { font-size: 1em; } -.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; } -.ui-widget-content { border: 1px solid #dddddd; background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; } -.ui-widget-content a { color: #333333; } -.ui-widget-header { border: 1px solid #e78f08; background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; } -.ui-widget-header a { color: #ffffff; } - -/* Interaction states -----------------------------------*/ -.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #cccccc; background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1c94c4; } -.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; } -.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #fbcb09; background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #c77405; } -.ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; } -.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #fbd850; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eb8f00; } -.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; text-decoration: none; } -.ui-widget :active { outline: none; } - -/* Interaction Cues -----------------------------------*/ -.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fed22f; background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x; color: #363636; } -.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; } -.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; color: #ffffff; } -.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; } -.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; } -.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } -.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } -.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } - -/* Icons -----------------------------------*/ - -/* states and images */ -.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); } -.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); } -.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); } -.ui-state-default .ui-icon { background-image: url(images/ui-icons_ef8c08_256x240.png); } -.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); } -.ui-state-active .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); } -.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_228ef1_256x240.png); } -.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffd27a_256x240.png); } - -/* positioning */ -.ui-icon-carat-1-n { background-position: 0 0; } -.ui-icon-carat-1-ne { background-position: -16px 0; } -.ui-icon-carat-1-e { background-position: -32px 0; } -.ui-icon-carat-1-se { background-position: -48px 0; } -.ui-icon-carat-1-s { background-position: -64px 0; } -.ui-icon-carat-1-sw { background-position: -80px 0; } -.ui-icon-carat-1-w { background-position: -96px 0; } -.ui-icon-carat-1-nw { background-position: -112px 0; } -.ui-icon-carat-2-n-s { background-position: -128px 0; } -.ui-icon-carat-2-e-w { background-position: -144px 0; } -.ui-icon-triangle-1-n { background-position: 0 -16px; } -.ui-icon-triangle-1-ne { background-position: -16px -16px; } -.ui-icon-triangle-1-e { background-position: -32px -16px; } -.ui-icon-triangle-1-se { background-position: -48px -16px; } -.ui-icon-triangle-1-s { background-position: -64px -16px; } -.ui-icon-triangle-1-sw { background-position: -80px -16px; } -.ui-icon-triangle-1-w { background-position: -96px -16px; } -.ui-icon-triangle-1-nw { background-position: -112px -16px; } -.ui-icon-triangle-2-n-s { background-position: -128px -16px; } -.ui-icon-triangle-2-e-w { background-position: -144px -16px; } -.ui-icon-arrow-1-n { background-position: 0 -32px; } -.ui-icon-arrow-1-ne { background-position: -16px -32px; } -.ui-icon-arrow-1-e { background-position: -32px -32px; } -.ui-icon-arrow-1-se { background-position: -48px -32px; } -.ui-icon-arrow-1-s { background-position: -64px -32px; } -.ui-icon-arrow-1-sw { background-position: -80px -32px; } -.ui-icon-arrow-1-w { background-position: -96px -32px; } -.ui-icon-arrow-1-nw { background-position: -112px -32px; } -.ui-icon-arrow-2-n-s { background-position: -128px -32px; } -.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } -.ui-icon-arrow-2-e-w { background-position: -160px -32px; } -.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } -.ui-icon-arrowstop-1-n { background-position: -192px -32px; } -.ui-icon-arrowstop-1-e { background-position: -208px -32px; } -.ui-icon-arrowstop-1-s { background-position: -224px -32px; } -.ui-icon-arrowstop-1-w { background-position: -240px -32px; } -.ui-icon-arrowthick-1-n { background-position: 0 -48px; } -.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } -.ui-icon-arrowthick-1-e { background-position: -32px -48px; } -.ui-icon-arrowthick-1-se { background-position: -48px -48px; } -.ui-icon-arrowthick-1-s { background-position: -64px -48px; } -.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } -.ui-icon-arrowthick-1-w { background-position: -96px -48px; } -.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } -.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } -.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } -.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } -.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } -.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } -.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } -.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } -.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } -.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } -.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } -.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } -.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } -.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } -.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } -.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } -.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } -.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } -.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } -.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } -.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } -.ui-icon-arrow-4 { background-position: 0 -80px; } -.ui-icon-arrow-4-diag { background-position: -16px -80px; } -.ui-icon-extlink { background-position: -32px -80px; } -.ui-icon-newwin { background-position: -48px -80px; } -.ui-icon-refresh { background-position: -64px -80px; } -.ui-icon-shuffle { background-position: -80px -80px; } -.ui-icon-transfer-e-w { background-position: -96px -80px; } -.ui-icon-transferthick-e-w { background-position: -112px -80px; } -.ui-icon-folder-collapsed { background-position: 0 -96px; } -.ui-icon-folder-open { background-position: -16px -96px; } -.ui-icon-document { background-position: -32px -96px; } -.ui-icon-document-b { background-position: -48px -96px; } -.ui-icon-note { background-position: -64px -96px; } -.ui-icon-mail-closed { background-position: -80px -96px; } -.ui-icon-mail-open { background-position: -96px -96px; } -.ui-icon-suitcase { background-position: -112px -96px; } -.ui-icon-comment { background-position: -128px -96px; } -.ui-icon-person { background-position: -144px -96px; } -.ui-icon-print { background-position: -160px -96px; } -.ui-icon-trash { background-position: -176px -96px; } -.ui-icon-locked { background-position: -192px -96px; } -.ui-icon-unlocked { background-position: -208px -96px; } -.ui-icon-bookmark { background-position: -224px -96px; } -.ui-icon-tag { background-position: -240px -96px; } -.ui-icon-home { background-position: 0 -112px; } -.ui-icon-flag { background-position: -16px -112px; } -.ui-icon-calendar { background-position: -32px -112px; } -.ui-icon-cart { background-position: -48px -112px; } -.ui-icon-pencil { background-position: -64px -112px; } -.ui-icon-clock { background-position: -80px -112px; } -.ui-icon-disk { background-position: -96px -112px; } -.ui-icon-calculator { background-position: -112px -112px; } -.ui-icon-zoomin { background-position: -128px -112px; } -.ui-icon-zoomout { background-position: -144px -112px; } -.ui-icon-search { background-position: -160px -112px; } -.ui-icon-wrench { background-position: -176px -112px; } -.ui-icon-gear { background-position: -192px -112px; } -.ui-icon-heart { background-position: -208px -112px; } -.ui-icon-star { background-position: -224px -112px; } -.ui-icon-link { background-position: -240px -112px; } -.ui-icon-cancel { background-position: 0 -128px; } -.ui-icon-plus { background-position: -16px -128px; } -.ui-icon-plusthick { background-position: -32px -128px; } -.ui-icon-minus { background-position: -48px -128px; } -.ui-icon-minusthick { background-position: -64px -128px; } -.ui-icon-close { background-position: -80px -128px; } -.ui-icon-closethick { background-position: -96px -128px; } -.ui-icon-key { background-position: -112px -128px; } -.ui-icon-lightbulb { background-position: -128px -128px; } -.ui-icon-scissors { background-position: -144px -128px; } -.ui-icon-clipboard { background-position: -160px -128px; } -.ui-icon-copy { background-position: -176px -128px; } -.ui-icon-contact { background-position: -192px -128px; } -.ui-icon-image { background-position: -208px -128px; } -.ui-icon-video { background-position: -224px -128px; } -.ui-icon-script { background-position: -240px -128px; } -.ui-icon-alert { background-position: 0 -144px; } -.ui-icon-info { background-position: -16px -144px; } -.ui-icon-notice { background-position: -32px -144px; } -.ui-icon-help { background-position: -48px -144px; } -.ui-icon-check { background-position: -64px -144px; } -.ui-icon-bullet { background-position: -80px -144px; } -.ui-icon-radio-off { background-position: -96px -144px; } -.ui-icon-radio-on { background-position: -112px -144px; } -.ui-icon-pin-w { background-position: -128px -144px; } -.ui-icon-pin-s { background-position: -144px -144px; } -.ui-icon-play { background-position: 0 -160px; } -.ui-icon-pause { background-position: -16px -160px; } -.ui-icon-seek-next { background-position: -32px -160px; } -.ui-icon-seek-prev { background-position: -48px -160px; } -.ui-icon-seek-end { background-position: -64px -160px; } -.ui-icon-seek-start { background-position: -80px -160px; } -/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ -.ui-icon-seek-first { background-position: -80px -160px; } -.ui-icon-stop { background-position: -96px -160px; } -.ui-icon-eject { background-position: -112px -160px; } -.ui-icon-volume-off { background-position: -128px -160px; } -.ui-icon-volume-on { background-position: -144px -160px; } -.ui-icon-power { background-position: 0 -176px; } -.ui-icon-signal-diag { background-position: -16px -176px; } -.ui-icon-signal { background-position: -32px -176px; } -.ui-icon-battery-0 { background-position: -48px -176px; } -.ui-icon-battery-1 { background-position: -64px -176px; } -.ui-icon-battery-2 { background-position: -80px -176px; } -.ui-icon-battery-3 { background-position: -96px -176px; } -.ui-icon-circle-plus { background-position: 0 -192px; } -.ui-icon-circle-minus { background-position: -16px -192px; } -.ui-icon-circle-close { background-position: -32px -192px; } -.ui-icon-circle-triangle-e { background-position: -48px -192px; } -.ui-icon-circle-triangle-s { background-position: -64px -192px; } -.ui-icon-circle-triangle-w { background-position: -80px -192px; } -.ui-icon-circle-triangle-n { background-position: -96px -192px; } -.ui-icon-circle-arrow-e { background-position: -112px -192px; } -.ui-icon-circle-arrow-s { background-position: -128px -192px; } -.ui-icon-circle-arrow-w { background-position: -144px -192px; } -.ui-icon-circle-arrow-n { background-position: -160px -192px; } -.ui-icon-circle-zoomin { background-position: -176px -192px; } -.ui-icon-circle-zoomout { background-position: -192px -192px; } -.ui-icon-circle-check { background-position: -208px -192px; } -.ui-icon-circlesmall-plus { background-position: 0 -208px; } -.ui-icon-circlesmall-minus { background-position: -16px -208px; } -.ui-icon-circlesmall-close { background-position: -32px -208px; } -.ui-icon-squaresmall-plus { background-position: -48px -208px; } -.ui-icon-squaresmall-minus { background-position: -64px -208px; } -.ui-icon-squaresmall-close { background-position: -80px -208px; } -.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } -.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } -.ui-icon-grip-solid-vertical { background-position: -32px -224px; } -.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } -.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } -.ui-icon-grip-diagonal-se { background-position: -80px -224px; } - - -/* Misc visuals -----------------------------------*/ - -/* Corner radius */ -.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; } -.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; } -.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; } -.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } -.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; } -.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } -.ui-corner-right { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } -.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; } -.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; } - -/* Overlays */ -.ui-widget-overlay { background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); } -.ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }/* - * jQuery UI Resizable 1.8.12 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Resizable#theming - */ -.ui-resizable { position: relative;} -.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block; - /* http://bugs.jqueryui.com/ticket/7233 - - Resizable: resizable handles fail to work in IE if transparent and content overlaps - */ - background-image:url(data:); -} -.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } -.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; } -.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; } -.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; } -.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; } -.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } -.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } -.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } -.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* - * jQuery UI Selectable 1.8.12 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Selectable#theming - */ -.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; } -/* - * jQuery UI Accordion 1.8.12 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Accordion#theming - */ -/* IE/Win - Fix animation bug - #4615 */ -.ui-accordion { width: 100%; } -.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; } -.ui-accordion .ui-accordion-li-fix { display: inline; } -.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } -.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; } -.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; } -.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } -.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; } -.ui-accordion .ui-accordion-content-active { display: block; } -/* - * jQuery UI Autocomplete 1.8.12 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Autocomplete#theming - */ -.ui-autocomplete { position: absolute; cursor: default; } - -/* workarounds */ -* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */ - -/* - * jQuery UI Menu 1.8.12 - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Menu#theming - */ -.ui-menu { - list-style:none; - padding: 2px; - margin: 0; - display:block; - float: left; -} -.ui-menu .ui-menu { - margin-top: -3px; -} -.ui-menu .ui-menu-item { - margin:0; - padding: 0; - zoom: 1; - float: left; - clear: left; - width: 100%; -} -.ui-menu .ui-menu-item a { - text-decoration:none; - display:block; - padding:.2em .4em; - line-height:1.5; - zoom:1; -} -.ui-menu .ui-menu-item a.ui-state-hover, -.ui-menu .ui-menu-item a.ui-state-active { - font-weight: normal; - margin: -1px; -} -/* - * jQuery UI Button 1.8.12 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Button#theming - */ -.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */ -.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */ -button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */ -.ui-button-icons-only { width: 3.4em; } -button.ui-button-icons-only { width: 3.7em; } - -/*button text element */ -.ui-button .ui-button-text { display: block; line-height: 1.4; } -.ui-button-text-only .ui-button-text { padding: .4em 1em; } -.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; } -.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; } -.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; } -.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; } -/* no icon support for input elements, provide padding by default */ -input.ui-button { padding: .4em 1em; } - -/*button icon element(s) */ -.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; } -.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; } -.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; } -.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } -.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } - -/*button sets*/ -.ui-buttonset { margin-right: 7px; } -.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; } - -/* workarounds */ -button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */ -/* - * jQuery UI Dialog 1.8.12 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Dialog#theming - */ -.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; } -.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; } -.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; } -.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } -.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } -.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } -.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } -.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } -.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; } -.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; } -.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } -.ui-draggable .ui-dialog-titlebar { cursor: move; } -/* - * jQuery UI Slider 1.8.12 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Slider#theming - */ -.ui-slider { position: relative; text-align: left; } -.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } -.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; } - -.ui-slider-horizontal { height: .8em; } -.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } -.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } -.ui-slider-horizontal .ui-slider-range-min { left: 0; } -.ui-slider-horizontal .ui-slider-range-max { right: 0; } - -.ui-slider-vertical { width: .8em; height: 100px; } -.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } -.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } -.ui-slider-vertical .ui-slider-range-min { bottom: 0; } -.ui-slider-vertical .ui-slider-range-max { top: 0; }/* - * jQuery UI Tabs 1.8.12 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Tabs#theming - */ -.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ -.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; } -.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; } -.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; } -.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; } -.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; } -.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ -.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; } -.ui-tabs .ui-tabs-hide { display: none !important; } -/* - * jQuery UI Datepicker 1.8.12 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Datepicker#theming - */ -.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; } -.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } -.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } -.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } -.ui-datepicker .ui-datepicker-prev { left:2px; } -.ui-datepicker .ui-datepicker-next { right:2px; } -.ui-datepicker .ui-datepicker-prev-hover { left:1px; } -.ui-datepicker .ui-datepicker-next-hover { right:1px; } -.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } -.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } -.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; } -.ui-datepicker select.ui-datepicker-month-year {width: 100%;} -.ui-datepicker select.ui-datepicker-month, -.ui-datepicker select.ui-datepicker-year { width: 49%;} -.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } -.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } -.ui-datepicker td { border: 0; padding: 1px; } -.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } -.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } -.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } -.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } - -/* with multiple calendars */ -.ui-datepicker.ui-datepicker-multi { width:auto; } -.ui-datepicker-multi .ui-datepicker-group { float:left; } -.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } -.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } -.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } -.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } -.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } -.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } -.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } -.ui-datepicker-row-break { clear:both; width:100%; } - -/* RTL support */ -.ui-datepicker-rtl { direction: rtl; } -.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } -.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } -.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } -.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } -.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } -.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } -.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } -.ui-datepicker-rtl .ui-datepicker-group { float:right; } -.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } -.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } - -/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ -.ui-datepicker-cover { - display: none; /*sorry for IE5*/ - display/**/: block; /*sorry for IE5*/ - position: absolute; /*must have*/ - z-index: -1; /*must have*/ - filter: mask(); /*must have*/ - top: -4px; /*must have*/ - left: -4px; /*must have*/ - width: 200px; /*must have*/ - height: 200px; /*must have*/ -}/* - * jQuery UI Progressbar 1.8.12 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Progressbar#theming - */ -.ui-progressbar { height:2em; text-align: left; } -.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; } \ No newline at end of file diff --git a/media/feincms/css/jquery.alerts.css b/media/feincms/css/jquery.alerts.css deleted file mode 100644 index 0b5e1e8..0000000 --- a/media/feincms/css/jquery.alerts.css +++ /dev/null @@ -1,54 +0,0 @@ -#popup_container { - font-family: Arial, sans-serif; - font-size: 12px; - min-width: 300px; /* Dialog will be no smaller than this */ - max-width: 600px; /* Dialog will wrap after this width */ - background: #FFF; - border: solid 1px #666; - color: #000; -} - -#popup_title { - font-size: 14px; - font-weight: bold; - text-align: center; - line-height: 1.75em; - color: #666; - background: #eee url(images/title.gif) top repeat-x; - border: solid 1px #FFF; - border-bottom: solid 1px #666; - cursor: default; - padding: 0em; - margin: 0em; -} - -#popup_content { - background: 16px 16px no-repeat url(../img/info.gif); - padding: 1em 1.75em; - margin: 0em; -} - -#popup_content.alert { - background-image: url(../img/info.gif); -} - -#popup_content.confirm { - background-image: url(../img/important.gif); -} - -#popup_content.prompt { - background-image: url(../img/help.gif); -} - -#popup_message { - padding-left: 48px; -} - -#popup_panel { - text-align: center; - margin: 1em 0em 0em 1em; -} - -#popup_prompt { - margin: .5em 0em; -} \ No newline at end of file diff --git a/media/feincms/css/jquery.treeTable.css b/media/feincms/css/jquery.treeTable.css deleted file mode 100644 index 5305653..0000000 --- a/media/feincms/css/jquery.treeTable.css +++ /dev/null @@ -1,47 +0,0 @@ -/* jQuery TreeTable Core 2.0 stylesheet - * - * This file contains styles that are used to display the tree table. Each tree - * table is assigned the +treeTable+ class. - * ========================================================================= */ - -/* jquery.treeTable.collapsible - * ------------------------------------------------------------------------- */ -.treeTable tr td .expander { - background-position: left center; - background-repeat: no-repeat; - cursor: pointer; - padding: 0; - zoom: 1; /* IE7 Hack */ -} - -.treeTable tr.collapsed td .expander { - background-image: url(../img/toggle-expand-dark.png); -} - -.treeTable tr.expanded td .expander { - background-image: url(../img/toggle-collapse-dark.png); -} - -/* jquery.treeTable.sortable - * ------------------------------------------------------------------------- */ -.treeTable tr.selected, .treeTable tr.accept { - /*background-color: #7799ff; - color: #fff;*/ -} - -.treeTable tr.append { - border-bottom: 2px solid #7799ff; -} - -.treeTable tr.collapsed.selected td .expander, .treeTable tr.collapsed.accept td .expander { - /*background-image: url(../img/toggle-expand-light.png);*/ -} - -.treeTable tr.expanded.selected td .expander, .treeTable tr.expanded.accept td .expander { - /*background-image: url(../img/toggle-collapse-light.png);*/ -} - -.treeTable .ui-draggable-dragging { - color: #000; - z-index: 1; -} \ No newline at end of file diff --git a/media/feincms/css/layout.css b/media/feincms/css/layout.css deleted file mode 100644 index d7be020..0000000 --- a/media/feincms/css/layout.css +++ /dev/null @@ -1,242 +0,0 @@ - -#overview { - background-color:none; - padding:5px 0px 0px 5px; - margin:10px 0px 0px 10px; -} - -#content { - background-color:#fff; - margin-bottom:0px; - width:745px; -} - -.navi_tab { - float:left; - padding: 3px 10px 3px 10px; - cursor:pointer; - border: 1px solid #aaa; - border-bottom:none; - min-width:100px; -} -.tab_active { - height:16px; - font-weight: bold; - background-image:url('../img/default-bg.gif'); - color: white; -} -.tab_inactive { - margin-top:4px; - height:12px; - font-weight: normal; - background-image:none; - color: black; -} -#main_wrapper {margin-left:15px;} -#main { - clear:both; - padding: 10px 10px 10px 10px; - border: 1px solid #aaa; -} -.panel { - display:none; - position:relative; - padding-bottom:50px; -} - - -lab { font-weight: bold; margin-right:5px;} -span { margin-right: 5px;} - -.order-machine { - margin-bottom:10px; -} - -.order-item { - margin: 5px 15px 10px 5px; - background: #eee; - position:relative; - width:700px; - min-height:24px; - border: 1px solid #678; -} -.order-item span { - font-weight:bold; - margin-left:5px; -} -.order-item .handle { - float: left; - margin-top:2px; - cursor: move; -} -.item-content { - padding: 0px 10px 0px 15px; - margin-right:5px; - clear:both; - margin-left:10px; -} -.item-header { - padding: 3px 10px 3px 15px; - margin-left:10px; - margin-top:1px; -} -.item-header span { - margin-right:10px; - float:left; - font-weight: strong; -} -.item-delete { - cursor:pointer; - float:right; - margin:3px 0px 0px 5px; -} -.active-item { - border: 1px solid #00a; - background-color:#def; -} -.button { - margin:5px; padding:5px; - font-weight: bold; - background-image:url('../img/nav-bg.gif'); - cursor:pointer; - border: 1px solid #678; - width:30px; -} -th { vertical-align: middle; } - -#test-log { padding: 5px; border: 1px solid #ccc; } - -#overview span { margin-right:15px; margin-left:5px;} - -.richtextcontent {display:none;} - -textarea { - width: 100%; - margin-top:5px; - margin-bottom:5px; -} - -.item-minimize { - width: 15px; - height:15px; - float: left; - cursor: pointer; - margin-left:-17px; -} - -.item-minimize-disabled { - width: 15px; - height:15px; - float: left; - margin-left:-17px; -} - -.machine-control { - height:50px; - padding: 5px 0px 5px 0px; - border: 1px solid #678; - background-color:#ddd; - width:728px; - position:absolute; - left:-11px; - bottom:-21px; -} - -.control-unit { - float:left; - padding-left:15px; - padding-right:10px; - border-right: 1px solid #678; -} - -.control-unit span { - font-weight:bold; - margin-left:5px; -} - -hr { - color: #f00; - background-color: #bbb; - height: 1px; - margin-top: 5px; - margin-bottom: 5px; -} - -.empty-machine-msg { - margin:10px 0px 5px 300px; - font-style: italic; - font-size:14px; - color:#999; -} - -td span select { - width:600px; -} - -.popup_bg { - width:100%; height:100%; - background-color:white; - opacity: 0.5; - filter:alpha(opacity=50); - position:absolute; - top:0px; left:0px; -} - -#sitetree { - margin-left: 20px; - margin-top: 20px; - padding: 0px; -} - -.title-col { - position:relative; - z-index:2; - background-color:none; -} -td div.wrap { - border: 0px solid #000; - margin: -5px; - padding: 4px; - position:relative; -} - -.insert-as-child { - position:absolute; - bottom:-3px; - left: 15px; - height:15px; - width:100%; - border: 0px solid #0f0; -} -.insert-as-sibling { - position:absolute; - top:0px; - left: 15px; - height:10px; - width:100%; - border: 0px solid #f00; -} - -.nohover { - background-color: #eef; -} - -.flash { - background-color: #afa; -} - -.hover-as-child { - background-color:#cdf; -} - -.hover-as-sibling { - border: 1px solid #aee; -} - -.move-node { - cursor: move; - margin-left:5px; -} -.del-page { - cursor: pointer; -} diff --git a/media/feincms/helper.js b/media/feincms/helper.js deleted file mode 100644 index 58ca3eb..0000000 --- a/media/feincms/helper.js +++ /dev/null @@ -1,88 +0,0 @@ -function region_append(region, obj, modname) { - var wrp = []; - wrp.push('