Reorganize a bunch of javascript handlers.
The javascript is very inconsistent between pages. I'm trying to start using a consistent pattern where the api call is kept in a separate function from the ones that buttons and input boxes talk to.
This commit is contained in:
		
							parent
							
								
									b314d6376f
								
							
						
					
					
						commit
						f047235c48
					
				
					 11 changed files with 160 additions and 140 deletions
				
			
		|  | @ -80,8 +80,8 @@ def P_album(album_id): | ||||||
|     return P.get_album(album_id) |     return P.get_album(album_id) | ||||||
| 
 | 
 | ||||||
| @P_wrapper | @P_wrapper | ||||||
| def P_bookmark(bookmarkid): | def P_bookmark(bookmark_id): | ||||||
|     return P.get_bookmark(bookmarkid) |     return P.get_bookmark(bookmark_id) | ||||||
| 
 | 
 | ||||||
| @P_wrapper | @P_wrapper | ||||||
| def P_photo(photo_id): | def P_photo(photo_id): | ||||||
|  |  | ||||||
|  | @ -12,20 +12,30 @@ session_manager = common.session_manager | ||||||
| 
 | 
 | ||||||
| # Individual bookmarks ############################################################################# | # Individual bookmarks ############################################################################# | ||||||
| 
 | 
 | ||||||
| @site.route('/bookmark/<bookmarkid>.json') | @site.route('/bookmarks/create_bookmark', methods=['POST']) | ||||||
|  | @decorators.catch_etiquette_exception | ||||||
|  | @decorators.required_fields(['url'], forbid_whitespace=True) | ||||||
|  | def post_bookmark_create(): | ||||||
|  |     url = request.form['url'] | ||||||
|  |     title = request.form.get('title', None) | ||||||
|  |     user = session_manager.get(request).user | ||||||
|  |     bookmark = common.P.new_bookmark(url=url, title=title, author=user) | ||||||
|  |     response = etiquette.jsonify.bookmark(bookmark) | ||||||
|  |     response = jsonify.make_json_response(response) | ||||||
|  |     return response | ||||||
|  | 
 | ||||||
|  | @site.route('/bookmark/<bookmark_id>.json') | ||||||
| @session_manager.give_token | @session_manager.give_token | ||||||
| def get_bookmark_json(bookmarkid): | def get_bookmark_json(bookmark_id): | ||||||
|     bookmark = common.P_bookmark(bookmarkid) |     bookmark = common.P_bookmark(bookmark_id, response_type='json') | ||||||
|     response = etiquette.jsonify.bookmark(bookmark) |     response = etiquette.jsonify.bookmark(bookmark) | ||||||
|     return jsonify.make_json_response(response) |     return jsonify.make_json_response(response) | ||||||
| 
 | 
 | ||||||
| # Bookmark metadata operations ##################################################################### | @site.route('/bookmark/<bookmark_id>/edit', methods=['POST']) | ||||||
| 
 |  | ||||||
| @site.route('/bookmark/<bookmarkid>/edit', methods=['POST']) |  | ||||||
| @session_manager.give_token | @session_manager.give_token | ||||||
| @decorators.catch_etiquette_exception | @decorators.catch_etiquette_exception | ||||||
| def post_bookmark_edit(bookmarkid): | def post_bookmark_edit(bookmark_id): | ||||||
|     bookmark = common.P_bookmark(bookmarkid) |     bookmark = common.P_bookmark(bookmark_id, response_type='json') | ||||||
|     # Emptystring is okay for titles, but not for URL. |     # Emptystring is okay for titles, but not for URL. | ||||||
|     title = request.form.get('title', None) |     title = request.form.get('title', None) | ||||||
|     url = request.form.get('url', None) or None |     url = request.form.get('url', None) or None | ||||||
|  | @ -35,6 +45,14 @@ def post_bookmark_edit(bookmarkid): | ||||||
|     response = jsonify.make_json_response(response) |     response = jsonify.make_json_response(response) | ||||||
|     return response |     return response | ||||||
| 
 | 
 | ||||||
|  | @site.route('/bookmark/<bookmark_id>/delete', methods=['POST']) | ||||||
|  | @decorators.catch_etiquette_exception | ||||||
|  | def post_bookmark_delete(bookmark_id): | ||||||
|  |     bookmark = common.P_bookmark(bookmark_id, response_type='json') | ||||||
|  |     bookmark.delete() | ||||||
|  |     return jsonify.make_json_response({}) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| # Bookmark listings ################################################################################ | # Bookmark listings ################################################################################ | ||||||
| 
 | 
 | ||||||
