public
Fork of sr/git-wiki
Description: A wiki engine that uses a Git repository as its data store.
Homepage: http://atonie.org/2008/02/git-wiki
Clone URL: git://github.com/al3x/git-wiki.git
Search Repo:
edit-in-place.  thanks, jQuery.
al3x (author)
Fri Mar 14 23:34:29 -0700 2008
commit  06f53f5f3843797f2ebba6408b730f2c7442a7d1
tree    de5c46fa5f89bb272a4ee2229abd5f85212ac319
parent  c0faf90e1d16b8dac77d67470619b59b80404cbd
...
3
4
5
6
 
7
8
9
...
16
17
18
 
 
 
 
 
19
20
21
...
33
34
35
 
 
 
 
 
 
 
36
37
38
...
134
135
136
137
138
139
140
141
 
 
 
142
143
144
...
3
4
5
 
6
7
8
9
...
16
17
18
19
20
21
22
23
24
25
26
...
38
39
40
41
42
43
44
45
46
47
48
49
50
...
146
147
148
 
 
 
 
 
149
150
151
152
153
154
0
@@ -3,7 +3,7 @@
0
 require 'environment'
0
 require 'lib/sinatra/lib/sinatra'
0
 
0
-get('/') { redirect '/' + HOMEPAGE }
0
+get('/') { redirect "/#{HOMEPAGE}" }
0
 
0
 get '/a/list' do
0
   @pages = $repo.log.first.gtree.children.map { |name, blob| Page.new(name) } rescue []
0
@@ -16,6 +16,11 @@
0
   @page.tracked? ? show(:show, @page.name) : redirect('/e/' + @page.name)
0
 end
0
 
0
+get '/:page/raw' do
0
+ @page = Page.new(params[:page])
0
+ @page.raw_body
0
+end
0
+
0
 get '/:page/append' do
0
   @page = Page.new(page_with_ext)
0
   @page.body = @page.raw_body + "\n\n" + params[:text]
0
@@ -33,6 +38,13 @@
0
   redirect '/' + @page.name
0
 end
0
 
0
+post '/eip/:page' do
0
+ @page = Page.new(page_with_ext)
0
+ @page.update(params[:body])
0
+ @page = Page.new(page_with_ext)
0
+ @page.body
0
+end
0
+
0
 get '/h/:page' do
0
   @page = Page.new(page_with_ext)
0
   show :history, "History of #{@page.name}"
0
@@ -134,11 +146,9 @@
0
 end
0
 
0
 def page_with_ext
0
- if params[:format] == "html"
0
- params[:page]
0
- else
0
- "#{params[:page]}.#{params[:format]}"
0
- end
0
+ return params[:page] unless params[:format]
0
+ puts "FORMAT #{params[:format]}"
0
+ "#{params[:page]}.#{params[:format]}"
0
 end
0
 
0
 private
...
34
35
36
37
 
38
39
40
 
41
42
43
44
45
46
 
47
48
49
...
34
35
36
 
37
38
39
 
40
41
42
43
44
45
 
46
47
48
49
0
@@ -34,16 +34,16 @@
0
     end
0
   end
0
 
0
- def update(content, message)
0
+ def update(content, message=nil)
0
     File.open(@filename, 'w') { |f| f << content }
0
     commit_message = tracked? ? "edited #{@name}" : "created #{@name}"
0
- commit_message += ' : ' + message if message message.length > 0
0
+ commit_message += ' : ' + message if message && message.length > 0
0
     begin
0
       $repo.add(@name)
0
       $repo.commit(commit_message)
0
     rescue
0
       nil
0
- end
0
+ end
0
   end
0
 
0
   def tracked?
...
5
6
7
8
 
9
10
11
...
25
26
27
28
 
29
...
5
6
7
 
8
9
10
11
...
25
26
27
 
28
29
0
@@ -5,7 +5,7 @@
0
 
0
 function distance_of_time_in_words(to, from) {
0
   seconds_ago = ((to - from) / 1000);
0
- minutes_ago = Math.floor(seconds_ago / 60)
0
+ minutes_ago = Math.floor(seconds_ago / 60);
0
 
0
   if(minutes_ago <= 0) { return "less than a minute"; }
0
   if(minutes_ago == 1) { return "a minute"; }
0
@@ -25,6 +25,6 @@
0
 }
0
 
0
 function clearField(field_id) {
0
- document.getElementById(field_id).value = "";
0
+ document.getElementById(field_id).value = "";
0
 }
