chef-server-webui 0.8.2
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/LICENSE +201 -0
- data/README.rdoc +135 -0
- data/Rakefile +62 -0
- data/app/controllers/application.rb +281 -0
- data/app/controllers/clients.rb +120 -0
- data/app/controllers/cookbook_attributes.rb +41 -0
- data/app/controllers/cookbook_definitions.rb +41 -0
- data/app/controllers/cookbook_files.rb +39 -0
- data/app/controllers/cookbook_libraries.rb +41 -0
- data/app/controllers/cookbook_recipes.rb +40 -0
- data/app/controllers/cookbook_templates.rb +57 -0
- data/app/controllers/cookbooks.rb +78 -0
- data/app/controllers/databag_items.rb +102 -0
- data/app/controllers/databags.rb +83 -0
- data/app/controllers/exceptions.rb +19 -0
- data/app/controllers/main.rb +7 -0
- data/app/controllers/nodes.rb +138 -0
- data/app/controllers/openid_consumer.rb +154 -0
- data/app/controllers/roles.rb +144 -0
- data/app/controllers/search.rb +62 -0
- data/app/controllers/search_entries.rb +64 -0
- data/app/controllers/status.rb +39 -0
- data/app/controllers/users.rb +186 -0
- data/app/helpers/application_helper.rb +171 -0
- data/app/helpers/cookbook_attributes_helper.rb +7 -0
- data/app/helpers/cookbook_definitions_helper.rb +8 -0
- data/app/helpers/cookbook_files_helper.rb +8 -0
- data/app/helpers/cookbook_libraries_helper.rb +7 -0
- data/app/helpers/cookbook_recipes_helper.rb +8 -0
- data/app/helpers/cookbook_templates_helper.rb +8 -0
- data/app/helpers/exceptions_helper.rb +6 -0
- data/app/helpers/global_helpers.rb +35 -0
- data/app/helpers/nodes_helper.rb +41 -0
- data/app/helpers/openid_consumer_helper.rb +8 -0
- data/app/helpers/openid_register_helper.rb +8 -0
- data/app/helpers/openid_server_helper.rb +6 -0
- data/app/helpers/openid_server_helpers.rb +29 -0
- data/app/helpers/roles_helper.rb +5 -0
- data/app/helpers/search_entries_helper.rb +8 -0
- data/app/helpers/search_helper.rb +38 -0
- data/app/helpers/status_helper.rb +26 -0
- data/app/views/clients/_form.html.haml +22 -0
- data/app/views/clients/_navigation.html.haml +9 -0
- data/app/views/clients/edit.html.haml +6 -0
- data/app/views/clients/index.html.haml +21 -0
- data/app/views/clients/new.html.haml +6 -0
- data/app/views/clients/show.html.haml +20 -0
- data/app/views/cookbooks/index.html.haml +10 -0
- data/app/views/cookbooks/show.html.haml +40 -0
- data/app/views/databag_items/_form.html.haml +14 -0
- data/app/views/databag_items/_navigation.html.haml +9 -0
- data/app/views/databag_items/edit.html.haml +6 -0
- data/app/views/databag_items/index.html.haml +0 -0
- data/app/views/databag_items/new.html.haml +6 -0
- data/app/views/databag_items/show.html.haml +9 -0
- data/app/views/databags/_form.html.haml +12 -0
- data/app/views/databags/_item_navigation.html.haml +8 -0
- data/app/views/databags/_navigation.html.haml +9 -0
- data/app/views/databags/edit.html.haml +6 -0
- data/app/views/databags/index.html.haml +19 -0
- data/app/views/databags/new.html.haml +6 -0
- data/app/views/databags/show.html.haml +19 -0
- data/app/views/exceptions/bad_request.json.erb +1 -0
- data/app/views/exceptions/internal_server_error.html.erb +216 -0
- data/app/views/exceptions/not_acceptable.html.erb +63 -0
- data/app/views/exceptions/not_found.html.erb +47 -0
- data/app/views/exceptions/standard_error.html.erb +217 -0
- data/app/views/layout/_jsonedit.html.haml +82 -0
- data/app/views/layout/chef_server_webui.html.haml +56 -0
- data/app/views/layout/login.html.haml +36 -0
- data/app/views/main/index.html.erb +1 -0
- data/app/views/nodes/_action.html.haml +13 -0
- data/app/views/nodes/_form.html.haml +53 -0
- data/app/views/nodes/_navigation.html.haml +9 -0
- data/app/views/nodes/_resource.html.haml +22 -0
- data/app/views/nodes/edit.html.haml +7 -0
- data/app/views/nodes/index.html.haml +25 -0
- data/app/views/nodes/new.html.haml +6 -0
- data/app/views/nodes/show.html.haml +60 -0
- data/app/views/openid_consumer/index.html.haml +28 -0
- data/app/views/openid_consumer/start.html.haml +4 -0
- data/app/views/openid_login/index.html.haml +5 -0
- data/app/views/openid_register/index.html.haml +19 -0
- data/app/views/openid_register/show.html.haml +7 -0
- data/app/views/roles/_form.html.haml +53 -0
- data/app/views/roles/_navigation.html.haml +9 -0
- data/app/views/roles/edit.html.haml +6 -0
- data/app/views/roles/index.html.haml +21 -0
- data/app/views/roles/new.html.haml +6 -0
- data/app/views/roles/show.html.haml +54 -0
- data/app/views/search/_search_form.html.haml +6 -0
- data/app/views/search/index.html.haml +8 -0
- data/app/views/search/show.html.haml +13 -0
- data/app/views/search_entries/index.html.haml +8 -0
- data/app/views/search_entries/show.html.haml +7 -0
- data/app/views/status/index.html.haml +90 -0
- data/app/views/users/_form.html.haml +39 -0
- data/app/views/users/_navigation.html.haml +9 -0
- data/app/views/users/edit.html.haml +6 -0
- data/app/views/users/index.html.haml +20 -0
- data/app/views/users/login.html.haml +16 -0
- data/app/views/users/new.html.haml +27 -0
- data/app/views/users/show.html.haml +13 -0
- data/app/views/users/start.html.haml +4 -0
- data/config.ru +84 -0
- data/config/init.rb +49 -0
- data/config/router.rb +6 -0
- data/lib/chef-server-webui.rb +155 -0
- data/lib/chef-server-webui/merbtasks.rb +103 -0
- data/lib/chef-server-webui/slicetasks.rb +20 -0
- data/lib/chef-server-webui/spectasks.rb +53 -0
- data/public/facebox/README.txt +4 -0
- data/public/facebox/b.png +0 -0
- data/public/facebox/bl.png +0 -0
- data/public/facebox/br.png +0 -0
- data/public/facebox/closelabel.gif +0 -0
- data/public/facebox/facebox.css +95 -0
- data/public/facebox/facebox.js +319 -0
- data/public/facebox/loading.gif +0 -0
- data/public/facebox/tl.png +0 -0
- data/public/facebox/tr.png +0 -0
- data/public/images/avatar.png +0 -0
- data/public/images/black_big.png +0 -0
- data/public/images/indicator.gif +0 -0
- data/public/images/jsonedit/add2.png +0 -0
- data/public/images/jsonedit/build-button.png +0 -0
- data/public/images/jsonedit/bullet.gif +0 -0
- data/public/images/jsonedit/bullet_orange.png +0 -0
- data/public/images/jsonedit/cross.png +0 -0
- data/public/images/jsonedit/delete.png +0 -0
- data/public/images/jsonedit/deleted.png +0 -0
- data/public/images/jsonedit/json.jpg +0 -0
- data/public/images/jsonedit/label.gif +0 -0
- data/public/images/jsonedit/minus.gif +0 -0
- data/public/images/jsonedit/pixel.gif +0 -0
- data/public/images/jsonedit/plus.gif +0 -0
- data/public/images/jsonedit/saved.png +0 -0
- data/public/images/jsonedit/table_refresh.png +0 -0
- data/public/images/jsonedit/value.gif +0 -0
- data/public/images/merb.jpg +0 -0
- data/public/images/toggle-collapse-dark.png +0 -0
- data/public/images/toggle-collapse-light.png +0 -0
- data/public/images/toggle-collapse.gif +0 -0
- data/public/images/toggle-expand-dark.png +0 -0
- data/public/images/toggle-expand-light.png +0 -0
- data/public/images/toggle-expand.gif +0 -0
- data/public/images/treeBuilderImages/Thumbs.db +0 -0
- data/public/images/treeBuilderImages/doc.gif +0 -0
- data/public/images/treeBuilderImages/docNode.gif +0 -0
- data/public/images/treeBuilderImages/docNodeLast.gif +0 -0
- data/public/images/treeBuilderImages/docNodeLastFirst.gif +0 -0
- data/public/images/treeBuilderImages/folder.gif +0 -0
- data/public/images/treeBuilderImages/folderNode.gif +0 -0
- data/public/images/treeBuilderImages/folderNodeFirst.gif +0 -0
- data/public/images/treeBuilderImages/folderNodeLast.gif +0 -0
- data/public/images/treeBuilderImages/folderNodeLastFirst.gif +0 -0
- data/public/images/treeBuilderImages/folderNodeOpen.gif +0 -0
- data/public/images/treeBuilderImages/folderNodeOpenFirst.gif +0 -0
- data/public/images/treeBuilderImages/folderNodeOpenLast.gif +0 -0
- data/public/images/treeBuilderImages/folderNodeOpenLastFirst.gif +0 -0
- data/public/images/treeBuilderImages/folderOpen.gif +0 -0
- data/public/images/treeBuilderImages/vertLine.gif +0 -0
- data/public/javascripts/chef.js +160 -0
- data/public/javascripts/jquery-1.3.2.min.js +19 -0
- data/public/javascripts/jquery-ui-1.7.1.custom.min.js +65 -0
- data/public/javascripts/jquery.editinline.js +108 -0
- data/public/javascripts/jquery.jeditable.mini.js +30 -0
- data/public/javascripts/jquery.livequery.js +250 -0
- data/public/javascripts/jquery.localscroll.js +104 -0
- data/public/javascripts/jquery.scrollTo.js +150 -0
- data/public/javascripts/jquery.tools.min.js +17 -0
- data/public/javascripts/jquery.treeTable.min.js +165 -0
- data/public/javascripts/json.js +153 -0
- data/public/javascripts/jsonedit_main.js +675 -0
- data/public/javascripts/yetii-min.js +1 -0
- data/public/stylesheets/base.css +336 -0
- data/public/stylesheets/chef.css +157 -0
- data/public/stylesheets/images/ui-bg_diagonals-small_0_aaaaaa_40x40.png +0 -0
- data/public/stylesheets/images/ui-bg_diagonals-thick_15_444444_40x40.png +0 -0
- data/public/stylesheets/images/ui-bg_glass_100_f0f0f0_1x400.png +0 -0
- data/public/stylesheets/images/ui-bg_glass_50_99c2ff_1x400.png +0 -0
- data/public/stylesheets/images/ui-bg_glass_55_fbf5d0_1x400.png +0 -0
- data/public/stylesheets/images/ui-bg_glass_80_e6e6e6_1x400.png +0 -0
- data/public/stylesheets/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/public/stylesheets/images/ui-bg_highlight-hard_100_f9f9f9_1x100.png +0 -0
- data/public/stylesheets/images/ui-bg_highlight-soft_100_e7eef3_1x100.png +0 -0
- data/public/stylesheets/images/ui-icons_222222_256x240.png +0 -0
- data/public/stylesheets/images/ui-icons_2694e8_256x240.png +0 -0
- data/public/stylesheets/images/ui-icons_2e83ff_256x240.png +0 -0
- data/public/stylesheets/images/ui-icons_72a7cf_256x240.png +0 -0
- data/public/stylesheets/images/ui-icons_888888_256x240.png +0 -0
- data/public/stylesheets/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/public/stylesheets/images/ui-icons_ffffff_256x240.png +0 -0
- data/public/stylesheets/jquery-ui-1.7.1.custom.css +404 -0
- data/public/stylesheets/jquery.treeTable.css +43 -0
- data/public/stylesheets/jsonedit_main.css +280 -0
- data/public/stylesheets/themes/bec-green/style.css +290 -0
- data/public/stylesheets/themes/bec/style.css +301 -0
- data/public/stylesheets/themes/blue/style.css +280 -0
- data/public/stylesheets/themes/default/style.css +267 -0
- data/public/stylesheets/themes/djime-cerulean/style.css +298 -0
- data/public/stylesheets/themes/kathleene/style.css +272 -0
- data/public/stylesheets/themes/orange/style.css +263 -0
- data/public/stylesheets/themes/reidb-greenish/style.css +301 -0
- data/stubs/app/controllers/application.rb +2 -0
- data/stubs/app/controllers/main.rb +2 -0
- metadata +399 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
|
|
2
|
+
(function($){$.fn.editable=function(target,options){var settings={target:target,name:'value',id:'id',type:'text',width:'auto',height:'auto',event:'click',onblur:'cancel',loadtype:'GET',loadtext:'Loading...',placeholder:'Click to edit',loaddata:{},submitdata:{}};if(options){$.extend(settings,options);}
|
|
3
|
+
var plugin=$.editable.types[settings.type].plugin||function(){};var submit=$.editable.types[settings.type].submit||function(){};var buttons=$.editable.types[settings.type].buttons||$.editable.types['defaults'].buttons;var content=$.editable.types[settings.type].content||$.editable.types['defaults'].content;var element=$.editable.types[settings.type].element||$.editable.types['defaults'].element;var reset=$.editable.types[settings.type].reset||$.editable.types['defaults'].reset;var callback=settings.callback||function(){};if(!$.isFunction($(this)[settings.event])){$.fn[settings.event]=function(fn){return fn?this.bind(settings.event,fn):this.trigger(settings.event);}}
|
|
4
|
+
$(this).attr('title',settings.tooltip);settings.autowidth='auto'==settings.width;settings.autoheight='auto'==settings.height;return this.each(function(){var self=this;var savedwidth=$(self).width();var savedheight=$(self).height();if(!$.trim($(this).html())){$(this).html(settings.placeholder);}
|
|
5
|
+
$(this)[settings.event](function(e){if(self.editing){return;}
|
|
6
|
+
if(0==$(self).width()){settings.width=savedwidth;settings.height=savedheight;}else{if(settings.width!='none'){settings.width=settings.autowidth?$(self).width():settings.width;}
|
|
7
|
+
if(settings.height!='none'){settings.height=settings.autoheight?$(self).height():settings.height;}}
|
|
8
|
+
if($(this).html().toLowerCase().replace(/;/,'')==settings.placeholder.toLowerCase().replace(/;/,'')){$(this).html('');}
|
|
9
|
+
self.editing=true;self.revert=$(self).html();$(self).html('');var form=$('<form/>');if(settings.cssclass){if('inherit'==settings.cssclass){form.attr('class',$(self).attr('class'));}else{form.attr('class',settings.cssclass);}}
|
|
10
|
+
if(settings.style){if('inherit'==settings.style){form.attr('style',$(self).attr('style'));form.css('display',$(self).css('display'));}else{form.attr('style',settings.style);}}
|
|
11
|
+
var input=element.apply(form,[settings,self]);var input_content;if(settings.loadurl){var t=setTimeout(function(){input.disabled=true;content.apply(form,[settings.loadtext,settings,self]);},100);var loaddata={};loaddata[settings.id]=self.id;if($.isFunction(settings.loaddata)){$.extend(loaddata,settings.loaddata.apply(self,[self.revert,settings]));}else{$.extend(loaddata,settings.loaddata);}
|
|
12
|
+
$.ajax({type:settings.loadtype,url:settings.loadurl,data:loaddata,async:false,success:function(result){window.clearTimeout(t);input_content=result;input.disabled=false;}});}else if(settings.data){input_content=settings.data;if($.isFunction(settings.data)){input_content=settings.data.apply(self,[self.revert,settings]);}}else{input_content=self.revert;}
|
|
13
|
+
content.apply(form,[input_content,settings,self]);input.attr('name',settings.name);buttons.apply(form,[settings,self]);$(self).append(form);plugin.apply(form,[settings,self]);$(':input:visible:enabled:first',form).focus();if(settings.select){input.select();}
|
|
14
|
+
input.keydown(function(e){if(e.keyCode==27){e.preventDefault();reset.apply(form,[settings,self]);}});var t;if('cancel'==settings.onblur){input.blur(function(e){t=setTimeout(function(){reset.apply(form,[settings,self]);},500);});}else if('submit'==settings.onblur){input.blur(function(e){form.submit();});}else if($.isFunction(settings.onblur)){input.blur(function(e){settings.onblur.apply(self,[input.val(),settings]);});}else{input.blur(function(e){});}
|
|
15
|
+
form.submit(function(e){if(t){clearTimeout(t);}
|
|
16
|
+
e.preventDefault();if(false!==submit.apply(form,[settings,self])){if($.isFunction(settings.target)){var str=settings.target.apply(self,[input.val(),settings]);$(self).html(str);self.editing=false;callback.apply(self,[self.innerHTML,settings]);if(!$.trim($(self).html())){$(self).html(settings.placeholder);}}else{var submitdata={};submitdata[settings.name]=input.val();submitdata[settings.id]=self.id;if($.isFunction(settings.submitdata)){$.extend(submitdata,settings.submitdata.apply(self,[self.revert,settings]));}else{$.extend(submitdata,settings.submitdata);}
|
|
17
|
+
if('PUT'==settings.method){submitdata['_method']='put';}
|
|
18
|
+
$(self).html(settings.indicator);$.post(settings.target,submitdata,function(str){$(self).html(str);self.editing=false;callback.apply(self,[self.innerHTML,settings]);if(!$.trim($(self).html())){$(self).html(settings.placeholder);}});}}
|
|
19
|
+
return false;});});this.reset=function(){$(self).html(self.revert);self.editing=false;if(!$.trim($(self).html())){$(self).html(settings.placeholder);}}});};$.editable={types:{defaults:{element:function(settings,original){var input=$('<input type="hidden">');$(this).append(input);return(input);},content:function(string,settings,original){$(':input:first',this).val(string);},reset:function(settings,original){original.reset();},buttons:function(settings,original){var form=this;if(settings.submit){if(settings.submit.match(/>$/)){var submit=$(settings.submit).click(function(){if(submit.attr("type")!="submit"){form.submit();}});}else{var submit=$('<button type="submit">');submit.html(settings.submit);}
|
|
20
|
+
$(this).append(submit);}
|
|
21
|
+
if(settings.cancel){if(settings.cancel.match(/>$/)){var cancel=$(settings.cancel);}else{var cancel=$('<button type="cancel">');cancel.html(settings.cancel);}
|
|
22
|
+
$(this).append(cancel);$(cancel).click(function(event){if($.isFunction($.editable.types[settings.type].reset)){var reset=$.editable.types[settings.type].reset;}else{var reset=$.editable.types['defaults'].reset;}
|
|
23
|
+
reset.apply(form,[settings,original]);return false;});}}},text:{element:function(settings,original){var input=$('<input>');if(settings.width!='none'){input.width(settings.width);}
|
|
24
|
+
if(settings.height!='none'){input.height(settings.height);}
|
|
25
|
+
input.attr('autocomplete','off');$(this).append(input);return(input);}},textarea:{element:function(settings,original){var textarea=$('<textarea>');if(settings.rows){textarea.attr('rows',settings.rows);}else{textarea.height(settings.height);}
|
|
26
|
+
if(settings.cols){textarea.attr('cols',settings.cols);}else{textarea.width(settings.width);}
|
|
27
|
+
$(this).append(textarea);return(textarea);}},select:{element:function(settings,original){var select=$('<select>');$(this).append(select);return(select);},content:function(string,settings,original){if(String==string.constructor){eval('var json = '+string);for(var key in json){if(!json.hasOwnProperty(key)){continue;}
|
|
28
|
+
if('selected'==key){continue;}
|
|
29
|
+
var option=$('<option>').val(key).append(json[key]);$('select',this).append(option);}}
|
|
30
|
+
$('select',this).children().each(function(){if($(this).val()==json['selected']||$(this).text()==original.revert){$(this).attr('selected','selected');};});}}},addInputType:function(name,input){$.editable.types[name]=input;}};})(jQuery);
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
/*! Copyright (c) 2008 Brandon Aaron (http://brandonaaron.net)
|
|
2
|
+
* Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
|
|
3
|
+
* and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
|
|
4
|
+
*
|
|
5
|
+
* Version: 1.0.3
|
|
6
|
+
* Requires jQuery 1.1.3+
|
|
7
|
+
* Docs: http://docs.jquery.com/Plugins/livequery
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
(function($) {
|
|
11
|
+
|
|
12
|
+
$.extend($.fn, {
|
|
13
|
+
livequery: function(type, fn, fn2) {
|
|
14
|
+
var self = this, q;
|
|
15
|
+
|
|
16
|
+
// Handle different call patterns
|
|
17
|
+
if ($.isFunction(type))
|
|
18
|
+
fn2 = fn, fn = type, type = undefined;
|
|
19
|
+
|
|
20
|
+
// See if Live Query already exists
|
|
21
|
+
$.each( $.livequery.queries, function(i, query) {
|
|
22
|
+
if ( self.selector == query.selector && self.context == query.context &&
|
|
23
|
+
type == query.type && (!fn || fn.$lqguid == query.fn.$lqguid) && (!fn2 || fn2.$lqguid == query.fn2.$lqguid) )
|
|
24
|
+
// Found the query, exit the each loop
|
|
25
|
+
return (q = query) && false;
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
// Create new Live Query if it wasn't found
|
|
29
|
+
q = q || new $.livequery(this.selector, this.context, type, fn, fn2);
|
|
30
|
+
|
|
31
|
+
// Make sure it is running
|
|
32
|
+
q.stopped = false;
|
|
33
|
+
|
|
34
|
+
// Run it immediately for the first time
|
|
35
|
+
q.run();
|
|
36
|
+
|
|
37
|
+
// Contnue the chain
|
|
38
|
+
return this;
|
|
39
|
+
},
|
|
40
|
+
|
|
41
|
+
expire: function(type, fn, fn2) {
|
|
42
|
+
var self = this;
|
|
43
|
+
|
|
44
|
+
// Handle different call patterns
|
|
45
|
+
if ($.isFunction(type))
|
|
46
|
+
fn2 = fn, fn = type, type = undefined;
|
|
47
|
+
|
|
48
|
+
// Find the Live Query based on arguments and stop it
|
|
49
|
+
$.each( $.livequery.queries, function(i, query) {
|
|
50
|
+
if ( self.selector == query.selector && self.context == query.context &&
|
|
51
|
+
(!type || type == query.type) && (!fn || fn.$lqguid == query.fn.$lqguid) && (!fn2 || fn2.$lqguid == query.fn2.$lqguid) && !this.stopped )
|
|
52
|
+
$.livequery.stop(query.id);
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
// Continue the chain
|
|
56
|
+
return this;
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
$.livequery = function(selector, context, type, fn, fn2) {
|
|
61
|
+
this.selector = selector;
|
|
62
|
+
this.context = context || document;
|
|
63
|
+
this.type = type;
|
|
64
|
+
this.fn = fn;
|
|
65
|
+
this.fn2 = fn2;
|
|
66
|
+
this.elements = [];
|
|
67
|
+
this.stopped = false;
|
|
68
|
+
|
|
69
|
+
// The id is the index of the Live Query in $.livequery.queries
|
|
70
|
+
this.id = $.livequery.queries.push(this)-1;
|
|
71
|
+
|
|
72
|
+
// Mark the functions for matching later on
|
|
73
|
+
fn.$lqguid = fn.$lqguid || $.livequery.guid++;
|
|
74
|
+
if (fn2) fn2.$lqguid = fn2.$lqguid || $.livequery.guid++;
|
|
75
|
+
|
|
76
|
+
// Return the Live Query
|
|
77
|
+
return this;
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
$.livequery.prototype = {
|
|
81
|
+
stop: function() {
|
|
82
|
+
var query = this;
|
|
83
|
+
|
|
84
|
+
if ( this.type )
|
|
85
|
+
// Unbind all bound events
|
|
86
|
+
this.elements.unbind(this.type, this.fn);
|
|
87
|
+
else if (this.fn2)
|
|
88
|
+
// Call the second function for all matched elements
|
|
89
|
+
this.elements.each(function(i, el) {
|
|
90
|
+
query.fn2.apply(el);
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
// Clear out matched elements
|
|
94
|
+
this.elements = [];
|
|
95
|
+
|
|
96
|
+
// Stop the Live Query from running until restarted
|
|
97
|
+
this.stopped = true;
|
|
98
|
+
},
|
|
99
|
+
|
|
100
|
+
run: function() {
|
|
101
|
+
// Short-circuit if stopped
|
|
102
|
+
if ( this.stopped ) return;
|
|
103
|
+
var query = this;
|
|
104
|
+
|
|
105
|
+
var oEls = this.elements,
|
|
106
|
+
els = $(this.selector, this.context),
|
|
107
|
+
nEls = els.not(oEls);
|
|
108
|
+
|
|
109
|
+
// Set elements to the latest set of matched elements
|
|
110
|
+
this.elements = els;
|
|
111
|
+
|
|
112
|
+
if (this.type) {
|
|
113
|
+
// Bind events to newly matched elements
|
|
114
|
+
nEls.bind(this.type, this.fn);
|
|
115
|
+
|
|
116
|
+
// Unbind events to elements no longer matched
|
|
117
|
+
if (oEls.length > 0)
|
|
118
|
+
$.each(oEls, function(i, el) {
|
|
119
|
+
if ( $.inArray(el, els) < 0 )
|
|
120
|
+
$.event.remove(el, query.type, query.fn);
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
// Call the first function for newly matched elements
|
|
125
|
+
nEls.each(function() {
|
|
126
|
+
query.fn.apply(this);
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
// Call the second function for elements no longer matched
|
|
130
|
+
if ( this.fn2 && oEls.length > 0 )
|
|
131
|
+
$.each(oEls, function(i, el) {
|
|
132
|
+
if ( $.inArray(el, els) < 0 )
|
|
133
|
+
query.fn2.apply(el);
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
$.extend($.livequery, {
|
|
140
|
+
guid: 0,
|
|
141
|
+
queries: [],
|
|
142
|
+
queue: [],
|
|
143
|
+
running: false,
|
|
144
|
+
timeout: null,
|
|
145
|
+
|
|
146
|
+
checkQueue: function() {
|
|
147
|
+
if ( $.livequery.running && $.livequery.queue.length ) {
|
|
148
|
+
var length = $.livequery.queue.length;
|
|
149
|
+
// Run each Live Query currently in the queue
|
|
150
|
+
while ( length-- )
|
|
151
|
+
$.livequery.queries[ $.livequery.queue.shift() ].run();
|
|
152
|
+
}
|
|
153
|
+
},
|
|
154
|
+
|
|
155
|
+
pause: function() {
|
|
156
|
+
// Don't run anymore Live Queries until restarted
|
|
157
|
+
$.livequery.running = false;
|
|
158
|
+
},
|
|
159
|
+
|
|
160
|
+
play: function() {
|
|
161
|
+
// Restart Live Queries
|
|
162
|
+
$.livequery.running = true;
|
|
163
|
+
// Request a run of the Live Queries
|
|
164
|
+
$.livequery.run();
|
|
165
|
+
},
|
|
166
|
+
|
|
167
|
+
registerPlugin: function() {
|
|
168
|
+
$.each( arguments, function(i,n) {
|
|
169
|
+
// Short-circuit if the method doesn't exist
|
|
170
|
+
if (!$.fn[n]) return;
|
|
171
|
+
|
|
172
|
+
// Save a reference to the original method
|
|
173
|
+
var old = $.fn[n];
|
|
174
|
+
|
|
175
|
+
// Create a new method
|
|
176
|
+
$.fn[n] = function() {
|
|
177
|
+
// Call the original method
|
|
178
|
+
var r = old.apply(this, arguments);
|
|
179
|
+
|
|
180
|
+
// Request a run of the Live Queries
|
|
181
|
+
$.livequery.run();
|
|
182
|
+
|
|
183
|
+
// Return the original methods result
|
|
184
|
+
return r;
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
},
|
|
188
|
+
|
|
189
|
+
run: function(id) {
|
|
190
|
+
if (id != undefined) {
|
|
191
|
+
// Put the particular Live Query in the queue if it doesn't already exist
|
|
192
|
+
if ( $.inArray(id, $.livequery.queue) < 0 )
|
|
193
|
+
$.livequery.queue.push( id );
|
|
194
|
+
}
|
|
195
|
+
else
|
|
196
|
+
// Put each Live Query in the queue if it doesn't already exist
|
|
197
|
+
$.each( $.livequery.queries, function(id) {
|
|
198
|
+
if ( $.inArray(id, $.livequery.queue) < 0 )
|
|
199
|
+
$.livequery.queue.push( id );
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
// Clear timeout if it already exists
|
|
203
|
+
if ($.livequery.timeout) clearTimeout($.livequery.timeout);
|
|
204
|
+
// Create a timeout to check the queue and actually run the Live Queries
|
|
205
|
+
$.livequery.timeout = setTimeout($.livequery.checkQueue, 20);
|
|
206
|
+
},
|
|
207
|
+
|
|
208
|
+
stop: function(id) {
|
|
209
|
+
if (id != undefined)
|
|
210
|
+
// Stop are particular Live Query
|
|
211
|
+
$.livequery.queries[ id ].stop();
|
|
212
|
+
else
|
|
213
|
+
// Stop all Live Queries
|
|
214
|
+
$.each( $.livequery.queries, function(id) {
|
|
215
|
+
$.livequery.queries[ id ].stop();
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
|
|
220
|
+
// Register core DOM manipulation methods
|
|
221
|
+
$.livequery.registerPlugin('append', 'prepend', 'after', 'before', 'wrap', 'attr', 'removeAttr', 'addClass', 'removeClass', 'toggleClass', 'empty', 'remove');
|
|
222
|
+
|
|
223
|
+
// Run Live Queries when the Document is ready
|
|
224
|
+
$(function() { $.livequery.play(); });
|
|
225
|
+
|
|
226
|
+
|
|
227
|
+
// Save a reference to the original init method
|
|
228
|
+
var init = $.prototype.init;
|
|
229
|
+
|
|
230
|
+
// Create a new init method that exposes two new properties: selector and context
|
|
231
|
+
$.prototype.init = function(a,c) {
|
|
232
|
+
// Call the original init and save the result
|
|
233
|
+
var r = init.apply(this, arguments);
|
|
234
|
+
|
|
235
|
+
// Copy over properties if they exist already
|
|
236
|
+
if (a && a.selector)
|
|
237
|
+
r.context = a.context, r.selector = a.selector;
|
|
238
|
+
|
|
239
|
+
// Set properties
|
|
240
|
+
if ( typeof a == 'string' )
|
|
241
|
+
r.context = c || document, r.selector = a;
|
|
242
|
+
|
|
243
|
+
// Return the result
|
|
244
|
+
return r;
|
|
245
|
+
};
|
|
246
|
+
|
|
247
|
+
// Give the init function the jQuery prototype for later instantiation (needed after Rev 4091)
|
|
248
|
+
$.prototype.init.prototype = $.prototype;
|
|
249
|
+
|
|
250
|
+
})(jQuery);
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* jQuery.LocalScroll
|
|
3
|
+
* Copyright (c) 2007-2008 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
|
|
4
|
+
* Dual licensed under MIT and GPL.
|
|
5
|
+
* Date: 6/3/2008
|
|
6
|
+
*
|
|
7
|
+
* @projectDescription Animated scrolling navigation, using anchors.
|
|
8
|
+
* http://flesler.blogspot.com/2007/10/jquerylocalscroll-10.html
|
|
9
|
+
* @author Ariel Flesler
|
|
10
|
+
* @version 1.2.6
|
|
11
|
+
*
|
|
12
|
+
* @id jQuery.fn.localScroll
|
|
13
|
+
* @param {Object} settings Hash of settings, it is passed in to jQuery.ScrollTo, none is required.
|
|
14
|
+
* @return {jQuery} Returns the same jQuery object, for chaining.
|
|
15
|
+
*
|
|
16
|
+
* @example $('ul.links').localScroll();
|
|
17
|
+
*
|
|
18
|
+
* @example $('ul.links').localScroll({ filter:'.animated', duration:400, axis:'x' });
|
|
19
|
+
*
|
|
20
|
+
* @example $.localScroll({ target:'#pane', axis:'xy', queue:true, event:'mouseover' });
|
|
21
|
+
*
|
|
22
|
+
* Notes:
|
|
23
|
+
* - The plugin requires jQuery.ScrollTo.
|
|
24
|
+
* - The hash of settings, is passed to jQuery.ScrollTo, so the settings are valid for that plugin as well.
|
|
25
|
+
* - jQuery.localScroll can be used if the desired links, are all over the document, it accepts the same settings.
|
|
26
|
+
* - If the setting 'lazy' is set to true, then the binding will still work for later added anchors.
|
|
27
|
+
* - The setting 'speed' is deprecated, use 'duration' instead.
|
|
28
|
+
* - If onBefore returns false, the event is ignored.
|
|
29
|
+
**/
|
|
30
|
+
;(function( $ ){
|
|
31
|
+
var URI = location.href.replace(/#.*/,'');//local url without hash
|
|
32
|
+
|
|
33
|
+
var $localScroll = $.localScroll = function( settings ){
|
|
34
|
+
$('body').localScroll( settings );
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
//Many of these defaults, belong to jQuery.ScrollTo, check it's demo for an example of each option.
|
|
38
|
+
//@see http://www.freewebs.com/flesler/jQuery.ScrollTo/
|
|
39
|
+
$localScroll.defaults = {//the defaults are public and can be overriden.
|
|
40
|
+
duration:1000, //how long to animate.
|
|
41
|
+
axis:'y',//which of top and left should be modified.
|
|
42
|
+
event:'click',//on which event to react.
|
|
43
|
+
stop:true//avoid queuing animations
|
|
44
|
+
/*
|
|
45
|
+
lock:false,//ignore events if already animating
|
|
46
|
+
lazy:false,//if true, links can be added later, and will still work.
|
|
47
|
+
target:null, //what to scroll (selector or element). Keep it null if want to scroll the whole window.
|
|
48
|
+
filter:null, //filter some anchors out of the matched elements.
|
|
49
|
+
hash: false//if true, the hash of the selected link, will appear on the address bar.
|
|
50
|
+
*/
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
//if the URL contains a hash, it will scroll to the pointed element
|
|
54
|
+
$localScroll.hash = function( settings ){
|
|
55
|
+
settings = $.extend( {}, $localScroll.defaults, settings );
|
|
56
|
+
settings.hash = false;//can't be true
|
|
57
|
+
if( location.hash )
|
|
58
|
+
setTimeout(function(){ scroll( 0, location, settings ); }, 0 );//better wrapped with a setTimeout
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
$.fn.localScroll = function( settings ){
|
|
62
|
+
settings = $.extend( {}, $localScroll.defaults, settings );
|
|
63
|
+
|
|
64
|
+
return ( settings.persistent || settings.lazy )
|
|
65
|
+
? this.bind( settings.event, function( e ){//use event delegation, more links can be added later.
|
|
66
|
+
var a = $([e.target, e.target.parentNode]).filter(filter)[0];//if a valid link was clicked.
|
|
67
|
+
a && scroll( e, a, settings );//do scroll.
|
|
68
|
+
})
|
|
69
|
+
: this.find('a,area')//bind concretely, to each matching link
|
|
70
|
+
.filter( filter ).bind( settings.event, function(e){
|
|
71
|
+
scroll( e, this, settings );
|
|
72
|
+
}).end()
|
|
73
|
+
.end();
|
|
74
|
+
|
|
75
|
+
function filter(){//is this a link that points to an anchor and passes a possible filter ? href is checked to avoid a bug in FF.
|
|
76
|
+
return !!this.href && !!this.hash && this.href.replace(this.hash,'') == URI && (!settings.filter || $(this).is( settings.filter ));
|
|
77
|
+
};
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
function scroll( e, link, settings ){
|
|
81
|
+
var id = link.hash.slice(1),
|
|
82
|
+
elem = document.getElementById(id) || document.getElementsByName(id)[0];
|
|
83
|
+
if ( elem ){
|
|
84
|
+
e && e.preventDefault();
|
|
85
|
+
var $target = $( settings.target || $.scrollTo.window() );//if none specified, then the window.
|
|
86
|
+
|
|
87
|
+
if( settings.lock && $target.is(':animated') ||
|
|
88
|
+
settings.onBefore && settings.onBefore.call(link, e, elem, $target) === false ) return;
|
|
89
|
+
|
|
90
|
+
if( settings.stop )
|
|
91
|
+
$target.queue('fx',[]).stop();//remove all its animations
|
|
92
|
+
$target
|
|
93
|
+
.scrollTo( elem, settings )//do scroll
|
|
94
|
+
.trigger('notify.serialScroll',[elem]);//notify serialScroll about this change
|
|
95
|
+
if( settings.hash )
|
|
96
|
+
$target.queue(function(){
|
|
97
|
+
location = link.hash;
|
|
98
|
+
// make sure this function is released
|
|
99
|
+
$(this).dequeue();
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
})( jQuery );
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* jQuery.ScrollTo
|
|
3
|
+
* Copyright (c) 2007-2008 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
|
|
4
|
+
* Dual licensed under MIT and GPL.
|
|
5
|
+
* Date: 2/19/2008
|
|
6
|
+
*
|
|
7
|
+
* @projectDescription Easy element scrolling using jQuery.
|
|
8
|
+
* http://flesler.blogspot.com/2007/10/jqueryscrollto.html
|
|
9
|
+
* Tested with jQuery 1.2.1. On FF 2.0.0.11, IE 6, Opera 9.22 and Safari 3 beta. on Windows.
|
|
10
|
+
*
|
|
11
|
+
* @author Ariel Flesler
|
|
12
|
+
* @version 1.3.3
|
|
13
|
+
*
|
|
14
|
+
* @id jQuery.scrollTo
|
|
15
|
+
* @id jQuery.fn.scrollTo
|
|
16
|
+
* @param {String, Number, DOMElement, jQuery, Object} target Where to scroll the matched elements.
|
|
17
|
+
* The different options for target are:
|
|
18
|
+
* - A number position (will be applied to all axes).
|
|
19
|
+
* - A string position ('44', '100px', '+=90', etc ) will be applied to all axes
|
|
20
|
+
* - A jQuery/DOM element ( logically, child of the element to scroll )
|
|
21
|
+
* - A string selector, that will be relative to the element to scroll ( 'li:eq(2)', etc )
|
|
22
|
+
* - A hash { top:x, left:y }, x and y can be any kind of number/string like above.
|
|
23
|
+
* @param {Number} duration The OVERALL length of the animation, this argument can be the settings object instead.
|
|
24
|
+
* @param {Object} settings Hash of settings, optional.
|
|
25
|
+
* @option {String} axis Which axis must be scrolled, use 'x', 'y', 'xy' or 'yx'.
|
|
26
|
+
* @option {Number} duration The OVERALL length of the animation.
|
|
27
|
+
* @option {String} easing The easing method for the animation.
|
|
28
|
+
* @option {Boolean} margin If true, the margin of the target element will be deducted from the final position.
|
|
29
|
+
* @option {Object, Number} offset Add/deduct from the end position. One number for both axes or { top:x, left:y }.
|
|
30
|
+
* @option {Object, Number} over Add/deduct the height/width multiplied by 'over', can be { top:x, left:y } when using both axes.
|
|
31
|
+
* @option {Boolean} queue If true, and both axis are given, the 2nd axis will only be animated after the first one ends.
|
|
32
|
+
* @option {Function} onAfter Function to be called after the scrolling ends.
|
|
33
|
+
* @option {Function} onAfterFirst If queuing is activated, this function will be called after the first scrolling ends.
|
|
34
|
+
* @return {jQuery} Returns the same jQuery object, for chaining.
|
|
35
|
+
*
|
|
36
|
+
* @example $('div').scrollTo( 340 );
|
|
37
|
+
*
|
|
38
|
+
* @example $('div').scrollTo( '+=340px', { axis:'y' } );
|
|
39
|
+
*
|
|
40
|
+
* @example $('div').scrollTo( 'p.paragraph:eq(2)', 500, { easing:'swing', queue:true, axis:'xy' } );
|
|
41
|
+
*
|
|
42
|
+
* @example var second_child = document.getElementById('container').firstChild.nextSibling;
|
|
43
|
+
* $('#container').scrollTo( second_child, { duration:500, axis:'x', onAfter:function(){
|
|
44
|
+
* alert('scrolled!!');
|
|
45
|
+
* }});
|
|
46
|
+
*
|
|
47
|
+
* @example $('div').scrollTo( { top: 300, left:'+=200' }, { offset:-20 } );
|
|
48
|
+
*
|
|
49
|
+
* Notes:
|
|
50
|
+
* - jQuery.scrollTo will make the whole window scroll, it accepts the same arguments as jQuery.fn.scrollTo.
|
|
51
|
+
* - If you are interested in animated anchor navigation, check http://jquery.com/plugins/project/LocalScroll.
|
|
52
|
+
* - The options margin, offset and over are ignored, if the target is not a jQuery object or a DOM element.
|
|
53
|
+
* - The option 'queue' won't be taken into account, if only 1 axis is given.
|
|
54
|
+
*/
|
|
55
|
+
;(function( $ ){
|
|
56
|
+
|
|
57
|
+
var $scrollTo = $.scrollTo = function( target, duration, settings ){
|
|
58
|
+
$scrollTo.window().scrollTo( target, duration, settings );
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
$scrollTo.defaults = {
|
|
62
|
+
axis:'y',
|
|
63
|
+
duration:1
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
//returns the element that needs to be animated to scroll the window
|
|
67
|
+
$scrollTo.window = function(){
|
|
68
|
+
return $( $.browser.safari ? 'body' : 'html' );
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
$.fn.scrollTo = function( target, duration, settings ){
|
|
72
|
+
if( typeof duration == 'object' ){
|
|
73
|
+
settings = duration;
|
|
74
|
+
duration = 0;
|
|
75
|
+
}
|
|
76
|
+
settings = $.extend( {}, $scrollTo.defaults, settings );
|
|
77
|
+
duration = duration || settings.speed || settings.duration;//speed is still recognized for backwards compatibility
|
|
78
|
+
settings.queue = settings.queue && settings.axis.length > 1;//make sure the settings are given right
|
|
79
|
+
if( settings.queue )
|
|
80
|
+
duration /= 2;//let's keep the overall speed, the same.
|
|
81
|
+
settings.offset = both( settings.offset );
|
|
82
|
+
settings.over = both( settings.over );
|
|
83
|
+
|
|
84
|
+
return this.each(function(){
|
|
85
|
+
var elem = this, $elem = $(elem),
|
|
86
|
+
t = target, toff, attr = {},
|
|
87
|
+
win = $elem.is('html,body');
|
|
88
|
+
switch( typeof t ){
|
|
89
|
+
case 'number'://will pass the regex
|
|
90
|
+
case 'string':
|
|
91
|
+
if( /^([+-]=)?\d+(px)?$/.test(t) ){
|
|
92
|
+
t = both( t );
|
|
93
|
+
break;//we are done
|
|
94
|
+
}
|
|
95
|
+
t = $(t,this);// relative selector, no break!
|
|
96
|
+
case 'object':
|
|
97
|
+
if( t.is || t.style )//DOM/jQuery
|
|
98
|
+
toff = (t = $(t)).offset();//get the real position of the target
|
|
99
|
+
}
|
|
100
|
+
$.each( settings.axis.split(''), function( i, axis ){
|
|
101
|
+
var Pos = axis == 'x' ? 'Left' : 'Top',
|
|
102
|
+
pos = Pos.toLowerCase(),
|
|
103
|
+
key = 'scroll' + Pos,
|
|
104
|
+
act = elem[key],
|
|
105
|
+
Dim = axis == 'x' ? 'Width' : 'Height',
|
|
106
|
+
dim = Dim.toLowerCase();
|
|
107
|
+
|
|
108
|
+
if( toff ){//jQuery/DOM
|
|
109
|
+
attr[key] = toff[pos] + ( win ? 0 : act - $elem.offset()[pos] );
|
|
110
|
+
|
|
111
|
+
if( settings.margin ){//if it's a dom element, reduce the margin
|
|
112
|
+
attr[key] -= parseInt(t.css('margin'+Pos)) || 0;
|
|
113
|
+
attr[key] -= parseInt(t.css('border'+Pos+'Width')) || 0;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
attr[key] += settings.offset[pos] || 0;//add/deduct the offset
|
|
117
|
+
|
|
118
|
+
if( settings.over[pos] )//scroll to a fraction of its width/height
|
|
119
|
+
attr[key] += t[dim]() * settings.over[pos];
|
|
120
|
+
}else
|
|
121
|
+
attr[key] = t[pos];//remove the unnecesary 'px'
|
|
122
|
+
|
|
123
|
+
if( /^\d+$/.test(attr[key]) )//number or 'number'
|
|
124
|
+
attr[key] = attr[key] <= 0 ? 0 : Math.min( attr[key], max(Dim) );//check the limits
|
|
125
|
+
|
|
126
|
+
if( !i && settings.queue ){//queueing each axis is required
|
|
127
|
+
if( act != attr[key] )//don't waste time animating, if there's no need.
|
|
128
|
+
animate( settings.onAfterFirst );//intermediate animation
|
|
129
|
+
delete attr[key];//don't animate this axis again in the next iteration.
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
animate( settings.onAfter );
|
|
133
|
+
|
|
134
|
+
function animate( callback ){
|
|
135
|
+
$elem.animate( attr, duration, settings.easing, callback && function(){
|
|
136
|
+
callback.call(this, target);
|
|
137
|
+
});
|
|
138
|
+
};
|
|
139
|
+
function max( Dim ){
|
|
140
|
+
var el = win ? $.browser.opera ? document.body : document.documentElement : elem;
|
|
141
|
+
return el['scroll'+Dim] - el['client'+Dim];
|
|
142
|
+
};
|
|
143
|
+
});
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
function both( val ){
|
|
147
|
+
return typeof val == 'object' ? val : { top:val, left:val };
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
})( jQuery );
|