| @site.route('/bookmarks') | @site.route('/bookmarks') | ||||||
|  | @ -49,24 +67,3 @@ def get_bookmarks_html(): | ||||||
| def get_bookmarks_json(): | def get_bookmarks_json(): | ||||||
|     bookmarks = [etiquette.jsonify.bookmark(b) for b in common.P.get_bookmarks()] |     bookmarks = [etiquette.jsonify.bookmark(b) for b in common.P.get_bookmarks()] | ||||||
|     return jsonify.make_json_response(bookmarks) |     return jsonify.make_json_response(bookmarks) | ||||||
| 
 |  | ||||||
| # Bookmark create and delete ####################################################################### |  | ||||||
| 
 |  | ||||||
| @site.route('/bookmarks/create_bookmark', methods=['POST']) |  | ||||||
| @decorators.catch_etiquette_exception |  | ||||||
| @decorators.required_fields(['url'], forbid_whitespace=True) |  | ||||||
| def post_bookmarks_create(): |  | ||||||
|     url = request.form['url'] |  | ||||||
|     title = request.form.get('title', None) |  | ||||||
|     user = session_manager.get(request).user |  | ||||||
|     bookmark = common.P.new_bookmark(url=url, title=title, author=user) |  | ||||||
|     response = etiquette.jsonify.bookmark(bookmark) |  | ||||||
|     response = jsonify.make_json_response(response) |  | ||||||
|     return response |  | ||||||
| 
 |  | ||||||
| @site.route('/bookmark/<bookmark_id>/delete', methods=['POST']) |  | ||||||
| @decorators.catch_etiquette_exception |  | ||||||
| def post_bookmark_delete(bookmark_id): |  | ||||||
|     bookmark = common.P_bookmark(bookmark_id, response_type='json') |  | ||||||
|     bookmark.delete() |  | ||||||
|     return jsonify.make_json_response({}) |  | ||||||
|  |  | ||||||
|  | @ -31,8 +31,6 @@ def get_tag_id_redirect(tag_id): | ||||||
|     url = request.url.replace(url_from, url_to) |     url = request.url.replace(url_from, url_to) | ||||||
|     return flask.redirect(url) |     return flask.redirect(url) | ||||||
| 
 | 
 | ||||||
| # Tag metadata operations ########################################################################## |  | ||||||
| 
 |  | ||||||
| @site.route('/tag/<specific_tag>/edit', methods=['POST']) | @site.route('/tag/<specific_tag>/edit', methods=['POST']) | ||||||
| @decorators.catch_etiquette_exception | @decorators.catch_etiquette_exception | ||||||
| def post_tag_edit(specific_tag): | def post_tag_edit(specific_tag): | ||||||
|  | @ -119,9 +117,6 @@ def get_tags_json(specific_tag_name=None): | ||||||
| @session_manager.give_token | @session_manager.give_token | ||||||
| @decorators.required_fields(['tagname'], forbid_whitespace=True) | @decorators.required_fields(['tagname'], forbid_whitespace=True) | ||||||
| def post_tag_create(): | def post_tag_create(): | ||||||
|     ''' |  | ||||||
|     Create a tag. |  | ||||||
|     ''' |  | ||||||
|     easybake_string = request.form['tagname'] |     easybake_string = request.form['tagname'] | ||||||
|     user = session_manager.get(request).user |     user = session_manager.get(request).user | ||||||
|     notes = common.P.easybake(easybake_string, author=user) |     notes = common.P.easybake(easybake_string, author=user) | ||||||
|  | @ -133,9 +128,6 @@ def post_tag_create(): | ||||||
| @session_manager.give_token | @session_manager.give_token | ||||||
| @decorators.required_fields(['tagname'], forbid_whitespace=True) | @decorators.required_fields(['tagname'], forbid_whitespace=True) | ||||||
| def post_tag_delete_synonym(): | def post_tag_delete_synonym(): | ||||||
|     ''' |  | ||||||
|     Delete a synonym. |  | ||||||
|     ''' |  | ||||||
|     synonym = request.form['tagname'] |     synonym = request.form['tagname'] | ||||||
|     synonym = synonym.split('+')[-1].split('.')[-1] |     synonym = synonym.split('+')[-1].split('.')[-1] | ||||||
| 
 | 
 | ||||||
