broncowdd / SnippetVamp

Store, share & manage your snippets easily
45 stars 12 forks source link

bookmarklet #13

Closed jerrywham closed 11 years ago

jerrywham commented 11 years ago

Je viens de tester le bookmarklet. Bien pratique ! Deux remarques cependant :

broncowdd commented 11 years ago

Hips, miaou ! ^^ bon conseil , j'ai fait la modif...

jerrywham commented 11 years ago

C'est mieux ! Merci. Nouvelle remarque : le bookmarklet fonctionne mais pas avec du code partagé avec snippetvamp. J'en veux pour preuve ton article avec l'ajout http à une url. N'est-il pas possible dans ces conditions que, plutôt que de parser la page d'origine, parser la page dont l'url est dans l'iframe ?

broncowdd commented 11 years ago
Oui, ce serait plus logique... je
  l'ajouterai: le temps de réfléchir à la regex ^^ (ouille)
jerrywham commented 11 years ago

Je te propose ça :

function parse_for_snippet($url){
$page=@file_get_contents(trim($url)); if ($page===false){return false;} pregmatch('#<iframe(.)src="(.[^\s])"(.)>#',$page,$iframe); if(isset($iframe[2])) {$page=@file_get_contents(trim($iframe[2])); if ($page===false){return false;} preg_match('#<h3>([^<]+)</h3>#', $page , $title); if (isset($title[1])){$title=$title[1];}else{$title='';} preg_matchall('#<code[^>]>([^<]+)</code>#', $page , $code_blocs); if (count($code_blocs[1])>0){$code_blocs[1]['title']=trim($title);return $code_blocs[1];} preg_matchall('#<pre[^>]>([^<]+)</pre>#', $page , $code_blocs); if (count($code_blocs[1])>0){$code_blocs[1]['title']=trim($title);return $code_blocs[1];} return false; }else { preg_match('#<title>([^<]+)</title>#', $page , $title); if (isset($title[1])){$title=$title[1];}else{$title='';} preg_matchall('#<code[^>]>([^<]+)</code>#', $page , $code_blocs); if (count($code_blocs[1])>0){$code_blocs[1]['title']=trim($title);return $code_blocs[1];} preg_match_all('#<pre[^>]*>([^<]+)</pre>#', $page , $code_blocs); if (count($code_blocs[1])>0){$code_blocs[1]['title']=trim($title);return $code_blocs[1];} return false; } }

broncowdd commented 11 years ago

C'est fou ! je suis en train de commit la version que j'ai faite: on est sur la même longueur d'onde ^^ je te montre où j'en suis et pourquoi :

