_t = (key) -> new Gettext().gettext(key) App.LegislationAnnotatable = makeEditableAndHighlight: (colour) -> sel = window.getSelection() if sel.rangeCount and sel.getRangeAt range = sel.getRangeAt(0) document.designMode = "on" if range sel.removeAllRanges() sel.addRange range # Use HiliteColor since some browsers apply BackColor to the whole block if !document.execCommand("HiliteColor", false, colour) document.execCommand "BackColor", false, colour document.designMode = "off" return highlight: (colour) -> if window.getSelection # IE9 and non-IE try if !document.execCommand("BackColor", false, colour) App.LegislationAnnotatable.makeEditableAndHighlight colour catch ex App.LegislationAnnotatable.makeEditableAndHighlight colour else if document.selection and document.selection.createRange # IE <= 8 case range = document.selection.createRange() range.execCommand "BackColor", false, colour return remove_highlight: -> $("[data-legislation-draft-version-id] span[style]").replaceWith(-> return $(this).contents() ) return renderAnnotationComments: (event) -> if event.offset $("#comments-box").css({ top: event.offset - $(".calc-comments").offset().top }) if App.LegislationAnnotatable.isMobile() return $.ajax method: "GET" url: "#{event.annotation_url}/annotations/#{event.annotation_id}/comments" dataType: "script" onClick: (event) -> event.preventDefault() event.stopPropagation() if App.LegislationAnnotatable.isMobile() annotation_url = $(event.target).closest(".legislation-annotatable").data("legislation-annotatable-base-url") window.location.href = "#{annotation_url}/annotations/#{$(this).data("annotation-id")}" return $("[data-annotation-id]").removeClass("current-annotation") target = $(this) parents = target.parents(".annotator-hl") parents_ids = parents.map (_, elem) -> $(elem).data("annotation-id") annotation_id = target.data("annotation-id") $("[data-annotation-id='#{annotation_id}']").addClass("current-annotation") $("#comments-box").html("") App.LegislationAllegations.show_comments() $("#comments-box").show() $.event.trigger type: "renderLegislationAnnotation" annotation_id: target.data("annotation-id") annotation_url: target.closest(".legislation-annotatable").data("legislation-annotatable-base-url") offset: target.offset()["top"] parents_ids.each (i, pid) -> $.event.trigger type: "renderLegislationAnnotation" annotation_id: pid annotation_url: target.closest(".legislation-annotatable").data("legislation-annotatable-base-url") isMobile: -> return window.innerWidth <= 652 viewerExtension: (viewer) -> viewer._onHighlightMouseover = (event) -> return customShow: (position) -> $(@element).html "" # Clean comments section and open it $("#comments-box").html "" App.LegislationAllegations.show_comments() $("#comments-box").show() annotation_url = $("[data-legislation-annotatable-base-url]").data("legislation-annotatable-base-url") $.ajax( method: "GET" url: "#{annotation_url}/annotations/new" dataType: "script").done (-> $("#new_legislation_annotation #legislation_annotation_quote").val(@annotation.quote) $("#new_legislation_annotation #legislation_annotation_ranges").val(JSON.stringify(@annotation.ranges)) $("#comments-box").css({ top: position.top - $(".calc-comments").offset().top }) unless $("[data-legislation-open-phase]").data("legislation-open-phase") == false App.LegislationAnnotatable.highlight("#7fff9a") $("#comments-box textarea").focus() $("#new_legislation_annotation").on("ajax:complete", (e, data, status, xhr) -> App.LegislationAnnotatable.app.destroy() if data.status == 200 App.LegislationAnnotatable.remove_highlight() $("#comments-box").html("").hide() $.ajax method: "GET" url: "#{annotation_url}/annotations/#{data.responseJSON.id}/comments" dataType: "script" else $(e.target).find("label").addClass("error") $("#{data.responseJSON[0]}").insertAfter($(e.target).find("textarea")) return true ) return ).bind(this) editorExtension: (editor) -> editor.show = App.LegislationAnnotatable.customShow scrollToAnchor: -> annotationsLoaded: (annotations) -> anchor = $(location).attr("hash") if anchor && anchor.startsWith("#annotation") ann_id = anchor.split("-")[-1..] checkExist = setInterval((-> if $("span[data-annotation-id='#{ann_id}']").length el = $("span[data-annotation-id='#{ann_id}']") el.addClass("current-annotation") $("#comments-box").html("") App.LegislationAllegations.show_comments() $("html,body").animate({ scrollTop: el.offset().top }) $.event.trigger type: "renderLegislationAnnotation" annotation_id: ann_id annotation_url: el.closest(".legislation-annotatable").data("legislation-annotatable-base-url") offset: el.offset()["top"] clearInterval checkExist return ), 100) propotionalWeight: (v, max) -> Math.floor(v * 5 / (max + 1)) + 1 addWeightClasses: -> annotationsLoaded: (annotations) -> return if annotations.length == 0 weights = annotations.map (ann) -> ann.weight max_weight = Math.max.apply(null, weights) last_annotation = annotations[annotations.length - 1] checkExist = setInterval((-> if $("span[data-annotation-id='#{last_annotation.id}']").length for annotation in annotations ann_weight = App.LegislationAnnotatable.propotionalWeight(annotation.weight, max_weight) el = $("span[data-annotation-id='#{annotation.id}']") el.addClass("weight-#{ann_weight}") clearInterval checkExist return ), 100) initialize: -> $(document).off("renderLegislationAnnotation").on("renderLegislationAnnotation", App.LegislationAnnotatable.renderAnnotationComments) $(document).off("click", "[data-annotation-id]").on("click", "[data-annotation-id]", App.LegislationAnnotatable.onClick) $(document).off("click", "[data-cancel-annotation]").on("click", "[data-cancel-annotation]", (e) -> e.preventDefault() $("#comments-box").html("") $("#comments-box").hide() App.LegislationAnnotatable.remove_highlight() return ) current_user_id = $("html").data("current-user-id") $(".legislation-annotatable").each -> $this = $(this) ann_type = "legislation_draft_version" ann_id = $this.data("legislation-draft-version-id") base_url = $this.data("legislation-annotatable-base-url") App.LegislationAnnotatable.app = new annotator.App() .include -> beforeAnnotationCreated: (ann) -> ann["legislation_draft_version_id"] = ann_id ann.permissions = ann.permissions || {} ann.permissions.admin = [] .include(annotator.ui.main, { element: this, viewerExtensions: [App.LegislationAnnotatable.viewerExtension], editorExtensions: [App.LegislationAnnotatable.editorExtension] }) .include(App.LegislationAnnotatable.scrollToAnchor) .include(App.LegislationAnnotatable.addWeightClasses) .include(annotator.storage.http, { prefix: base_url, urls: { search: "/annotations/search" } }) App.LegislationAnnotatable.app.start().then -> App.LegislationAnnotatable.app.ident.identity = current_user_id options = {} options["legislation_draft_version_id"] = ann_id App.LegislationAnnotatable.app.annotations.load(options)