NUI-magick

a web nodal user interface (NUI) to ImageMagick via busybox httpd's cgi - retour accueil

Anonyme, en lecture seule : git clone git://bebou.netlib.re/NUI-magick
Authentifié·e, en écriture : git clone ssh://git@bebou.netlib.re:1459/srv/git/NUI-magick

Log | Files | Refs | zip | tar.gz |

ModeNameSize
-rw-r--r--.gitignore3L
-rw-r--r--PATCH.diff63L
-rwxr-xr-xcgi-bin/is_there.sh42L
-rwxr-xr-xcgi-bin/run.sh30L
-rw-r--r--doc/eg.json59L
-rw-r--r--doc/imports/convert.php1563L
-rwxr-xr-xdoc/imports/convert.sh12L
-rw-r--r--doc/readme7L
-rw-r--r--doc/schema.json0B
-rw-r--r--doc/zenu.json0B
-rw-r--r--fonts/APL333.ttf154080B
-rw-r--r--idées3L
-rw-r--r--illu63L
-rw-r--r--index.html64L
-rw-r--r--lib/CGIRun.js7L
-rw-r--r--lib/NUI.js190L
-rw-r--r--lib/NUI.js.rej13L
-rw-r--r--lib/NUIExec.js95L
-rw-r--r--lib/NUIcamera.js29L
-rw-r--r--lib/NUIcamera.js.rej7L
-rw-r--r--lib/URLMagick.js47L
-rw-r--r--lib/zenu.js54L
-rw-r--r--lib/zenu.js.rej23L
-rw-r--r--manifest.scm3L
-rw-r--r--nodes/blur/index.html6L
-rw-r--r--nodes/composite/index.html10L
-rw-r--r--nodes/composite/main.js42L
-rw-r--r--nodes/didder/index.html12L
-rw-r--r--nodes/didder/main.js34L
-rw-r--r--nodes/download/index.html3L
-rw-r--r--nodes/download/main.js11L
-rw-r--r--nodes/fancy/index.html1L
-rw-r--r--nodes/fancy/main.css1L
-rw-r--r--nodes/gradient/index.html10L
-rw-r--r--nodes/gradient/main.js46L
-rw-r--r--nodes/manifest.json7L
-rw-r--r--nodes/primitive/index.html18L
-rw-r--r--nodes/primitive/main.css8L
-rw-r--r--nodes/primitive/main.js65L
-rw-r--r--nodes/resize/index.html6L
-rw-r--r--nodes/resize/main.js14L
-rw-r--r--nodes/scale/index.html11L
-rw-r--r--nodes/scale/main.js14L
-rw-r--r--nodes/sequence/index.html17L
-rw-r--r--nodes/sequence/main.css5L
-rw-r--r--nodes/sequence/main.js48L
-rw-r--r--nodes/shell/index.html7L
-rw-r--r--nodes/shell/main.js19L
-rw-r--r--nodes/slider/index.html4L
-rw-r--r--nodes/slider/main.js11L
-rw-r--r--nodes/source/index.html4L
-rw-r--r--nodes/source/main.js13L
-rw-r--r--nodes/textarea/index.html13L
-rw-r--r--nodes/textarea/main.js34L
-rw-r--r--nodes/upload/index.html4L
-rw-r--r--nodes/upload/main.js34L
-rw-r--r--nodes/write-html/index.html12L
-rw-r--r--nodes/write-html/main.js35L
-rw-r--r--patch1.diff92L
-rwxr-xr-xstart.sh13L
-rw-r--r--start.sh.rej16L
-rw-r--r--style.css120L
-rw-r--r--style.css.rej12L
-rw-r--r--vendor/cssVarFilledCookies.css83L
-rw-r--r--vendor/cssVarFilledCookies.js188L
-rw-r--r--vendor/leader-line.min.js2L
-rw-r--r--vendor/plain-draggable.min.js2L
-rw-r--r--zenu-options.json75L

