# rvm_css v0.5 # 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: # ...................................................................... YTo5OntzOjc6InZlcnNpb24iO3M6MzoiMC41IjtzOjY6ImF1dGhvciI7czoxNToiUnV1ZCB2 YW4gTWVsaWNrIjtzOjEwOiJhdXRob3JfdXJpIjtzOjIxOiJodHRwOi8vdmFubWVsaWNrLmNv bS8iO3M6MTE6ImRlc2NyaXB0aW9uIjtzOjE4OiJTdGF0aWMgQ1NTIGNhY2hpbmciO3M6NDoi dHlwZSI7aToxO3M6NDoibmFtZSI7czo3OiJydm1fY3NzIjtzOjQ6ImhlbHAiO3M6MTQxMToi CTxwPlRoaXMgcGx1Z2luIGF1dG9tYXRpY2FsbHkgc3RvcmVzIGEgY29weSBvZiB5b3VyIHN0 eWxlIHNoZWV0KHMpIGFzIGEgc3RhdGljIGZpbGUuIFN0YXRpYyBmaWxlcyBhcmUgc2VydmVk IHNldmVyYWwgb3JkZXJzIG9mIG1hZ25pdHVkZSBmYXN0ZXIgdGhhbiA8c3BhbiBjbGFzcz0i Y2FwcyI+UEhQPC9zcGFuPiBmaWxlcyAoMjAwIHRpbWVzIGZhc3RlciwgaW4gbXkgb3duIHRl c3RzIG9uIGEgRmFzdENHSS1iYXNlZCBzZXJ2ZXIpLjwvcD4KCgk8cD5Qb3N0LWluc3RhbGxh dGlvbiBzdGVwczoKCTxvbD4KCQk8bGk+QWN0aXZhdGUgdGhlIHBsdWdpbi48L2xpPgoJCTxs aT5DcmVhdGUgYSBkaXJlY3RvcnkgZm9yIHRoZSBzdGF0aWMgc3R5bGUgc2hlZXQgZmlsZXMg aW4gdGhlIHJvb3Qgb2YgeW91ciB0ZXh0cGF0dGVybiBpbnN0YWxsYXRpb24uIFlvdSBzaG91 bGQgbWFrZSBzdXJlIHRoYXQgPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gaXMgYWJs ZSB0byB3cml0ZSB0byB0aGF0IGRpcmVjdG9yeS48L2xpPgoJCTxsaT5WaXNpdCB0aGUgPGEg aHJlZj0iaW5kZXgucGhwP2V2ZW50PXByZWZzJmFtcDtzdGVwPWFkdmFuY2VkX3ByZWZzIj5h ZHZhbmNlZCBwcmVmZXJlbmNlczwvYT4gYW5kIG1ha2Ugc3VyZSB0aGUgJiM4MjIwO1N0eWxl IGRpcmVjdG9yeSYjODIyMTsgcHJlZmVyZW5jZSBjb250YWlucyB0aGUgZGlyZWN0b3J5IHlv dSBjcmVhdGVkIGluIHN0ZXAgMi4gVGhpcyBwYXRoIGlzIGFsd2F5cyBhIHJlbGF0aXZlIHBh dGggKHRvIHRoZSBkaXJlY3Rvcnkgb2YgeW91ciByb290IHRleHRwYXR0ZXJuIGluc3RhbGxh dGlvbikuPC9saT4KCQk8bGk+VmlzaXQgdGhlIDxhIGhyZWY9ImluZGV4LnBocD9ldmVudD1j c3MiPnN0eWxlPC9hPiB0YWIgYW5kIHNhdmUgZWFjaCBvZiB5b3VyIHN0eWxlIHNoZWV0cyBh Z2FpbiAoc2F2aW5nIGNyZWF0ZXMgdGhlIHN0YXRpYyBmaWxlKS48L2xpPgoJCTxsaT5SZXBs YWNlIGFsbCBvY2N1cnJlbmNlcyBvZiA8Y29kZT4mbHQ7dHhwOmNzcyAvJmd0OzwvY29kZT4g d2l0aCA8Y29kZT4mbHQ7dHhwOnJ2bV9jc3MgLyZndDs8L2NvZGU+LjwvbGk+Cgk8L29sPjwv cD4KCgk8cD5UaGUgPGNvZGU+Jmx0O3R4cDpydm1fY3NzIC8mZ3Q7PC9jb2RlPiB0YWcgc3Vw cGxpZWQgYnkgdGhpcyBwbHVnaW4gaGFzIHRoZSBleGFjdCBzYW1lIGF0dHJpYnV0ZXMgYXMg dGhlIGJ1aWx0LWluIDxjb2RlPiZsdDt0eHA6Y3NzIC8mZ3Q7PC9jb2RlPiB0YWcgYW5kIGNh biBiZSB1c2VkIGFzIGEgZHJvcC1pbiByZXBsYWNlbWVudC48L3A+CgoJPHA+Tm90ZTogYmVj YXVzZSBub3QgYWxsIGNoYXJhY3RlcnMgYXJlIGFsbG93ZWQgaW4gZmlsZW5hbWVzLCBhdm9p ZCB1c2luZyBub24tYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgaW4gc3R5bGUgc2hlZXQgbmFt ZXMuPC9wPiI7czo0OiJjb2RlIjtzOjIzNTI6IgppZiAodHhwaW50ZXJmYWNlID09ICdhZG1p bicpCnsKICByZWdpc3Rlcl9jYWxsYmFjaygncnZtX2Nzc19zYXZlJywgJ2NzcycsICdjc3Nf c2F2ZScpOwogIHJlZ2lzdGVyX2NhbGxiYWNrKCdydm1fY3NzX3NhdmUnLCAnY3NzJywgJ2Nz c19zYXZlX3Bvc3RlZCcpOwogIHJlZ2lzdGVyX2NhbGxiYWNrKCdydm1fY3NzX3NhdmUnLCAn Y3NzJywgJ2RlbF9kZWMnKTsKICByZWdpc3Rlcl9jYWxsYmFjaygncnZtX2Nzc19kZWxldGUn LCAnY3NzJywgJ2Nzc19kZWxldGUnKTsKICByZWdpc3Rlcl9jYWxsYmFjaygncnZtX2Nzc19w cmVmcycsICdwcmVmcycsICcnLCAxKTsKfQoKCmZ1bmN0aW9uIHJ2bV9jc3MoJGF0dHMpCnsK ICBnbG9iYWwgJHR4cF9lcnJvcl9jb2RlLCAkcywgJHBhdGhfdG9fc2l0ZSwgJHJ2bV9jc3Nf ZGlyOwoKICBleHRyYWN0KGxBdHRzKGFycmF5KAogICAgJ2Zvcm1hdCcgPT4gJ3VybCcsCiAg ICAnbWVkaWEnICA9PiAnc2NyZWVuJywKICAgICduJyAgICAgID0+ICcnLAogICAgJ3JlbCcg ICAgPT4gJ3N0eWxlc2hlZXQnLAogICAgJ3RpdGxlJyAgPT4gJycsCiAgKSwgJGF0dHMpKTsK CiAgaWYgKCEkbikKICB7CiAgICBpZiAoJHMpCiAgICB7CiAgICAgICRuID0gc2FmZV9maWVs ZCgnY3NzJywgJ3R4cF9zZWN0aW9uJywgIm5hbWU9JyIuZG9TbGFzaCgkcykuIiciKTsKICAg IH0KICAgIGVsc2UKICAgIHsKICAgICAgJG4gPSAnZGVmYXVsdCc7CiAgICB9CiAgfQoKICAk ZmlsZSA9ICRydm1fY3NzX2Rpci4nLycuc3RydG9sb3dlcihzYW5pdGl6ZUZvclVybCgkbikp LicuY3NzJzsKCiAgaWYgKGVtcHR5KCRydm1fY3NzX2Rpcikgb3IgIWlzX3JlYWRhYmxlKCRw YXRoX3RvX3NpdGUuJy8nLiRmaWxlKSkKICB7CiAgICByZXR1cm4gY3NzKCRhdHRzKTsKICB9 CgogIGlmICgkZm9ybWF0ID09ICdsaW5rJykKICB7CiAgICByZXR1cm4gJzxsaW5rIHJlbD0i Jy4kcmVsLiciIHR5cGU9InRleHQvY3NzIicuCiAgICAgICgkbWVkaWEgPyAnIG1lZGlhPSIn LiRtZWRpYS4nIicgOiAnJykuCiAgICAgICgkdGl0bGUgPyAnIHRpdGxlPSInLiR0aXRsZS4n IicgOiAnJykuCiAgICAgICcgaHJlZj0iJy5odS4kZmlsZS4nIiAvPic7CiAgfQoKICByZXR1 cm4gaHUuJGZpbGU7Cn0KCgpmdW5jdGlvbiBydm1fY3NzX3NhdmUoKQp7CiAgZ2xvYmFsICRw YXRoX3RvX3NpdGUsICRydm1fY3NzX2RpcjsKCiAgJG5hbWUgPSAocHMoJ2NvcHknKSBvciBw cygnc2F2ZW5ldycpKSA/IHBzKCduZXduYW1lJykgOiBwcygnbmFtZScpOwogICRmaWxlbmFt ZSA9IHN0cnRvbG93ZXIoc2FuaXRpemVGb3JVcmwoJG5hbWUpKTsKCiAgaWYgKGVtcHR5KCRy dm1fY3NzX2Rpcikgb3IgISRmaWxlbmFtZSkKICB7CiAgICByZXR1cm47CiAgfQoKICAkY3Nz ID0gc2FmZV9maWVsZCgnY3NzJywgJ3R4cF9jc3MnLCAibmFtZT0nIi5kb1NsYXNoKCRuYW1l KS4iJyIpOwoKICBpZiAoJGNzcykKICB7CiAgICBpZiAocHJlZ19tYXRjaCgnIV5bYS16QS1a MC05LytdKj17MCwyfSQhJywgJGNzcykpCiAgICB7CiAgICAgICRjc3MgPSBiYXNlNjRfZGVj b2RlKCRjc3MpOwogICAgfQoKICAgICRmaWxlICAgPSAkcGF0aF90b19zaXRlLicvJy4kcnZt X2Nzc19kaXIuJy8nLiRmaWxlbmFtZS4nLmNzcyc7CiAgICAkaGFuZGxlID0gZm9wZW4oJGZp bGUsICd3YicpOwogICAgZndyaXRlKCRoYW5kbGUsICRjc3MpOwogICAgZmNsb3NlKCRoYW5k bGUpOwogIH0KfQoKCmZ1bmN0aW9uIHJ2bV9jc3NfZGVsZXRlKCkKewogIGdsb2JhbCAkcGF0 aF90b19zaXRlLCAkcnZtX2Nzc19kaXI7CgogIGlmIChzYWZlX2ZpZWxkKCdjc3MnLCAndHhw X2NzcycsICJuYW1lPSciLmRvU2xhc2gocHMoJ25hbWUnKSkuIiciKSkKICB7CiAgICByZXR1 cm47CiAgfQoKICAkbmFtZSA9IHN0cnRvbG93ZXIoc2FuaXRpemVGb3JVcmwocHMoJ25hbWUn KSkpOwogICRmaWxlID0gJHBhdGhfdG9fc2l0ZS4nLycuJHJ2bV9jc3NfZGlyLicvJy4kbmFt ZS4nLmNzcyc7CgogIGlmICghZW1wdHkoJHJ2bV9jc3NfZGlyKSBhbmQgJG5hbWUpCiAgewog ICAgdW5saW5rKCRmaWxlKTsKICB9Cn0KCgpmdW5jdGlvbiBydm1fY3NzX3ByZWZzKCkKewog IGdsb2JhbCAkdGV4dGFycmF5OwoKICAkdGV4dGFycmF5Wydydm1fY3NzX2RpciddID0gJ1N0 eWxlIGRpcmVjdG9yeSc7CgogIGlmICghc2FmZV9maWVsZCAoJ25hbWUnLCAndHhwX3ByZWZz JywgIm5hbWU9J3J2bV9jc3NfZGlyJyIpKQogIHsKICAgIHNhZmVfaW5zZXJ0KCd0eHBfcHJl ZnMnLCAicHJlZnNfaWQ9MSwgbmFtZT0ncnZtX2Nzc19kaXInLCB2YWw9J2NzcycsIHR5cGU9 MSwgZXZlbnQ9J2FkbWluJywgaHRtbD0ndGV4dF9pbnB1dCcsIHBvc2l0aW9uPTIwIik7CiAg fQp9CiI7czozOiJtZDUiO3M6MzI6IjUzOTMyNDUzNWZlNTE0ZjBiY2NiMGM4OGQ3MDMyNmI0 Ijt9