From 98b1e1b3293b8cfadd2f002059fbf3a592f7ba25 Mon Sep 17 00:00:00 2001 From: Ohgyun Ahn Date: Fri, 9 Jan 2015 22:56:43 +0900 Subject: [PATCH 1/8] =?UTF-8?q?=EC=9A=94=EC=B2=AD=20=EC=A3=BC=EC=86=8C=20?= =?UTF-8?q?=ED=8A=B8=EB=9E=98=ED=82=B9=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/coffee/background/analyticsTracker.coffee | 7 +++++-- src/coffee/common/analytics.coffee | 11 +++++++++-- src/manifest.json | 2 +- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/coffee/background/analyticsTracker.coffee b/src/coffee/background/analyticsTracker.coffee index 0868520..4cd4b1d 100644 --- a/src/coffee/background/analyticsTracker.coffee +++ b/src/coffee/background/analyticsTracker.coffee @@ -32,8 +32,10 @@ # 이벤트를 전송한다. # @param {String} eventString 이벤트 문자열 '카테고리:액션:레이블' - track = (eventString) -> + # @param {String} [referrer] 이벤트가 발생한 페이지 URL + track = (eventString, referrer = '') -> [category, action, label] = eventString.split(':') + @ga 'set', 'referrer', referrer @ga 'send', 'event', category, action, label, useBeacon: true $$storage.get('clientId') @@ -45,4 +47,5 @@ .then (clientId) -> startTracking clientId - whenTrackingRequested track + whenTrackingRequested (data) -> + track data.eventString, data.referrer diff --git a/src/coffee/common/analytics.coffee b/src/coffee/common/analytics.coffee index 4e2280e..322085c 100644 --- a/src/coffee/common/analytics.coffee +++ b/src/coffee/common/analytics.coffee @@ -7,13 +7,20 @@ - `$$analytics.track(eventString)`로 직접 호출할 수 있다. ### @define 'analytics', ($$message) -> + _referer = location.href + # 이벤트 정보를 백그라운드로 전송한다. # @param {String} eventString 이벤트 문자열 '카테고리:액션:레이블' sendTrackingRequested = $$message.createSenderToExtension 'A:trackingRequested' $(document).on 'mousedown', '[data-analytics-event]', (e) -> $target = $(e.currentTarget) - sendTrackingRequested($target.attr('data-analytics-event')) + sendTrackingRequested + eventString: $target.attr('data-analytics-event') + referrer: _referer @exports = - track: sendTrackingRequested \ No newline at end of file + track: (eventString) -> + sendTrackingRequested + eventString: eventString + referrer: _referer \ No newline at end of file diff --git a/src/manifest.json b/src/manifest.json index 9b6e588..3d54643 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 2, "name": "네이버 영어사전 (Naver English Dictionary)", - "version": "3.0.0", + "version": "3.0.1", "description": "영어 단어의 뜻과 예문을 쉽게 찾을 수 있습니다.", "icons": { "16": "img/icon16.png", From 002f5be32d48b97678bef257b89c11942e7ae40a Mon Sep 17 00:00:00 2001 From: Ohgyun Ahn Date: Fri, 9 Jan 2015 23:22:27 +0900 Subject: [PATCH 2/8] =?UTF-8?q?=EA=B2=80=EC=83=89=20=ED=82=A4=EC=9B=8C?= =?UTF-8?q?=EB=93=9C=EC=97=90=20=EB=8C=80=ED=95=9C=20=EB=A1=9C=EA=B7=B8=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/coffee/background/analyticsTracker.coffee | 11 ++++++---- src/coffee/common/analytics.coffee | 22 +++++++++++++------ src/coffee/content/actionWatcher.coffee | 2 +- src/coffee/content/viewer.coffee | 7 +++++- src/coffee/content/viewerManager.coffee | 2 +- src/coffee/popup/popup.coffee | 2 +- 6 files changed, 31 insertions(+), 15 deletions(-) diff --git a/src/coffee/background/analyticsTracker.coffee b/src/coffee/background/analyticsTracker.coffee index 4cd4b1d..39fd2e3 100644 --- a/src/coffee/background/analyticsTracker.coffee +++ b/src/coffee/background/analyticsTracker.coffee @@ -6,7 +6,8 @@ ### @define 'analyticsTracker', ($$constant, $$uuid, $$storage, $$message) -> - whenTrackingRequested = $$message.createListenerToExtension 'A:trackingRequested' + whenEventTrackingRequested = $$message.createListenerToExtension 'A:eventTrackingRequested' + whenPageTrackingRequested = $$message.createListenerToExtension 'A:pageTrackingRequested' startTracking = (clientId) -> # @ga_debug = true @@ -33,7 +34,7 @@ # 이벤트를 전송한다. # @param {String} eventString 이벤트 문자열 '카테고리:액션:레이블' # @param {String} [referrer] 이벤트가 발생한 페이지 URL - track = (eventString, referrer = '') -> + trackEvent = (eventString, referrer = '') -> [category, action, label] = eventString.split(':') @ga 'set', 'referrer', referrer @ga 'send', 'event', category, action, label, useBeacon: true @@ -47,5 +48,7 @@ .then (clientId) -> startTracking clientId - whenTrackingRequested (data) -> - track data.eventString, data.referrer + whenEventTrackingRequested (data) -> + trackEvent data.eventString, data.referrer + whenPageTrackingRequested (pageUrl) -> + @ga 'send', 'pageview', pageUrl, useBeacon: true diff --git a/src/coffee/common/analytics.coffee b/src/coffee/common/analytics.coffee index 322085c..aaeaa24 100644 --- a/src/coffee/common/analytics.coffee +++ b/src/coffee/common/analytics.coffee @@ -4,23 +4,31 @@ - 스크립트를 추가하면 해당 페이지 뷰 코드를 전달한다. - 지표를 수집하고 싶은 버튼 엘리먼트에 `data-analytics-event="category:action:label"` 속성을 추가하면, 클릭 시 지표를 수집한다. -- `$$analytics.track(eventString)`로 직접 호출할 수 있다. +- `$$analytics.trackEvent(eventString)`로 직접 호출할 수 있다. ### @define 'analytics', ($$message) -> _referer = location.href # 이벤트 정보를 백그라운드로 전송한다. - # @param {String} eventString 이벤트 문자열 '카테고리:액션:레이블' - sendTrackingRequested = $$message.createSenderToExtension 'A:trackingRequested' + # @param {Object} data + # @param {String} data.eventString 이벤트 문자열 '카테고리:액션:레이블' + # @param {String} data.referrer 요청이 발생한 페이지 URL + sendEventTrackingRequested = $$message.createSenderToExtension 'A:eventTrackingRequested' + + # 페이지 정보를 전송한다. + # @param {String} pageUrl + sendPageTrackingRequested = $$message.createSenderToExtension 'A:pageTrackingRequested' $(document).on 'mousedown', '[data-analytics-event]', (e) -> $target = $(e.currentTarget) - sendTrackingRequested + sendEventTrackingRequested eventString: $target.attr('data-analytics-event') referrer: _referer @exports = - track: (eventString) -> - sendTrackingRequested + trackEvent: (eventString) -> + sendEventTrackingRequested eventString: eventString - referrer: _referer \ No newline at end of file + referrer: _referer + + trackPage: sendPageTrackingRequested diff --git a/src/coffee/content/actionWatcher.coffee b/src/coffee/content/actionWatcher.coffee index aec16c8..5f7b5ff 100644 --- a/src/coffee/content/actionWatcher.coffee +++ b/src/coffee/content/actionWatcher.coffee @@ -83,4 +83,4 @@ selectionText = getSelectedText() if isValidWord(selectionText) sendWordSelected selectionText - $$analytics.track("actionWatcher:trigger:#{method}") \ No newline at end of file + $$analytics.trackEvent("actionWatcher:trigger:#{method}") \ No newline at end of file diff --git a/src/coffee/content/viewer.coffee b/src/coffee/content/viewer.coffee index 1a114f2..b821962 100644 --- a/src/coffee/content/viewer.coffee +++ b/src/coffee/content/viewer.coffee @@ -1,7 +1,7 @@ ### 사전이 렌더링되는 페이지의 스크립트 ### -@define 'viewer', ($$message, $$options) -> +@define 'viewer', ($$message, $$options, $$analytics) -> #-------------------- # Functions #-------------------- @@ -65,6 +65,11 @@ # angular 범위 밖에서 호출된 것이기 때문에 apply()를 호출해줘야 한다. $scope.$apply() + # 쿼리가 있을 경우, 페이지 렌더링 결과를 보낸다. + # `query` 파라미터는 애널리틱스에서 검색어 파악을 위해 사용한다. + if data.query + $$analytics.trackPage "viewer.html?query=#{data.query.replace(/\s/g, '+')}" + window.scrollTo(0, 0); # 같은 윈도우를 재활용하므로 렌더링 이후에 스크롤을 초기화한다 sendViewerRenderered document.documentElement.scrollHeight sendViewerRendereredToWindow document.documentElement.scrollHeight diff --git a/src/coffee/content/viewerManager.coffee b/src/coffee/content/viewerManager.coffee index b4178f0..29c57eb 100644 --- a/src/coffee/content/viewerManager.coffee +++ b/src/coffee/content/viewerManager.coffee @@ -56,7 +56,7 @@ _$viewer.attr 'style', "height: #{properHeight}px !important" - $$analytics.track('viewer:expand') + $$analytics.trackEvent('viewer:expand') # 뷰어 iframe 위에서 스크롤 시, 문서의 스크롤을 막는다. preventDocumentWheelEvent = -> diff --git a/src/coffee/popup/popup.coffee b/src/coffee/popup/popup.coffee index fe5b9d0..dbe917e 100644 --- a/src/coffee/popup/popup.coffee +++ b/src/coffee/popup/popup.coffee @@ -47,7 +47,7 @@ $('.viewer-wrap').show() sendQuerySubmitted $scope.query - $$analytics.track('popup:search') + $$analytics.trackEvent('popup:search') $scope.selectQuery = ($event) -> $event.target.select() From 8467abf72f21b989ed174ab6f920ad5de5b41b82 Mon Sep 17 00:00:00 2001 From: Ohgyun Ahn Date: Fri, 9 Jan 2015 23:27:04 +0900 Subject: [PATCH 3/8] =?UTF-8?q?=EC=BB=A8=ED=85=8D=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EB=A9=94=EB=89=B4=EB=A1=9C=EB=B6=80=ED=84=B0=20=EA=B2=80?= =?UTF-8?q?=EC=83=89=ED=95=A0=20=EC=88=98=20=EC=9E=88=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/coffee/background/background.coffee | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/coffee/background/background.coffee b/src/coffee/background/background.coffee index 376dfc2..287a94d 100644 --- a/src/coffee/background/background.coffee +++ b/src/coffee/background/background.coffee @@ -37,4 +37,11 @@ whenQuerySubmitted (word) -> $$wordSearcher.searchWord(word, sendWordSearchedToPopup) whenDicTypeToggledOnPopup (isEE) -> - $$wordSearcher.toggleDicType(isEE, sendWordSearchedToPopup) \ No newline at end of file + $$wordSearcher.toggleDicType(isEE, sendWordSearchedToPopup) + + # 컨텍스트 메뉴에 영어사전 검색을 추가한다. + chrome.contextMenus.create + title: "네이버 영어사전에서 '%s' 검색" + contexts: ["selection"] + onclick: (info) -> + $$wordSearcher.searchWord(info.selectionText, sendWordSearched) \ No newline at end of file From 27940e67ef8807b35fa190b55d452c02cd58dfb5 Mon Sep 17 00:00:00 2001 From: Ohgyun Ahn Date: Fri, 9 Jan 2015 23:32:10 +0900 Subject: [PATCH 4/8] =?UTF-8?q?=EC=95=84=EC=9D=B4=EC=BD=98=EC=9D=84=20?= =?UTF-8?q?=EC=84=A0=ED=83=9D=ED=96=88=EC=9D=84=20=EB=95=8C,=20=EC=82=AC?= =?UTF-8?q?=EC=A0=84=EC=97=90=20=EB=B0=94=EB=A1=9C=20=ED=8F=AC=EC=BB=A4?= =?UTF-8?q?=EC=8A=A4=20=EA=B0=80=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TODO.md | 11 +++++------ src/coffee/popup/popup.coffee | 6 ++++++ src/popup.html | 2 +- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/TODO.md b/TODO.md index 0da5498..0139e2f 100644 --- a/TODO.md +++ b/TODO.md @@ -1,9 +1,7 @@ ## TODO 설정 정보에 이후 개선 내용에 대한 슬라이드 추가하기 - 창이 열려있는 상태에서 렌더링 시 창 크기 변경하기 - 페이스북 페이지 임베드하기 단축키 입력 시 사전 동작하게 하기 (백그라운드로 메시지 보내기) 단어장 페이지 만들기 @@ -13,9 +11,7 @@ ## DOING -개선 내용에 대한 엑셀 파일을 설정 페이지에 추가하기 - - https://docs.google.com/spreadsheets/d/19eSjHMtyF_RsF8EYa655SPjYB8EQFplfmPA_dozfIB0/edit#gid=0 - - 앵귤러에서 선택해서 컨트롤러를 변경하는 방법에 대해 알아봐야 함 + ## Complete @@ -45,4 +41,7 @@ 더블클릭과 마우스 드래그를 명확하게 나누기 지표 코드 추가하기 사용하지 않는 파일 정리하기 -빌드 코드 정리하기 \ No newline at end of file +빌드 코드 정리하기 +개선 내용에 대한 엑셀 파일을 설정 페이지에 추가하기 + - https://docs.google.com/spreadsheets/d/19eSjHMtyF_RsF8EYa655SPjYB8EQFplfmPA_dozfIB0/edit#gid=0 + - 앵귤러에서 선택해서 컨트롤러를 변경하는 방법에 대해 알아봐야 함 \ No newline at end of file diff --git a/src/coffee/popup/popup.coffee b/src/coffee/popup/popup.coffee index dbe917e..53a5975 100644 --- a/src/coffee/popup/popup.coffee +++ b/src/coffee/popup/popup.coffee @@ -42,6 +42,9 @@ whenViewerRendered resizePopup $scope.search = -> + # 검색어가 없으면 아무 동작을 하지 않는다. + return unless $scope.query + # 검색 결과 응답이 오기 전에 iframe을 보이도록 설정한다. # 그렇지 않으면, iframe의 scrollHeight가 부모의 scrollHeight를 리턴한다. $('.viewer-wrap').show() @@ -51,3 +54,6 @@ $scope.selectQuery = ($event) -> $event.target.select() + + # 페이지가 로드되면 쿼리 엘리먼트에 포커스를 준다. + $('#query').focus() \ No newline at end of file diff --git a/src/popup.html b/src/popup.html index dba33d2..78a8feb 100644 --- a/src/popup.html +++ b/src/popup.html @@ -14,7 +14,7 @@