Skip to content

Instantly share code, notes, and snippets.

View gaogao-9's full-sized avatar

がお gaogao-9

  • えいえんのじゅうはっさい管理組合
  • がお星
View GitHub Profile
@gaogao-9
gaogao-9 / asyncEvent.js
Last active March 21, 2016 02:28
イベントを賢く捌くPromiseの話
const eventMap = new WeakMap();
const asyncOnSymbol = Symbol("asyncOn");
const asyncOffSymbol = Symbol("asyncOff");
function asyncOn(type, asyncFunc, useCapture){
const undefined = void 0;
if(eventMap.has(asyncFunc)) return;
return new Promise((resolve, reject)=>{
@gaogao-9
gaogao-9 / index.html
Last active March 27, 2016 16:20
動作未確認です
<!DOCTYPE html>
<html lang="ja">
<head>
<!-- 省略 -->
<script src="widget.js"></script>
<script src="index.js"></script>
</head>
</html>
function milkbox(uri){
// 文字列としてエレメントを定義
var eleStr = function(){/*
<div id="milkbox_body" class="milk_wrap">
<div class="milkbox_container">
<div class="milkbox_content">
<img src="CONTENT_URI">
<div class="milkbox_button">x</div>
<div id="loader_id" class="loader">
<img src="img/load.gif">
@gaogao-9
gaogao-9 / CanvasRenderingContext2D.js
Created June 9, 2016 19:09
キャンバスのやつ
const drawHueCircle = Symbol("drawHueCircle");
const drawSVRect = Symbol("drawSVRect");
Object.defineProperties(CanvasRenderingContext2D.prototype, {
[drawHueCircle]: {
value(x, y, rIn, rOut, splitNum=180){
// 描画半径を計算で求める
const r = 2 * rOut;
// 直前のスタイル情報のバックアップ
const oldStrokeStyle = this.strokeStyle;
//RGBの情報から、HSVの情報を得る汎用メソッド
//「http://p.tl/YDI3」のJavaソースコードをJSに移植しただけです。
function GetHSVColorByRGBColor(rgb){
var hue,saturation,value;
var max = Math.max(rgb.r,rgb.g,rgb.b);
var min = Math.min(rgb.r,rgb.g,rgb.b);
//hue
if(max == min){
hue = 0;
@gaogao-9
gaogao-9 / stableSort.js
Last active July 2, 2016 22:35
多分これが一番早いと思います。-0と+0の安定ソートは出来ません。
function stableSort(arr, callback){
var indexMap = new Map(null);
for(var i=0;i<arr.length;i++){
indexMap.set(arr[i], i);
}
var result;
arr.sort(function compare(a, b){
result = (callback) ? callback(a, b) : false;
@gaogao-9
gaogao-9 / ICloneable.js
Last active July 3, 2016 03:14
クラスの複製デザパタです
class Human{
constructor(name, age){
this.name = name;
this.age = age;
}
static clone(obj){ return new this(obj.name, obj.age); }
}
class Woman extends Human{}
@gaogao-9
gaogao-9 / Awaiter.js
Last active July 28, 2016 08:30
非同期メソッドチェーンのmixinです。
const queue = Symbol("queue");
const sync = Symbol("sync");
const createAwaiter = Symbol("createAwaiter");
const addQueue = Symbol("addQueue");
const syncMethods = Symbol("syncMethods");
const Awaiter = ((Base)=> {
class Awaiter extends Base{
constructor(...args){
super(...args);
@gaogao-9
gaogao-9 / 00.Gaobservable.js
Last active July 17, 2016 07:40
ObservableはESと干渉しそうなので、仮名としてGaobservableにしました。
"use strict";
const resolverSymbol = Symbol("resolver");
const notifierListSymbol = Symbol("notifierList");
const cancelSymbol = Symbol("cancel");
class Gaobservable{
constructor(resolver){
if(typeof(resolver) !== "function") throw new TypeError(`Gaobservable resolver ${resolver} is not a function`);
function consume(reader, length) {
var total = 0;
return (function pump() {
console.log(`${total} / ${length}`);
return reader.read().then(function(args) {
if (!args.done) {
total += args.value.byteLength;
return pump();
}