diff --git a/omega-target-chromium-extension/omega_target_web.coffee b/omega-target-chromium-extension/omega_target_web.coffee index dc25b89..1c6dc7b 100644 --- a/omega-target-chromium-extension/omega_target_web.coffee +++ b/omega-target-chromium-extension/omega_target_web.coffee @@ -27,11 +27,11 @@ angular.module('omegaTarget', []).factory 'omegaTarget', ($q) -> isChromeUrl = (url) -> url.substr(0, 6) == 'chrome' optionsChangeCallback = [] + prefix = 'omega.local.' urlParser = document.createElement('a') omegaTarget = options: null state: (name, value) -> - prefix = 'omega.local.' if arguments.length == 1 getValue = (key) -> try JSON.parse(localStorage[prefix + key]) if Array.isArray(name) @@ -41,6 +41,13 @@ angular.module('omegaTarget', []).factory 'omegaTarget', ($q) -> else localStorage[prefix + name] = JSON.stringify(value) return $q.when(value) + lastUrl: (url) -> + name = 'web.last_url' + if url + omegaTarget.state(name, url) + url + else + try JSON.parse(localStorage[prefix + name]) addOptionsChangeCallback: (callback) -> optionsChangeCallback.push(callback) refresh: (args) -> @@ -62,14 +69,23 @@ angular.module('omegaTarget', []).factory 'omegaTarget', ($q) -> results ).then omegaTarget.refresh getMessage: chrome.i18n.getMessage.bind(chrome.i18n) - openOptions: -> + openOptions: (hash) -> d = $q['defer']() options_url = chrome.extension.getURL('options.html') chrome.tabs.query url: options_url, (tabs) -> - if tabs.length > 0 - chrome.tabs.update(tabs[0].id, {active: true}) + url = if hash + urlParser.href = tabs[0]?.url || options_url + urlParser.hash = hash + urlParser.href else - chrome.tabs.create({url: options_url}) + options_url + if tabs.length > 0 + props = {active: true} + if hash + props.url = url + chrome.tabs.update(tabs[0].id, props) + else + chrome.tabs.create({url: url}) d.resolve() return d.promise applyProfile: (name) -> diff --git a/omega-web/src/coffee/popup.coffee b/omega-web/src/coffee/popup.coffee index dfcddd4..19ef0c9 100644 --- a/omega-web/src/coffee/popup.coffee +++ b/omega-web/src/coffee/popup.coffee @@ -29,9 +29,12 @@ module.controller 'PopupCtrl', ($scope, $window, $q, omegaTarget, 'glyphicon-ok' else profileIcons[profile.profileType] - $scope.openOptions = -> - omegaTarget.openOptions().then -> + $scope.openOptions = (hash) -> + omegaTarget.openOptions(hash).then -> $window.close() + $scope.openConditionHelp = -> + pname = encodeURIComponent($scope.currentProfileName) + $scope.openOptions("#/profile/#{pname}?help=condition") $scope.applyProfile = (profile) -> omegaTarget.applyProfile(profile.name).then -> refresh() diff --git a/omega-web/src/less/popup.less b/omega-web/src/less/popup.less index b73b5f1..14f6262 100644 --- a/omega-web/src/less/popup.less +++ b/omega-web/src/less/popup.less @@ -6,6 +6,10 @@ /* popup */ +.clear-padding { + padding: 0 !important; +} + body { margin: 0; padding: 0; diff --git a/omega-web/src/omega/app.coffee b/omega-web/src/omega/app.coffee index 201d3ba..cc63941 100644 --- a/omega-web/src/omega/app.coffee +++ b/omega-web/src/omega/app.coffee @@ -24,6 +24,11 @@ angular.module('omega').config ($stateProvider, $urlRouterProvider, $animateProvider.classNameFilter(/angular-animate/) $urlRouterProvider.otherwise '/ui' + $urlRouterProvider.otherwise ($injector, $location) -> + if $location.path() == '' or $location.path() == '/' + $injector.get('omegaTarget').lastUrl() + else + '/ui' $stateProvider .state('ui', diff --git a/omega-web/src/omega/controllers/master.coffee b/omega-web/src/omega/controllers/master.coffee index ab48daa..4f01f9c 100644 --- a/omega-web/src/omega/controllers/master.coffee +++ b/omega-web/src/omega/controllers/master.coffee @@ -184,7 +184,7 @@ angular.module('omega').controller 'MasterCtrl', ($scope, $rootScope, $window, event.preventDefault() $rootScope.$on '$stateChangeSuccess', -> - omegaTarget.state('web.last_url', $location.url()) + omegaTarget.lastUrl($location.url()) $window.onbeforeunload = -> if $rootScope.optionsDirty @@ -218,6 +218,3 @@ angular.module('omega').controller 'MasterCtrl', ($scope, $rootScope, $window, "options_downloadInterval_" + (if interval < 0 then "never" else interval) omegaTarget.refresh() - - omegaTarget.state('web.last_url').then (lastUrl) -> - $location.url(lastUrl) if lastUrl? diff --git a/omega-web/src/omega/controllers/switch_profile.coffee b/omega-web/src/omega/controllers/switch_profile.coffee index 4fbc79f..0044034 100644 --- a/omega-web/src/omega/controllers/switch_profile.coffee +++ b/omega-web/src/omega/controllers/switch_profile.coffee @@ -1,5 +1,7 @@ -angular.module('omega').controller 'SwitchProfileCtrl', ($scope, $modal, - profileIcons, getAttachedName) -> +angular.module('omega').controller 'SwitchProfileCtrl', ($scope, $location, + $modal, profileIcons, getAttachedName) -> + + $scope.showConditionHelp = ($location.search().help == 'condition') $scope.basicConditionTypes = [ { diff --git a/omega-web/src/partials/profile_switch.jade b/omega-web/src/partials/profile_switch.jade index d07a6fb..d493a94 100644 --- a/omega-web/src/partials/profile_switch.jade +++ b/omega-web/src/partials/profile_switch.jade @@ -25,7 +25,7 @@ div(ng-controller='SwitchProfileCtrl') | {{'options_conditionType' | tr}} = ' ' button.btn.btn-link.btn-sm.clear-padding(title='{{"options_showConditionTypeHelp" | tr}}' - ng-click='showConditionHelp = !showConditionHelp' ng-init='showConditionHelp = false') + ng-click='showConditionHelp = !showConditionHelp') span.glyphicon.glyphicon-question-sign th {{'options_conditionDetails' | tr}} th {{'options_resultProfile' | tr}} diff --git a/omega-web/src/popup.jade b/omega-web/src/popup.jade index da1fd36..34e712e 100644 --- a/omega-web/src/popup.jade +++ b/omega-web/src/popup.jade @@ -99,13 +99,19 @@ html(lang='en' ng-app='omegaPopup' ng-controller='PopupCtrl' ng-csp) = ' ' | {{currentProfileName | dispName}} div.form-group - label {{'options_conditionType' | tr}} + label + | {{'options_conditionType' | tr}} + = ' ' + button.btn.btn-link.btn-sm.clear-padding(type='button' ng-click='openConditionHelp()') + | {{"options_showConditionTypeHelp" | tr}} + = ' ' + span.glyphicon.glyphicon-new-window select.form-control(ng-model='rule.condition.conditionType') - option(value='HostWildcardCondition') {{'condition_hostWildcard' | tr}} - option(value='HostRegexCondition') {{'condition_hostRegex' | tr}} - option(value='UrlWildcardCondition') {{'condition_urlWildcard' | tr}} - option(value='UrlRegexCondition') {{'condition_urlRegex' | tr}} - option(value='KeywordCondition') {{'condition_keyword' | tr}} + option(value='HostWildcardCondition') {{'condition_HostWildcardCondition' | tr}} + option(value='HostRegexCondition') {{'condition_HostRegexCondition' | tr}} + option(value='UrlWildcardCondition') {{'condition_UrlWildcardCondition' | tr}} + option(value='UrlRegexCondition') {{'condition_UrlRegexCondition' | tr}} + option(value='KeywordCondition') {{'condition_KeywordCondition' | tr}} div.form-group label {{'options_conditionDetails' | tr}} input.form-control.condition-details(type='text' required ng-model='rule.condition.pattern')