├── .appcast.xml
├── .gitignore
├── .images
├── GGradient.gif
└── Main.png
├── GGradient.sketchplugin
└── Contents
│ └── Sketch
│ ├── getgradient.js
│ ├── getgradient.js.map
│ └── manifest.json
├── README.md
├── package-lock.json
└── package.json
/.appcast.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | -
5 |
6 |
7 | -
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # build artifacts
2 | plugin.sketchplugin
3 |
4 | # npm
5 | node_modules
6 | .npm
7 | npm-debug.log
8 |
9 | # mac
10 | .DS_Store
11 |
12 | # WebStorm
13 | .idea
14 |
15 | #src
16 | src
17 |
--------------------------------------------------------------------------------
/.images/GGradient.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/andexds/ggradient/e6f59d85ead71229f113453d576b87abcbcf26f0/.images/GGradient.gif
--------------------------------------------------------------------------------
/.images/Main.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/andexds/ggradient/e6f59d85ead71229f113453d576b87abcbcf26f0/.images/Main.png
--------------------------------------------------------------------------------
/GGradient.sketchplugin/Contents/Sketch/getgradient.js:
--------------------------------------------------------------------------------
1 | var that = this;
2 | function __skpm_run (key, context) {
3 | that.context = context;
4 |
5 | var exports =
6 | /******/ (function(modules) { // webpackBootstrap
7 | /******/ // The module cache
8 | /******/ var installedModules = {};
9 | /******/
10 | /******/ // The require function
11 | /******/ function __webpack_require__(moduleId) {
12 | /******/
13 | /******/ // Check if module is in cache
14 | /******/ if(installedModules[moduleId]) {
15 | /******/ return installedModules[moduleId].exports;
16 | /******/ }
17 | /******/ // Create a new module (and put it into the cache)
18 | /******/ var module = installedModules[moduleId] = {
19 | /******/ i: moduleId,
20 | /******/ l: false,
21 | /******/ exports: {}
22 | /******/ };
23 | /******/
24 | /******/ // Execute the module function
25 | /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
26 | /******/
27 | /******/ // Flag the module as loaded
28 | /******/ module.l = true;
29 | /******/
30 | /******/ // Return the exports of the module
31 | /******/ return module.exports;
32 | /******/ }
33 | /******/
34 | /******/
35 | /******/ // expose the modules object (__webpack_modules__)
36 | /******/ __webpack_require__.m = modules;
37 | /******/
38 | /******/ // expose the module cache
39 | /******/ __webpack_require__.c = installedModules;
40 | /******/
41 | /******/ // define getter function for harmony exports
42 | /******/ __webpack_require__.d = function(exports, name, getter) {
43 | /******/ if(!__webpack_require__.o(exports, name)) {
44 | /******/ Object.defineProperty(exports, name, {
45 | /******/ configurable: false,
46 | /******/ enumerable: true,
47 | /******/ get: getter
48 | /******/ });
49 | /******/ }
50 | /******/ };
51 | /******/
52 | /******/ // define __esModule on exports
53 | /******/ __webpack_require__.r = function(exports) {
54 | /******/ Object.defineProperty(exports, '__esModule', { value: true });
55 | /******/ };
56 | /******/
57 | /******/ // getDefaultExport function for compatibility with non-harmony modules
58 | /******/ __webpack_require__.n = function(module) {
59 | /******/ var getter = module && module.__esModule ?
60 | /******/ function getDefault() { return module['default']; } :
61 | /******/ function getModuleExports() { return module; };
62 | /******/ __webpack_require__.d(getter, 'a', getter);
63 | /******/ return getter;
64 | /******/ };
65 | /******/
66 | /******/ // Object.prototype.hasOwnProperty.call
67 | /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
68 | /******/
69 | /******/ // __webpack_public_path__
70 | /******/ __webpack_require__.p = "";
71 | /******/
72 | /******/
73 | /******/ // Load entry module and return exports
74 | /******/ return __webpack_require__(__webpack_require__.s = "./src/getgradient.js");
75 | /******/ })
76 | /************************************************************************/
77 | /******/ ({
78 |
79 | /***/ "./src/getgradient.js":
80 | /*!****************************!*\
81 | !*** ./src/getgradient.js ***!
82 | \****************************/
83 | /*! exports provided: default */
84 | /***/ (function(module, __webpack_exports__, __webpack_require__) {
85 |
86 | "use strict";
87 | __webpack_require__.r(__webpack_exports__);
88 | /* harmony default export */ __webpack_exports__["default"] = (function (context) {
89 | var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui");
90 |
91 | var options = ['scrim-gradient', 'cubic-bezier', 'ease-out-sine'];
92 | var selection = UI.getSelectionFromUser("Choose type of Gradient", options);
93 | var ok = selection[2];
94 | var index = selection[1];
95 |
96 | if (!ok) {
97 | UI.message("It was incorrect button 🤔");
98 | return;
99 | }
100 |
101 | if (context.selection.length > 1) {
102 | UI.message("Only one shape at a time");
103 | return;
104 | }
105 |
106 | if (context.selection.length < 1) {
107 | UI.message("You must selected shape");
108 | return;
109 | }
110 |
111 | var selected = context.selection[0];
112 | var color = selected.style().fills()[0].color().immutableModelObject().stringValueWithAlpha(true);
113 | var style = selected.style().addStylePartOfType(0);
114 | style.isEnabled = true;
115 | style.setFillType(1);
116 | var gradient = style.gradient();
117 | var r = hexToRgb(color).r;
118 | var g = hexToRgb(color).g;
119 | var b = hexToRgb(color).b;
120 | var sketchStopArray = [];
121 |
122 | switch (index) {
123 | case 0:
124 | {
125 | sketchStopArray.push(makeStop([r, g, b, 0], 1));
126 | sketchStopArray.push(makeStop([r, g, b, 0.002], 0.982));
127 | sketchStopArray.push(makeStop([r, g, b, 0.008], 0.952));
128 | sketchStopArray.push(makeStop([r, g, b, 0.021], 0.91));
129 | sketchStopArray.push(makeStop([r, g, b, 0.042], 0.861));
130 | sketchStopArray.push(makeStop([r, g, b, 0.075], 0.802));
131 | sketchStopArray.push(makeStop([r, g, b, 0.126], 0.73));
132 | sketchStopArray.push(makeStop([r, g, b, 0.194], 0.65));
133 | sketchStopArray.push(makeStop([r, g, b, 0.278], 0.565));
134 | sketchStopArray.push(makeStop([r, g, b, 0.382], 0.47));
135 | sketchStopArray.push(makeStop([r, g, b, 0.541], 0.34));
136 | sketchStopArray.push(makeStop([r, g, b, 0.738], 0.19));
137 | sketchStopArray.push(makeStop([r, g, b, 1], 0));
138 | break;
139 | }
140 |
141 | case 1:
142 | {
143 | sketchStopArray.push(makeStop([r, g, b, 0], 1));
144 | sketchStopArray.push(makeStop([r, g, b, 0.01457], 0.912));
145 | sketchStopArray.push(makeStop([r, g, b, 0.05882], 0.826));
146 | sketchStopArray.push(makeStop([r, g, b, 0.12126], 0.752));
147 | sketchStopArray.push(makeStop([r, g, b, 0.19309], 0.687));
148 | sketchStopArray.push(makeStop([r, g, b, 0.2693], 0.628));
149 | sketchStopArray.push(makeStop([r, g, b, 0.34817], 0.572));
150 | sketchStopArray.push(makeStop([r, g, b, 0.42866], 0.517));
151 | sketchStopArray.push(makeStop([r, g, b, 0.50925], 0.462));
152 | sketchStopArray.push(makeStop([r, g, b, 0.58891], 0.406));
153 | sketchStopArray.push(makeStop([r, g, b, 0.66692], 0.348));
154 | sketchStopArray.push(makeStop([r, g, b, 0.7426], 0.287));
155 | sketchStopArray.push(makeStop([r, g, b, 0.81522], 0.222));
156 | sketchStopArray.push(makeStop([r, g, b, 0.88294], 0.153));
157 | sketchStopArray.push(makeStop([r, g, b, 0.94505], 0.079));
158 | sketchStopArray.push(makeStop([r, g, b, 1], 0));
159 | break;
160 | }
161 |
162 | case 2:
163 | {
164 | sketchStopArray.push(makeStop([r, g, b, 0], 1));
165 | sketchStopArray.push(makeStop([r, g, b, 0.011], 0.906));
166 | sketchStopArray.push(makeStop([r, g, b, 0.042], 0.814));
167 | sketchStopArray.push(makeStop([r, g, b, 0.089], 0.729));
168 | sketchStopArray.push(makeStop([r, g, b, 0.147], 0.65));
169 | sketchStopArray.push(makeStop([r, g, b, 0.213], 0.577));
170 | sketchStopArray.push(makeStop([r, g, b, 0.283], 0.509));
171 | sketchStopArray.push(makeStop([r, g, b, 0.357], 0.445));
172 | sketchStopArray.push(makeStop([r, g, b, 0.433], 0.384));
173 | sketchStopArray.push(makeStop([r, g, b, 0.511], 0.325));
174 | sketchStopArray.push(makeStop([r, g, b, 0.591], 0.268));
175 | sketchStopArray.push(makeStop([r, g, b, 0.672], 0.213));
176 | sketchStopArray.push(makeStop([r, g, b, 0.753], 0.159));
177 | sketchStopArray.push(makeStop([r, g, b, 0.834], 0.106));
178 | sketchStopArray.push(makeStop([r, g, b, 0.917], 0.053));
179 | sketchStopArray.push(makeStop([r, g, b, 1], 0));
180 | break;
181 | }
182 | }
183 |
184 | gradient.setStops(sketchStopArray);
185 | UI.message("That's great 🔥");
186 | selected.style().fills().splice(0, 1);
187 | });
188 |
189 | function makeColor(c) {
190 | return MSImmutableColor.colorWithRed_green_blue_alpha(c[0] / 255, c[1] / 255, c[2] / 255, c[3]).newMutableCounterpart();
191 | }
192 |
193 | function makeStop(color, position) {
194 | return MSGradientStop.stopWithPosition_color_(position, makeColor(color));
195 | }
196 |
197 | function hexToRgb(hex) {
198 | var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
199 | return result ? {
200 | r: parseInt(result[1], 16),
201 | g: parseInt(result[2], 16),
202 | b: parseInt(result[3], 16)
203 | } : null;
204 | }
205 |
206 | /***/ }),
207 |
208 | /***/ "sketch/ui":
209 | /*!****************************!*\
210 | !*** external "sketch/ui" ***!
211 | \****************************/
212 | /*! no static exports found */
213 | /***/ (function(module, exports) {
214 |
215 | module.exports = require("sketch/ui");
216 |
217 | /***/ })
218 |
219 | /******/ });
220 | if (key === 'default' && typeof exports === 'function') {
221 | exports(context);
222 | } else {
223 | exports[key](context);
224 | }
225 | }
226 | that['onRun'] = __skpm_run.bind(this, 'default')
227 |
228 | //# sourceMappingURL=getgradient.js.map
--------------------------------------------------------------------------------
/GGradient.sketchplugin/Contents/Sketch/getgradient.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/getgradient.js","webpack://exports/external \"sketch/ui\""],"names":["context","UI","require","options","selection","getSelectionFromUser","ok","index","message","length","selected","color","style","fills","immutableModelObject","stringValueWithAlpha","addStylePartOfType","isEnabled","setFillType","gradient","r","hexToRgb","g","b","sketchStopArray","push","makeStop","setStops","splice","makeColor","c","MSImmutableColor","colorWithRed_green_blue_alpha","newMutableCounterpart","position","MSGradientStop","stopWithPosition_color_","hex","result","exec","parseInt"],"mappings":"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","file":"getgradient.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/getgradient.js\");\n","export default function(context) {\n const UI = require('sketch/ui')\n\n var options = [\n 'scrim-gradient',\n 'cubic-bezier',\n 'ease-out-sine',\n ]\n var selection = UI.getSelectionFromUser(\"Choose type of Gradient\", options)\n\n var ok = selection[2]\n var index = selection[1]\n if (!ok) {\n UI.message(\"It was incorrect button 🤔\")\n return\n }\n if (context.selection.length > 1) {\n UI.message(\"Only one shape at a time\")\n return\n }\n if (context.selection.length < 1) {\n UI.message(\"You must selected shape\")\n return\n }\n\n const selected = context.selection[0]\n const color = selected.style().fills()[0].color().immutableModelObject().stringValueWithAlpha(true);\n const style = selected.style().addStylePartOfType(0);\n\n style.isEnabled = true;\n style.setFillType(1);\n const gradient = style.gradient()\n\n let r = hexToRgb(color).r\n let g = hexToRgb(color).g\n let b = hexToRgb(color).b\n\n var sketchStopArray = []\n\n switch (index) {\n case 0: {\n sketchStopArray.push(makeStop([r, g, b, 0], 1))\n sketchStopArray.push(makeStop([r, g, b, 0.002], 0.982))\n sketchStopArray.push(makeStop([r, g, b, 0.008], 0.952))\n sketchStopArray.push(makeStop([r, g, b, 0.021], 0.91))\n sketchStopArray.push(makeStop([r, g, b, 0.042], 0.861))\n sketchStopArray.push(makeStop([r, g, b, 0.075], 0.802))\n sketchStopArray.push(makeStop([r, g, b, 0.126], 0.73))\n sketchStopArray.push(makeStop([r, g, b, 0.194], 0.65))\n sketchStopArray.push(makeStop([r, g, b, 0.278], 0.565))\n sketchStopArray.push(makeStop([r, g, b, 0.382], 0.47))\n sketchStopArray.push(makeStop([r, g, b, 0.541], 0.34))\n sketchStopArray.push(makeStop([r, g, b, 0.738], 0.19))\n sketchStopArray.push(makeStop([r, g, b, 1], 0))\n break\n }\n case 1: {\n sketchStopArray.push(makeStop([r, g, b, 0], 1))\n sketchStopArray.push(makeStop([r, g, b, 0.01457], 0.912))\n sketchStopArray.push(makeStop([r, g, b, 0.05882], 0.826))\n sketchStopArray.push(makeStop([r, g, b, 0.12126], 0.752))\n sketchStopArray.push(makeStop([r, g, b, 0.19309], 0.687))\n sketchStopArray.push(makeStop([r, g, b, 0.2693], 0.628))\n sketchStopArray.push(makeStop([r, g, b, 0.34817], 0.572))\n sketchStopArray.push(makeStop([r, g, b, 0.42866], 0.517))\n sketchStopArray.push(makeStop([r, g, b, 0.50925], 0.462))\n sketchStopArray.push(makeStop([r, g, b, 0.58891], 0.406))\n sketchStopArray.push(makeStop([r, g, b, 0.66692], 0.348))\n sketchStopArray.push(makeStop([r, g, b, 0.7426], 0.287))\n sketchStopArray.push(makeStop([r, g, b, 0.81522], 0.222))\n sketchStopArray.push(makeStop([r, g, b, 0.88294], 0.153))\n sketchStopArray.push(makeStop([r, g, b, 0.94505], 0.079))\n sketchStopArray.push(makeStop([r, g, b, 1], 0))\n break\n }\n case 2: {\n sketchStopArray.push(makeStop([r, g, b, 0], 1))\n sketchStopArray.push(makeStop([r, g, b, 0.011], 0.906))\n sketchStopArray.push(makeStop([r, g, b, 0.042], 0.814))\n sketchStopArray.push(makeStop([r, g, b, 0.089], 0.729))\n sketchStopArray.push(makeStop([r, g, b, 0.147], 0.65))\n sketchStopArray.push(makeStop([r, g, b, 0.213], 0.577))\n sketchStopArray.push(makeStop([r, g, b, 0.283], 0.509))\n sketchStopArray.push(makeStop([r, g, b, 0.357], 0.445))\n sketchStopArray.push(makeStop([r, g, b, 0.433], 0.384))\n sketchStopArray.push(makeStop([r, g, b, 0.511], 0.325))\n sketchStopArray.push(makeStop([r, g, b, 0.591], 0.268))\n sketchStopArray.push(makeStop([r, g, b, 0.672], 0.213))\n sketchStopArray.push(makeStop([r, g, b, 0.753], 0.159))\n sketchStopArray.push(makeStop([r, g, b, 0.834], 0.106))\n sketchStopArray.push(makeStop([r, g, b, 0.917], 0.053))\n sketchStopArray.push(makeStop([r, g, b, 1], 0))\n break\n }\n\n }\n\n gradient.setStops(sketchStopArray)\n\n UI.message(\"That's great 🔥\")\n selected.style().fills().splice(0,1)\n}\n\nfunction makeColor(c) {\n return MSImmutableColor.colorWithRed_green_blue_alpha(\n c[0] / 255,\n c[1] / 255,\n c[2] / 255,\n c[3]\n ).newMutableCounterpart()\n}\n\nfunction makeStop(color, position) {\n return MSGradientStop.stopWithPosition_color_(position, makeColor(color))\n}\n\nfunction hexToRgb(hex) {\n var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16)\n } : null;\n}\n","module.exports = require(\"sketch/ui\");"],"sourceRoot":""}
--------------------------------------------------------------------------------
/GGradient.sketchplugin/Contents/Sketch/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "GGradient",
3 | "identifier": "com.andexds.ggradient",
4 | "description": "Perfect Gradient",
5 | "authorEmail": "andexds@gmail.com",
6 | "author": "Andrey Anashkin",
7 | "compatibleVersion": 3,
8 | "bundleVersion": 1,
9 | "icon": "icon.png",
10 | "commands": [
11 | {
12 | "script": "getgradient.js",
13 | "shortcut": "ctrl shift g",
14 | "name": "Get Gradient",
15 | "identifier": "andexds.getgradient"
16 | }
17 | ],
18 | "version": "0.4.0",
19 | "disableCocoaScriptPreprocessor": true,
20 | "appcast": "https://raw.githubusercontent.com/andex/ggradient/master/.appcast.xml"
21 | }
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # GGradient
2 |
3 |
4 |
5 |
6 |
7 | 
8 |
9 |
10 | # Download GGradient Plugin
11 |
12 |
13 | Double click the downloaded file (*GGradient.sketchplugin*) to install it.
14 |
15 | ## Hot key
16 |
17 | Use CMD+SHIFT+G
18 |
19 | ## Do you like the plugin?
20 |
21 | **If you are using this plugin, please 'star' this project**. It's a simple way for me to be able to see how many people are using this, and how much effort I need to put into improving it further.
22 |
23 | If you ***love*** this plugin, why not shout me a coffee ☕️ via [PayPal](https://paypal.me/andexds/3) to share the love!
24 | It will definitely help me to be able to support this plugin further.
25 |
26 |
27 | ☕️ Shout me a coffee
28 |
29 |
30 | Follow me on https://www.facebook.com/andexds
31 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "GGradient",
3 | "version": "0.6.0",
4 | "description": "Simple way to create perfect gradient",
5 | "engines": {
6 | "sketch": ">=4.0"
7 | },
8 | "skpm": {
9 | "name": "GGradient",
10 | "manifest": "src/manifest.json",
11 | "main": "GGradient.sketchplugin",
12 | "assets": [
13 | "assets/**/*"
14 | ]
15 | },
16 | "scripts": {
17 | "build": "skpm-build",
18 | "watch": "skpm-build --watch",
19 | "start": "skpm-build --watch --run",
20 | "postinstall": "npm run build && skpm-link"
21 | },
22 | "devDependencies": {
23 | "@skpm/builder": "^0.5.2"
24 | },
25 | "repository": {
26 | "type": "git",
27 | "url": "https://github.com/andex/ggradient.git"
28 | }
29 | }
30 |
--------------------------------------------------------------------------------