homepage_url.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. from homepagebuilder.interfaces import require, script
  2. pref_module = require('homepage_preference')
  3. PREFERENCE_MANAGER = pref_module.PreferenceManager
  4. is_true = pref_module.is_true
  5. PREFERENCE_LIST_LENGTH = PREFERENCE_MANAGER.pref_length()
  6. GET_DOMAIN_URL = require('domain').get_doamin_url
  7. @script('Link')
  8. def link_script(page_name, context, *_args, **kwargs):
  9. settings:dict = context.setter.toProperties().get('args',{})
  10. settings_length = len(settings)
  11. if '.json' not in page_name:
  12. page_name += '.json'
  13. if settings_length == 0:
  14. return GET_DOMAIN_URL(context) + page_name
  15. new_args = []
  16. # 判断优化: 取长度小的遍历
  17. if PREFERENCE_LIST_LENGTH > len(settings):
  18. for name, value in settings.items():
  19. if PREFERENCE_MANAGER.has(name):
  20. if is_true(value):
  21. new_args.append(name)
  22. else:
  23. new_args.append(name + '=' + value)
  24. else:
  25. for entry in PREFERENCE_MANAGER.get_entries():
  26. if value := settings.get(entry.name, None) is not None:
  27. if is_true(value):
  28. new_args.append(entry.name)
  29. else:
  30. new_args.append(entry.name + '=' + value)
  31. if len(new_args) == 0:
  32. return GET_DOMAIN_URL(context) + page_name
  33. if '?' not in page_name:
  34. page_name += '?'
  35. else:
  36. page_name += '&'
  37. return GET_DOMAIN_URL(context) + page_name + '&'.join(new_args)