soywiki 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +0 -1
- data/README.markdown +37 -45
- data/Rakefile +2 -6
- data/lib/soywiki.rb +1 -1
- data/lib/soywiki.vim +1 -1
- data/website/.gitignore +1 -0
- data/website/bottom.markdown +0 -0
- data/website/gen.rb +19 -0
- data/website/lightbox2/css/lightbox.css +27 -0
- data/website/lightbox2/images/bullet.gif +0 -0
- data/website/lightbox2/images/close.gif +0 -0
- data/website/lightbox2/images/closelabel.gif +0 -0
- data/website/lightbox2/images/donate-button.gif +0 -0
- data/website/lightbox2/images/download-icon.gif +0 -0
- data/website/lightbox2/images/image-1.jpg +0 -0
- data/website/lightbox2/images/loading.gif +0 -0
- data/website/lightbox2/images/nextlabel.gif +0 -0
- data/website/lightbox2/images/prevlabel.gif +0 -0
- data/website/lightbox2/images/thumb-1.jpg +0 -0
- data/website/lightbox2/index.html +63 -0
- data/website/lightbox2/js/builder.js +136 -0
- data/website/lightbox2/js/effects.js +1122 -0
- data/website/lightbox2/js/lightbox.js +498 -0
- data/website/lightbox2/js/prototype.js +4221 -0
- data/website/lightbox2/js/scriptaculous.js +58 -0
- data/website/soywiki-template.html +73 -0
- data/website/soywiki.html +446 -0
- data/website/stylesheets-vmail/960.css +1 -0
- data/website/stylesheets-vmail/reset.css +1 -0
- data/website/stylesheets-vmail/site.css +67 -0
- data/website/stylesheets-vmail/syntax-colors.css +33 -0
- data/website/stylesheets-vmail/text.css +1 -0
- data/website/top.screenshots +7 -0
- metadata +30 -2
data/.gitignore
CHANGED
data/README.markdown
CHANGED
@@ -25,8 +25,8 @@ and refactor wiki content at the speed of thought.
|
|
25
25
|
|
26
26
|
SoyWiki is good for tracking projects, contacts, ideas, and collecting
|
27
27
|
and organizing research. SoyWiki combines the affordances of notebooks,
|
28
|
-
index cards, and Post-it notes, and adds the power of hyperlinks
|
29
|
-
automatic indexing.
|
28
|
+
index cards, and Post-it notes, and adds to them the power of hyperlinks
|
29
|
+
and automatic indexing.
|
30
30
|
|
31
31
|
SoyWiki makes a great writing aid, especially if you do your writing in
|
32
32
|
Vim. You can have SoyWiki open in multiple Vim windows, tabs, and
|
@@ -35,13 +35,6 @@ of Vim abbreviations (`:help abbreviations`), a large monitor, and a
|
|
35
35
|
teapot, and you'll have your paper, essay, book, or screenplay written
|
36
36
|
in record time.
|
37
37
|
|
38
|
-
You don't need to shell out $$ for tools like [Scrivener][scriv] if you
|
39
|
-
appreciate how much more powerful Vim is for editing and navigating text
|
40
|
-
and how liberating it is to be able to store your content in the
|
41
|
-
non-proprietary, universal plain-text format. Proprietary tools and
|
42
|
-
formats will come and go every few years, but the plain text file format
|
43
|
-
and Vim are forever.
|
44
|
-
|
45
38
|
SoyWiki is free and open source.
|
46
39
|
|
47
40
|
[scriv]:http://www.literatureandlatte.com/scrivener.php
|
@@ -55,9 +48,7 @@ SoyWiki is free and open source.
|
|
55
48
|
|
56
49
|
The current version of SoyWiki assumes a Unix environment.
|
57
50
|
|
58
|
-
To use SoyWiki you should be fairly good at using Vim.
|
59
|
-
percent of the SoyWiki codebase implements the VimScript interface
|
60
|
-
layer.
|
51
|
+
To use SoyWiki you should be fairly good at using Vim.
|
61
52
|
|
62
53
|
## Installation
|
63
54
|
|
@@ -105,7 +96,7 @@ just run `soywiki`.
|
|
105
96
|
For basic use, SoyWiki works exactly like a typical wiki.
|
106
97
|
|
107
98
|
You write text, and when you want to create a new wiki page, you come up
|
108
|
-
with a WikiWord for it and format it in CamelCase. The
|
99
|
+
with a WikiWord for it and format it in CamelCase. The WikiLink you
|
109
100
|
just typed will automatically be syntax-highlighted, and pressing ENTER
|
110
101
|
on it will take you to the new page. Creating WikiWords and pressing
|
111
102
|
ENTER on them is the main way of linking wiki pages together. You'll be
|
@@ -116,16 +107,16 @@ That's all you need to know to get started.
|
|
116
107
|
|
117
108
|
## Wiki navigation
|
118
109
|
|
119
|
-
Because SoyWiki is not just wiki but a Vim program, it lets you
|
120
|
-
lot faster and with more economy than browser-based wikis.
|
110
|
+
Because SoyWiki is not just wiki but also a Vim program, it lets you
|
111
|
+
work a lot faster and with more economy than browser-based wikis.
|
121
112
|
|
122
113
|
You can navigate a SoyWiki wiki very quickly with the following
|
123
114
|
commands.
|
124
115
|
|
125
|
-
* `CTRL-n` and `CTRL-p` move the cursor directly to the next or previous
|
126
|
-
* `ENTER` follows the
|
127
|
-
* `,f` follows the first
|
128
|
-
* `,-` opens a
|
116
|
+
* `CTRL-n` and `CTRL-p` move the cursor directly to the next or previous WikiLink on the page
|
117
|
+
* `ENTER` follows the WikiLink under the cursor
|
118
|
+
* `,f` follows the first WikiLink after the cursor
|
119
|
+
* `,-` opens a WikiLink in a split window
|
129
120
|
* `,|` does the same, but in a vertical split window
|
130
121
|
|
131
122
|
You can also use Vim's jump motions `CTRL-o` and `CTRL-i` to move back
|
@@ -158,10 +149,10 @@ window by putting the cursor at the beginning of a hyperlink and typing
|
|
158
149
|
`gf`, or `C-w f` if you want to open the webpage in a split window. See
|
159
150
|
`:help netrw` for more information.
|
160
151
|
|
161
|
-
##
|
152
|
+
## WikiLink autocompletion
|
162
153
|
|
163
154
|
When you're writing a wiki page and you want to link to another page,
|
164
|
-
SoyWiki can help you autocomplete your
|
155
|
+
SoyWiki can help you autocomplete your WikiLink. Press `CTRL-x CTRL-u`
|
165
156
|
in Vim insert mode to invoke it.
|
166
157
|
|
167
158
|
|
@@ -257,16 +248,16 @@ But if you want, you can also namespace your WikiWords, like so:
|
|
257
248
|
|
258
249
|
namespaced.WikiWord
|
259
250
|
|
260
|
-
A namespaced WikiWord is a WikiWord prefixed by a namespace
|
261
|
-
namespace word must start with a lower-case letter and
|
262
|
-
only of letters, numbers, and underscore characters. You can't
|
263
|
-
namespace words together: the maximum nesting level is 1.
|
251
|
+
A namespaced WikiWord is a WikiWord prefixed by a namespace and a
|
252
|
+
period. The namespace word must start with a lower-case letter and
|
253
|
+
consist only of letters, numbers, and underscore characters. You can't
|
254
|
+
chain namespace words together: the maximum nesting level is 1.
|
264
255
|
|
265
|
-
Namespaced WikiWords help organize your
|
256
|
+
Namespaced WikiWords help organize your wiki space conceptually. They also
|
266
257
|
have two other benefits:
|
267
258
|
|
268
259
|
First, wiki pages that represent a namespaced WikiWord are stored under a
|
269
|
-
subdirectory named after the namespace. This can help reduce
|
260
|
+
subdirectory named after the namespace. This can help reduce clutter in
|
270
261
|
your wiki directory.
|
271
262
|
|
272
263
|
Second, a WikiWord namespace lets you use abbreviated links within that
|
@@ -284,17 +275,19 @@ WikiLink autocompletion also works with abbreviated namespaced links. Just type
|
|
284
275
|
period, and invoke autocompletion with `CTRL-x CTRL-u`.
|
285
276
|
|
286
277
|
|
287
|
-
## Expanding a
|
278
|
+
## Expanding a wiki page
|
288
279
|
|
289
|
-
SoyWiki lets you
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
280
|
+
SoyWiki lets you "expand" a wiki page. What this does is expand all the
|
281
|
+
wiki links in the page that appear alone on a line. Each of these links
|
282
|
+
is replaced by the content of the wiki page the link points to. This
|
283
|
+
expansion works recursively on all the expanded content. Don't worry.
|
284
|
+
It can't fall into an infinite recursive loop because it will only
|
285
|
+
expand each WikiWord it encounters once, leaving all subsequent
|
286
|
+
references to the same WikiWord unexpanded.
|
294
287
|
|
295
|
-
The
|
296
|
-
write it out to a new text file, pipe it to `lpr` to
|
297
|
-
whatever you like.
|
288
|
+
The expanded version of the page will appear in a new Vim scratch buffer.
|
289
|
+
From there you can write it out to a new text file, pipe it to `lpr` to
|
290
|
+
print it, or whatever you like.
|
298
291
|
|
299
292
|
There are two forms of expansion: seamful and seamless. Seamful
|
300
293
|
expansion expands wiki links into wiki pages and clearly marks where
|
@@ -306,14 +299,14 @@ anything, and it erases the WikiWord that got expanded.
|
|
306
299
|
* `,X` expands a wiki page seamlessly
|
307
300
|
|
308
301
|
Both modes of expansion are useful when you want to assemble a long
|
309
|
-
piece of writing by using one page as a master outline
|
310
|
-
|
311
|
-
|
312
|
-
|
302
|
+
piece of writing by using one page as a master outline that links to
|
303
|
+
other wiki pages that include the real content. And since expansion is
|
304
|
+
recursive, you can effectively nest outlines within outlines, like
|
305
|
+
dreams within dreams.
|
313
306
|
|
314
307
|
## Getting help
|
315
308
|
|
316
|
-
Typing `,?` will open
|
309
|
+
Typing `,?` will open the help webpage in a browser.
|
317
310
|
|
318
311
|
|
319
312
|
## Why CamelCase WikiLinks rule
|
@@ -323,10 +316,9 @@ pattern. But SoyWiki embraces it and wants everyone to adopt it, for the
|
|
323
316
|
following reasons:
|
324
317
|
|
325
318
|
* Besides being the original, CamelCase is the most elegantly minimalist approach to linking wiki pages together -- "with no additional markup whatsoever," as [Ward Cunningham put it][ward].
|
326
|
-
* It encourages you more than other wiki link patterns to create wiki pages with succinctly descriptive names.
|
327
|
-
* Because the link pattern is so minimal and succinct,
|
328
|
-
|
329
|
-
thought a lot less than other wiki patterns.
|
319
|
+
* It encourages you more than other wiki link patterns to create wiki pages with succinctly descriptive names that are easy to remember.
|
320
|
+
* Because the link pattern is so minimal and succinct, writing
|
321
|
+
them interrupts your flow of thought a lot less than other wiki patterns.
|
330
322
|
* It is very conducive to storing
|
331
323
|
wiki pages in plain text files: the page names can map directly to Unix
|
332
324
|
file names without any awkward character escaping.
|
data/Rakefile
CHANGED
@@ -10,12 +10,8 @@ require 'soywiki'
|
|
10
10
|
Bundler::GemHelper.install_tasks
|
11
11
|
|
12
12
|
desc "build and push website"
|
13
|
-
task :web do
|
14
|
-
|
15
|
-
Dir.chdir("website") do
|
16
|
-
puts "updating website"
|
17
|
-
puts `./run.sh #{Soywiki::VERSION}`
|
18
|
-
end
|
13
|
+
task :web => :build_webpage do
|
14
|
+
`scp website/soywiki.html zoe2@instantwatcher.com:~/danielchoi.com/public/software/`
|
19
15
|
end
|
20
16
|
|
21
17
|
desc "build website locally"
|
data/lib/soywiki.rb
CHANGED
data/lib/soywiki.vim
CHANGED
@@ -476,7 +476,7 @@ func! s:expand(seamless)
|
|
476
476
|
echom "Expanding seamlessly. Please wait."
|
477
477
|
let res = system(s:expand_command . " seamful " . bufname('%'))
|
478
478
|
endif
|
479
|
-
|
479
|
+
split new
|
480
480
|
setlocal buftype=nofile "scratch buffer for viewing; user can write
|
481
481
|
silent! put =res
|
482
482
|
silent! 1delete
|
data/website/.gitignore
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
images-original/
|
File without changes
|
data/website/gen.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'liquid'
|
2
|
+
require 'rdiscount'
|
3
|
+
|
4
|
+
module Webpage
|
5
|
+
def self.generate(version)
|
6
|
+
screenshots = RDiscount.new(File.read("top.screenshots")).to_html
|
7
|
+
readme = File.expand_path("../../README.markdown", __FILE__)
|
8
|
+
raise "no README" unless File.size?(readme)
|
9
|
+
md = File.read(readme).split(/^\s*$/)
|
10
|
+
headers = md.grep(/## Prerequisites/)
|
11
|
+
insert_at = md.index headers.first
|
12
|
+
md.insert(insert_at, screenshots)
|
13
|
+
md = md.join("\n\n")
|
14
|
+
# for some reason markdown inserts extra blank lines
|
15
|
+
content = RDiscount.new(md).to_html.gsub(/\n\n{3,}/, "\n\n")
|
16
|
+
template = File.read("soywiki-template.html")
|
17
|
+
out = Liquid::Template.parse(template).render 'content' => content, 'timestamp' => Time.now.to_i, 'version' => version
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
#lightbox{ position: absolute; left: 0; width: 100%; z-index: 100; text-align: center; line-height: 0;}
|
2
|
+
#lightbox img{ width: auto; height: auto;}
|
3
|
+
#lightbox a img{ border: none; }
|
4
|
+
|
5
|
+
#outerImageContainer{ position: relative; background-color: #fff; width: 250px; height: 250px; margin: 0 auto; }
|
6
|
+
#imageContainer{ padding: 10px; }
|
7
|
+
|
8
|
+
#loading{ position: absolute; top: 40%; left: 0%; height: 25%; width: 100%; text-align: center; line-height: 0; }
|
9
|
+
#hoverNav{ position: absolute; top: 0; left: 0; height: 100%; width: 100%; z-index: 10; }
|
10
|
+
#imageContainer>#hoverNav{ left: 0;}
|
11
|
+
#hoverNav a{ outline: none;}
|
12
|
+
|
13
|
+
#prevLink, #nextLink{ width: 49%; height: 100%; background-image: url(data:image/gif;base64,AAAA); /* Trick IE into showing hover */ display: block; }
|
14
|
+
#prevLink { left: 0; float: left;}
|
15
|
+
#nextLink { right: 0; float: right;}
|
16
|
+
#prevLink:hover, #prevLink:visited:hover { background: url(../images/prevlabel.gif) left 15% no-repeat; }
|
17
|
+
#nextLink:hover, #nextLink:visited:hover { background: url(../images/nextlabel.gif) right 15% no-repeat; }
|
18
|
+
|
19
|
+
#imageDataContainer{ font: 10px Verdana, Helvetica, sans-serif; background-color: #fff; margin: 0 auto; line-height: 1.4em; overflow: auto; width: 100% ; }
|
20
|
+
|
21
|
+
#imageData{ padding:0 10px; color: #666; }
|
22
|
+
#imageData #imageDetails{ width: 70%; float: left; text-align: left; }
|
23
|
+
#imageData #caption{ font-weight: bold; }
|
24
|
+
#imageData #numberDisplay{ display: block; clear: left; padding-bottom: 1.0em; }
|
25
|
+
#imageData #bottomNavClose{ width: 66px; float: right; padding-bottom: 0.7em; outline: none;}
|
26
|
+
|
27
|
+
#overlay{ position: absolute; top: 0; left: 0; z-index: 90; width: 100%; height: 500px; background-color: #000; }
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,63 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
2
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
3
|
+
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
|
4
|
+
<head>
|
5
|
+
|
6
|
+
<title>Lightbox JS v2.0 | Test Page</title>
|
7
|
+
|
8
|
+
<link rel="stylesheet" href="css/lightbox.css" type="text/css" media="screen" />
|
9
|
+
|
10
|
+
<script src="js/prototype.js" type="text/javascript"></script>
|
11
|
+
<script src="js/scriptaculous.js?load=effects,builder" type="text/javascript"></script>
|
12
|
+
<script src="js/lightbox.js" type="text/javascript"></script>
|
13
|
+
|
14
|
+
<style type="text/css">
|
15
|
+
body{ color: #333; font: 13px 'Lucida Grande', Verdana, sans-serif; }
|
16
|
+
</style>
|
17
|
+
|
18
|
+
</head>
|
19
|
+
<body>
|
20
|
+
|
21
|
+
|
22
|
+
<h1><a href="http://www.lokeshdhakar.com/projects/lightbox2/">Lightbox JS <em>v2.04</em></a></h1>
|
23
|
+
<p><a href="http://www.lokeshdhakar.com">by Lokesh Dhakar</a></p>
|
24
|
+
|
25
|
+
<h2>Example</h2>
|
26
|
+
|
27
|
+
<a href="images/image-1.jpg" rel="lightbox"><img src="images/thumb-1.jpg" width="100" height="40" alt="" /></a>
|
28
|
+
|
29
|
+
|
30
|
+
|
31
|
+
|
32
|
+
<h2>How to Use:</h2>
|
33
|
+
<h3>Part 1 - Setup</h3>
|
34
|
+
<ol>
|
35
|
+
<li>Lightbox v2.0 uses the Prototype Framework and Scriptaculous Effects Library. You will need to include these three Javascript files in your header.
|
36
|
+
<pre><code><script type="text/javascript" src="js/prototype.js"></script>
|
37
|
+
<script type="text/javascript" src="js/scriptaculous.js?load=effects,builder"></script>
|
38
|
+
<script type="text/javascript" src="js/lightbox.js"></script>
|
39
|
+
</code></pre>
|
40
|
+
</li>
|
41
|
+
<li>Include the Lightbox CSS file (or append your active stylesheet with the Lightbox styles).
|
42
|
+
<pre><code><link rel="stylesheet" href="css/lightbox.css" type="text/css" media="screen" />
|
43
|
+
</code></pre>
|
44
|
+
</li>
|
45
|
+
<li>Check the CSS and make sure the referenced <code>prevlabel.gif</code> and <code>nextlabel.gif</code> files are in the right location. Also, make sure the <code>loading.gif</code> and <code>closelabel.gif</code> files as referenced near the top of the <code>lightbox.js</code> file are in the right location.</li>
|
46
|
+
</ol>
|
47
|
+
<h3>Part 2 - Activate</h3>
|
48
|
+
<ol>
|
49
|
+
<li>Add a <code>rel="lightbox"</code> attribute to any link tag to activate the lightbox. For example:
|
50
|
+
<pre><code><a href="images/image-1.jpg" rel="lightbox" title="my caption">image #1</a>
|
51
|
+
</code></pre>
|
52
|
+
<em>Optional: </em>Use the <code>title</code> attribute if you want to show a caption. </li>
|
53
|
+
<li>If you have a set of related images that you would like to group, follow step one but additionally include a group name between square brackets in the rel attribute. For example:
|
54
|
+
<pre><code><a href="images/image-1.jpg" rel="lightbox[roadtrip]">image #1</a>
|
55
|
+
<a href="images/image-2.jpg" rel="lightbox[roadtrip]">image #2</a>
|
56
|
+
<a href="images/image-3.jpg" rel="lightbox[roadtrip]">image #3</a>
|
57
|
+
</code></pre>
|
58
|
+
No limits to the number of image sets per page or how many images are allowed in each set. Go nuts!</li>
|
59
|
+
</ol>
|
60
|
+
|
61
|
+
|
62
|
+
</body>
|
63
|
+
</html>
|
@@ -0,0 +1,136 @@
|
|
1
|
+
// script.aculo.us builder.js v1.8.1, Thu Jan 03 22:07:12 -0500 2008
|
2
|
+
|
3
|
+
// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
|
4
|
+
//
|
5
|
+
// script.aculo.us is freely distributable under the terms of an MIT-style license.
|
6
|
+
// For details, see the script.aculo.us web site: http://script.aculo.us/
|
7
|
+
|
8
|
+
var Builder = {
|
9
|
+
NODEMAP: {
|
10
|
+
AREA: 'map',
|
11
|
+
CAPTION: 'table',
|
12
|
+
COL: 'table',
|
13
|
+
COLGROUP: 'table',
|
14
|
+
LEGEND: 'fieldset',
|
15
|
+
OPTGROUP: 'select',
|
16
|
+
OPTION: 'select',
|
17
|
+
PARAM: 'object',
|
18
|
+
TBODY: 'table',
|
19
|
+
TD: 'table',
|
20
|
+
TFOOT: 'table',
|
21
|
+
TH: 'table',
|
22
|
+
THEAD: 'table',
|
23
|
+
TR: 'table'
|
24
|
+
},
|
25
|
+
// note: For Firefox < 1.5, OPTION and OPTGROUP tags are currently broken,
|
26
|
+
// due to a Firefox bug
|
27
|
+
node: function(elementName) {
|
28
|
+
elementName = elementName.toUpperCase();
|
29
|
+
|
30
|
+
// try innerHTML approach
|
31
|
+
var parentTag = this.NODEMAP[elementName] || 'div';
|
32
|
+
var parentElement = document.createElement(parentTag);
|
33
|
+
try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707
|
34
|
+
parentElement.innerHTML = "<" + elementName + "></" + elementName + ">";
|
35
|
+
} catch(e) {}
|
36
|
+
var element = parentElement.firstChild || null;
|
37
|
+
|
38
|
+
// see if browser added wrapping tags
|
39
|
+
if(element && (element.tagName.toUpperCase() != elementName))
|
40
|
+
element = element.getElementsByTagName(elementName)[0];
|
41
|
+
|
42
|
+
// fallback to createElement approach
|
43
|
+
if(!element) element = document.createElement(elementName);
|
44
|
+
|
45
|
+
// abort if nothing could be created
|
46
|
+
if(!element) return;
|
47
|
+
|
48
|
+
// attributes (or text)
|
49
|
+
if(arguments[1])
|
50
|
+
if(this._isStringOrNumber(arguments[1]) ||
|
51
|
+
(arguments[1] instanceof Array) ||
|
52
|
+
arguments[1].tagName) {
|
53
|
+
this._children(element, arguments[1]);
|
54
|
+
} else {
|
55
|
+
var attrs = this._attributes(arguments[1]);
|
56
|
+
if(attrs.length) {
|
57
|
+
try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707
|
58
|
+
parentElement.innerHTML = "<" +elementName + " " +
|
59
|
+
attrs + "></" + elementName + ">";
|
60
|
+
} catch(e) {}
|
61
|
+
element = parentElement.firstChild || null;
|
62
|
+
// workaround firefox 1.0.X bug
|
63
|
+
if(!element) {
|
64
|
+
element = document.createElement(elementName);
|
65
|
+
for(attr in arguments[1])
|
66
|
+
element[attr == 'class' ? 'className' : attr] = arguments[1][attr];
|
67
|
+
}
|
68
|
+
if(element.tagName.toUpperCase() != elementName)
|
69
|
+
element = parentElement.getElementsByTagName(elementName)[0];
|
70
|
+
}
|
71
|
+
}
|
72
|
+
|
73
|
+
// text, or array of children
|
74
|
+
if(arguments[2])
|
75
|
+
this._children(element, arguments[2]);
|
76
|
+
|
77
|
+
return element;
|
78
|
+
},
|
79
|
+
_text: function(text) {
|
80
|
+
return document.createTextNode(text);
|
81
|
+
},
|
82
|
+
|
83
|
+
ATTR_MAP: {
|
84
|
+
'className': 'class',
|
85
|
+
'htmlFor': 'for'
|
86
|
+
},
|
87
|
+
|
88
|
+
_attributes: function(attributes) {
|
89
|
+
var attrs = [];
|
90
|
+
for(attribute in attributes)
|
91
|
+
attrs.push((attribute in this.ATTR_MAP ? this.ATTR_MAP[attribute] : attribute) +
|
92
|
+
'="' + attributes[attribute].toString().escapeHTML().gsub(/"/,'"') + '"');
|
93
|
+
return attrs.join(" ");
|
94
|
+
},
|
95
|
+
_children: function(element, children) {
|
96
|
+
if(children.tagName) {
|
97
|
+
element.appendChild(children);
|
98
|
+
return;
|
99
|
+
}
|
100
|
+
if(typeof children=='object') { // array can hold nodes and text
|
101
|
+
children.flatten().each( function(e) {
|
102
|
+
if(typeof e=='object')
|
103
|
+
element.appendChild(e)
|
104
|
+
else
|
105
|
+
if(Builder._isStringOrNumber(e))
|
106
|
+
element.appendChild(Builder._text(e));
|
107
|
+
});
|
108
|
+
} else
|
109
|
+
if(Builder._isStringOrNumber(children))
|
110
|
+
element.appendChild(Builder._text(children));
|
111
|
+
},
|
112
|
+
_isStringOrNumber: function(param) {
|
113
|
+
return(typeof param=='string' || typeof param=='number');
|
114
|
+
},
|
115
|
+
build: function(html) {
|
116
|
+
var element = this.node('div');
|
117
|
+
$(element).update(html.strip());
|
118
|
+
return element.down();
|
119
|
+
},
|
120
|
+
dump: function(scope) {
|
121
|
+
if(typeof scope != 'object' && typeof scope != 'function') scope = window; //global scope
|
122
|
+
|
123
|
+
var tags = ("A ABBR ACRONYM ADDRESS APPLET AREA B BASE BASEFONT BDO BIG BLOCKQUOTE BODY " +
|
124
|
+
"BR BUTTON CAPTION CENTER CITE CODE COL COLGROUP DD DEL DFN DIR DIV DL DT EM FIELDSET " +
|
125
|
+
"FONT FORM FRAME FRAMESET H1 H2 H3 H4 H5 H6 HEAD HR HTML I IFRAME IMG INPUT INS ISINDEX "+
|
126
|
+
"KBD LABEL LEGEND LI LINK MAP MENU META NOFRAMES NOSCRIPT OBJECT OL OPTGROUP OPTION P "+
|
127
|
+
"PARAM PRE Q S SAMP SCRIPT SELECT SMALL SPAN STRIKE STRONG STYLE SUB SUP TABLE TBODY TD "+
|
128
|
+
"TEXTAREA TFOOT TH THEAD TITLE TR TT U UL VAR").split(/\s+/);
|
129
|
+
|
130
|
+
tags.each( function(tag){
|
131
|
+
scope[tag] = function() {
|
132
|
+
return Builder.node.apply(Builder, [tag].concat($A(arguments)));
|
133
|
+
}
|
134
|
+
});
|
135
|
+
}
|
136
|
+
}
|