function parse_for_snippet($url){ $page=@file_get_contents(trim($url)); if ($page===false){return false;} if (preg_match('#([^<]+)#', $page , $title)){$title=$title[1];}else{$title='';} if (preg_matchall('#<code[^>]>([^<]+)#', $page , $code_blocs)){$code_blocs[1]['title']=trim($title);return $code_blocs[1];} if (preg_matchall('#<pre[^>]>([^<]+)#', $page , $code_blocs)){$code_blocs[1]['title']=trim($title);return $code_blocs[1];} // scan for embeded snippets and load each snippet if (preg_matchall('#(http[s]://[^ ]_snippetvamp.php\?embed=[0-9a-z]+)#', $page , $code_blocs)){ $code=array();$code['title']=''; foreach($code_blocs[0] as $link){$code[]=file_get_contents(str_replace('?embed=','?txt=',$link));} return $code; } return false; } Au lieu de parser le snippet en version embeded, j'utilise une fonction que j'avais commencée dès le début: la version texte seul (?txt=Numéro)

if ($admin&&isset($_GET['txt'])&&isset($snippets[$_GET['txt']])||isset($_GET['txt'])&&isset($snippets[$_GET['txt']])&&is_public($_GET['txt'])){exit(htmlspecialchars('#'.$snippets[$_GET['txt']]['#titre']."\n".'#'.$snippets[$_GET['txt']]['#adresse']."\n\n".$snippets[$_GET['txt']]['#contenu']."\n\n"));}

Du coup, la fonction se contente de récupérer les adresses contenant un snippetvamp.php?embed=nb puis change le embed en txt et typiak la version txt directement... puis agglomère le tout... Qu'en penses-tu ?

jerrywham commented 11 years ago

C'est pas con de chercher directement dans les url la valeur snippetvamp. Mais tu peux pas toutes les matcher vu que tu n'ouvres qu'une fenêtre au final. Quel est le code qui sera récupéré s'il y a plusieurs codes embed sur une même page ?

Voici une version améliorée de ce que j'ai proposé toute à l'heure :

function parse_for_snippet($url){
$page=@file_get_contents(trim($url)); if ($page===false){return false;} pregmatch('#<iframe(.)src="(.[^\s])"(.)>#',$page,$iframe); if(isset($iframe[2])) {$Page = $page;$page=@file_get_contents(trim($iframe[2])); if ($page!==false){ preg_match('#<h3>([^<]+)</h3>#', $page , $title); } else { $page = $Page; preg_match('#<title>([^<]+)</title>#', $page , $title); } } else {preg_match('#<title>([^<]+)</title>#', $page , $title);} if (isset($title[1])){$title=$title[1];}else{$title='';} preg_matchall('#<code[^>]>([^<]+)</code>#', $page , $code_blocs); if (count($code_blocs[1])>0){$code_blocs[1]['title']=trim($title);return $code_blocs[1];} preg_match_all('#<pre[^>]*>([^<]+)</pre>#', $page , $code_blocs); if (count($code_blocs[1])>0){$code_blocs[1]['title']=trim($title);return $code_blocs[1];} return false; }

Je vais voir ce que donne ta version...

broncowdd commented 11 years ago
Justement, il parse à la recherce des
  url et les charge les unes après les autres...
  Je garde la tienne pour la regarder de plus près avec la colo
  syntaxique ^^
  Le 11/05/2013 15:54, jerrywham a écrit :

  C'est pas con de chercher directement dans les url la valeur
    snippetvamp. Mais tu peux pas toutes les matcher vu que tu
    n'ouvres qu'une fenêtre au final. Quel est le code qui sera
    récupéré s'il y a plusieurs codes embed sur une même page ?
  Voici une version améliorée de ce que j'ai proposé toute à
    l'heure :
  function parse_for_snippet($url){
    $page=@file_get_contents(trim($url));
    if ($page===false){return false;}

preg_match('#<iframe(.)src="(.[^\s])"(.*)>#',$page,$iframe); if(isset($iframe[2])) {$Page = $page;$page=@file_get_contents(trim($iframe[2])); if ($page!==false){ preg_match('#

([^<]+)

#', $page , $title); } else { $page = $Page; preg_match('#([^<]+)#', $page , $title); } } else {preg_match('#([^<]+)#', $page , $title);} if (isset($title[1])){$title=$title[1];}else{$title='';} preg_matchall('#<code[^>]>([^<]+)#', $page , $code_blocs); if (count($code_blocs[1])>0){$code_blocs[1]['title']=trim($title);return $code_blocs[1];} preg_matchall('#<pre[^>]>([^<]+)#', $page , $code_blocs); if (count($code_blocs[1])>0){$code_blocs[1]['title']=trim($title);return $code_blocs[1];} return false; } Je vais voir ce que donne ta version... — Reply to this email directly or view it on GitHub.

jerrywham commented 11 years ago

Ta fonction récupère bien le code et l'url mais pas les titres qui sont des h3 dans la version embed.

broncowdd commented 11 years ago
Les titres ne pourraient pas être
  cumulés dans la case titre du formulaire, du coup ils sont ajoutés
  en commentaires dans le code...
  Je pense que, dans le cas où un seul snippet est trouvé, je
  complèterai la case titre du form...
  Le 11/05/2013 15:57, jerrywham a écrit :

  Ta fonction récupère bien le code et l'url mais pas les titres
    qui sont des h3 dans la version embed.
  —
    Reply to this email directly or view
      it on GitHub.
jerrywham commented 11 years ago

Ou en prenant le titre de la page principale et en ajoutant comme tu le fais les sous-titre dans le code ???

En faisant :

function parse_for_snippet($url){ $page=@file_get_contents(trim($url)); if ($page===false){return false;} if (preg_match('#<title>([^<]+)</title>#', $page , $title)){$title=$title[1];}else{$title='';} if (preg_matchall('#<code[^>]>([^<]+)</code>#', $page , $code_blocs)){$code_blocs[1]['title']=trim($title);return $code_blocs[1];} if (preg_matchall('#<pre[^>]>([^<]+)</pre>#', $page , $code_blocs)){$code_blocs[1]['title']=trim($title);return $code_blocs[1];} // scan for embeded snippets and load each snippet if (preg_matchall('#(http[s]:\/\/[^ ]_snippetvamp.php\?embed=[0-9a-z]+)#', $page , $code_blocs)){ $code=array();$code['title']=trim($title); foreach($code_blocs[0] as $link){$code[]=file_get_contents(str_replace('?embed=','?txt=',$link));} return $code; } return false; if ($admin&&isset($_GET['txt'])&&isset($snippets[$_GET['txt']])||isset($_GET['txt'])&&isset($snippets[$_GET['txt']])&&is_public($_GET['txt'])){ echo '<pre>';print_r($_GET);echo'</pre>'; $title=htmlspecialchars($snippets[$_GET['txt']]['#titre']);htmlspecialchars('#'.$snippets[$_GET['txt']]['#titre']."\n".'#'.$snippets[$_GET['txt']]['#adresse']."\n\n".$snippets[$_GET['txt']]['#contenu']."\n\n");return false;} }

broncowdd commented 11 years ago
Le 11/05/2013 16:11, jerrywham a
  écrit :

  Ou en prenant le titre de la page principale et en ajoutant
    comme tu le fais les sous-titre dans le code ???
  —
    Reply to this email directly or view
      it on GitHub.

ha oui, pas con !!
jerrywham commented 11 years ago

Tu as mis à jour le fichier principal mais pas le fichier de version. Il y a donc un message disant de mettre à jour vers la version 0.8b alors que tu as mis en ligne la v1.0.

broncowdd commented 11 years ago
Le 11/05/2013 17:14, jerrywham a
  écrit :

  Tu as mis à jour le fichier principal mais pas le fichier de
    version. Il y a donc un message disant de mettre à jour vers la
    version 0.8b alors que tu as mis en ligne la v1.0.
  —
    Reply to this email directly or view
      it on GitHub.

Tout à fait curieux vu que j'ai actualisé le fichier en
  question... tu as essayé de te logguer ? il se peut que ça soit
  une page mise en cache ^^ (si tu savais le nb de fois où j'ai
  enragé devant l'absence d'effet de mes modifs avant de
  m'apercevoir que j'avais pas vidé le cache !!! big noob fail ^^  )
Si tu te loggues, il n'utilise pas le cache (et il le vide)
jerrywham commented 11 years ago

C'est rentré dans l'ordre...

broncowdd commented 11 years ago
Le 11/05/2013 19:48, jerrywham a
  écrit :

  C'est rentré dans l'ordre...
  —
    Reply to this email directly or view
      it on GitHub.

cool
broncowdd commented 11 years ago
Le 11/05/2013 19:48, jerrywham a
  écrit :

  C'est rentré dans l'ordre...
  —
    Reply to this email directly or view
      it on GitHub.

Du coup, essaie le copier coller de snippet pour voir ? (si ça se
trouve, c'est ma version qui fait ça)
jerrywham commented 11 years ago

J'ai pas de problème à ce niveau là. Si le code a plusieurs lignes, le copier/coller se fait également sur plusieurs lignes. De toute façon, ça dépend de l'éditeur et non de snippetvamp. Y a pas grand chose à faire...

broncowdd commented 11 years ago

à part utiliser le bouton text only ^^

jerrywham commented 11 years ago

L'input du mot de passe est visible sur la fenêtre du bookmarklet. Est-ce normal mon capitaine ???

jerrywham commented 11 years ago

J'ai rien dit, c'est corrigé...