Browse Source

Improve condition form in popup for IP literals. Fix #301.

FelisCatus 10 năm trước cách đây
mục cha
commit
67bd3fc7f8
2 tập tin đã thay đổi với 35 bổ sung12 xóa
  1. 34 11
      omega-web/src/coffee/popup.coffee
  2. 1 1
      omega-web/src/popup.jade

+ 34 - 11
omega-web/src/coffee/popup.coffee

@@ -263,19 +263,42 @@ module.controller 'PopupCtrl', ($scope, $window, $q, omegaTarget,
     omegaTarget.state('currentProfileCanAddRule')
   ).then (value) ->
     $scope.currentProfileCanAddRule = value
-    if $scope.currentProfileCanAddRule
-      currentDomain = $scope.currentDomain
-      currentDomainEscaped = currentDomain.replace('.', '\\.')
+
+  $scope.prepareConditionForm = ->
+    currentDomain = $scope.currentDomain
+    currentDomainEscaped = currentDomain.replace(/\./g, '\\.')
+    domainLooksLikeIp = false
+    if currentDomain.indexOf(':') >= 0
+      domainLooksLikeIp = true
+      if currentDomain[0] != '['
+        currentDomain = '[' + currentDomain + ']'
+        currentDomainEscaped = currentDomain.replace(/\./g, '\\.')
+          .replace(/\[/g, '\\[').replace(/\]/g, '\\]')
+    else if currentDomain[currentDomain.length - 1] >= 0
+      domainLooksLikeIp = true
+
+    if domainLooksLikeIp
+      conditionSuggestion =
+        'HostWildcardCondition': currentDomain
+        'HostRegexCondition': '^' + currentDomainEscaped + '$'
+        'UrlWildcardCondition': '*://' + currentDomain + '/*'
+        'UrlRegexCondition': '://' + currentDomainEscaped + '(:\\d+)?/'
+        'KeywordCondition': currentDomain
+    else
       conditionSuggestion =
         'HostWildcardCondition': '*.' + currentDomain
         'HostRegexCondition': '(^|\\.)' + currentDomainEscaped + '$'
         'UrlWildcardCondition': '*://*.' + currentDomain + '/*'
-        'UrlRegexCondition': '://([^/.]+\\.)*' + currentDomainEscaped + '/'
+        'UrlRegexCondition':
+          '://([^/.]+\\.)*' + currentDomainEscaped + '(:\\d+)?/'
         'KeywordCondition': currentDomain
-      $scope.rule =
-        condition:
-          conditionType: 'HostWildcardCondition'
-          pattern: conditionSuggestion['HostWildcardCondition']
-        profileName: preselectedProfileNameForCondition
-      $scope.$watch 'rule.condition.conditionType', (type) ->
-        $scope.rule.condition.pattern = conditionSuggestion[type]
+
+    $scope.rule =
+      condition:
+        conditionType: 'HostWildcardCondition'
+        pattern: conditionSuggestion['HostWildcardCondition']
+      profileName: preselectedProfileNameForCondition
+    $scope.$watch 'rule.condition.conditionType', (type) ->
+      $scope.rule.condition.pattern = conditionSuggestion[type]
+
+    $scope.showConditionForm = true

+ 1 - 1
omega-web/src/popup.jade

@@ -59,7 +59,7 @@ html(lang='en' ng-app='omegaPopup' ng-controller='PopupCtrl' ng-csp)
               span(omega-profile-inline='p' options='availableProfiles' disp-name='dispNameFilter')
       li.divider(ng-show='!!currentDomain && validResultProfiles.length')
       li(ng-show='!!currentProfileCanAddRule')
-        a(href='#' role='button' ng-click='showConditionForm = true' data-shortcut='addRule')
+        a(href='#' role='button' ng-click='prepareConditionForm()' data-shortcut='addRule')
           span.glyphicon.glyphicon-plus
           = ' '
           span {{'popup_addCondition' | tr}}