Skip to content

Instantly share code, notes, and snippets.

@alirezamirian
alirezamirian / webstorm-markdown-preview-github-style.css
Last active April 13, 2022 21:01
Github markdown theme for webstorm's markdown preview. just use this url in "Settings -> Languages & Frameworks -> Markdown -> Custom CSS -> Load from URI": https://gistcdn.githack.com/alirezamirian/aa06088df9310a4fccccb369a74815ac/raw/3004f7d4d3e1c0263b546aead7310fd8a34d1b12/webstorm-markdown-preview-github-style.css
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial,
sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
font-size: 16px;
line-height: 1.5;
word-wrap: break-word;
color: #24292e;
background-color: #fff;
}
it('should work in controlled mode', () => {
class ControlledUsage extends React.Component<{}, { counter: number, open: boolean }> {
constructor(props) {
super(props);
this.toggle = this.toggle.bind(this);
}
state = {
counter: 0,
open: true,
it('should work when value is controlled but changes are ignored (readonly mode)', () => {
const { clickHeader, isOpen } = mountUsage(<Zippy header={'header'} open={true}/>);
expect(isOpen()).toEqual(true);
clickHeader();
expect(isOpen()).toEqual(true);
clickHeader();
expect(isOpen()).toEqual(true);
});
it('should handle uncontrolled value and change callback', () => {
const onToggleSpy = jest.fn();
const { clickHeader } = mountUsage(<Zippy header={'header'} onToggle={onToggleSpy}/>);
clickHeader();
expect(onToggleSpy).toBeCalledWith(true);
clickHeader();
expect(onToggleSpy).toBeCalledWith(false);
expect(onToggleSpy).toHaveBeenCalledTimes(2);
});
it('should work when neither open state is controlled nor toggle handler is passed', () => {
const { clickHeader, isOpen } = mountUsage();
expect(isOpen()).toBe(false);
clickHeader();
expect(isOpen()).toBe(true);
clickHeader();
expect(isOpen()).toBe(false);
});
@alirezamirian
alirezamirian / useControllableState.test.tsx
Last active February 22, 2019 19:45
For a Medium post
function mountUsage(usage = <Zippy header='header'/>) {
const wrapper = mount(usage);
return {
wrapper,
isOpen: () => wrapper.find('.zippy-content').length > 0,
clickHeader: () => wrapper.find('.zippy-header').simulate('click'),
};
}
interface UsageProps {
value?: number;
changeHandler?: (value: number) => number | void;
}
function Counter({value, changeHandler}: UsageProps) {
const [valueState, setValue] = useControllableState(value, changeHandler, 0);
return <div>
<span className="value">{valueState}</span>
@alirezamirian
alirezamirian / jira-rtl-fix.js
Last active January 5, 2019 11:23
A script to be used in greasemonkey or similar tools to fix rtl issues in jira
// ==UserScript==
// @name jira rtl fix
// @namespace http://tampermonkey.net/
// @version 0.1
// @description fixes rtl issues in jira
// @author Alireza Mirian
// @include /^https?://jira\..*$/
// @grant none
// ==/UserScript==
@alirezamirian
alirezamirian / nested-ui-bootstrap-dropdown.module.js
Last active December 10, 2017 07:54 — forked from sebastianhenneberg/dropdownServicePatch.js
Replaces uibDropdownService of angular-ui/bootstrap to support nested dropdowns
(function () {
'use strict';
/**
* This monkey-patch for the dropdownService enables to nest dropdowns.
* Issue: https://github.com/angular-ui/bootstrap/issues/2421
* PR: https://github.com/angular-ui/bootstrap/pull/3776
*/
class RefController {
constructor($element, $scope, $parse, $attrs){
'ngInject';
const tagName = $attrs.refOf || $attrs.$normalize($element[0].tagName.toLowerCase());
let instance = $element.controller(tagName);
if (!instance && !$attrs.refOf) {
instance = $element;
}
$parse($attrs.ref).assign($scope, instance);
}