Skip to content

Instantly share code, notes, and snippets.

@birowo
birowo / rtecararangeselection.html
Last active December 17, 2018 07:06
javascript rich text editor menggunakan teknik range selection, sudah dicoba di browser firefox
<html>
<head></head>
<body>
<button onclick="styl3('B')">bold</button> <button onclick="styl3('U')">underline</button> <button onclick="styl3('I')">italic</button> <button onclick="styl3('S')">strikethrough</button> <button onclick="hist.undo(frames['rte'].document.body)">undo</button> <button onclick="hist.redo(frames['rte'].document.body)">redo</button><br>
<iframe name="rte" src="about:blank" style="border:1px solid gray"></iframe>
<script>
var hist=(function(){
var i=0, hist=[];
return {
save: function(r00t){
@birowo
birowo / async_promise_co.js
Last active September 13, 2016 05:56
transformasi dari koding gaya normal/procedural/synchronous ,menjadi gaya koding async/callback-hell ,menjadi gaya koding promise/method(dari obyek promise) chaining ,& balik lagi menjadi koding gaya normal/procedural/synchronous tapi di dalam co
'use strict';
/* implementasi readFile async menjadi promise */
function readFilePromise(file, jenis){
return new Promise((terima, tolak)=>{
readFile(file, jenis, (salah, hasil)=>{
if(salah) return tolak(salah);
terima(hasil);
});
});
}
@birowo
birowo / cobaasyncawait.js
Last active September 16, 2016 02:43
percobaan async/await untuk mengetahui kode bagian mana yang dijalankan secara paralel & mana yang secara serial
/* https://gist.github.com/birowo/06026a6c42a9356bfac1f6b7f9915453 */
/*percobaan async/await untuk mengetahui kode bagian mana yang dijalankan secara paralel & mana yang secara serial*/
/*untuk lebih meyakinkan kesimpulan dari hasil percobaan di contoh ini saya pakai akses webserver / http get rekues & bukan pakai read file system karena di http get, lama proses akses bisa diatur di sisi webserver yang kita buat sendiri*/
'use strict';
const rute={/*rute: url(pathname) to it's handler mapping*/
'/test': (rekues, respon)=>{
const kueri=rekues.kueri;
//rekues.destroy();
respon.htm(JSON.stringify(kueri));
},
@birowo
birowo / ajaxdigenerator.html
Last active September 17, 2016 06:08
percobaan generator function(sudah standard ES6), misal dipakai untuk menentukan apakah fungsi async(di contoh ini ajax) dieksekusi secara sync/serial atau async/paralel
<!--percobaan generator function(sudah standard ES6), misal dipakai untuk menentukan apakah fungsi async(di contoh ini ajax) dieksekusi secara sync/serial atau async/paralel-->
<!--perhatikan belum semua browser support : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Generator ,saya coba pakai FF ver. 48 -->
<html>
<head></head>
<body>
<div><input id="respon1" readonly></div>
<div><input id="respon2" readonly></div>
<div><input id="respon3" readonly></div>
<div><input id="respon4" readonly></div>
<div><input id="respon5" readonly></div>
@birowo
birowo / ajaximg.php
Last active October 16, 2016 11:35
post image base64 pakai ajax
<?php
//ajaximg.php
if(!empty($_POST)){
$imgid=uniqid('img');
$img=base64_decode(str_replace(' ', '+', $_POST['imgB64']));
$size=file_put_contents($imgid, $img);
echo "[\"$size\",\"$imgid\"]";
die();
}
?>
@birowo
birowo / svr.php
Last active October 22, 2016 05:16
mensimulasikan ajax cross domain dengan iframe (revisi ada di: https://gist.github.com/birowo/484d94886aa2a6b095d55c12fbf00983)
<?php
if('localhost'==$_SERVER['HTTP_HOST']){
if(empty($_GET['proxy'])){
?>
<iframe src="javascript:" name="crossdomain" style="display:none"></iframe>
<form method="POST" action="http://127.0.0.1/svr.php" target="crossdomain">
kata: <textarea name="kata"></textarea><br>
@birowo
birowo / proxy.html
Created October 22, 2016 05:12
mensimulasikan ajax crossdomain dengan iframe (revisi dari https://gist.github.com/birowo/c7d3e5f3f4d496911c8cfc8697840b01) supaya lebih mudah dipahami
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="content-type" content="text/html" />
<title></title>
</head>
<body>
<script>
function respon(callback){
var oldVal='';
@birowo
birowo / get_ip.php
Last active October 31, 2016 13:20
mencegah serangan ddos(di contoh ini terhadap akses gambar). siapkan gambar jpeg & namai [secretcode]cobaimg.jpg(ganti [secretcode] dengan kode rahasia yang sebenarnya) di folder yang sama dengan skrip berikut kemudian akses http://localhost/noddos.php . gambar cobaimg.jpg hanya bisa diakses dari <img src="img.php?src=cobaimg.jpg"> ditampilkan d…
<?php
//https://www.chriswiegman.com/2014/05/getting-correct-ip-address-php/
function get_ip() {
//Just get the headers if we can or else use the SERVER global
if ( function_exists( 'apache_request_headers' ) ) {
$headers = apache_request_headers();
} else {
@birowo
birowo / longpoll.js
Last active November 10, 2016 13:22
NODE.JS : contoh skrip broadcast message dengan ajax longpoll . jalankan: >node longpoll kemudian akses http://localhost sebaiknya coba dengan 2/lebih browser yang berbeda. ajax longpoll dengan cluster : https://gist.github.com/birowo/fc047022155d9229a35a785eb3d9cc81 ada perubahan kode dari longpoll.js ini
'use strict';
const longpoll = [];
const rute = {
notfound: function(rekues, respon){
respon.writeHead(404, {'Content-Type': 'text/html; charset=UTF-8'});
respon.end('tidak ditemukan');
},
'/': function(rekues, respon){
@birowo
birowo / longpoll.js
Last active November 10, 2016 14:28
ajax longpoll dengan cluster. jalankan: >node longpollcluster akses: http://localhost dari browser
'use strict';
const rute = {
notfound: function(rekues, respon){
respon.writeHead(404, {'Content-Type': 'text/html; charset=UTF-8'});
respon.end('tidak ditemukan');
},
'/': function(rekues, respon){
respon.writeHead(200, {'Content-Type': 'text/html; charset=UTF-8'});
respon.end(`