...
 
 
 
 
...
1
2
3
4
0
@@ -1 +1,5 @@
0
+h( @ÿÿÿߓ5‹Ã´°£0GVw¾ëÀò¡Œa»Ô9k‹!$&nœ¹ϘHP¥ÜཌÇÁ)™Ì×Âêz·N~œԧe~¯Î7Xn½¾½י,N¶1w¦Éõ~Ʌ ØØ½Ûâ¥Æ_ Êҷœäm¯ÚáãŞ`ˆÆó©Ó߶|äõ3´ÌÏ[–¼AbwNœÎãѐ 9Q`?~§%-2;s˜%ƒ¾¢±º÷p¤Åj¶æ¢X]§Øy¸ßòDŽ¿óòó3]y´Ì÷r«ÏñӋèڜ7à¥Í“ºÓæ۔hŸÂK‡¯Éø“DC‰¸ڿŸ€¿Éٺ¡Ð°Õا]¿ˆ0HœÓژ%íXŸÍaœÁ÷=wž4…ºُl³à¨Õ!z´Y©ÝœÌµÐX¤Öu©Ê6ŽÈƒÃûœ½/‚¸ñเ^Å1zª©Ï‹ºØ|¬Ëüîq”Î8N]ï¥ÒŒÇl ÁùÌàðM¹£Ê7…¸®Õz¾é&(ô®Ów«ÌҊ y³ñUžÎܞ8ŸÏ†Ä€±Ï[˜¾#,13„¸£Ñ¢Ìw·àŸÀَ ъ 3€²3‚¶›Í–Ì’ÊŽÈŠÆlœº|­ÍþþþÙÙàv½ê˄ěËb§Ô¤Ò¢Ñ ÏžÏ‡ÅkŸÁߓҊ ü©ó£ÑUžÍœÎv½ëÌžÏv¾êŸÁk ÁkŸÀt©Ê5 ŒŒÏÁÐÁ¨{@#FÍͷÍʹ²µM§C¢76ˆ';qC•ƒ3
0
+*sZ–ȝ=vvp¡´
0
+»gL> H †<£m^E´
0
+jxx¤€n«¬Å8³´B“rrrrrrrrrrr|‘V’мǽc¾¿‡ɭ˸0wk¥®…¯a°‹±.Ày OY‚$̟tº[¦U˜d”Ž›™ -iIQê:" `u%ÑA)T©o]šf?&´´\PÄl9ÂXh´´´´~zN}œ‰Sž_´´´´´¶—/KÆJDR´´´´´2,+1WGbe(„´
...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
0
@@ -1 +1,27 @@
0
+
0
+(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);}
0
+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 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);}}
0
+$(this).attr('title',settings.tooltip);settings.autowidth='auto'==settings.width;settings.autoheight='auto'==settings.height;return this.each(function(){if(!$.trim($(this).html())){$(this).html(settings.placeholder);}
0
+$(this)[settings.event](function(e){var self=this;if(self.editing){return;}
0
+$(self).css("visibility","hidden");if(settings.width!='none'){settings.width=settings.autowidth?$(self).width():settings.width;}
0
+if(settings.height!='none'){settings.height=settings.autoheight?$(self).height():settings.height;}
0
+$(this).css("visibility","");if($(this).html().toLowerCase().replace(/;/,'')==settings.placeholder.toLowerCase().replace(/;/,'')){$(this).html('');}
0
+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);}}
0
+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);}}
0
+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);}
0
+$.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;}
0
+content.apply(form,[input_content,settings,self]);input.attr('name',settings.name);buttons.apply(form,[settings,self]);plugin.apply(form,[settings,self]);$(self).append(form);$(':input:visible:enabled:first',form).focus();if(settings.select){input.select();}
0
+input.keydown(function(e){if(e.keyCode==27){e.preventDefault();reset();}});var t;if('cancel'==settings.onblur){input.blur(function(e){t=setTimeout(reset,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){});}
0
+form.submit(function(e){if(t){clearTimeout(t);}
0
+e.preventDefault();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);}
0
+$(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);}});}
0
+return false;});function reset(){$(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);},buttons:function(settings,original){if(settings.submit){var submit=$('<input type="submit">');submit.val(settings.submit);$(this).append(submit);}
0
+if(settings.cancel){var cancel=$('<input type="button">');cancel.val(settings.cancel);$(this).append(cancel);$(cancel).click(function(){$(original).html(original.revert);original.editing=false;});}}},text:{element:function(settings,original){var input=$('<input>');if(settings.width!='none'){input.width(settings.width);}
0
+if(settings.height!='none'){input.height(settings.height);}
0
+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);}
0
+if(settings.cols){textarea.attr('cols',settings.cols);}else{textarea.width(settings.width);}
0
+$(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;}
0
+if('selected'==key){continue;}
0
+var option=$('<option>').val(key).append(json[key]);$('select',this).append(option);}}
0
+$('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);
...
72
73
74
 
 
 
 
 
 
75
76
77
...
72
73
74
75
76
77
78
79
80
81
82
83
0
@@ -72,6 +72,12 @@
0
   padding: 0;
0
 }