README (4927B)


      1 escapeHTML() {
      2 cat | sed -E '
      3 	s	<	\&lt;		g
      4 	s	>	\&gt;		g
      5 	s	^(    ..\t)(#.*)	\1<span style="opacity:.5">\2</span>	g
      6 	s	^    (..)	<span style="opacity:.5">\1</span>		g
      7 	'
      8 	
      9 }
     10 escapeHTML << README
     11                                       ┌─preview────────┐
     12                                    ┌─>• ██████████████ │
     13                                    │  │ ██          ██ │
     14      quelque chose comme ça        │  │ ██  hello   ██ │
     15                                    │  │ ██          ██ │
     16                                    │  │ ██████████████ │
     17  ┌─primitive─┐                     │  └────────────────┘
     18  │  couleur  •─┐  ┌─command───────┐│       ┌─command────┐  ┌─output──────┐
     19  └───────────┘ │  ○  magick       •┴───┬──>•  magick    •─>•   name.png  │
     20  ┌─primitive─┐ │  │               │    │   │            │  └─────────────┘
     21  │  couleur  •┐└──•  -background  │┌───│──>•  -crop     │
     22  └───────────┘├──>•  -fill        ││   │   │  +repage   │
     23  ┌─primitive─┐└──>•  -bordercolor ││   │   │   (+)      │
     24  │  string   •───>•  -font        ││   │   └────────────┘
     25  └───────────┘ ┌─>•  -size        ││   │  ┌─histogram──────┐
     26  ┌─primitive─┐ │┌>•  -…………        ││   └─>•│              ││
     27  │  geometry •─┘│ │   (+)         ││      │││  │   │    ││││
     28  └───────────┘  │ └───────────────┘│      ││││││││││││││││││
     29  ┌─primitive─┐  │     ┌─primitive─┐│      └────────────────┘
     30  │  geometry •──┘     │  geometry •┘
     31  └───────────┘        └───────────┘ 
     32 
     33 ./NodeMagick.sh lance un serveur web avec busybox httpd et ouvre un navigateur
     34 
     35 Dépendances
     36 ˙˙˙˙˙˙˙˙˙˙˙
     37 ImageMagick > 6
     38 busybox httpd
     39 Javascript
     40 	leaderline → vendor/leader-line.min.js (100ko)
     41 	plaindraggable → vendor/plain-draggable.min.js (36ko)
     42 
     43 Nomenclature
     44 ˙˙˙˙˙˙˙˙˙˙˙˙
     45 magick → nœud qui envoie la commande, contient des options
     46 option → nœud qui contient une option, contient des valeurs
     47 value → nœud qui contient une valeur typée
     48 
     49 data-uuid → uuid d'un nœud
     50 data-from → pointeur vers l'uuid d'un nœud
     51 data-to   → pointeur vers l'uuid d'un nœud
     52 
     53 DOM
     54 ˙˙˙
     55 <body>
     56 
     57 	<main>
     58 		<magick data-uuid="hello-1" data-from="" data-to="">
     59 			<ol>
     60 				<option data-uuid="hello-2">
     61 					<val data-from="hello-3" data-to=""></val>
     62 				</option>
     63 				<option data-from="hello-4"></option>
     64 			</ol>
     65 			<viewer>
     66 				<nav>zoom, code d'erreur…</nav>
     67 				<img src="/img/hello-1-name" alt="commande magick">
     68 				<identify></identify>
     69 			</viewer>
     70 		</magick>
     71 
     72 		<val data-uuid="hello-3">20x20</val>
     73 		<option data-uuid="hello-4"></option>
     74 	</main>
     75 
     76 	<history></history>
     77 	<log></log>
     78 	<shell-representation></shell-representation>
     79 </body>
     80 
     81 Versionage
     82 ˙˙˙˙˙˙˙˙˙˙
     83 L'uuid d'un nœud est le nom du plan de travail et
     84 l'incrémentation de la variable globale I.
     85 
     86 La source de vérité de l'état est le __dom__
     87 Pour tout changement d'état % debounce() → <history> += url
     88 
     89 État dans l'url
     90 ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙
     91 ?date=…&name=…&nodes=document.querySelectorAll('main')
     92 
     93 À faire
     94 ˙˙˙˙˙˙˙
     95 grep "TODO":
     96 $(rg -g "!$0" TODO | sed -E '
     97 		s@<@\&lt;@g; s@>@\&gt;@g;
     98 		s@(.*):(.*)@\1: \2@g;
     99 	')
    100 
    101 poc
    102 	[x] générer une image depuis un input
    103 	[x] interfacer stdin/stdout
    104 	[x] actualiser la source avec un ?timestamp
    105 	[x] actualiser magick identify
    106 	[ ] awk histogramme
    107 	[ ] brancher cssvarfilledcookies -> Fait dans drafts/front-end
    108 
    109 
    110 [ ] <magick></magick>
    111 	[ ] draggable des options dedans et en dehors de <magick>
    112 	[x] toggle zoomer l'image
    113 	[x] toggle échantillonage (ma prorpriété css pref ❤)
    114 	[x] lire \$?
    115 	[ ] dessiner un histogramme
    116 [ ] intégrer l'interface drafts/front-end
    117 [ ] <history></history> → martin
    118 	[ ] lors d'un changement d'état, push dans un localstorage stateStack[]
    119 	[ ] formater en url
    120 
    121 plus tard
    122 	[ ] brancher d'autres outils de traitement d'image : jp2a/ascii-image-converter, didder
    123 	[ ] systèmes de lindenmayer
    124 	[ ] brancher du shell
    125 	[ ] permettre des boucles sur |un entier|un dossier|une EXPRAT(^^)|…
    126 
    127 se mettre d'accord sur :
    128 	[ ] paradigme
    129 	[ ] spec, graph orienté ?
    130 	[ ] source de vérité entre le dom | l'url | la requête | le localStorage
    131 
    132 README
README - NUI-magick - a web nodal user interface (NUI) to ImageMagick via busybox httpd's cgi

NUI-magick

a web nodal user interface (NUI) to ImageMagick via busybox httpd's cgi - retour accueil

git clone git://bebou.netlib.re/NUI-magick

Log | Files | Refs | README |

README (6271B)


      1 # Front-End pour NUI-magick (ou autre nom)
      2 
      3 Une interface nodale (mignonne?) intuitive pour construire des commandes ImageMagick
      4 
      5 DONE:
      6 
      7 - Templates pour les noeuds
      8 - Changer boutons pour créer éléments custom dans template
      9 - Changer les balises de div à un truc custom
     10 - Modifier le message de statut de la connexion (barre boutons) quand conexion impossible -> indiquer raison
     11 - Ajout cssVarFilledCookies.js
     12 - referencer connexions
     13 - ajouter alias console
     14 - Option/parameter box a 2 inputs: option + value
     15 - Neumorphic theme
     16 - Séparation CSS fonctionnel - cosmétique
     17 
     18 TODO:
     19 
     20 - Ajouter un mode Remove (cliquer sur un Line ou un Element le supprimera.)
     21 - Intégrer le front-end avec le reste
     22 
     23 TODO_FUTURE:
     24 
     25 - Intégrer fichier de structure des données JSON
     26 
     27 ## PROPOSIITON POUR URL ENCODING
     28 
     29 Syntaxe brève basée sur les types de noeuds, leurs ID et les connexions.
     30 
     31 On liste tous les neuds en ordre numérique et leur contenu, qu'ils envoient de l'information ou non.
     32 
     33 t = noeud envoie vers noeud (connexions sont à sens unique donc juste besoin de ça)
     34 o = option
     35 v = valeur
     36 m = magick
     37 i = image (optionnel)
     38 %20 (espace) = séparation entre message de connexion
     39 %23 (#) = fin d'un noeud
     40 %22 (") = autour du contenu d'un noeud
     41 
     42 => mais comment on deal avec les contenus qui ont déja des quotes? -> ""contenu"" ??
     43 
     44 En mode adjectif-sujet-COD-verbe-COI.
     45 [(Le grand) Noeud 1] (la balle) (envoie à) (Noeud 2).
     46 
     47 type0|ID0|"contenu0"|#|to|ID1| |type1|ID1|"contenu1"|#|to|ID2| |type2|ID2|"contenu2"|#|to|ID3| |type3|ID3|
     48 
     49 [magick 0000 imagefile.png] -> [option 0002 -blur], [valeur 0001 x8] -> [option 0002 -blur], [option 0002 -blur] -> [image 0003]
     50 
     51 m0000"imagefile.png"#t0002 v0001"x8"#t0002 o0002"-blur"#t0003 i0003
     52 
     53 m0000%22imagefile.png%22%23t0002%20v0001%22x8%22%23t0002%20o0002%22-blur%22%23t0003%20i0003
     54 
     55 Pour décoder:
     56 
     57 REGEX /(.\*?)\ ([a-z]\d{4})/
     58 SUBS $1\n$2
     59 SPLIT STRING INTO LIST FROM \n
     60 THEN FOR EACH
     61 IF DOESNT HAVE `#t`
     62 THEN REGEX /([a-z])(\d{4})\"(.+?)\"/
     63 |-> $1: type de noeud $2: ID noeud acteur
     64 |-> $3: contenu
     65 ELSE IF DOESNT HAVE `""`
     66 THEN REGEX /([a-z])(\d{4})/
     67 |-> $1: type de noeud $2: ID noeud acteur  
     68 |-> (ce cas de figure a lieu seulement avec le noeud final qui n'a pas de sortie)
     69 ELSE REGEX /([a-z])(\d{4})\"(.+?)\"#t(\d{4})/
     70 |-> $1: type de noeud $2: ID noeud acteur
     71 |-> $3: contenu $4: ID noeud récepteur
     72 
     73 de là on peut reconstruire les connexions.
     74 
     75 On perd cependant le positionnement visuel des noeuds
     76 
     77 ==============
     78 
     79 1. Description
     80 
     81 ---
     82 
     83 Les boutons [+param+] et [+argument+] créent respectivement un bloc de paramètre et d'agument.
     84 Ce sont des blocs qui contiennent un <input> et des <div> d'entrée-sortie pour les LeaderLines.
     85 
     86 Une sortie verte (droite) relie les parametres entre eux. Elle ne peut qu'être connectée à une entrée (gauche) verte.
     87 Une sortie orange (droite) relie un argument a un parametre. Elle ne peut qu'être connectée à une entrée (haut) orange.
     88 
     89 Seulement une ligne peut être connectée à un point d'entrée ou sortie (pour l'instant, et grâce à la classe "busy").
     90 Une sortie ne peut pas être connectée à une entrée d'un même élément.
     91 
     92 Il y a une liste des instances PlainDraggable. Ces instances sont liées aux blocs de param ou ergument.
     93 Il y a une liste des LeaderLines. Ces Leaderlines référencent les points d'entée et sortie, et NON PAS les blocs de param ou argument.
     94 
     95 Les boutons [+magick+] et [+DELETE MODE+] ne font rien pour l'instant.
     96 
     97 ---
     98 
     99 2. Utilisation
    100 
    101 ---
    102 
    103 Cliquer sur [+param+] pour créer un boc paramètre ou [+argument+] pour créer un bloc argument.
    104 
    105 Pour déplacer un bloc sur le canevas, maintenir un clic dessus (en dehors du champs de texte) et bouger la souris. S'il y a des lignes connectées, elles suivront cet élément.
    106 
    107 Pour lier deux blocs, d'abord cliquer sur son point de sortie (vert ou orange à droite). On doit voir apparaître sur la barre de boutons le message "Connecting!". Ensuite cliquer sur un point d'entrée d'un autre bloc (orange en haut ou vert à gauche).
    108 
    109 Si on ne clique pas sur un point d'entrée quand on a le message "Connecting!", l'opération s'annulera et il faudra recommencer par un point de sortie.
    110 
    111 Pour l'instant pas de moyen d'enlever un élément ou une ligne.
    112 
    113 # ========
    114 
    115 you can keep track of the added lines by storing your own id on the created SVG.
    116 
    117 Create a line as usual:
    118 
    119 const line = new LeaderLine(elem_1, elem_2, options);
    120 
    121 If you want to mark the line with the same id as LeaderLine:
    122 
    123 const all_svgs = document.querySelectorAll("svg");
    124 const this_svg = all_svgs[all_svgs.length - 1];
    125 this_svg.setAttribute("data-line_id", line.\_id);
    126 
    127 You can retrieve the SVG element by id and change the line as needed (e.g. styling):
    128 
    129 document.querySelectorAll("svg").forEach(function(elem) {
    130 if(elem.getAttribute("data-line_id") === id) {
    131 // do something with elem
    132 elem.style.fontSize = "22px";
    133 }
    134 })
    135 
    136 Obviously if you have other SVGs in your application you'll need to get a little more refined than SelectorAll("svg") but you get the point.
    137 
    138 # ==========
    139 
    140 ## Composer la chaine de caractères qui créera la commande
    141 
    142 1. On prend le premier <node-magick>. On l'ajoute à une liste.
    143    1.1. On prend son point de sortie class="node-out".
    144    1.2. On filtre la lines_list en prenant la LeaderLine dont la propriété start == ce point de sortie
    145    1.3. Prendre la propriété end de cette LeaderLine. C'est un Element point d'entrée.
    146 2. Noter le parent (<node-param> ou <node-preview>) de cet élément sur la liste. Si c'est un élément <node-preview>, sauter étapes 2.
    147    2.1. Voir si parent de cet élément contient une entrée d'argument (point d'entrée avec classes in-argument et busy)
    148    2.1.1. Si oui, trouver dans lines_list la ligne qui y est connectée.
    149    2.1.2. Prendre la propriété start de cette LeaderLine. C'est un Element point de sortie.
    150    2.1.3. Prendre l'élément parent (<node-argument>) de ce dernier et l'ajouter à la liste.
    151    2.1.4. Revenir à l'élément précédent de la liste (le dernier <node-param>) et recommencer à l'étape 1.1.
    152 3. Si élément == <node-preview>, prendre la liste, parcourir ses éléments.
    153    3.1. Pour chaque élément, ajouter le contenu intéressant en tant que string à une liste de strings.
    154    3.2. Concatenate la liste de strings.
    155 
    156 ==========
README~ - NUI-magick - a web nodal user interface (NUI) to ImageMagick via busybox httpd's cgi

NUI-magick

a web nodal user interface (NUI) to ImageMagick via busybox httpd's cgi - retour accueil

git clone git://bebou.netlib.re/NUI-magick

Log | Files | Refs | README |

README~ (4901B)


      1 escapeHTML() {
      2 cat | sed -E '
      3 	s	<	\&lt;		g
      4 	s	>	\&gt;		g
      5 	s	^(    ..\t)(#.*)	\1<span style="opacity:.5">\2</span>	g
      6 	s	^    (..)	<span style="opacity:.5">\1</span>		g
      7 	'
      8 	
      9 }
     10 escapeHTML << README
     11                                       ┌─preview────────┐
     12                                    ┌─>• ██████████████ │
     13                                    │  │ ██          ██ │
     14      quelque chose comme ça        │  │ ██  hello   ██ │
     15                                    │  │ ██          ██ │
     16                                    │  │ ██████████████ │
     17  ┌─primitive─┐                     │  └────────────────┘
     18  │  couleur  •─┐  ┌─command───────┐│       ┌─command────┐  ┌─output──────┐
     19  └───────────┘ │  ○  magick       •┴───┬──>•  magick    •─>•   name.png  │
     20  ┌─primitive─┐ │  │               │    │   │            │  └─────────────┘
     21  │  couleur  •┐└──•  -background  │┌───│──>•  -crop     │
     22  └───────────┘├──>•  -fill        ││   │   │  +repage   │
     23  ┌─primitive─┐└──>•  -bordercolor ││   │   │   (+)      │
     24  │  string   •───>•  -font        ││   │   └────────────┘
     25  └───────────┘ ┌─>•  -size        ││   │  ┌─histogram──────┐
     26  ┌─primitive─┐ │┌>•  -…………        ││   └─>•│              ││
     27  │  geometry •─┘│ │   (+)         ││      │││  │   │    ││││
     28  └───────────┘  │ └───────────────┘│      ││││││││││││││││││
     29  ┌─primitive─┐  │     ┌─primitive─┐│      └────────────────┘
     30  │  geometry •──┘     │  geometry •┘
     31  └───────────┘        └───────────┘ 
     32 
     33 ./NodeMagick.sh lance un serveur web avec busybox httpd et ouvre un navigateur
     34 
     35 Dépendances
     36 ˙˙˙˙˙˙˙˙˙˙˙
     37 ImageMagick > 6
     38 busybox httpd
     39 Javascript
     40 	leaderline → vendor/leader-line.min.js (100ko)
     41 	plaindraggable → vendor/plain-draggable.min.js (36ko)
     42 
     43 Nomenclature
     44 ˙˙˙˙˙˙˙˙˙˙˙˙
     45 magick → nœud qui envoie la commande, contient des options
     46 option → nœud qui contient une option, contient des valeurs
     47 value → nœud qui contient une valeur typée
     48 
     49 data-uuid → uuid d'un nœud
     50 data-from → pointeur vers l'uuid d'un nœud
     51 data-to   → pointeur vers l'uuid d'un nœud
     52 
     53 DOM
     54 ˙˙˙
     55 <body>
     56 
     57 	<main>
     58 		<magick data-uuid="hello-1" data-from="" data-to="">
     59 			<ol>
     60 				<option data-uuid="hello-2">
     61 					<val data-from="hello-3" data-to=""></val>
     62 				</option>
     63 				<option data-from="hello-4"></option>
     64 			</ol>
     65 			<viewer>
     66 				<nav>zoom, code d'erreur…</nav>
     67 				<img src="/img/hello-1-name" alt="commande magick">
     68 				<identify></identify>
     69 			</viewer>
     70 		</magick>
     71 
     72 		<val data-uuid="hello-3">20x20</val>
     73 		<option data-uuid="hello-4"></option>
     74 	</main>
     75 
     76 	<history></history>
     77 	<log></log>
     78 	<shell-representation></shell-representation>
     79 </body>
     80 
     81 Versionage
     82 ˙˙˙˙˙˙˙˙˙˙
     83 L'uuid d'un nœud est le nom du plan de travail et
     84 l'incrémentation de la variable globale I.
     85 
     86 La source de vérité de l'état est le __dom__
     87 Pour tout changement d'état % debounce() → <history> += url
     88 
     89 État dans l'url
     90 ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙
     91 ?date=…&name=…&nodes=document.querySelectorAll('main')
     92 
     93 À faire
     94 ˙˙˙˙˙˙˙
     95 grep "TODO":
     96 $(rg -g "!$0" TODO | sed -E '
     97 		s@<@\&lt;@g; s@>@\&gt;@g;
     98 		#s@(.*):(.*)@\1:\n\t\2@g;
     99 	')
    100 
    101 poc
    102 	[x] générer une image depuis un input
    103 	[x] interfacer stdin/stdout
    104 	[x] actualiser la source avec un ?timestamp
    105 	[x] actualiser magick identify
    106 	[ ] awk histogramme
    107 	[ ] brancher cssvarfilledcookies
    108 
    109 
    110 [ ] <magick></magick>
    111 	[ ] draggable des options dedans et en dehors de <magick>
    112 	[x] toggle zoomer l'image
    113 	[x] toggle échantillonage (ma prorpriété css pref ❤)
    114 	[x] lire \$?
    115 	[ ] dessiner un histogramme
    116 [ ] intégrer l'interface drafts/front-end
    117 [ ] <history></history> → martin
    118 	[ ] lors d'un changement d'état, push dans un localstorage stateStack[]
    119 	[ ] formater en url
    120 
    121 plus tard
    122 	[ ] brancher d'autres outils de traitement d'image : jp2a/ascii-image-converter, didder
    123 	[ ] systèmes de lindenmayer
    124 	[ ] brancher du shell
    125 	[ ] permettre des boucles sur |un entier|un dossier|une EXPRAT(^^)|…
    126 
    127 se mettre d'accord sur :
    128 	[ ] paradigme
    129 	[ ] spec, graph orienté ?
    130 	[ ] source de vérité entre le dom | l'url | la requête | le localStorage
    131 
    132 README