From 992af0b9d77cb4fbac2c37ef8d5896042d67a2a3 Mon Sep 17 00:00:00 2001 From: VirtualTam Date: Wed, 22 Jul 2015 05:02:10 +0200 Subject: Doc: sync from Wiki, generate HTML Closes #291 Fixes #227 Modifications - HTML content: match the new Wiki structure - Makefile - generate a custom HTML sidebar - include the sidebar on all pages - infer and prepend page titles - handle relative links - add title metadata, e.g. Shaarli - Signed-off-by: VirtualTam --- doc/Download-CSS-styles-from-an-OPML-list.html | 229 +++++++++++++++++++++++++ 1 file changed, 229 insertions(+) create mode 100644 doc/Download-CSS-styles-from-an-OPML-list.html (limited to 'doc/Download-CSS-styles-from-an-OPML-list.html') diff --git a/doc/Download-CSS-styles-from-an-OPML-list.html b/doc/Download-CSS-styles-from-an-OPML-list.html new file mode 100644 index 00000000..b21a54bd --- /dev/null +++ b/doc/Download-CSS-styles-from-an-OPML-list.html @@ -0,0 +1,229 @@ + + + + + + + Shaarli - Download CSS styles from an OPML list + + + + + + + +

Download CSS styles from an OPML list

+

Download CSS styles for shaarlis listed in an opml file

+

Example php script:

+
<!---- ?php -->
+<!---- Copyright (c) 2014 Nicolas Delsaux (https://github.com/Riduidel) -->
+<!---- License: zlib (http://www.gzip.org/zlib/zlib_license.html) -->
+
+/**
+ * Source: https://github.com/Riduidel
+ * Download css styles for shaarlis listed in an opml file
+ */
+define("SHAARLI_RSS_OPML", "https://www.ecirtam.net/shaarlirss/custom/people.opml");
+
+define("THEMES_TEMP_FOLDER", "new_themes");
+
+if(!file_exists(THEMES_TEMP_FOLDER)) {
+    mkdir(THEMES_TEMP_FOLDER);
+}
+
+function siteUrl($pathInSite) {
+    $indexPos = strpos($pathInSite, "index.php");
+    if(!$indexPos) {
+        return $pathInSite;
+    } else {
+        return substr($pathInSite, 0, $indexPos);
+    }
+}
+
+function createShaarliHashFromOPMLL($opmlFile) {
+    $result = array();
+    $opml = file_get_contents($opmlFile);
+    $opmlXml = simplexml_load_string($opml);
+    $outlineElements = $opmlXml->xpath("body/outline");
+    foreach($outlineElements as $site) {
+        $siteUrl = siteUrl((string) $site['htmlUrl']);[](.html)
+        $result[$siteUrl]=((string) $site['text']);[](.html)
+    }
+    return $result;
+}
+
+function getSiteFolder($url) {
+    $domain = parse_url($url,  PHP_URL_HOST);
+    return THEMES_TEMP_FOLDER."/".str_replace(".", "_", $domain);
+}
+
+function get_http_response_code($theURL) {
+     $headers = get_headers($theURL);
+     return substr($headers[0], 9, 3);[](.html)
+}
+
+/**
+ * This makes the code PHP-5 only (particularly the call to "get_headers")
+ */
+function copyUserStyleFrom($url, $name, $knownStyles) {
+    $userStyle = $url."inc/user.css";
+    if(in_array($url, $knownStyles)) {
+        // TODO add log message
+    } else {
+        $statusCode = get_http_response_code($userStyle);
+        if(intval($statusCode)<300) {
+            $styleSheet = file_get_contents($userStyle);
+            $siteFolder = getSiteFolder($url);
+            if(!file_exists($siteFolder)) {
+                mkdir($siteFolder);
+            }
+            if(!file_exists($siteFolder.'/user.css')) {
+                // Copy stylesheet
+                file_put_contents($siteFolder.'/user.css', $styleSheet);
+            }
+            if(!file_exists($siteFolder.'/README.md')) {
+                // Then write a readme.md file
+                file_put_contents($siteFolder.'/README.md', 
+                    "User style from ".$name."\n"
+                    ."============================="
+                    ."\n\n"
+                    ."This stylesheet was downloaded from ".$userStyle." on ".date(DATE_RFC822)
+                    );
+            }
+            if(!file_exists($siteFolder.'/config.ini')) {
+                // Write a config file containing useful informations
+                file_put_contents($siteFolder.'/config.ini', 
+                    "site_url=".$url."\n"
+                    ."site_name=".$name."\n"
+                    );
+            }
+            if(!file_exists($siteFolder.'/home.png')) {
+                // And finally copy generated thumbnail
+                $homeThumb = $siteFolder.'/home.png';
+                file_put_contents($siteFolder.'/home.png', file_get_contents(getThumbnailUrl($url)));
+            }
+            echo 'Theme have been downloaded from  <a href="'.$url.'">'.$url.'</a> into '.$siteFolder
+                .'. It looks like <img src="'.$homeThumb.'"><br/>';
+        }
+    }
+}
+
+function getThumbnailUrl($url) {
+    return 'http://api.webthumbnail.org/?url='.$url;
+}
+
+function copyUserStylesFrom($urlToNames, $knownStyles) {
+    foreach($urlToNames as $url => $name) {
+        copyUserStyleFrom($url, $name, $knownStyles);
+    }
+}
+
+/**
+ * Reading directory list, courtesy of http://www.laughing-buddha.net/php/dirlist/
+ * @param directory the directory we want to list files of
+ * @return a simple array containing the list of absolute file paths. Notice that current file (".") and parent one("..")
+ * are not listed here
+ */
+function getDirectoryList ($directory)  {
+    $realPath = realpath($directory);
+    // create an array to hold directory list
+    $results = array();
+    // create a handler for the directory
+    $handler = opendir($directory);
+    // open directory and walk through the filenames
+    while ($file = readdir($handler)) {
+        // if file isn't this directory or its parent, add it to the results
+        if ($file != "." && $file != "..") {
+            $results[ = realpath($realPath . "/" . $file);](-=-realpath($realPath-.-"/"-.-$file);.html)
+        }
+    }
+    // tidy up: close the handler
+    closedir($handler);
+    // done!
+    return $results;
+}
+
+/**
+ * Start in themes folder and look in all subfolders for config.ini files. 
+ * These config.ini files allow us not to download styles again and again
+ */
+function findKnownStyles() {
+    $result = array();
+    $subFolders = getDirectoryList("themes");
+    foreach($subFolders as $folder) {
+        $configFile = $folder."/config.ini";
+        if(file_exists($configFile)) {
+            $iniParameters = parse_ini_file($configFile);
+            array_push($result, $iniParameters['site_url']);[](.html)
+        }
+    }
+    return $result;
+}
+
+$knownStyles = findKnownStyles();
+copyUserStylesFrom(createShaarliHashFromOPMLL(SHAARLI_RSS_OPML), $knownStyles);
+
+<!--- ? ---->
+ + -- cgit v1.2.3