|  | @ -154,9 +146,6 @@ def post_tag_delete_synonym(): | ||||||
| @session_manager.give_token | @session_manager.give_token | ||||||
| @decorators.required_fields(['tagname'], forbid_whitespace=True) | @decorators.required_fields(['tagname'], forbid_whitespace=True) | ||||||
| def post_tag_delete(): | def post_tag_delete(): | ||||||
|     ''' |  | ||||||
|     Delete a tag. |  | ||||||
|     ''' |  | ||||||
|     tagname = request.form['tagname'] |     tagname = request.form['tagname'] | ||||||
|     tagname = tagname.split('+')[0] |     tagname = tagname.split('+')[0] | ||||||
|     if '.' in tagname: |     if '.' in tagname: | ||||||
|  |  | ||||||
|  | @ -123,4 +123,3 @@ def post_register(): | ||||||
|     session = sessions.Session(request, user) |     session = sessions.Session(request, user) | ||||||
|     session_manager.add(session) |     session_manager.add(session) | ||||||
|     return jsonify.make_json_response({}) |     return jsonify.make_json_response({}) | ||||||
| 
 |  | ||||||
|  |  | ||||||
|  | @ -2,22 +2,6 @@ var common = {}; | ||||||
| 
 | 
 | ||||||
| common.INPUT_TYPES = new Set(["INPUT", "TEXTAREA"]); | common.INPUT_TYPES = new Set(["INPUT", "TEXTAREA"]); | ||||||
| 
 | 
 | ||||||
