You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

335 lines
7.3KB

  1. <?php // Prismatic - Enqueue Resources
  2. if (!defined('ABSPATH')) exit;
  3. function prismatic_enqueue_front() {
  4. global $prismatic_options_general;
  5. $library = (isset($prismatic_options_general['library'])) ? $prismatic_options_general['library'] : 'none';
  6. if ($library === 'prism') {
  7. prismatic_prism_enqueue_front();
  8. } elseif ($library === 'highlight') {
  9. prismatic_highlight_enqueue_front();
  10. }
  11. }
  12. function prismatic_enqueue_admin() {
  13. $screen = get_current_screen();
  14. if (!property_exists($screen, 'id')) return;
  15. if ($screen->id === 'settings_page_prismatic') {
  16. wp_enqueue_style('prismatic-font-icons', PRISMATIC_URL .'css/styles-font-icons.css', array(), null);
  17. wp_enqueue_style('prismatic-settings', PRISMATIC_URL .'css/styles-settings.css', array(), null);
  18. wp_enqueue_style('wp-jquery-ui-dialog');
  19. $js_deps = array('jquery', 'jquery-ui-core', 'jquery-ui-dialog');
  20. wp_enqueue_script('prismatic-settings', PRISMATIC_URL .'js/scripts-settings.js', $js_deps, null);
  21. $data = prismatic_get_vars_admin();
  22. wp_localize_script('prismatic-settings', 'prismatic_settings', $data);
  23. }
  24. }
  25. function prismatic_get_vars_admin() {
  26. $data = array(
  27. 'reset_title' => __('Confirm Reset', 'prismatic'),
  28. 'reset_message' => __('Restore default options?', 'prismatic'),
  29. 'reset_true' => __('Yes, make it so.', 'prismatic'),
  30. 'reset_false' => __('No, abort mission.', 'prismatic'),
  31. );
  32. return $data;
  33. }
  34. function prismatic_prism_enqueue_front() {
  35. global $prismatic_options_prism;
  36. if (isset($prismatic_options_prism['singular_only']) && $prismatic_options_prism['singular_only'] && !is_singular()) return;
  37. $languages = prismatic_active_languages('prism');
  38. $languages = array_filter($languages);
  39. if (!empty($languages)) {
  40. $theme = (isset($prismatic_options_prism['prism_theme'])) ? $prismatic_options_prism['prism_theme'] : 'default';
  41. wp_enqueue_style('prismatic-prism', PRISMATIC_URL .'lib/prism/css/theme-'. $theme .'.css', array(), null, 'all');
  42. wp_enqueue_script('prismatic-prism', PRISMATIC_URL .'lib/prism/js/prism-core.js', array(), null, true);
  43. if (isset($prismatic_options_prism['line_highlight']) && $prismatic_options_prism['line_highlight']) {
  44. wp_enqueue_script('prismatic-prism-line-highlight', PRISMATIC_URL .'lib/prism/js/plugin-line-highlight.js', array('prismatic-prism'), null, true);
  45. }
  46. if (isset($prismatic_options_prism['line_numbers']) && $prismatic_options_prism['line_numbers']) {
  47. wp_enqueue_script('prismatic-prism-line-numbers', PRISMATIC_URL .'lib/prism/js/plugin-line-numbers.js', array('prismatic-prism'), null, true);
  48. }
  49. if (isset($prismatic_options_prism['show_language']) && $prismatic_options_prism['show_language']) {
  50. wp_enqueue_script('prismatic-prism-show-language', PRISMATIC_URL .'lib/prism/js/plugin-show-language.js', array('prismatic-prism'), null, true);
  51. }
  52. $prefix = array('lang-', 'language-');
  53. foreach ($languages as $language) {
  54. $language = str_replace($prefix, '', $language);
  55. $file = PRISMATIC_DIR . 'lib/prism/js/lang-'. $language .'.js';
  56. if (file_exists($file)) {
  57. wp_enqueue_script('prismatic-prism-'. $language, PRISMATIC_URL .'lib/prism/js/lang-'. $language .'.js', array('prismatic-prism'), null, true);
  58. }
  59. }
  60. }
  61. }
  62. function prismatic_highlight_enqueue_front() {
  63. global $prismatic_options_highlight;
  64. if (isset($prismatic_options_highlight['singular_only']) && $prismatic_options_highlight['singular_only'] && !is_singular()) return;
  65. $always_load = (isset($prismatic_options_highlight['noprefix_classes']) && $prismatic_options_highlight['noprefix_classes']) ? true : false;
  66. $languages = prismatic_active_languages('highlight');
  67. $languages = array_filter($languages);
  68. if (!empty($languages) || $always_load) {
  69. $theme = (isset($prismatic_options_highlight['highlight_theme'])) ? $prismatic_options_highlight['highlight_theme'] : 'default';
  70. wp_enqueue_style('prismatic-highlight', PRISMATIC_URL .'lib/highlight/css/'. $theme .'.css', array(), null, 'all');
  71. wp_enqueue_script('prismatic-highlight', PRISMATIC_URL .'lib/highlight/js/highlight-core.js', array(), null, true);
  72. $init = (isset($prismatic_options_highlight['init_javascript'])) ? $prismatic_options_highlight['init_javascript'] : false;
  73. if ($init) {
  74. wp_add_inline_script('prismatic-highlight', $init, 'after');
  75. }
  76. }
  77. }
  78. function prismatic_active_languages($library) {
  79. global $posts, $post;
  80. if (is_singular()) {
  81. $excerpt = $post->post_excerpt;
  82. $content = $post->post_content;
  83. $comments = ($post->comment_count) ? get_comments(array('post_id' => $post->ID, 'status' => 'approve')) : array();
  84. $languages = prismatic_active_languages_loop($library, $excerpt, $content, $comments);
  85. } else {
  86. foreach ($posts as $post) {
  87. $excerpt = $post->post_excerpt;
  88. $content = $post->post_content;
  89. $comments = array();
  90. $langs_array[] = prismatic_active_languages_loop($library, $excerpt, $content, $comments);
  91. }
  92. foreach($langs_array as $key => $value) {
  93. foreach ($value as $k => $v) {
  94. $languages[] = $v;
  95. }
  96. }
  97. }
  98. return $languages;
  99. }
  100. function prismatic_active_languages_loop($library, $excerpt, $content, $comments) {
  101. $languages = array();
  102. $classes = ($library === 'prism') ? prismatic_prism_classes() : prismatic_highlight_classes();
  103. foreach ($classes as $class) {
  104. foreach($class as $cls) {
  105. if (strpos($excerpt, $cls) !== false) {
  106. $languages[] = $cls;
  107. }
  108. if (strpos($content, $cls) !== false) {
  109. $languages[] = $cls;
  110. }
  111. foreach ($comments as $comment) {
  112. if (strpos($comment->comment_content, $cls) !== false) {
  113. $languages[] = $cls;
  114. }
  115. }
  116. }
  117. }
  118. $languages = array_unique($languages);
  119. return $languages;
  120. }
  121. function prismatic_prism_classes() {
  122. $classes = array(
  123. array(
  124. 'language-apacheconf',
  125. 'language-applescript',
  126. 'language-bash',
  127. 'language-c',
  128. 'language-csharp',
  129. 'language-cpp',
  130. 'language-clike',
  131. 'language-coffeescript',
  132. 'language-css',
  133. 'language-diff',
  134. 'language-git',
  135. 'language-http',
  136. 'language-ini',
  137. 'language-java',
  138. 'language-javascript',
  139. 'language-json',
  140. 'language-makefile',
  141. 'language-markdown',
  142. 'language-markup',
  143. 'language-nginx',
  144. 'language-objectivec',
  145. 'language-perl',
  146. 'language-php',
  147. 'language-python',
  148. 'language-ruby',
  149. 'language-sass',
  150. 'language-scss',
  151. 'language-sql',
  152. 'language-twig',
  153. 'language-yaml'
  154. ),
  155. array(
  156. 'lang-apacheconf',
  157. 'lang-applescript',
  158. 'lang-bash',
  159. 'lang-c',
  160. 'lang-csharp',
  161. 'lang-cpp',
  162. 'lang-clike',
  163. 'lang-coffeescript',
  164. 'lang-css',
  165. 'lang-diff',
  166. 'lang-git',
  167. 'lang-http',
  168. 'lang-ini',
  169. 'lang-java',
  170. 'lang-javascript',
  171. 'lang-json',
  172. 'lang-makefile',
  173. 'lang-markdown',
  174. 'lang-markup',
  175. 'lang-nginx',
  176. 'lang-objectivec',
  177. 'lang-perl',
  178. 'lang-php',
  179. 'lang-python',
  180. 'lang-ruby',
  181. 'lang-sass',
  182. 'lang-scss',
  183. 'lang-sql',
  184. 'lang-twig',
  185. 'lang-yaml'
  186. )
  187. );
  188. return $classes;
  189. }
  190. function prismatic_highlight_classes() {
  191. $classes = array(
  192. array(
  193. 'language-'
  194. ),
  195. array(
  196. 'lang-',
  197. )
  198. );
  199. return $classes;
  200. }