# upm_insert_tab v.0.3 # Allow tab insertion within admin textareas. # Mary Fredborg # http://utterplush.com/txp-plugins/upm-insert-tab # .......................................................................... # A plugin for Textpattern # http://textpattern.com/ # # Adding Plugins to Your Textpattern Installation # http://textpattern.net/wiki/index.php?title=Intermediate_Weblog_Model#Adding_Plugins_to_Your_Textpattern_Installation # .......................................................................... YToxMTp7czo0OiJuYW1lIjtzOjE0OiJ1cG1faW5zZXJ0X3RhYiI7czoxMToiZGVzY3JpcHRp b24iO3M6NDM6IkFsbG93IHRhYiBpbnNlcnRpb24gd2l0aGluIGFkbWluIHRleHRhcmVhcy4i O3M6NzoidmVyc2lvbiI7czozOiIwLjMiO3M6NDoidHlwZSI7aToxO3M6NjoiYXV0aG9yIjtz OjEzOiJNYXJ5IEZyZWRib3JnIjtzOjEwOiJhdXRob3JfdXJpIjtzOjQ4OiJodHRwOi8vdXR0 ZXJwbHVzaC5jb20vdHhwLXBsdWdpbnMvdXBtLWluc2VydC10YWIiO3M6NDoiY29kZSI7czoy NjM0OiJpZiAodHhwaW50ZXJmYWNlID09ICdhZG1pbicpCgl7CgkJYWRkX3ByaXZzKCd1cG1f aW5zZXJ0X3RhYl9qcycsJzEsMiwzLDQsNSw2Jyk7CgoJCXJlZ2lzdGVyX2NhbGxiYWNrKCd1 cG1faW5zZXJ0X3RhYicsICdhcnRpY2xlJyk7CgkJcmVnaXN0ZXJfY2FsbGJhY2soJ3VwbV9p bnNlcnRfdGFiJywgJ2xpbmsnKTsKCQlyZWdpc3Rlcl9jYWxsYmFjaygndXBtX2luc2VydF90 YWInLCAnaW1hZ2UnKTsKCQlyZWdpc3Rlcl9jYWxsYmFjaygndXBtX2luc2VydF90YWInLCAn ZmlsZScpOwoJCXJlZ2lzdGVyX2NhbGxiYWNrKCd1cG1faW5zZXJ0X3RhYicsICdkaXNjdXNz Jyk7CgoJCXJlZ2lzdGVyX2NhbGxiYWNrKCd1cG1faW5zZXJ0X3RhYicsICdwYWdlJyk7CgkJ cmVnaXN0ZXJfY2FsbGJhY2soJ3VwbV9pbnNlcnRfdGFiJywgJ2Zvcm0nKTsKCQlyZWdpc3Rl cl9jYWxsYmFjaygndXBtX2luc2VydF90YWInLCAnY3NzJyk7CgoJCXJlZ2lzdGVyX2NhbGxi YWNrKCd1cG1faW5zZXJ0X3RhYl9qcycsICd1cG1faW5zZXJ0X3RhYl9qcycsICcnLCAxKTsK CX0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KCglmdW5jdGlvbiB1cG1faW5zZXJ0X3RhYigpCgl7CgkJZWNobyBu Lic8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJpbmRleC5waHA/ZXZlbnQ9 dXBtX2luc2VydF90YWJfanMiPjwvc2NyaXB0Pic7Cgl9CgovLyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoJZnVuY3Rp b24gdXBtX2luc2VydF90YWJfanMoKQoJewoJCWhlYWRlcigiQ29udGVudC10eXBlOiB0ZXh0 L2phdmFzY3JpcHQiKTsKCgkJZWNobyA8PDxqcwoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCXZhciBhcmVhcyA9 IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0ZXh0YXJlYScpOwoKCWZvciAodmFy IGkgPSAwOyBpIDwgYXJlYXMubGVuZ3RoOyBpKyspCgl7CgkJaWYgKGRvY3VtZW50LmFsbCkK CQl7CgkJCWFyZWFzW2ldLm9ua2V5ZG93biA9IGZ1bmN0aW9uICgpCgkJCXsKCQkJCXJldHVy biBjYXRjaEtleShldmVudCwgdGhpcyk7CgkJCX07CgoJCQlhcmVhc1tpXS5vbmtleXVwID0g ZnVuY3Rpb24gKCkKCQkJewoJCQkJcmV0dXJuIGNhdGNoS2V5KGV2ZW50LCB0aGlzKTsKCQkJ fTsKCgkJCWFyZWFzW2ldLm9ua2V5cHJlc3MgPSBmdW5jdGlvbiAoKQoJCQl7CgkJCQlyZXR1 cm4gY2F0Y2hLZXkoZXZlbnQsIHRoaXMpOwoJCQl9OwoJCX0KCgkJZWxzZQoJCXsKCQkJYXJl YXNbaV0uc2V0QXR0cmlidXRlKCdvbmtleWRvd24nLCAicmV0dXJuIGNhdGNoS2V5KGV2ZW50 LCB0aGlzKTsiKTsKCQkJYXJlYXNbaV0uc2V0QXR0cmlidXRlKCdvbmtleXVwJywgInJldHVy biBjYXRjaEtleShldmVudCwgdGhpcyk7Iik7CgkJCWFyZWFzW2ldLnNldEF0dHJpYnV0ZSgn b25rZXlwcmVzcycsICJyZXR1cm4gY2F0Y2hLZXkoZXZlbnQsIHRoaXMpOyIpOwoJCX0KCX0K Ci8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KCglmdW5jdGlvbiBpbnNlcnRUYWIob2JqKQoJewoJCWlmIChvYmouc2V0 U2VsZWN0aW9uUmFuZ2UpCgkJewoJCQl2YXIgcyA9IG9iai5zZWxlY3Rpb25TdGFydDsKCQkJ dmFyIGUgPSBvYmouc2VsZWN0aW9uRW5kOwoJCQl2YXIgdCA9IG9iai5zY3JvbGxUb3A7CgoJ CQlvYmoudmFsdWUgPSBvYmoudmFsdWUuc3Vic3RyaW5nKDAsIHMpICsgJ1x1MDAwOScgKyBv YmoudmFsdWUuc3Vic3RyKGUpOwoJCQlvYmouc2V0U2VsZWN0aW9uUmFuZ2UocyArIDEsIHMg KyAxKTsKCgkJCW9iai5mb2N1cygpOwoJCQlvYmouc2Nyb2xsVG9wID0gdDsKCQl9CgoJCWVs c2UgaWYgKG9iai5jcmVhdGVUZXh0UmFuZ2UpCgkJewoJCQlzZWwgPSBkb2N1bWVudC5zZWxl Y3Rpb24uY3JlYXRlUmFuZ2UoKS50ZXh0ID0gJ1x1MDAwOSc7CgkJCW9iai5vbmJsdXIgPSBm dW5jdGlvbigpIHsgdGhpcy5vbmJsdXIgPSBudWxsOyB9OwoJCX0KCX0KCi8vIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K CglmdW5jdGlvbiBjYXRjaEtleShldmVudCwgb2JqKQoJewoJCXZhciBrZXljb2RlID0gKGV2 ZW50LndoaWNoKSA/IGV2ZW50LndoaWNoIDogZXZlbnQua2V5Q29kZTsKCgkJaWYgKGtleWNv ZGUgPT0gOSkKCQl7CgkJCWlmIChldmVudC50eXBlID09ICdrZXlkb3duJykKCQkJewoJCQkJ aW5zZXJ0VGFiKG9iaik7CgoJCQkJaWYgKGV2ZW50LnByZXZlbnREZWZhdWx0KQoJCQkJewoJ CQkJCWV2ZW50LnByZXZlbnREZWZhdWx0KCk7CgkJCQl9CgoJCQkJZWxzZSBpZiAoZXZlbnQu cmV0dXJuVmFsdWUpCgkJCQl7CgkJCQkJZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTsKCQkJ CX0KCQkJfQoKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCgkJaWYgKGtleWNvZGUgPT0gMjcpCgkJ ewoJCQlpZiAoZXZlbnQudHlwZSA9PSAna2V5ZG93bicpCgkJCXsKCQkJCW9iai5ibHVyKCk7 CgkJCX0KCQl9CgoJCXJldHVybiB0cnVlOwoJfQpqczsKCgkJZXhpdCgwKTsKCX0iO3M6NDoi aGVscCI7czo4OTE6ImgxLiB1cG1faW5zZXJ0X3RhYgoKaDIuIEludHJvZHVjdGlvbgoKQWxs b3dzIHlvdSB0byBpbnNlcnQgYSB0YWIgd2l0aGluIGFsbCBidWlsdC1pbiBhZG1pbiBwYWdl IHRleHRhcmVhcywgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZSBwbHVnaW4gZWRpdCBwYWdl LCBhcyBwbHVnaW5zIGFyZSB0dXJuZWQgb2ZmIGZvciB0aGUgcGx1Z2luIHRhYiBhcyBhIHNh ZmV0eSBtZWFzdXJlLgoKT25jZSB0aGUgdGV4dGFyZWEgaGFzIGZvY3VzLCBwcmVzc2luZyB0 aGUgdGFiIGtleSBhY3RzIGxpa2UgYSB0ZXh0IGVkaXRvci4gVG8gImVzY2FwZSIgdGhlIHRl eHRhcmVhIChtYWtlIGl0IGxvc2UgZm9jdXMpLCB5b3UgY2FuIGVpdGhlciBjbGljayB0aGUg bW91c2Ugc29tZXdoZXJlIGVsc2Ugb24gdGhlIHBhZ2UsIG9yIHByZXNzIHRoZSBlc2NhcGUg a2V5IChFc2MpLgoKS25vd24gdG8gd29yayBpbiBJRSA2IGFuZCBGaXJlZm94IDEsIHdvcmtz IHN0cmFuZ2VseSBpbiBPcGVyYSA4IChhbGwgb24gV2luZG93cykuCgpoMi4gUGx1Z2luIERl dmVsb3BlcnMKCklmIHlvdSB3YW50IHRvIGVuYWJsZSB0aGlzIHBsdWdpbiBmb3IgeW91ciBw bHVnaW4tY3JlYXRlZCB0ZXh0YXJlYXMsIHNpbXBseSBhZGQgdGhlIGZvbGxvd2luZyB0byB5 b3VyIHBsdWdpbiB0YWIncyBwYWdlOgoKYmMuIGlmIChmdW5jdGlvbl9leGlzdHMoJ3VwbV9p bnNlcnRfdGFiJykpCnsKCXVwbV9pbnNlcnRfdGFiKCk7Cn0KCklmIHRoZSB1c2VyIGhhcyB0 aGlzIHBsdWdpbiBpbnN0YWxsZWQgYW5kIGFjdGl2YXRlZCwgeW91ciBwbHVnaW4gdGV4dGFy ZWFzIHdpbGwgYWxsb3cgdGFiYmluZy4gSWYgaXQgaXMgbm90LCB0ZXh0YXJlYXMgd2lsbCB3 b3JrIGFzIHRoZXkgbm9ybWFsbHkgZG8sIHdpdGggbm8gZXJyb3JzLiI7czo4OiJoZWxwX3Jh dyI7czo4OTE6ImgxLiB1cG1faW5zZXJ0X3RhYgoKaDIuIEludHJvZHVjdGlvbgoKQWxsb3dz IHlvdSB0byBpbnNlcnQgYSB0YWIgd2l0aGluIGFsbCBidWlsdC1pbiBhZG1pbiBwYWdlIHRl eHRhcmVhcywgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZSBwbHVnaW4gZWRpdCBwYWdlLCBh cyBwbHVnaW5zIGFyZSB0dXJuZWQgb2ZmIGZvciB0aGUgcGx1Z2luIHRhYiBhcyBhIHNhZmV0 eSBtZWFzdXJlLgoKT25jZSB0aGUgdGV4dGFyZWEgaGFzIGZvY3VzLCBwcmVzc2luZyB0aGUg dGFiIGtleSBhY3RzIGxpa2UgYSB0ZXh0IGVkaXRvci4gVG8gImVzY2FwZSIgdGhlIHRleHRh cmVhIChtYWtlIGl0IGxvc2UgZm9jdXMpLCB5b3UgY2FuIGVpdGhlciBjbGljayB0aGUgbW91 c2Ugc29tZXdoZXJlIGVsc2Ugb24gdGhlIHBhZ2UsIG9yIHByZXNzIHRoZSBlc2NhcGUga2V5 IChFc2MpLgoKS25vd24gdG8gd29yayBpbiBJRSA2IGFuZCBGaXJlZm94IDEsIHdvcmtzIHN0 cmFuZ2VseSBpbiBPcGVyYSA4IChhbGwgb24gV2luZG93cykuCgpoMi4gUGx1Z2luIERldmVs b3BlcnMKCklmIHlvdSB3YW50IHRvIGVuYWJsZSB0aGlzIHBsdWdpbiBmb3IgeW91ciBwbHVn aW4tY3JlYXRlZCB0ZXh0YXJlYXMsIHNpbXBseSBhZGQgdGhlIGZvbGxvd2luZyB0byB5b3Vy IHBsdWdpbiB0YWIncyBwYWdlOgoKYmMuIGlmIChmdW5jdGlvbl9leGlzdHMoJ3VwbV9pbnNl cnRfdGFiJykpCnsKCXVwbV9pbnNlcnRfdGFiKCk7Cn0KCklmIHRoZSB1c2VyIGhhcyB0aGlz IHBsdWdpbiBpbnN0YWxsZWQgYW5kIGFjdGl2YXRlZCwgeW91ciBwbHVnaW4gdGV4dGFyZWFz IHdpbGwgYWxsb3cgdGFiYmluZy4gSWYgaXQgaXMgbm90LCB0ZXh0YXJlYXMgd2lsbCB3b3Jr IGFzIHRoZXkgbm9ybWFsbHkgZG8sIHdpdGggbm8gZXJyb3JzLiI7czoxNToiYWxsb3dfaHRt bF9oZWxwIjtpOjA7czozOiJtZDUiO3M6MzI6ImU2OGNhNjNjMzYxYTgyYjU2MzUwZjdiNDY3 NmI2ZDc0Ijt9