Copied over 0.14.2 ./public contents
This commit is contained in:
parent
26a5338764
commit
7f8d3adfb5
14 changed files with 4408 additions and 2672 deletions
|
@ -5,8 +5,6 @@ class ApplicationController < ActionController::Base
|
|||
before_filter :connect_to_model, :setup_url_generator, :set_content_type_header, :set_robots_metatag
|
||||
after_filter :remember_location, :teardown_url_generator
|
||||
|
||||
observer :page_observer
|
||||
|
||||
# For injecting a different wiki model implementation. Intended for use in tests
|
||||
def self.wiki=(the_wiki)
|
||||
# a global variable is used here because Rails reloads controller and model classes in the
|
||||
|
|
|
@ -14,7 +14,7 @@ Rails::Initializer.run do |config|
|
|||
# config.action_controller.fragment_cache_store = :file_store, "#{RAILS_ROOT}/cache"
|
||||
|
||||
# Activate observers that should always be running
|
||||
# config.active_record.observers = :cacher, :garbage_collector
|
||||
config.active_record.observers = :page_observer
|
||||
|
||||
# Use Active Record's schema dumper instead of SQL when creating the test database
|
||||
# (enables use of different database adapters for development and test environments)
|
||||
|
|
|
@ -23,6 +23,14 @@ ActiveRecord::Schema.define() do
|
|||
t.column "ip", :string, :limit => 60
|
||||
end
|
||||
|
||||
create_table "sessions", :force => true do |t|
|
||||
t.column "session_id", :string
|
||||
t.column "data", :text
|
||||
t.column "updated_at", :datetime
|
||||
end
|
||||
|
||||
add_index "sessions", ["session_id"], :name => "sessions_session_id_index"
|
||||
|
||||
create_table "system", :force => true do |t|
|
||||
t.column "password", :string, :limit => 60
|
||||
end
|
||||
|
|
|
@ -18,10 +18,18 @@ Options +FollowSymLinks +ExecCGI
|
|||
# Example:
|
||||
# RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
|
||||
RewriteEngine On
|
||||
|
||||
# If your Rails application is accessed via an Alias directive,
|
||||
# then you MUST also set the RewriteBase in this htaccess file.
|
||||
#
|
||||
# Example:
|
||||
# Alias /myrailsapp /path/to/myrailsapp/public
|
||||
# RewriteBase /myrailsapp
|
||||
|
||||
RewriteRule ^$ index.html [QSA]
|
||||
RewriteRule ^([^.]+)$ $1.html [QSA]
|
||||
RewriteCond %{REQUEST_FILENAME} !-f
|
||||
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
|
||||
RewriteRule ^(.*)$ dispatch.cgi [QSA,L]
|
||||
|
||||
# In case Rails experiences terminal errors
|
||||
# Instead of displaying this message you can supply a file here which will be rendered instead
|
||||
|
@ -29,4 +37,4 @@ RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
|
|||
# Example:
|
||||
# ErrorDocument 500 /500.html
|
||||
|
||||
ErrorDocument 500 "<h2>Application error</h2>Rails application failed to start properly"
|
||||
ErrorDocument 500 "<h2>Application error</h2>Rails application failed to start properly"
|
|
@ -1,10 +1,10 @@
|
|||
#!/usr/bin/env ruby
|
||||
|
||||
require File.dirname(__FILE__) + "/../config/environment" unless defined?(RAILS_ROOT)
|
||||
|
||||
# If you're using RubyGems and mod_ruby, this require should be changed to an absolute path one, like:
|
||||
# "/usr/local/lib/ruby/gems/1.8/gems/rails-0.8.0/lib/dispatcher" -- otherwise performance is severely impaired
|
||||
require "dispatcher"
|
||||
|
||||
ADDITIONAL_LOAD_PATHS.reverse.each { |dir| $:.unshift(dir) if File.directory?(dir) } if defined?(Apache::RubyRun)
|
||||
#!c:/ruby/bin/ruby
|
||||
|
||||
require File.dirname(__FILE__) + "/../config/environment" unless defined?(RAILS_ROOT)
|
||||
|
||||
# If you're using RubyGems and mod_ruby, this require should be changed to an absolute path one, like:
|
||||
# "/usr/local/lib/ruby/gems/1.8/gems/rails-0.8.0/lib/dispatcher" -- otherwise performance is severely impaired
|
||||
require "dispatcher"
|
||||
|
||||
ADDITIONAL_LOAD_PATHS.reverse.each { |dir| $:.unshift(dir) if File.directory?(dir) } if defined?(Apache::RubyRun)
|
||||
Dispatcher.dispatch
|
|
@ -1,24 +1,24 @@
|
|||
#!/usr/bin/env ruby
|
||||
#
|
||||
# You may specify the path to the FastCGI crash log (a log of unhandled
|
||||
# exceptions which forced the FastCGI instance to exit, great for debugging)
|
||||
# and the number of requests to process before running garbage collection.
|
||||
#
|
||||
# By default, the FastCGI crash log is RAILS_ROOT/log/fastcgi.crash.log
|
||||
# and the GC period is nil (turned off). A reasonable number of requests
|
||||
# could range from 10-100 depending on the memory footprint of your app.
|
||||
#
|
||||
# Example:
|
||||
# # Default log path, normal GC behavior.
|
||||
# RailsFCGIHandler.process!
|
||||
#
|
||||
# # Default log path, 50 requests between GC.
|
||||
# RailsFCGIHandler.process! nil, 50
|
||||
#
|
||||
# # Custom log path, normal GC behavior.
|
||||
# RailsFCGIHandler.process! '/var/log/myapp_fcgi_crash.log'
|
||||
#
|
||||
require File.dirname(__FILE__) + "/../config/environment"
|
||||
require 'fcgi_handler'
|
||||
|
||||
RailsFCGIHandler.process!
|
||||
#!c:/ruby/bin/ruby
|
||||
#
|
||||
# You may specify the path to the FastCGI crash log (a log of unhandled
|
||||
# exceptions which forced the FastCGI instance to exit, great for debugging)
|
||||
# and the number of requests to process before running garbage collection.
|
||||
#
|
||||
# By default, the FastCGI crash log is RAILS_ROOT/log/fastcgi.crash.log
|
||||
# and the GC period is nil (turned off). A reasonable number of requests
|
||||
# could range from 10-100 depending on the memory footprint of your app.
|
||||
#
|
||||
# Example:
|
||||
# # Default log path, normal GC behavior.
|
||||
# RailsFCGIHandler.process!
|
||||
#
|
||||
# # Default log path, 50 requests between GC.
|
||||
# RailsFCGIHandler.process! nil, 50
|
||||
#
|
||||
# # Custom log path, normal GC behavior.
|
||||
# RailsFCGIHandler.process! '/var/log/myapp_fcgi_crash.log'
|
||||
#
|
||||
require File.dirname(__FILE__) + "/../config/environment"
|
||||
require 'fcgi_handler'
|
||||
|
||||
RailsFCGIHandler.process!
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#!/usr/bin/env ruby
|
||||
#!c:/ruby/bin/ruby
|
||||
|
||||
require File.dirname(__FILE__) + "/../config/environment" unless defined?(RAILS_ROOT)
|
||||
|
||||
|
|
1154
public/javascripts/controls.js
vendored
1154
public/javascripts/controls.js
vendored
File diff suppressed because it is too large
Load diff
1053
public/javascripts/dragdrop.js
vendored
1053
public/javascripts/dragdrop.js
vendored
File diff suppressed because it is too large
Load diff
1713
public/javascripts/effects.js
vendored
1713
public/javascripts/effects.js
vendored
File diff suppressed because it is too large
Load diff
2762
public/javascripts/prototype.js
vendored
2762
public/javascripts/prototype.js
vendored
File diff suppressed because it is too large
Load diff
47
public/javascripts/scriptaculous.js
Normal file
47
public/javascripts/scriptaculous.js
Normal file
|
@ -0,0 +1,47 @@
|
|||
// Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining
|
||||
// a copy of this software and associated documentation files (the
|
||||
// "Software"), to deal in the Software without restriction, including
|
||||
// without limitation the rights to use, copy, modify, merge, publish,
|
||||
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||
// permit persons to whom the Software is furnished to do so, subject to
|
||||
// the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be
|
||||
// included in all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
var Scriptaculous = {
|
||||
Version: '1.5_rc3',
|
||||
require: function(libraryName) {
|
||||
// inserting via DOM fails in Safari 2.0, so brute force approach
|
||||
document.write('<script type="text/javascript" src="'+libraryName+'"></script>');
|
||||
},
|
||||
load: function() {
|
||||
if((typeof Prototype=='undefined') ||
|
||||
parseFloat(Prototype.Version.split(".")[0] + "." +
|
||||
Prototype.Version.split(".")[1]) < 1.4)
|
||||
throw("script.aculo.us requires the Prototype JavaScript framework >= 1.4.0");
|
||||
var scriptTags = document.getElementsByTagName("script");
|
||||
for(var i=0;i<scriptTags.length;i++) {
|
||||
if(scriptTags[i].src && scriptTags[i].src.match(/scriptaculous\.js(\?.*)?$/)) {
|
||||
var path = scriptTags[i].src.replace(/scriptaculous\.js(\?.*)?$/,'');
|
||||
this.require(path + 'effects.js');
|
||||
this.require(path + 'dragdrop.js');
|
||||
this.require(path + 'controls.js');
|
||||
this.require(path + 'slider.js');
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Scriptaculous.load();
|
258
public/javascripts/slider.js
Normal file
258
public/javascripts/slider.js
Normal file
|
@ -0,0 +1,258 @@
|
|||
// Copyright (c) 2005 Marty Haught
|
||||
//
|
||||
// See scriptaculous.js for full license.
|
||||
|
||||
if(!Control) var Control = {};
|
||||
Control.Slider = Class.create();
|
||||
|
||||
// options:
|
||||
// axis: 'vertical', or 'horizontal' (default)
|
||||
// increment: (default: 1)
|
||||
// step: (default: 1)
|
||||
//
|
||||
// callbacks:
|
||||
// onChange(value)
|
||||
// onSlide(value)
|
||||
Control.Slider.prototype = {
|
||||
initialize: function(handle, track, options) {
|
||||
this.handle = $(handle);
|
||||
this.track = $(track);
|
||||
|
||||
this.options = options || {};
|
||||
|
||||
this.axis = this.options.axis || 'horizontal';
|
||||
this.increment = this.options.increment || 1;
|
||||
this.step = parseInt(this.options.step) || 1;
|
||||
this.value = 0;
|
||||
|
||||
var defaultMaximum = Math.round(this.track.offsetWidth / this.increment);
|
||||
if(this.isVertical()) defaultMaximum = Math.round(this.track.offsetHeight / this.increment);
|
||||
|
||||
this.maximum = this.options.maximum || defaultMaximum;
|
||||
this.minimum = this.options.minimum || 0;
|
||||
|
||||
// Will be used to align the handle onto the track, if necessary
|
||||
this.alignX = parseInt (this.options.alignX) || 0;
|
||||
this.alignY = parseInt (this.options.alignY) || 0;
|
||||
|
||||
// Zero out the slider position
|
||||
this.setCurrentLeft(Position.cumulativeOffset(this.track)[0] - Position.cumulativeOffset(this.handle)[0] + this.alignX);
|
||||
this.setCurrentTop(this.trackTop() - Position.cumulativeOffset(this.handle)[1] + this.alignY);
|
||||
|
||||
this.offsetX = 0;
|
||||
this.offsetY = 0;
|
||||
|
||||
this.originalLeft = this.currentLeft();
|
||||
this.originalTop = this.currentTop();
|
||||
this.originalZ = parseInt(this.handle.style.zIndex || "0");
|
||||
|
||||
// Prepopulate Slider value
|
||||
this.setSliderValue(parseInt(this.options.sliderValue) || 0);
|
||||
|
||||
this.active = false;
|
||||
this.dragging = false;
|
||||
this.disabled = false;
|
||||
|
||||
// FIXME: use css
|
||||
this.handleImage = $(this.options.handleImage) || false;
|
||||
this.handleDisabled = this.options.handleDisabled || false;
|
||||
this.handleEnabled = false;
|
||||
if(this.handleImage)
|
||||
this.handleEnabled = this.handleImage.src || false;
|
||||
|
||||
if(this.options.disabled)
|
||||
this.setDisabled();
|
||||
|
||||
// Value Array
|
||||
this.values = this.options.values || false; // Add method to validate and sort??
|
||||
|
||||
Element.makePositioned(this.handle); // fix IE
|
||||
|
||||
this.eventMouseDown = this.startDrag.bindAsEventListener(this);
|
||||
this.eventMouseUp = this.endDrag.bindAsEventListener(this);
|
||||
this.eventMouseMove = this.update.bindAsEventListener(this);
|
||||
this.eventKeypress = this.keyPress.bindAsEventListener(this);
|
||||
|
||||
Event.observe(this.handle, "mousedown", this.eventMouseDown);
|
||||
Event.observe(document, "mouseup", this.eventMouseUp);
|
||||
Event.observe(document, "mousemove", this.eventMouseMove);
|
||||
Event.observe(document, "keypress", this.eventKeypress);
|
||||
},
|
||||
dispose: function() {
|
||||
Event.stopObserving(this.handle, "mousedown", this.eventMouseDown);
|
||||
Event.stopObserving(document, "mouseup", this.eventMouseUp);
|
||||
Event.stopObserving(document, "mousemove", this.eventMouseMove);
|
||||
Event.stopObserving(document, "keypress", this.eventKeypress);
|
||||
},
|
||||
setDisabled: function(){
|
||||
this.disabled = true;
|
||||
if(this.handleDisabled)
|
||||
this.handleImage.src = this.handleDisabled;
|
||||
},
|
||||
setEnabled: function(){
|
||||
this.disabled = false;
|
||||
if(this.handleEnabled)
|
||||
this.handleImage.src = this.handleEnabled;
|
||||
},
|
||||
currentLeft: function() {
|
||||
return parseInt(this.handle.style.left || '0');
|
||||
},
|
||||
currentTop: function() {
|
||||
return parseInt(this.handle.style.top || '0');
|
||||
},
|
||||
setCurrentLeft: function(left) {
|
||||
this.handle.style.left = left +"px";
|
||||
},
|
||||
setCurrentTop: function(top) {
|
||||
this.handle.style.top = top +"px";
|
||||
},
|
||||
trackLeft: function(){
|
||||
return Position.cumulativeOffset(this.track)[0];
|
||||
},
|
||||
trackTop: function(){
|
||||
return Position.cumulativeOffset(this.track)[1];
|
||||
},
|
||||
getNearestValue: function(value){
|
||||
if(this.values){
|
||||
var i = 0;
|
||||
var offset = Math.abs(this.values[0] - value);
|
||||
var newValue = this.values[0];
|
||||
|
||||
for(i=0; i < this.values.length; i++){
|
||||
var currentOffset = Math.abs(this.values[i] - value);
|
||||
if(currentOffset < offset){
|
||||
newValue = this.values[i];
|
||||
offset = currentOffset;
|
||||
}
|
||||
}
|
||||
return newValue;
|
||||
}
|
||||
return value;
|
||||
},
|
||||
setSliderValue: function(sliderValue){
|
||||
// First check our max and minimum and nearest values
|
||||
sliderValue = this.getNearestValue(sliderValue);
|
||||
if(sliderValue > this.maximum) sliderValue = this.maximum;
|
||||
if(sliderValue < this.minimum) sliderValue = this.minimum;
|
||||
var offsetDiff = (sliderValue - (this.value||this.minimum)) * this.increment;
|
||||
|
||||
if(this.isVertical()){
|
||||
this.setCurrentTop(offsetDiff + this.currentTop());
|
||||
} else {
|
||||
this.setCurrentLeft(offsetDiff + this.currentLeft());
|
||||
}
|
||||
this.value = sliderValue;
|
||||
this.updateFinished();
|
||||
},
|
||||
minimumOffset: function(){
|
||||
return(this.isVertical() ?
|
||||
this.trackTop() + this.alignY :
|
||||
this.trackLeft() + this.alignX);
|
||||
},
|
||||
maximumOffset: function(){
|
||||
return(this.isVertical() ?
|
||||
this.trackTop() + this.alignY + (this.maximum - this.minimum) * this.increment :
|
||||
this.trackLeft() + this.alignX + (this.maximum - this.minimum) * this.increment);
|
||||
},
|
||||
isVertical: function(){
|
||||
return (this.axis == 'vertical');
|
||||
},
|
||||
startDrag: function(event) {
|
||||
if(Event.isLeftClick(event)) {
|
||||
if(!this.disabled){
|
||||
this.active = true;
|
||||
var pointer = [Event.pointerX(event), Event.pointerY(event)];
|
||||
var offsets = Position.cumulativeOffset(this.handle);
|
||||
this.offsetX = (pointer[0] - offsets[0]);
|
||||
this.offsetY = (pointer[1] - offsets[1]);
|
||||
this.originalLeft = this.currentLeft();
|
||||
this.originalTop = this.currentTop();
|
||||
}
|
||||
Event.stop(event);
|
||||
}
|
||||
},
|
||||
update: function(event) {
|
||||
if(this.active) {
|
||||
if(!this.dragging) {
|
||||
var style = this.handle.style;
|
||||
this.dragging = true;
|
||||
if(style.position=="") style.position = "relative";
|
||||
style.zIndex = this.options.zindex;
|
||||
}
|
||||
this.draw(event);
|
||||
// fix AppleWebKit rendering
|
||||
if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0);
|
||||
Event.stop(event);
|
||||
}
|
||||
},
|
||||
draw: function(event) {
|
||||
var pointer = [Event.pointerX(event), Event.pointerY(event)];
|
||||
var offsets = Position.cumulativeOffset(this.handle);
|
||||
|
||||
offsets[0] -= this.currentLeft();
|
||||
offsets[1] -= this.currentTop();
|
||||
|
||||
// Adjust for the pointer's position on the handle
|
||||
pointer[0] -= this.offsetX;
|
||||
pointer[1] -= this.offsetY;
|
||||
var style = this.handle.style;
|
||||
|
||||
if(this.isVertical()){
|
||||
if(pointer[1] > this.maximumOffset())
|
||||
pointer[1] = this.maximumOffset();
|
||||
if(pointer[1] < this.minimumOffset())
|
||||
pointer[1] = this.minimumOffset();
|
||||
|
||||
// Increment by values
|
||||
if(this.values){
|
||||
this.value = this.getNearestValue(Math.round((pointer[1] - this.minimumOffset()) / this.increment) + this.minimum);
|
||||
pointer[1] = this.trackTop() + this.alignY + (this.value - this.minimum) * this.increment;
|
||||
} else {
|
||||
this.value = Math.round((pointer[1] - this.minimumOffset()) / this.increment) + this.minimum;
|
||||
}
|
||||
style.top = pointer[1] - offsets[1] + "px";
|
||||
} else {
|
||||
if(pointer[0] > this.maximumOffset()) pointer[0] = this.maximumOffset();
|
||||
if(pointer[0] < this.minimumOffset()) pointer[0] = this.minimumOffset();
|
||||
// Increment by values
|
||||
if(this.values){
|
||||
this.value = this.getNearestValue(Math.round((pointer[0] - this.minimumOffset()) / this.increment) + this.minimum);
|
||||
pointer[0] = this.trackLeft() + this.alignX + (this.value - this.minimum) * this.increment;
|
||||
} else {
|
||||
this.value = Math.round((pointer[0] - this.minimumOffset()) / this.increment) + this.minimum;
|
||||
}
|
||||
style.left = (pointer[0] - offsets[0]) + "px";
|
||||
}
|
||||
if(this.options.onSlide) this.options.onSlide(this.value);
|
||||
},
|
||||
endDrag: function(event) {
|
||||
if(this.active && this.dragging) {
|
||||
this.finishDrag(event, true);
|
||||
Event.stop(event);
|
||||
}
|
||||
this.active = false;
|
||||
this.dragging = false;
|
||||
},
|
||||
finishDrag: function(event, success) {
|
||||
this.active = false;
|
||||
this.dragging = false;
|
||||
this.handle.style.zIndex = this.originalZ;
|
||||
this.originalLeft = this.currentLeft();
|
||||
this.originalTop = this.currentTop();
|
||||
this.updateFinished();
|
||||
},
|
||||
updateFinished: function() {
|
||||
if(this.options.onChange) this.options.onChange(this.value);
|
||||
},
|
||||
keyPress: function(event) {
|
||||
if(this.active && !this.disabled) {
|
||||
switch(event.keyCode) {
|
||||
case Event.KEY_ESC:
|
||||
this.finishDrag(event, false);
|
||||
Event.stop(event);
|
||||
break;
|
||||
}
|
||||
if(navigator.appVersion.indexOf('AppleWebKit')>0) Event.stop(event);
|
||||
}
|
||||
}
|
||||
}
|
1
public/robots.txt
Normal file
1
public/robots.txt
Normal file
|
@ -0,0 +1 @@
|
|||
# See http://www.robotstxt.org/wc/norobots.html for documentation on how to use the robots.txt file
|
Loading…
Reference in a new issue