Skip to content

Commit

Permalink
Clyde feature complete
Browse files Browse the repository at this point in the history
  • Loading branch information
navilan committed Jan 21, 2010
1 parent dc8c37b commit e90d108
Show file tree
Hide file tree
Showing 7 changed files with 141 additions and 21 deletions.
61 changes: 51 additions & 10 deletions clyde.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@

from tornado.options import define, options
from django.conf import settings
from hydeengine import setup_env
from hydeengine import setup_env, Generator
from hydeengine.siteinfo import SiteInfo
from hydeengine.file_system import FileSystemEntity, File, Folder

Expand All @@ -28,7 +28,10 @@ def __init__(self):
(r"/site/([^/]+)/files", FilesJSONHandler),
(r"/site/([^/]+)/content", ContentHandler),
(r"/site/([^/]+)/content/save", SaveHandler),
(r"/site/([^/]+)/publish", PublishHandler)
(r"/site/([^/]+)/publish", PublishHandler),
(r"/site/([^/]+)/rename", RenameHandler),
(r"/site/([^/]+)/delete", DeleteHandler),
(r"/site/([^/]+)/generate", GenerateHandler),

]
sites = yaml.load(File(options.sites).read_all())
Expand All @@ -41,7 +44,7 @@ def __init__(self):

class BaseHandler(tornado.web.RequestHandler):

def init_site(self, site):
def init_site(self, site, force=False):
if not site in self.settings['sites']:
raise Exception("Site [%s] is not configured." % (site, ))

Expand All @@ -51,7 +54,7 @@ def init_site(self, site):
setup_env(self.site_path)
setattr(settings, 'siteinfo', {})

