Skip to content

Instantly share code, notes, and snippets.

View gaogao-9's full-sized avatar

がお gaogao-9

  • えいえんのじゅうはっさい管理組合
  • がお星
View GitHub Profile
documentReady()
.then(loopDfd([initXxxDB, xxxDBReady], xxxDBError))
.then(xxxTask)
.fail(uncaughtError);
// deferredがresolveされるまで、restartCallbackを挟みながら処理を繰り返すメソッド。
// 第一引数には配列もしくは配列を返す関数を渡すことが出来る。
function loopDfd(actorDfdList, restartCallback){
if(typeof(actorDfdList) === "function") actorDfdList = actorDfdList();
'use strict';
/**
* 画像を非同期で読み込む関数
* @param {string} source - 画像URL
* @return {Promise} Imageをthenコールバックの第1引数として渡すPromise
*/
function loadImageAsync(source)
{
return new Promise((resolve, reject) => {
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();
}
@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`);
@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 / 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 / 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;
//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 / 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;
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">