homepage_url.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  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. def get_url(context, location, domain = None):
  8. if domain:
  9. return domain + location
  10. else:
  11. return GET_DOMAIN_URL(context) + location
  12. def get_page_link(page_name, context, domain = None, *_args, **kwargs):
  13. settings:dict = context.setter.toProperties().get('args',{})
  14. settings_length = len(settings)
  15. if settings_length == 0:
  16. return get_url(context, page_name, domain)
  17. new_args = []
  18. # 判断优化: 取长度小的遍历
  19. if PREFERENCE_LIST_LENGTH > len(settings):
  20. for name, value in settings.items():
  21. if PREFERENCE_MANAGER.has(name):
  22. if is_true(value):
  23. new_args.append(name)
  24. else:
  25. new_args.append(name + '=' + value)
  26. else:
  27. for entry in PREFERENCE_MANAGER.get_entries():
  28. if value := settings.get(entry.name, None) is not None:
  29. if is_true(value):
  30. new_args.append(entry.name)
  31. else:
  32. new_args.append(entry.name + '=' + value)
  33. if len(new_args) == 0:
  34. return get_url(context, page_name, domain)
  35. if '?' not in page_name:
  36. page_name += '?'
  37. else:
  38. page_name += '&'
  39. return get_url(context, page_name + '&'.join(new_args) , domain)
  40. @script('XamlLink')
  41. def link_script(page_name, domain=None, *_args, **kwargs):
  42. context = kwargs['context']
  43. return get_page_link(page_name, context, domain)
  44. @script('Link')
  45. def link_script(page_name, domain=None, *_args, **kwargs):
  46. context = kwargs['context']
  47. if '.json' not in page_name:
  48. page_name += '.json'
  49. return get_page_link(page_name, context, domain)