if not site in settings.siteinfo:
if not site in settings.siteinfo or force:
self.siteinfo = SiteInfo(settings, self.site_path)
self.siteinfo.refresh()
settings.siteinfo[site] = self.siteinfo
Expand Down Expand Up @@ -91,7 +94,7 @@ def jsnode(node):
children.append([jsnode(child_node)
for child_node in node['nodes']])
return dict(
attributes = dict(tooltip=node['path']),
attributes = dict(tooltip=node['path'], rel='folder'),
data = dict(
title=node['name'],attributes=dict()),
children=children
Expand All @@ -108,21 +111,59 @@ def doget(self, site):
path = self.get_argument("path", None)
if not path: return
f = File(self.siteinfo.folder.child(path))
if not f.exists: return
self.write(f.read_all())

class SiteHandler(tornado.web.RequestHandler):
def get(self, site):
self.render("clydeweb/templates/site.html", site=site)

class NewFileHandler(BaseHandler):
class GenerateHandler(BaseHandler):
def dopost(self, site):
Generator(self.site_path).generate()

class RenameHandler(BaseHandler):
def dopost(self, site):
path = self.get_argument("path", None)
if not path: return
f = File(self.siteinfo.folder.child(path))
f.write("")
original_path = self.get_argument("original_path", None)
type = self.get_argument('type', None)
repo = self.settings['sites'][site]['repo']
dvcs = DVCS.load_dvcs(self.siteinfo.folder.path, repo)
if type == "file":
f = File(self.siteinfo.folder.child(original_path))
newf = File(self.siteinfo.folder.child(path))
if not f.exists:
newf.write("")
dvcs.add_file(newf)
else:
f.move_to(newf)
dvcs.add_file(newf, message="Renamed " + path)

else:
f = Folder(self.siteinfo.folder.child(original_path))
newf = Folder(self.siteinfo.folder.child(path))
if not f.exists:
newf.make()
else:
f.move_to(newf)
dvcs.add_file(newf, message="Renamed " + path)
self.init_site(site, force=True)

class DeleteHandler(BaseHandler):
def dopost(self, site):
path = self.get_argument("path", None)
type = self.get_argument('type', None)
repo = self.settings['sites'][site]['repo']
dvcs = DVCS.load_dvcs(self.siteinfo.folder.path, repo)
dvcs.add_file(path)
f = None
if type == "file":
f = File(self.siteinfo.folder.child(path))
else:
f = Folder(self.siteinfo.folder.child(path))

f.delete()
dvcs.save_draft()
self.init_site(site, force=True)

class SaveHandler(BaseHandler):
def dopost(self, site):
Expand Down
Binary file added clydeweb/media/images/cross-button.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added clydeweb/media/images/drive-rename.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added clydeweb/media/images/gear.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
96 changes: 87 additions & 9 deletions clydeweb/templates/base.html
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,12 @@ <h1>Clyde</h1>
<h2>{{site}}</h2>
</hgroup>
<div class="buttonbar">
<a id="new-file-button" class="button" href="/site/{{site}}/new-folder"><img title="New File" alt="New File" src="{{static_url("images/document--plus.png")}}"></a>
<a id="new-folder-button" class="button" href="/site/{{site}}/new-file"><img title="New Folder" alt="New Folder" src="{{static_url("images/folder--plus.png")}}"></a>
<a id="push-button" class="button" href="/site/{{site}}/publish"><img title="Publish" alt="Publish" src="{{static_url("images/network-cloud.png")}}"></a>
<a id="new-file-button" class="button" href="/site/{{site}}/new-file" title="New File"><img title="New File" alt="New File" src="{{static_url("images/document--plus.png")}}"></a>
<a id="new-folder-button" class="button" href="/site/{{site}}/new-folder" title="New Folder"><img title="New Folder" alt="New Folder" src="{{static_url("images/folder--plus.png")}}"></a>
<a id="rename-button" class="button" href="/site/{{site}}/rename" title="Rename"><img title="Rename" alt="Rename" src="{{static_url("images/drive-rename.png")}}"></a>
<a id="delete-button" class="button" href="/site/{{site}}/delete" title="Delete"><img title="Delete" alt="Delete" src="{{static_url("images/cross-button.png")}}"></a>
<a id="push-button" class="button" href="/site/{{site}}/publish" title="Publish"><img title="Publish" alt="Publish" src="{{static_url("images/network-cloud.png")}}"></a>
<a id="generate-button" class="button" href="/site/{{site}}/generate" title="Generate"><img title="Generate" alt="Generate" src="{{static_url("images/gear.png")}}"></a>
</div>
</div>
<div id="files"></div>
Expand Down Expand Up @@ -81,7 +84,28 @@ <h2>Select a file</h2>

$(function(){

$("#editor").markItUp(getHydeSet(save_draft));
$("#editor").markItUp(getHydeSet(save_draft));
$("#rename-button").unbind('click').bind('click', function(){
var t = $.tree.focused();
if (t.selected){
t.rename(t.selected);
}
return false;
});

$("#delete-button").unbind('click').bind('click', function(){
var t = $.tree.focused();
if (t.selected){
t.remove(t.selected);
}
return false;
});

$("#generate-button").unbind('click').bind('click', function(){
$.post('/site/{{site}}/generate');
return false;
});

$("#sites-button").unbind('click').bind('click', function(){
if (!sites){
$.getJSON('/sites', function(data){
Expand Down Expand Up @@ -114,7 +138,29 @@ <h2>Select a file</h2>
$("#push-button").unbind('click').bind('click', function(){
$.post('/site/{{site}}/publish');
return false;
});
});

function newFileOrFolder(fileOrFolder){
var t = $.tree.focused();
var name = fileOrFolder == "file" ? "new_file" : "new_folder/";
if(t.selected){
newNode = t.create({
attributes: {
rel:fileOrFolder,
tooltip:t.selected.attr("tooltip") + name
}}, t.selected, 'inside');
}
return false;
}

$("#new-folder-button").unbind('click').bind('click', function(){
return newFileOrFolder("folder");
});

$("#new-file-button").unbind('click').bind('click', function(){
return newFileOrFolder("file");
});

$("#files").tree({
ui : {
dots: false,
Expand All @@ -138,10 +184,42 @@ <h2>Select a file</h2>
callback : {
onchange: function(node, tree){
current_path = node.attributes.tooltip.value;
$("#crumbs h2").text("/" + current_path);
$("#editor").load(
'/site/{{site}}/content?path=' + encodeURIComponent(current_path));
}
$("#crumbs h2").text("/" + current_path);
if (node.attributes.rel.value == 'file'){
$("#editor").show();
$("#editor").load(
'/site/{{site}}/content?path=' +
encodeURIComponent(current_path));
} else {
$("#editor").val("");
}

},
ondelete: function(node, tree, RB){
var path = node.attributes.tooltip.value;
var type = tree.get_type(node);
$.post('/site/{{site}}/delete?path='
+ encodeURIComponent(path)
+ "&type="
+ type
);
},
onrename: function(node, tree, RB){
var originalPath = node.attributes.tooltip.value;
var path = tree.parent(node).attr('tooltip') + tree.get_text(node);
var type = tree.get_type(node);
if (type == "folder"){
path += "/";
}
$(node).attr("tooltip", path);
$.post('/site/{{site}}/rename?path='
+ encodeURIComponent(path)
+ "&original_path="
+ encodeURIComponent(originalPath)
+ "&type="
+ type
);
}
}

});
Expand Down
4 changes: 2 additions & 2 deletions hydeengine/file_system.py
Original file line number Diff line number Diff line change
Expand Up @@ -420,9 +420,9 @@ def move_to(self, destination):
Moves this directory to the given destination. Returns a Folder object
that represents the moved directory.
"""
"""
shutil.copytree(self.path, str(destination))
shutil.rmtree(str(destination))
shutil.rmtree(self.path)
return self.__get_destination__(destination)

def copy_to(self, destination):
Expand Down
1 change: 1 addition & 0 deletions repos/git.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ def add_file(self, path, message=None):
raise Exception(cmdresult)

self.commit(message or "Added file %s" % path)
self.push(self.draft_branch)

def publish(self):
self.switch(self.prod_branch)
Expand Down

0 comments on commit e90d108

Please sign in to comment.