source: spip-zone/_plugins_/webfonts/branches/webfonts2/webfonts2_fonctions.php @ 114679

Last change on this file since 114679 was 114679, checked in by arnaud.berard@…, 8 months ago

0.3.0

Le plugin fourni un fichier googlefont_list.json, il n'est plus nécessaire d'avoir une googlefont_api_key, pour pouvoir utiliser :

  • la recherche (preview, filtrage) dans le catalogue googlefont.
  • le selecteurgenerique webfonts

l'extension php curl n'est plus necessaire que pour la mise a jour de l'index.

  • Property svn:eol-style set to native
File size: 5.3 KB
Line 
1<?php
2/*
3 * Plugin Webfonts2
4 * (c) 2016
5 * Distribue sous licence GPL
6 *
7 */
8if (!defined('_ECRIRE_INC_VERSION')) {
9        return;
10}
11
12/**
13 * googlefont_request
14 *
15 * prepare l'url sans passer par l'api , utilisé pour l'insertion dans le head
16 *
17 * @param $webfonts {array} font=>variantes
18 * @param $subsets  si besoin une liste de subsets pour la forme mais inutile
19 * @return $request url de requète
20 *
21*/
22function googlefont_request($webfonts,$subsets=''){
23        $subset = '&subset=' ;
24        (strlen($subsets)) ? $subset .= $subsets : $subset = '';
25        foreach($webfonts as $font){
26                $variants = implode(',',$font['variants']);
27                $fonts[] = urlencode($font['family']).':'.$variants;
28        }
29
30        $fonts = implode('|',$fonts);
31
32        $request = "https://fonts.googleapis.com/css?family=$fonts".$subset;
33        return $request;
34}
35
36/**
37 * google_font_search
38 *
39 * $fonts la liste des fonts [items] récupérées via l'index
40 * $search le motif de recherche sur item/family
41*/
42function google_font_search($fonts, $search){
43        $res = array();
44        if (is_array($fonts)) {
45                foreach($fonts as $item){
46                        ( preg_match('/' . trim($search) . '/i', $item['family']) ) ? $res[] = $item : false;
47                }
48        }
49        return $res;
50}
51
52// permet aux plugins themes de spécifier leur webfonts
53// via la pipeline fonts_list
54
55function lister_webfonts(){
56        $fonts = pipeline('fonts_list',array(
57                'args'=>array(),
58                'data'=>$fonts
59        ));
60        return $fonts;
61}
62
63function balise_FONT_INDEX_dist($p){
64        $p->code = "get_font_index()";
65        $p->interdire_scripts = false;
66        return $p;
67}
68
69function get_font_index(){
70        if(file_exists(_DIR_TMP.'/googlefont_list.json')){
71                $index = lire_fichier(_DIR_TMP.'/googlefont_list.json',$respons);
72                spip_log("Lecture du fichier tmp/ $index",'webfonts');
73        }else{
74                $index = lire_fichier(_DIR_PLUGIN_WEBFONTS2.'/json/googlefont_list.json',$respons);
75                spip_log("Lecture du fichier fourni / $index",'webfonts');
76        }
77        return json_decode($respons, true);
78}
79
80/**
81 * googlefont_api_get
82 *
83 * retourne l'index [items] complet de la typothèque via l'API
84 *
85*/
86function googlefont_api_get($api_key,$sort=false,$category=false){
87        // Requète en GET sur //https://www.googleapis.com/webfonts/v1/webfonts?key=_GOOGLE_API_KEY
88        $url = 'https://www.googleapis.com/webfonts/v1/webfonts?key='.$api_key;
89        (strlen($sort)) ? $url .= '&sort='.$sort : $sort = false ;
90        (strlen($category)) ? $url .= '&category='.$category : $category = false;
91        if(extension_loaded('curl')){
92                $ch = curl_init();
93                curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
94                curl_setopt($ch, CURLOPT_HEADER, false);
95                curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
96                curl_setopt($ch, CURLOPT_URL, $url);
97                curl_setopt($ch, CURLOPT_REFERER, $url);
98                curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
99                $result = curl_exec($ch);
100                curl_close($ch);
101                $googlefonts = json_decode($result, true);
102
103                return $googlefonts['items'];
104        }else{
105                spip_log("L'extension Curl doit être installée !",'webfonts');
106                return false;
107        }
108}
109
110
111/*
112 * fontface_declaration
113 *
114 *
115@font-face {
116    font-family: 'open_sansitalic';
117    src: url('OpenSans-Italic-webfont.eot');
118    src: url('OpenSans-Italic-webfont.eot?#iefix') format('embedded-opentype'),
119         url('OpenSans-Italic-webfont.woff2') format('woff2'),
120         url('OpenSans-Italic-webfont.woff') format('woff'),
121         url('OpenSans-Italic-webfont.ttf') format('truetype'),
122         url('OpenSans-Italic-webfont.svg#open_sansitalic') format('svg');
123    font-weight: normal;
124    font-style: normal;
125
126}
127
128@param $font array family|file|weight|style
129@param $formats array extension|format default
130
131*/
132
133function fontface_declaration($font, $formats = array('.woff'=>'woff','.woff2'=>'woff2','.ttf'=>'truetype')){
134
135        $default = array(
136                'family'=>'Dutissimo',
137                'file'=>'squelettes-dist/polices/dutissimo',
138                'weight'=>'400',
139                'style'=>'normal'
140        );
141        $font = array_merge($default,$font);
142        $font_files = '';
143        $i = 1;
144        foreach($formats as $extension => $format){
145                $font_files .="url('".$font['file'].$extension."') format('$format')";
146                ($i < count($formats)) ? $font_files .=", " : $font_files .=";";
147                $i++;
148        }
149
150        $declaration = <<<EOT
151@font-face {
152    font-family: '{$font['family']}';
153        src: $font_files
154    font-weight:{$font['weight']};
155    font-style:{$font['style']};
156}
157EOT;
158
159        return $declaration;
160}
161
162/*
163 * function font_sets
164 * @param $fonts
165 */
166
167function font_sets($fonts) {
168
169}
170
171
172
173function font_stacks(){
174        return array(
175                'sans-serif' => [
176                        'Helvetica' => '"Helvetica Neue", "Helvetica", "Arial", sans-serif',
177                        'Lucida' => '"Lucida Grande", "Lucida Sans Unicode", "Geneva", "Verdana", sans-serif',
178                        'Verdana' => '"Verdana", "Geneva", sans-serif',
179                        'System' => '-apple-system, BlinkMacSystemFont, "Avenir Next", "Avenir", "Segoe UI", "Lucida Grande", "Helvetica Neue", "Helvetica", "Fira Sans", "Roboto", "Noto", "Droid Sans", "Cantarell", "Oxygen", "Ubuntu", "Franklin Gothic Medium", "Century Gothic", "Liberation Sans", sans-serif',
180                ],
181                'serif'=> [
182                        'Garamond' => '"Garamond", "Baskerville", "Baskerville Old Face", "Hoefler Text", "Times New Roman", serif',
183                        'Georgia' => '"Georgia", "Times", "Times New Roman", serif',
184                        'Hoefler' => '"Hoefler Text", "Baskerville Old Face", "Garamond", "Times New Roman", serif',
185                ],
186                'monospace'=> [
187                        'Consolas' => '"Consolas", "monaco", monospace',
188                        'Courrier' => '"Courier New", "Courier", "Lucida Sans Typewriter", "Lucida Typewriter", monospace',
189                        'Monaco' => '"Monaco", "Consolas", "Lucida Console", monospace'
190                ]
191        );
192}
Note: See TracBrowser for help on using the repository browser.