| common.create_message_bubble = |  | ||||||
| function create_message_bubble(message_area, message_positivity, message_text, lifespan) |  | ||||||
| { |  | ||||||
|     if (lifespan === undefined) |  | ||||||
|     { |  | ||||||
|         lifespan = 8000; |  | ||||||
|     } |  | ||||||
|     var message = document.createElement("div"); |  | ||||||
|     message.className = "message_bubble " + message_positivity; |  | ||||||
|     var span = document.createElement("span"); |  | ||||||
|     span.innerHTML = message_text; |  | ||||||
|     message.appendChild(span); |  | ||||||
|     message_area.appendChild(message); |  | ||||||
|     setTimeout(function(){message_area.removeChild(message);}, lifespan); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| common._request = | common._request = | ||||||
| function _request(method, url, callback) | function _request(method, url, callback) | ||||||
| { | { | ||||||
|  | @ -58,15 +42,6 @@ function post(url, data, callback) | ||||||
|     request.send(data); |     request.send(data); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| common.delete_all_children = |  | ||||||
| function delete_all_children(element) |  | ||||||
| { |  | ||||||
|     while (element.firstChild) |  | ||||||
|     { |  | ||||||
|         element.removeChild(element.firstChild); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| common.bind_box_to_button = | common.bind_box_to_button = | ||||||
| function bind_box_to_button(box, button, ctrl_enter) | function bind_box_to_button(box, button, ctrl_enter) | ||||||
| { | { | ||||||
|  | @ -87,6 +62,31 @@ function bind_box_to_button(box, button, ctrl_enter) | ||||||
|     box.addEventListener("keyup", bound_box_hook); |     box.addEventListener("keyup", bound_box_hook); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | common.create_message_bubble = | ||||||
|  | function create_message_bubble(message_area, message_positivity, message_text, lifespan) | ||||||
|  | { | ||||||
|  |     if (lifespan === undefined) | ||||||
|  |     { | ||||||
|  |         lifespan = 8000; | ||||||
|  |     } | ||||||
|  |     var message = document.createElement("div"); | ||||||
|  |     message.className = "message_bubble " + message_positivity; | ||||||
|  |     var span = document.createElement("span"); | ||||||
|  |     span.innerHTML = message_text; | ||||||
|  |     message.appendChild(span); | ||||||
|  |     message_area.appendChild(message); | ||||||
|  |     setTimeout(function(){message_area.removeChild(message);}, lifespan); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | common.delete_all_children = | ||||||
|  | function delete_all_children(element) | ||||||
|  | { | ||||||
|  |     while (element.firstChild) | ||||||
|  |     { | ||||||
|  |         element.removeChild(element.firstChild); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
| common.entry_with_history_hook = | common.entry_with_history_hook = | ||||||
| function entry_with_history_hook(event) | function entry_with_history_hook(event) | ||||||
| { | { | ||||||
|  | @ -134,19 +134,6 @@ function html_to_element(html) | ||||||
|     return template.content.firstChild; |     return template.content.firstChild; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| common.normalize_tagname = |  | ||||||
| function normalize_tagname(tagname) |  | ||||||
| { |  | ||||||
|     tagname = tagname.trim(); |  | ||||||
|     tagname = tagname.toLocaleLowerCase(); |  | ||||||
|     tagname = tagname.split("."); |  | ||||||
|     tagname = tagname[tagname.length-1]; |  | ||||||
|     tagname = tagname.split("+")[0]; |  | ||||||
|     tagname = tagname.replace(new RegExp(" ", 'g'), "_"); |  | ||||||
|     tagname = tagname.replace(new RegExp("-", 'g'), "_"); |  | ||||||
|     return tagname; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| common.init_button_with_confirm = | common.init_button_with_confirm = | ||||||
| function init_button_with_confirm() | function init_button_with_confirm() | ||||||
| { | { | ||||||
|  | @ -231,6 +218,25 @@ function init_button_with_confirm() | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | common.normalize_tagname = | ||||||
|  | function normalize_tagname(tagname) | ||||||
|  | { | ||||||
|  |     tagname = tagname.trim(); | ||||||
|  |     tagname = tagname.toLocaleLowerCase(); | ||||||
|  |     tagname = tagname.split("."); | ||||||
|  |     tagname = tagname[tagname.length-1]; | ||||||
|  |     tagname = tagname.split("+")[0]; | ||||||
|  |     tagname = tagname.replace(new RegExp(" ", 'g'), "_"); | ||||||
|  |     tagname = tagname.replace(new RegExp("-", 'g'), "_"); | ||||||
|  |     return tagname; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | common.refresh = | ||||||
|  | function refresh() | ||||||
|  | { | ||||||
|  |     window.location.reload(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| common.on_pageload = | common.on_pageload = | ||||||
| function on_pageload() | function on_pageload() | ||||||
| { | { | ||||||
|  |  | ||||||
|  | @ -150,7 +150,7 @@ function _paste_unpaste_photo_clipboard(add_or_remove) | ||||||
|         { |         { | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|         location.reload(); |         common.refresh(); | ||||||
|     }; |     }; | ||||||
|     common.post(url, data, callback); |     common.post(url, data, callback); | ||||||
| } | } | ||||||
|  | @ -162,6 +162,7 @@ function unpaste_photo_clipboard() | ||||||
| { | { | ||||||
|     _paste_unpaste_photo_clipboard("remove_photo"); |     _paste_unpaste_photo_clipboard("remove_photo"); | ||||||
| } | } | ||||||
|  | 
 | ||||||
| var paste_photo_clipboard_button = document.createElement("button"); | var paste_photo_clipboard_button = document.createElement("button"); | ||||||
| paste_photo_clipboard_button.classList.add("green_button"); | paste_photo_clipboard_button.classList.add("green_button"); | ||||||
| paste_photo_clipboard_button.innerText = "Add to this album"; | paste_photo_clipboard_button.innerText = "Add to this album"; | ||||||
|  |  | ||||||
|  | @ -86,7 +86,7 @@ | ||||||
|             <div class="new_bookmark_card"> |             <div class="new_bookmark_card"> | ||||||
|                 <input id="new_bookmark_title" type="text" placeholder="title (optional)"> |                 <input id="new_bookmark_title" type="text" placeholder="title (optional)"> | ||||||
|                 <input id="new_bookmark_url" type="text" placeholder="url"> |                 <input id="new_bookmark_url" type="text" placeholder="url"> | ||||||
|                 <button id="new_bookmark_button" class="green_button" onclick="submit_bookmark_form()">Create</button> |                 <button id="new_bookmark_button" class="green_button" onclick="create_bookmark_form()">Create</button> | ||||||
|             </div> |             </div> | ||||||
|         </div> |         </div> | ||||||
|     </div> |     </div> | ||||||
|  | @ -94,7 +94,19 @@ | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| <script type="text/javascript"> | <script type="text/javascript"> | ||||||
| function submit_bookmark_form() | function create_bookmark(url, title) | ||||||
|  | { | ||||||
|  |     var api_url = "/bookmarks/create_bookmark"; | ||||||
|  |     var data = new FormData(); | ||||||
|  |     data.append("url", url); | ||||||
|  |     if (title) | ||||||
|  |     { | ||||||
|  |         data.append("title", title); | ||||||
|  |     } | ||||||
|  |     common.post(api_url, data, common.refresh); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function create_bookmark_form() | ||||||
| { | { | ||||||
|     var url = document.getElementById("new_bookmark_url").value.trim(); |     var url = document.getElementById("new_bookmark_url").value.trim(); | ||||||
|     var title = document.getElementById("new_bookmark_title").value.trim(); |     var title = document.getElementById("new_bookmark_title").value.trim(); | ||||||
|  | @ -105,27 +117,12 @@ function submit_bookmark_form() | ||||||
|     return create_bookmark(url, title); |     return create_bookmark(url, title); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| function create_bookmark(url, title) |  | ||||||
| { |  | ||||||
|     var api_url = "/bookmarks/create_bookmark"; |  | ||||||
|     var data = new FormData(); |  | ||||||
|     data.append("url", url); |  | ||||||
|     if (title) |  | ||||||
|     { |  | ||||||
|         data.append("title", title); |  | ||||||
|     } |  | ||||||
|     var callback = function(){location.reload();}; |  | ||||||
|     common.post(api_url, data, callback); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function delete_bookmark(bookmark_id) | function delete_bookmark(bookmark_id) | ||||||
| { | { | ||||||
|     var url = `/bookmark/${bookmark_id}/delete` |     var url = `/bookmark/${bookmark_id}/delete` | ||||||
|     var callback = function(){location.reload();}; |     common.post(url, null, common.refresh); | ||||||
|     common.post(url, null, callback); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| function on_open(ed, edit_element_map) | function on_open(ed, edit_element_map) | ||||||
| { | { | ||||||
|     ed.open(); |     ed.open(); | ||||||
|  |  | ||||||
|  | @ -291,7 +291,7 @@ function refresh_metadata_callback(response) | ||||||
|     } |     } | ||||||
|     else |     else | ||||||
|     { |     { | ||||||
|         location.reload(); |         common.refresh(); | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -81,14 +81,14 @@ button | ||||||
|                 <span>Log in</span> |                 <span>Log in</span> | ||||||
|                 <input type="text" id="login_input_username" name="username" placeholder="username" autofocus> |                 <input type="text" id="login_input_username" name="username" placeholder="username" autofocus> | ||||||
|                 <input type="password" id="login_input_password" name="password" placeholder="password"> |                 <input type="password" id="login_input_password" name="password" placeholder="password"> | ||||||
|                 <button type="submit" id="login_submit_button" onclick="submit_login()">Log in</button> |                 <button type="submit" id="login_submit_button" onclick="login_form()">Log in</button> | ||||||
|             </div> |             </div> | ||||||
|             <div id="register_form" action="/register" method="post"> |             <div id="register_form" action="/register" method="post"> | ||||||
|                 <span>Register</span> |                 <span>Register</span> | ||||||
|                 <input type="text" id="register_input_username" name="username" placeholder="username (at least {{min_username_length}})"> |                 <input type="text" id="register_input_username" name="username" placeholder="username (at least {{min_username_length}})"> | ||||||
|                 <input type="password" id="register_input_password_1" name="password_1" placeholder="password (at least {{min_password_length}})"> |                 <input type="password" id="register_input_password_1" name="password_1" placeholder="password (at least {{min_password_length}})"> | ||||||
|                 <input type="password" id="register_input_password_2" name="password_2" placeholder="password again"> |                 <input type="password" id="register_input_password_2" name="password_2" placeholder="password again"> | ||||||
|                 <button type="submit" id="register_input_button" onclick="submit_register()">Register</button> |                 <button type="submit" id="register_input_button" onclick="register_form()">Register</button> | ||||||
|             </div> |             </div> | ||||||
|         </div> |         </div> | ||||||
|         <div id="message_area"> |         <div id="message_area"> | ||||||
|  | @ -114,44 +114,55 @@ common.bind_box_to_button(register_input_password_2, register_input_button); | ||||||
| 
 | 
 | ||||||
| var message_area = document.getElementById("message_area"); | var message_area = document.getElementById("message_area"); | ||||||
| 
 | 
 | ||||||
| function submit_login() | function login(username, password, callback) | ||||||
|  | { | ||||||
|  |     var url = "/login"; | ||||||
|  |     data = new FormData(); | ||||||
|  |     data.append("username", username); | ||||||
|  |     data.append("password", password); | ||||||
|  |     return common.post(url, data, callback); | ||||||
|  | } | ||||||
|  | function login_form() | ||||||
| { | { | ||||||
|     var username = document.getElementById("login_input_username").value; |     var username = document.getElementById("login_input_username").value; | ||||||
|     var password = document.getElementById("login_input_password").value; |     var password = document.getElementById("login_input_password").value; | ||||||
|     if (username == "" || password == "") |     if (username == "" || password == "") | ||||||
|     { |     { | ||||||
|         common.create_message_bubble(message_area, "message_negative", "Fill out the form, yo.", 8000); |         common.create_message_bubble(message_area, "message_negative", "Fill out the form, yo."); | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
|     var url = "/login"; |     return login(username, password, receive_callback) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function register(username, password_1, password_2, callback) | ||||||
|  | { | ||||||
|  |     var url = "/register"; | ||||||
|     data = new FormData(); |     data = new FormData(); | ||||||
|     data.append("username", username); |     data.append("username", username); | ||||||
|     data.append("password", password); |     data.append("password_1", password_1); | ||||||
|     return common.post(url, data, receive_callback); |     data.append("password_2", password_2); | ||||||
|  |     return common.post(url, data, callback); | ||||||
| } | } | ||||||
| function submit_register() | function register_form() | ||||||
| { | { | ||||||
|     var username = document.getElementById("register_input_username").value; |     var username = document.getElementById("register_input_username").value; | ||||||
|     var password_1 = document.getElementById("register_input_password_1").value; |     var password_1 = document.getElementById("register_input_password_1").value; | ||||||
|     var password_2 = document.getElementById("register_input_password_2").value; |     var password_2 = document.getElementById("register_input_password_2").value; | ||||||
|     if (username == "" || password_1 == "" || password_2 == "") |     if (username == "" || password_1 == "" || password_2 == "") | ||||||
|     { |     { | ||||||
|         common.create_message_bubble(message_area, "message_negative", "Fill out the form, yo.", 8000); |         common.create_message_bubble(message_area, "message_negative", "Fill out the form, yo."); | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
|     var url = "/register"; |     return register(username, password_1, password_2, receive_callback); | ||||||
|     data = new FormData(); |  | ||||||
|     data.append("username", username); |  | ||||||
|     data.append("password_1", password_1); |  | ||||||
|     data.append("password_2", password_2); |  | ||||||
|     return common.post(url, data, receive_callback); |  | ||||||
| } | } | ||||||
|  | 
 | ||||||
| function receive_callback(response) | function receive_callback(response) | ||||||
| { | { | ||||||
|     response = response["data"]; |     response = response["data"]; | ||||||
|     if ("error_type" in response) |     if ("error_type" in response) | ||||||
|     { |     { | ||||||
|         common.create_message_bubble(message_area, "message_negative", response["error_message"], 8000); |         common.create_message_bubble(message_area, "message_negative", response["error_message"]); | ||||||
|  |         return; | ||||||
|     } |     } | ||||||
|     else |     else | ||||||
|     { |     { | ||||||
|  |  | ||||||
|  | @ -164,7 +164,7 @@ | ||||||
|         <ul id="this_tags"> |         <ul id="this_tags"> | ||||||
|             <li> |             <li> | ||||||
|                 <input id="add_tag_textbox" type="text" list="tag_autocomplete_datalist" autofocus> |                 <input id="add_tag_textbox" type="text" list="tag_autocomplete_datalist" autofocus> | ||||||
|                 <button id="add_tag_button" class="green_button" onclick="submit_tag(receive_callback);">add</button> |                 <button id="add_tag_button" class="green_button" onclick="add_photo_tag_form('{{photo.id}}');">add</button> | ||||||
|             </li> |             </li> | ||||||
|             {% set tags = photo.get_tags()|sort_tags %} |             {% set tags = photo.get_tags()|sort_tags %} | ||||||
|             {% for tag in tags %} |             {% for tag in tags %} | ||||||
|  | @ -172,7 +172,7 @@ | ||||||
|                 {{tag_object.tag_object(tag, with_alt_description=True)}}<!-- |                 {{tag_object.tag_object(tag, with_alt_description=True)}}<!-- | ||||||
|                 --><button |                 --><button | ||||||
|                 class="remove_tag_button red_button" |                 class="remove_tag_button red_button" | ||||||
|                 onclick="remove_photo_tag('{{photo.id}}', '{{tag.name}}', receive_callback);"> |                 onclick="remove_photo_tag_form('{{photo.id}}', '{{tag.name}}');"> | ||||||
|                 </button> |                 </button> | ||||||
|             </li> |             </li> | ||||||
|             {% endfor %} |             {% endfor %} | ||||||
|  | @ -256,37 +256,49 @@ | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| <script type="text/javascript"> | <script type="text/javascript"> | ||||||
| var content_body = document.getElementById('content_body'); |  | ||||||
| var add_tag_box = document.getElementById('add_tag_textbox'); | var add_tag_box = document.getElementById('add_tag_textbox'); | ||||||
| var add_tag_button = document.getElementById('add_tag_button'); | var add_tag_button = document.getElementById('add_tag_button'); | ||||||
| var message_area = document.getElementById('message_area'); |  | ||||||
| add_tag_box.addEventListener("keyup", common.entry_with_history_hook); | add_tag_box.addEventListener("keyup", common.entry_with_history_hook); | ||||||
| common.bind_box_to_button(add_tag_box, add_tag_button, false); | common.bind_box_to_button(add_tag_box, add_tag_button, false); | ||||||
| 
 | 
 | ||||||
| photo_img_holder = document.getElementById("photo_img_holder"); | var message_area = document.getElementById('message_area'); | ||||||
| photo_img = document.getElementById("photo_img"); |  | ||||||
| 
 | 
 | ||||||
| function add_photo_tag(photoid, tagname, callback) | function add_photo_tag(photo_id, tagname, callback) | ||||||
| { | { | ||||||
|     if (tagname === ""){return} |     var url = `/photo/${photoid}/add_tag`; | ||||||
|     var url = "/photo/" + photoid + "/add_tag"; |  | ||||||
|     var data = new FormData(); |     var data = new FormData(); | ||||||
|     data.append("tagname", tagname); |     data.append("tagname", tagname); | ||||||
|     return common.post(url, data, callback); |     return common.post(url, data, callback); | ||||||
| } | } | ||||||
|  | function add_photo_tag_form(photo_id) | ||||||
|  | { | ||||||
|  |     var tagname = document.getElementById("add_tag_textbox").value; | ||||||
|  |     if (tagname == "") | ||||||
|  |     { | ||||||
|  |         return; | ||||||
|  |     } | ||||||
|  |     var ret = add_photo_tag('{{photo.id}}', tagname, receive_callback); | ||||||
|  |     add_tag_box.value = ""; | ||||||
|  |     return ret; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| function remove_photo_tag(photoid, tagname, callback) | function remove_photo_tag(photoid, tagname, callback) | ||||||
| { | { | ||||||
|     if (tagname === ""){return} |  | ||||||
|     var url = "/photo/" + photoid + "/remove_tag"; |     var url = "/photo/" + photoid + "/remove_tag"; | ||||||
|     var data = new FormData(); |     var data = new FormData(); | ||||||
|     data.append("tagname", tagname); |     data.append("tagname", tagname); | ||||||
|     return common.post(url, data, callback); |     return common.post(url, data, callback); | ||||||
| } | } | ||||||
| function submit_tag(callback) | function remove_photo_tag_form(photo_id, tagname) | ||||||
| { | { | ||||||
|     add_photo_tag('{{photo.id}}', add_tag_box.value, callback); |     var tagname = document.getElementById("add_tag_textbox").value; | ||||||
|     add_tag_box.value = ""; |     if (tagname == "") | ||||||
|  |     { | ||||||
|  |         return; | ||||||
|     } |     } | ||||||
|  |     return remove_photo_tag(photo_id, tagname, receive_callback); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| function receive_callback(response) | function receive_callback(response) | ||||||
| { | { | ||||||
|     var message_text; |     var message_text; | ||||||
|  | @ -317,20 +329,19 @@ function receive_callback(response) | ||||||
|     common.create_message_bubble(message_area, message_positivity, message_text, 8000); |     common.create_message_bubble(message_area, message_positivity, message_text, 8000); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| function refresh_metadata(photoid) | function refresh_metadata(photo_id) | ||||||
| { | { | ||||||
|     var url= "/photo/" + photoid + "/refresh_metadata"; |     var url= `/photo/${photo_id}/refresh_metadata`; | ||||||
|     var data = new FormData(); |     var data = new FormData(); | ||||||
|     var callback = function(){location.reload();}; |     common.post(url, data, common.refresh); | ||||||
|     common.post(url, data, callback); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| var ZOOM_BG_URL = "url('{{photo|file_link}}')"; | var ZOOM_BG_URL = "url('{{photo|file_link}}')"; | ||||||
| function enable_hoverzoom(event) | function enable_hoverzoom(event) | ||||||
| { | { | ||||||
|     //console.log("enable zoom"); |     //console.log("enable zoom"); | ||||||
|     photo_img_holder = document.getElementById("photo_img_holder"); |     var photo_img_holder = document.getElementById("photo_img_holder"); | ||||||
|     photo_img = document.getElementById("photo_img"); |     var photo_img = document.getElementById("photo_img"); | ||||||
|     if ( |     if ( | ||||||
|         photo_img.naturalWidth < photo_img_holder.offsetWidth && |         photo_img.naturalWidth < photo_img_holder.offsetWidth && | ||||||
|         photo_img.naturalHeight < photo_img_holder.offsetHeight |         photo_img.naturalHeight < photo_img_holder.offsetHeight | ||||||
|  | @ -344,21 +355,23 @@ function enable_hoverzoom(event) | ||||||
|     photo_img_holder.style.backgroundImage = ZOOM_BG_URL; |     photo_img_holder.style.backgroundImage = ZOOM_BG_URL; | ||||||
|     photo_img_holder.onmousemove = move_hoverzoom; |     photo_img_holder.onmousemove = move_hoverzoom; | ||||||
|     move_hoverzoom(event) |     move_hoverzoom(event) | ||||||
|     //setTimeout(function(){img_holder.onclick = toggle_hoverzoom;}, 100); |  | ||||||
|     return true; |     return true; | ||||||
| } | } | ||||||
| function disable_hoverzoom() | function disable_hoverzoom() | ||||||
| { | { | ||||||
|     //console.log("disable zoom"); |     //console.log("disable zoom"); | ||||||
|  |     var photo_img_holder = document.getElementById("photo_img_holder"); | ||||||
|  |     var photo_img = document.getElementById("photo_img"); | ||||||
|  | 
 | ||||||
|     photo_img.style.opacity = "100"; |     photo_img.style.opacity = "100"; | ||||||
|     photo_img_holder.style.cursor = ""; |     photo_img_holder.style.cursor = ""; | ||||||
|     photo_img.style.display = ""; |     photo_img.style.display = ""; | ||||||
|     photo_img_holder.style.backgroundImage = "none"; |     photo_img_holder.style.backgroundImage = "none"; | ||||||
|     photo_img_holder.onmousemove = null; |     photo_img_holder.onmousemove = null; | ||||||
|     //photo_img_holder.onclick = null; |  | ||||||
| } | } | ||||||
| function toggle_hoverzoom(event) | function toggle_hoverzoom(event) | ||||||
| { | { | ||||||
|  |     var photo_img = document.getElementById("photo_img"); | ||||||
|     if (photo_img.style.opacity === "0") |     if (photo_img.style.opacity === "0") | ||||||
|     { |     { | ||||||
|         disable_hoverzoom(); |         disable_hoverzoom(); | ||||||
|  | @ -367,6 +380,7 @@ function toggle_hoverzoom(event) | ||||||
|     { |     { | ||||||
|         enable_hoverzoom(event); |         enable_hoverzoom(event); | ||||||
|     } |     } | ||||||
|  |     var content_body = document.getElementById('content_body'); | ||||||
|     if (getComputedStyle(content_body).flexDirection != "column-reverse") |     if (getComputedStyle(content_body).flexDirection != "column-reverse") | ||||||
|     { |     { | ||||||
|         add_tag_box.focus(); |         add_tag_box.focus(); | ||||||
|  | @ -375,6 +389,8 @@ function toggle_hoverzoom(event) | ||||||
| 
 | 
 | ||||||
| function move_hoverzoom(event) | function move_hoverzoom(event) | ||||||
| { | { | ||||||
|  |     var photo_img_holder = document.getElementById("photo_img_holder"); | ||||||
|  |     var photo_img = document.getElementById("photo_img"); | ||||||
|     var x; |     var x; | ||||||
|     var y; |     var y; | ||||||
| 
 | 
 | ||||||
|  | @ -394,7 +410,6 @@ function move_hoverzoom(event) | ||||||
|         mouse_x -= photo_img_holder.offsetLeft; |         mouse_x -= photo_img_holder.offsetLeft; | ||||||
|         mouse_y -= photo_img_holder.offsetTop; |         mouse_y -= photo_img_holder.offsetTop; | ||||||
|     } |     } | ||||||
|     //console.log(mouse_x); |  | ||||||
| 
 | 
 | ||||||
|     /* |     /* | ||||||
|     Adding 5% to perceived position gives us a bit of padding around the image, |     Adding 5% to perceived position gives us a bit of padding around the image, | ||||||
|  |  | ||||||
|  | @ -33,12 +33,17 @@ body, .nice_link | ||||||
| { | { | ||||||
|     background-color: #ffffd4; |     background-color: #ffffd4; | ||||||
| } | } | ||||||
|  | #motd | ||||||
|  | { | ||||||
|  |     width: 50%; | ||||||
|  |     text-align: center; | ||||||
|  | } | ||||||
| </style> | </style> | ||||||
| </head> | </head> | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| <body> | <body> | ||||||
|     <span>{{motd}}</span> |     <span id="motd">{{motd}}</span> | ||||||
|     <a class="nice_link" href="/search">Search</a> |     <a class="nice_link" href="/search">Search</a> | ||||||
|     <a class="nice_link" href="/tags">Browse tags</a> |     <a class="nice_link" href="/tags">Browse tags</a> | ||||||
|     <a class="nice_link" href="/albums">Browse albums</a> |     <a class="nice_link" href="/albums">Browse albums</a> | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue