diff options
author | Thorsten Behrens <tbehrens@suse.com> | 2013-04-16 16:57:06 +0200 |
---|---|---|
committer | Thorsten Behrens <tbehrens@suse.com> | 2013-04-16 16:57:06 +0200 |
commit | e5d59caf099778f1c53be21220a6c9c3c2980f0f (patch) | |
tree | ec42c56559d8639a5fd2cb12e135177445a5578d | |
parent | 6cd3347a3a4560dac544050fdb2e8f17a4d41092 (diff) |
A new demo group edit page at /users/<user>/edit
Some playing with jquery gave this little edit page. Saving does not
yet work.
-rwxr-xr-x | slideapi.py | 9 | ||||
-rw-r--r-- | views/app.tpl | 95 |
2 files changed, 102 insertions, 2 deletions
diff --git a/slideapi.py b/slideapi.py index f1e63fd..670a974 100755 --- a/slideapi.py +++ b/slideapi.py @@ -167,7 +167,8 @@ def upload_deck(user,deck): out) # update link to latest rev - os.unlink(path+'latest') + if os.path.exists(path+'latest'): + os.unlink(path+'latest') os.symlink(str(new_rev), path+'latest') # thumbnail generation happens asynchronously via updatedeck.py @@ -251,7 +252,6 @@ def list_slides(user, part, deck, rev): @get('/api/users/<user>/<part>/<deck>/<rev:int>/<slide:int>/thumbnail.png') def get_thumbnail(user, part, deck, rev, slide): path = "%s/%s/%s/%s/%d/%d/" % (root,user,part,deck,rev,slide) - print path return static_file('thumbnail.png', root=path, mimetype='image/png') @get('/api/users/<user>/<part>/<deck>/<rev:int>/meta.json') @@ -278,6 +278,11 @@ def send_slide(user, part, deck, rev, slide): def home_page(): return '<html><body>Welcome</body></html>' +@get('/users/<username>/edit') +@view('app') +def app_page(username): + return dict(user=username) + # ------------------------------------------------------------------- class SSLInterface(ServerAdapter): diff --git a/views/app.tpl b/views/app.tpl new file mode 100644 index 0000000..b61c754 --- /dev/null +++ b/views/app.tpl @@ -0,0 +1,95 @@ +<html> +<head> + <meta charset="utf-8"/> + <title>SlideShare Python</title> + <link rel="stylesheet" href="http://code.jquery.com/ui/1.10.2/themes/smoothness/jquery-ui.css" /> + <script src="http://code.jquery.com/jquery-1.9.1.js"></script> + <script src="http://code.jquery.com/ui/1.10.2/jquery-ui.js"></script> + <style> + #src-deck { list-style-type: none; margin: 0; padding: 0; height: 60%} + #src-deck li { margin: 3px 3px 3px 0; padding: 1px; float: left; width: 100px; height: 90px; font-size: 4em; text-align: center; } + #drop-target { list-style-type: none; margin: 0; padding: 0; height: 60%} + #drop-target li { margin: 3px 3px 3px 0; padding: 1px; float: left; width: 100px; height: 90px; font-size: 4em; text-align: center; } + .slide { + position: relative; + border: 1px solid #d3d3d3; + font-weight: normal; + color: #555555; + } + .slide-number { position: relative; font-size: 0.5em; position: absolute; bottom: 0; right: 0; } + + h1 { padding: .2em; margin: 0; } + #decks { float:left; width: 500px; margin-right: 2em; } + #slidegroup { width: 200px; float: left; margin-top: 1em; } + #slidegroup ul { margin: 0; padding: 1em 0 1em 3em; } + </style> + <script> + $(function() { + var $accordion = $( "#accordion" ); + $.getJSON('../../api/users/{{user}}/decks/', function(jsonData) { + $.each(jsonData, function(){ + var src_deck = this; + var $curr_deck = $accordion.append("<h2><a href='#'>" + src_deck + "</a></h2><div><ul id='src-deck'></ul></div>").find("div > ul").last(); + $.getJSON('../../api/users/{{user}}/decks/' + src_deck + '/', function(jsonData) { + var last_rev = jsonData[jsonData.length-1]; + $.getJSON('../../api/users/{{user}}/decks/' + src_deck + '/' + last_rev + '/', function(jsonData) { + $.each(jsonData, function(){ + $curr_deck.append("<li class='slide' style='background: #e6e6e6 url(../../users/{{user}}/decks/" + src_deck + "/" + last_rev + "/" + this + "/thumbnail.png) 50% 50% repeat-x;'><div class='slide-number'>" + this + "</div></li>").children().last().draggable({ + cancel: "a.ui-icon", + appendTo: "body", + revert: "invalid", + containment: "document", + helper: "clone", + cursor: "move", + start: function(event, ui) { + ui.helper.css({ height: 100, width: 100 }); + }, + });; + }); + }); + }); + }); + $accordion.accordion(); + }); + var trash_icon = "<a href='link/to/trash/script/when/we/have/js/off' title='Delete this slide' class='ui-icon ui-icon-trash'>Delete Slide</a>"; + $( "#slidegroup ul" ).droppable({ + activeClass: "ui-state-default", + hoverClass: "ui-state-hover", + accept: ":not(.ui-sortable-helper)", + drop: function( event, ui ) { + $( this ).find( ".placeholder" ).remove(); + ui.draggable.clone().hide().append( trash_icon ). + click(function( event ) { + var $item = $( this ), + $target = $( event.target ); + if ( $target.is( "a.ui-icon-trash" ) ) { + $item.fadeOut( 750, function() { + $( this ).remove(); + }); + } + return false; + }).appendTo( this ).fadeIn(); + } + }); + $( "#decks" ).width("45%"); + $( "#slidegroup" ).width("45%"); + }); + </script> +</head> +<body> + <div id="decks"> + <h1 class="ui-widget-header">Decks</h1> + <div id="accordion"> + </div> + </div> + <div id="slidegroup"> + <h1 class="ui-widget-header">New Group</h1> + <div class="ui-widget-content"> + <ul id="drop-target"> + <li class="placeholder" style="font-size: 1em; text-align: center;">Drag your slides here!</li> + </ul> + </div> + </div> + +</body> +</html> |