A lot of projects ported from the old metanohi site.
This commit is contained in:
		@@ -0,0 +1,21 @@
 | 
			
		||||
#+title: wontofor
 | 
			
		||||
#&summary
 | 
			
		||||
A small JavaScript library
 | 
			
		||||
#&
 | 
			
		||||
#+license: bysa, page
 | 
			
		||||
#+license: gpl 3+, program
 | 
			
		||||
 | 
			
		||||
* wontofor
 | 
			
		||||
 | 
			
		||||
Wontofor is a JavaScript shortcut system. It allows for easier use of JS and is
 | 
			
		||||
not at all finished. It's a bit like jQuery.
 | 
			
		||||
 | 
			
		||||
It's very easy to create a module in wontofor. Two examples: [[parts/ajax.js][ajax.js]] and
 | 
			
		||||
[[parts/html.js][html.js]].
 | 
			
		||||
 | 
			
		||||
I've put a test up [[test1.html][here]].
 | 
			
		||||
 | 
			
		||||
The main JS file can be found [[wontofor.js][here]].
 | 
			
		||||
 | 
			
		||||
Wontofor is licensed under the [[http://www.gnu.org/licenses/gpl.html][GNU General Public License]], version 3 or any
 | 
			
		||||
later version.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										13
									
								
								site/projects/wontofor/material/alice.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								site/projects/wontofor/material/alice.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
			
		||||
CHAPTER I. Down the Rabbit-Hole
 | 
			
		||||
 | 
			
		||||
Alice was beginning to get very tired of sitting by her sister on the
 | 
			
		||||
bank, and of having nothing to do: once or twice she had peeped into the
 | 
			
		||||
book her sister was reading, but it had no pictures or conversations in
 | 
			
		||||
it, 'and what is the use of a book,' thought Alice 'without pictures or
 | 
			
		||||
conversation?'
 | 
			
		||||
 | 
			
		||||
So she was considering in her own mind (as well as she could, for the
 | 
			
		||||
hot day made her feel very sleepy and stupid), whether the pleasure
 | 
			
		||||
of making a daisy-chain would be worth the trouble of getting up and
 | 
			
		||||
picking the daisies, when suddenly a White Rabbit with pink eyes ran
 | 
			
		||||
close by her.
 | 
			
		||||
							
								
								
									
										23
									
								
								site/projects/wontofor/material/holmes.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								site/projects/wontofor/material/holmes.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
			
		||||
ADVENTURE I. A SCANDAL IN BOHEMIA
 | 
			
		||||
 | 
			
		||||
I.
 | 
			
		||||
 | 
			
		||||
To Sherlock Holmes she is always THE woman. I have seldom heard
 | 
			
		||||
him mention her under any other name. In his eyes she eclipses
 | 
			
		||||
and predominates the whole of her sex. It was not that he felt
 | 
			
		||||
any emotion akin to love for Irene Adler. All emotions, and that
 | 
			
		||||
one particularly, were abhorrent to his cold, precise but
 | 
			
		||||
admirably balanced mind. He was, I take it, the most perfect
 | 
			
		||||
reasoning and observing machine that the world has seen, but as a
 | 
			
		||||
lover he would have placed himself in a false position. He never
 | 
			
		||||
spoke of the softer passions, save with a gibe and a sneer. They
 | 
			
		||||
were admirable things for the observer--excellent for drawing the
 | 
			
		||||
veil from men's motives and actions. But for the trained reasoner
 | 
			
		||||
to admit such intrusions into his own delicate and finely
 | 
			
		||||
adjusted temperament was to introduce a distracting factor which
 | 
			
		||||
might throw a doubt upon all his mental results. Grit in a
 | 
			
		||||
sensitive instrument, or a crack in one of his own high-power
 | 
			
		||||
lenses, would not be more disturbing than a strong emotion in a
 | 
			
		||||
nature such as his. And yet there was but one woman to him, and
 | 
			
		||||
that woman was the late Irene Adler, of dubious and questionable
 | 
			
		||||
memory.
 | 
			
		||||
							
								
								
									
										35
									
								
								site/projects/wontofor/parts/ajax.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								site/projects/wontofor/parts/ajax.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,35 @@
 | 
			
		||||
/*  wontofor: A JavaScript shortcut system
 | 
			
		||||
 *  Copyright (C) 2010  Niels Serup
 | 
			
		||||
 *
 | 
			
		||||
 *  This file is part of wontofor.
 | 
			
		||||
 *
 | 
			
		||||
 *  wontofor is free software: you can redistribute it and/or modify
 | 
			
		||||
 *  it under the terms of the GNU General Public License as published by
 | 
			
		||||
 *  the Free Software Foundation, either version 3 of the License, or
 | 
			
		||||
 *  (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 *  wontofor is distributed in the hope that it will be useful,
 | 
			
		||||
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 *  GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 *  You should have received a copy of the GNU General Public License
 | 
			
		||||
 *  along with wontofor.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 *
 | 
			
		||||
 *  Maintained by Niels Serup <ns@metanohi.org>
 | 
			
		||||
 *  See <http://metanohi.org/projects/wontofor/>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
wontofor.ajax.getWeb = function(url, func, args, method) {
 | 
			
		||||
    var req = new XMLHttpRequest()
 | 
			
		||||
    req.open(method, url, true)
 | 
			
		||||
    req.onreadystatechange = function() {
 | 
			
		||||
        if (req.readyState == 4) {
 | 
			
		||||
            if (req.status == 200)
 | 
			
		||||
                func(req.responseText, true)
 | 
			
		||||
            else
 | 
			
		||||
                func(req.status, false)
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    req.send(null)
 | 
			
		||||
}.base('.', alert, [], 'GET')
 | 
			
		||||
							
								
								
									
										48
									
								
								site/projects/wontofor/parts/html.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								site/projects/wontofor/parts/html.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,48 @@
 | 
			
		||||
/*  wontofor: A JavaScript shortcut system
 | 
			
		||||
 *  Copyright (C) 2010  Niels Serup
 | 
			
		||||
 *
 | 
			
		||||
 *  This file is part of wontofor.
 | 
			
		||||
 *
 | 
			
		||||
 *  wontofor is free software: you can redistribute it and/or modify
 | 
			
		||||
 *  it under the terms of the GNU General Public License as published by
 | 
			
		||||
 *  the Free Software Foundation, either version 3 of the License, or
 | 
			
		||||
 *  (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 *  wontofor is distributed in the hope that it will be useful,
 | 
			
		||||
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 *  GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 *  You should have received a copy of the GNU General Public License
 | 
			
		||||
 *  along with wontofor.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 *
 | 
			
		||||
 *  Maintained by Niels Serup <ns@metanohi.org>
 | 
			
		||||
 *  See <http://metanohi.org/projects/wontofor/>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
wontofor.html.body = document.body
 | 
			
		||||
 | 
			
		||||
HTMLElement.prototype.set_opacity = function(val) {
 | 
			
		||||
    this.style.opacity = val
 | 
			
		||||
    this.style.filter = 'alpha(opacity=' + val*100 + ')'
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
HTMLElement.prototype.remove = function() {
 | 
			
		||||
    this.parentNode.removeChild(this)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
HTMLElement.prototype.setText = function(text) {
 | 
			
		||||
    this.innerHTML = text
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
HTMLElement.prototype.append = function(elem) {
 | 
			
		||||
    this.appendChild(elem)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wontofor.html.create = function(tag) {
 | 
			
		||||
    return document.createElement(tag)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wontofor.html.setTitle = function(title) {
 | 
			
		||||
    document.title = title
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										30
									
								
								site/projects/wontofor/test1.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								site/projects/wontofor/test1.html
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
			
		||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
 | 
			
		||||
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 | 
			
		||||
<html xmlns="http://www.w3c.org/1999/xhtml">
 | 
			
		||||
<head>
 | 
			
		||||
<title>wontofor test 1</title>
 | 
			
		||||
<style type='text/css'>
 | 
			
		||||
 | 
			
		||||
</style>
 | 
			
		||||
<script type='text/javascript' src='wontofor.js'></script>
 | 
			
		||||
<script type='text/javascript'>
 | 
			
		||||
function go_on() {
 | 
			
		||||
    w.html.setTitle('Testing...')
 | 
			
		||||
    w.ajax.getWeb('material/alice.txt', function(txt) {
 | 
			
		||||
        par = w.html.create('p')
 | 
			
		||||
        par.setText(txt)
 | 
			
		||||
	w.html.body.append(par)
 | 
			
		||||
    })
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
window.onload = function() {
 | 
			
		||||
    w = wontofor
 | 
			
		||||
    w.setInclusionPath('parts')
 | 
			
		||||
    w.include('ajax', 'html', go_on)
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
							
								
								
									
										152
									
								
								site/projects/wontofor/wontofor.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										152
									
								
								site/projects/wontofor/wontofor.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,152 @@
 | 
			
		||||
/*  wontofor: A JavaScript shortcut system
 | 
			
		||||
 *  Copyright (C) 2010  Niels Serup
 | 
			
		||||
 *
 | 
			
		||||
 *  This file is part of wontofor.
 | 
			
		||||
 *
 | 
			
		||||
 *  wontofor is free software: you can redistribute it and/or modify
 | 
			
		||||
 *  it under the terms of the GNU General Public License as published by
 | 
			
		||||
 *  the Free Software Foundation, either version 3 of the License, or
 | 
			
		||||
 *  (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 *  wontofor is distributed in the hope that it will be useful,
 | 
			
		||||
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 *  GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 *  You should have received a copy of the GNU General Public License
 | 
			
		||||
 *  along with wontofor.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 *
 | 
			
		||||
 *  Maintained by Niels Serup <ns@metanohi.org>
 | 
			
		||||
 *  See <http://metanohi.org/projects/wontofor/>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
wontofor = function() {
 | 
			
		||||
    this.headElement = document.getElementsByTagName('head')[0]
 | 
			
		||||
    this.inclusions = []
 | 
			
		||||
    this.inclusionPath = ''
 | 
			
		||||
    this.inclusionsInProgress = []
 | 
			
		||||
    this.temp = {}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wontofor.prototype.dump = function(text) {
 | 
			
		||||
    alert(text)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wontofor.prototype.setInclusionPath = function(path) {
 | 
			
		||||
    if (path.length > 0 && path.substr(path.length-1) != '/')
 | 
			
		||||
        path += '/'
 | 
			
		||||
    this.inclusionPath = path
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wontofor.prototype.include = function() {
 | 
			
		||||
    if (arguments.length < 1) return
 | 
			
		||||
    
 | 
			
		||||
    var func = arguments[arguments.length-1]
 | 
			
		||||
    
 | 
			
		||||
    this.clearCompletedInclusions()
 | 
			
		||||
    
 | 
			
		||||
    var i
 | 
			
		||||
    this.inclusionsInProgress.push([0, -1, null])
 | 
			
		||||
    var include_id = this.inclusionsInProgress.length-1
 | 
			
		||||
    var num = 0
 | 
			
		||||
    var to_be_included = []
 | 
			
		||||
    
 | 
			
		||||
    for (i = 0; i < arguments.length-1; i++) {
 | 
			
		||||
        if (this.inclusions.has(name)) continue
 | 
			
		||||
        
 | 
			
		||||
        to_be_included.push(i)
 | 
			
		||||
        num++
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    if (num == 0)
 | 
			
		||||
        return
 | 
			
		||||
    
 | 
			
		||||
    this.inclusionsInProgress[include_id] = [num, 0, func]
 | 
			
		||||
    for (i = 0; i < num; i++) {
 | 
			
		||||
        this.includeOne(arguments[to_be_included[i]], include_id)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wontofor.prototype.includeOne = function(name, id) {
 | 
			
		||||
    this.temp[name] = function() {}
 | 
			
		||||
    this[name] = this.temp[name].prototype
 | 
			
		||||
    this[name].root = this
 | 
			
		||||
    this[name].name = name
 | 
			
		||||
    
 | 
			
		||||
    var _this = this
 | 
			
		||||
    var elem = document.createElement('script')
 | 
			
		||||
    elem.type = 'text/javascript'
 | 
			
		||||
    
 | 
			
		||||
    elem.onload = function (event) {
 | 
			
		||||
        _this.endInclusion(name, id)
 | 
			
		||||
    }
 | 
			
		||||
    elem.onreadystatechange = function (event) {
 | 
			
		||||
        if (js.readyState == 'complete')
 | 
			
		||||
            _this.endInclusion(name, id)
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    elem.src = this.inclusionPath + name + '.js'
 | 
			
		||||
 | 
			
		||||
    this.headElement.appendChild(elem)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wontofor.prototype.endInclusion = function(name, id) {
 | 
			
		||||
    if (this.inclusions.has(name)) return
 | 
			
		||||
    
 | 
			
		||||
    this[name] = new this.temp[name]()
 | 
			
		||||
    delete this.temp[name]
 | 
			
		||||
    this.inclusions.push(name)
 | 
			
		||||
    
 | 
			
		||||
    if (this.inclusionsInProgress[id][0] == this.inclusionsInProgress[id][1]+1)
 | 
			
		||||
        this.inclusionsInProgress[id][2]()
 | 
			
		||||
    this.inclusionsInProgress[id][1]++
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wontofor.prototype.clearCompletedInclusions = function() {
 | 
			
		||||
    var i
 | 
			
		||||
    var last_unfinished = -1
 | 
			
		||||
    for (i = 0; i < this.inclusionsInProgress.length; i++) {
 | 
			
		||||
        if (this.inclusionsInProgress[i][0] != this.inclusionsInProgress[i][1])
 | 
			
		||||
            last_unfinished = i
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    for (i = last_unfinished+1; i < this.inclusionsInProgress.length; i++) {
 | 
			
		||||
        this.inclusionsInProgress.pop()
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Function.prototype.base = function() {
 | 
			
		||||
    var _this = this
 | 
			
		||||
    var _arguments = arguments
 | 
			
		||||
    var _arguments_length = _arguments.length
 | 
			
		||||
    return function() {
 | 
			
		||||
        var mixed_args = []
 | 
			
		||||
        var i = 0
 | 
			
		||||
        var arg
 | 
			
		||||
        while (i < arguments.length) {
 | 
			
		||||
            arg = arguments[i]
 | 
			
		||||
            if (arg != null)
 | 
			
		||||
                mixed_args.push(arg)
 | 
			
		||||
            else if (_arguments_length > i)
 | 
			
		||||
                mixed_args.push(_arguments[i])
 | 
			
		||||
            else
 | 
			
		||||
                mixed_args.push(null)
 | 
			
		||||
            i++
 | 
			
		||||
        }
 | 
			
		||||
        while (i < _arguments.length) {
 | 
			
		||||
            mixed_args.push(_arguments[i])
 | 
			
		||||
            i++
 | 
			
		||||
        }
 | 
			
		||||
        return _this.apply(this, mixed_args)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Array.prototype.has = function(obj) {
 | 
			
		||||
    for (var i = 0; i < this.length; i++) {
 | 
			
		||||
        if (this[i] == obj)
 | 
			
		||||
            return true
 | 
			
		||||
    }
 | 
			
		||||
    return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wontofor = new wontofor()
 | 
			
		||||
		Reference in New Issue
	
	Block a user