# rvm_css v0.4 # Static CSS caching # # License: GNU GPLv2 or later # # Ruud van Melick # http://vanmelick.com/ # ...................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ...................................................................... YTo5OntzOjc6InZlcnNpb24iO3M6MzoiMC40IjtzOjY6ImF1dGhvciI7czoxNToiUnV1ZCB2 YW4gTWVsaWNrIjtzOjEwOiJhdXRob3JfdXJpIjtzOjIxOiJodHRwOi8vdmFubWVsaWNrLmNv bS8iO3M6MTE6ImRlc2NyaXB0aW9uIjtzOjE4OiJTdGF0aWMgQ1NTIGNhY2hpbmciO3M6NDoi dHlwZSI7aToxO3M6NDoibmFtZSI7czo3OiJydm1fY3NzIjtzOjQ6ImhlbHAiO3M6MTQ1ODoi CTxwPlRoaXMgcGx1Z2luIGF1dG9tYXRpY2FsbHkgc3RvcmVzIGEgY29weSBvZiB5b3VyIHN0 eWxlIHNoZWV0KHMpIGFzIGEgc3RhdGljIGZpbGUuIFN0YXRpYyBmaWxlcyBhcmUgc2VydmVk IHNldmVyYWwgb3JkZXJzIG9mIG1hZ25pdHVkZSBmYXN0ZXIgdGhhbiA8c3BhbiBjbGFzcz0i Y2FwcyI+UEhQPC9zcGFuPiBmaWxlcyAoMjAwIHRpbWVzIGZhc3RlciwgaW4gbXkgb3duIHRl c3RzIG9uIGEgRmFzdENHSS1iYXNlZCBzZXJ2ZXIpLjwvcD4KCgk8cD5Qb3N0LWluc3RhbGxh dGlvbiBzdGVwczoKCTxvbD4KCQk8bGk+QWN0aXZhdGUgdGhlIHBsdWdpbi48L2xpPgoJCTxs aT5DcmVhdGUgYSBkaXJlY3RvcnkgZm9yIHRoZSBzdGF0aWMgc3R5bGUgc2hlZXQgZmlsZXMg aW4gdGhlIHJvb3Qgb2YgeW91ciB0ZXh0cGF0dGVybiBpbnN0YWxsYXRpb24uIFlvdSBzaG91 bGQgbWFrZSBzdXJlIHRoYXQgPHNwYW4gY2xhc3M9ImNhcHMiPjxzcGFuIGNsYXNzPSJjYXBz Ij5QSFA8L3NwYW4+PC9zcGFuPiBpcyBhYmxlIHRvIHdyaXRlIHRvIHRoYXQgZGlyZWN0b3J5 LjwvbGk+CgkJPGxpPlZpc2l0IHRoZSA8YSBocmVmPSJpbmRleC5waHA/ZXZlbnQ9cHJlZnMm IzM4O3N0ZXA9YWR2YW5jZWRfcHJlZnMiPmFkdmFuY2VkIHByZWZlcmVuY2VzPC9hPiBhbmQg bWFrZSBzdXJlIHRoZSAmIzgyMjA7U3R5bGUgZGlyZWN0b3J5JiM4MjIxOyBwcmVmZXJlbmNl IGNvbnRhaW5zIHRoZSBkaXJlY3RvcnkgeW91IGNyZWF0ZWQgaW4gc3RlcCAyLiBUaGlzIHBh dGggaXMgYWx3YXlzIGEgcmVsYXRpdmUgcGF0aCAodG8gdGhlIGRpcmVjdG9yeSBvZiB5b3Vy IHJvb3QgdGV4dHBhdHRlcm4gaW5zdGFsbGF0aW9uKS48L2xpPgoJCTxsaT5WaXNpdCB0aGUg PGEgaHJlZj0iaW5kZXgucGhwP2V2ZW50PWNzcyI+c3R5bGU8L2E+IHRhYiBhbmQgc2F2ZSBl YWNoIG9mIHlvdXIgc3R5bGUgc2hlZXRzIGFnYWluIChzYXZpbmcgY3JlYXRlcyB0aGUgc3Rh dGljIGZpbGUpLjwvbGk+Cgk8L29sPgoJPG9sPgoJCTxsaT5SZXBsYWNlIGFsbCBvY2N1cnJl bmNlcyBvZiA8Y29kZT4mIzYwO3R4cDpjc3MgLyYjNjI7PC9jb2RlPiB3aXRoIDxjb2RlPiYj NjA7dHhwOnJ2bV9jc3MgLyYjNjI7PC9jb2RlPi48L2xpPgoJPC9vbD48L3A+CgoJPHA+VGhl IDxjb2RlPiYjNjA7dHhwOnJ2bV9jc3MgLyYjNjI7PC9jb2RlPiB0YWcgc3VwcGxpZWQgYnkg dGhpcyBwbHVnaW4gaGFzIHRoZSBleGFjdCBzYW1lIGF0dHJpYnV0ZXMgYXMgdGhlIGJ1aWx0 LWluIDxjb2RlPiYjNjA7dHhwOmNzcyAvJiM2Mjs8L2NvZGU+IHRhZyBhbmQgY2FuIGJlIHVz ZWQgYXMgYSBkcm9wLWluIHJlcGxhY2VtZW50LjwvcD4KCgk8cD5Ob3RlOiBiZWNhdXNlIG5v dCBhbGwgY2hhcmFjdGVycyBhcmUgYWxsb3dlZCBpbiBmaWxlbmFtZXMsIGF2b2lkIHVzaW5n IG5vbi1hbHBoYW51bWVyaWMgY2hhcmFjdGVycyBpbiBzdHlsZSBzaGVldCBuYW1lcy48L3A+ IjtzOjQ6ImNvZGUiO3M6MjI2NjoiCmlmICh0eHBpbnRlcmZhY2UgPT0gJ2FkbWluJykKewog IHJlZ2lzdGVyX2NhbGxiYWNrKCdydm1fY3NzX3NhdmUnLCAnY3NzJywgJ2Nzc19zYXZlJyk7 CiAgcmVnaXN0ZXJfY2FsbGJhY2soJ3J2bV9jc3Nfc2F2ZScsICdjc3MnLCAnY3NzX3NhdmVf cG9zdGVkJyk7CiAgcmVnaXN0ZXJfY2FsbGJhY2soJ3J2bV9jc3Nfc2F2ZScsICdjc3MnLCAn ZGVsX2RlYycpOwogIHJlZ2lzdGVyX2NhbGxiYWNrKCdydm1fY3NzX2RlbGV0ZScsICdjc3Mn LCAnY3NzX2RlbGV0ZScpOwogIHJlZ2lzdGVyX2NhbGxiYWNrKCdydm1fY3NzX3ByZWZzJywg J3ByZWZzJywgJycsIDEpOwp9CgoKZnVuY3Rpb24gcnZtX2NzcygkYXR0cykKewogIGdsb2Jh bCAkdHhwX2Vycm9yX2NvZGUsICRzLCAkcGF0aF90b19zaXRlLCAkcnZtX2Nzc19kaXI7Cgog IGV4dHJhY3QobEF0dHMoYXJyYXkoCiAgICAnZm9ybWF0JyA9PiAndXJsJywKICAgICdtZWRp YScgID0+ICdzY3JlZW4nLAogICAgJ24nICAgICAgPT4gJycsCiAgICAncmVsJyAgICA9PiAn c3R5bGVzaGVldCcsCiAgICAndGl0bGUnICA9PiAnJywKICApLCAkYXR0cykpOwoKICBpZiAo ISRuKQogIHsKICAgIGlmICgkcykKICAgIHsKICAgICAgJG4gPSBzYWZlX2ZpZWxkKCdjc3Mn LCAndHhwX3NlY3Rpb24nLCAibmFtZT0nIi5kb1NsYXNoKCRzKS4iJyIpOwogICAgfQogICAg ZWxzZQogICAgewogICAgICAkbiA9ICdkZWZhdWx0JzsKICAgIH0KICB9CgogICRmaWxlID0g JHJ2bV9jc3NfZGlyLicvJy5zdHJ0b2xvd2VyKHNhbml0aXplRm9yVXJsKCRuKSkuJy5jc3Mn OwoKICBpZiAoZW1wdHkoJHJ2bV9jc3NfZGlyKSBvciAhaXNfcmVhZGFibGUoJHBhdGhfdG9f c2l0ZS4nLycuJGZpbGUpKQogIHsKICAgIHJldHVybiBjc3MoJGF0dHMpOwogIH0KCiAgaWYg KCRmb3JtYXQgPT0gJ2xpbmsnKQogIHsKICAgIHJldHVybiAnPGxpbmsgcmVsPSInLiRyZWwu JyIgdHlwZT0idGV4dC9jc3MiJy4KICAgICAgKCRtZWRpYSA/ICcgbWVkaWE9IicuJG1lZGlh LiciJyA6ICcnKS4KICAgICAgKCR0aXRsZSA/ICcgdGl0bGU9IicuJHRpdGxlLiciJyA6ICcn KS4KICAgICAgJyBocmVmPSInLmh1LiRmaWxlLiciIC8+JzsKICB9CgogIHJldHVybiBodS4k ZmlsZTsKfQoKCmZ1bmN0aW9uIHJ2bV9jc3Nfc2F2ZSgpCnsKICBnbG9iYWwgJHBhdGhfdG9f c2l0ZSwgJHJ2bV9jc3NfZGlyOwoKICAkbmFtZSA9IChwcygnY29weScpIG9yIHBzKCdzYXZl bmV3JykpID8gcHMoJ25ld25hbWUnKSA6IHBzKCduYW1lJyk7CiAgJGZpbGVuYW1lID0gc3Ry dG9sb3dlcihzYW5pdGl6ZUZvclVybCgkbmFtZSkpOwoKICBpZiAoZW1wdHkoJHJ2bV9jc3Nf ZGlyKSBvciAhJGZpbGVuYW1lKQogIHsKICAgIHJldHVybjsKICB9CgogICRjc3MgPSBzYWZl X2ZpZWxkKCdjc3MnLCAndHhwX2NzcycsICJuYW1lPSciLmRvU2xhc2goJG5hbWUpLiInIik7 CgogIGlmICgkY3NzKQogIHsKICAgICRmaWxlICAgPSAkcGF0aF90b19zaXRlLicvJy4kcnZt X2Nzc19kaXIuJy8nLiRmaWxlbmFtZS4nLmNzcyc7CiAgICAkaGFuZGxlID0gZm9wZW4oJGZp bGUsICd3YicpOwogICAgZndyaXRlKCRoYW5kbGUsIGJhc2U2NF9kZWNvZGUoJGNzcykpOwog ICAgZmNsb3NlKCRoYW5kbGUpOwogIH0KfQoKCmZ1bmN0aW9uIHJ2bV9jc3NfZGVsZXRlKCkK ewogIGdsb2JhbCAkcGF0aF90b19zaXRlLCAkcnZtX2Nzc19kaXI7CgogIGlmIChzYWZlX2Zp ZWxkKCdjc3MnLCAndHhwX2NzcycsICJuYW1lPSciLmRvU2xhc2gocHMoJ25hbWUnKSkuIici KSkKICB7CiAgICByZXR1cm47CiAgfQoKICAkbmFtZSA9IHN0cnRvbG93ZXIoc2FuaXRpemVG b3JVcmwocHMoJ25hbWUnKSkpOwogICRmaWxlID0gJHBhdGhfdG9fc2l0ZS4nLycuJHJ2bV9j c3NfZGlyLicvJy4kbmFtZS4nLmNzcyc7CgogIGlmICghZW1wdHkoJHJ2bV9jc3NfZGlyKSBh bmQgJG5hbWUpCiAgewogICAgdW5saW5rKCRmaWxlKTsKICB9Cn0KCgpmdW5jdGlvbiBydm1f Y3NzX3ByZWZzKCkKewogIGdsb2JhbCAkdGV4dGFycmF5OwoKICAkdGV4dGFycmF5Wydydm1f Y3NzX2RpciddID0gJ1N0eWxlIGRpcmVjdG9yeSc7CgogIGlmICghc2FmZV9maWVsZCAoJ25h bWUnLCAndHhwX3ByZWZzJywgIm5hbWU9J3J2bV9jc3NfZGlyJyIpKQogIHsKICAgIHNhZmVf aW5zZXJ0KCd0eHBfcHJlZnMnLCAicHJlZnNfaWQ9MSwgbmFtZT0ncnZtX2Nzc19kaXInLCB2 YWw9J2NzcycsIHR5cGU9MSwgZXZlbnQ9J2FkbWluJywgaHRtbD0ndGV4dF9pbnB1dCcsIHBv c2l0aW9uPTIwIik7CiAgfQp9CiI7czozOiJtZDUiO3M6MzI6IjVhNzY3OTM1ODBmY2I0OTU5 OWY0MzhmMWE4YjY4NmVhIjt9