0
 
0
+.edit textarea {
0
+ min-width: 100%;
0
+ max-height: 300px;
0
+ display: block;
0
+}
0
+
0
 .nav_link, .nav_link:visited {
0
   display: inline;
0
   padding: 3px;
...
2
3
4
5
6
7
8
 
 
 
 
 
9
10
11
12
13
14
15
16
17
18
19
20
 
 
 
 
 
 
 
 
21
22
23
...
2
3
4
 
 
 
 
5
6
7
8
9
10
11
12
13
 
 
 
 
 
 
 
 
14
15
16
17
18
19
20
21
22
23
24
0
@@ -2,22 +2,23 @@
0
   <head>
0
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
0
     <title><%= @title %></title>
0
- <link rel="stylesheet" href="/_style.css" type="text/css" media="screen" />
0
- <link rel="stylesheet" href="/_code.css" type="text/css" media="screen" />
0
- <script language="javascript" type="text/javascript" src="app.js"></script>
0
- <script language="javascript" type="text/javascript" src="jquery.min.js"></script>
0
+ <link rel="stylesheet" href="/style.css" type="text/css" media="screen" />
0
+ <link rel="stylesheet" href="/code.css" type="text/css" media="screen" />
0
+ <script language="javascript" type="text/javascript" src="/app.js"></script>
0
+ <script language="javascript" type="text/javascript" src="/jquery.min.js"></script>
0
+ <script language="javascript" type="text/javascript" src="/jeditable.min.js"></script>
0
   </head>
0
   <body>
0
     <div id="container">
0
       <form method="get" action="/a/search">
0
- <ul class="nav_list" id="top_nav">
0
- <li><a href="/" class="nav_link">home</a></li>
0
- <li><a href="/a/branches" class="nav_link">branches</a></li>
0
- <li><a href="/a/history" class="nav_link">history</a></li>
0
- <li><a href="/a/list" class="nav_link">pages</a></li>
0
- <li><a href="/a/tarball" class="nav_link">export</a></li>
0
- <li><input type="text" name="search" size="15" value="search" id="search_field" onfocus="clearField('search_field');" /></li>
0
- </ul>
0
+ <ul class="nav_list" id="top_nav">
0
+ <li><a href="/" class="nav_link">home</a></li>
0
+ <li><a href="/a/branches" class="nav_link">branches</a></li>
0
+ <li><a href="/a/history" class="nav_link">history</a></li>
0
+ <li><a href="/a/list" class="nav_link">pages</a></li>
0
+ <li><a href="/a/tarball" class="nav_link">export</a></li>
0
+ <li><input type="text" name="search" size="15" value="search" id="search_field" onfocus="clearField('search_field');" /></li>
0
+ </ul>
0
       </form>
0
       <%= yield %>
0
       <div id="footer">
...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
...
30
31
32
33
 
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
...
45
46
47
 
48
0
@@ -1,3 +1,18 @@
0
+<script type="text/javascript">
0
+ $(document).ready(function() {
0
+ $(".edit_area").editable('/eip/<%= @page.name %>', {
0
+ indicator: "saving...",
0
+ tooltip: 'double-click to edit...',
0
+ cancel: 'cancel',
0
+ submit: 'save',
0
+ event: 'dblclick',
0
+ cssclass: 'edit',
0
+ loadurl: '/<%= @page.name %>/raw',
0
+ type: 'textarea',
0
+ name: 'body'
0
+ });
0
+ });
0
+</script>
0
 <h1><%= @page.name %></h1>
0
 
0
 <%= @env %>
0
@@ -30,5 +45,5 @@
0
   </div>
0
 </div>
0
 
0
-<div class="content"><%= @page.body %></div>
0
+<div class="content edit_area"><%= @page.body %></div>

Comments

    No one has commented yet.