Cityvibe Enhancer

Increases the image sizes of slideshows and main profile image and adds keybindings for slideshow and escort navigation.

От 19.05.2016. Виж последната версия.

  1. // ==UserScript==
  2. // @name Cityvibe Enhancer
  3. // @namespace cityvibe_enhancer
  4. // @homepage https://sleazyfork.org/scripts/15481
  5. // @version 0.4
  6. // @description Increases the image sizes of slideshows and main profile image and adds keybindings for slideshow and escort navigation.
  7. // @author m435tr0d
  8. // @match http://*.cityvibe.com/*/Premium/*/
  9. // @match http://*.cityvibe.com/*/Premium/*/*/*
  10. // @match http://*.cityvibe.com/*/Escorts/*/*
  11. // @exclude http://*.cityvibe.com/*/Premium/*/Classic/
  12. // @grant none
  13. // @run-at document-end
  14. // ==/UserScript==
  15. /* jshint -W097 */
  16. 'use strict';
  17.  
  18. function setStyles() {
  19. document.getElementById('body_div_id').style.width = 'auto';
  20. var div = document.getElementById('image_gallery_images_div_id');
  21. if (div) {
  22. div.style.maxHeight = 'none';
  23. }
  24. var prev = document.getElementById('image_gallery_image_prev_id');
  25. if (prev) {
  26. prev.style.top = '24px';
  27. prev.style.height = '100%';
  28. }
  29. var next = document.getElementById('image_gallery_image_next_id');
  30. if (next) {
  31. next.style.top = '24px';
  32. next.style.height = '100%';
  33. }
  34. var contactContainer = document.querySelector('.post-contact-image-container');
  35. if (contactContainer) {
  36. contactContainer.style.paddingLeft = '0';
  37. }
  38. var contactImageContainer = document.querySelector('.post-default-image-container');
  39. if (contactImageContainer) {
  40. contactImageContainer.style.position = 'relative';
  41. }
  42. var contactImage = document.querySelector('.post-default-image');
  43. if (contactImage) {
  44. contactImage.style.width = 'auto';
  45. contactImage.style.height = 'auto';
  46. }
  47. var contactImageImg = document.querySelector('.post-default-image img');
  48. if (contactImageImg) {
  49. contactImageImg.style.width = '100%';
  50. contactImageImg.style.height = 'auto';
  51. }
  52. var rightColumn = document.querySelector('.listings-display-container .column-right');
  53. if (rightColumn) {
  54. rightColumn.style.display = 'none';
  55. }
  56. var leftColumnMain = document.querySelector('.listings-display-container .column-main-left');
  57. if (leftColumnMain) {
  58. leftColumnMain.style.marginRight = '0';
  59. }
  60. var leftColumnContent = document.querySelector('.column-main-left .column-main-content');
  61. if (leftColumnContent) {
  62. leftColumnContent.style.marginRight = '0';
  63. }
  64. }
  65.  
  66. var target = document.querySelector('head > title');
  67. var observer = new window.WebKitMutationObserver(function(mutations) {
  68. mutations.forEach(function(mutation) {
  69. setStyles();
  70. });
  71. });
  72. observer.observe(target, { subtree: true, characterData: true, childList: true });
  73.  
  74. setStyles();
  75.  
  76. document.onkeydown = function (e) {
  77. e = e || window.event;
  78. var keyCode = e.keyCode || e.which,
  79. arrow = {left: 37, up: 38, right: 39, down: 40 };
  80.  
  81. if (e.ctrlKey) {
  82. switch (keyCode) {
  83. case arrow.left:
  84. case arrow.right:
  85. var direction = (keyCode == arrow.left) ? 'prev' : 'next';
  86. var icon = document.getElementById('image_gallery_image_' + direction + '_id');
  87. if (icon && icon.style.display != 'none') {
  88. icon.click();
  89. }
  90. break;
  91. case arrow.up:
  92. case arrow.down:
  93. var selected = document.querySelector('#premium_category_sidebar_scroller_id div.listing-display-grid-row.selected');
  94. var parent = selected.parentNode;
  95. var direction = (keyCode == arrow.up) ? 'previousElementSibling' : 'nextElementSibling';
  96. var sibling = parent[direction];
  97. if (sibling) {
  98. var imageLink = sibling.querySelector('a.image-link');
  99. imageLink.click();
  100. }
  101. break;
  102. }
  103. }
  104. };