PageRenderTime 40ms CodeModel.GetById 14ms RepoModel.GetById 1ms app.codeStats 0ms

/tasks/lib/doc/lib/JsDoc/Render/Xhtml/Codepreview.php

https://github.com/Jeff2Ma/GMU
PHP | 110 lines | 94 code | 14 blank | 2 comment | 7 complexity | 3afb4d021718fab78065a0c27d976167 MD5 | raw file
  1. <?php
  2. // vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4:
  3. class Text_Wiki_Render_Xhtml_Codepreview extends Text_Wiki_Render {
  4. var $conf = array(
  5. 'css_div' => 'codepreivew',
  6. 'css_ul' => 'toptabs',
  7. 'css_li' => null,
  8. 'css_li_active' => 'active',
  9. 'css_a' => null,
  10. 'css_a_active' => null,
  11. 'css_content' => 'codepreivew-content',
  12. 'css_content_active' => 'codepreivew-content active',
  13. 'css_a_link' => null,
  14. 'css_a_javascript' => null,
  15. 'css_footer_ul' => 'btns',
  16. 'css_footer_li' => null,
  17. 'css_footer_li_active' => 'active',
  18. 'css_footer_a' => null,
  19. 'css_footer_a_active' => null,
  20. );
  21. function token($options)
  22. {
  23. static $_id;
  24. $_id++;
  25. $mapping = array(
  26. 'js' => 'javascript',
  27. 'css' => 'css',
  28. 'html' => 'html',
  29. );
  30. $files = array();
  31. $arr = explode("\n", trim($options['text'], "\n"));
  32. foreach($arr as $v){
  33. $content = $this->getFileConent($v);
  34. if(!$content) continue;
  35. $files[] = array(
  36. 'path' => $v,
  37. 'name' => substr(strrchr($v, "/"), 1),
  38. 'ext' => substr(strrchr($v, "."), 1),
  39. 'content' => $content
  40. );
  41. }
  42. $css = $this->formatCss('css_div');
  43. $return = "<div$css>";
  44. $navs = array();
  45. $contents = array();
  46. $footers = array();
  47. foreach($files as $index => $file) {
  48. $type = isset($file['ext'])?$file['ext']:'javascript';
  49. $navs[] = '<li'.$this->formatCss($index==0?'css_li_active':'css_li').'><a'.$this->formatCss($index==0?'css_a_active':'css_a').' href="#codepreview_content_'.$_id.'_'.$index.'">'.$file['name'].'</a></li>';
  50. $contents[] = '<div'.$this->formatCss($index==0?'css_content_active':'css_content').' id="codepreview_content_'.$_id.'_'.$index.'">'.
  51. '<textarea class="code" data-type="'.$type.'">'.$this->textEncode($file['content']).'</textarea>'.
  52. '</div>';
  53. }
  54. $footers[] = '<li'.$this->formatCss('css_footer_li_active').'><a'.$this->formatCss('css_footer_a_active', 'viewmode').' href="javascript:void(0)">查看</a></li>';
  55. //$footers[] = '<li'.$this->formatCss('css_footer_li').'><a'.$this->formatCss('css_footer_a', 'editmode').' href="javascript:void(0)">编辑</a></li>';
  56. $footers[] = '<li'.$this->formatCss('css_footer_li').'><a'.$this->formatCss('css_footer_a', 'preview').' target="_blank" href="'.$options['attributes']['href'].'">预览</a></li>';
  57. $return .= '<ul'.$this->formatCss('css_ul').'>'.implode("", $navs).'</ul>';
  58. $return .= implode("", $contents);
  59. $return .= '<ul'.$this->formatCss('css_footer_ul').'>'.implode("", $footers).'</ul>';
  60. $return .= '</div>';
  61. return $return;
  62. }
  63. function formatCss($key, $plus = '')
  64. {
  65. $css = $plus;
  66. if (isset($this->conf[$key])) {
  67. $css = $this->conf[$key].' '.$css;
  68. }
  69. $css = trim($css);
  70. return $css?sprintf(' class="%s"', $css):null;
  71. }
  72. function getFileConent($file) {
  73. if(preg_match('/^http/', $file)){
  74. $curl = curl_init();
  75. curl_setopt($curl, CURLOPT_URL, $file);
  76. curl_setopt($curl, CURLOPT_HEADER, 0);
  77. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  78. $data = curl_exec($curl);
  79. curl_close($curl);
  80. return $data;
  81. } else if(file_exists($file)) {
  82. if (!$fp = @fopen($file, 'rb'))
  83. {
  84. return null;
  85. }
  86. $content = '';
  87. if (filesize($file) > 0)
  88. {
  89. $content = fread($fp, filesize($file));
  90. }
  91. fclose($fp);
  92. return $content;
  93. }
  94. return null;
  95. }
  96. }