From 3d8c87579998a7636783c68a526e9fa4cdb5309e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nils=20Norman=20Hauk=C3=A5s?= Date: Sun, 24 Jan 2016 21:08:26 +0100 Subject: [PATCH] started work on listening to multiple iframes. --- src/services/webpage.service.ts | 57 +++++++++++++++++++-------------- 1 file changed, 33 insertions(+), 24 deletions(-) diff --git a/src/services/webpage.service.ts b/src/services/webpage.service.ts index 8a001dd..2f99ffa 100644 --- a/src/services/webpage.service.ts +++ b/src/services/webpage.service.ts @@ -16,8 +16,6 @@ module tagIt { // we need to remember what the currently selected word was tagStorageService: TagStorageService; savedSelection: Object; - iframeDocument: Document; - iframeWindow: Window; /* @ngInject */ constructor($log: ng.ILogService, TagStorageService: TagStorageService) { @@ -31,25 +29,36 @@ module tagIt { wireUpListener(callbackOnSelectFunc: (result: Object) => void, callbackOnDeSelectFunc: () => void) { var that = this; - var iframe = parent.document.getElementById('tagit-body'); - this.iframeDocument = iframe.contentDocument; - this.iframeWindow = iframe.contentWindow; - this.iframeDocument.addEventListener('click', (evt: any) => { - if (!this.iframeDocument.hasFocus()) { - return true; - } - else if (wasRemoveTagButtonClicked(evt)) { - this.$log.debug('remove tag button was clicked'); - removeTagFromWebpage(evt); - this.tagStorageService.deleteTagById(evt.target.parentElement.id); - } - else if (this.findSelectedText()) { - this.updateSavedSelection(); - callbackOnSelectFunc(joinLongWords(this.findSelectedText())); - } else { - callbackOnDeSelectFunc(); - } - }, false); + var listOfFramesToListenTo: any[] = []; + if ($('#tagit-body').find('frameset').length > 0) { + $('#tagit-body').find('frame').each((index, elem) => { + listOfFramesToListenTo.push(elem); + }); + } else { + listOfFramesToListenTo.push(parent.document.getElementById('tagit-body')); + } + + _.map(listOfFramesToListenTo, (frame: HTMLIFrameElement) => { + frame.contentDocument.addEventListener('click', (evt: Event) => { + var documentThatWasClicked = evt.srcElement.ownerDocument; + if (!documentThatWasClicked.hasFocus()) { + return true; + } + else if (wasRemoveTagButtonClicked(evt)) { + this.$log.debug('remove tag button was clicked'); + removeTagFromWebpage(evt); + var elementClicked = evt.target; + this.tagStorageService.deleteTagById(elementClicked.parentElement.id); + } + else if (this.findSelectedText()) { + this.updateSavedSelection(); + callbackOnSelectFunc(joinLongWords(this.findSelectedText())); + } else { + callbackOnDeSelectFunc(); + } + }, false); + }); + function joinLongWords(possiblyLongWord: string) { return possiblyLongWord.trim().split(" ").join("_"); } @@ -64,8 +73,8 @@ module tagIt { } } - findSelectedText() { - var selectedText = this.iframeDocument.getSelection().toString(); + findSelectedText(evt: Event) { + var selectedText = evt.srcElement.ownerDocument.getSelection().toString(); if (selectedText) { this.$log.debug('text that was selected: ' + selectedText); return selectedText; @@ -110,7 +119,7 @@ module tagIt { this.$log.debug(errorMsg); this.$log.debug("Couldn't load: " + tagToLoad.sense.word); this.$log.debug(e); - return false; + return false; } })