text: import dmenu_extended
  import sys
  
  file_prefs = dmenu_extended.path_prefs + '/internetSearch.json'
  
  class extension(dmenu_extended.dmenu):
  
    title = 'Internet search: '
    is_submenu = True
  
  
    def create_default_providers(self):
      default = {
        'providers': [
          {
            'title': 'Google',
            'url': 'https://www.google.com/search?q={searchterm}'
          },
          {
            'title': 'Wikipedia',
            'url': 'https://en.wikipedia.org/wiki/Special:Search?search={searchterm}'
          },
          {
            'title': 'Google images',
            'url': 'https://www.google.com/images?q={searchterm}'
          },
          {
            'title': 'Github',
            'url':  'https://github.com/search?q={searchterm}'
          }
        ],
        'default': 'Google'
      }
      self.save_json(file_prefs, default)
  
  
    def load_providers(self):
      providers = self.load_json(file_prefs)
      if providers == False:
        self.create_default_providers()
        providers = self.load_json(file_prefs)
  
      uptodate = False
      for provider in providers['providers']:
        if provider['url'].find('{searchterm}') != -1:
          uptodate = True
          break
  
      if not uptodate:
        print('Search providers list is out-of-date, replacing (old list saved)')
        self.save_json(file_prefs[:-5]+'_old.json', providers)
        self.create_default_providers()
        return self.load_providers()
  
      return providers
  
  
    def conduct_search(self, searchTerm, providerName=False):
      default = self.providers['default']
      primary = False
      fallback = False
  
      for provider in self.providers['providers']:
        if provider['title'] == default:
          # fallback = provider['url'].replace("%keywords%", searchTerm)
          fallback = provider['url'].format(searchterm=searchTerm)
        elif provider['title'] == providerName:
          # primary = provider['url'].replace("%keywords%", searchTerm)
          primary = provider['url'].format(searchterm=searchTerm)
  
      if primary:
        self.open_url(primary)
      else:
        self.open_url(fallback)
  
  
    def run(self, inputText):
  
      self.providers = self.load_providers()
  
      if inputText != '':
        self.conduct_search(inputText)
      else:
  
        items = []
        for provider in self.providers['providers']:
          items.append(provider['title'])
  
        item_editPrefs = self.prefs['indicator_edit'] + ' Edit search providers'
  
        items.append(item_editPrefs)
  
        provider = self.menu(items, prompt='Select provider:')
  
        if provider == item_editPrefs:
          self.open_file(file_prefs)
        elif provider == '':
          sys.exit()
        else:
          if provider not in items:
            self.conduct_search(provider)
          else:
            search = self.menu('', prompt='Enter search')
            if search == '':
              sys.exit()
            else:
              self.conduct_search(search, provider)
  