diff options
Diffstat (limited to 'app/assets/javascripts/mobile/publisher.js')
-rw-r--r-- | app/assets/javascripts/mobile/publisher.js | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/app/assets/javascripts/mobile/publisher.js b/app/assets/javascripts/mobile/publisher.js index 9bac0f0bf..b7d566452 100644 --- a/app/assets/javascripts/mobile/publisher.js +++ b/app/assets/javascripts/mobile/publisher.js @@ -48,4 +48,74 @@ $(document).ready(function(){ }); new Diaspora.MarkdownEditor("#status_message_text"); + + $(".dropdown-menu > li").bind("tap click", function(evt) { + let target = $(evt.target).closest("li"); + + // visually toggle the aspect selection + if (target.is(".radio")) { + _toggleRadio(target); + } else if (target.is(".aspect-selector")) { + // don't close the dropdown + evt.stopPropagation(); + _toggleCheckbox(target); + } + + _updateSelectedAspectIds(); + _updateButton(); + + // update the globe or lock icon + let icon = $("#visibility-icon"); + if (target.find(".text").text().trim() === Diaspora.I18n.t("stream.public")) { + icon.removeClass("entypo-lock"); + icon.addClass("entypo-globe"); + } else { + icon.removeClass("entypo-globe"); + icon.addClass("entypo-lock"); + } + }); + + function _toggleRadio(target) { + $(".dropdown-menu > li").removeClass("selected"); + target.toggleClass("selected"); + } + + function _toggleCheckbox(target) { + $(".dropdown-menu > li.radio").removeClass("selected"); + target.toggleClass("selected"); + } + + // take care of the form fields that will indicate the selected aspects + function _updateSelectedAspectIds() { + let form = $("#new_status_message"); + + // remove previous selection + form.find('input[name="aspect_ids[]"]').remove(); + + // create fields for current selection + form.find(".dropdown-menu > li.selected").each(function() { + let uid = _.uniqueId("aspect_ids_"); + let id = $(this).data("aspect_id"); + form.append('<input id="' + uid + '" name="aspect_ids[]" type="hidden" value="' + id + '">'); + }); + } + + // change class and text of the dropdown button + function _updateButton() { + let button = $(".btn.dropdown-toggle"), + selectedAspects = $(".dropdown-menu > li.selected").length, + buttonText; + + switch (selectedAspects) { + case 0: + buttonText = Diaspora.I18n.t("aspect_dropdown.select_aspects"); + break; + case 1: + buttonText = $(".dropdown-menu > li.selected .text").first().text(); + break; + default: + buttonText = Diaspora.I18n.t("aspect_dropdown.toggle", {count: selectedAspects.toString()}); + } + button.find(".text").text(buttonText); + } }); |