spiderfw 0.5.9 → 0.5.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/apps/app_server/_init.rb +8 -0
- data/apps/app_server/app_server.rb +60 -0
- data/apps/app_server/config/options.rb +2 -0
- data/apps/app_server/controllers/app_server_controller.rb +20 -0
- data/apps/app_server/lib/app.rb +21 -0
- data/apps/app_server/lib/git_app.rb +22 -0
- data/apps/app_server/views/app_list.shtml +8 -0
- data/apps/app_server/views/app_server.layout.shtml +14 -0
- data/apps/cas_server/_init.rb +1 -1
- data/apps/config_editor/_init.rb +14 -0
- data/apps/config_editor/config_editor.appspec +3 -0
- data/apps/config_editor/controllers/config_editor_controller.rb +88 -0
- data/apps/config_editor/views/config_editor.layout.shtml +20 -0
- data/apps/config_editor/views/index.shtml +23 -0
- data/apps/config_editor/widgets/edit/edit.rb +13 -0
- data/apps/config_editor/widgets/edit/edit.shtml +4 -0
- data/apps/core/auth/models/group.rb +2 -2
- data/apps/core/components/public/js/jquery/plugins/jtree/jquery.jtree.1.0.js +187 -0
- data/apps/core/components/public/js/jquery/plugins/jtree/jquery.jtree.1.0.min.js +1 -0
- data/apps/core/components/public/js/jquery/plugins/jtree/jquery.jtree.spider.1.0.js +193 -0
- data/apps/core/components/widgets/table/table.rb +19 -9
- data/apps/core/components/widgets/table/table.shtml +2 -2
- data/apps/core/forms/widgets/inputs/subform/subform.rb +10 -0
- data/apps/core/forms/widgets/inputs/subform/subform.shtml +5 -0
- data/apps/hippo/script/converti_strutture.rb +335 -0
- data/apps/master/_init.rb +12 -0
- data/apps/master/controllers/master_controller.rb +110 -0
- data/apps/master/master.appspec +5 -0
- data/apps/master/models/customer.rb +13 -0
- data/apps/master/models/installation.rb +10 -0
- data/apps/master/models/resource.rb +10 -0
- data/apps/master/models/servant.rb +25 -0
- data/apps/master/views/customer.shtml +20 -0
- data/apps/master/views/customers.shtml +10 -0
- data/apps/master/views/index.shtml +4 -0
- data/apps/master/views/installation.shtml +36 -0
- data/apps/master/views/master.layout.shtml +14 -0
- data/apps/master/views/servant.shtml +26 -0
- data/apps/master/views/servants.shtml +7 -0
- data/apps/servant/_init.rb +5 -0
- data/apps/servant/bin/spider-servant.rb +47 -0
- data/apps/servant/lib/resource.rb +11 -0
- data/apps/servant/lib/resources/db/mysql.rb +31 -0
- data/apps/servant/lib/resources/db.rb +54 -0
- data/apps/servant/lib/servant.rb +82 -0
- data/apps/servant/servant.appspec +4 -0
- data/apps/servant/var/log/error.log +1 -0
- data/apps/worker/worker.rb +1 -1
- data/blueprints/install/config.ru +12 -0
- data/lib/spiderfw/app.rb +8 -0
- data/lib/spiderfw/cmd/cmd.rb +4 -2
- data/lib/spiderfw/cmd/commands/content.rb +33 -0
- data/lib/spiderfw/cmd/commands/{init.rb → create.rb} +4 -4
- data/lib/spiderfw/config/options/spider.rb +4 -0
- data/lib/spiderfw/controller/controller.rb +11 -1
- data/lib/spiderfw/controller/dispatcher.rb +2 -0
- data/lib/spiderfw/controller/home_controller.rb +7 -1
- data/lib/spiderfw/controller/mixins/static_content.rb +17 -3
- data/lib/spiderfw/controller/mixins/visual.rb +2 -2
- data/lib/spiderfw/controller/session.rb +2 -0
- data/lib/spiderfw/create.rb +2 -2
- data/lib/spiderfw/model/base_model.rb +11 -0
- data/lib/spiderfw/model/condition.rb +37 -7
- data/lib/spiderfw/model/mappers/db_mapper.rb +67 -71
- data/lib/spiderfw/model/mappers/mapper.rb +92 -31
- data/lib/spiderfw/model/model.rb +1 -0
- data/lib/spiderfw/model/query.rb +1 -3
- data/lib/spiderfw/model/query_funcs.rb +51 -0
- data/lib/spiderfw/model/storage/db/adapters/oci8.rb +4 -1
- data/lib/spiderfw/model/storage/db/db_schema.rb +15 -1
- data/lib/spiderfw/model/storage/db/db_storage.rb +8 -2
- data/lib/spiderfw/static_content.rb +84 -0
- data/lib/spiderfw/utils/monkey/date_time.rb +4 -0
- data/lib/spiderfw/utils/monkey/hpricot_compat.rb +0 -0
- data/lib/spiderfw/utils/monkey/object.rb +25 -0
- data/lib/spiderfw/utils/test_case.rb +24 -0
- metadata +54 -24
- data/apps/cms/models/content.rb +0 -16
- data/apps/cms/models/news_item.rb +0 -7
- data/apps/cms/models/translation.rb +0 -14
- data/apps/cms/views/admin/admin.shtml +0 -16
- data/apps/cms/views/admin/content.shtml +0 -4
- data/apps/core/acl/_init.rb +0 -10
- data/apps/core/acl/controllers/acl_controller.rb +0 -14
- data/apps/core/acl/models/permission.rb +0 -11
- data/apps/core/acl/views/acl.layout.shtml +0 -8
- data/apps/core/acl/views/index.shtml +0 -3
- data/apps/git_model_versioning/models/mixins/git_versioned.rb +0 -91
- data/apps/master/controllers/git.rb +0 -32
- data/apps/saml/_init.rb +0 -13
- data/apps/saml/controllers/saml2idp.rb +0 -18
- data/apps/saml/lib/bindings/http_redirect_binding.rb +0 -14
- data/apps/saml/lib/messages/authn_request.rb +0 -52
- data/apps/saml/lib/saml.rb +0 -10
- data/apps/soap/soap.gemspec +0 -10
- data/blueprints/model.rb +0 -15
- /data/blueprints/{install → home}/config/config.yml +0 -0
- /data/blueprints/{install → home}/init.rb +0 -0
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
require 'find'
|
|
2
|
+
require 'apps/app_server/lib/app'
|
|
3
|
+
require 'apps/app_server/lib/git_app'
|
|
4
|
+
|
|
5
|
+
module Spider
|
|
6
|
+
|
|
7
|
+
module AppServer
|
|
8
|
+
|
|
9
|
+
def self.apps
|
|
10
|
+
@apps ||= scan
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def self.rescan
|
|
14
|
+
@apps = scan
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def self.scan
|
|
18
|
+
apps = []
|
|
19
|
+
self.paths.each do |path|
|
|
20
|
+
apps += scan_path(path)
|
|
21
|
+
end
|
|
22
|
+
apps
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def self.scan_path(path)
|
|
26
|
+
apps = []
|
|
27
|
+
git_repos = search_git(path)
|
|
28
|
+
git_repos.each do |p|
|
|
29
|
+
app = GitApp.new(p)
|
|
30
|
+
apps << app if app.spec
|
|
31
|
+
end
|
|
32
|
+
apps
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def self.search_git(path)
|
|
36
|
+
found = []
|
|
37
|
+
Find.find(path) do |p|
|
|
38
|
+
if File.directory?(p)
|
|
39
|
+
if File.directory?("#{p}/objects") && File.directory?("#{p}/info") && File.file?("#{p}/HEAD")
|
|
40
|
+
found << p
|
|
41
|
+
Find.prune
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
found
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def self.search_dirs(path)
|
|
49
|
+
Dir.glob("#{path}/**/_init.rb").each do |f|
|
|
50
|
+
found << File.dirname(f)
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def self.paths
|
|
55
|
+
Spider.conf.get('app_server.search_paths')
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
module Spider; module AppServer
|
|
2
|
+
|
|
3
|
+
class AppServerController < Spider::PageController
|
|
4
|
+
|
|
5
|
+
layout 'app_server'
|
|
6
|
+
|
|
7
|
+
__.html :template => 'app_list'
|
|
8
|
+
__.json :call => :list_json
|
|
9
|
+
def list
|
|
10
|
+
@scene.apps = AppServer.apps
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def list_json
|
|
14
|
+
$out << AppServer.apps.to_json
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
end; end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
module Spider; module AppServer
|
|
2
|
+
|
|
3
|
+
class App
|
|
4
|
+
attr_accessor :spec
|
|
5
|
+
attr_reader :last_modified
|
|
6
|
+
|
|
7
|
+
def initialize
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def method_missing(name, *args)
|
|
11
|
+
@spec.send(name, *args) if @spec.respond_to?(name)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def to_json
|
|
15
|
+
@spec.to_json
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
end; end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
require 'grit'
|
|
2
|
+
|
|
3
|
+
module Spider; module AppServer
|
|
4
|
+
|
|
5
|
+
class GitApp < App
|
|
6
|
+
|
|
7
|
+
def initialize(path)
|
|
8
|
+
repo = Grit::Repo.new(path)
|
|
9
|
+
spec = nil
|
|
10
|
+
repo.tree.blobs.each do |blob|
|
|
11
|
+
next unless blob.basename =~ /\.appspec$/
|
|
12
|
+
spec = blob.data
|
|
13
|
+
@spec = Spider::App::AppSpec.eval(spec)
|
|
14
|
+
@last_modified = repo.commits.first.authored_date # FIXME
|
|
15
|
+
break
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
end; end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
|
|
2
|
+
"http://www.w3.org/TR/html4/strict.dtd">
|
|
3
|
+
<html>
|
|
4
|
+
<head>
|
|
5
|
+
<title>Spider AppServer</title>
|
|
6
|
+
<script sp:each='@assets[:js] |script|' type="text/javascript" src="{ script }"></script>
|
|
7
|
+
<link sp:each='@assets[:css] |css_file|' rel='stylesheet' href='{ css_file }' />
|
|
8
|
+
</head>
|
|
9
|
+
<body>
|
|
10
|
+
<div id="content">
|
|
11
|
+
<sp:yield />
|
|
12
|
+
</div>
|
|
13
|
+
</body>
|
|
14
|
+
</html>
|
data/apps/cas_server/_init.rb
CHANGED
|
@@ -18,6 +18,6 @@ end
|
|
|
18
18
|
|
|
19
19
|
['mixins/consumable', 'ticket', 'login_ticket',
|
|
20
20
|
'ticket_granting_ticket', 'proxy_granting_ticket', 'proxy_ticket'].each do |mod|
|
|
21
|
-
require
|
|
21
|
+
require 'apps/cas_server/models/'+mod
|
|
22
22
|
end
|
|
23
23
|
require 'apps/cas_server/controllers/mixins/cas_login_mixin'
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
module Spider
|
|
2
|
+
|
|
3
|
+
module ConfigEditor
|
|
4
|
+
include Spider::App
|
|
5
|
+
@controller = :ConfigEditorController
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
Spider::Template.register_namespace('config_editor', Spider::ConfigEditor)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
require 'apps/config_editor/controllers/config_editor_controller'
|
|
14
|
+
require 'apps/config_editor/widgets/edit/edit'
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
module Spider; module ConfigEditor
|
|
2
|
+
|
|
3
|
+
class ConfigEditorController < Spider::PageController
|
|
4
|
+
|
|
5
|
+
layout 'config_editor'
|
|
6
|
+
|
|
7
|
+
def conf
|
|
8
|
+
Spider.conf
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def index
|
|
12
|
+
redirect 'options'
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def before(action='', *arguments)
|
|
16
|
+
super
|
|
17
|
+
@scene.required = []
|
|
18
|
+
self.conf.each do |key, val|
|
|
19
|
+
if !val && self.conf.option(key)[:params][:required]
|
|
20
|
+
@scene.required << key
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
__.html :template => 'index'
|
|
26
|
+
def options(action='')
|
|
27
|
+
@scene.prefix = action
|
|
28
|
+
@scene.prefix += '/' unless @scene.prefix.empty?
|
|
29
|
+
@scene.parts = []
|
|
30
|
+
conf = self.conf.options
|
|
31
|
+
unless action.empty?
|
|
32
|
+
parts = action.split('/')
|
|
33
|
+
tmp_cur_part = ''
|
|
34
|
+
@scene.parts = parts.map{ |p| tmp_cur_part = "#{tmp_cur_part}/#{p}"}
|
|
35
|
+
@scene.parts.pop
|
|
36
|
+
parts.each do |part|
|
|
37
|
+
conf = conf[part]
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
@scene.subconfs = []
|
|
41
|
+
@scene.options = {}
|
|
42
|
+
@scene.edit_widgets = {}
|
|
43
|
+
if conf[:params] && conf[:params][:type] == :conf
|
|
44
|
+
@scene.multiple = true
|
|
45
|
+
conf = conf['x']
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
conf.each do |key, val|
|
|
49
|
+
if val.key?(:description) && val.key?(:params) && val[:params][:type] != :conf
|
|
50
|
+
next if val[:description] == "__auto__"
|
|
51
|
+
@scene.options[key] = val
|
|
52
|
+
w = create_edit_widget(key, val)
|
|
53
|
+
@scene.edit_widgets[key] = w
|
|
54
|
+
else
|
|
55
|
+
@scene.subconfs << key
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
__.html :template => 'index'
|
|
62
|
+
def required
|
|
63
|
+
@scene.parts = []
|
|
64
|
+
@scene.subconfs = []
|
|
65
|
+
@scene.options = {}
|
|
66
|
+
@scene.edit_widgets = {}
|
|
67
|
+
self.conf.each do |key, val|
|
|
68
|
+
next unless self.conf.option(key)
|
|
69
|
+
if self.conf.option(key)[:params][:required]
|
|
70
|
+
@scene.options[req] = self.conf.option(key)
|
|
71
|
+
w = create_edit_widget(req, self.conf.option(key))
|
|
72
|
+
@scene.edit_widgets[key] = w
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def create_edit_widget(key, option)
|
|
78
|
+
w = Edit.new(@request, @response, @scene)
|
|
79
|
+
w.attributes[:name] = key
|
|
80
|
+
w.attributes[:option] = option
|
|
81
|
+
w.widget_init
|
|
82
|
+
w.prepare
|
|
83
|
+
w
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
end; end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
|
|
2
|
+
"http://www.w3.org/TR/html4/strict.dtd">
|
|
3
|
+
<html>
|
|
4
|
+
<head>
|
|
5
|
+
<title>_(Spider Configuration Editor)</title>
|
|
6
|
+
<script sp:each='@assets[:js] |script|' type="text/javascript" src="{ script }"></script>
|
|
7
|
+
<link sp:each='@assets[:css] |css_file|' rel='stylesheet' href='{ css_file }' />
|
|
8
|
+
</head>
|
|
9
|
+
<body>
|
|
10
|
+
<div id="content">
|
|
11
|
+
<div id="menu">
|
|
12
|
+
<a href="{ ConfigEditor.url }/options">_(Configuration options)</a>
|
|
13
|
+
<a href="{ ConfigEditor.url }/required">
|
|
14
|
+
_(Required)<span sp:if="!@required.empty?">!</span>
|
|
15
|
+
</a>
|
|
16
|
+
</div>
|
|
17
|
+
<sp:yield />
|
|
18
|
+
</div>
|
|
19
|
+
</body>
|
|
20
|
+
</html>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<div>
|
|
2
|
+
<div>
|
|
3
|
+
<a sp:if="!@parts.empty?" href="{ ConfigEditor.url }/options">_(Start)</a>
|
|
4
|
+
<tpl:pass sp:each="@parts |part|">
|
|
5
|
+
<a href="{ ConfigEditor.url }/options{ part }">{ part.split('/').last }</a>
|
|
6
|
+
</tpl:pass>
|
|
7
|
+
</div>
|
|
8
|
+
<form action='' method="post">
|
|
9
|
+
<div sp:if="@multiple">
|
|
10
|
+
Multiple (fixme)
|
|
11
|
+
</div>
|
|
12
|
+
<ul>
|
|
13
|
+
<li sp:each="@subconfs |key|">
|
|
14
|
+
<a href="{ ConfigEditor.url }/options/{ @prefix }{ key }">{ key }</a>
|
|
15
|
+
</li>
|
|
16
|
+
</ul>
|
|
17
|
+
<ul>
|
|
18
|
+
<li sp:each="@options |key, option|">
|
|
19
|
+
<sp:run obj="@edit_widgets[key]" />
|
|
20
|
+
</li>
|
|
21
|
+
</ul>
|
|
22
|
+
</form>
|
|
23
|
+
</div>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
require 'spiderfw/model/mixins/tree'
|
|
2
2
|
require 'apps/core/auth/models/mixins/access_control'
|
|
3
|
-
require '
|
|
3
|
+
require 'uuidtools'
|
|
4
4
|
|
|
5
5
|
module Spider; module Auth
|
|
6
6
|
|
|
@@ -13,7 +13,7 @@ module Spider; module Auth
|
|
|
13
13
|
|
|
14
14
|
with_mapper_subclasses do
|
|
15
15
|
def assign_primary_keys(obj)
|
|
16
|
-
obj.set(:gid, UUID.
|
|
16
|
+
obj.set(:gid, UUIDTools::UUID.random_create.to_s)
|
|
17
17
|
end
|
|
18
18
|
end
|
|
19
19
|
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
// JavaScript Document
|
|
2
|
+
(function($) {
|
|
3
|
+
|
|
4
|
+
$.fn.jTree = function(options) {
|
|
5
|
+
var opts = $.extend({}, $.fn.jTree.defaults, options);
|
|
6
|
+
var cur = 0, curOff = 0, off =0, h =0, w=0, hover = 0;
|
|
7
|
+
var str='<li class="jTreePlacement" style="background:'+opts.pBg+';border:'+opts.pBorder+';color:'+opts.pColor+';height:'+opts.pHeight+'"></li>';
|
|
8
|
+
var container = this;
|
|
9
|
+
//events are written here
|
|
10
|
+
$(this).find("li").mousedown(function(e){
|
|
11
|
+
if ($("#jTreeHelper").is(":not(:animated)") && e.button !=2) {
|
|
12
|
+
// append jTreePlacement to body and hides
|
|
13
|
+
$("body").append(str);
|
|
14
|
+
$(".jTreePlacement").hide();
|
|
15
|
+
//get the current li and append to helper
|
|
16
|
+
$(this).clone().appendTo("#jTreeHelper");
|
|
17
|
+
|
|
18
|
+
// get initial state, cur and offset
|
|
19
|
+
cur = this;
|
|
20
|
+
curOff = $(cur).offset();
|
|
21
|
+
$(cur).hide();
|
|
22
|
+
// show initial helper
|
|
23
|
+
$("#jTreeHelper").css ({
|
|
24
|
+
position: "absolute",
|
|
25
|
+
top: e.pageY + 5,
|
|
26
|
+
left: e.pageX + 5,
|
|
27
|
+
background: opts.hBg,
|
|
28
|
+
opacity: opts.hOpacity
|
|
29
|
+
}).show();
|
|
30
|
+
$("#jTreeHelper *").css ({
|
|
31
|
+
color: opts.hColor,
|
|
32
|
+
background: opts.hBg,
|
|
33
|
+
});
|
|
34
|
+
// start binding events to use
|
|
35
|
+
// prevent text selection
|
|
36
|
+
$(document).bind("selectstart", doNothing);
|
|
37
|
+
|
|
38
|
+
// doubleclick is destructive, better disable
|
|
39
|
+
$(container).find("li").bind("dblclick", doNothing);
|
|
40
|
+
|
|
41
|
+
// in single li calculate the offset, width height of hovered block
|
|
42
|
+
$(container).find("li").bind("mouseover", getInitial);
|
|
43
|
+
|
|
44
|
+
// in single li put placement in correct places, also move the helper around
|
|
45
|
+
$(container).find("li").bind("mousemove", putPlacement);
|
|
46
|
+
|
|
47
|
+
// handle mouse movement outside our container
|
|
48
|
+
$(document).bind("mousemove", helperPosition);
|
|
49
|
+
}
|
|
50
|
+
//prevent bubbling of mousedown
|
|
51
|
+
return false;
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
// in single li or in container, snap into placement if present then destroy placement
|
|
55
|
+
// and helper then show snapped in object/li
|
|
56
|
+
// also destroys events
|
|
57
|
+
$(this).find("li").andSelf().mouseup(function(e){
|
|
58
|
+
// if placementBox is detected
|
|
59
|
+
if ($(".jTreePlacement").is(":visible")) {
|
|
60
|
+
$(cur).insertBefore(".jTreePlacement").show();
|
|
61
|
+
}
|
|
62
|
+
$(cur).show();
|
|
63
|
+
// remove helper and placement box
|
|
64
|
+
$(container).find("ul:empty").remove();
|
|
65
|
+
$("#jTreeHelper").empty().hide();
|
|
66
|
+
$(".jTreePlacement").remove();
|
|
67
|
+
|
|
68
|
+
// remove bindings
|
|
69
|
+
destroyBindings();
|
|
70
|
+
|
|
71
|
+
return false;
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
$(document).mouseup(function(e){
|
|
75
|
+
if (cur!=0) {
|
|
76
|
+
$("#jTreeHelper").animate({
|
|
77
|
+
top: curOff.top,
|
|
78
|
+
left: curOff.left
|
|
79
|
+
}, opts.snapBack, function(){
|
|
80
|
+
$("#jTreeHelper").empty().hide();
|
|
81
|
+
$(".jTreePlacement").remove();
|
|
82
|
+
$(cur).show();
|
|
83
|
+
}
|
|
84
|
+
);
|
|
85
|
+
destroyBindings();
|
|
86
|
+
}
|
|
87
|
+
cur = 0;
|
|
88
|
+
return false;
|
|
89
|
+
});
|
|
90
|
+
//functions are written here
|
|
91
|
+
var doNothing = function(){
|
|
92
|
+
return false;
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
var destroyBindings = function(){
|
|
96
|
+
$(document).unbind("selectstart", doNothing);
|
|
97
|
+
$(container).find("li").unbind("dblclick", doNothing);
|
|
98
|
+
$(container).find("li").unbind("mouseover", getInitial);
|
|
99
|
+
$(container).find("li").unbind("mousemove", putPlacement);
|
|
100
|
+
$(document).unbind("mousemove", helperPosition);
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
var helperPosition = function(e) {
|
|
104
|
+
$("#jTreeHelper").css ({
|
|
105
|
+
top: e.pageY + 5,
|
|
106
|
+
left: e.pageX + 5
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
$(".jTreePlacement").remove();
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
var getInitial = function(e){
|
|
113
|
+
off = $(this).offset();
|
|
114
|
+
h = $(this).height();
|
|
115
|
+
w = $(this).width();
|
|
116
|
+
hover = this;
|
|
117
|
+
return false;
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
var putPlacement = function(e){
|
|
121
|
+
$(cur).hide();
|
|
122
|
+
$("#jTreeHelper").css ({
|
|
123
|
+
top: e.pageY + 5,
|
|
124
|
+
left: e.pageX + 5
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
//inserting before
|
|
128
|
+
if ( e.pageY >= off.top && e.pageY < (off.top + h/2 - 1) ) {
|
|
129
|
+
if (!$(this).prev().hasClass("jTreePlacement")) {
|
|
130
|
+
$(".jTreePlacement").remove();
|
|
131
|
+
$(this).before(str);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
//inserting after
|
|
135
|
+
else if (e.pageY >(off.top + h/2) && e.pageY <= (off.top + h) ) {
|
|
136
|
+
// as a sibling
|
|
137
|
+
if (e.pageY > off.left && e.pageX < off.left + opts.childOff) {
|
|
138
|
+
if (!$(this).next().hasClass("jTreePlacement")) {
|
|
139
|
+
$(".jTreePlacement").remove();
|
|
140
|
+
$(this).after(str);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
// as a child
|
|
144
|
+
else if (e.pageX > off.left + opts.childOff) {
|
|
145
|
+
|
|
146
|
+
$(".jTreePlacement").remove();
|
|
147
|
+
if ($(this).find("ul").length == 0)
|
|
148
|
+
$(this).append('<ul>'+str+'</ul>');
|
|
149
|
+
else
|
|
150
|
+
$(this).find("ul").prepend(str);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return false;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
var lockIn = function(e) {
|
|
157
|
+
// if placement box is present, insert before placement box
|
|
158
|
+
if ($(".jTreePlacement").length==1) {
|
|
159
|
+
$(cur).insertBefore(".jTreePlacement");
|
|
160
|
+
}
|
|
161
|
+
$(cur).show();
|
|
162
|
+
|
|
163
|
+
// remove helper and placement box
|
|
164
|
+
$("#jTreeHelper").empty().hide();
|
|
165
|
+
|
|
166
|
+
$(".jTreePlacement").remove();;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
}; // end jTree
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
$.fn.jTree.defaults = {
|
|
173
|
+
showHelper: false,
|
|
174
|
+
hOpacity: 0.5,
|
|
175
|
+
hBg: "#FCC",
|
|
176
|
+
hColor: "#222",
|
|
177
|
+
pBorder: "1px dashed #CCC",
|
|
178
|
+
pBg: "#EEE",
|
|
179
|
+
pColor: "#222",
|
|
180
|
+
pHeight: "20px",
|
|
181
|
+
childOff: 20,
|
|
182
|
+
snapBack: 1000
|
|
183
|
+
};
|
|
184
|
+
|
|
185
|
+
})(jQuery);
|
|
186
|
+
|
|
187
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(function(A){A.fn.jTree=function(Q){var C=A.extend({},A.fn.jTree.defaults,Q);var O=0,M=0,E=0,F=0,N=0,I=0;var K='<li class="jTreePlacement" style="background:'+C.pBg+";border:"+C.pBorder+";color:"+C.pColor+";height:"+C.pHeight+'"></li>';var D=this;A(this).find("li").mousedown(function(R){if(A("#jTreeHelper").is(":not(:animated)")&&R.button!=2){A("body").append(K);A(".jTreePlacement").hide();A(this).clone().appendTo("#jTreeHelper");O=this;M=A(O).offset();A(O).hide();A("#jTreeHelper").css({position:"absolute",top:R.pageY+5,left:R.pageX+5,background:C.hBg,opacity:C.hOpacity}).show();A("#jTreeHelper *").css({color:C.hColor,background:C.hBg,});A(document).bind("selectstart",G);A(D).find("li").bind("dblclick",G);A(D).find("li").bind("mouseover",H);A(D).find("li").bind("mousemove",J);A(document).bind("mousemove",P)}return false});A(this).find("li").andSelf().mouseup(function(R){if(A(".jTreePlacement").is(":visible")){A(O).insertBefore(".jTreePlacement").show()}A(O).show();A(D).find("ul:empty").remove();A("#jTreeHelper").empty().hide();A(".jTreePlacement").remove();B();return false});A(document).mouseup(function(R){if(O!=0){A("#jTreeHelper").animate({top:M.top,left:M.left},C.snapBack,function(){A("#jTreeHelper").empty().hide();A(".jTreePlacement").remove();A(O).show()});B()}O=0;return false});var G=function(){return false};var B=function(){A(document).unbind("selectstart",G);A(D).find("li").unbind("dblclick",G);A(D).find("li").unbind("mouseover",H);A(D).find("li").unbind("mousemove",J);A(document).unbind("mousemove",P)};var P=function(R){A("#jTreeHelper").css({top:R.pageY+5,left:R.pageX+5});A(".jTreePlacement").remove()};var H=function(R){E=A(this).offset();F=A(this).height();N=A(this).width();I=this;return false};var J=function(R){A(O).hide();A("#jTreeHelper").css({top:R.pageY+5,left:R.pageX+5});if(R.pageY>=E.top&&R.pageY<(E.top+F/2-1)){if(!A(this).prev().hasClass("jTreePlacement")){A(".jTreePlacement").remove();A(this).before(K)}}else{if(R.pageY>(E.top+F/2)&&R.pageY<=(E.top+F)){if(R.pageY>E.left&&R.pageX<E.left+C.childOff){if(!A(this).next().hasClass("jTreePlacement")){A(".jTreePlacement").remove();A(this).after(K)}}else{if(R.pageX>E.left+C.childOff){A(".jTreePlacement").remove();if(A(this).find("ul").length==0){A(this).append("<ul>"+K+"</ul>")}else{A(this).find("ul").prepend(K)}}}}}return false};var L=function(R){if(A(".jTreePlacement").length==1){A(O).insertBefore(".jTreePlacement")}A(O).show();A("#jTreeHelper").empty().hide();A(".jTreePlacement").remove()}};A.fn.jTree.defaults={showHelper:false,hOpacity:0.5,hBg:"#FCC",hColor:"#222",pBorder:"1px dashed #CCC",pBg:"#EEE",pColor:"#222",pHeight:"20px",childOff:20,snapBack:1000}})(jQuery);
|