Toolset Types – Custom Post Types, Custom Fields and Taxonomies - Version 1.8.6

Version Description

  • Release date: 2015-09-28
  • Replace parameter "numberposts" with "posts_per_page" in post relationships query.
  • Fixed a meta post data before use and if is too complex just do not handle this in Types.
  • Fixed a problem with selecting file in child tabele when is no WYSIWYG or other file field on edit screen.
  • When we get User Group we added information about affected roles.
  • Fixed a problem with playlist.
Download this release

Release Info

Developer iworks
Plugin Icon 128x128 Toolset Types – Custom Post Types, Custom Fields and Taxonomies
Version 1.8.6
Comparing to
See all releases

Code changes from version 1.8.5 to 1.8.6

Files changed (123) hide show
  1. embedded/bootstrap.php +1 -1
  2. embedded/common/.gitignore +0 -60
  3. embedded/functions.php +4 -0
  4. embedded/includes/conditional-display.php +13 -1
  5. embedded/includes/fields.php +18 -2
  6. embedded/includes/post-relationship.php +2 -2
  7. embedded/plugin.php +1 -1
  8. embedded/readme.txt +1 -1
  9. embedded/toolset/onthego-resources/changelog.txt +17 -0
  10. embedded/toolset/onthego-resources/classes/onthegosystems-styles.class.php +39 -0
  11. embedded/toolset/onthego-resources/composer.json +30 -0
  12. embedded/toolset/onthego-resources/loader.php +82 -0
  13. embedded/toolset/onthego-resources/onthego-styles/onthego-admin-styles.css +95 -0
  14. embedded/toolset/onthego-resources/onthego-styles/onthego-buttons.css +697 -0
  15. embedded/toolset/onthego-resources/onthego-styles/onthego-colors.css +26 -0
  16. embedded/toolset/onthego-resources/onthego-styles/onthego-styles-helper.css +1470 -0
  17. embedded/toolset/onthego-resources/onthego-styles/onthego-styles-helper.scss +36 -0
  18. embedded/toolset/onthego-resources/onthego-styles/onthego-styles.css +21 -0
  19. embedded/toolset/onthego-resources/onthegosystems-branding-loader.php +40 -0
  20. embedded/toolset/onthego-resources/onthegosystems-icons/.fontcustom-manifest.json +128 -0
  21. embedded/toolset/onthego-resources/onthegosystems-icons/css/_onthegosystems-icons.css +86 -0
  22. embedded/toolset/onthego-resources/onthegosystems-icons/css/_onthegosystems-icons.scss +79 -0
  23. embedded/toolset/onthego-resources/onthegosystems-icons/css/onthegosystems-icons.css +79 -0
  24. embedded/toolset/onthego-resources/onthegosystems-icons/fontcustom.yml +83 -0
  25. embedded/toolset/onthego-resources/onthegosystems-icons/fonts/onthegosystems-icons-preview.html +503 -0
  26. embedded/toolset/onthego-resources/onthegosystems-icons/fonts/onthegosystems-icons_65c5f624e7b3a7731aeb86b34dab9f65.eot +0 -0
  27. embedded/toolset/onthego-resources/onthegosystems-icons/fonts/onthegosystems-icons_65c5f624e7b3a7731aeb86b34dab9f65.svg +359 -0
  28. embedded/toolset/onthego-resources/onthegosystems-icons/fonts/onthegosystems-icons_65c5f624e7b3a7731aeb86b34dab9f65.ttf +0 -0
  29. embedded/toolset/onthego-resources/onthegosystems-icons/fonts/onthegosystems-icons_65c5f624e7b3a7731aeb86b34dab9f65.woff +0 -0
  30. embedded/toolset/onthego-resources/onthegosystems-icons/fonts/onthegosystems-icons_8d9a6c3bf95bd4630d40a722f192ec47.eot +0 -0
  31. embedded/toolset/onthego-resources/onthegosystems-icons/fonts/onthegosystems-icons_8d9a6c3bf95bd4630d40a722f192ec47.svg +329 -0
  32. embedded/toolset/onthego-resources/onthegosystems-icons/fonts/onthegosystems-icons_8d9a6c3bf95bd4630d40a722f192ec47.ttf +0 -0
  33. embedded/toolset/onthego-resources/onthegosystems-icons/fonts/onthegosystems-icons_8d9a6c3bf95bd4630d40a722f192ec47.woff +0 -0
  34. embedded/toolset/onthego-resources/onthegosystems-icons/vectors/access-logo.svg +13 -0
  35. embedded/toolset/onthego-resources/onthegosystems-icons/vectors/access.svg +16 -0
  36. embedded/toolset/onthego-resources/onthegosystems-icons/vectors/bootstrap-logo.svg +14 -0
  37. embedded/toolset/onthego-resources/onthegosystems-icons/vectors/bootstrap.svg +14 -0
  38. embedded/toolset/onthego-resources/onthegosystems-icons/vectors/conditional-alert.svg +14 -0
  39. embedded/toolset/onthego-resources/onthegosystems-icons/vectors/conditional-if.svg +31 -0
  40. embedded/toolset/onthego-resources/onthegosystems-icons/vectors/cred-logo.svg +102 -0
  41. embedded/toolset/onthego-resources/onthegosystems-icons/vectors/cred.svg +101 -0
  42. embedded/toolset/onthego-resources/onthegosystems-icons/vectors/layouts-logo.svg +10 -0
  43. embedded/toolset/onthego-resources/onthegosystems-icons/vectors/layouts.svg +11 -0
  44. embedded/toolset/onthego-resources/onthegosystems-icons/vectors/module-logo.svg +11 -0
  45. embedded/toolset/onthego-resources/onthegosystems-icons/vectors/module.svg +11 -0
  46. embedded/toolset/onthego-resources/onthegosystems-icons/vectors/packager-logo.svg +14 -0
  47. embedded/toolset/onthego-resources/onthegosystems-icons/vectors/packager.svg +9 -0
  48. embedded/toolset/onthego-resources/onthegosystems-icons/vectors/toolset-logo.svg +207 -0
  49. embedded/toolset/onthego-resources/onthegosystems-icons/vectors/types-logo.svg +15 -0
  50. embedded/toolset/onthego-resources/onthegosystems-icons/vectors/types.svg +15 -0
  51. embedded/toolset/onthego-resources/onthegosystems-icons/vectors/views-logo.svg +15 -0
  52. embedded/toolset/onthego-resources/onthegosystems-icons/vectors/views.svg +13 -0
  53. embedded/toolset/onthego-resources/onthegosystems-icons/vectors/wpml-logo.svg +13 -0
  54. embedded/toolset/onthego-resources/readme.md +98 -0
  55. embedded/toolset/toolset-common/WPML/wpml-string-shortcode.php +34 -0
  56. embedded/toolset/toolset-common/Zip.php +861 -0
  57. embedded/toolset/toolset-common/array2xml.php +55 -0
  58. embedded/toolset/toolset-common/changelog.txt +34 -0
  59. embedded/toolset/toolset-common/classes/class-toolset-admin-bar-menu.php +779 -0
  60. embedded/toolset/toolset-common/classes/class.toolset.promo.php +193 -0
  61. embedded/toolset/toolset-common/classes/control_forms.php +28 -0
  62. embedded/toolset/toolset-common/classes/forms.php +972 -0
  63. embedded/toolset/toolset-common/classes/validate.php +425 -0
  64. embedded/toolset/toolset-common/classes/validation-cakephp.php +1139 -0
  65. embedded/toolset/toolset-common/composer.json +30 -0
  66. embedded/toolset/toolset-common/debug/debug-information.php +24 -0
  67. embedded/toolset/toolset-common/debug/functions_debug_information.php +160 -0
  68. embedded/toolset/toolset-common/expression-parser/js/parser.js +2923 -0
  69. embedded/toolset/toolset-common/expression-parser/parser.php +2892 -0
  70. embedded/toolset/toolset-common/functions.php +622 -0
  71. embedded/toolset/toolset-common/localization/locale/orig/views.po +4528 -0
  72. embedded/toolset/toolset-common/localization/locale/views-ar.mo +0 -0
  73. embedded/toolset/toolset-common/localization/locale/views-bg_BG.mo +0 -0
  74. embedded/toolset/toolset-common/localization/locale/views-de_DE.mo +0 -0
  75. embedded/toolset/toolset-common/localization/locale/views-el.mo +0 -0
  76. embedded/toolset/toolset-common/localization/locale/views-es_ES.mo +0 -0
  77. embedded/toolset/toolset-common/localization/locale/views-fr_FR.mo +0 -0
  78. embedded/toolset/toolset-common/localization/locale/views-he_IL.mo +0 -0
  79. embedded/toolset/toolset-common/localization/locale/views-it_IT.mo +0 -0
  80. embedded/toolset/toolset-common/localization/locale/views-ja.mo +0 -0
  81. embedded/toolset/toolset-common/localization/locale/views-ko_KR.mo +0 -0
  82. embedded/toolset/toolset-common/localization/locale/views-nl_NL.mo +0 -0
  83. embedded/toolset/toolset-common/localization/locale/views-pl_PL.mo +0 -0
  84. embedded/toolset/toolset-common/localization/locale/views-pt_BR.mo +0 -0
  85. embedded/toolset/toolset-common/localization/locale/views-pt_PT.mo +0 -0
  86. embedded/toolset/toolset-common/localization/locale/views-ru_RU.mo +0 -0
  87. embedded/toolset/toolset-common/localization/locale/views-sv_SE.mo +0 -0
  88. embedded/toolset/toolset-common/localization/locale/views-uk.mo +0 -0
  89. embedded/toolset/toolset-common/localization/locale/views-vi.mo +0 -0
  90. embedded/toolset/toolset-common/localization/locale/views-zh_CN.mo +0 -0
  91. embedded/toolset/toolset-common/localization/locale/views-zh_TW.mo +0 -0
  92. embedded/toolset/toolset-common/localization/wpt-localization.php +61 -0
  93. embedded/toolset/toolset-common/readme.md +9 -0
  94. embedded/toolset/toolset-common/res/css/colorbox.css +88 -0
  95. embedded/toolset/toolset-common/res/css/toolset-common.css +74 -0
  96. embedded/toolset/toolset-common/res/css/toolset-menu-icon.css +29 -0
  97. embedded/toolset/toolset-common/res/css/toolset-promotion.css +164 -0
  98. embedded/toolset/toolset-common/res/css/wpv-wp-pointer.css +4 -0
  99. embedded/toolset/toolset-common/res/images/question.png +0 -0
  100. embedded/toolset/toolset-common/res/images/toolset.promotion/full.jpg +0 -0
  101. embedded/toolset/toolset-common/res/images/toolset.promotion/icons.png +0 -0
  102. embedded/toolset/toolset-common/res/images/toolset.promotion/toolset.png +0 -0
  103. embedded/toolset/toolset-common/res/js/jquery.colorbox-min.js +7 -0
  104. embedded/toolset/toolset-common/res/js/toolset-promotion.js +47 -0
  105. embedded/toolset/toolset-common/res/js/wpv-wp-pointer.js +17 -0
  106. embedded/toolset/toolset-common/toolset-forms/api.php +93 -0
  107. embedded/toolset/toolset-common/toolset-forms/bootstrap.php +309 -0
  108. embedded/toolset/toolset-common/toolset-forms/classes/abstract.field.php +34 -0
  109. embedded/toolset/toolset-common/toolset-forms/classes/abstract.form.php +48 -0
  110. embedded/toolset/toolset-common/toolset-forms/classes/class.audio.php +33 -0
  111. embedded/toolset/toolset-common/toolset-forms/classes/class.button.php +25 -0
  112. embedded/toolset/toolset-common/toolset-forms/classes/class.checkbox.php +66 -0
  113. embedded/toolset/toolset-common/toolset-forms/classes/class.checkboxes.php +90 -0
  114. embedded/toolset/toolset-common/toolset-forms/classes/class.colorpicker.php +106 -0
  115. embedded/toolset/toolset-common/toolset-forms/classes/class.conditional.php +534 -0
  116. embedded/toolset/toolset-common/toolset-forms/classes/class.cred.php +90 -0
  117. embedded/toolset/toolset-common/toolset-forms/classes/class.credaudio.php +24 -0
  118. embedded/toolset/toolset-common/toolset-forms/classes/class.credfile.php +227 -0
  119. embedded/toolset/toolset-common/toolset-forms/classes/class.credimage.php +22 -0
  120. embedded/toolset/toolset-common/toolset-forms/classes/class.credvideo.php +24 -0
  121. embedded/toolset/toolset-common/toolset-forms/classes/class.date.php +418 -0
  122. embedded/toolset/toolset-common/toolset-forms/classes/class.date.scripts.php +190 -0
  123. embedded/toolset/toolset-common/toolset-forms/classes/class.eforms.php +781 -0
embedded/bootstrap.php CHANGED
@@ -156,7 +156,7 @@ function wpcf_embedded_init() {
156
  // Define necessary constants if plugin is not present
157
  // This ones are skipped if used as embedded code!
158
  if ( !defined( 'WPCF_VERSION' ) ) {
159
- define( 'WPCF_VERSION', '1.8.5' );
160
  define( 'WPCF_META_PREFIX', 'wpcf-' );
161
  }
162
 
156
  // Define necessary constants if plugin is not present
157
  // This ones are skipped if used as embedded code!
158
  if ( !defined( 'WPCF_VERSION' ) ) {
159
+ define( 'WPCF_VERSION', '1.8.6' );
160
  define( 'WPCF_META_PREFIX', 'wpcf-' );
161
  }
162
 
embedded/common/.gitignore DELETED
@@ -1,60 +0,0 @@
1
- # Ignore test results
2
- actual
3
- results
4
-
5
- # Ignore compiled docs
6
- _gh_pages
7
- _gh-pages
8
- _site
9
-
10
- # Numerous always-ignore extensions
11
- *.csv
12
- *.dat
13
- *.diff
14
- *.err
15
- *.gz
16
- *.log
17
- *.log
18
- *.orig
19
- *.out
20
- *.pid
21
- *.rej
22
- *.ruby-version
23
- *.sass-cache
24
- *.seed
25
- *.swo
26
- *.swp
27
- *.vi
28
- *.zip
29
- *~
30
- lib-cov
31
-
32
- # OS or Editor folders
33
- .DS_Store
34
- ._*
35
- Thumbs.db
36
- .cache
37
- .project
38
- .settings
39
- .tmproj
40
- *.esproj
41
- nbproject
42
- *.sublime-*
43
- .editorconfig
44
-
45
- # Komodo
46
- *.komodoproject
47
- .komodotools
48
-
49
- # Folders to ignore
50
- .hg
51
- .svn
52
- .CVS
53
- .idea
54
- tmp
55
- pids
56
- build
57
- src
58
- node_modules
59
- # Files to ignore
60
- npm-debug.log
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
embedded/functions.php CHANGED
@@ -652,6 +652,10 @@ function wpcf_field_enqueue_scripts($type)
652
 
653
  $cache[$config['id']] = $config;
654
 
 
 
 
 
655
  return $config;
656
  } else {
657
  $wpcf->debug->errors['missing_type_config'][] = $type;
652
 
653
  $cache[$config['id']] = $config;
654
 
655
+ if ( isset($config['inherited_field_type']) && 'file' == $config['inherited_field_type']) {
656
+ wp_enqueue_media();
657
+ }
658
+
659
  return $config;
660
  } else {
661
  $wpcf->debug->errors['missing_type_config'][] = $type;
embedded/includes/conditional-display.php CHANGED
@@ -69,9 +69,21 @@ function wpcf_cd_post_groups_filter( $groups, $post, $context ) {
69
  $cond_values = array();
70
  }
71
  $_cond_values = array();
 
 
72
  foreach ( $cond_values as $k => $v ) {
73
  $v = maybe_unserialize( $v[0] );
74
- $_cond_values[$k . $suffix] = is_array( $v ) ? strval( array_shift( $v ) ) : $v;
 
 
 
 
 
 
 
 
 
 
75
  }
76
  unset( $cond_values );
77
  $cond = array();
69
  $cond_values = array();
70
  }
71
  $_cond_values = array();
72
+
73
+
74
  foreach ( $cond_values as $k => $v ) {
75
  $v = maybe_unserialize( $v[0] );
76
+ /**
77
+ * if data is too complex - skip it
78
+ */
79
+ if ( is_array( $v) ) {
80
+ $v = array_shift($v);
81
+ if ( is_array($v) ) {
82
+ continue;
83
+ }
84
+ $v = strval( $v);
85
+ }
86
+ $_cond_values[$k . $suffix] = $v;
87
  }
88
  unset( $cond_values );
89
  $cond = array();
embedded/includes/fields.php CHANGED
@@ -98,11 +98,27 @@ function wpcf_admin_fields_adjust_group( $post, $add_fields = false ) {
98
  $group['filters_association'] = get_post_meta( $post->ID, '_wp_types_group_filters_association', true );
99
  $group[WPCF_AUTHOR] = $post->post_author;
100
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
101
  // Attach fields if required (since 1.3)
102
  if ( $add_fields ) {
103
  $active = $add_fields == 'fields_active' ? true : false;
104
- $group['fields'] = wpcf_admin_fields_get_fields_by_group( $post->ID,
105
- 'slug', $active );
106
  }
107
 
108
  return $group;
98
  $group['filters_association'] = get_post_meta( $post->ID, '_wp_types_group_filters_association', true );
99
  $group[WPCF_AUTHOR] = $post->post_author;
100
 
101
+ /**
102
+ * add _wp_types_group_showfor
103
+ *
104
+ * "all" - for all groups
105
+ * array() - if any
106
+ */
107
+ if ( TYPES_USER_META_FIELD_GROUP_CPT_NAME == $post->post_type ) {
108
+ $data = get_post_meta($post->ID, '_wp_types_group_showfor', true);
109
+ if ( 'all' != $data ) {
110
+ $data = array_values(array_filter(explode(',',$data)));
111
+ }
112
+ if ( empty($data) ) {
113
+ $data = 'all';
114
+ }
115
+ $group['_wp_types_group_showfor'] = $data;
116
+ }
117
+
118
  // Attach fields if required (since 1.3)
119
  if ( $add_fields ) {
120
  $active = $add_fields == 'fields_active' ? true : false;
121
+ $group['fields'] = wpcf_admin_fields_get_fields_by_group( $post->ID, 'slug', $active );
 
122
  }
123
 
124
  return $group;
embedded/includes/post-relationship.php CHANGED
@@ -570,10 +570,10 @@ function wpcf_pr_admin_wpcf_relationship_search()
570
  {
571
  wpcf_pr_admin_wpcf_relationship_check(array('s'));
572
 
573
- $numberposts = apply_filters( 'wpcf_pr_belongs_post_numberposts', 10 );
574
 
575
  $args = array(
576
- 'numberposts' => $numberposts,
577
  'post_status' => apply_filters( 'wpcf_pr_belongs_post_status', array( 'publish', 'private' ) ),
578
  'post_type' => $_REQUEST['post_type'],
579
  'suppress_filters' => 1,
570
  {
571
  wpcf_pr_admin_wpcf_relationship_check(array('s'));
572
 
573
+ $posts_per_page = apply_filters( 'wpcf_pr_belongs_post_numberposts', 10 );
574
 
575
  $args = array(
576
+ 'posts_per_page' => apply_filters( 'wpcf_pr_belongs_post_posts_per_page', $posts_per_page ),
577
  'post_status' => apply_filters( 'wpcf_pr_belongs_post_status', array( 'publish', 'private' ) ),
578
  'post_type' => $_REQUEST['post_type'],
579
  'suppress_filters' => 1,
embedded/plugin.php CHANGED
@@ -5,7 +5,7 @@
5
  Description: Define custom post types, custom taxonomies and custom fields.
6
  Author: OnTheGoSystems
7
  Author URI: http://www.onthegosystems.com
8
- Version: 1.8.5
9
  */
10
  /**
11
  *
5
  Description: Define custom post types, custom taxonomies and custom fields.
6
  Author: OnTheGoSystems
7
  Author URI: http://www.onthegosystems.com
8
+ Version: 1.8.6
9
  */
10
  /**
11
  *
embedded/readme.txt CHANGED
@@ -5,7 +5,7 @@ Tags: CMS, custom field, custom fields, custom post type, custom post types, fie
5
  License: GPLv2
6
  Requires at least: 3.4
7
  Tested up to: 4.3
8
- Stable tag: 1.8.5
9
 
10
  The Embedded version lets you create custom types, taxonomies and fields for your theme or plugin, without requiring any plugin.
11
 
5
  License: GPLv2
6
  Requires at least: 3.4
7
  Tested up to: 4.3
8
+ Stable tag: 1.8.6
9
 
10
  The Embedded version lets you create custom types, taxonomies and fields for your theme or plugin, without requiring any plugin.
11
 
embedded/toolset/onthego-resources/changelog.txt ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ OnTheGo Resources 1.2 (August 17, 2015)
2
+ - Added new Views icons
3
+
4
+ OnTheGo Resources 1.1 (June 11, 2015)
5
+ - Added Toolset Packager icons
6
+
7
+ -------------------------------------------------------------------------------------------------------------------
8
+ OnTheGo Resources 1.0 (Apr 1, 2014)
9
+ - Added WPML icons
10
+ -------------------------------------------------------------------------------------------------------------------
11
+ OnTheGo Resources 0.9.1 (Feb 2 2014)
12
+ - Created advanced resources loader with version control
13
+
14
+ -------------------------------------------------------------------------------------------------------------------
15
+ OnTheGo Resources 0.9 (Dec 16 2013)
16
+ - Created icons
17
+ - Created resources loader
embedded/toolset/onthego-resources/classes/onthegosystems-styles.class.php ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ define('ON_THE_GO_SYSTEMS_BRANDING_STYLES_CLASS_PATH', dirname(__FILE__) );
4
+
5
+ class OnTheGoSystemsStyles_Class{
6
+
7
+ private static $instance;
8
+
9
+ /**
10
+ * Class is singleton
11
+ */
12
+ private function __construct( )
13
+ {
14
+ // load wp-admin
15
+ add_action( 'admin_enqueue_scripts', array(&$this, 'register_and_enqueue_styles') );
16
+ // load front-end
17
+ if (!is_admin()) {
18
+ add_action( 'admin_bar_init', array(&$this, 'register_and_enqueue_styles') );
19
+ }
20
+ }
21
+
22
+ public function register_and_enqueue_styles()
23
+ {
24
+ if ( is_admin() || defined('WPDDL_VERSION') ) {
25
+ wp_register_style('onthego-admin-styles', ON_THE_GO_SYSTEMS_BRANDING_REL_PATH .'onthego-styles/onthego-styles.css');
26
+ wp_enqueue_style( 'onthego-admin-styles' );
27
+ }
28
+ }
29
+
30
+ public static function getInstance( )
31
+ {
32
+ if (!self::$instance)
33
+ {
34
+ self::$instance = new OnTheGoSystemsStyles_Class();
35
+ }
36
+
37
+ return self::$instance;
38
+ }
39
+ };
embedded/toolset/onthego-resources/composer.json ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "toolset/onthego-resources",
3
+ "description": "Branding resources for Toolset plugins",
4
+ "keywords": ["icons", "vectors", "utils", "CSS"],
5
+ "homepage": "https://git.onthegosystems.com/toolset/onthego-resources",
6
+ "type": "library",
7
+ "license": "GPL-2.0",
8
+ "authors": [
9
+ {
10
+ "name": "Bruce Pearson, Juan de Paco, Riccardo Strobbia",
11
+ "email": "riccardo.s@icanlocalize.com",
12
+ "homepage": "http://www.wp-types.com"
13
+ }
14
+ ],
15
+ "require": {
16
+ "php": ">=5.2.0"
17
+ },
18
+ "require-dev": {
19
+ "phpunit/phpunit": "~4.5"
20
+ },
21
+ "extra": {
22
+ "branch-alias": {
23
+ "dev-master": "1.2.x-dev",
24
+ "dev-develop": "1.2.x-dev"
25
+ }
26
+ },
27
+ "scripts": {
28
+ "test": "phpunit"
29
+ }
30
+ }
embedded/toolset/onthego-resources/loader.php ADDED
@@ -0,0 +1,82 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // This file is responsible for loading the latest version of the on the
4
+ // go system branding resources.
5
+ //
6
+ // To use it in a plugin or theme you should include this file early in the
7
+ // plugin loader and then call the onthego_initialize function.
8
+ // The onthego_initialize should be passed the file path to the directory
9
+ // where this file is located and also the url to this directory.
10
+
11
+ //
12
+
13
+ // -----------------------------------------------------------------------//
14
+
15
+ // This version number should always be incremented by 1 whenever a change
16
+ // is made to the onthego-resources code.
17
+ // The version number will then be used to work out which plugin has the latest
18
+ // version of the code.
19
+
20
+ $onthegosystems_branding_version = 4;
21
+
22
+ // ----------------------------------------------------------------------//
23
+ // WARNING * WARNING *WARNING
24
+ // ----------------------------------------------------------------------//
25
+
26
+ // Don't modify or add to this code.
27
+ // This is only responsible for making sure the latest version of the resources
28
+ // is loaded.
29
+
30
+ global $onthegosystems_branding_paths;
31
+
32
+ if (!isset($onthegosystems_branding_paths)) {
33
+ $onthegosystems_branding_paths = array();
34
+ }
35
+
36
+ if (!isset($onthegosystems_branding_paths[$onthegosystems_branding_version])) {
37
+ // Save the path to this version.
38
+ $onthegosystems_branding_paths[$onthegosystems_branding_version]['path'] = str_replace('\\', '/', dirname(__FILE__));
39
+ }
40
+
41
+ if( !function_exists('on_the_go_systems_branding_plugins_loaded') ) {
42
+ function on_the_go_systems_branding_plugins_loaded()
43
+ {
44
+ global $onthegosystems_branding_paths;
45
+
46
+ // find the latest version
47
+ $latest = 0;
48
+ foreach ($onthegosystems_branding_paths as $key => $data) {
49
+ if ($key > $latest) {
50
+ $latest = $key;
51
+ }
52
+ }
53
+ if ($latest > 0) {
54
+ require_once $onthegosystems_branding_paths[$latest]['path'] . '/onthegosystems-branding-loader.php';
55
+ ont_set_on_the_go_systems_uri_and_start( $onthegosystems_branding_paths[$latest]['url'] );
56
+ }
57
+ }
58
+
59
+ add_action( 'after_setup_theme', 'on_the_go_systems_branding_plugins_loaded');
60
+ }
61
+
62
+ if( !function_exists('onthego_initialize') ) {
63
+
64
+ function onthego_initialize($path, $url) {
65
+ global $onthegosystems_branding_paths;
66
+
67
+ $path = str_replace('\\', '/', $path);
68
+
69
+ if (substr($path, strlen($path) - 1) == '/') {
70
+ $path = substr($path, 0, strlen($path) - 1);
71
+ }
72
+
73
+ // Save the url in the matching path
74
+ foreach ($onthegosystems_branding_paths as $key => $data) {
75
+ if ($onthegosystems_branding_paths[$key]['path'] == $path) {
76
+ $onthegosystems_branding_paths[$key]['url'] = $url;
77
+ break;
78
+ }
79
+ }
80
+ }
81
+ }
82
+
embedded/toolset/onthego-resources/onthego-styles/onthego-admin-styles.css ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ ** Styles to be used in common by all plugins in admin
3
+ **
4
+ */
5
+ /* ADMIN MENU ICONS */
6
+ li#toplevel_page_dd_layouts div.wp-menu-image:before, li#toplevel_page_dd_layouts .dashicons-admin-generic:before {
7
+ font-family: "onthegosystems-icons"!important;
8
+ content: "\f117";
9
+ font-size: 23px!important;
10
+ width: 30px;
11
+ padding-left: 3px;
12
+ padding-top: 5px; }
13
+
14
+ li#toplevel_page_embedded-views div.wp-menu-image:before,
15
+ li#toplevel_page_views div.wp-menu-image:before {
16
+ font-family: "onthegosystems-icons"!important;
17
+ content: "\f11e";
18
+ font-size: 23px!important;
19
+ width: 30px;
20
+ padding-left: 3px;
21
+ padding-top: 3px; }
22
+
23
+ li#toplevel_page_ModuleManager_Modules div.wp-menu-image:before {
24
+ font-family: "onthegosystems-icons"!important;
25
+ content: "\f119";
26
+ font-size: 23px!important;
27
+ width: 30px;
28
+ padding-left: 3px;
29
+ padding-top: 3px; }
30
+
31
+ li#toplevel_page_CRED_Forms div.wp-menu-image:before {
32
+ font-family: "onthegosystems-icons"!important;
33
+ content: "\f115";
34
+ font-size: 23px!important;
35
+ width: 30px;
36
+ padding-left: 3px;
37
+ padding-top: 3px; }
38
+
39
+ li#toplevel_page_wpcf div.wp-menu-image:before {
40
+ font-family: "onthegosystems-icons"!important;
41
+ content: "\f11c";
42
+ font-size: 23px!important;
43
+ width: 30px;
44
+ padding-left: 3px;
45
+ padding-top: 4px; }
46
+
47
+ li#toplevel_page_types_access div.wp-menu-image:before {
48
+ font-family: "onthegosystems-icons"!important;
49
+ content: "\f111";
50
+ font-size: 23px!important;
51
+ width: 30px;
52
+ padding-left: 3px;
53
+ padding-top: 3px; }
54
+
55
+ li#toplevel_page_CRED_Commerce div.wp-menu-image:before {
56
+ font-family: "onthegosystems-icons"!important;
57
+ content: "\f115";
58
+ font-size: 23px!important;
59
+ width: 30px;
60
+ padding-left: 3px;
61
+ padding-top: 3px; }
62
+
63
+ li#toplevel_page_toolset-packager div.wp-menu-image:before {
64
+ font-family: "onthegosystems-icons"!important;
65
+ content: "\f121";
66
+ font-size: 23px!important;
67
+ width: 30px;
68
+ padding-left: 3px;
69
+ padding-top: 3px; }
70
+
71
+ /* POST EDIT PAGE SHORT TAGS BUTTONS ICONS */
72
+ #wp-content-editor-tools [class^="icon-"] {
73
+ color: #888;
74
+ margin-top: -5px;
75
+ padding-right:3px;
76
+ }
77
+
78
+ #wp-content-editor-tools .icon-views {
79
+ margin-top: -1px; }
80
+
81
+ /* CRED SPECIFIC */
82
+ .code-editor-toolbar-button-cred-icon .icon-cred{position: relative!important;bottom:3px;}
83
+ /* VIEWS SPECIFIC */
84
+ i.icon-views.ont-icon-19 {
85
+ margin: 0 8px 0 0; }
86
+
87
+ /* VIEWS VIEWS EDITOR PAGE*/
88
+ .wpv-setting .code-editor-toolbar button > i.icon-views.ont-icon-36{margin-top: -7px;}
89
+
90
+ /* MODULE MANAGER */
91
+ .module-title h4 [class^="icon-"] {
92
+ position: relative;
93
+ top: 0px;
94
+ left: 2px;
95
+ padding-right: 4px; }
embedded/toolset/onthego-resources/onthego-styles/onthego-buttons.css ADDED
@@ -0,0 +1,697 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ .ont-btn {
3
+ display: inline-block;
4
+ padding: 6px 12px;
5
+ margin-bottom: 0;
6
+ font-size: 14px;
7
+ font-weight: normal;
8
+ line-height: 1.42857143;
9
+ text-align: center;
10
+ white-space: nowrap;
11
+ vertical-align: middle;
12
+ -ms-touch-action: manipulation;
13
+ touch-action: manipulation;
14
+ cursor: pointer;
15
+ -webkit-user-select: none;
16
+ -moz-user-select: none;
17
+ -ms-user-select: none;
18
+ user-select: none;
19
+ background-image: none;
20
+ border: 1px solid transparent;
21
+ border-radius: 4px;
22
+ }
23
+ .ont-btn:focus,
24
+ .ont-btn:active:focus,
25
+ .ont-btn.active:focus,
26
+ .ont-btn.focus,
27
+ .ont-btn:active.focus,
28
+ .ont-btn.active.focus {
29
+ outline: thin dotted;
30
+ outline: 5px auto -webkit-focus-ring-color;
31
+ outline-offset: -2px;
32
+ }
33
+ .ont-btn:hover,
34
+ .ont-btn:focus,
35
+ .ont-btn.focus {
36
+ color: #333;
37
+ text-decoration: none;
38
+ }
39
+ .ont-btn:active,
40
+ .ont-btn.active {
41
+ background-image: none;
42
+ outline: 0;
43
+ -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
44
+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
45
+ }
46
+ .ont-btn.disabled,
47
+ .ont-btn[disabled],
48
+ fieldset[disabled] .ont-btn {
49
+ cursor: not-allowed;
50
+ filter: alpha(opacity=65);
51
+ -webkit-box-shadow: none;
52
+ box-shadow: none;
53
+ opacity: .65;
54
+ }
55
+ a.ont-btn.disabled,
56
+ fieldset[disabled] a.ont-btn {
57
+ pointer-events: none;
58
+ }
59
+ .ont-btn-default {
60
+ color: #333;
61
+ background-color: #fff;
62
+ border-color: #ccc;
63
+ }
64
+ .ont-btn-default:focus,
65
+ .ont-btn-default.focus {
66
+ color: #333;
67
+ background-color: #e6e6e6;
68
+ border-color: #8c8c8c;
69
+ }
70
+ .ont-btn-default:hover {
71
+ color: #333;
72
+ background-color: #e6e6e6;
73
+ border-color: #adadad;
74
+ }
75
+ .ont-btn-default:active,
76
+ .ont-btn-default.active,
77
+ .open > .dropdown-toggle.ont-btn-default {
78
+ color: #333;
79
+ background-color: #e6e6e6;
80
+ border-color: #adadad;
81
+ }
82
+ .ont-btn-default:active:hover,
83
+ .ont-btn-default.active:hover,
84
+ .open > .dropdown-toggle.ont-btn-default:hover,
85
+ .ont-btn-default:active:focus,
86
+ .ont-btn-default.active:focus,
87
+ .open > .dropdown-toggle.ont-btn-default:focus,
88
+ .ont-btn-default:active.focus,
89
+ .ont-btn-default.active.focus,
90
+ .open > .dropdown-toggle.ont-btn-default.focus {
91
+ color: #333;
92
+ background-color: #d4d4d4;
93
+ border-color: #8c8c8c;
94
+ }
95
+ .ont-btn-default:active,
96
+ .ont-btn-default.active,
97
+ .open > .dropdown-toggle.ont-btn-default {
98
+ background-image: none;
99
+ }
100
+ .ont-btn-default.disabled:hover,
101
+ .ont-btn-default[disabled]:hover,
102
+ fieldset[disabled] .ont-btn-default:hover,
103
+ .ont-btn-default.disabled:focus,
104
+ .ont-btn-default[disabled]:focus,
105
+ fieldset[disabled] .ont-btn-default:focus,
106
+ .ont-btn-default.disabled.focus,
107
+ .ont-btn-default[disabled].focus,
108
+ fieldset[disabled] .ont-btn-default.focus {
109
+ background-color: #fff;
110
+ border-color: #ccc;
111
+ }
112
+ .ont-btn-default .badge {
113
+ color: #fff;
114
+ background-color: #333;
115
+ }
116
+
117
+ .ont-btn-primary {
118
+ color: #fff;
119
+ background-color: #337ab7;
120
+ border-color: #2e6da4;
121
+ }
122
+ .ont-btn-primary:focus,
123
+ .ont-btn-primary.focus {
124
+ color: #fff;
125
+ background-color: #286090;
126
+ border-color: #122b40;
127
+ }
128
+ .ont-btn-primary:hover {
129
+ color: #fff;
130
+ background-color: #286090;
131
+ border-color: #204d74;
132
+ }
133
+ .ont-btn-primary:active,
134
+ .ont-btn-primary.active,
135
+ .open > .dropdown-toggle.ont-btn-primary {
136
+ color: #fff;
137
+ background-color: #286090;
138
+ border-color: #204d74;
139
+ }
140
+ .ont-btn-primary:active:hover,
141
+ .ont-btn-primary.active:hover,
142
+ .open > .dropdown-toggle.ont-btn-primary:hover,
143
+ .ont-btn-primary:active:focus,
144
+ .ont-btn-primary.active:focus,
145
+ .open > .dropdown-toggle.ont-btn-primary:focus,
146
+ .ont-btn-primary:active.focus,
147
+ .ont-btn-primary.active.focus,
148
+ .open > .dropdown-toggle.ont-btn-primary.focus {
149
+ color: #fff;
150
+ background-color: #204d74;
151
+ border-color: #122b40;
152
+ }
153
+ .ont-btn-primary:active,
154
+ .ont-btn-primary.active,
155
+ .open > .dropdown-toggle.ont-btn-primary {
156
+ background-image: none;
157
+ }
158
+ .ont-btn-primary.disabled:hover,
159
+ .ont-btn-primary[disabled]:hover,
160
+ fieldset[disabled] .ont-btn-primary:hover,
161
+ .ont-btn-primary.disabled:focus,
162
+ .ont-btn-primary[disabled]:focus,
163
+ fieldset[disabled] .ont-btn-primary:focus,
164
+ .ont-btn-primary.disabled.focus,
165
+ .ont-btn-primary[disabled].focus,
166
+ fieldset[disabled] .ont-btn-primary.focus {
167
+ background-color: #337ab7;
168
+ border-color: #2e6da4;
169
+ }
170
+ .ont-btn-primary .badge {
171
+ color: #337ab7;
172
+ background-color: #fff;
173
+ }
174
+ .ont-btn-success {
175
+ color: #fff;
176
+ background-color: #5cb85c;
177
+ border-color: #4cae4c;
178
+ }
179
+ .ont-btn-success:focus,
180
+ .ont-btn-success.focus {
181
+ color: #fff;
182
+ background-color: #449d44;
183
+ border-color: #255625;
184
+ }
185
+ .ont-btn-success:hover {
186
+ color: #fff;
187
+ background-color: #449d44;
188
+ border-color: #398439;
189
+ }
190
+ .ont-btn-success:active,
191
+ .ont-btn-success.active,
192
+ .open > .dropdown-toggle.ont-btn-success {
193
+ color: #fff;
194
+ background-color: #449d44;
195
+ border-color: #398439;
196
+ }
197
+ .ont-btn-success:active:hover,
198
+ .ont-btn-success.active:hover,
199
+ .open > .dropdown-toggle.ont-btn-success:hover,
200
+ .ont-btn-success:active:focus,
201
+ .ont-btn-success.active:focus,
202
+ .open > .dropdown-toggle.ont-btn-success:focus,
203
+ .ont-btn-success:active.focus,
204
+ .ont-btn-success.active.focus,
205
+ .open > .dropdown-toggle.ont-btn-success.focus {
206
+ color: #fff;
207
+ background-color: #398439;
208
+ border-color: #255625;
209
+ }
210
+ .ont-btn-success:active,
211
+ .ont-btn-success.active,
212
+ .open > .dropdown-toggle.ont-btn-success {
213
+ background-image: none;
214
+ }
215
+ .ont-btn-success.disabled:hover,
216
+ .ont-btn-success[disabled]:hover,
217
+ fieldset[disabled] .ont-btn-success:hover,
218
+ .ont-btn-success.disabled:focus,
219
+ .ont-btn-success[disabled]:focus,
220
+ fieldset[disabled] .ont-btn-success:focus,
221
+ .ont-btn-success.disabled.focus,
222
+ .ont-btn-success[disabled].focus,
223
+ fieldset[disabled] .ont-btn-success.focus {
224
+ background-color: #5cb85c;
225
+ border-color: #4cae4c;
226
+ }
227
+ .ont-btn-success .badge {
228
+ color: #5cb85c;
229
+ background-color: #fff;
230
+ }
231
+ .ont-btn-info {
232
+ color: #fff;
233
+ background-color: #5bc0de;
234
+ border-color: #46b8da;
235
+ }
236
+ .ont-btn-info:focus,
237
+ .ont-btn-info.focus {
238
+ color: #fff;
239
+ background-color: #31b0d5;
240
+ border-color: #1b6d85;
241
+ }
242
+ .ont-btn-info:hover {
243
+ color: #fff;
244
+ background-color: #31b0d5;
245
+ border-color: #269abc;
246
+ }
247
+ .ont-btn-info:active,
248
+ .ont-btn-info.active,
249
+ .open > .dropdown-toggle.ont-btn-info {
250
+ color: #fff;
251
+ background-color: #31b0d5;
252
+ border-color: #269abc;
253
+ }
254
+ .ont-btn-info:active:hover,
255
+ .ont-btn-info.active:hover,
256
+ .open > .dropdown-toggle.ont-btn-info:hover,
257
+ .ont-btn-info:active:focus,
258
+ .ont-btn-info.active:focus,
259
+ .open > .dropdown-toggle.ont-btn-info:focus,
260
+ .ont-btn-info:active.focus,
261
+ .ont-btn-info.active.focus,
262
+ .open > .dropdown-toggle.ont-btn-info.focus {
263
+ color: #fff;
264
+ background-color: #269abc;
265
+ border-color: #1b6d85;
266
+ }
267
+ .ont-btn-info:active,
268
+ .ont-btn-info.active,
269
+ .open > .dropdown-toggle.ont-btn-info {
270
+ background-image: none;
271
+ }
272
+ .ont-btn-info.disabled:hover,
273
+ .ont-btn-info[disabled]:hover,
274
+ fieldset[disabled] .ont-btn-info:hover,
275
+ .ont-btn-info.disabled:focus,
276
+ .ont-btn-info[disabled]:focus,
277
+ fieldset[disabled] .ont-btn-info:focus,
278
+ .ont-btn-info.disabled.focus,
279
+ .ont-btn-info[disabled].focus,
280
+ fieldset[disabled] .ont-btn-info.focus {
281
+ background-color: #5bc0de;
282
+ border-color: #46b8da;
283
+ }
284
+ .ont-btn-info .badge {
285
+ color: #5bc0de;
286
+ background-color: #fff;
287
+ }
288
+ .ont-btn-warning {
289
+ color: #fff;
290
+ background-color: #f0ad4e;
291
+ border-color: #eea236;
292
+ }
293
+ .ont-btn-warning:focus,
294
+ .ont-btn-warning.focus {
295
+ color: #fff;
296
+ background-color: #ec971f;
297
+ border-color: #985f0d;
298
+ }
299
+ .ont-btn-warning:hover {
300
+ color: #fff;
301
+ background-color: #ec971f;
302
+ border-color: #d58512;
303
+ }
304
+ .ont-btn-warning:active,
305
+ .ont-btn-warning.active,
306
+ .open > .dropdown-toggle.ont-btn-warning {
307
+ color: #fff;
308
+ background-color: #ec971f;
309
+ border-color: #d58512;
310
+ }
311
+ .ont-btn-warning:active:hover,
312
+ .ont-btn-warning.active:hover,
313
+ .open > .dropdown-toggle.ont-btn-warning:hover,
314
+ .ont-btn-warning:active:focus,
315
+ .ont-btn-warning.active:focus,
316
+ .open > .dropdown-toggle.ont-btn-warning:focus,
317
+ .ont-btn-warning:active.focus,
318
+ .ont-btn-warning.active.focus,
319
+ .open > .dropdown-toggle.ont-btn-warning.focus {
320
+ color: #fff;
321
+ background-color: #d58512;
322
+ border-color: #985f0d;
323
+ }
324
+ .ont-btn-warning:active,
325
+ .ont-btn-warning.active,
326
+ .open > .dropdown-toggle.ont-btn-warning {
327
+ background-image: none;
328
+ }
329
+ .ont-btn-warning.disabled:hover,
330
+ .ont-btn-warning[disabled]:hover,
331
+ fieldset[disabled] .ont-btn-warning:hover,
332
+ .ont-btn-warning.disabled:focus,
333
+ .ont-btn-warning[disabled]:focus,
334
+ fieldset[disabled] .ont-btn-warning:focus,
335
+ .ont-btn-warning.disabled.focus,
336
+ .ont-btn-warning[disabled].focus,
337
+ fieldset[disabled] .ont-btn-warning.focus {
338
+ background-color: #f0ad4e;
339
+ border-color: #eea236;
340
+ }
341
+ .ont-btn-warning .badge {
342
+ color: #f0ad4e;
343
+ background-color: #fff;
344
+ }
345
+ .ont-btn-danger {
346
+ color: #fff;
347
+ background-color: #d9534f;
348
+ border-color: #d43f3a;
349
+ }
350
+ .ont-btn-danger:focus,
351
+ .ont-btn-danger.focus {
352
+ color: #fff;
353
+ background-color: #c9302c;
354
+ border-color: #761c19;
355
+ }
356
+ .ont-btn-danger:hover {
357
+ color: #fff;
358
+ background-color: #c9302c;
359
+ border-color: #ac2925;
360
+ }
361
+ .ont-btn-danger:active,
362
+ .ont-btn-danger.active,
363
+ .open > .dropdown-toggle.ont-btn-danger {
364
+ color: #fff;
365
+ background-color: #c9302c;
366
+ border-color: #ac2925;
367
+ }
368
+ .ont-btn-danger:active:hover,
369
+ .ont-btn-danger.active:hover,
370
+ .open > .dropdown-toggle.ont-btn-danger:hover,
371
+ .ont-btn-danger:active:focus,
372
+ .ont-btn-danger.active:focus,
373
+ .open > .dropdown-toggle.ont-btn-danger:focus,
374
+ .ont-btn-danger:active.focus,
375
+ .ont-btn-danger.active.focus,
376
+ .open > .dropdown-toggle.ont-btn-danger.focus {
377
+ color: #fff;
378
+ background-color: #ac2925;
379
+ border-color: #761c19;
380
+ }
381
+ .ont-btn-danger:active,
382
+ .ont-btn-danger.active,
383
+ .open > .dropdown-toggle.ont-btn-danger {
384
+ background-image: none;
385
+ }
386
+ .ont-btn-danger.disabled:hover,
387
+ .ont-btn-danger[disabled]:hover,
388
+ fieldset[disabled] .ont-btn-danger:hover,
389
+ .ont-btn-danger.disabled:focus,
390
+ .ont-btn-danger[disabled]:focus,
391
+ fieldset[disabled] .ont-btn-danger:focus,
392
+ .ont-btn-danger.disabled.focus,
393
+ .ont-btn-danger[disabled].focus,
394
+ fieldset[disabled] .ont-btn-danger.focus {
395
+ background-color: #d9534f;
396
+ border-color: #d43f3a;
397
+ }
398
+ .ont-btn-danger .badge {
399
+ color: #d9534f;
400
+ background-color: #fff;
401
+ }
402
+ .ont-btn-link {
403
+ font-weight: normal;
404
+ color: #337ab7;
405
+ border-radius: 0;
406
+ }
407
+ .ont-btn-link,
408
+ .ont-btn-link:active,
409
+ .ont-btn-link.active,
410
+ .ont-btn-link[disabled],
411
+ fieldset[disabled] .ont-btn-link {
412
+ background-color: transparent;
413
+ -webkit-box-shadow: none;
414
+ box-shadow: none;
415
+ }
416
+ .ont-btn-link,
417
+ .ont-btn-link:hover,
418
+ .ont-btn-link:focus,
419
+ .ont-btn-link:active {
420
+ border-color: transparent;
421
+ }
422
+ .ont-btn-link:hover,
423
+ .ont-btn-link:focus {
424
+ color: #23527c;
425
+ text-decoration: underline;
426
+ background-color: transparent;
427
+ }
428
+ .ont-btn-link[disabled]:hover,
429
+ fieldset[disabled] .ont-btn-link:hover,
430
+ .ont-btn-link[disabled]:focus,
431
+ fieldset[disabled] .ont-btn-link:focus {
432
+ color: #777;
433
+ text-decoration: none;
434
+ }
435
+ .ont-btn-lg,
436
+ .ont-btn-group-lg > .ont-btn {
437
+ padding: 10px 16px;
438
+ font-size: 18px;
439
+ line-height: 1.3333333;
440
+ border-radius: 6px;
441
+ }
442
+ .ont-btn-sm,
443
+ .ont-btn-group-sm > .ont-btn {
444
+ padding: 5px 10px;
445
+ font-size: 12px;
446
+ line-height: 1.5;
447
+ border-radius: 3px;
448
+ }
449
+ .ont-btn-xs,
450
+ .ont-btn-group-xs > .ont-btn {
451
+ padding: 1px 5px;
452
+ font-size: 12px;
453
+ line-height: 1.5;
454
+ border-radius: 3px;
455
+ }
456
+ .ont-btn-block {
457
+ display: block;
458
+ width: 100%;
459
+ }
460
+ .ont-btn-block + .ont-btn-block {
461
+ margin-top: 5px;
462
+ }
463
+ input[type="submit"].ont-btn-block,
464
+ input[type="reset"].ont-btn-block,
465
+ input[type="button"].ont-btn-block {
466
+ width: 100%;
467
+ }
468
+ .ont-btn-group,
469
+ .ont-btn-group-vertical {
470
+ position: relative;
471
+ display: inline-block;
472
+ vertical-align: middle;
473
+ }
474
+ .ont-btn-group > .ont-btn,
475
+ .ont-btn-group-vertical > .ont-btn {
476
+ position: relative;
477
+ float: left;
478
+ }
479
+ .ont-btn-group > .ont-btn:hover,
480
+ .ont-btn-group-vertical > .ont-btn:hover,
481
+ .ont-btn-group > .ont-btn:focus,
482
+ .ont-btn-group-vertical > .ont-btn:focus,
483
+ .ont-btn-group > .ont-btn:active,
484
+ .ont-btn-group-vertical > .ont-btn:active,
485
+ .ont-btn-group > .ont-btn.active,
486
+ .ont-btn-group-vertical > .ont-btn.active {
487
+ z-index: 2;
488
+ }
489
+ .ont-btn-group .ont-btn + .ont-btn,
490
+ .ont-btn-group .ont-btn + .ont-btn-group,
491
+ .ont-btn-group .ont-btn-group + .ont-btn,
492
+ .ont-btn-group .ont-btn-group + .ont-btn-group {
493
+ margin-left: -1px;
494
+ }
495
+ .ont-btn-toolbar {
496
+ margin-left: -5px;
497
+ }
498
+ .ont-btn-toolbar .ont-btn,
499
+ .ont-btn-toolbar .ont-btn-group,
500
+ .ont-btn-toolbar .input-group {
501
+ float: left;
502
+ }
503
+ .ont-btn-toolbar > .ont-btn,
504
+ .ont-btn-toolbar > .ont-btn-group,
505
+ .ont-btn-toolbar > .input-group {
506
+ margin-left: 5px;
507
+ }
508
+ .ont-btn-group > .ont-btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
509
+ border-radius: 0;
510
+ }
511
+ .ont-btn-group > .ont-btn:first-child {
512
+ margin-left: 0;
513
+ }
514
+ .ont-btn-group > .ont-btn:first-child:not(:last-child):not(.dropdown-toggle) {
515
+ border-top-right-radius: 0;
516
+ border-bottom-right-radius: 0;
517
+ }
518
+ .ont-btn-group > .ont-btn:last-child:not(:first-child),
519
+ .ont-btn-group > .dropdown-toggle:not(:first-child) {
520
+ border-top-left-radius: 0;
521
+ border-bottom-left-radius: 0;
522
+ }
523
+ .ont-btn-group > .ont-btn-group {
524
+ float: left;
525
+ }
526
+ .ont-btn-group > .ont-btn-group:not(:first-child):not(:last-child) > .ont-btn {
527
+ border-radius: 0;
528
+ }
529
+ .ont-btn-group > .ont-btn-group:first-child:not(:last-child) > .ont-btn:last-child,
530
+ .ont-btn-group > .ont-btn-group:first-child:not(:last-child) > .dropdown-toggle {
531
+ border-top-right-radius: 0;
532
+ border-bottom-right-radius: 0;
533
+ }
534
+ .ont-btn-group > .ont-btn-group:last-child:not(:first-child) > .ont-btn:first-child {
535
+ border-top-left-radius: 0;
536
+ border-bottom-left-radius: 0;
537
+ }
538
+ .ont-btn-group .dropdown-toggle:active,
539
+ .ont-btn-group.open .dropdown-toggle {
540
+ outline: 0;
541
+ }
542
+ .ont-btn-group > .ont-btn + .dropdown-toggle {
543
+ padding-right: 8px;
544
+ padding-left: 8px;
545
+ }
546
+ .ont-btn-group > .ont-btn-lg + .dropdown-toggle {
547
+ padding-right: 12px;
548
+ padding-left: 12px;
549
+ }
550
+ .ont-btn-group.open .dropdown-toggle {
551
+ -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
552
+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
553
+ }
554
+ .ont-btn-group.open .dropdown-toggle.ont-btn-link {
555
+ -webkit-box-shadow: none;
556
+ box-shadow: none;
557
+ }
558
+ .ont-btn .caret {
559
+ margin-left: 0;
560
+ }
561
+ .ont-btn-lg .caret {
562
+ border-width: 5px 5px 0;
563
+ border-bottom-width: 0;
564
+ }
565
+ .dropup .ont-btn-lg .caret {
566
+ border-width: 0 5px 5px;
567
+ }
568
+ .ont-btn-group-vertical > .ont-btn,
569
+ .ont-btn-group-vertical > .ont-btn-group,
570
+ .ont-btn-group-vertical > .ont-btn-group > .ont-btn {
571
+ display: block;
572
+ float: none;
573
+ width: 100%;
574
+ max-width: 100%;
575
+ }
576
+ .ont-btn-group-vertical > .ont-btn-group > .ont-btn {
577
+ float: none;
578
+ }
579
+ .ont-btn-group-vertical > .ont-btn + .ont-btn,
580
+ .ont-btn-group-vertical > .ont-btn + .ont-btn-group,
581
+ .ont-btn-group-vertical > .ont-btn-group + .ont-btn,
582
+ .ont-btn-group-vertical > .ont-btn-group + .ont-btn-group {
583
+ margin-top: -1px;
584
+ margin-left: 0;
585
+ }
586
+ .ont-btn-group-vertical > .ont-btn:not(:first-child):not(:last-child) {
587
+ border-radius: 0;
588
+ }
589
+ .ont-btn-group-vertical > .ont-btn:first-child:not(:last-child) {
590
+ border-top-right-radius: 4px;
591
+ border-bottom-right-radius: 0;
592
+ border-bottom-left-radius: 0;
593
+ }
594
+ .ont-btn-group-vertical > .ont-btn:last-child:not(:first-child) {
595
+ border-top-left-radius: 0;
596
+ border-top-right-radius: 0;
597
+ border-bottom-left-radius: 4px;
598
+ }
599
+ .ont-btn-group-vertical > .ont-btn-group:not(:first-child):not(:last-child) > .ont-btn {
600
+ border-radius: 0;
601
+ }
602
+ .ont-btn-group-vertical > .ont-btn-group:first-child:not(:last-child) > .ont-btn:last-child,
603
+ .ont-btn-group-vertical > .ont-btn-group:first-child:not(:last-child) > .dropdown-toggle {
604
+ border-bottom-right-radius: 0;
605
+ border-bottom-left-radius: 0;
606
+ }
607
+ .ont-btn-group-vertical > .ont-btn-group:last-child:not(:first-child) > .ont-btn:first-child {
608
+ border-top-left-radius: 0;
609
+ border-top-right-radius: 0;
610
+ }
611
+ .ont-btn-group-justified {
612
+ display: table;
613
+ width: 100%;
614
+ table-layout: fixed;
615
+ border-collapse: separate;
616
+ }
617
+ .ont-btn-group-justified > .ont-btn,
618
+ .ont-btn-group-justified > .ont-btn-group {
619
+ display: table-cell;
620
+ float: none;
621
+ width: 1%;
622
+ }
623
+ .ont-btn-group-justified > .ont-btn-group .ont-btn {
624
+ width: 100%;
625
+ }
626
+ .ont-btn-group-justified > .ont-btn-group .dropdown-menu {
627
+ left: auto;
628
+ }
629
+ [data-toggle="buttons"] > .ont-btn input[type="radio"],
630
+ [data-toggle="buttons"] > .ont-btn-group > .ont-btn input[type="radio"],
631
+ [data-toggle="buttons"] > .ont-btn input[type="checkbox"],
632
+ [data-toggle="buttons"] > .ont-btn-group > .ont-btn input[type="checkbox"] {
633
+ position: absolute;
634
+ clip: rect(0, 0, 0, 0);
635
+ pointer-events: none;
636
+ }
637
+
638
+ .input-group-addon input[type="radio"],
639
+ .input-group-addon input[type="checkbox"] {
640
+ margin-top: 0;
641
+ }
642
+ .input-group .form-control:first-child,
643
+ .input-group-addon:first-child,
644
+ .input-group-ont-btn:first-child > .ont-btn,
645
+ .input-group-ont-btn:first-child > .ont-btn-group > .ont-btn,
646
+ .input-group-ont-btn:first-child > .dropdown-toggle,
647
+ .input-group-ont-btn:last-child > .ont-btn:not(:last-child):not(.dropdown-toggle),
648
+ .input-group-ont-btn:last-child > .ont-btn-group:not(:last-child) > .ont-btn {
649
+ border-top-right-radius: 0;
650
+ border-bottom-right-radius: 0;
651
+ }
652
+ .input-group-addon:first-child {
653
+ border-right: 0;
654
+ }
655
+ .input-group .form-control:last-child,
656
+ .input-group-addon:last-child,
657
+ .input-group-ont-btn:last-child > .ont-btn,
658
+ .input-group-ont-btn:last-child > .ont-btn-group > .ont-btn,
659
+ .input-group-ont-btn:last-child > .dropdown-toggle,
660
+ .input-group-ont-btn:first-child > .ont-btn:not(:first-child),
661
+ .input-group-ont-btn:first-child > .ont-btn-group:not(:first-child) > .ont-btn {
662
+ border-top-left-radius: 0;
663
+ border-bottom-left-radius: 0;
664
+ }
665
+ .input-group-addon:last-child {
666
+ border-left: 0;
667
+ }
668
+ .input-group-ont-btn {
669
+ position: relative;
670
+ font-size: 0;
671
+ white-space: nowrap;
672
+ }
673
+ .input-group-ont-btn > .ont-btn {
674
+ position: relative;
675
+ }
676
+ .input-group-ont-btn > .ont-btn + .ont-btn {
677
+ margin-left: -1px;
678
+ }
679
+ .input-group-ont-btn > .ont-btn:hover,
680
+ .input-group-ont-btn > .ont-btn:focus,
681
+ .input-group-ont-btn > .ont-btn:active {
682
+ z-index: 2;
683
+ }
684
+ .input-group-ont-btn:first-child > .ont-btn,
685
+ .input-group-ont-btn:first-child > .ont-btn-group {
686
+ margin-right: -1px;
687
+ }
688
+ .input-group-ont-btn:last-child > .ont-btn,
689
+ .input-group-ont-btn:last-child > .ont-btn-group {
690
+ z-index: 2;
691
+ margin-left: -1px;
692
+ }
693
+ .navbar-form .radio label,
694
+ .navbar-form .checkbox label {
695
+ padding-left: 0;
696
+ }
697
+ label.ont-btn{width:auto!important;min-width:60px;}
embedded/toolset/onthego-resources/onthego-styles/onthego-colors.css ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ This file is a collection of generic colors used in our styles
3
+ */
4
+ .ont-color-default {
5
+ color: #444444; }
6
+
7
+ .ont-color-orange {
8
+ color: #f05a28; }
9
+
10
+ .ont-color-gray {
11
+ color: #888; }
12
+
13
+ .ont-color-white {
14
+ color: white; }
15
+
16
+ .ont-color-menu {
17
+ color: #999999; }
18
+
19
+ .ont-color-link {
20
+ color: #0074a2; }
21
+
22
+ .ont-color-menu:hover {
23
+ color: #2ea2cc; }
24
+
25
+ .ont-color-link:hover {
26
+ color: #0074a2; }
embedded/toolset/onthego-resources/onthego-styles/onthego-styles-helper.css ADDED
@@ -0,0 +1,1470 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ ** Do not edit onthego-styles-helper.css directly always
3
+ ** use this file otherwise changes will be lost at first compile.
4
+ ** ONT CSS Helper
5
+ ** a collection of rules to be used any where
6
+ **/
7
+ /* SET A NUMBER OF CLASSES TO FORCE THE SIZE OF THE ICON */
8
+ .ont-icon-12 {
9
+ font-size: 12px !important; }
10
+
11
+ .ont-icon-13 {
12
+ font-size: 13px !important; }
13
+
14
+ .ont-icon-14 {
15
+ font-size: 14px !important; }
16
+
17
+ .ont-icon-15 {
18
+ font-size: 15px !important; }
19
+
20
+ .ont-icon-16 {
21
+ font-size: 16px !important; }
22
+
23
+ .ont-icon-17 {
24
+ font-size: 17px !important; }
25
+
26
+ .ont-icon-18 {
27
+ font-size: 18px !important; }
28
+
29
+ .ont-icon-19 {
30
+ font-size: 19px !important; }
31
+
32
+ .ont-icon-20 {
33
+ font-size: 20px !important; }
34
+
35
+ .ont-icon-21 {
36
+ font-size: 21px !important; }
37
+
38
+ .ont-icon-22 {
39
+ font-size: 22px !important; }
40
+
41
+ .ont-icon-23 {
42
+ font-size: 23px !important; }
43
+
44
+ .ont-icon-24 {
45
+ font-size: 24px !important; }
46
+
47
+ .ont-icon-25 {
48
+ font-size: 25px !important; }
49
+
50
+ .ont-icon-26 {
51
+ font-size: 26px !important; }
52
+
53
+ .ont-icon-27 {
54
+ font-size: 27px !important; }
55
+
56
+ .ont-icon-28 {
57
+ font-size: 28px !important; }
58
+
59
+ .ont-icon-29 {
60
+ font-size: 29px !important; }
61
+
62
+ .ont-icon-30 {
63
+ font-size: 30px !important; }
64
+
65
+ .ont-icon-31 {
66
+ font-size: 31px !important; }
67
+
68
+ .ont-icon-32 {
69
+ font-size: 32px !important; }
70
+
71
+ .ont-icon-33 {
72
+ font-size: 33px !important; }
73
+
74
+ .ont-icon-34 {
75
+ font-size: 34px !important; }
76
+
77
+ .ont-icon-35 {
78
+ font-size: 35px !important; }
79
+
80
+ .ont-icon-36 {
81
+ font-size: 36px !important; }
82
+
83
+ .ont-icon-37 {
84
+ font-size: 37px !important; }
85
+
86
+ .ont-icon-38 {
87
+ font-size: 38px !important; }
88
+
89
+ .ont-icon-39 {
90
+ font-size: 39px !important; }
91
+
92
+ .ont-icon-40 {
93
+ font-size: 40px !important; }
94
+
95
+ .ont-icon-41 {
96
+ font-size: 41px !important; }
97
+
98
+ .ont-icon-42 {
99
+ font-size: 42px !important; }
100
+
101
+ .ont-icon-43 {
102
+ font-size: 43px !important; }
103
+
104
+ .ont-icon-44 {
105
+ font-size: 44px !important; }
106
+
107
+ .ont-icon-45 {
108
+ font-size: 45px !important; }
109
+
110
+ .ont-icon-46 {
111
+ font-size: 46px !important; }
112
+
113
+ .ont-icon-47 {
114
+ font-size: 47px !important; }
115
+
116
+ .ont-icon-48 {
117
+ font-size: 48px !important; }
118
+
119
+ .ont-icon-49 {
120
+ font-size: 49px !important; }
121
+
122
+ .ont-icon-50 {
123
+ font-size: 50px !important; }
124
+
125
+ .ont-icon-51 {
126
+ font-size: 51px !important; }
127
+
128
+ .ont-icon-52 {
129
+ font-size: 52px !important; }
130
+
131
+ .ont-icon-53 {
132
+ font-size: 53px !important; }
133
+
134
+ .ont-icon-54 {
135
+ font-size: 54px !important; }
136
+
137
+ .ont-icon-55 {
138
+ font-size: 55px !important; }
139
+
140
+ .ont-icon-56 {
141
+ font-size: 56px !important; }
142
+
143
+ .ont-icon-57 {
144
+ font-size: 57px !important; }
145
+
146
+ .ont-icon-58 {
147
+ font-size: 58px !important; }
148
+
149
+ .ont-icon-59 {
150
+ font-size: 59px !important; }
151
+
152
+ .ont-icon-60 {
153
+ font-size: 60px !important; }
154
+
155
+ .ont-icon-61 {
156
+ font-size: 61px !important; }
157
+
158
+ .ont-icon-62 {
159
+ font-size: 62px !important; }
160
+
161
+ .ont-icon-63 {
162
+ font-size: 63px !important; }
163
+
164
+ .ont-icon-64 {
165
+ font-size: 64px !important; }
166
+
167
+ .ont-icon-65 {
168
+ font-size: 65px !important; }
169
+
170
+ .ont-icon-66 {
171
+ font-size: 66px !important; }
172
+
173
+ .ont-icon-67 {
174
+ font-size: 67px !important; }
175
+
176
+ .ont-icon-68 {
177
+ font-size: 68px !important; }
178
+
179
+ .ont-icon-69 {
180
+ font-size: 69px !important; }
181
+
182
+ .ont-icon-70 {
183
+ font-size: 70px !important; }
184
+
185
+ .ont-icon-71 {
186
+ font-size: 71px !important; }
187
+
188
+ .ont-icon-72 {
189
+ font-size: 72px !important; }
190
+
191
+ .ont-icon-73 {
192
+ font-size: 73px !important; }
193
+
194
+ .ont-icon-74 {
195
+ font-size: 74px !important; }
196
+
197
+ .ont-icon-75 {
198
+ font-size: 75px !important; }
199
+
200
+ .ont-icon-76 {
201
+ font-size: 76px !important; }
202
+
203
+ .ont-icon-77 {
204
+ font-size: 77px !important; }
205
+
206
+ .ont-icon-78 {
207
+ font-size: 78px !important; }
208
+
209
+ .ont-icon-79 {
210
+ font-size: 79px !important; }
211
+
212
+ .ont-icon-80 {
213
+ font-size: 80px !important; }
214
+
215
+ .ont-icon-81 {
216
+ font-size: 81px !important; }
217
+
218
+ .ont-icon-82 {
219
+ font-size: 82px !important; }
220
+
221
+ .ont-icon-83 {
222
+ font-size: 83px !important; }
223
+
224
+ .ont-icon-84 {
225
+ font-size: 84px !important; }
226
+
227
+ .ont-icon-85 {
228
+ font-size: 85px !important; }
229
+
230
+ .ont-icon-86 {
231
+ font-size: 86px !important; }
232
+
233
+ .ont-icon-87 {
234
+ font-size: 87px !important; }
235
+
236
+ .ont-icon-88 {
237
+ font-size: 88px !important; }
238
+
239
+ .ont-icon-89 {
240
+ font-size: 89px !important; }
241
+
242
+ .ont-icon-90 {
243
+ font-size: 90px !important; }
244
+
245
+ .ont-icon-91 {
246
+ font-size: 91px !important; }
247
+
248
+ .ont-icon-92 {
249
+ font-size: 92px !important; }
250
+
251
+ .ont-icon-93 {
252
+ font-size: 93px !important; }
253
+
254
+ .ont-icon-94 {
255
+ font-size: 94px !important; }
256
+
257
+ .ont-icon-95 {
258
+ font-size: 95px !important; }
259
+
260
+ .ont-icon-96 {
261
+ font-size: 96px !important; }
262
+
263
+ .pad-top-0 {
264
+ padding-top: 0px !important; }
265
+
266
+ .pad-top-1 {
267
+ padding-top: 1px !important; }
268
+
269
+ .pad-top-2 {
270
+ padding-top: 2px !important; }
271
+
272
+ .pad-top-3 {
273
+ padding-top: 3px !important; }
274
+
275
+ .pad-top-4 {
276
+ padding-top: 4px !important; }
277
+
278
+ .pad-top-5 {
279
+ padding-top: 5px !important; }
280
+
281
+ .pad-top-6 {
282
+ padding-top: 6px !important; }
283
+
284
+ .pad-top-7 {
285
+ padding-top: 7px !important; }
286
+
287
+ .pad-top-8 {
288
+ padding-top: 8px !important; }
289
+
290
+ .pad-top-9 {
291
+ padding-top: 9px !important; }
292
+
293
+ .pad-top-10 {
294
+ padding-top: 10px !important; }
295
+
296
+ .pad-top-11 {
297
+ padding-top: 11px !important; }
298
+
299
+ .pad-top-12 {
300
+ padding-top: 12px !important; }
301
+
302
+ .pad-top-13 {
303
+ padding-top: 13px !important; }
304
+
305
+ .pad-top-14 {
306
+ padding-top: 14px !important; }
307
+
308
+ .pad-top-15 {
309
+ padding-top: 15px !important; }
310
+
311
+ .pad-top-16 {
312
+ padding-top: 16px !important; }
313
+
314
+ .pad-top-17 {
315
+ padding-top: 17px !important; }
316
+
317
+ .pad-top-18 {
318
+ padding-top: 18px !important; }
319
+
320
+ .pad-top-19 {
321
+ padding-top: 19px !important; }
322
+
323
+ .pad-top-20 {
324
+ padding-top: 20px !important; }
325
+
326
+ .pad-top-21 {
327
+ padding-top: 21px !important; }
328
+
329
+ .pad-top-22 {
330
+ padding-top: 22px !important; }
331
+
332
+ .pad-top-23 {
333
+ padding-top: 23px !important; }
334
+
335
+ .pad-top-24 {
336
+ padding-top: 24px !important; }
337
+
338
+ .pad-top-25 {
339
+ padding-top: 25px !important; }
340
+
341
+ .pad-top-26 {
342
+ padding-top: 26px !important; }
343
+
344
+ .pad-top-27 {
345
+ padding-top: 27px !important; }
346
+
347
+ .pad-top-28 {
348
+ padding-top: 28px !important; }
349
+
350
+ .pad-top-29 {
351
+ padding-top: 29px !important; }
352
+
353
+ .pad-top-30 {
354
+ padding-top: 30px !important; }
355
+
356
+ .pad-top-31 {
357
+ padding-top: 31px !important; }
358
+
359
+ .pad-top-32 {
360
+ padding-top: 32px !important; }
361
+
362
+ .pad-top-33 {
363
+ padding-top: 33px !important; }
364
+
365
+ .pad-top-34 {
366
+ padding-top: 34px !important; }
367
+
368
+ .pad-top-35 {
369
+ padding-top: 35px !important; }
370
+
371
+ .pad-top-36 {
372
+ padding-top: 36px !important; }
373
+
374
+ .pad-top-37 {
375
+ padding-top: 37px !important; }
376
+
377
+ .pad-top-38 {
378
+ padding-top: 38px !important; }
379
+
380
+ .pad-top-39 {
381
+ padding-top: 39px !important; }
382
+
383
+ .pad-top-40 {
384
+ padding-top: 40px !important; }
385
+
386
+ .pad-top-41 {
387
+ padding-top: 41px !important; }
388
+
389
+ .pad-top-42 {
390
+ padding-top: 42px !important; }
391
+
392
+ .pad-top-43 {
393
+ padding-top: 43px !important; }
394
+
395
+ .pad-top-44 {
396
+ padding-top: 44px !important; }
397
+
398
+ .pad-top-45 {
399
+ padding-top: 45px !important; }
400
+
401
+ .pad-top-46 {
402
+ padding-top: 46px !important; }
403
+
404
+ .pad-top-47 {
405
+ padding-top: 47px !important; }
406
+
407
+ .pad-top-48 {
408
+ padding-top: 48px !important; }
409
+
410
+ .pad-top-49 {
411
+ padding-top: 49px !important; }
412
+
413
+ .pad-top-50 {
414
+ padding-top: 50px !important; }
415
+
416
+ .pad-top-51 {
417
+ padding-top: 51px !important; }
418
+
419
+ .pad-top-52 {
420
+ padding-top: 52px !important; }
421
+
422
+ .pad-top-53 {
423
+ padding-top: 53px !important; }
424
+
425
+ .pad-top-54 {
426
+ padding-top: 54px !important; }
427
+
428
+ .pad-top-55 {
429
+ padding-top: 55px !important; }
430
+
431
+ .pad-top-56 {
432
+ padding-top: 56px !important; }
433
+
434
+ .pad-top-57 {
435
+ padding-top: 57px !important; }
436
+
437
+ .pad-top-58 {
438
+ padding-top: 58px !important; }
439
+
440
+ .pad-top-59 {
441
+ padding-top: 59px !important; }
442
+
443
+ .pad-top-60 {
444
+ padding-top: 60px !important; }
445
+
446
+ .pad-top-61 {
447
+ padding-top: 61px !important; }
448
+
449
+ .pad-top-62 {
450
+ padding-top: 62px !important; }
451
+
452
+ .pad-top-63 {
453
+ padding-top: 63px !important; }
454
+
455
+ .pad-top-64 {
456
+ padding-top: 64px !important; }
457
+
458
+ .pad-top-65 {
459
+ padding-top: 65px !important; }
460
+
461
+ .pad-top-66 {
462
+ padding-top: 66px !important; }
463
+
464
+ .pad-top-67 {
465
+ padding-top: 67px !important; }
466
+
467
+ .pad-top-68 {
468
+ padding-top: 68px !important; }
469
+
470
+ .pad-top-69 {
471
+ padding-top: 69px !important; }
472
+
473
+ .pad-top-70 {
474
+ padding-top: 70px !important; }
475
+
476
+ .pad-top-71 {
477
+ padding-top: 71px !important; }
478
+
479
+ .pad-top-72 {
480
+ padding-top: 72px !important; }
481
+
482
+ .pad-top-73 {
483
+ padding-top: 73px !important; }
484
+
485
+ .pad-top-74 {
486
+ padding-top: 74px !important; }
487
+
488
+ .pad-top-75 {
489
+ padding-top: 75px !important; }
490
+
491
+ .pad-top-76 {
492
+ padding-top: 76px !important; }
493
+
494
+ .pad-top-77 {
495
+ padding-top: 77px !important; }
496
+
497
+ .pad-top-78 {
498
+ padding-top: 78px !important; }
499
+
500
+ .pad-top-79 {
501
+ padding-top: 79px !important; }
502
+
503
+ .pad-top-80 {
504
+ padding-top: 80px !important; }
505
+
506
+ .pad-top-81 {
507
+ padding-top: 81px !important; }
508
+
509
+ .pad-top-82 {
510
+ padding-top: 82px !important; }
511
+
512
+ .pad-top-83 {
513
+ padding-top: 83px !important; }
514
+
515
+ .pad-top-84 {
516
+ padding-top: 84px !important; }
517
+
518
+ .pad-top-85 {
519
+ padding-top: 85px !important; }
520
+
521
+ .pad-top-86 {
522
+ padding-top: 86px !important; }
523
+
524
+ .pad-top-87 {
525
+ padding-top: 87px !important; }
526
+
527
+ .pad-top-88 {
528
+ padding-top: 88px !important; }
529
+
530
+ .pad-top-89 {
531
+ padding-top: 89px !important; }
532
+
533
+ .pad-top-90 {
534
+ padding-top: 90px !important; }
535
+
536
+ .pad-top-91 {
537
+ padding-top: 91px !important; }
538
+
539
+ .pad-top-92 {
540
+ padding-top: 92px !important; }
541
+
542
+ .pad-top-93 {
543
+ padding-top: 93px !important; }
544
+
545
+ .pad-top-94 {
546
+ padding-top: 94px !important; }
547
+
548
+ .pad-top-95 {
549
+ padding-top: 95px !important; }
550
+
551
+ .pad-top-96 {
552
+ padding-top: 96px !important; }
553
+
554
+ .from-top-0 {
555
+ margin-top: 0px !important; }
556
+
557
+ .from-top-1 {
558
+ margin-top: 1px !important; }
559
+
560
+ .from-top-2 {
561
+ margin-top: 2px !important; }
562
+
563
+ .from-top-3 {
564
+ margin-top: 3px !important; }
565
+
566
+ .from-top-4 {
567
+ margin-top: 4px !important; }
568
+
569
+ .from-top-5 {
570
+ margin-top: 5px !important; }
571
+
572
+ .from-top-6 {
573
+ margin-top: 6px !important; }
574
+
575
+ .from-top-7 {
576
+ margin-top: 7px !important; }
577
+
578
+ .from-top-8 {
579
+ margin-top: 8px !important; }
580
+
581
+ .from-top-9 {
582
+ margin-top: 9px !important; }
583
+
584
+ .from-top-10 {
585
+ margin-top: 10px !important; }
586
+
587
+ .from-top-11 {
588
+ margin-top: 11px !important; }
589
+
590
+ .from-top-12 {
591
+ margin-top: 12px !important; }
592
+
593
+ .from-top-13 {
594
+ margin-top: 13px !important; }
595
+
596
+ .from-top-14 {
597
+ margin-top: 14px !important; }
598
+
599
+ .from-top-15 {
600
+ margin-top: 15px !important; }
601
+
602
+ .from-top-16 {
603
+ margin-top: 16px !important; }
604
+
605
+ .from-top-17 {
606
+ margin-top: 17px !important; }
607
+
608
+ .from-top-18 {
609
+ margin-top: 18px !important; }
610
+
611
+ .from-top-19 {
612
+ margin-top: 19px !important; }
613
+
614
+ .from-top-20 {
615
+ margin-top: 20px !important; }
616
+
617
+ .from-top-21 {
618
+ margin-top: 21px !important; }
619
+
620
+ .from-top-22 {
621
+ margin-top: 22px !important; }
622
+
623
+ .from-top-23 {
624
+ margin-top: 23px !important; }
625
+
626
+ .from-top-24 {
627
+ margin-top: 24px !important; }
628
+
629
+ .from-top-25 {
630
+ margin-top: 25px !important; }
631
+
632
+ .from-top-26 {
633
+ margin-top: 26px !important; }
634
+
635
+ .from-top-27 {
636
+ margin-top: 27px !important; }
637
+
638
+ .from-top-28 {
639
+ margin-top: 28px !important; }
640
+
641
+ .from-top-29 {
642
+ margin-top: 29px !important; }
643
+
644
+ .from-top-30 {
645
+ margin-top: 30px !important; }
646
+
647
+ .from-top-31 {
648
+ margin-top: 31px !important; }
649
+
650
+ .from-top-32 {
651
+ margin-top: 32px !important; }
652
+
653
+ .from-top-33 {
654
+ margin-top: 33px !important; }
655
+
656
+ .from-top-34 {
657
+ margin-top: 34px !important; }
658
+
659
+ .from-top-35 {
660
+ margin-top: 35px !important; }
661
+
662
+ .from-top-36 {
663
+ margin-top: 36px !important; }
664
+
665
+ .from-top-37 {
666
+ margin-top: 37px !important; }
667
+
668
+ .from-top-38 {
669
+ margin-top: 38px !important; }
670
+
671
+ .from-top-39 {
672
+ margin-top: 39px !important; }
673
+
674
+ .from-top-40 {
675
+ margin-top: 40px !important; }
676
+
677
+ .from-top-41 {
678
+ margin-top: 41px !important; }
679
+
680
+ .from-top-42 {
681
+ margin-top: 42px !important; }
682
+
683
+ .from-top-43 {
684
+ margin-top: 43px !important; }
685
+
686
+ .from-top-44 {
687
+ margin-top: 44px !important; }
688
+
689
+ .from-top-45 {
690
+ margin-top: 45px !important; }
691
+
692
+ .from-top-46 {
693
+ margin-top: 46px !important; }
694
+
695
+ .from-top-47 {
696
+ margin-top: 47px !important; }
697
+
698
+ .from-top-48 {
699
+ margin-top: 48px !important; }
700
+
701
+ .from-top-49 {
702
+ margin-top: 49px !important; }
703
+
704
+ .from-top-50 {
705
+ margin-top: 50px !important; }
706
+
707
+ .from-top-51 {
708
+ margin-top: 51px !important; }
709
+
710
+ .from-top-52 {
711
+ margin-top: 52px !important; }
712
+
713
+ .from-top-53 {
714
+ margin-top: 53px !important; }
715
+
716
+ .from-top-54 {
717
+ margin-top: 54px !important; }
718
+
719
+ .from-top-55 {
720
+ margin-top: 55px !important; }
721
+
722
+ .from-top-56 {
723
+ margin-top: 56px !important; }
724
+
725
+ .from-top-57 {
726
+ margin-top: 57px !important; }
727
+
728
+ .from-top-58 {
729
+ margin-top: 58px !important; }
730
+
731
+ .from-top-59 {
732
+ margin-top: 59px !important; }
733
+
734
+ .from-top-60 {
735
+ margin-top: 60px !important; }
736
+
737
+ .from-top-61 {
738
+ margin-top: 61px !important; }
739
+
740
+ .from-top-62 {
741
+ margin-top: 62px !important; }
742
+
743
+ .from-top-63 {
744
+ margin-top: 63px !important; }
745
+
746
+ .from-top-64 {
747
+ margin-top: 64px !important; }
748
+
749
+ .from-top-65 {
750
+ margin-top: 65px !important; }
751
+
752
+ .from-top-66 {
753
+ margin-top: 66px !important; }
754
+
755
+ .from-top-67 {
756
+ margin-top: 67px !important; }
757
+
758
+ .from-top-68 {
759
+ margin-top: 68px !important; }
760
+
761
+ .from-top-69 {
762
+ margin-top: 69px !important; }
763
+
764
+ .from-top-70 {
765
+ margin-top: 70px !important; }
766
+
767
+ .from-top-71 {
768
+ margin-top: 71px !important; }
769
+
770
+ .from-top-72 {
771
+ margin-top: 72px !important; }
772
+
773
+ .from-top-73 {
774
+ margin-top: 73px !important; }
775
+
776
+ .from-top-74 {
777
+ margin-top: 74px !important; }
778
+
779
+ .from-top-75 {
780
+ margin-top: 75px !important; }
781
+
782
+ .from-top-76 {
783
+ margin-top: 76px !important; }
784
+
785
+ .from-top-77 {
786
+ margin-top: 77px !important; }
787
+
788
+ .from-top-78 {
789
+ margin-top: 78px !important; }
790
+
791
+ .from-top-79 {
792
+ margin-top: 79px !important; }
793
+
794
+ .from-top-80 {
795
+ margin-top: 80px !important; }
796
+
797
+ .from-top-81 {
798
+ margin-top: 81px !important; }
799
+
800
+ .from-top-82 {
801
+ margin-top: 82px !important; }
802
+
803
+ .from-top-83 {
804
+ margin-top: 83px !important; }
805
+
806
+ .from-top-84 {
807
+ margin-top: 84px !important; }
808
+
809
+ .from-top-85 {
810
+ margin-top: 85px !important; }
811
+
812
+ .from-top-86 {
813
+ margin-top: 86px !important; }
814
+
815
+ .from-top-87 {
816
+ margin-top: 87px !important; }
817
+
818
+ .from-top-88 {
819
+ margin-top: 88px !important; }
820
+
821
+ .from-top-89 {
822
+ margin-top: 89px !important; }
823
+
824
+ .from-top-90 {
825
+ margin-top: 90px !important; }
826
+
827
+ .from-top-91 {
828
+ margin-top: 91px !important; }
829
+
830
+ .from-top-92 {
831
+ margin-top: 92px !important; }
832
+
833
+ .from-top-93 {
834
+ margin-top: 93px !important; }
835
+
836
+ .from-top-94 {
837
+ margin-top: 94px !important; }
838
+
839
+ .from-top-95 {
840
+ margin-top: 95px !important; }
841
+
842
+ .from-top-96 {
843
+ margin-top: 96px !important; }
844
+
845
+ .pad-bot-0 {
846
+ padding-bottom: 0px !important; }
847
+
848
+ .pad-bot-1 {
849
+ padding-bottom: 1px !important; }
850
+
851
+ .pad-bot-2 {
852
+ padding-bottom: 2px !important; }
853
+
854
+ .pad-bot-3 {
855
+ padding-bottom: 3px !important; }
856
+
857
+ .pad-bot-4 {
858
+ padding-bottom: 4px !important; }
859
+
860
+ .pad-bot-5 {
861
+ padding-bottom: 5px !important; }
862
+
863
+ .pad-bot-6 {
864
+ padding-bottom: 6px !important; }
865
+
866
+ .pad-bot-7 {
867
+ padding-bottom: 7px !important; }
868
+
869
+ .pad-bot-8 {
870
+ padding-bottom: 8px !important; }
871
+
872
+ .pad-bot-9 {
873
+ padding-bottom: 9px !important; }
874
+
875
+ .pad-bot-10 {
876
+ padding-bottom: 10px !important; }
877
+
878
+ .pad-bot-11 {
879
+ padding-bottom: 11px !important; }
880
+
881
+ .pad-bot-12 {
882
+ padding-bottom: 12px !important; }
883
+
884
+ .pad-bot-13 {
885
+ padding-bottom: 13px !important; }
886
+
887
+ .pad-bot-14 {
888
+ padding-bottom: 14px !important; }
889
+
890
+ .pad-bot-15 {
891
+ padding-bottom: 15px !important; }
892
+
893
+ .pad-bot-16 {
894
+ padding-bottom: 16px !important; }
895
+
896
+ .pad-bot-17 {
897
+ padding-bottom: 17px !important; }
898
+
899
+ .pad-bot-18 {
900
+ padding-bottom: 18px !important; }
901
+
902
+ .pad-bot-19 {
903
+ padding-bottom: 19px !important; }
904
+
905
+ .pad-bot-20 {
906
+ padding-bottom: 20px !important; }
907
+
908
+ .pad-bot-21 {
909
+ padding-bottom: 21px !important; }
910
+
911
+ .pad-bot-22 {
912
+ padding-bottom: 22px !important; }
913
+
914
+ .pad-bot-23 {
915
+ padding-bottom: 23px !important; }
916
+
917
+ .pad-bot-24 {
918
+ padding-bottom: 24px !important; }
919
+
920
+ .pad-bot-25 {
921
+ padding-bottom: 25px !important; }
922
+
923
+ .pad-bot-26 {
924
+ padding-bottom: 26px !important; }
925
+
926
+ .pad-bot-27 {
927
+ padding-bottom: 27px !important; }
928
+
929
+ .pad-bot-28 {
930
+ padding-bottom: 28px !important; }
931
+
932
+ .pad-bot-29 {
933
+ padding-bottom: 29px !important; }
934
+
935
+ .pad-bot-30 {
936
+ padding-bottom: 30px !important; }
937
+
938
+ .pad-bot-31 {
939
+ padding-bottom: 31px !important; }
940
+
941
+ .pad-bot-32 {
942
+ padding-bottom: 32px !important; }
943
+
944
+ .pad-bot-33 {
945
+ padding-bottom: 33px !important; }
946
+
947
+ .pad-bot-34 {
948
+ padding-bottom: 34px !important; }
949
+
950
+ .pad-bot-35 {
951
+ padding-bottom: 35px !important; }
952
+
953
+ .pad-bot-36 {
954
+ padding-bottom: 36px !important; }
955
+
956
+ .pad-bot-37 {
957
+ padding-bottom: 37px !important; }
958
+
959
+ .pad-bot-38 {
960
+ padding-bottom: 38px !important; }
961
+
962
+ .pad-bot-39 {
963
+ padding-bottom: 39px !important; }
964
+
965
+ .pad-bot-40 {
966
+ padding-bottom: 40px !important; }
967
+
968
+ .pad-bot-41 {
969
+ padding-bottom: 41px !important; }
970
+
971
+ .pad-bot-42 {
972
+ padding-bottom: 42px !important; }
973
+
974
+ .pad-bot-43 {
975
+ padding-bottom: 43px !important; }
976
+
977
+ .pad-bot-44 {
978
+ padding-bottom: 44px !important; }
979
+
980
+ .pad-bot-45 {
981
+ padding-bottom: 45px !important; }
982
+
983
+ .pad-bot-46 {
984
+ padding-bottom: 46px !important; }
985
+
986
+ .pad-bot-47 {
987
+ padding-bottom: 47px !important; }
988
+
989
+ .pad-bot-48 {
990
+ padding-bottom: 48px !important; }
991
+
992
+ .pad-bot-49 {
993
+ padding-bottom: 49px !important; }
994
+
995
+ .pad-bot-50 {
996
+ padding-bottom: 50px !important; }
997
+
998
+ .pad-bot-51 {
999
+ padding-bottom: 51px !important; }
1000
+
1001
+ .pad-bot-52 {
1002
+ padding-bottom: 52px !important; }
1003
+
1004
+ .pad-bot-53 {
1005
+ padding-bottom: 53px !important; }
1006
+
1007
+ .pad-bot-54 {
1008
+ padding-bottom: 54px !important; }
1009
+
1010
+ .pad-bot-55 {
1011
+ padding-bottom: 55px !important; }
1012
+
1013
+ .pad-bot-56 {
1014
+ padding-bottom: 56px !important; }
1015
+
1016
+ .pad-bot-57 {
1017
+ padding-bottom: 57px !important; }
1018
+
1019
+ .pad-bot-58 {
1020
+ padding-bottom: 58px !important; }
1021
+
1022
+ .pad-bot-59 {
1023
+ padding-bottom: 59px !important; }
1024
+
1025
+ .pad-bot-60 {
1026
+ padding-bottom: 60px !important; }
1027
+
1028
+ .pad-bot-61 {
1029
+ padding-bottom: 61px !important; }
1030
+
1031
+ .pad-bot-62 {
1032
+ padding-bottom: 62px !important; }
1033
+
1034
+ .pad-bot-63 {
1035
+ padding-bottom: 63px !important; }
1036
+
1037
+ .pad-bot-64 {
1038
+ padding-bottom: 64px !important; }
1039
+
1040
+ .pad-bot-65 {
1041
+ padding-bottom: 65px !important; }
1042
+
1043
+ .pad-bot-66 {
1044
+ padding-bottom: 66px !important; }
1045
+
1046
+ .pad-bot-67 {
1047
+ padding-bottom: 67px !important; }
1048
+
1049
+ .pad-bot-68 {
1050
+ padding-bottom: 68px !important; }
1051
+
1052
+ .pad-bot-69 {
1053
+ padding-bottom: 69px !important; }
1054
+
1055
+ .pad-bot-70 {
1056
+ padding-bottom: 70px !important; }
1057
+
1058
+ .pad-bot-71 {
1059
+ padding-bottom: 71px !important; }
1060
+
1061
+ .pad-bot-72 {
1062
+ padding-bottom: 72px !important; }
1063
+
1064
+ .pad-bot-73 {
1065
+ padding-bottom: 73px !important; }
1066
+
1067
+ .pad-bot-74 {
1068
+ padding-bottom: 74px !important; }
1069
+
1070
+ .pad-bot-75 {
1071
+ padding-bottom: 75px !important; }
1072
+
1073
+ .pad-bot-76 {
1074
+ padding-bottom: 76px !important; }
1075
+
1076
+ .pad-bot-77 {
1077
+ padding-bottom: 77px !important; }
1078
+
1079
+ .pad-bot-78 {
1080
+ padding-bottom: 78px !important; }
1081
+
1082
+ .pad-bot-79 {
1083
+ padding-bottom: 79px !important; }
1084
+
1085
+ .pad-bot-80 {
1086
+ padding-bottom: 80px !important; }
1087
+
1088
+ .pad-bot-81 {
1089
+ padding-bottom: 81px !important; }
1090
+
1091
+ .pad-bot-82 {
1092
+ padding-bottom: 82px !important; }
1093
+
1094
+ .pad-bot-83 {
1095
+ padding-bottom: 83px !important; }
1096
+
1097
+ .pad-bot-84 {
1098
+ padding-bottom: 84px !important; }
1099
+
1100
+ .pad-bot-85 {
1101
+ padding-bottom: 85px !important; }
1102
+
1103
+ .pad-bot-86 {
1104
+ padding-bottom: 86px !important; }
1105
+
1106
+ .pad-bot-87 {
1107
+ padding-bottom: 87px !important; }
1108
+
1109
+ .pad-bot-88 {
1110
+ padding-bottom: 88px !important; }
1111
+
1112
+ .pad-bot-89 {
1113
+ padding-bottom: 89px !important; }
1114
+
1115
+ .pad-bot-90 {
1116
+ padding-bottom: 90px !important; }
1117
+
1118
+ .pad-bot-91 {
1119
+ padding-bottom: 91px !important; }
1120
+
1121
+ .pad-bot-92 {
1122
+ padding-bottom: 92px !important; }
1123
+
1124
+ .pad-bot-93 {
1125
+ padding-bottom: 93px !important; }
1126
+
1127
+ .pad-bot-94 {
1128
+ padding-bottom: 94px !important; }
1129
+
1130
+ .pad-bot-95 {
1131
+ padding-bottom: 95px !important; }
1132
+
1133
+ .pad-bot-96 {
1134
+ padding-bottom: 96px !important; }
1135
+
1136
+ .from-bot-0 {
1137
+ margin-bottom: 0px !important; }
1138
+
1139
+ .from-bot-1 {
1140
+ margin-bottom: 1px !important; }
1141
+
1142
+ .from-bot-2 {
1143
+ margin-bottom: 2px !important; }
1144
+
1145
+ .from-bot-3 {
1146
+ margin-bottom: 3px !important; }
1147
+
1148
+ .from-bot-4 {
1149
+ margin-bottom: 4px !important; }
1150
+
1151
+ .from-bot-5 {
1152
+ margin-bottom: 5px !important; }
1153
+
1154
+ .from-bot-6 {
1155
+ margin-bottom: 6px !important; }
1156
+
1157
+ .from-bot-7 {
1158
+ margin-bottom: 7px !important; }
1159
+
1160
+ .from-bot-8 {
1161
+ margin-bottom: 8px !important; }
1162
+
1163
+ .from-bot-9 {
1164
+ margin-bottom: 9px !important; }
1165
+
1166
+ .from-bot-10 {
1167
+ margin-bottom: 10px !important; }
1168
+
1169
+ .from-bot-11 {
1170
+ margin-bottom: 11px !important; }
1171
+
1172
+ .from-bot-12 {
1173
+ margin-bottom: 12px !important; }
1174
+
1175
+ .from-bot-13 {
1176
+ margin-bottom: 13px !important; }
1177
+
1178
+ .from-bot-14 {
1179
+ margin-bottom: 14px !important; }
1180
+
1181
+ .from-bot-15 {
1182
+ margin-bottom: 15px !important; }
1183
+
1184
+ .from-bot-16 {
1185
+ margin-bottom: 16px !important; }
1186
+
1187
+ .from-bot-17 {
1188
+ margin-bottom: 17px !important; }
1189
+
1190
+ .from-bot-18 {
1191
+ margin-bottom: 18px !important; }
1192
+
1193
+ .from-bot-19 {
1194
+ margin-bottom: 19px !important; }
1195
+
1196
+ .from-bot-20 {
1197
+ margin-bottom: 20px !important; }
1198
+
1199
+ .from-bot-21 {
1200
+ margin-bottom: 21px !important; }
1201
+
1202
+ .from-bot-22 {
1203
+ margin-bottom: 22px !important; }
1204
+
1205
+ .from-bot-23 {
1206
+ margin-bottom: 23px !important; }
1207
+
1208
+ .from-bot-24 {
1209
+ margin-bottom: 24px !important; }
1210
+
1211
+ .from-bot-25 {
1212
+ margin-bottom: 25px !important; }
1213
+
1214
+ .from-bot-26 {
1215
+ margin-bottom: 26px !important; }
1216
+
1217
+ .from-bot-27 {
1218
+ margin-bottom: 27px !important; }
1219
+
1220
+ .from-bot-28 {
1221
+ margin-bottom: 28px !important; }
1222
+
1223
+ .from-bot-29 {
1224
+ margin-bottom: 29px !important; }
1225
+
1226
+ .from-bot-30 {
1227
+ margin-bottom: 30px !important; }
1228
+
1229
+ .from-bot-31 {
1230
+ margin-bottom: 31px !important; }
1231
+
1232
+ .from-bot-32 {
1233
+ margin-bottom: 32px !important; }
1234
+
1235
+ .from-bot-33 {
1236
+ margin-bottom: 33px !important; }
1237
+
1238
+ .from-bot-34 {
1239
+ margin-bottom: 34px !important; }
1240
+
1241
+ .from-bot-35 {
1242
+ margin-bottom: 35px !important; }
1243
+
1244
+ .from-bot-36 {
1245
+ margin-bottom: 36px !important; }
1246
+
1247
+ .from-bot-37 {
1248
+ margin-bottom: 37px !important; }
1249
+
1250
+ .from-bot-38 {
1251
+ margin-bottom: 38px !important; }
1252
+
1253
+ .from-bot-39 {
1254
+ margin-bottom: 39px !important; }
1255
+
1256
+ .from-bot-40 {
1257
+ margin-bottom: 40px !important; }
1258
+
1259
+ .from-bot-41 {
1260
+ margin-bottom: 41px !important; }
1261
+
1262
+ .from-bot-42 {
1263
+ margin-bottom: 42px !important; }
1264
+
1265
+ .from-bot-43 {
1266
+ margin-bottom: 43px !important; }
1267
+
1268
+ .from-bot-44 {
1269
+ margin-bottom: 44px !important; }
1270
+
1271
+ .from-bot-45 {
1272
+ margin-bottom: 45px !important; }
1273
+
1274
+ .from-bot-46 {
1275
+ margin-bottom: 46px !important; }
1276
+
1277
+ .from-bot-47 {
1278
+ margin-bottom: 47px !important; }
1279
+
1280
+ .from-bot-48 {
1281
+ margin-bottom: 48px !important; }
1282
+
1283
+ .from-bot-49 {
1284
+ margin-bottom: 49px !important; }
1285
+
1286
+ .from-bot-50 {
1287
+ margin-bottom: 50px !important; }
1288
+
1289
+ .from-bot-51 {
1290
+ margin-bottom: 51px !important; }
1291
+
1292
+ .from-bot-52 {
1293
+ margin-bottom: 52px !important; }
1294
+
1295
+ .from-bot-53 {
1296
+ margin-bottom: 53px !important; }
1297
+
1298
+ .from-bot-54 {
1299
+ margin-bottom: 54px !important; }
1300
+
1301
+ .from-bot-55 {
1302
+ margin-bottom: 55px !important; }
1303
+
1304
+ .from-bot-56 {
1305
+ margin-bottom: 56px !important; }
1306
+
1307
+ .from-bot-57 {
1308
+ margin-bottom: 57px !important; }
1309
+
1310
+ .from-bot-58 {
1311
+ margin-bottom: 58px !important; }
1312
+
1313
+ .from-bot-59 {
1314
+ margin-bottom: 59px !important; }
1315
+
1316
+ .from-bot-60 {
1317
+ margin-bottom: 60px !important; }
1318
+
1319
+ .from-bot-61 {
1320
+ margin-bottom: 61px !important; }
1321
+
1322
+ .from-bot-62 {
1323
+ margin-bottom: 62px !important; }
1324
+
1325
+ .from-bot-63 {
1326
+ margin-bottom: 63px !important; }
1327
+
1328
+ .from-bot-64 {
1329
+ margin-bottom: 64px !important; }
1330
+
1331
+ .from-bot-65 {
1332
+ margin-bottom: 65px !important; }
1333
+
1334
+ .from-bot-66 {
1335
+ margin-bottom: 66px !important; }
1336
+
1337
+ .from-bot-67 {
1338
+ margin-bottom: 67px !important; }
1339
+
1340
+ .from-bot-68 {
1341
+ margin-bottom: 68px !important; }
1342
+
1343
+ .from-bot-69 {
1344
+ margin-bottom: 69px !important; }
1345
+
1346
+ .from-bot-70 {
1347
+ margin-bottom: 70px !important; }
1348
+
1349
+ .from-bot-71 {
1350
+ margin-bottom: 71px !important; }
1351
+
1352
+ .from-bot-72 {
1353
+ margin-bottom: 72px !important; }
1354
+
1355
+ .from-bot-73 {
1356
+ margin-bottom: 73px !important; }
1357
+
1358
+ .from-bot-74 {
1359
+ margin-bottom: 74px !important; }
1360
+
1361
+ .from-bot-75 {
1362
+ margin-bottom: 75px !important; }
1363
+
1364
+ .from-bot-76 {
1365
+ margin-bottom: 76px !important; }
1366
+
1367
+ .from-bot-77 {
1368
+ margin-bottom: 77px !important; }
1369
+
1370
+ .from-bot-78 {
1371
+ margin-bottom: 78px !important; }
1372
+
1373
+ .from-bot-79 {
1374
+ margin-bottom: 79px !important; }
1375
+
1376
+ .from-bot-80 {
1377
+ margin-bottom: 80px !important; }
1378
+
1379
+ .from-bot-81 {
1380
+ margin-bottom: 81px !important; }
1381
+
1382
+ .from-bot-82 {
1383
+ margin-bottom: 82px !important; }
1384
+
1385
+ .from-bot-83 {
1386
+ margin-bottom: 83px !important; }
1387
+
1388
+ .from-bot-84 {
1389
+ margin-bottom: 84px !important; }
1390
+
1391
+ .from-bot-85 {
1392
+ margin-bottom: 85px !important; }
1393
+
1394
+ .from-bot-86 {
1395
+ margin-bottom: 86px !important; }
1396
+
1397
+ .from-bot-87 {
1398
+ margin-bottom: 87px !important; }
1399
+
1400
+ .from-bot-88 {
1401
+ margin-bottom: 88px !important; }
1402
+
1403
+ .from-bot-89 {
1404
+ margin-bottom: 89px !important; }
1405
+
1406
+ .from-bot-90 {
1407
+ margin-bottom: 90px !important; }
1408
+
1409
+ .from-bot-91 {
1410
+ margin-bottom: 91px !important; }
1411
+
1412
+ .from-bot-92 {
1413
+ margin-bottom: 92px !important; }
1414
+
1415
+ .from-bot-93 {
1416
+ margin-bottom: 93px !important; }
1417
+
1418
+ .from-bot-94 {
1419
+ margin-bottom: 94px !important; }
1420
+
1421
+ .from-bot-95 {
1422
+ margin-bottom: 95px !important; }
1423
+
1424
+ .from-bot-96 {
1425
+ margin-bottom: 96px !important; }
1426
+
1427
+ /* RESET MARGIN AND PADDING FOR ALL OUR ICONS ONLY */
1428
+ [class^="icon-access"] {
1429
+ margin: 0;
1430
+ padding: 0; }
1431
+
1432
+ [class^="icon-cred"] {
1433
+ margin: 0;
1434
+ padding: 0; }
1435
+
1436
+ [class^="icon-layouts"] {
1437
+ margin: 0;
1438
+ padding: 0; }
1439
+
1440
+ [class^="icon-module"] {
1441
+ margin: 0;
1442
+ padding: 0; }
1443
+
1444
+ [class^="icon-types"] {
1445
+ margin: 0;
1446
+ padding: 0; }
1447
+
1448
+ [class^="icon-views"] {
1449
+ margin: 0;
1450
+ padding: 0; }
1451
+
1452
+ [class^="icon-packager"] {
1453
+ margin: 0;
1454
+ padding: 0; }
1455
+
1456
+ [class^="icon-toolset"] {
1457
+ margin: 0;
1458
+ padding: 0; }
1459
+
1460
+ [class^="icon-wpml"] {
1461
+ margin: 0;
1462
+ padding: 0; }
1463
+
1464
+ [class^="icon-bootstrap"] {
1465
+ margin: 0;
1466
+ padding: 0; }
1467
+
1468
+ [class^="icon-conditional"] {
1469
+ margin: 0;
1470
+ padding: 0; }
embedded/toolset/onthego-resources/onthego-styles/onthego-styles-helper.scss ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ ** Do not edit onthego-styles-helper.css directly always
3
+ ** use this file otherwise changes will be lost at first compile.
4
+ ** ONT CSS Helper
5
+ ** a collection of rules to be used any where
6
+ **/
7
+
8
+ /* SET A NUMBER OF CLASSES TO FORCE THE SIZE OF THE ICON */
9
+ @for $i from 12 through 96 {
10
+ .ont-icon-#{$i} { font-size:$i + px!important; }
11
+ }
12
+
13
+ @for $i from 0 through 96 {
14
+ .pad-top-#{$i} { padding-top:$i + px!important; }
15
+ }
16
+
17
+ @for $i from 0 through 96 {
18
+ .from-top-#{$i} { margin-top:$i + px!important; }
19
+ }
20
+
21
+ @for $i from 0 through 96 {
22
+ .pad-bot-#{$i} { padding-bottom:$i + px!important; }
23
+ }
24
+
25
+ @for $i from 0 through 96 {
26
+ .from-bot-#{$i} { margin-bottom:$i + px!important; }
27
+ }
28
+
29
+
30
+ /* RESET MARGIN AND PADDING FOR ALL OUR ICONS ONLY */
31
+ @each $name in (access, cred, layouts, module, types, views, packager, toolset, wpml, bootstrap, conditional){
32
+ [class^="icon-#{$name}"]{
33
+ margin:0;
34
+ padding:0;
35
+ }
36
+ }
embedded/toolset/onthego-resources/onthego-styles/onthego-styles.css ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* ON THE GO GENERAL STYLES */
2
+
3
+ /* STYLES LOADER */
4
+ @import url('../onthegosystems-icons/css/onthegosystems-icons.css');
5
+ @import url('onthego-colors.css');
6
+ @import url('onthego-styles-helper.css');
7
+ @import url('onthego-admin-styles.css');
8
+ @import url('onthego-buttons.css');
9
+
10
+ /* GENERAL OVERRIDES */
11
+ [class^="icon-"] {
12
+ display:inline-block;
13
+ width: auto;
14
+ height: auto;
15
+ line-height: normal;
16
+ background-image: none;
17
+ background-position: 0% 0%;
18
+ background-repeat: repeat;
19
+ margin-top: 0;
20
+ vertical-align: middle;
21
+ }
embedded/toolset/onthego-resources/onthegosystems-branding-loader.php ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ if( class_exists('OnTheGoSystemsStyles_Class') ) {
4
+ return;
5
+ };
6
+
7
+ if( !defined('ON_THE_GO_SYSTEMS_BRANDING_ABS_PATH') ){
8
+ define( 'ON_THE_GO_SYSTEMS_BRANDING_ABS_PATH', dirname(__FILE__) );
9
+ }
10
+
11
+
12
+ if( !defined('ON_THE_GO_SYSTEMS_BRANDING_CLASSES_PATH') ){
13
+ define( 'ON_THE_GO_SYSTEMS_BRANDING_CLASSES_PATH', dirname(__FILE__) . '/classes/' );
14
+ }
15
+
16
+
17
+ require_once( ON_THE_GO_SYSTEMS_BRANDING_CLASSES_PATH . 'onthegosystems-styles.class.php' );
18
+
19
+
20
+ if( !function_exists('on_the_go_systems_branding_init') )
21
+ {
22
+ function on_the_go_systems_branding_init()
23
+ {
24
+ global $on_the_go_system_branding;
25
+
26
+ $on_the_go_system_branding = OnTheGoSystemsStyles_Class::getInstance();
27
+ }
28
+
29
+ function ont_set_on_the_go_systems_uri_and_start( $path )
30
+ {
31
+ if( !defined('ON_THE_GO_SYSTEMS_BRANDING_REL_PATH') )
32
+ {
33
+ define( 'ON_THE_GO_SYSTEMS_BRANDING_REL_PATH', $path );
34
+ }
35
+ }
36
+ // make sure we load styles after font awesome
37
+ add_action( 'init', 'on_the_go_systems_branding_init', 110 );
38
+ }
39
+
40
+
embedded/toolset/onthego-resources/onthegosystems-icons/.fontcustom-manifest.json ADDED
@@ -0,0 +1,128 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "checksum": {
3
+ "previous": "65c5f624e7b3a7731aeb86b34dab9f6546b6019d0e948635813de379e3a3ee8f",
4
+ "current": "65c5f624e7b3a7731aeb86b34dab9f6546b6019d0e948635813de379e3a3ee8f"
5
+ },
6
+ "fonts": [
7
+ "fonts/onthegosystems-icons_65c5f624e7b3a7731aeb86b34dab9f65.ttf",
8
+ "fonts/onthegosystems-icons_65c5f624e7b3a7731aeb86b34dab9f65.svg",
9
+ "fonts/onthegosystems-icons_65c5f624e7b3a7731aeb86b34dab9f65.woff",
10
+ "fonts/onthegosystems-icons_65c5f624e7b3a7731aeb86b34dab9f65.eot"
11
+ ],
12
+ "glyphs": {
13
+ "access": {
14
+ "codepoint": 61712,
15
+ "source": "vectors/access.svg"
16
+ },
17
+ "access-logo": {
18
+ "codepoint": 61713,
19
+ "source": "vectors/access-logo.svg"
20
+ },
21
+ "bootstrap": {
22
+ "codepoint": 61714,
23
+ "source": "vectors/bootstrap.svg"
24
+ },
25
+ "bootstrap-logo": {
26
+ "codepoint": 61715,
27
+ "source": "vectors/bootstrap-logo.svg"
28
+ },
29
+ "conditional-alert": {
30
+ "codepoint": 61730,
31
+ "source": "vectors/conditional-alert.svg"
32
+ },
33
+ "conditional-if": {
34
+ "codepoint": 61731,
35
+ "source": "vectors/conditional-if.svg"
36
+ },
37
+ "cred": {
38
+ "codepoint": 61716,
39
+ "source": "vectors/cred.svg"
40
+ },
41
+ "cred-logo": {
42
+ "codepoint": 61717,
43
+ "source": "vectors/cred-logo.svg"
44
+ },
45
+ "layouts": {
46
+ "codepoint": 61718,
47
+ "source": "vectors/layouts.svg"
48
+ },
49
+ "layouts-logo": {
50
+ "codepoint": 61719,
51
+ "source": "vectors/layouts-logo.svg"
52
+ },
53
+ "module": {
54
+ "codepoint": 61720,
55
+ "source": "vectors/module.svg"
56
+ },
57
+ "module-logo": {
58
+ "codepoint": 61721,
59
+ "source": "vectors/module-logo.svg"
60
+ },
61
+ "packager": {
62
+ "codepoint": 61728,
63
+ "source": "vectors/packager.svg"
64
+ },
65
+ "packager-logo": {
66
+ "codepoint": 61729,
67
+ "source": "vectors/packager-logo.svg"
68
+ },
69
+ "toolset-logo": {
70
+ "codepoint": 61722,
71
+ "source": "vectors/toolset-logo.svg"
72
+ },
73
+ "types": {
74
+ "codepoint": 61723,
75
+ "source": "vectors/types.svg"
76
+ },
77
+ "types-logo": {
78
+ "codepoint": 61724,
79
+ "source": "vectors/types-logo.svg"
80
+ },
81
+ "views": {
82
+ "codepoint": 61725,
83
+ "source": "vectors/views.svg"
84
+ },
85
+ "views-logo": {
86
+ "codepoint": 61726,
87
+ "source": "vectors/views-logo.svg"
88
+ },
89
+ "wpml-logo": {
90
+ "codepoint": 61727,
91
+ "source": "vectors/wpml-logo.svg"
92
+ }
93
+ },
94
+ "options": {
95
+ "autowidth": false,
96
+ "config": "fontcustom.yml",
97
+ "css_selector": ".icon-{{glyph}}",
98
+ "debug": false,
99
+ "file_hash": false,
100
+ "font_name": "onthegosystems-icons",
101
+ "force": false,
102
+ "input": {
103
+ "templates": "vectors",
104
+ "vectors": "vectors"
105
+ },
106
+ "no_hash": false,
107
+ "output": {
108
+ "css": "css",
109
+ "fonts": "fonts",
110
+ "preview": "fonts"
111
+ },
112
+ "preprocessor_path": null,
113
+ "project_root": {
114
+ "pwd": null
115
+ },
116
+ "quiet": false,
117
+ "templates": [
118
+ "css",
119
+ "scss",
120
+ "preview"
121
+ ]
122
+ },
123
+ "templates": [
124
+ "css/onthegosystems-icons.css",
125
+ "css/_onthegosystems-icons.scss",
126
+ "fonts/onthegosystems-icons-preview.html"
127
+ ]
128
+ }
embedded/toolset/onthego-resources/onthegosystems-icons/css/_onthegosystems-icons.css ADDED
@@ -0,0 +1,86 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @font-face {
2
+ font-family: "onthegosystems-icons";
3
+ src: font-url("../fonts/onthegosystems-icons_8d9a6c3bf95bd4630d40a722f192ec47.eot");
4
+ src: font-url("../fonts/onthegosystems-icons_8d9a6c3bf95bd4630d40a722f192ec47.eot?#iefix") format("embedded-opentype"), font-url("../fonts/onthegosystems-icons_8d9a6c3bf95bd4630d40a722f192ec47.woff") format("woff"), font-url("../fonts/onthegosystems-icons_8d9a6c3bf95bd4630d40a722f192ec47.ttf") format("truetype"), font-url("../fonts/onthegosystems-icons_8d9a6c3bf95bd4630d40a722f192ec47.svg#onthegosystems-icons") format("svg");
5
+ font-weight: normal;
6
+ font-style: normal; }
7
+ @media screen and (-webkit-min-device-pixel-ratio: 0) {
8
+ @font-face {
9
+ font-family: "onthegosystems-icons";
10
+ src: font-url("../fonts/onthegosystems-icons_8d9a6c3bf95bd4630d40a722f192ec47.svg#onthegosystems-icons") format("svg"); } }
11
+ [data-icon]:before {
12
+ content: attr(data-icon); }
13
+
14
+ [data-icon]:before,
15
+ .icon-access:before,
16
+ .icon-access-logo:before,
17
+ .icon-bootstrap:before,
18
+ .icon-bootstrap-logo:before,
19
+ .icon-cred:before,
20
+ .icon-cred-logo:before,
21
+ .icon-layouts:before,
22
+ .icon-layouts-logo:before,
23
+ .icon-module:before,
24
+ .icon-module-logo:before,
25
+ .icon-toolset-logo:before,
26
+ .icon-types:before,
27
+ .icon-types-logo:before,
28
+ .icon-views:before,
29
+ .icon-views-logo:before {
30
+ display: inline-block;
31
+ font-family: "onthegosystems-icons";
32
+ font-style: normal;
33
+ font-weight: normal;
34
+ font-variant: normal;
35
+ line-height: 1;
36
+ text-decoration: inherit;
37
+ text-rendering: optimizeLegibility;
38
+ text-transform: none;
39
+ -moz-osx-font-smoothing: grayscale;
40
+ -webkit-font-smoothing: antialiased;
41
+ font-smoothing: antialiased; }
42
+
43
+ .icon-access:before {
44
+ content: "\f110"; }
45
+
46
+ .icon-access-logo:before {
47
+ content: "\f111"; }
48
+
49
+ .icon-bootstrap:before {
50
+ content: "\f112"; }
51
+
52
+ .icon-bootstrap-logo:before {
53
+ content: "\f113"; }
54
+
55
+ .icon-cred:before {
56
+ content: "\f114"; }
57
+
58
+ .icon-cred-logo:before {
59
+ content: "\f115"; }
60
+
61
+ .icon-layouts:before {
62
+ content: "\f116"; }
63
+
64
+ .icon-layouts-logo:before {
65
+ content: "\f117"; }
66
+
67
+ .icon-module:before {
68
+ content: "\f118"; }
69
+
70
+ .icon-module-logo:before {
71
+ content: "\f119"; }
72
+
73
+ .icon-toolset-logo:before {
74
+ content: "\f11a"; }
75
+
76
+ .icon-types:before {
77
+ content: "\f11b"; }
78
+
79
+ .icon-types-logo:before {
80
+ content: "\f11c"; }
81
+
82
+ .icon-views:before {
83
+ content: "\f11d"; }
84
+
85
+ .icon-views-logo:before {
86
+ content: "\f11e"; }
embedded/toolset/onthego-resources/onthegosystems-icons/css/_onthegosystems-icons.scss ADDED
@@ -0,0 +1,79 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ //
2
+ // Icon Font: onthegosystems-icons
3
+ //
4
+
5
+ @font-face {
6
+ font-family: "onthegosystems-icons";
7
+ src: font-url("../fonts/onthegosystems-icons_65c5f624e7b3a7731aeb86b34dab9f65.eot");
8
+ src: font-url("../fonts/onthegosystems-icons_65c5f624e7b3a7731aeb86b34dab9f65.eot?#iefix") format("embedded-opentype"),
9
+ font-url("../fonts/onthegosystems-icons_65c5f624e7b3a7731aeb86b34dab9f65.woff") format("woff"),
10
+ font-url("../fonts/onthegosystems-icons_65c5f624e7b3a7731aeb86b34dab9f65.ttf") format("truetype"),
11
+ font-url("../fonts/onthegosystems-icons_65c5f624e7b3a7731aeb86b34dab9f65.svg#onthegosystems-icons") format("svg");
12
+ font-weight: normal;
13
+ font-style: normal;
14
+ }
15
+
16
+ @media screen and (-webkit-min-device-pixel-ratio:0) {
17
+ @font-face {
18
+ font-family: "onthegosystems-icons";
19
+ src: font-url("../fonts/onthegosystems-icons_65c5f624e7b3a7731aeb86b34dab9f65.svg#onthegosystems-icons") format("svg");
20
+ }
21
+ }
22
+
23
+ [data-icon]:before { content: attr(data-icon); }
24
+
25
+ [data-icon]:before,
26
+ .icon-access:before,
27
+ .icon-access-logo:before,
28
+ .icon-bootstrap:before,
29
+ .icon-bootstrap-logo:before,
30
+ .icon-conditional-alert:before,
31
+ .icon-conditional-if:before,
32
+ .icon-cred:before,
33
+ .icon-cred-logo:before,
34
+ .icon-layouts:before,
35
+ .icon-layouts-logo:before,
36
+ .icon-module:before,
37
+ .icon-module-logo:before,
38
+ .icon-packager:before,
39
+ .icon-packager-logo:before,
40
+ .icon-toolset-logo:before,
41
+ .icon-types:before,
42
+ .icon-types-logo:before,
43
+ .icon-views:before,
44
+ .icon-views-logo:before,
45
+ .icon-wpml-logo:before {
46
+ display: inline-block;
47
+ font-family: "onthegosystems-icons";
48
+ font-style: normal;
49
+ font-weight: normal;
50
+ font-variant: normal;
51
+ line-height: 1;
52
+ text-decoration: inherit;
53
+ text-rendering: optimizeLegibility;
54
+ text-transform: none;
55
+ -moz-osx-font-smoothing: grayscale;
56
+ -webkit-font-smoothing: antialiased;
57
+ font-smoothing: antialiased;
58
+ }
59
+
60
+ .icon-access:before { content: "\f110"; }
61
+ .icon-access-logo:before { content: "\f111"; }
62
+ .icon-bootstrap:before { content: "\f112"; }
63
+ .icon-bootstrap-logo:before { content: "\f113"; }
64
+ .icon-conditional-alert:before { content: "\f122"; }
65
+ .icon-conditional-if:before { content: "\f123"; }
66
+ .icon-cred:before { content: "\f114"; }
67
+ .icon-cred-logo:before { content: "\f115"; }
68
+ .icon-layouts:before { content: "\f116"; }
69
+ .icon-layouts-logo:before { content: "\f117"; }
70
+ .icon-module:before { content: "\f118"; }
71
+ .icon-module-logo:before { content: "\f119"; }
72
+ .icon-packager:before { content: "\f120"; }
73
+ .icon-packager-logo:before { content: "\f121"; }
74
+ .icon-toolset-logo:before { content: "\f11a"; }
75
+ .icon-types:before { content: "\f11b"; }
76
+ .icon-types-logo:before { content: "\f11c"; }
77
+ .icon-views:before { content: "\f11d"; }
78
+ .icon-views-logo:before { content: "\f11e"; }
79
+ .icon-wpml-logo:before { content: "\f11f"; }
embedded/toolset/onthego-resources/onthegosystems-icons/css/onthegosystems-icons.css ADDED
@@ -0,0 +1,79 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ Icon Font: onthegosystems-icons
3
+ */
4
+
5
+ @font-face {
6
+ font-family: "onthegosystems-icons";
7
+ src: url("../fonts/onthegosystems-icons_65c5f624e7b3a7731aeb86b34dab9f65.eot");
8
+ src: url("../fonts/onthegosystems-icons_65c5f624e7b3a7731aeb86b34dab9f65.eot?#iefix") format("embedded-opentype"),
9
+ url("../fonts/onthegosystems-icons_65c5f624e7b3a7731aeb86b34dab9f65.woff") format("woff"),
10
+ url("../fonts/onthegosystems-icons_65c5f624e7b3a7731aeb86b34dab9f65.ttf") format("truetype"),
11
+ url("../fonts/onthegosystems-icons_65c5f624e7b3a7731aeb86b34dab9f65.svg#onthegosystems-icons") format("svg");
12
+ font-weight: normal;
13
+ font-style: normal;
14
+ }
15
+
16
+ @media screen and (-webkit-min-device-pixel-ratio:0) {
17
+ @font-face {
18
+ font-family: "onthegosystems-icons";
19
+ src: url("../fonts/onthegosystems-icons_65c5f624e7b3a7731aeb86b34dab9f65.svg#onthegosystems-icons") format("svg");
20
+ }
21
+ }
22
+
23
+ [data-icon]:before { content: attr(data-icon); }
24
+
25
+ [data-icon]:before,
26
+ .icon-access:before,
27
+ .icon-access-logo:before,
28
+ .icon-bootstrap:before,
29
+ .icon-bootstrap-logo:before,
30
+ .icon-conditional-alert:before,
31
+ .icon-conditional-if:before,
32
+ .icon-cred:before,
33
+ .icon-cred-logo:before,
34
+ .icon-layouts:before,
35
+ .icon-layouts-logo:before,
36
+ .icon-module:before,
37
+ .icon-module-logo:before,
38
+ .icon-packager:before,
39
+ .icon-packager-logo:before,
40
+ .icon-toolset-logo:before,
41
+ .icon-types:before,
42
+ .icon-types-logo:before,
43
+ .icon-views:before,
44
+ .icon-views-logo:before,
45
+ .icon-wpml-logo:before {
46
+ display: inline-block;
47
+ font-family: "onthegosystems-icons";
48
+ font-style: normal;
49
+ font-weight: normal;
50
+ font-variant: normal;
51
+ line-height: 1;
52
+ text-decoration: inherit;
53
+ text-rendering: optimizeLegibility;
54
+ text-transform: none;
55
+ -moz-osx-font-smoothing: grayscale;
56
+ -webkit-font-smoothing: antialiased;
57
+ font-smoothing: antialiased;
58
+ }
59
+
60
+ .icon-access:before { content: "\f110"; }
61
+ .icon-access-logo:before { content: "\f111"; }
62
+ .icon-bootstrap:before { content: "\f112"; }
63
+ .icon-bootstrap-logo:before { content: "\f113"; }
64
+ .icon-conditional-alert:before { content: "\f122"; }
65
+ .icon-conditional-if:before { content: "\f123"; }
66
+ .icon-cred:before { content: "\f114"; }
67
+ .icon-cred-logo:before { content: "\f115"; }
68
+ .icon-layouts:before { content: "\f116"; }
69
+ .icon-layouts-logo:before { content: "\f117"; }
70
+ .icon-module:before { content: "\f118"; }
71
+ .icon-module-logo:before { content: "\f119"; }
72
+ .icon-packager:before { content: "\f120"; }
73
+ .icon-packager-logo:before { content: "\f121"; }
74
+ .icon-toolset-logo:before { content: "\f11a"; }
75
+ .icon-types:before { content: "\f11b"; }
76
+ .icon-types-logo:before { content: "\f11c"; }
77
+ .icon-views:before { content: "\f11d"; }
78
+ .icon-views-logo:before { content: "\f11e"; }
79
+ .icon-wpml-logo:before { content: "\f11f"; }
embedded/toolset/onthego-resources/onthegosystems-icons/fontcustom.yml ADDED
@@ -0,0 +1,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ##
2
+ # FONTCUSTOM CONFIG
3
+ #
4
+ # This file will automatically be loaded if located inside your vector dir.
5
+ # Otherwise, pass it to `compile` or `watch` with:
6
+ #
7
+ # --config=path/to/config.yml
8
+ # -c path/to/containing/dir/
9
+ ##
10
+
11
+ # ---------------------------------------------------------------------------- #
12
+ # Output Directory
13
+ # absolute path OR relative path from `pwd`
14
+ #
15
+ # default: INPUT/fontcustom
16
+ project_root: {pwd}
17
+ input: vectors
18
+ output:
19
+ fonts: fonts # required
20
+ css: css
21
+
22
+ # ---------------------------------------------------------------------------- #
23
+ # Templates
24
+ # array of templates to generate alongside fonts
25
+ # accepts shortcuts or paths (absolute, relative to INPUT, or relative to `pwd`)
26
+ #
27
+ # shortcuts:
28
+ # preview
29
+ # css, scss
30
+ # bootstrap, bootstrap-scss
31
+ # bootstrap-ie7, bootstrap-ie7-scss
32
+ #
33
+ # default: [ css, preview ]
34
+
35
+ templates: [ css, scss, preview ]
36
+
37
+ # ---------------------------------------------------------------------------- #
38
+ # Font Name
39
+ # automatically normalized to lower-spinal-case
40
+ #
41
+ # default: fontcustom
42
+
43
+ font_name: onthegosystems-icons
44
+
45
+ # ---------------------------------------------------------------------------- #
46
+ # Font Hash
47
+ # option to attach a cache-breaking fingerprint to each font file
48
+ #
49
+ # default: true
50
+
51
+ file_hash: false
52
+
53
+ # ---------------------------------------------------------------------------- #
54
+ # CSS Class Prefix
55
+ #
56
+ # default: icon-
57
+
58
+ #css_prefix: icon-
59
+
60
+ # ---------------------------------------------------------------------------- #
61
+ # @Font-face Path
62
+ # font path used in @font-face declarations
63
+ # only affects SCSS shortcut templates and custom templates
64
+ #
65
+ # default: none
66
+
67
+ #font_face_path: assets/fonts/fontcustom
68
+
69
+ # ---------------------------------------------------------------------------- #
70
+ # Debug
71
+ # show raw output from Font Forge
72
+ #
73
+ # default: false
74
+
75
+ #debug: true
76
+
77
+ # ---------------------------------------------------------------------------- #
78
+ # Verbose
79
+ # print out all file operations
80
+ #
81
+ # default: true
82
+
83
+ #verbose: false
embedded/toolset/onthego-resources/onthegosystems-icons/fonts/onthegosystems-icons-preview.html ADDED
@@ -0,0 +1,503 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>onthegosystems-icons glyphs preview</title>
5
+
6
+ <style>
7
+ /* Page Styles */
8
+
9
+ * {
10
+ -moz-box-sizing: border-box;
11
+ -webkit-box-sizing: border-box;
12
+ box-sizing: border-box;
13
+ margin: 0;
14
+ padding: 0;
15
+ }
16
+
17
+ body {
18
+ background: #fff;
19
+ color: #444;
20
+ font: 16px/1.5 "Helvetica Neue", Helvetica, Arial, sans-serif;
21
+ }
22
+
23
+ a,
24
+ a:visited {
25
+ color: #888;
26
+ text-decoration: underline;
27
+ }
28
+ a:hover,
29
+ a:focus { color: #000; }
30
+
31
+ header {
32
+ border-bottom: 2px solid #ddd;
33
+ margin-bottom: 20px;
34
+ overflow: hidden;
35
+ padding: 20px 0;
36
+ }
37
+
38
+ header h1 {
39
+ color: #888;
40
+ float: left;
41
+ font-size: 36px;
42
+ font-weight: 300;
43
+ }
44
+
45
+ header a {
46
+ float: right;
47
+ font-size: 14px;
48
+ }
49
+
50
+ .container {
51
+ margin: 0 auto;
52
+ max-width: 1200px;
53
+ min-width: 960px;
54
+ padding: 0 40px;
55
+ width: 90%;
56
+ }
57
+
58
+ .glyph {
59
+ border-bottom: 1px dotted #ccc;
60
+ padding: 10px 0 20px;
61
+ margin-bottom: 20px;
62
+ }
63
+
64
+ .preview-glyphs { vertical-align: bottom; }
65
+
66
+ .preview-scale {
67
+ color: #888;
68
+ font-size: 12px;
69
+ margin-top: 5px;
70
+ }
71
+
72
+ .step {
73
+ display: inline-block;
74
+ line-height: 1;
75
+ position: relative;
76
+ width: 10%;
77
+ }
78
+
79
+ .step .letters,
80
+ .step i {
81
+ -webkit-transition: opacity .3s;
82
+ -moz-transition: opacity .3s;
83
+ -ms-transition: opacity .3s;
84
+ -o-transition: opacity .3s;
85
+ transition: opacity .3s;
86
+ }
87
+
88
+ .step:hover .letters { opacity: 1; }
89
+ .step:hover i { opacity: .3; }
90
+
91
+ .letters {
92
+ opacity: .3;
93
+ position: absolute;
94
+ }
95
+
96
+ .characters-off .letters { display: none; }
97
+ .characters-off .step:hover i { opacity: 1; }
98
+
99
+
100
+ .size-12 { font-size: 12px; }
101
+
102
+ .size-14 { font-size: 14px; }
103
+
104
+ .size-16 { font-size: 16px; }
105
+
106
+ .size-18 { font-size: 18px; }
107
+
108
+ .size-21 { font-size: 21px; }
109
+
110
+ .size-24 { font-size: 24px; }
111
+
112
+ .size-36 { font-size: 36px; }
113
+
114
+ .size-48 { font-size: 48px; }
115
+
116
+ .size-60 { font-size: 60px; }
117
+
118
+ .size-72 { font-size: 72px; }
119
+
120
+
121
+ .usage { margin-top: 10px; }
122
+
123
+ .usage input {
124
+ font-family: monospace;
125
+ margin-right: 3px;
126
+ padding: 2px 5px;
127
+ text-align: center;
128
+ }
129
+
130
+ .usage .point { width: 150px; }
131
+
132
+ .usage .class { width: 250px; }
133
+
134
+ footer {
135
+ color: #888;
136
+ font-size: 12px;
137
+ padding: 20px 0;
138
+ }
139
+
140
+ /* Icon Font: onthegosystems-icons */
141
+
142
+ @font-face {
143
+ font-family: "onthegosystems-icons";
144
+ src: url("./onthegosystems-icons_65c5f624e7b3a7731aeb86b34dab9f65.eot");
145
+ src: url("./onthegosystems-icons_65c5f624e7b3a7731aeb86b34dab9f65.eot?#iefix") format("embedded-opentype"),
146
+ url("./onthegosystems-icons_65c5f624e7b3a7731aeb86b34dab9f65.woff") format("woff"),
147
+ url("./onthegosystems-icons_65c5f624e7b3a7731aeb86b34dab9f65.ttf") format("truetype"),
148
+ url("./onthegosystems-icons_65c5f624e7b3a7731aeb86b34dab9f65.svg#onthegosystems-icons") format("svg");
149
+ font-weight: normal;
150
+ font-style: normal;
151
+ }
152
+
153
+ @media screen and (-webkit-min-device-pixel-ratio:0) {
154
+ @font-face {
155
+ font-family: "onthegosystems-icons";
156
+ src: url("./onthegosystems-icons_65c5f624e7b3a7731aeb86b34dab9f65.svg#onthegosystems-icons") format("svg");
157
+ }
158
+ }
159
+
160
+ [data-icon]:before { content: attr(data-icon); }
161
+
162
+ [data-icon]:before,
163
+ .icon-access:before,
164
+ .icon-access-logo:before,
165
+ .icon-bootstrap:before,
166
+ .icon-bootstrap-logo:before,
167
+ .icon-conditional-alert:before,
168
+ .icon-conditional-if:before,
169
+ .icon-cred:before,
170
+ .icon-cred-logo:before,
171
+ .icon-layouts:before,
172
+ .icon-layouts-logo:before,
173
+ .icon-module:before,
174
+ .icon-module-logo:before,
175
+ .icon-packager:before,
176
+ .icon-packager-logo:before,
177
+ .icon-toolset-logo:before,
178
+ .icon-types:before,
179
+ .icon-types-logo:before,
180
+ .icon-views:before,
181
+ .icon-views-logo:before,
182
+ .icon-wpml-logo:before {
183
+ display: inline-block;
184
+ font-family: "onthegosystems-icons";
185
+ font-style: normal;
186
+ font-weight: normal;
187
+ font-variant: normal;
188
+ line-height: 1;
189
+ text-decoration: inherit;
190
+ text-rendering: optimizeLegibility;
191
+ text-transform: none;
192
+ -moz-osx-font-smoothing: grayscale;
193
+ -webkit-font-smoothing: antialiased;
194
+ font-smoothing: antialiased;
195
+ }
196
+
197
+ .icon-access:before { content: "\f110"; }
198
+ .icon-access-logo:before { content: "\f111"; }
199
+ .icon-bootstrap:before { content: "\f112"; }
200
+ .icon-bootstrap-logo:before { content: "\f113"; }
201
+ .icon-conditional-alert:before { content: "\f122"; }
202
+ .icon-conditional-if:before { content: "\f123"; }
203
+ .icon-cred:before { content: "\f114"; }
204
+ .icon-cred-logo:before { content: "\f115"; }
205
+ .icon-layouts:before { content: "\f116"; }
206
+ .icon-layouts-logo:before { content: "\f117"; }
207
+ .icon-module:before { content: "\f118"; }
208
+ .icon-module-logo:before { content: "\f119"; }
209
+ .icon-packager:before { content: "\f120"; }
210
+ .icon-packager-logo:before { content: "\f121"; }
211
+ .icon-toolset-logo:before { content: "\f11a"; }
212
+ .icon-types:before { content: "\f11b"; }
213
+ .icon-types-logo:before { content: "\f11c"; }
214
+ .icon-views:before { content: "\f11d"; }
215
+ .icon-views-logo:before { content: "\f11e"; }
216
+ .icon-wpml-logo:before { content: "\f11f"; }
217
+ </style>
218
+
219
+ <!--[if lte IE 8]><script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
220
+
221
+ <script>
222
+ function toggleCharacters() {
223
+ var body = document.getElementsByTagName('body')[0];
224
+ body.className = body.className === 'characters-off' ? '' : 'characters-off';
225
+ }
226
+ </script>
227
+ </head>
228
+
229
+ <body class="characters-off">
230
+ <div id="page" class="container">
231
+ <header>
232
+ <h1>onthegosystems-icons contains 20 glyphs:</h1>
233
+ <a onclick="toggleCharacters(); return false;" href="#">Toggle Preview Characters</a>
234
+ </header>
235
+
236
+
237
+ <div class="glyph">
238
+ <div class="preview-glyphs">
239
+ <span class="step size-12"><span class="letters">Pp</span><i id="icon-access" class="icon-access"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="icon-access" class="icon-access"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="icon-access" class="icon-access"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="icon-access" class="icon-access"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="icon-access" class="icon-access"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="icon-access" class="icon-access"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="icon-access" class="icon-access"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="icon-access" class="icon-access"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="icon-access" class="icon-access"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="icon-access" class="icon-access"></i></span>
240
+ </div>
241
+ <div class="preview-scale">
242
+ <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
243
+ </div>
244
+ <div class="usage">
245
+ <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".icon-access" />
246
+ <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf110;" />
247
+ </div>
248
+ </div>
249
+
250
+ <div class="glyph">
251
+ <div class="preview-glyphs">
252
+ <span class="step size-12"><span class="letters">Pp</span><i id="icon-access-logo" class="icon-access-logo"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="icon-access-logo" class="icon-access-logo"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="icon-access-logo" class="icon-access-logo"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="icon-access-logo" class="icon-access-logo"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="icon-access-logo" class="icon-access-logo"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="icon-access-logo" class="icon-access-logo"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="icon-access-logo" class="icon-access-logo"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="icon-access-logo" class="icon-access-logo"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="icon-access-logo" class="icon-access-logo"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="icon-access-logo" class="icon-access-logo"></i></span>
253
+ </div>
254
+ <div class="preview-scale">
255
+ <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
256
+ </div>
257
+ <div class="usage">
258
+ <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".icon-access-logo" />
259
+ <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf111;" />
260
+ </div>
261
+ </div>
262
+
263
+ <div class="glyph">
264
+ <div class="preview-glyphs">
265
+ <span class="step size-12"><span class="letters">Pp</span><i id="icon-bootstrap" class="icon-bootstrap"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="icon-bootstrap" class="icon-bootstrap"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="icon-bootstrap" class="icon-bootstrap"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="icon-bootstrap" class="icon-bootstrap"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="icon-bootstrap" class="icon-bootstrap"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="icon-bootstrap" class="icon-bootstrap"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="icon-bootstrap" class="icon-bootstrap"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="icon-bootstrap" class="icon-bootstrap"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="icon-bootstrap" class="icon-bootstrap"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="icon-bootstrap" class="icon-bootstrap"></i></span>
266
+ </div>
267
+ <div class="preview-scale">
268
+ <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
269
+ </div>
270
+ <div class="usage">
271
+ <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".icon-bootstrap" />
272
+ <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf112;" />
273
+ </div>
274
+ </div>
275
+
276
+ <div class="glyph">
277
+ <div class="preview-glyphs">
278
+ <span class="step size-12"><span class="letters">Pp</span><i id="icon-bootstrap-logo" class="icon-bootstrap-logo"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="icon-bootstrap-logo" class="icon-bootstrap-logo"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="icon-bootstrap-logo" class="icon-bootstrap-logo"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="icon-bootstrap-logo" class="icon-bootstrap-logo"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="icon-bootstrap-logo" class="icon-bootstrap-logo"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="icon-bootstrap-logo" class="icon-bootstrap-logo"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="icon-bootstrap-logo" class="icon-bootstrap-logo"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="icon-bootstrap-logo" class="icon-bootstrap-logo"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="icon-bootstrap-logo" class="icon-bootstrap-logo"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="icon-bootstrap-logo" class="icon-bootstrap-logo"></i></span>
279
+ </div>
280
+ <div class="preview-scale">
281
+ <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
282
+ </div>
283
+ <div class="usage">
284
+ <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".icon-bootstrap-logo" />
285
+ <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf113;" />
286
+ </div>
287
+ </div>
288
+
289
+ <div class="glyph">
290
+ <div class="preview-glyphs">
291
+ <span class="step size-12"><span class="letters">Pp</span><i id="icon-conditional-alert" class="icon-conditional-alert"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="icon-conditional-alert" class="icon-conditional-alert"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="icon-conditional-alert" class="icon-conditional-alert"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="icon-conditional-alert" class="icon-conditional-alert"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="icon-conditional-alert" class="icon-conditional-alert"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="icon-conditional-alert" class="icon-conditional-alert"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="icon-conditional-alert" class="icon-conditional-alert"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="icon-conditional-alert" class="icon-conditional-alert"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="icon-conditional-alert" class="icon-conditional-alert"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="icon-conditional-alert" class="icon-conditional-alert"></i></span>
292
+ </div>
293
+ <div class="preview-scale">
294
+ <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
295
+ </div>
296
+ <div class="usage">
297
+ <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".icon-conditional-alert" />
298
+ <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf122;" />
299
+ </div>
300
+ </div>
301
+
302
+ <div class="glyph">
303
+ <div class="preview-glyphs">
304
+ <span class="step size-12"><span class="letters">Pp</span><i id="icon-conditional-if" class="icon-conditional-if"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="icon-conditional-if" class="icon-conditional-if"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="icon-conditional-if" class="icon-conditional-if"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="icon-conditional-if" class="icon-conditional-if"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="icon-conditional-if" class="icon-conditional-if"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="icon-conditional-if" class="icon-conditional-if"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="icon-conditional-if" class="icon-conditional-if"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="icon-conditional-if" class="icon-conditional-if"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="icon-conditional-if" class="icon-conditional-if"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="icon-conditional-if" class="icon-conditional-if"></i></span>
305
+ </div>
306
+ <div class="preview-scale">
307
+ <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
308
+ </div>
309
+ <div class="usage">
310
+ <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".icon-conditional-if" />
311
+ <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf123;" />
312
+ </div>
313
+ </div>
314
+
315
+ <div class="glyph">
316
+ <div class="preview-glyphs">
317
+ <span class="step size-12"><span class="letters">Pp</span><i id="icon-cred" class="icon-cred"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="icon-cred" class="icon-cred"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="icon-cred" class="icon-cred"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="icon-cred" class="icon-cred"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="icon-cred" class="icon-cred"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="icon-cred" class="icon-cred"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="icon-cred" class="icon-cred"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="icon-cred" class="icon-cred"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="icon-cred" class="icon-cred"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="icon-cred" class="icon-cred"></i></span>
318
+ </div>
319
+ <div class="preview-scale">
320
+ <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
321
+ </div>
322
+ <div class="usage">
323
+ <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".icon-cred" />
324
+ <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf114;" />
325
+ </div>
326
+ </div>
327
+
328
+ <div class="glyph">
329
+ <div class="preview-glyphs">
330
+ <span class="step size-12"><span class="letters">Pp</span><i id="icon-cred-logo" class="icon-cred-logo"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="icon-cred-logo" class="icon-cred-logo"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="icon-cred-logo" class="icon-cred-logo"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="icon-cred-logo" class="icon-cred-logo"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="icon-cred-logo" class="icon-cred-logo"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="icon-cred-logo" class="icon-cred-logo"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="icon-cred-logo" class="icon-cred-logo"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="icon-cred-logo" class="icon-cred-logo"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="icon-cred-logo" class="icon-cred-logo"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="icon-cred-logo" class="icon-cred-logo"></i></span>
331
+ </div>
332
+ <div class="preview-scale">
333
+ <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
334
+ </div>
335
+ <div class="usage">
336
+ <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".icon-cred-logo" />
337
+ <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf115;" />
338
+ </div>
339
+ </div>
340
+
341
+ <div class="glyph">
342
+ <div class="preview-glyphs">
343
+ <span class="step size-12"><span class="letters">Pp</span><i id="icon-layouts" class="icon-layouts"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="icon-layouts" class="icon-layouts"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="icon-layouts" class="icon-layouts"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="icon-layouts" class="icon-layouts"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="icon-layouts" class="icon-layouts"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="icon-layouts" class="icon-layouts"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="icon-layouts" class="icon-layouts"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="icon-layouts" class="icon-layouts"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="icon-layouts" class="icon-layouts"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="icon-layouts" class="icon-layouts"></i></span>
344
+ </div>
345
+ <div class="preview-scale">
346
+ <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
347
+ </div>
348
+ <div class="usage">
349
+ <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".icon-layouts" />
350
+ <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf116;" />
351
+ </div>
352
+ </div>
353
+
354
+ <div class="glyph">
355
+ <div class="preview-glyphs">
356
+ <span class="step size-12"><span class="letters">Pp</span><i id="icon-layouts-logo" class="icon-layouts-logo"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="icon-layouts-logo" class="icon-layouts-logo"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="icon-layouts-logo" class="icon-layouts-logo"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="icon-layouts-logo" class="icon-layouts-logo"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="icon-layouts-logo" class="icon-layouts-logo"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="icon-layouts-logo" class="icon-layouts-logo"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="icon-layouts-logo" class="icon-layouts-logo"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="icon-layouts-logo" class="icon-layouts-logo"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="icon-layouts-logo" class="icon-layouts-logo"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="icon-layouts-logo" class="icon-layouts-logo"></i></span>
357
+ </div>
358
+ <div class="preview-scale">
359
+ <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
360
+ </div>
361
+ <div class="usage">
362
+ <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".icon-layouts-logo" />
363
+ <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf117;" />
364
+ </div>
365
+ </div>
366
+
367
+ <div class="glyph">
368
+ <div class="preview-glyphs">
369
+ <span class="step size-12"><span class="letters">Pp</span><i id="icon-module" class="icon-module"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="icon-module" class="icon-module"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="icon-module" class="icon-module"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="icon-module" class="icon-module"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="icon-module" class="icon-module"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="icon-module" class="icon-module"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="icon-module" class="icon-module"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="icon-module" class="icon-module"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="icon-module" class="icon-module"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="icon-module" class="icon-module"></i></span>
370
+ </div>
371
+ <div class="preview-scale">
372
+ <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
373
+ </div>
374
+ <div class="usage">
375
+ <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".icon-module" />
376
+ <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf118;" />
377
+ </div>
378
+ </div>
379
+
380
+ <div class="glyph">
381
+ <div class="preview-glyphs">
382
+ <span class="step size-12"><span class="letters">Pp</span><i id="icon-module-logo" class="icon-module-logo"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="icon-module-logo" class="icon-module-logo"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="icon-module-logo" class="icon-module-logo"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="icon-module-logo" class="icon-module-logo"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="icon-module-logo" class="icon-module-logo"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="icon-module-logo" class="icon-module-logo"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="icon-module-logo" class="icon-module-logo"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="icon-module-logo" class="icon-module-logo"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="icon-module-logo" class="icon-module-logo"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="icon-module-logo" class="icon-module-logo"></i></span>
383
+ </div>
384
+ <div class="preview-scale">
385
+ <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
386
+ </div>
387
+ <div class="usage">
388
+ <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".icon-module-logo" />
389
+ <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf119;" />
390
+ </div>
391
+ </div>
392
+
393
+ <div class="glyph">
394
+ <div class="preview-glyphs">
395
+ <span class="step size-12"><span class="letters">Pp</span><i id="icon-packager" class="icon-packager"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="icon-packager" class="icon-packager"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="icon-packager" class="icon-packager"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="icon-packager" class="icon-packager"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="icon-packager" class="icon-packager"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="icon-packager" class="icon-packager"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="icon-packager" class="icon-packager"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="icon-packager" class="icon-packager"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="icon-packager" class="icon-packager"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="icon-packager" class="icon-packager"></i></span>
396
+ </div>
397
+ <div class="preview-scale">
398
+ <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
399
+ </div>
400
+ <div class="usage">
401
+ <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".icon-packager" />
402
+ <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf120;" />
403
+ </div>
404
+ </div>
405
+
406
+ <div class="glyph">
407
+ <div class="preview-glyphs">
408
+ <span class="step size-12"><span class="letters">Pp</span><i id="icon-packager-logo" class="icon-packager-logo"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="icon-packager-logo" class="icon-packager-logo"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="icon-packager-logo" class="icon-packager-logo"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="icon-packager-logo" class="icon-packager-logo"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="icon-packager-logo" class="icon-packager-logo"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="icon-packager-logo" class="icon-packager-logo"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="icon-packager-logo" class="icon-packager-logo"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="icon-packager-logo" class="icon-packager-logo"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="icon-packager-logo" class="icon-packager-logo"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="icon-packager-logo" class="icon-packager-logo"></i></span>
409
+ </div>
410
+ <div class="preview-scale">
411
+ <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
412
+ </div>
413
+ <div class="usage">
414
+ <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".icon-packager-logo" />
415
+ <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf121;" />
416
+ </div>
417
+ </div>
418
+
419
+ <div class="glyph">
420
+ <div class="preview-glyphs">
421
+ <span class="step size-12"><span class="letters">Pp</span><i id="icon-toolset-logo" class="icon-toolset-logo"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="icon-toolset-logo" class="icon-toolset-logo"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="icon-toolset-logo" class="icon-toolset-logo"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="icon-toolset-logo" class="icon-toolset-logo"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="icon-toolset-logo" class="icon-toolset-logo"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="icon-toolset-logo" class="icon-toolset-logo"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="icon-toolset-logo" class="icon-toolset-logo"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="icon-toolset-logo" class="icon-toolset-logo"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="icon-toolset-logo" class="icon-toolset-logo"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="icon-toolset-logo" class="icon-toolset-logo"></i></span>
422
+ </div>
423
+ <div class="preview-scale">
424
+ <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
425
+ </div>
426
+ <div class="usage">
427
+ <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".icon-toolset-logo" />
428
+ <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf11a;" />
429
+ </div>
430
+ </div>
431
+
432
+ <div class="glyph">
433
+ <div class="preview-glyphs">
434
+ <span class="step size-12"><span class="letters">Pp</span><i id="icon-types" class="icon-types"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="icon-types" class="icon-types"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="icon-types" class="icon-types"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="icon-types" class="icon-types"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="icon-types" class="icon-types"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="icon-types" class="icon-types"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="icon-types" class="icon-types"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="icon-types" class="icon-types"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="icon-types" class="icon-types"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="icon-types" class="icon-types"></i></span>
435
+ </div>
436
+ <div class="preview-scale">
437
+ <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
438
+ </div>
439
+ <div class="usage">
440
+ <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".icon-types" />
441
+ <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf11b;" />
442
+ </div>
443
+ </div>
444
+
445
+ <div class="glyph">
446
+ <div class="preview-glyphs">
447
+ <span class="step size-12"><span class="letters">Pp</span><i id="icon-types-logo" class="icon-types-logo"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="icon-types-logo" class="icon-types-logo"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="icon-types-logo" class="icon-types-logo"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="icon-types-logo" class="icon-types-logo"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="icon-types-logo" class="icon-types-logo"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="icon-types-logo" class="icon-types-logo"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="icon-types-logo" class="icon-types-logo"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="icon-types-logo" class="icon-types-logo"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="icon-types-logo" class="icon-types-logo"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="icon-types-logo" class="icon-types-logo"></i></span>
448
+ </div>
449
+ <div class="preview-scale">
450
+ <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
451
+ </div>
452
+ <div class="usage">
453
+ <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".icon-types-logo" />
454
+ <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf11c;" />
455
+ </div>
456
+ </div>
457
+
458
+ <div class="glyph">
459
+ <div class="preview-glyphs">
460
+ <span class="step size-12"><span class="letters">Pp</span><i id="icon-views" class="icon-views"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="icon-views" class="icon-views"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="icon-views" class="icon-views"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="icon-views" class="icon-views"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="icon-views" class="icon-views"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="icon-views" class="icon-views"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="icon-views" class="icon-views"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="icon-views" class="icon-views"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="icon-views" class="icon-views"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="icon-views" class="icon-views"></i></span>
461
+ </div>
462
+ <div class="preview-scale">
463
+ <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
464
+ </div>
465
+ <div class="usage">
466
+ <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".icon-views" />
467
+ <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf11d;" />
468
+ </div>
469
+ </div>
470
+
471
+ <div class="glyph">
472
+ <div class="preview-glyphs">
473
+ <span class="step size-12"><span class="letters">Pp</span><i id="icon-views-logo" class="icon-views-logo"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="icon-views-logo" class="icon-views-logo"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="icon-views-logo" class="icon-views-logo"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="icon-views-logo" class="icon-views-logo"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="icon-views-logo" class="icon-views-logo"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="icon-views-logo" class="icon-views-logo"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="icon-views-logo" class="icon-views-logo"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="icon-views-logo" class="icon-views-logo"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="icon-views-logo" class="icon-views-logo"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="icon-views-logo" class="icon-views-logo"></i></span>
474
+ </div>
475
+ <div class="preview-scale">
476
+ <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
477
+ </div>
478
+ <div class="usage">
479
+ <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".icon-views-logo" />
480
+ <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf11e;" />
481
+ </div>
482
+ </div>
483
+
484
+ <div class="glyph">
485
+ <div class="preview-glyphs">
486
+ <span class="step size-12"><span class="letters">Pp</span><i id="icon-wpml-logo" class="icon-wpml-logo"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="icon-wpml-logo" class="icon-wpml-logo"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="icon-wpml-logo" class="icon-wpml-logo"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="icon-wpml-logo" class="icon-wpml-logo"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="icon-wpml-logo" class="icon-wpml-logo"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="icon-wpml-logo" class="icon-wpml-logo"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="icon-wpml-logo" class="icon-wpml-logo"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="icon-wpml-logo" class="icon-wpml-logo"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="icon-wpml-logo" class="icon-wpml-logo"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="icon-wpml-logo" class="icon-wpml-logo"></i></span>
487
+ </div>
488
+ <div class="preview-scale">
489
+ <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
490
+ </div>
491
+ <div class="usage">
492
+ <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".icon-wpml-logo" />
493
+ <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf11f;" />
494
+ </div>
495
+ </div>
496
+
497
+
498
+ <footer>
499
+ Made with love using <a href="http://fontcustom.com">Font Custom</a>.
500
+ </footer>
501
+ </div>
502
+ </body>
503
+ </html>
embedded/toolset/onthego-resources/onthegosystems-icons/fonts/onthegosystems-icons_65c5f624e7b3a7731aeb86b34dab9f65.eot ADDED
Binary file
embedded/toolset/onthego-resources/onthegosystems-icons/fonts/onthegosystems-icons_65c5f624e7b3a7731aeb86b34dab9f65.svg ADDED
@@ -0,0 +1,359 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" standalone="no"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
3
+ <!--
4
+ 2015-7-1: Created with FontForge (http://fontforge.org)
5
+ -->
6
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
7
+ <metadata>
8
+ Created by FontForge 20150302 at Wed Jul 1 13:23:39 2015
9
+ By Riccardo Strobbia
10
+ Copyright (c) 2015, Riccardo Strobbia
11
+ </metadata>
12
+ <defs>
13
+ <font id="onthegosystems-icons" horiz-adv-x="512" >
14
+ <font-face
15
+ font-family="onthegosystems-icons"
16
+ font-weight="400"
17
+ font-stretch="normal"
18
+ units-per-em="512"
19
+ panose-1="2 0 5 9 0 0 0 0 0 0"
20
+ ascent="448"
21
+ descent="-64"
22
+ bbox="50.7344 -38.4004 470.594 422.4"
23
+ underline-thickness="25.6"
24
+ underline-position="-51.2"
25
+ unicode-range="U+F110-F123"
26
+ />
27
+ <missing-glyph />
28
+ <glyph glyph-name="uniF11F" unicode="&#xf11f;"
29
+ d="M290.016 164.817c-4.47461 68.7988 84.2891 87.7139 78.4258 156.87c-4.24707 50.1035 -80.2324 73.7275 -147.636 59.9795c-60.6689 -12.3672 -118.986 -67.501 -129.18 -133.805c-15.5576 -101.271 65.5107 -229.759 203.001 -198.386
30
+ c20.3506 4.65527 35.7539 23.7031 69.207 18.4502c52.8691 -8.29688 57.0664 -86.6475 13.835 -101.506c-18.0938 -6.21582 -50.876 -1.19043 -65.1006 14.79c-1.88574 1.00586 -3.59082 2.45898 -5.08398 4.2334c-5.67871 4.69043 -9.19727 13.6113 -8.53027 23.6025
31
+ c0.962891 14.2598 10.0381 25.2607 20.2705 24.5752c4.15039 -0.273438 7.83887 -2.45508 10.709 -5.86914c3.64551 -3.00781 6.39258 -7.75293 7.72363 -13.4102c6.13281 -13.9424 4.26855 -35.9004 16.9492 -43.3105c67.0361 3.93066 41.5225 113.459 -18.457 87.6562
32
+ c-138.73 -59.6406 -268.003 29.2598 -281.441 143.039c-15.0859 127.578 89.6006 208.035 161.485 216.851c132.461 16.2393 243.918 -94.3057 216.851 -239.923c-6.51562 -34.9307 -27.2803 -78.3857 -73.8223 -78.4297
33
+ c-34.4258 -0.0498047 -66.7617 27.042 -69.2061 64.5918z" />
34
+ <glyph glyph-name="uniF123" unicode="&#xf123;"
35
+ d="M56.5742 204.729c0 112.482 91.1855 203.668 203.669 203.668s203.668 -91.1855 203.668 -203.668c0 -112.483 -91.1846 -203.669 -203.668 -203.669s-203.669 91.1855 -203.669 203.669zM230.004 260.54v0l-8.29395 -0.00585938l-47.2627 -7.61426l-1.73047 -5.53906
36
+ c1.84375 0.113281 3.51855 0.175781 5.01758 0.175781c2.99902 0 5.39746 -0.81543 7.18555 -2.42773c1.78711 -1.61816 2.68164 -3.46191 2.68164 -5.53809c0 -3.23047 -0.922852 -8.02246 -2.7666 -14.3643l-19.3887 -66.6455
37
+ c-1.62305 -5.30078 -2.42676 -9.69043 -2.42676 -13.1533c0 -5.19922 1.78809 -9.49316 5.36328 -12.8936c3.5752 -3.40527 8.3623 -5.1084 14.3643 -5.1084c15.8125 0 30.7598 12.2314 44.8359 36.7002l-4.84277 2.7666
38
+ c-5.77148 -9.00098 -10.7949 -15.2305 -15.0605 -18.6924c-1.49316 -1.38672 -3.06055 -2.07617 -4.67285 -2.07617c-0.922852 0 -1.78809 0.458008 -2.59668 1.38574c-0.80957 0.921875 -1.21094 1.84473 -1.21094 2.77246c0 1.84375 0.741211 5.59473 2.24609 11.252z
39
+ M221.348 324.758c-5.65723 0 -10.4375 -2.01953 -14.3584 -6.05859c-3.9209 -4.04004 -5.88379 -8.88867 -5.88379 -14.54c0 -5.65723 1.99121 -10.4717 5.96875 -14.4551c3.9834 -3.97656 8.74121 -5.96875 14.2793 -5.96875c5.65234 0 10.5 1.99219 14.54 5.96875
40
+ c4.03906 3.9834 6.05371 8.79785 6.05371 14.4551c0 5.65137 -1.99219 10.5 -5.97461 14.54c-3.97754 4.03906 -8.84863 6.05859 -14.625 6.05859zM311.183 240.462v0.00585938h19.7451l4.83691 16.2705h-20.2539c5.77051 23.4219 13.3857 40.6152 22.8506 51.5791
41
+ c5.76465 6.6875 11.4219 10.0361 16.9609 10.0361c1.1543 0 2.08203 -0.316406 2.77246 -0.950195c0.695312 -0.639648 1.04688 -1.4707 1.04688 -2.51172c0 -0.922852 -0.787109 -2.6875 -2.33691 -5.27832c-1.55566 -2.5918 -2.33691 -5.04688 -2.33691 -7.35547
42
+ c0 -3.23047 1.20508 -5.99609 3.63281 -8.30469c2.42676 -2.30859 5.48145 -3.46289 9.17578 -3.46289c4.02832 0 7.37207 1.41504 10.0361 4.24316c2.64844 2.8291 3.97754 6.6084 3.97754 11.3379c0 5.54395 -2.02539 10.042 -6.05957 13.5049
43
+ c-4.03906 3.46191 -10.5059 5.19336 -19.3936 5.19336c-13.9619 0 -26.5898 -4.09668 -37.8994 -12.2881c-11.3145 -8.19238 -22.1094 -21.7529 -32.377 -40.6777c-3.45703 -6.46582 -6.77246 -10.6182 -9.95215 -12.4629
44
+ c-3.17383 -1.84961 -8.21973 -2.71582 -15.1445 -2.59668l-4.67285 -16.2715h19.3877l-28.3887 -111.469c-4.73047 -18.2393 -7.95996 -29.4805 -9.69141 -33.7578c-2.42188 -6.22852 -6.06543 -11.5352 -10.9082 -15.9199
45
+ c-1.96289 -1.73145 -4.32715 -2.59668 -7.09961 -2.59668c-0.797852 0 -1.49316 0.231445 -2.07031 0.69043l-0.69043 0.865234c0 0.463867 0.69043 1.41406 2.07031 2.85742c1.38574 1.44238 2.07617 3.66602 2.07617 6.66406c0 3.23047 -1.08594 5.91797 -3.28711 8.05078
46
+ c-2.18945 2.13867 -5.36816 3.20215 -9.52148 3.20215c-5.07422 0 -9.14258 -1.38672 -12.2031 -4.1582c-3.05469 -2.77246 -4.58789 -6.05957 -4.58789 -9.86719c0 -4.03906 1.84961 -7.58594 5.53906 -10.6475c3.69434 -3.05469 9.52637 -4.58789 17.4814 -4.58789
47
+ c12.4629 0 23.5684 3.28125 33.3281 9.86133c9.74707 6.5791 18.2275 16.6719 25.4414 30.29c7.21289 13.6172 14.6299 35.6533 22.2451 66.124z" />
48
+ <glyph glyph-name="uniF119" unicode="&#xf119;"
49
+ d="M371.2 345.6h76.7998v-384h-384v384h76.7998v76.8008h76.7998v-76.8008h76.8008v76.8008h76.7998v-76.8008zM243.782 3.33398v122.164l-117.459 69.5742v-123.917zM384.007 71.1553v121.439l-116.979 -70.0088v-118.977zM384.007 219.667v0.268555l-128.846 74.3877
50
+ l-127.008 -73.3311l129.689 -76.8193z" />
51
+ <glyph glyph-name="uniF11D" unicode="&#xf11d;"
52
+ d="M119.507 152.666c0 0 123.872 168.55 276.192 0c0 0 -123.872 -172.615 -276.192 0zM257.594 99.7119c28.7549 0 52.0576 23.3154 52.0576 52.0381c0 28.749 -23.2959 52.0576 -52.0576 52.0576c-28.7295 0 -52.0322 -23.3086 -52.0322 -52.0576
53
+ c0 -28.7227 23.3027 -52.0381 52.0322 -52.0381zM257.594 117.453c-18.9316 0 -34.2979 15.3594 -34.2979 34.2969c0 18.957 15.3662 34.3105 34.2979 34.3105c18.957 0 34.3164 -15.3535 34.3164 -34.3105c0 -18.9375 -15.3594 -34.2969 -34.3164 -34.2969z
54
+ M257.594 186.061c18.957 0 34.3164 -15.3535 34.3164 -34.3105c0 -18.9375 -15.3594 -34.2969 -34.3164 -34.2969c-18.9316 0 -34.2979 15.3594 -34.2979 34.2969c0 18.957 15.3662 34.3105 34.2979 34.3105z" />
55
+ <glyph glyph-name="uniF122" unicode="&#xf122;"
56
+ d="M260.664 55.4453h-209.93l104.963 176.74l104.967 176.025l104.968 -176.378l104.962 -176.388h-209.93zM284.613 161.191l7.23633 129.573h-61.3564l7.24609 -129.573h46.874zM231.062 113.25c0 -8.2168 2.65039 -14.6348 7.95215 -19.2402
57
+ c5.30566 -4.61523 12.6455 -6.91797 22.0186 -6.91797c9.2793 0 16.4961 2.30762 21.6602 6.91797c5.16406 4.60547 7.74121 11.0234 7.74121 19.2402c0 8.31445 -2.48828 14.7725 -7.45703 19.3877c-4.96777 4.61523 -12.2832 6.91797 -21.9443 6.91797
58
+ c-9.75488 0 -17.1875 -2.30762 -22.2979 -6.91797c-5.11523 -4.62012 -7.67285 -11.0781 -7.67285 -19.3877z" />
59
+ <glyph glyph-name="uniF114" unicode="&#xf114;"
60
+ d="M342.15 99.4111l0.0898438 1.29883l0.43457 -50.0029l-0.0380859 -1.03027l-0.0507812 -0.262695c-0.0644531 -0.799805 -0.199219 -1.58691 -0.397461 -2.37402v-0.0322266l-0.0761719 -0.172852c-0.154297 -0.68457 -0.416016 -1.36914 -0.691406 -2.03516
61
+ l-0.115234 -0.293945l-0.134766 -0.269531c-0.319336 -0.671875 -0.671875 -1.35645 -1.0752 -2.02148l-0.0703125 -0.102539l-0.0253906 -0.0263672c-0.428711 -0.709961 -0.94043 -1.40137 -1.50391 -2.08594l-0.15332 -0.217773l-0.275391 -0.306641
62
+ c-0.505859 -0.595703 -1.05664 -1.18457 -1.64453 -1.76074l-0.224609 -0.261719l-0.102539 -0.0898438c-0.722656 -0.68457 -1.50977 -1.37598 -2.34863 -2.04785l-0.249023 -0.211914l-0.352539 -0.249023c-0.93457 -0.716797 -1.90723 -1.44043 -2.96289 -2.1123
63
+ l-0.0771484 -0.0634766l-0.217773 -0.12793c-1.29297 -0.826172 -2.6748 -1.66406 -4.15332 -2.44531l-0.0507812 -0.0322266l-0.262695 -0.133789c-0.826172 -0.428711 -1.68359 -0.864258 -2.56055 -1.26758l-0.959961 -0.435547
64
+ c-0.68457 -0.306641 -1.40137 -0.620117 -2.11816 -0.933594l-0.40332 -0.185547l-0.383789 -0.134766c-1.62598 -0.68457 -3.32129 -1.33105 -5.09473 -1.94531l-0.760742 -0.25c-1.76074 -0.601562 -3.59082 -1.19043 -5.48535 -1.71484l-0.313477 -0.109375
65
+ l-0.435547 -0.108398c-2.18848 -0.614258 -4.4668 -1.19043 -6.80273 -1.70215l-0.851562 -0.185547c-2.36133 -0.512695 -4.78711 -0.979492 -7.27637 -1.38965l-0.473633 -0.0888672l-0.410156 -0.0644531c-2.03516 -0.338867 -4.1084 -0.626953 -6.21387 -0.889648
66
+ l-1.08789 -0.133789c-2.1123 -0.25 -4.2627 -0.473633 -6.46387 -0.65332l-0.486328 -0.0507812l-0.544922 -0.0390625c-2.55957 -0.198242 -5.15137 -0.345703 -7.80762 -0.447266l-0.518555 -0.0263672l-0.665039 -0.0126953
67
+ c-2.15723 -0.0761719 -4.32715 -0.121094 -6.53516 -0.133789l-0.389648 -0.00683594c-1.13965 0 -2.27832 0.00683594 -3.4375 0.0322266c-1.1709 0.0195312 -2.3418 0.0380859 -3.51367 0.0898438l-0.396484 0.0126953
68
+ c-1.8623 0.0634766 -3.71191 0.140625 -5.53613 0.261719l-0.499023 0.0263672l-1.00488 0.0761719c-1.39551 0.102539 -2.77734 0.198242 -4.14746 0.327148l-0.959961 0.0761719l-0.53125 0.0644531c-1.7207 0.160156 -3.41699 0.338867 -5.10059 0.549805
69
+ l-0.268555 0.0263672l-0.825195 0.121094c-1.41504 0.185547 -2.80371 0.383789 -4.17969 0.588867l-0.793945 0.108398l-0.652344 0.115234c-1.70215 0.262695 -3.3916 0.550781 -5.05566 0.876953h-0.0771484l-0.300781 0.0771484
70
+ c-1.65723 0.313477 -3.26367 0.646484 -4.87012 0.998047l-0.716797 0.134766l-0.5 0.12793c-1.77832 0.421875 -3.53223 0.851562 -5.23438 1.31152l-0.40332 0.0898438l-0.505859 0.160156c-2.02246 0.543945 -3.98047 1.12012 -5.86914 1.73438l-0.28125 0.0957031
71
+ l-0.896484 0.307617c-0.792969 0.275391 -1.56152 0.537109 -2.3418 0.8125l-1.36328 0.505859c-0.736328 0.268555 -1.44629 0.556641 -2.17578 0.844727l-0.844727 0.326172l-0.460938 0.211914l-1.38281 0.587891l-1.50977 0.666016l-1.3252 0.639648l-1.40137 0.666016
72
+ l-1.30566 0.678711l-1.29297 0.677734l-1.22852 0.704102l-1.20312 0.710938l-1.16504 0.722656l-1.10742 0.723633l-1.10742 0.774414l-0.998047 0.722656l-1.03711 0.826172l-0.895508 0.722656l-0.947266 0.851562l-0.806641 0.729492l-0.864258 0.882812
73
+ l-0.697266 0.736328l-0.787109 0.927734l-0.608398 0.736328l-0.65918 0.947266l-0.518555 0.736328l-0.569336 0.985352l-0.40332 0.729492l-0.473633 1.0498l-0.300781 0.697266l-0.351562 1.11328l-0.210938 0.666016l-0.25 1.24121l-0.102539 0.543945
74
+ c-0.0830078 0.615234 -0.121094 1.19727 -0.121094 1.81836l-0.435547 50.0029c0 -0.601562 0.0380859 -1.20312 0.12207 -1.81152l0.146484 -0.767578l0.198242 -1.02441l0.269531 -0.870117l0.293945 -0.902344l0.37793 -0.876953l0.383789 -0.889648l0.499023 -0.850586
75
+ l0.511719 -0.876953l0.576172 -0.832031l0.601562 -0.851562l0.671875 -0.8125l0.691406 -0.871094l0.761719 -0.787109l0.8125 -0.825195l0.845703 -0.754883l0.915039 -0.832031l0.93457 -0.743164l1.00391 -0.799805l1.01172 -0.729492l1.08789 -0.774414
76
+ l1.08203 -0.697266l1.18359 -0.761719l1.17773 -0.671875l1.26074 -0.736328l1.26074 -0.665039l1.33105 -0.685547l1.33789 -0.65918l1.4209 -0.665039l1.40723 -0.640625l1.47266 -0.639648l1.26074 -0.499023c0.722656 -0.300781 1.45312 -0.588867 2.20117 -0.864258
77
+ l1.35742 -0.505859c0.754883 -0.261719 1.5293 -0.537109 2.31641 -0.799805l1.20312 -0.40332c1.90137 -0.607422 3.86621 -1.19043 5.8877 -1.74023l0.858398 -0.237305c1.72168 -0.460938 3.4873 -0.902344 5.2793 -1.31152l1.17188 -0.262695
78
+ c1.59961 -0.345703 3.22559 -0.697266 4.87695 -1.01074l0.40918 -0.102539c1.66406 -0.313477 3.36621 -0.601562 5.08789 -0.876953l1.37598 -0.210938c1.4082 -0.199219 2.81641 -0.416016 4.25586 -0.588867l1.03711 -0.134766
79
+ c1.68945 -0.205078 3.39844 -0.390625 5.13867 -0.537109l1.43359 -0.134766c1.39551 -0.12793 2.79688 -0.223633 4.21777 -0.333008l1.46582 -0.0957031c1.83008 -0.115234 3.68652 -0.198242 5.54883 -0.262695c1.29297 -0.0380859 2.5918 -0.0761719 3.91016 -0.102539
80
+ c1.28027 -0.0126953 2.55371 -0.0126953 3.81445 -0.0126953c2.19531 0 4.38379 0.0517578 6.53418 0.115234l1.2041 0.0449219c2.63672 0.102539 5.24707 0.268555 7.80762 0.454102l1.02441 0.0898438c2.18848 0.192383 4.33887 0.40332 6.46387 0.666016
81
+ l1.10059 0.133789c2.09863 0.262695 4.17871 0.556641 6.21387 0.896484l0.774414 0.12793c2.53516 0.428711 4.98633 0.902344 7.37305 1.41406l0.826172 0.185547c2.36133 0.512695 4.63965 1.08203 6.83496 1.69629l0.704102 0.185547
82
+ c1.91309 0.550781 3.75684 1.13281 5.54199 1.73438l0.710938 0.237305c1.75293 0.614258 3.44922 1.26074 5.0752 1.92578l0.875977 0.37793c0.698242 0.293945 1.37012 0.588867 2.03516 0.895508l0.986328 0.448242c0.959961 0.473633 1.90039 0.93457 2.80957 1.41406
83
+ c1.52246 0.806641 2.96289 1.6582 4.28809 2.52246l0.198242 0.12793c1.08789 0.697266 2.08008 1.42676 3.02734 2.16309l0.537109 0.416016c0.851562 0.68457 1.6582 1.37598 2.3877 2.08594l0.300781 0.300781c0.594727 0.595703 1.13867 1.19043 1.66406 1.79883
84
+ l0.441406 0.524414c0.53125 0.678711 1.06836 1.37598 1.49121 2.06738l0.115234 0.15332c0.396484 0.666016 0.735352 1.33789 1.0625 2.00391l0.236328 0.575195c0.288086 0.65332 0.525391 1.33789 0.710938 2.02246l0.0761719 0.230469
85
+ c0.192383 0.78125 0.313477 1.57422 0.390625 2.36816zM342.15 171.053l0.0898438 1.33105l0.43457 -50.0029l-0.0380859 -1.03027l-0.0507812 -0.275391c-0.0644531 -0.787109 -0.199219 -1.58105 -0.397461 -2.36133v-0.0449219l-0.0761719 -0.185547
86
+ c-0.154297 -0.68457 -0.416016 -1.35742 -0.691406 -2.02246l-0.115234 -0.300781l-0.134766 -0.262695c-0.319336 -0.68457 -0.671875 -1.35645 -1.0752 -2.02246l-0.0703125 -0.115234l-0.0253906 -0.0253906c-0.428711 -0.697266 -0.94043 -1.40137 -1.50391 -2.08594
87
+ l-0.15332 -0.211914l-0.275391 -0.300781c-0.505859 -0.594727 -1.05664 -1.19629 -1.64453 -1.77246l-0.224609 -0.255859l-0.102539 -0.0830078c-0.722656 -0.704102 -1.50977 -1.37598 -2.34863 -2.04883l-0.249023 -0.223633l-0.352539 -0.236328
88
+ c-0.93457 -0.723633 -1.90723 -1.44727 -2.96289 -2.125l-0.0771484 -0.0644531l-0.217773 -0.115234c-1.29297 -0.837891 -2.6748 -1.66406 -4.15332 -2.45117l-0.0507812 -0.0380859l-0.262695 -0.12793c-0.826172 -0.435547 -1.68359 -0.864258 -2.56055 -1.28027
89
+ l-0.959961 -0.428711c-0.68457 -0.326172 -1.40137 -0.633789 -2.11816 -0.93457l-0.40332 -0.178711l-0.383789 -0.134766c-1.62598 -0.697266 -3.32129 -1.3252 -5.09473 -1.95215l-0.760742 -0.249023c-1.76074 -0.601562 -3.59082 -1.18457 -5.48535 -1.70898
90
+ l-0.313477 -0.12207l-0.435547 -0.102539c-2.18848 -0.614258 -4.4668 -1.17676 -6.80273 -1.69531l-0.851562 -0.179688c-2.36133 -0.511719 -4.78711 -0.992188 -7.27637 -1.40137l-0.473633 -0.0898438l-0.410156 -0.0507812
91
+ c-2.03516 -0.339844 -4.1084 -0.633789 -6.21387 -0.902344l-1.08789 -0.134766c-2.1123 -0.249023 -4.2627 -0.473633 -6.46387 -0.652344l-0.486328 -0.0517578l-0.544922 -0.0322266c-2.55957 -0.204102 -5.15137 -0.351562 -7.80762 -0.454102l-0.518555 -0.0380859
92
+ l-0.665039 -0.0126953c-2.15723 -0.0644531 -4.32715 -0.12793 -6.53516 -0.12793h-0.389648c-1.13965 0 -2.27832 0 -3.4375 0.0126953c-1.1709 0.0253906 -2.3418 0.0576172 -3.51367 0.0898438l-0.396484 0.0253906
93
+ c-1.8623 0.0634766 -3.71191 0.146484 -5.53613 0.255859l-0.499023 0.0322266l-1.00488 0.0761719c-1.39551 0.0898438 -2.77734 0.198242 -4.14746 0.327148l-0.959961 0.0703125l-0.53125 0.0634766c-1.7207 0.15332 -3.41699 0.345703 -5.10059 0.550781
94
+ l-0.268555 0.0322266l-0.825195 0.115234c-1.41504 0.185547 -2.80371 0.376953 -4.17969 0.587891l-0.793945 0.115234l-0.652344 0.115234c-1.70215 0.262695 -3.3916 0.557617 -5.05566 0.871094l-0.0771484 0.0126953l-0.300781 0.0703125
95
+ c-1.65723 0.313477 -3.26367 0.633789 -4.87012 1.00488l-0.716797 0.133789l-0.5 0.134766c-1.77832 0.40332 -3.53223 0.838867 -5.23438 1.29883l-0.40332 0.109375l-0.505859 0.140625c-2.02246 0.550781 -3.98047 1.12012 -5.86914 1.75391l-0.28125 0.0761719
96
+ l-0.896484 0.307617c-0.792969 0.275391 -1.56152 0.543945 -2.3418 0.825195l-1.36328 0.499023c-0.736328 0.275391 -1.44629 0.557617 -2.17578 0.838867l-0.844727 0.345703l-0.460938 0.192383l-1.38281 0.587891l-1.50977 0.666016l-1.3252 0.639648
97
+ l-1.40137 0.685547l-1.30566 0.665039l-1.29297 0.68457l-1.22852 0.710938l-1.20312 0.697266l-1.16504 0.736328l-1.10742 0.722656l-1.10742 0.761719l-0.998047 0.729492l-1.03711 0.819336l-0.895508 0.723633l-0.947266 0.850586l-0.806641 0.736328
98
+ l-0.864258 0.889648l-0.697266 0.723633l-0.787109 0.927734l-0.608398 0.736328l-0.65918 0.947266l-0.518555 0.735352l-0.569336 0.992188l-0.40332 0.723633l-0.473633 1.04883l-0.300781 0.704102l-0.351562 1.11426l-0.210938 0.665039l-0.25 1.24219
99
+ l-0.102539 0.549805c-0.0830078 0.614258 -0.121094 1.20312 -0.121094 1.81738l-0.435547 50.0098c0 -0.614258 0.0380859 -1.22266 0.12207 -1.82422l0.146484 -0.774414l0.198242 -1.01074l0.269531 -0.864258l0.293945 -0.915039l0.37793 -0.864258l0.383789 -0.889648
100
+ l0.499023 -0.850586l0.511719 -0.883789l0.576172 -0.837891l0.601562 -0.857422l0.671875 -0.813477l0.691406 -0.850586l0.761719 -0.787109l0.8125 -0.838867l0.845703 -0.761719l0.915039 -0.825195l0.93457 -0.736328l1.00391 -0.8125l1.01172 -0.710938
101
+ l1.08789 -0.780273l1.08203 -0.704102l1.18359 -0.749023l1.17773 -0.678711l1.26074 -0.729492l1.26074 -0.665039l1.33105 -0.698242l1.33789 -0.652344l1.4209 -0.671875l1.40723 -0.621094l1.47266 -0.633789l1.26074 -0.511719
102
+ c0.722656 -0.288086 1.45312 -0.576172 2.20117 -0.864258l1.36328 -0.492188c0.755859 -0.288086 1.53027 -0.550781 2.31738 -0.813477l1.20312 -0.402344c1.90039 -0.602539 3.86523 -1.2041 5.8877 -1.75391l0.857422 -0.237305
103
+ c1.72168 -0.459961 3.48828 -0.895508 5.28027 -1.31152l1.1709 -0.25c1.60059 -0.358398 3.22559 -0.697266 4.87695 -1.02344l0.40332 -0.0771484c1.66406 -0.320312 3.36621 -0.594727 5.08789 -0.870117l1.37598 -0.205078
104
+ c1.4082 -0.210938 2.81641 -0.421875 4.25586 -0.608398l1.03711 -0.133789c1.68945 -0.192383 3.39844 -0.390625 5.13867 -0.550781l1.43359 -0.12793c1.39551 -0.12793 2.79688 -0.236328 4.21777 -0.338867l1.46582 -0.0898438
105
+ c1.83008 -0.121094 3.68652 -0.210938 5.54883 -0.275391c1.29297 -0.0380859 2.5918 -0.0830078 3.91016 -0.0957031c1.28027 -0.0253906 2.55371 -0.0253906 3.81445 -0.0253906c2.19531 0 4.38379 0.0507812 6.53418 0.121094l1.2041 0.0644531
106
+ c2.63672 0.0898438 5.24707 0.249023 7.80762 0.448242l1.02441 0.0888672c2.18848 0.192383 4.33887 0.40332 6.46387 0.65332l1.10059 0.133789c2.09863 0.262695 4.17871 0.550781 6.21387 0.883789l0.774414 0.133789c2.53516 0.442383 4.98633 0.902344 7.37305 1.4209
107
+ l0.826172 0.179688c2.36133 0.524414 4.63965 1.10059 6.83496 1.70898l0.704102 0.191406c1.91309 0.538086 3.75684 1.11426 5.54199 1.72852l0.710938 0.243164c1.75293 0.607422 3.44922 1.24805 5.0752 1.91992l0.875977 0.351562
108
+ c0.698242 0.300781 1.37012 0.621094 2.03516 0.915039l0.986328 0.448242c0.959961 0.467773 1.90039 0.93457 2.80957 1.4209c1.52246 0.799805 2.96289 1.64453 4.28809 2.50879l0.198242 0.134766c1.08789 0.704102 2.08008 1.42676 3.02734 2.16895l0.537109 0.410156
109
+ c0.851562 0.665039 1.6582 1.37598 2.3877 2.07324l0.300781 0.313477c0.594727 0.588867 1.13867 1.17773 1.66406 1.79199l0.441406 0.518555c0.53125 0.671875 1.06836 1.38867 1.49121 2.07422l0.115234 0.15918c0.396484 0.666016 0.735352 1.33203 1.0625 2.00391
110
+ l0.236328 0.5625c0.288086 0.671875 0.525391 1.35059 0.710938 2.02246l0.0761719 0.237305c0.192383 0.787109 0.313477 1.57422 0.390625 2.36133zM342.15 242.694l0.0703125 1.31836l0.441406 -50.0156l-0.0380859 -1.03027l-0.0576172 -0.256836
111
+ c-0.0644531 -0.805664 -0.192383 -1.59277 -0.390625 -2.37402v-0.0253906l-0.0761719 -0.185547c-0.160156 -0.68457 -0.410156 -1.35059 -0.698242 -2.0166l-0.108398 -0.306641l-0.140625 -0.275391c-0.313477 -0.678711 -0.671875 -1.35059 -1.0752 -2.01562
112
+ l-0.0644531 -0.109375l-0.0253906 -0.0253906c-0.435547 -0.704102 -0.947266 -1.40137 -1.51074 -2.08008l-0.146484 -0.223633l-0.275391 -0.288086c-0.505859 -0.608398 -1.0625 -1.19727 -1.63867 -1.78613l-0.236328 -0.249023l-0.102539 -0.0898438
113
+ c-0.723633 -0.691406 -1.51074 -1.36914 -2.34961 -2.03516l-0.249023 -0.223633l-0.352539 -0.25c-0.927734 -0.723633 -1.90039 -1.44043 -2.95605 -2.125l-0.0771484 -0.0507812l-0.217773 -0.12793c-1.29297 -0.844727 -2.6748 -1.6582 -4.16016 -2.44531
114
+ l-0.0507812 -0.0380859l-0.262695 -0.134766c-0.825195 -0.428711 -1.67676 -0.850586 -2.55957 -1.28613l-0.954102 -0.416016c-0.69043 -0.320312 -1.40137 -0.633789 -2.11816 -0.93457l-0.40332 -0.185547l-0.390625 -0.133789
115
+ c-1.625 -0.678711 -3.32715 -1.3125 -5.09375 -1.93945l-0.761719 -0.25c-1.75391 -0.601562 -3.59082 -1.17773 -5.49121 -1.71484l-0.300781 -0.102539l-0.441406 -0.115234c-2.18945 -0.614258 -4.46094 -1.19043 -6.80371 -1.71484l-0.844727 -0.154297
116
+ c-2.35547 -0.511719 -4.78711 -0.998047 -7.27637 -1.40137l-0.473633 -0.108398l-0.40332 -0.0517578c-2.04199 -0.326172 -4.11523 -0.620117 -6.2207 -0.889648l-1.08789 -0.12793c-2.1123 -0.261719 -4.2627 -0.486328 -6.46484 -0.665039l-0.486328 -0.0576172
117
+ l-0.543945 -0.0263672c-2.56641 -0.191406 -5.15137 -0.344727 -7.80762 -0.454102l-0.518555 -0.0449219h-0.671875c-2.15723 -0.0761719 -4.32617 -0.115234 -6.53418 -0.12793l-0.383789 -0.00585938c-1.14648 0 -2.28516 0.00585938 -3.44336 0.03125
118
+ c-1.17188 0 -2.34277 0.0390625 -3.51367 0.0771484l-0.397461 0.0253906c-1.8623 0.0644531 -3.71191 0.134766 -5.53516 0.262695l-0.5 0.0253906l-1.00391 0.0703125c-1.39551 0.109375 -2.77832 0.205078 -4.14746 0.333008l-0.959961 0.0771484l-0.53125 0.0634766
119
+ c-1.72168 0.160156 -3.41797 0.339844 -5.10059 0.538086l-0.269531 0.0380859l-0.825195 0.115234c-1.41406 0.179688 -2.80371 0.383789 -4.17969 0.576172l-0.792969 0.121094l-0.65332 0.12207c-1.70215 0.262695 -3.3916 0.550781 -5.05566 0.864258
120
+ l-0.0771484 0.0126953l-0.300781 0.0703125c-1.65723 0.320312 -3.26367 0.652344 -4.87012 1.00488l-0.716797 0.147461l-0.499023 0.114258c-1.7793 0.410156 -3.5332 0.845703 -5.23535 1.3125l-0.40332 0.0957031l-0.505859 0.154297
121
+ c-2.02246 0.537109 -3.98047 1.11328 -5.86816 1.74023l-0.282227 0.0830078l-0.895508 0.313477c-0.793945 0.262695 -1.56152 0.538086 -2.34277 0.813477l-1.36328 0.499023c-0.735352 0.275391 -1.44629 0.563477 -2.17578 0.837891l-0.844727 0.345703
122
+ l-0.460938 0.192383l-1.38184 0.588867l-1.51074 0.671875l-1.3252 0.633789l-1.40137 0.678711l-1.30566 0.665039l-1.29297 0.678711l-1.22852 0.704102l-1.20312 0.704102l-1.16504 0.735352l-1.10742 0.716797l-1.10645 0.774414l-0.999023 0.716797l-1.03613 0.832031
123
+ l-0.896484 0.716797l-0.947266 0.851562l-0.806641 0.735352l-0.863281 0.896484l-0.698242 0.716797l-0.787109 0.93457l-0.607422 0.742188l-0.65918 0.93457l-0.518555 0.736328l-0.569336 0.998047l-0.40332 0.729492l-0.473633 1.04297l-0.300781 0.698242
124
+ l-0.352539 1.11914l-0.210938 0.65332l-0.25 1.24805l-0.102539 0.549805c-0.0830078 0.602539 -0.121094 1.2041 -0.121094 1.81836l-0.37793 43.5645c-0.00585938 0.147461 -0.0576172 0.294922 -0.0576172 0.441406c0 0.134766 0.0517578 0.269531 0.0517578 0.40332
125
+ l-0.0517578 5.60059c0 -0.608398 0.0390625 -1.2168 0.12207 -1.82422l0.147461 -0.774414l0.0888672 -0.448242c3.63574 17.875 40.4102 31.3916 85.3701 30.7012c44.998 -0.691406 81.9131 -15.3857 85.5742 -33.4082c0.12793 0.607422 0.243164 1.20898 0.300781 1.81738
126
+ z" />
127
+ <glyph glyph-name="uniF112" unicode="&#xf112;"
128
+ d="M368.135 254.745c11.2256 0 20.3135 -9.09375 20.3135 -20.3135v-157.606c0 -11.2256 -9.08789 -20.3193 -20.3008 -20.3193h-94.4131c1.27344 -7.69922 7.61621 -28.666 39.0078 -28.666v-10.0479h-50.4316h-10.7393h-50.4316v10.0479
129
+ c31.3984 0 37.7275 20.9727 39.001 28.666h-97.3691c-11.2197 0 -20.3076 9.09375 -20.3076 20.3193v157.606c0 11.2256 9.08789 20.3135 20.3076 20.3135h225.363zM318.489 126.176l30.0742 30.0742l-30.0742 30.0859v-16.1279h-120.902v16.1279l-30.0732 -30.0859
130
+ l30.0732 -30.0742v16.1152h120.902v-16.1152z" />
131
+ <glyph glyph-name="uniF111" unicode="&#xf111;"
132
+ d="M258.637 256.013c18.6494 0 33.8242 -15.1738 33.8242 -33.8242v-22.5342h-67.6484v22.5342c0 18.6504 15.1748 33.8242 33.8242 33.8242zM371.2 345.6h76.7998v-384h-384v384h76.7998v76.8008h76.7998v-76.8008h76.8008v76.8008h76.7998v-76.8008zM344.313 43.6348
133
+ v138.451c0 9.70312 -7.85938 17.5752 -17.5742 17.5752h-7.21289v22.5342c0 33.5684 -27.3154 60.877 -60.8896 60.877c-33.5615 0 -60.877 -27.3086 -60.877 -60.877v-22.5342h-9.47168c-9.69629 0 -17.5615 -7.87207 -17.5615 -17.5752v-138.451
134
+ c0 -9.70215 7.85938 -17.5742 17.5615 -17.5742h138.451c9.70898 0 17.5742 7.87207 17.5742 17.5742z" />
135
+ <glyph glyph-name="uniF118" unicode="&#xf118;"
136
+ d="M384.007 219.667l-126.164 -75.4941l-129.689 76.8193l127.008 73.3311l128.846 -74.3877v-0.268555zM384.007 192.595v-121.439l-116.979 -67.5459v118.977zM126.323 195.072l117.459 -69.5742v-122.164l-117.459 67.8213v123.917z" />
137
+ <glyph glyph-name="uniF117" unicode="&#xf117;"
138
+ d="M371.2 345.6h76.7998v-384h-384v384h76.7998v76.8008h76.7998v-76.8008h76.8008v76.8008h76.7998v-76.8008zM183.577 12.877v174.188h-70.3359v-174.188h70.3359zM396.8 12.877v174.188h-195.501v-174.188h195.501zM396.8 205.178v74.6494h-283.559v-74.6494h283.559z
139
+ " />
140
+ <glyph glyph-name="uniF110" unicode="&#xf110;"
141
+ d="M344.313 43.6348c0 -9.70215 -7.86523 -17.5742 -17.5742 -17.5742h-138.451c-9.70215 0 -17.5615 7.87207 -17.5615 17.5742v138.451c0 9.70312 7.86523 17.5752 17.5615 17.5752h138.451c9.71484 0 17.5742 -7.87207 17.5742 -17.5752v-138.451zM319.526 155.699
142
+ h-27.0654v66.4893c0 18.6504 -15.1748 33.8242 -33.8242 33.8242s-33.8242 -15.1738 -33.8242 -33.8242v-57.4717h-27.0527v57.4717c0 33.5684 27.3154 60.877 60.877 60.877c33.5742 0 60.8896 -27.3086 60.8896 -60.877v-66.4893z" />
143
+ <glyph glyph-name="uniF116" unicode="&#xf116;"
144
+ d="M113.241 205.178v74.6494h283.559v-74.6494h-283.559zM201.299 12.877v174.188h195.501v-174.188h-195.501zM113.241 12.877v174.188h70.3359v-174.188h-70.3359z" />
145
+ <glyph glyph-name="uniF11C" unicode="&#xf11c;"
146
+ d="M371.2 345.6h76.7998v-384h-384v384h76.7998v76.8008h76.7998v-76.8008h76.8008v76.8008h76.7998v-76.8008zM108.8 219.04v-133.626l55.9746 105.543c3.96777 7.68652 8.62109 11.667 10.8027 12.915c2.20215 1.28027 7.8916 0.927734 17.0889 0.927734h146.534v14.1182
147
+ c0 6.49609 -2.40039 11.4824 -8.73633 11.4824h-87.9355c-7.92969 0 -12.8262 -0.269531 -14.6816 0.665039c-1.85645 0.921875 -3.37988 3.07227 -4.55664 7.8916l-1.51758 6.11133c-1.09375 4.12891 -2.3418 7.29688 -3.7373 8.2627
148
+ c-1.39551 0.966797 -4.49316 2.66895 -9.29297 2.66895h-46.8281c-5.38965 0 -9.01758 -1.60645 -10.8672 -2.61719c-1.86328 -1.08887 -3.2832 -4.57031 -4.29492 -8.19922l-1.52344 -5.59961c-1.35059 -4.79395 -2.84766 -7.32812 -4.49902 -8.40918
149
+ c-1.64453 -1.10742 -5.29297 -0.774414 -10.9375 -0.774414h-7.85254c-4.05762 0 -8.29492 -1.49121 -9.60645 -2.70801c-1.31836 -1.24121 -3.5332 -4.69043 -3.5332 -8.65234zM409.715 175.731c1.8623 4.05762 2.78418 6.52148 2.79688 7.0459
150
+ c-0.255859 1.75391 -2.88574 2.82227 -7.8457 2.82227h-204.23c-4.90234 0 -8.26953 -0.742188 -10.125 -1.83008c-1.85645 -1.10059 -3.75684 -3.76953 -5.69629 -7.6416l-57.3242 -112.128h226.374z" />
151
+ <glyph glyph-name="uniF11A" unicode="&#xf11a;"
152
+ d="M399.36 330.24h61.4395v-368.641h-399.359v368.641h61.4395v92.1602h92.1602v-92.1602h92.1602v92.1602h92.1602v-92.1602zM116.173 121.979c0 2.90332 -0.839844 5.0791 -2.51953 6.54395c-1.68359 1.45898 -4.1875 2.19141 -7.50586 2.19141h-7.26465
153
+ l-6.72266 -31.8008h5.16113l2.49805 11.8887h2.3916c4.39258 0 7.81738 0.962891 10.2754 2.89258c2.45801 1.93066 3.68652 4.69043 3.68652 8.28418zM100.751 115.175l2.38672 11.1865h2.58984c1.75684 0 3.05176 -0.368164 3.90234 -1.0957
154
+ c0.849609 -0.726562 1.27441 -1.87402 1.27441 -3.45605c0 -2.11914 -0.706055 -3.74707 -2.12012 -4.9043c-1.40723 -1.15723 -3.40918 -1.73047 -5.99023 -1.73047h-2.04297zM121.841 98.8975l7.19824 33.8486h-5.10938l-7.17871 -33.8486h5.08984zM138.537 122.962
155
+ v-0.00488281h-5.14062l-2.67285 -12.6982c-0.173828 -0.895508 -0.347656 -1.78613 -0.522461 -2.6875c-0.173828 -0.885742 -0.260742 -1.78223 -0.260742 -2.69824c0 -2.06836 0.527344 -3.64062 1.58691 -4.74121c1.05469 -1.11133 2.55566 -1.65918 4.50098 -1.65918
156
+ c1.49023 0 2.88281 0.384766 4.17285 1.18262c1.29004 0.798828 2.53418 2.02832 3.72168 3.71777h0.174805l-0.456055 -4.45996h4.02441l5.06836 24.0488h-5.06836l-2.15039 -10.1992c-0.435547 -2.06348 -1.0498 -3.86035 -1.84863 -5.38086
157
+ c-0.798828 -1.52539 -1.70996 -2.70898 -2.73926 -3.53809c-1.0293 -0.819336 -2.06348 -1.2334 -3.10742 -1.2334c-1.84375 0 -2.76465 0.961914 -2.76465 2.89258c0 0.74707 0.224609 2.15039 0.675781 4.19336zM178.217 122.962h-8.33008
158
+ c-1.16211 0.291992 -2.31934 0.44043 -3.48145 0.44043c-2.91309 0 -5.25879 -0.870117 -7.03516 -2.61621c-1.78125 -1.74121 -2.66699 -4.02441 -2.66699 -6.87598c0 -2.46777 0.977539 -4.30664 2.93359 -5.47852
159
+ c-1.44922 -0.681641 -2.51367 -1.37793 -3.18457 -2.12012c-0.675781 -0.732422 -1.01367 -1.60254 -1.01367 -2.60059c0 -1.17773 0.552734 -2.10938 1.65332 -2.75977c-2.23242 -0.748047 -3.85059 -1.66895 -4.8584 -2.76465
160
+ c-1.00391 -1.08594 -1.51074 -2.37598 -1.51074 -3.87109c0 -1.89941 0.814453 -3.38965 2.42676 -4.47949c1.61816 -1.08594 3.89648 -1.62305 6.84082 -1.62305c4.03418 0 7.1416 0.767578 9.33301 2.31934c2.19141 1.56152 3.28223 3.74707 3.28223 6.58887
161
+ c0 1.77148 -0.552734 3.13379 -1.65332 4.08105c-1.10156 0.947266 -2.92383 1.58691 -5.47852 1.90918l-2.76562 0.337891c-0.870117 0.123047 -1.53516 0.277344 -1.99121 0.481445c-0.460938 0.200195 -0.686523 0.588867 -0.686523 1.13184
162
+ c0 0.926758 0.80957 1.67969 2.41699 2.25781c0.583984 -0.107422 1.24902 -0.168945 2.00195 -0.168945c2.89844 0 5.21191 0.814453 6.9375 2.46289s2.59082 3.87012 2.59082 6.6709c0 1.14746 -0.205078 2.13574 -0.609375 2.98047l4.17285 0.716797zM160.404 99.3027
163
+ l2.98047 -0.307617c1.6377 -0.168945 2.78516 -0.470703 3.43555 -0.890625c0.649414 -0.419922 0.977539 -0.999023 0.977539 -1.74121c0 -1.46387 -0.666016 -2.59082 -2.00195 -3.36914c-1.33105 -0.788086 -3.18457 -1.17188 -5.54492 -1.17188
164
+ c-1.6543 0 -2.88281 0.28125 -3.68652 0.829102c-0.803711 0.558594 -1.20801 1.30566 -1.20801 2.25293c0 1.13184 0.43457 2.08887 1.30566 2.84668c0.870117 0.77832 2.11914 1.28516 3.74219 1.55176zM166.277 119.982c1.92969 0 2.89258 -1.03418 2.89258 -3.08301
165
+ c0 -1.17676 -0.194336 -2.25781 -0.578125 -3.24609c-0.384766 -0.977539 -0.921875 -1.76074 -1.6084 -2.31934c-0.691406 -0.5625 -1.50488 -0.849609 -2.44727 -0.849609c-0.957031 0 -1.68945 0.276367 -2.20605 0.839844
166
+ c-0.517578 0.563477 -0.773438 1.35156 -0.773438 2.38086c0 1.13672 0.194336 2.20117 0.588867 3.16406c0.388672 0.962891 0.941406 1.72559 1.65332 2.2832c0.707031 0.547852 1.53613 0.830078 2.47852 0.830078zM182.277 98.8975l5.11426 24.0596h-5.11426
167
+ l-5.13086 -24.0596h5.13086zM183.296 128.876c0 -0.804688 0.255859 -1.4082 0.762695 -1.78711c0.506836 -0.374023 1.14746 -0.563477 1.91504 -0.563477c0.942383 0 1.70508 0.291992 2.2832 0.896484c0.579102 0.603516 0.871094 1.41309 0.871094 2.44141
168
+ c0 0.789062 -0.241211 1.36719 -0.722656 1.75098c-0.475586 0.378906 -1.10059 0.568359 -1.86816 0.568359c-1.0293 0 -1.82324 -0.301758 -2.3916 -0.911133s-0.849609 -1.41309 -0.849609 -2.39551zM203.188 98.8975v0.015625h5.14062l2.97949 14.208
169
+ c0.333008 1.62305 0.501953 2.93945 0.501953 3.93262c0 2.03223 -0.538086 3.59863 -1.60254 4.7002c-1.06543 1.10547 -2.57031 1.64844 -4.51074 1.64844c-1.49512 0 -2.87793 -0.394531 -4.1582 -1.16699c-1.27441 -0.773438 -2.51855 -2.0127 -3.72168 -3.7334
170
+ h-0.194336l0.455078 4.45996h-4.00391l-5.12988 -24.0488h5.12988l2.13574 10.1992c0.404297 1.97168 1.01367 3.73242 1.82227 5.28906c0.814453 1.55664 1.73047 2.75488 2.74414 3.5791s2.04297 1.23828 3.08789 1.23828c1.86816 0 2.80566 -0.952148 2.80566 -2.85156
171
+ c0 -0.603516 -0.12793 -1.55078 -0.389648 -2.85645zM230.753 106.302c0 0.936523 -0.163086 1.76562 -0.491211 2.46777c-0.333008 0.72168 -0.819336 1.38184 -1.45898 1.99121c-0.640625 0.609375 -1.7207 1.3418 -3.24121 2.20215
172
+ c-1.47949 0.798828 -2.45801 1.44824 -2.93359 1.96094c-0.481445 0.506836 -0.72168 1.08496 -0.72168 1.74023c0 0.855469 0.332031 1.52051 0.988281 2.00195c0.655273 0.481445 1.51465 0.72168 2.5752 0.72168c1.82715 0 3.75781 -0.547852 5.78516 -1.64844
173
+ l1.6543 3.83008c-2.17676 1.20801 -4.68555 1.81738 -7.52637 1.81738c-2.64258 0 -4.73633 -0.639648 -6.28809 -1.90918c-1.55078 -1.28027 -2.3291 -3.04199 -2.3291 -5.28906c0 -1.36719 0.374023 -2.57031 1.12109 -3.56934
174
+ c0.74707 -1.00781 2.02734 -2.00195 3.83984 -2.96875c1.55176 -0.886719 2.58105 -1.58789 3.07715 -2.12012c0.49707 -0.527344 0.748047 -1.15723 0.748047 -1.9043c0 -0.994141 -0.435547 -1.79785 -1.30566 -2.37109
175
+ c-0.871094 -0.573242 -2.00781 -0.870117 -3.41504 -0.870117c-2.30469 0 -4.56738 0.650391 -6.78418 1.95605v-4.4082c1.91504 -0.967773 4.24902 -1.45996 7.00391 -1.45996c3.04688 0 5.42773 0.675781 7.1377 2.0332c1.70996 1.35645 2.56445 3.28711 2.56445 5.7959z
176
+ M242.826 88.2129c2.12988 0 3.86035 0.639648 5.16602 1.90918c1.32129 1.29004 2.27344 3.3125 2.85156 6.05176l4.84863 22.9072h4.98242l0.803711 3.87598h-4.97656l0.394531 1.86328c0.317383 1.42871 0.777344 2.44727 1.38184 3.07715
177
+ c0.598633 0.620117 1.40332 0.9375 2.40137 0.9375c0.901367 0 1.88379 -0.205078 2.95898 -0.609375l1.32617 3.82422c-1.39746 0.625 -2.92871 0.942383 -4.58691 0.942383c-2.40625 0 -4.27051 -0.609375 -5.58105 -1.8125
178
+ c-1.31055 -1.20801 -2.2832 -3.24121 -2.92383 -6.11816l-0.455078 -2.00781l-4.21973 -1.64844l-0.455078 -2.29883h3.89062l-4.71973 -22.2363c-0.625 -2.96973 -1.90527 -4.45898 -3.85059 -4.45898c-0.727539 0 -1.55176 0.143555 -2.47852 0.43457v-4.13184
179
+ c0.855469 -0.342773 1.93555 -0.500977 3.24121 -0.500977zM282.772 113.956c0 2.89258 -0.798828 5.19141 -2.38086 6.87598c-1.60254 1.67969 -3.80957 2.51855 -6.64062 2.51855c-2.45215 0 -4.61328 -0.669922 -6.48145 -2.01172
180
+ c-1.88477 -1.3418 -3.33398 -3.2207 -4.37305 -5.62207c-1.0293 -2.41602 -1.55078 -5.06348 -1.55078 -7.94629c0 -2.85156 0.818359 -5.11426 2.45215 -6.77344c1.63867 -1.65918 3.85059 -2.4834 6.64062 -2.4834c2.40625 0 4.53613 0.640625 6.37988 1.92578
181
+ c1.85254 1.2793 3.30664 3.11719 4.36719 5.51855c1.05469 2.40723 1.58691 5.07422 1.58691 7.99805zM277.622 114.176c0 -2.13477 -0.296875 -4.08594 -0.871094 -5.8623c-0.588867 -1.77148 -1.39746 -3.15918 -2.43652 -4.1416
182
+ c-1.0498 -0.988281 -2.22266 -1.48047 -3.52246 -1.48047c-1.4082 0 -2.46289 0.430664 -3.19043 1.29102c-0.72168 0.849609 -1.06934 2.08887 -1.06934 3.69141c0 2.01172 0.291016 3.90625 0.879883 5.68848c0.579102 1.76562 1.4082 3.17871 2.47363 4.21289
183
+ c1.06445 1.04004 2.2627 1.55664 3.61914 1.55664c1.32129 0 2.33496 -0.429688 3.04688 -1.31055s1.07031 -2.08887 1.07031 -3.64551zM301.731 123.402c-1.35645 0 -2.63086 -0.394531 -3.84473 -1.14746c-1.19336 -0.762695 -2.40625 -2.01172 -3.60938 -3.75293
184
+ h-0.189453l0.450195 4.45996h-3.99316l-5.13574 -24.0488h5.13574l2.30371 10.8701c0.557617 2.66211 1.56641 4.80762 3 6.44629c1.43945 1.63281 3.07227 2.45215 4.88965 2.45215c0.702148 0 1.44434 -0.107422 2.22754 -0.3125l1.11621 4.7666
185
+ c-0.675781 0.174805 -1.44922 0.266602 -2.35059 0.266602zM119.286 43.2178l14.249 31.8008h-5.35059l-7.78809 -18.4014c-0.276367 -0.620117 -0.716797 -1.71582 -1.32617 -3.3125c-0.608398 -1.58789 -1.11621 -3.02637 -1.52051 -4.2959h-0.173828l0.0664062 4.09082
186
+ l-0.0664062 3.67578l-0.670898 18.2432h-4.89453l-8.41699 -18.2891c-0.855469 -1.94043 -1.88477 -4.52051 -3.08789 -7.7207h-0.12793c0.18457 3.0459 0.282227 5.5498 0.282227 7.52637l-0.415039 18.4834h-4.98145l1.15137 -31.8008h5.56543l8.37695 18.3193
187
+ c1.01367 2.12988 1.86328 4.23926 2.54395 6.32324h0.12793l-0.0869141 -2.30371l0.12793 -4.01953l0.803711 -18.3193h5.6123zM152.551 58.2754c0 2.89355 -0.798828 5.19727 -2.3916 6.87695c-1.5918 1.67871 -3.80371 2.51855 -6.62988 2.51855
188
+ c-2.44727 0 -4.6084 -0.670898 -6.48242 -2.01172c-1.87402 -1.3418 -3.32812 -3.2207 -4.3623 -5.62207c-1.03906 -2.41699 -1.55664 -5.06348 -1.55664 -7.94629c0 -2.85156 0.819336 -5.11523 2.45801 -6.77344c1.63281 -1.65918 3.85059 -2.4834 6.63086 -2.4834
189
+ c2.40625 0 4.53613 0.639648 6.38379 1.9248c1.84863 1.28027 3.30273 3.11816 4.3623 5.51953c1.06055 2.40625 1.58789 5.07422 1.58789 7.99707zM147.395 58.4961c0 -2.13477 -0.291992 -4.08594 -0.865234 -5.8623
190
+ c-0.583984 -1.77148 -1.39258 -3.15918 -2.4375 -4.14258c-1.04395 -0.988281 -2.2168 -1.47949 -3.52246 -1.47949c-1.4082 0 -2.47266 0.430664 -3.18945 1.29004c-0.716797 0.850586 -1.0752 2.08887 -1.0752 3.69141c0 2.0127 0.291992 3.90723 0.880859 5.68848
191
+ c0.583008 1.7666 1.41309 3.17969 2.47754 4.21387c1.06543 1.03906 2.27344 1.55664 3.62012 1.55664c1.32129 0 2.33496 -0.429688 3.04688 -1.31055c0.710938 -0.880859 1.06445 -2.08887 1.06445 -3.64551zM171.51 67.7227
192
+ c-1.35156 0 -2.62695 -0.394531 -3.82422 -1.14746c-1.20898 -0.762695 -2.41211 -2.01172 -3.61523 -3.75293h-0.194336l0.455078 4.45996h-4.00293l-5.13086 -24.0488h5.13086l2.30371 10.8701c0.563477 2.66211 1.56641 4.80762 3 6.44531
193
+ c1.43848 1.63379 3.07227 2.45312 4.89453 2.45312c0.702148 0 1.43945 -0.107422 2.22266 -0.3125l1.10547 4.7666c-0.660156 0.173828 -1.44922 0.266602 -2.34473 0.266602zM185.462 67.7227c-2.12012 0 -4.04492 -0.711914 -5.78027 -2.125
194
+ c-1.73633 -1.41309 -3.12891 -3.41992 -4.16309 -6.00098c-1.03906 -2.58594 -1.55664 -5.36035 -1.55664 -8.33008c0 -2.70312 0.588867 -4.78711 1.76172 -6.25684c1.17773 -1.47461 2.80078 -2.2168 4.87402 -2.2168c1.33105 0 2.5957 0.322266 3.78418 0.977539
195
+ c1.1875 0.650391 2.4209 1.75098 3.69629 3.29297h0.15332l-0.414062 -3.83008h3.99805l7.17871 33.8379h-5.06934l-1.65332 -7.78711c-0.348633 -1.50098 -0.614258 -3.32324 -0.803711 -5.43262h-0.174805c-1.29492 2.58008 -3.23535 3.87109 -5.83105 3.87109z
196
+ M182.543 46.9199c-2.27246 0 -3.41504 1.47461 -3.41504 4.41797c0 2.0127 0.323242 3.99902 0.958008 5.93945s1.49512 3.47168 2.56543 4.58789c1.06934 1.11621 2.22168 1.67383 3.45508 1.67383c1.29102 0 2.25293 -0.399414 2.88281 -1.1875
197
+ c0.629883 -0.798828 0.947266 -1.8584 0.947266 -3.17969c0 -1.96094 -0.347656 -3.89648 -1.05469 -5.81152c-0.701172 -1.91504 -1.63867 -3.46094 -2.80566 -4.64844c-1.16699 -1.20312 -2.34473 -1.79199 -3.5332 -1.79199zM223.053 66.2988
198
+ c0 2.90332 -0.839844 5.0791 -2.51367 6.54297c-1.68457 1.45996 -4.18848 2.19141 -7.50586 2.19141h-7.26562l-6.72266 -31.7998h5.15625l2.49805 11.8887h2.3916c4.39258 0 7.81836 0.962891 10.2754 2.89258c2.45801 1.93066 3.68652 4.69043 3.68652 8.28418z
199
+ M207.632 59.4941l2.38574 11.1875h2.59082c1.75586 0 3.05078 -0.369141 3.90137 -1.0957c0.849609 -0.727539 1.27441 -1.87402 1.27441 -3.45605c0 -2.12012 -0.706055 -3.74805 -2.11914 -4.90527c-1.4082 -1.15723 -3.41016 -1.73047 -5.99121 -1.73047h-2.04199z
200
+ M239.943 67.7227c-1.34668 0 -2.62109 -0.394531 -3.82422 -1.14746c-1.20801 -0.762695 -2.41113 -2.01172 -3.61523 -3.75293h-0.194336l0.456055 4.45996h-4.00391l-5.12988 -24.0488h5.12988l2.30371 10.8701c0.563477 2.66211 1.56641 4.80762 3.00098 6.44531
201
+ c1.43848 1.63379 3.07129 2.45312 4.89453 2.45312c0.701172 0 1.43848 -0.107422 2.22168 -0.3125l1.10645 4.7666c-0.661133 0.173828 -1.44922 0.266602 -2.3457 0.266602zM251.484 42.7881c1.43359 0 2.7334 0.137695 3.89062 0.378906
202
+ c1.16797 0.271484 2.44727 0.726562 3.84082 1.36133v4.07031c-1.4082 -0.665039 -2.62695 -1.13672 -3.65625 -1.40723c-1.0293 -0.282227 -2.06348 -0.419922 -3.10742 -0.419922c-1.62891 0 -2.84668 0.460938 -3.66602 1.37207s-1.22949 2.18066 -1.22949 3.78906
203
+ v0.628906l0.046875 0.670898h0.936523c4.46484 0 7.90527 0.75293 10.3271 2.2373c2.41699 1.48535 3.62012 3.54297 3.62012 6.19043c0 1.9248 -0.650391 3.41504 -1.94043 4.46973c-1.2959 1.0498 -3.11328 1.57715 -5.44824 1.57715
204
+ c-2.38086 0 -4.53125 -0.670898 -6.45117 -2.02246s-3.44531 -3.26172 -4.56641 -5.73438c-1.12207 -2.46289 -1.68457 -5.13574 -1.68457 -8.0127c0 -2.87793 0.798828 -5.11523 2.40137 -6.7334c1.60254 -1.61719 3.8291 -2.41602 6.68652 -2.41602zM254.792 63.8008
205
+ c0.911133 0 1.60254 -0.205078 2.07324 -0.609375c0.46582 -0.415039 0.696289 -0.983398 0.696289 -1.73047c0 -1.42871 -0.773438 -2.5293 -2.30859 -3.29785c-1.53613 -0.783203 -3.67188 -1.16699 -6.39551 -1.16699h-0.634766
206
+ c0.538086 2.04785 1.41797 3.69629 2.6416 4.93555c1.22363 1.24414 2.53516 1.86914 3.92773 1.86914zM280.289 50.6211c0 0.9375 -0.168945 1.7666 -0.496094 2.46777c-0.328125 0.722656 -0.819336 1.38281 -1.45996 1.99219
207
+ c-0.628906 0.609375 -1.70996 1.3418 -3.24023 2.20117c-1.47949 0.798828 -2.45312 1.44922 -2.92871 1.96094c-0.481445 0.506836 -0.72168 1.08594 -0.72168 1.74121c0 0.855469 0.322266 1.52051 0.982422 2.00195s1.52051 0.72168 2.58105 0.72168
208
+ c1.82715 0 3.75781 -0.547852 5.78516 -1.64844l1.64844 3.83008c-2.18066 1.20801 -4.67969 1.81738 -7.53125 1.81738c-2.6416 0 -4.73047 -0.640625 -6.28711 -1.91016c-1.55176 -1.2793 -2.3252 -3.04102 -2.3252 -5.28906
209
+ c0 -1.36621 0.374023 -2.57031 1.12207 -3.56836c0.74707 -1.00879 2.02734 -2.00195 3.83984 -2.96973c1.55664 -0.885742 2.58496 -1.5918 3.08203 -2.11914s0.74707 -1.15723 0.74707 -1.90527c0 -0.993164 -0.439453 -1.79688 -1.31055 -2.37012
210
+ c-0.870117 -0.573242 -2.01172 -0.870117 -3.40918 -0.870117c-2.30957 0 -4.5625 0.649414 -6.79004 1.95508v-4.4082c1.9209 -0.967773 4.25 -1.45898 7.00977 -1.45898c3.04102 0 5.42188 0.675781 7.13184 2.03223c1.71582 1.35742 2.57031 3.28711 2.57031 5.7959z
211
+ M299.898 50.6211c0 0.9375 -0.168945 1.7666 -0.496094 2.46777c-0.328125 0.722656 -0.819336 1.38281 -1.45898 1.99219c-0.629883 0.609375 -1.70996 1.3418 -3.24121 2.20117c-1.47949 0.798828 -2.45215 1.44922 -2.92871 1.96094
212
+ c-0.481445 0.506836 -0.72168 1.08594 -0.72168 1.74121c0 0.855469 0.322266 1.52051 0.982422 2.00195c0.661133 0.481445 1.52148 0.72168 2.58105 0.72168c1.82812 0 3.75781 -0.547852 5.78516 -1.64844l1.64844 3.83008
213
+ c-2.18066 1.20801 -4.67969 1.81738 -7.53125 1.81738c-2.6416 0 -4.73047 -0.640625 -6.28711 -1.91016c-1.55176 -1.2793 -2.32422 -3.04102 -2.32422 -5.28906c0 -1.36621 0.373047 -2.57031 1.12109 -3.56836c0.74707 -1.00879 2.02734 -2.00195 3.83984 -2.96973
214
+ c1.55176 -0.885742 2.58008 -1.58691 3.08203 -2.11914c0.492188 -0.527344 0.748047 -1.15723 0.748047 -1.90527c0 -0.993164 -0.44043 -1.79688 -1.31055 -2.37012c-0.871094 -0.573242 -2.0127 -0.870117 -3.41016 -0.870117
215
+ c-2.30957 0 -4.5625 0.649414 -6.78906 1.95508v-4.4082c1.91992 -0.967773 4.24902 -1.45898 7.00879 -1.45898c3.04102 0 5.42188 0.675781 7.13281 2.03223c1.71484 1.35742 2.56934 3.28711 2.56934 5.7959zM119.152 6.96875
216
+ c0 4.03906 -1.05957 7.11621 -3.17383 9.2207c-2.11523 2.09961 -5.14062 3.14844 -9.06738 3.14844h-8.02832l-6.72266 -31.7998h8.72461c3.7373 0 6.99316 0.798828 9.76367 2.37012c2.76953 1.57715 4.87891 3.83984 6.32812 6.76855s2.17578 6.35938 2.17578 10.292z
217
+ M101.146 -8.08496v0l-2.93848 -0.00976562l4.93555 23.0811h3.17969c2.43164 0 4.28516 -0.701172 5.56543 -2.09961c1.27441 -1.39258 1.91406 -3.4248 1.91406 -6.09277c0 -2.9082 -0.506836 -5.48828 -1.53027 -7.74609
218
+ c-1.01855 -2.25781 -2.48828 -4.01953 -4.40332 -5.26367s-4.15723 -1.86914 -6.72266 -1.86914zM131.216 -12.8926c1.43848 0 2.73828 0.138672 3.89551 0.378906c1.16797 0.271484 2.44727 0.727539 3.84082 1.3623v4.07031
219
+ c-1.4082 -0.665039 -2.62695 -1.13672 -3.65625 -1.4082c-1.0293 -0.28125 -2.06348 -0.419922 -3.10742 -0.419922c-1.62891 0 -2.84668 0.460938 -3.66602 1.37207c-0.819336 0.912109 -1.22949 2.18164 -1.22949 3.78906v0.629883l0.046875 0.670898h0.936523
220
+ c4.46484 0 7.90527 0.75293 10.3223 2.2373c2.41602 1.48438 3.625 3.54297 3.625 6.19043c0 1.9248 -0.650391 3.41504 -1.94629 4.46973c-1.29492 1.0498 -3.1123 1.57715 -5.44727 1.57715c-2.38086 0 -4.53125 -0.670898 -6.45117 -2.02246
221
+ c-1.91992 -1.35254 -3.44531 -3.26172 -4.56738 -5.73438c-1.12109 -2.46289 -1.68457 -5.13574 -1.68457 -8.01367c0 -2.87695 0.798828 -5.11426 2.40137 -6.73242s3.83008 -2.41699 6.6875 -2.41699zM134.522 8.12012c0.912109 0 1.60254 -0.205078 2.07422 -0.609375
222
+ c0.46582 -0.414062 0.696289 -0.982422 0.696289 -1.73047c0 -1.42871 -0.773438 -2.5293 -2.30957 -3.29688c-1.53613 -0.783203 -3.6709 -1.16797 -6.39453 -1.16797h-0.634766c0.537109 2.04883 1.41797 3.69727 2.6416 4.93652
223
+ c1.22852 1.24414 2.53418 1.86816 3.92676 1.86816zM148.04 -12.4619v0h5.97461l13.0098 24.0586h-5.4375l-6.76367 -13.0098c-0.332031 -0.604492 -0.803711 -1.55664 -1.41309 -2.87207c-0.608398 -1.32129 -1.11621 -2.51953 -1.52051 -3.58984h-0.15332
224
+ c0 2.00195 -0.102539 4.16309 -0.307617 6.46191l-1.19727 13.0098h-5.04395zM175.391 -12.8926c1.43848 0 2.73926 0.138672 3.90137 0.378906c1.16797 0.271484 2.44727 0.727539 3.83984 1.3623v4.07031c-1.40723 -0.665039 -2.62598 -1.13672 -3.65527 -1.4082
225
+ c-1.0293 -0.28125 -2.06348 -0.419922 -3.1084 -0.419922c-1.62793 0 -2.84668 0.460938 -3.66504 1.37207c-0.819336 0.912109 -1.22949 2.18164 -1.22949 3.78906v0.629883l0.0458984 0.670898h0.932617c4.46387 0 7.90527 0.75293 10.3213 2.2373
226
+ c2.41699 1.48438 3.625 3.54297 3.625 6.19043c0 1.9248 -0.650391 3.41504 -1.94531 4.46973c-1.29492 1.0498 -3.11328 1.57715 -5.44727 1.57715c-2.38086 0 -4.53125 -0.670898 -6.45117 -2.02246c-1.9209 -1.35254 -3.44629 -3.26172 -4.56738 -5.73438
227
+ c-1.12109 -2.46289 -1.68457 -5.13574 -1.68457 -8.01367c0 -2.87695 0.798828 -5.11426 2.40137 -6.73242s3.83008 -2.41699 6.68652 -2.41699zM178.698 8.12012c0.911133 0 1.60254 -0.205078 2.07324 -0.609375c0.46582 -0.414062 0.696289 -0.982422 0.696289 -1.73047
228
+ c0 -1.42871 -0.772461 -2.5293 -2.30859 -3.29688c-1.53613 -0.783203 -3.6709 -1.16797 -6.39551 -1.16797h-0.634766c0.538086 2.04883 1.41895 3.69727 2.64258 4.93652c1.22852 1.24414 2.53418 1.86816 3.92676 1.86816zM193.301 -12.4619l7.19824 33.8486h-5.10938
229
+ l-7.17871 -33.8486h5.08984zM222.459 2.5957c0 2.89258 -0.798828 5.19727 -2.3916 6.87598c-1.5918 1.67969 -3.80371 2.51953 -6.62988 2.51953c-2.44727 0 -4.6084 -0.670898 -6.48242 -2.0127c-1.87305 -1.34082 -3.32715 -3.21973 -4.36133 -5.62109
230
+ c-1.04004 -2.41699 -1.55664 -5.06445 -1.55664 -7.94629c0 -2.85254 0.819336 -5.11523 2.45703 -6.77441c1.63379 -1.6582 3.85059 -2.48242 6.63086 -2.48242c2.40625 0 4.53613 0.639648 6.38477 1.9248c1.84766 1.28027 3.30762 3.11816 4.3623 5.51953
231
+ c1.05469 2.40625 1.58691 5.07324 1.58691 7.99707zM217.303 2.81641c0 -2.13574 -0.291992 -4.08594 -0.865234 -5.86328c-0.583008 -1.77148 -1.39258 -3.1582 -2.43652 -4.1416c-1.04492 -0.988281 -2.21777 -1.47949 -3.52246 -1.47949
232
+ c-1.4082 0 -2.47363 0.429688 -3.19043 1.29004c-0.716797 0.849609 -1.0752 2.08887 -1.0752 3.69141c0 2.0127 0.291992 3.90625 0.880859 5.68848c0.583984 1.7666 1.41309 3.17969 2.47852 4.21387c1.06445 1.03906 2.27246 1.55664 3.61914 1.55664
233
+ c1.32129 0 2.33496 -0.430664 3.04688 -1.31055c0.711914 -0.880859 1.06445 -2.08984 1.06445 -3.64551zM236.651 -12.8926c2.09961 0 4.02441 0.716797 5.77539 2.14551s3.13379 3.44043 4.14746 6.01074c1.01367 2.57617 1.52051 5.34082 1.52051 8.2998
234
+ c0 2.65723 -0.583984 4.72559 -1.76172 6.2207c-1.17676 1.49512 -2.7998 2.24316 -4.87402 2.24316c-2.70801 0 -5.20215 -1.51074 -7.48047 -4.52637h-0.194336l0.456055 4.0957h-4.00391l-7.35254 -34.7598h5.06934l2.08887 10.0713
235
+ c0.260742 1.28027 0.439453 2.62109 0.541992 4.0293h0.21582c1.27441 -2.55957 3.22559 -3.83008 5.85156 -3.83008zM239.544 7.85938c2.24805 0 3.36914 -1.45898 3.37402 -4.37305c0 -2.07812 -0.311523 -4.07031 -0.936523 -5.97949
236
+ c-0.625 -1.89941 -1.47461 -3.4209 -2.54492 -4.56738c-1.06934 -1.14648 -2.22168 -1.70996 -3.45605 -1.70996c-1.2334 0 -2.18555 0.388672 -2.86133 1.16699c-0.675781 0.783203 -1.01465 1.86914 -1.01465 3.26172c0 2.02246 0.369141 3.98828 1.10156 5.8877
237
+ c0.726562 1.90527 1.67383 3.43066 2.83594 4.58301c1.15723 1.15723 2.33008 1.73047 3.50195 1.73047zM267.279 12.042c-2.9541 0 -5.50879 -1.64355 -7.66504 -4.89453h-0.194336l0.456055 4.45996h-4.00391l-5.12988 -24.0596h5.12988l2.13477 10.1992
238
+ c0.645508 3.06152 1.64844 5.52441 3.00586 7.35742c1.35156 1.84375 2.82617 2.76465 4.42871 2.76465c1.68945 0 2.53906 -0.977539 2.53906 -2.93359c0 -0.655273 -0.117188 -1.57715 -0.368164 -2.76465l-3.10254 -14.6123h5.10938l2.20117 10.46
239
+ c0.620117 2.96973 1.60352 5.3457 2.96484 7.14746c1.34668 1.79688 2.81641 2.69824 4.37793 2.69824c1.76074 0 2.63672 -0.942383 2.63672 -2.81055c0 -0.542969 -0.132812 -1.50586 -0.410156 -2.8877l-3.10254 -14.6123h5.11035l3.04102 14.1973
240
+ c0.327148 1.7002 0.481445 3.01074 0.481445 3.94238c0 2.0127 -0.501953 3.56836 -1.51074 4.67969c-1.00391 1.11621 -2.46777 1.66895 -4.40332 1.66895c-1.48926 0 -2.92871 -0.429688 -4.31641 -1.2998c-1.39258 -0.860352 -2.62109 -2.12988 -3.71191 -3.80957
241
+ h-0.173828c-0.496094 3.39941 -2.33496 5.10938 -5.52441 5.10938zM299.986 -12.8926c1.43359 0 2.73926 0.138672 3.88574 0.378906c1.17285 0.271484 2.45215 0.727539 3.83984 1.3623v4.07031c-1.4082 -0.665039 -2.62695 -1.13672 -3.65039 -1.4082
242
+ c-1.0293 -0.28125 -2.06836 -0.419922 -3.1084 -0.419922c-1.63281 0 -2.85156 0.460938 -3.6709 1.37207c-0.819336 0.912109 -1.22363 2.18164 -1.22363 3.78906v0.629883l0.0458984 0.670898h0.942383c4.45996 0 7.90039 0.75293 10.3223 2.2373
243
+ c2.41602 1.48438 3.62012 3.54297 3.62012 6.19043c0 1.9248 -0.650391 3.41504 -1.95117 4.46973c-1.28516 1.0498 -3.10742 1.57715 -5.44238 1.57715c-2.37598 0 -4.52637 -0.670898 -6.44629 -2.02246c-1.9248 -1.35254 -3.45117 -3.26172 -4.57227 -5.73438
244
+ c-1.13184 -2.46289 -1.68945 -5.13574 -1.68945 -8.01367c0 -2.87695 0.808594 -5.12988 2.41113 -6.73242c1.60254 -1.61816 3.83008 -2.41699 6.6875 -2.41699zM303.288 8.12012c0.916992 0 1.6084 -0.205078 2.05371 -0.609375
245
+ c0.459961 -0.414062 0.701172 -0.982422 0.701172 -1.73047c0 -1.42871 -0.768555 -2.5293 -2.30371 -3.29688c-1.54688 -0.783203 -3.67676 -1.16797 -6.39551 -1.16797h-0.629883c0.542969 2.04883 1.41309 3.69727 2.64258 4.93652
246
+ c1.2334 1.24414 2.54395 1.86816 3.93164 1.86816zM327.056 -12.4619h0.00488281v0.015625h5.13574l2.97949 14.208c0.342773 1.62305 0.501953 2.93848 0.501953 3.93164c0 2.0332 -0.533203 3.59961 -1.59766 4.7002c-1.07031 1.10645 -2.57031 1.64844 -4.51562 1.64844
247
+ c-1.49512 0 -2.88281 -0.393555 -4.16309 -1.16699c-1.26953 -0.773438 -2.52441 -2.0127 -3.72168 -3.73242h-0.195312l0.456055 4.45898h-3.99902l-5.12988 -24.0479h5.12988l2.12988 10.1982c0.410156 1.97168 1.01367 3.73242 1.82812 5.28906
248
+ c0.808594 1.55664 1.71484 2.75488 2.73926 3.5791s2.05273 1.23926 3.09277 1.23926c1.86816 0 2.81055 -0.952148 2.81055 -2.85156c0 -0.604492 -0.12793 -1.55176 -0.399414 -2.85742zM347.51 -8.76074c-0.737305 0 -1.29004 0.18457 -1.65332 0.547852
249
+ c-0.358398 0.369141 -0.538086 0.871094 -0.538086 1.49023c0 0.547852 0.0976562 1.21387 0.28125 2.0127l2.66309 12.4414h6.02051l0.850586 3.87012h-6.07227l1.13086 5.35059h-3.16895l-2.81055 -5.03809l-4.13184 -1.79199l-0.460938 -2.39062h3.52246
250
+ l-2.63184 -12.4014c-0.235352 -1.06934 -0.348633 -2.02148 -0.348633 -2.85156c0 -3.5791 1.99219 -5.37109 5.95996 -5.37109c0.870117 0 1.74121 0.0976562 2.61133 0.287109c0.875977 0.18457 1.55664 0.404297 2.06836 0.650391v3.87012
251
+ c-1.21289 -0.450195 -2.31445 -0.675781 -3.29199 -0.675781zM116.858 188.001l11.6797 56.1611h15.6816l3.50293 15.9287h-50.6885l-3.4043 -15.9287h15.6309l-11.6836 -56.1611h19.2812zM164.168 187.019c6.3125 0 11.8369 1.54102 16.5684 4.62793
252
+ c4.73047 3.08789 8.40137 7.42383 11.0176 12.9951c2.61621 5.5752 3.92188 11.8115 3.92188 18.7129c0 6.90234 -1.86328 12.2119 -5.5957 15.9287c-3.73242 3.71191 -9.03223 5.57031 -15.9023 5.57031c-6.31348 0 -11.833 -1.54102 -16.5684 -4.63379
253
+ c-4.73145 -3.0918 -8.40723 -7.42383 -11.0186 -12.9941c-2.61621 -5.5752 -3.92188 -11.8115 -3.92188 -18.7139c0 -6.90137 1.86328 -12.2109 5.5957 -15.9277c3.73242 -3.71777 9.03223 -5.56543 15.9033 -5.56543zM171.96 230.508
254
+ c1.31641 0 2.35059 -0.547852 3.1084 -1.6543c0.757812 -1.10059 1.13672 -2.73926 1.13672 -4.9043c0 -5.9502 -0.988281 -11.208 -2.95996 -15.7803c-1.9707 -4.57227 -4.28516 -6.85547 -6.95312 -6.85547c-2.75879 0 -4.1416 2.18652 -4.1416 6.55859
255
+ c0 5.91895 0.957031 11.167 2.88281 15.7539c1.91992 4.58789 4.22852 6.88184 6.92676 6.88184zM222.331 187.019c6.3125 0 11.832 1.54102 16.5684 4.62793c4.73047 3.08789 8.40137 7.42383 11.0176 12.9951c2.61719 5.5752 3.92285 11.8115 3.92285 18.7129
256
+ c0 6.90234 -1.86426 12.2119 -5.59668 15.9287c-3.73242 3.71191 -9.03125 5.57031 -15.9023 5.57031c-6.31348 0 -11.833 -1.54102 -16.5684 -4.63379c-4.73145 -3.0918 -8.40723 -7.42383 -11.0186 -12.9941c-2.61621 -5.5752 -3.92188 -11.8115 -3.92188 -18.7139
257
+ c0 -6.90137 1.86328 -12.2109 5.5957 -15.9277c3.73242 -3.71777 9.03223 -5.56543 15.9033 -5.56543zM230.123 230.508c1.31152 0 2.35059 -0.547852 3.1084 -1.6543c0.757812 -1.10059 1.13672 -2.73926 1.13672 -4.9043c0 -5.9502 -0.988281 -11.208 -2.95996 -15.7803
258
+ c-1.9707 -4.57227 -4.28516 -6.85547 -6.95215 -6.85547c-2.75977 0 -4.14258 2.18652 -4.14258 6.55859c0 5.91895 0.958008 11.167 2.88281 15.7539c1.91992 4.58789 4.22852 6.88184 6.92676 6.88184zM275.072 188.001l16.2197 76.7236h-19.0869l-16.2207 -76.7236
259
+ h19.0879zM328.494 207.381c0 6.83496 -3.69141 12.0986 -11.0947 15.7744c-2.33496 1.15234 -4.01953 2.08887 -5.05371 2.81055c-1.03418 0.722656 -1.55176 1.56152 -1.55176 2.51465c0 2.2373 1.23926 3.35352 3.73828 3.35352
260
+ c1.67383 0 3.68066 -0.419922 5.99023 -1.25977c2.31934 -0.839844 4.55664 -1.96582 6.72754 -3.37891l5.96973 12.4258c-2.8623 1.77637 -5.80566 3.09277 -8.83203 3.94727c-3.03125 0.855469 -6.37891 1.28027 -10.0605 1.28027
261
+ c-7.33203 0 -12.9844 -1.53125 -16.9629 -4.58789c-3.96777 -3.05664 -5.96484 -7.41309 -5.96484 -13.0654c0 -3.54883 0.793945 -6.55371 2.3916 -9.02148c1.5918 -2.46777 4.13184 -4.6543 7.61816 -6.55957c3.41504 -1.94043 5.55566 -3.32715 6.41016 -4.16699
262
+ c0.855469 -0.839844 1.28027 -1.83301 1.28027 -2.98535c0 -1.08496 -0.552734 -1.92969 -1.6748 -2.53906c-1.11035 -0.609375 -2.78516 -0.912109 -5.02734 -0.912109c-2.66211 0 -5.28906 0.328125 -7.88965 0.988281
263
+ c-2.59082 0.655273 -5.40234 1.80762 -8.42773 3.45117v-15.334c4.4082 -2.06934 10.2549 -3.09766 17.5566 -3.09766c8.02832 0 14.1719 1.75586 18.4473 5.27344c4.26953 3.51758 6.41016 8.5498 6.41016 15.0889zM358.349 187.019
264
+ c4.17285 0 7.84961 0.373047 11.0391 1.10059c3.18945 0.742188 6.62012 2.04785 10.3115 3.92188v13.5117c-3.18945 -1.67969 -6.04199 -2.90332 -8.53027 -3.67578c-2.49805 -0.773438 -5.04785 -1.15723 -7.64355 -1.15723c-5.3916 0 -8.08496 2.43164 -8.08496 7.2959
265
+ v0.788086h2.9082c9.72852 0 17.1572 1.77148 22.3076 5.30469c5.14062 3.53223 7.71094 8.60645 7.71094 15.2109c0 4.70605 -1.79199 8.46875 -5.37109 11.2949c-3.57812 2.82617 -8.49902 4.23926 -14.7451 4.23926c-6.27246 0 -11.8018 -1.43359 -16.5938 -4.31055
266
+ c-4.78223 -2.87793 -8.54004 -7.10156 -11.29 -12.6719c-2.73926 -5.57617 -4.12109 -11.833 -4.12109 -18.7656c0 -6.9375 1.94043 -12.3486 5.82129 -16.2451s9.31348 -5.8418 16.2812 -5.8418zM366.142 231.936c1.44336 0 2.49316 -0.363281 3.15332 -1.08496
267
+ c0.65625 -0.72168 0.983398 -1.60742 0.983398 -2.66211c0 -2.2373 -1.0293 -4.03516 -3.06152 -5.40234c-2.0332 -1.36133 -4.84863 -2.04199 -8.42773 -2.04199h-1.42871c0.364258 2.89258 1.41309 5.4834 3.1543 7.7666c1.74609 2.2832 3.62012 3.4248 5.62695 3.4248z
268
+ M415.432 202.353c-2.08398 0 -3.11328 1.03418 -3.09277 3.11328c0 0.916016 0.255859 2.64648 0.789062 5.17578l4.14648 18.8828h14.2441l3.1084 14.3516h-14.1982l2.41699 11.1924h-12.7129l-6.75391 -11.832l-10.7568 -4.3418l-2.02734 -9.37012h7.59277
269
+ l-4.14746 -19.8242c-0.783203 -3.68164 -1.18262 -6.77441 -1.18262 -9.27246c0 -4.7666 1.25977 -8.19727 3.76855 -10.2812c2.51367 -2.08887 6.20508 -3.12793 11.0693 -3.12793c6.70703 0 12.2881 1.10059 16.7578 3.30176v14.3516
270
+ c-3.83984 -1.55078 -6.85059 -2.31934 -9.02148 -2.31934z" />
271
+ <glyph glyph-name="uniF11E" unicode="&#xf11e;"
272
+ d="M371.2 345.6h76.7998v-384h-384v384h76.7998v76.8008h76.7998v-76.8008h76.8008v76.8008h76.7998v-76.8008zM119.507 152.666c152.32 -172.615 276.192 0 276.192 0c-152.32 168.55 -276.192 0 -276.192 0zM257.594 203.808c28.7549 0 52.0576 -23.3086 52.0576 -52.0576
273
+ c0 -28.7227 -23.2959 -52.0381 -52.0576 -52.0381c-28.7295 0 -52.0322 23.3154 -52.0322 52.0381c0 28.749 23.3027 52.0576 52.0322 52.0576zM257.594 117.453c18.957 0 34.3164 15.3594 34.3164 34.2969c0 18.957 -15.3594 34.3105 -34.3164 34.3105
274
+ c-18.9316 0 -34.2979 -15.3535 -34.2979 -34.3105c0 -18.9375 15.3662 -34.2969 34.2979 -34.2969z" />
275
+ <glyph glyph-name="uniF115" unicode="&#xf115;"
276
+ d="M371.2 345.6h76.7998v-384h-384v384h76.7998v76.8008h76.7998v-76.8008h76.8008v76.8008h76.7998v-76.8008zM342.624 49.6641l0.0126953 1.03027l-0.441406 50.0029l-0.0703125 -1.29199c-0.0830078 -0.793945 -0.210938 -1.58789 -0.397461 -2.36816
277
+ l-0.0761719 -0.230469c-0.185547 -0.678711 -0.422852 -1.36328 -0.710938 -2.0293l-0.236328 -0.5625c-0.313477 -0.672852 -0.65918 -1.33789 -1.0625 -2.00391l-0.102539 -0.15332c-0.435547 -0.697266 -0.972656 -1.38867 -1.49707 -2.07324l-0.442383 -0.525391
278
+ c-0.524414 -0.594727 -1.06836 -1.19629 -1.66406 -1.79785l-0.306641 -0.300781c-0.723633 -0.704102 -1.5293 -1.40234 -2.3877 -2.08691l-0.537109 -0.40332c-0.954102 -0.729492 -1.93945 -1.47168 -3.02734 -2.16309l-0.185547 -0.133789
279
+ c-1.33789 -0.864258 -2.77734 -1.70898 -4.30078 -2.51562c-0.889648 -0.480469 -1.84961 -0.954102 -2.80371 -1.41406l-0.978516 -0.448242c-0.671875 -0.307617 -1.33789 -0.601562 -2.03516 -0.896484l-0.876953 -0.371094
280
+ c-1.62598 -0.671875 -3.32812 -1.31152 -5.0752 -1.92578l-0.710938 -0.237305c-1.79199 -0.601562 -3.63477 -1.18359 -5.54883 -1.73438l-0.703125 -0.185547c-2.18262 -0.614258 -4.46777 -1.19043 -6.8291 -1.69629l-0.838867 -0.185547
281
+ c-2.38672 -0.511719 -4.83203 -0.998047 -7.36621 -1.41406l-0.774414 -0.134766c-2.04785 -0.332031 -4.12109 -0.626953 -6.2207 -0.889648l-1.08789 -0.133789c-2.125 -0.255859 -4.28809 -0.480469 -6.47656 -0.65918l-1.02441 -0.0966797
282
+ c-2.56641 -0.178711 -5.16504 -0.332031 -7.80176 -0.447266l-1.20898 -0.0449219c-2.1377 -0.0703125 -4.33984 -0.12207 -6.52832 -0.12207c-1.26758 0 -2.54102 0 -3.81445 0.0126953c-1.31836 0.0263672 -2.61719 0.0644531 -3.91016 0.109375
283
+ c-1.8623 0.0634766 -3.71875 0.140625 -5.54883 0.262695l-1.46582 0.0957031c-1.4209 0.115234 -2.82227 0.205078 -4.21777 0.338867l-1.43359 0.115234c-1.74023 0.15332 -3.44922 0.333008 -5.13867 0.538086l-1.03711 0.140625
284
+ c-1.44043 0.178711 -2.84766 0.383789 -4.25586 0.588867l-1.37598 0.198242c-1.72168 0.275391 -3.41797 0.563477 -5.08789 0.876953l-0.40332 0.0830078c-1.65137 0.313477 -3.27734 0.652344 -4.87695 1.01074l-1.1709 0.256836
285
+ c-1.79199 0.40918 -3.55273 0.857422 -5.28027 1.31152l-0.857422 0.237305c-2.02246 0.543945 -3.9873 1.12598 -5.8877 1.74707l-1.2041 0.40332c-0.780273 0.261719 -1.56152 0.537109 -2.31641 0.8125l-1.35645 0.499023
286
+ c-0.743164 0.275391 -1.47852 0.563477 -2.20215 0.851562l-1.26074 0.511719l-1.47168 0.633789l-1.4082 0.633789l-1.4209 0.665039l-1.33789 0.65918l-1.33105 0.691406l-1.26074 0.666016l-1.26074 0.729492l-1.17773 0.665039l-1.18359 0.761719l-1.08203 0.704102
287
+ l-1.08789 0.774414l-1.01074 0.729492l-1.00488 0.799805l-0.93457 0.749023l-0.915039 0.825195l-0.844727 0.761719l-0.813477 0.826172l-0.760742 0.787109l-0.691406 0.864258l-0.671875 0.8125l-0.601562 0.851562l-0.576172 0.837891l-0.511719 0.864258
288
+ l-0.5 0.850586l-0.383789 0.896484l-0.37793 0.870117l-0.293945 0.915039l-0.268555 0.864258l-0.198242 1.02441l-0.147461 0.761719c-0.0830078 0.614258 -0.12207 1.20898 -0.12207 1.82324l0.435547 -50.0098c0 -0.614258 0.0449219 -1.20898 0.121094 -1.81738
289
+ l0.102539 -0.543945l0.25 -1.24805l0.210938 -0.665039l0.352539 -1.11426l0.300781 -0.697266l0.473633 -1.0498l0.40332 -0.722656l0.569336 -0.999023l0.518555 -0.729492l0.65918 -0.94043l0.607422 -0.736328l0.78125 -0.953125l0.697266 -0.729492l0.864258 -0.889648
290
+ l0.806641 -0.723633l0.947266 -0.857422l0.895508 -0.729492l1.03711 -0.813477l0.998047 -0.722656l1.10742 -0.787109l1.10742 -0.716797l1.16406 -0.729492l1.20312 -0.698242l1.22949 -0.709961l1.29297 -0.68457l1.30566 -0.671875l1.40137 -0.672852
291
+ l1.32422 -0.632812l1.51074 -0.666016l1.38281 -0.588867l0.459961 -0.198242l0.845703 -0.326172c0.722656 -0.294922 1.43359 -0.583008 2.17578 -0.851562l1.36328 -0.505859c0.780273 -0.274414 1.54883 -0.537109 2.3418 -0.8125l0.896484 -0.307617l0.28125 -0.101562
292
+ c1.89453 -0.601562 3.85254 -1.17773 5.86914 -1.73438l0.505859 -0.154297l0.402344 -0.0957031c1.70312 -0.454102 3.45605 -0.889648 5.23535 -1.30566l0.499023 -0.134766l0.716797 -0.140625c1.60645 -0.333008 3.21289 -0.68457 4.87109 -0.998047
293
+ l0.300781 -0.0644531l0.0761719 -0.0126953c1.66406 -0.319336 3.35352 -0.607422 5.05664 -0.870117l0.652344 -0.12207l0.793945 -0.101562c1.37598 -0.211914 2.76465 -0.416016 4.17871 -0.588867l0.826172 -0.12793l0.268555 -0.0136719
294
+ c1.67676 -0.210938 3.37891 -0.396484 5.10059 -0.5625l0.53125 -0.0576172l0.959961 -0.0771484c1.37012 -0.134766 2.75195 -0.223633 4.14746 -0.333008l1.00488 -0.0761719l0.499023 -0.0263672c1.82422 -0.114258 3.67383 -0.198242 5.53613 -0.261719
295
+ l0.396484 -0.0126953c1.17188 -0.0449219 2.34277 -0.0644531 3.51367 -0.0839844c1.16504 -0.03125 2.29785 -0.03125 3.44336 -0.03125h0.383789c2.20215 0.0126953 4.37109 0.0576172 6.53418 0.133789l0.672852 0.0126953l0.517578 0.0263672
296
+ c2.65625 0.0957031 5.26074 0.249023 7.80859 0.454102l0.543945 0.0449219l0.486328 0.0380859c2.20117 0.198242 4.35156 0.416016 6.46387 0.65918l1.08789 0.134766c2.10547 0.261719 4.19238 0.563477 6.2207 0.889648l0.40332 0.0703125l0.473633 0.0957031
297
+ c2.48926 0.416016 4.92188 0.876953 7.27734 1.38867l0.844727 0.179688c2.34863 0.511719 4.60742 1.08105 6.80273 1.70898l0.441406 0.101562l0.300781 0.102539c1.88867 0.538086 3.73828 1.11426 5.49121 1.72168l0.761719 0.243164
298
+ c1.7666 0.621094 3.46875 1.28027 5.09473 1.95215l0.390625 0.134766l0.416016 0.191406c0.716797 0.300781 1.42676 0.614258 2.11816 0.941406l0.953125 0.43457c0.871094 0.40332 1.73438 0.838867 2.56055 1.26758l0.261719 0.134766l0.0517578 0.0253906
299
+ c1.48438 0.787109 2.86719 1.625 4.16016 2.45117l0.217773 0.12793l0.0703125 0.0634766c1.05566 0.678711 2.02832 1.40234 2.95605 2.125l0.358398 0.25l0.25 0.210938c0.838867 0.666016 1.62598 1.35059 2.34863 2.04199l0.102539 0.0830078l0.223633 0.275391
300
+ c0.588867 0.556641 1.13965 1.14551 1.63867 1.75293l0.275391 0.307617l0.160156 0.217773c0.563477 0.677734 1.0752 1.37598 1.50391 2.08008l0.0253906 0.03125l0.0703125 0.102539c0.410156 0.65332 0.755859 1.34473 1.0752 2.0166l0.134766 0.275391
301
+ l0.115234 0.293945c0.275391 0.652344 0.537109 1.35059 0.691406 2.02832l0.0761719 0.179688v0.0576172c0.210938 0.774414 0.333008 1.57422 0.397461 2.36133zM342.624 121.312l0.0253906 1.05664l-0.441406 50.0029l-0.0703125 -1.29883
302
+ c-0.0771484 -0.787109 -0.210938 -1.57422 -0.396484 -2.3623l-0.0771484 -0.236328c-0.185547 -0.671875 -0.422852 -1.35059 -0.710938 -2.02246l-0.236328 -0.563477c-0.313477 -0.677734 -0.652344 -1.33691 -1.05566 -2.00293l-0.109375 -0.160156
303
+ c-0.43457 -0.68457 -0.972656 -1.40137 -1.49707 -2.07324l-0.441406 -0.518555c-0.525391 -0.601562 -1.06934 -1.20312 -1.66406 -1.79199l-0.307617 -0.313477c-0.723633 -0.697266 -1.5293 -1.4082 -2.38086 -2.07422l-0.543945 -0.40918
304
+ c-0.953125 -0.742188 -1.93945 -1.47852 -3.02734 -2.16992l-0.185547 -0.133789c-1.33789 -0.864258 -2.77734 -1.70898 -4.30078 -2.50879c-0.889648 -0.486328 -1.84961 -0.972656 -2.80273 -1.4209l-0.979492 -0.448242
305
+ c-0.671875 -0.293945 -1.33789 -0.614258 -2.03516 -0.915039l-0.876953 -0.352539c-1.62598 -0.677734 -3.32812 -1.31152 -5.0752 -1.91992l-0.709961 -0.243164c-1.79199 -0.614258 -3.63574 -1.19043 -5.54883 -1.72754l-0.698242 -0.192383
306
+ c-2.18848 -0.607422 -4.47363 -1.18359 -6.83496 -1.70898l-0.838867 -0.178711c-2.38672 -0.518555 -4.83105 -0.992188 -7.36621 -1.4209l-0.774414 -0.134766c-2.04785 -0.326172 -4.12109 -0.620117 -6.2207 -0.882812l-1.08789 -0.134766
307
+ c-2.125 -0.249023 -4.28809 -0.479492 -6.47656 -0.652344l-1.02441 -0.0898438c-2.56641 -0.198242 -5.16406 -0.345703 -7.80176 -0.448242l-1.20898 -0.0634766c-2.1377 -0.0644531 -4.33984 -0.12207 -6.52832 -0.12207c-1.2666 0 -2.54102 0 -3.81445 0.0263672
308
+ c-1.31836 0.0126953 -2.61719 0.0576172 -3.91016 0.0957031c-1.8623 0.0634766 -3.71875 0.15332 -5.54883 0.275391l-1.47852 0.0185547c-1.4209 0.102539 -2.82227 0.211914 -4.21777 0.339844l-1.43359 0.12793c-1.74023 0.160156 -3.44922 0.358398 -5.13867 0.549805
309
+ l-1.03711 0.134766c-1.44043 0.198242 -2.84766 0.396484 -4.25586 0.608398l-1.37598 0.204102c-1.72168 0.275391 -3.41797 0.550781 -5.08789 0.871094l-0.40332 0.0761719c-1.65137 0.327148 -3.27734 0.65332 -4.87695 1.02441l-1.1709 0.249023
310
+ c-1.79199 0.416016 -3.55273 0.851562 -5.28027 1.3125l-0.857422 0.230469c-2.02246 0.549805 -3.9873 1.13867 -5.8877 1.75391l-1.2041 0.40918c-0.780273 0.262695 -1.56152 0.524414 -2.31641 0.8125l-1.35645 0.480469
311
+ c-0.743164 0.288086 -1.47852 0.582031 -2.20215 0.870117l-1.26074 0.511719l-1.47168 0.62793l-1.4082 0.626953l-1.4209 0.671875l-1.33789 0.652344l-1.33105 0.698242l-1.26074 0.665039l-1.26074 0.730469l-1.17773 0.677734l-1.18359 0.742188l-1.08203 0.710938
312
+ l-1.08789 0.780273l-1.01074 0.710938l-1.00488 0.8125l-0.93457 0.736328l-0.915039 0.825195l-0.844727 0.761719l-0.813477 0.838867l-0.760742 0.787109l-0.691406 0.850586l-0.671875 0.813477l-0.601562 0.850586l-0.576172 0.844727l-0.511719 0.876953
313
+ l-0.5 0.857422l-0.383789 0.889648l-0.37793 0.864258l-0.293945 0.915039l-0.268555 0.864258l-0.198242 1.01074l-0.147461 0.774414c-0.0830078 0.601562 -0.12207 1.20996 -0.12207 1.81836l0.435547 -50.0039c0 -0.614258 0.0449219 -1.20312 0.121094 -1.81738
314
+ l0.102539 -0.556641l0.25 -1.23535l0.210938 -0.665039l0.352539 -1.11426l0.300781 -0.709961l0.473633 -1.04297l0.40332 -0.723633l0.569336 -0.992188l0.518555 -0.735352l0.65918 -0.947266l0.607422 -0.736328l0.787109 -0.927734l0.698242 -0.723633
315
+ l0.863281 -0.889648l0.806641 -0.736328l0.947266 -0.850586l0.896484 -0.723633l1.03613 -0.819336l0.999023 -0.729492l1.10645 -0.761719l1.10742 -0.722656l1.16504 -0.736328l1.20312 -0.697266l1.22852 -0.710938l1.29297 -0.68457l1.30566 -0.665039
316
+ l1.40137 -0.685547l1.3252 -0.639648l1.51074 -0.666016l1.38184 -0.587891l0.460938 -0.199219l0.844727 -0.338867c0.723633 -0.28125 1.43359 -0.569336 2.17578 -0.844727l1.36328 -0.493164c0.78125 -0.28125 1.54883 -0.549805 2.34277 -0.832031l0.895508 -0.300781
317
+ l0.282227 -0.0761719c1.89453 -0.621094 3.85254 -1.20312 5.86816 -1.76074l0.505859 -0.140625l0.396484 -0.0830078c1.70312 -0.460938 3.45605 -0.895508 5.23535 -1.29883l0.499023 -0.134766l0.716797 -0.134766c1.60645 -0.351562 3.21289 -0.69043 4.87109 -1.01074
318
+ l0.300781 -0.0644531l0.0761719 -0.0126953c1.66406 -0.319336 3.35352 -0.607422 5.05664 -0.870117l0.652344 -0.121094l0.793945 -0.109375c1.37598 -0.210938 2.76465 -0.40332 4.17871 -0.588867l0.826172 -0.121094l0.268555 -0.0263672
319
+ c1.67676 -0.204102 3.37891 -0.396484 5.10059 -0.549805l0.53125 -0.0703125l0.959961 -0.0644531c1.37012 -0.12793 2.75195 -0.236328 4.14746 -0.326172l1.00488 -0.0771484l0.499023 -0.03125c1.82422 -0.109375 3.67383 -0.192383 5.53613 -0.256836
320
+ l0.396484 -0.0253906c1.17188 -0.0380859 2.34277 -0.0634766 3.51367 -0.0898438c1.16504 -0.0126953 2.29785 -0.0126953 3.44336 -0.0126953h0.383789c2.20215 0 4.37109 0.0644531 6.53418 0.12793l0.672852 0.0136719l0.517578 0.0380859
321
+ c2.65625 0.0957031 5.26074 0.249023 7.80859 0.454102l0.543945 0.0322266l0.486328 0.0507812c2.20117 0.192383 4.35156 0.40332 6.46387 0.65332l1.08789 0.133789c2.10547 0.269531 4.19238 0.557617 6.2207 0.90332l0.40332 0.0507812l0.473633 0.0898438
322
+ c2.48926 0.428711 4.92188 0.889648 7.27734 1.40137l0.844727 0.178711c2.34863 0.518555 4.60742 1.08203 6.80273 1.69629l0.448242 0.0957031l0.300781 0.12207c1.8877 0.524414 3.7373 1.10059 5.49121 1.70898l0.761719 0.249023
323
+ c1.7666 0.62793 3.46875 1.26758 5.09375 1.95215l0.390625 0.134766l0.40332 0.191406c0.716797 0.288086 1.43359 0.595703 2.11816 0.93457l0.959961 0.422852c0.864258 0.40918 1.72852 0.837891 2.56055 1.28027l0.261719 0.133789l0.0517578 0.0253906
324
+ c1.47852 0.787109 2.86035 1.61328 4.15332 2.45117l0.217773 0.12207l0.0771484 0.0703125c1.05566 0.671875 2.02832 1.38867 2.95605 2.1123l0.358398 0.243164l0.25 0.223633c0.838867 0.666016 1.62598 1.34375 2.34863 2.04199l0.102539 0.0888672l0.223633 0.256836
325
+ c0.588867 0.5625 1.13965 1.16406 1.63867 1.76562l0.275391 0.300781l0.160156 0.224609c0.563477 0.677734 1.0752 1.37598 1.50391 2.08594l0.0253906 0.0126953l0.0703125 0.12207c0.410156 0.652344 0.755859 1.33789 1.0752 2.01562l0.134766 0.262695
326
+ l0.115234 0.300781c0.275391 0.65918 0.537109 1.33789 0.691406 2.02246l0.0761719 0.192383v0.0439453c0.210938 0.78125 0.333008 1.5752 0.397461 2.3623zM342.624 192.947l0.0253906 0.998047l-0.43457 50.0166l-0.0771484 -1.2998
327
+ c-0.0576172 -0.607422 -0.172852 -1.21582 -0.300781 -1.81738c-3.66113 18.0225 -40.5762 32.7168 -85.5742 33.4082c-44.96 0.691406 -81.7344 -12.8262 -85.3701 -30.7012l-0.0898438 0.448242l-0.146484 0.774414
328
+ c-0.0830078 0.608398 -0.12207 1.21582 -0.12207 1.82422l0.0517578 -5.60059c-0.00683594 -0.133789 -0.0517578 -0.268555 -0.0517578 -0.40332c0 -0.15332 0.0517578 -0.293945 0.0576172 -0.441406l0.37793 -43.5645c0 -0.614258 0.0449219 -1.22266 0.121094 -1.81738
329
+ l0.102539 -0.550781l0.25 -1.24805l0.210938 -0.652344l0.352539 -1.12012l0.300781 -0.698242l0.473633 -1.04297l0.402344 -0.729492l0.570312 -0.998047l0.518555 -0.736328l0.65918 -0.93457l0.607422 -0.742188l0.787109 -0.93457l0.698242 -0.722656
330
+ l0.863281 -0.889648l0.806641 -0.736328l0.947266 -0.851562l0.896484 -0.722656l1.03613 -0.826172l0.999023 -0.716797l1.10645 -0.774414l1.10742 -0.716797l1.16504 -0.735352l1.20312 -0.704102l1.22852 -0.704102l1.29297 -0.68457l1.30566 -0.666016
331
+ l1.40137 -0.677734l1.3252 -0.62793l1.50977 -0.671875l1.38281 -0.588867l0.460938 -0.191406l0.844727 -0.345703c0.723633 -0.275391 1.43359 -0.563477 2.17578 -0.838867l1.36328 -0.499023c0.78125 -0.275391 1.54883 -0.550781 2.34277 -0.8125l0.895508 -0.313477
332
+ l0.282227 -0.0839844c1.89355 -0.614258 3.85254 -1.19043 5.86816 -1.74023l0.505859 -0.154297l0.40332 -0.0957031c1.70215 -0.473633 3.45605 -0.908203 5.23535 -1.31152l0.499023 -0.12207l0.716797 -0.140625c1.60645 -0.345703 3.21289 -0.68457 4.87012 -1.00488
333
+ l0.300781 -0.0703125l0.0771484 -0.0126953c1.66406 -0.313477 3.35352 -0.601562 5.05566 -0.864258l0.65332 -0.121094l0.792969 -0.12207c1.37598 -0.198242 2.76465 -0.396484 4.17969 -0.576172l0.825195 -0.115234l0.268555 -0.0380859
334
+ c1.67773 -0.198242 3.37988 -0.37793 5.10156 -0.537109l0.53125 -0.0644531l0.959961 -0.0830078c1.36914 -0.12207 2.75195 -0.217773 4.14648 -0.326172l1.00488 -0.0712891l0.499023 -0.0253906c1.82422 -0.12793 3.67383 -0.198242 5.53613 -0.261719
335
+ l0.397461 -0.0263672c1.1709 -0.0380859 2.3418 -0.0761719 3.51367 -0.0830078c1.16406 -0.0195312 2.29688 -0.0253906 3.44238 -0.0253906l0.384766 0.00585938c2.20117 0.00683594 4.37109 0.0517578 6.53418 0.128906h0.671875l0.518555 0.0380859
336
+ c2.65625 0.0957031 5.26074 0.262695 7.80762 0.460938l0.543945 0.0253906l0.486328 0.0507812c2.20215 0.199219 4.35254 0.410156 6.46484 0.671875l1.08789 0.128906c2.10547 0.261719 4.19141 0.5625 6.2207 0.889648l0.40918 0.0380859l0.473633 0.102539
337
+ c2.48926 0.421875 4.92188 0.895508 7.27734 1.40723l0.844727 0.154297c2.34863 0.524414 4.60742 1.10059 6.80273 1.71484l0.441406 0.115234l0.300781 0.102539c1.88867 0.537109 3.73828 1.11328 5.49121 1.71484l0.761719 0.25
338
+ c1.7666 0.626953 3.46875 1.27344 5.09473 1.93945l0.390625 0.133789l0.40918 0.192383c0.716797 0.293945 1.43359 0.607422 2.11816 0.93457l0.959961 0.421875c0.864258 0.422852 1.72852 0.851562 2.56055 1.28711l0.261719 0.12793l0.0517578 0.0380859
339
+ c1.47852 0.787109 2.86035 1.59961 4.15332 2.45117l0.217773 0.115234l0.0771484 0.0576172c1.05566 0.678711 2.02832 1.40137 2.95605 2.125l0.358398 0.249023l0.25 0.217773c0.838867 0.65918 1.62598 1.35059 2.34863 2.03516l0.102539 0.0898438l0.223633 0.249023
340
+ c0.588867 0.583008 1.13965 1.17188 1.63867 1.78613l0.275391 0.288086l0.160156 0.223633c0.563477 0.68457 1.0752 1.38867 1.50391 2.08691l0.0253906 0.0253906l0.0703125 0.102539c0.410156 0.671875 0.755859 1.35059 1.0752 2.02246l0.134766 0.275391
341
+ l0.115234 0.300781c0.275391 0.65918 0.537109 1.33105 0.691406 2.02148l0.0761719 0.186523v0.0439453c0.210938 0.78125 0.333008 1.5752 0.397461 2.375z" />
342
+ <glyph glyph-name="uniF120" unicode="&#xf120;"
343
+ d="M373.56 379.779l73.6641 -73.6553v-242.989c0.945312 -11.4707 -8.60645 -21.041 -20.0859 -21.041h-341.385c-11.4609 0 -21.0312 9.54297 -21.0312 21.041v242.989l73.665 73.6553h235.173zM306.702 160.703h77.3633l-127.062 102.367l-128.188 -102.367h77.4912
344
+ v-67.9395h100.396v67.9395zM118.291 310.896h277.263l-31.5557 32.5283h-213.188z" />
345
+ <glyph glyph-name="uniF121" unicode="&#xf121;"
346
+ d="M170.238 102.4l85.7617 68.4805l85.1191 -68.4805h-51.8389v-45.4375h-67.1992v45.4375h-51.8428zM371.2 345.6h76.7998v-384h-384v384h76.7998v76.8008h76.7998v-76.8008h76.8008v76.8008h76.7998v-76.8008zM383.357 37.1221v162.558l-49.2754 49.2793h-157.442
347
+ l-49.2783 -49.2793v-162.558c0 -7.68066 6.39746 -14.0781 14.0781 -14.0781h228.479c7.67676 0 14.082 6.39746 13.4395 14.0781zM184.959 224.641h142.721l21.123 -21.7617h-185.602z" />
348
+ <glyph glyph-name="uniF113" unicode="&#xf113;"
349
+ d="M318.489 170.215v16.1211l30.0742 -30.0859l-30.0742 -30.0742v16.1094h-120.902v-16.1094l-30.0732 30.0742l30.0732 30.0859v-16.1211h120.902zM371.2 345.6h76.7998v-384h-384v384h76.7998v76.8008h76.7998v-76.8008h76.8008v76.8008h76.7998v-76.8008z
350
+ M388.448 76.8252v0v157.606c0 11.2256 -9.08789 20.3135 -20.3008 20.3135h-225.376c-11.2197 0 -20.3076 -9.09375 -20.3076 -20.3135v-157.606c0 -11.2256 9.08789 -20.3193 20.3076 -20.3193h97.3633c-1.27441 -7.69922 -7.61035 -28.666 -39.002 -28.666v-10.0479
351
+ h50.4316h10.7461h50.4258v10.0479c-31.3984 0 -37.7471 20.9727 -39.002 28.666h94.4004c11.2256 0 20.3135 9.09375 20.3135 20.3193z" />
352
+ <glyph glyph-name="uniF11B" unicode="&#xf11b;"
353
+ d="M404.666 185.6c4.95996 0 7.57715 -1.06836 7.8457 -2.82227c0 -0.524414 -0.93457 -2.98828 -2.79688 -7.0459l-56.0508 -111.731h-226.374l57.3184 112.378c1.94531 3.87207 3.83984 5.97754 5.69531 7.07812c1.8623 1.08789 5.22949 2.14355 10.1318 2.14355h204.23z
354
+ M175.584 203.872c-2.18848 -1.24805 -6.8418 -5.22852 -10.8027 -12.9092l-55.9814 -105.549v133.626c0 3.96191 2.21484 7.41113 3.52637 8.64648c1.31836 1.22266 5.55566 2.71387 9.60645 2.71387h7.85254c5.65137 0 9.29297 -0.179688 10.9385 0.920898
355
+ c1.65039 1.08203 3.1543 3.33496 4.49902 8.12793l1.52246 6.11914c1.01172 3.63477 2.43262 6.61719 4.29492 7.70508c1.8623 1.00488 5.49121 2.72656 10.8799 2.72656h46.8291c4.7998 0 7.89746 -1.59375 9.29297 -2.55371
356
+ c1.39453 -0.972656 2.64258 -4.63379 3.7373 -8.76172l1.5166 -5.59375c1.17773 -4.81836 2.70117 -7.25098 4.55664 -8.17285c1.85645 -0.94043 6.74609 -0.517578 14.6758 -0.517578h87.9355c6.33594 0 8.73633 -4.98633 8.73633 -11.4824v-14.1182h-146.534
357
+ c-9.19043 0 -14.8809 0.352539 -17.082 -0.927734z" />
358
+ </font>
359
+ </defs></svg>
embedded/toolset/onthego-resources/onthegosystems-icons/fonts/onthegosystems-icons_65c5f624e7b3a7731aeb86b34dab9f65.ttf ADDED
Binary file
embedded/toolset/onthego-resources/onthegosystems-icons/fonts/onthegosystems-icons_65c5f624e7b3a7731aeb86b34dab9f65.woff ADDED
Binary file
embedded/toolset/onthego-resources/onthegosystems-icons/fonts/onthegosystems-icons_8d9a6c3bf95bd4630d40a722f192ec47.eot ADDED
Binary file
embedded/toolset/onthego-resources/onthegosystems-icons/fonts/onthegosystems-icons_8d9a6c3bf95bd4630d40a722f192ec47.svg ADDED
@@ -0,0 +1,329 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" standalone="no"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
3
+ <!--
4
+ 2014-8-25: Created.
5
+ -->
6
+ <svg xmlns="http://www.w3.org/2000/svg">
7
+ <metadata>
8
+ Created by FontForge 20120731 at Mon Aug 25 11:41:10 2014
9
+ By Riccardo Strobbia
10
+ Created by Riccardo Strobbia with FontForge 2.0 (http://fontforge.sf.net)
11
+ </metadata>
12
+ <defs>
13
+ <font id="onthegosystems-icons" horiz-adv-x="512" >
14
+ <font-face
15
+ font-family="onthegosystems-icons"
16
+ font-weight="500"
17
+ font-stretch="normal"
18
+ units-per-em="512"
19
+ panose-1="2 0 6 9 0 0 0 0 0 0"
20
+ ascent="448"
21
+ descent="-64"
22
+ bbox="61.4404 -38.4004 460.8 422.4"
23
+ underline-thickness="25.6"
24
+ underline-position="-51.2"
25
+ unicode-range="U+F110-F11E"
26
+ />
27
+ <missing-glyph />
28
+ <glyph glyph-name="uniF119" unicode="&#xf119;"
29
+ d="M371.2 345.6h76.7998v-384h-384v384h76.7998v76.8008h76.7998v-76.8008h76.8008v76.8008h76.7998v-76.8008zM243.782 3.33398v122.164l-117.459 69.5742v-123.917zM384.007 71.1553v121.439l-116.979 -70.0088v-118.977zM384.007 219.667v0.268555l-128.846 74.3877
30
+ l-127.008 -73.3311l129.689 -76.8193z" />
31
+ <glyph glyph-name="uniF11D" unicode="&#xf11d;"
32
+ d="M119.507 152.666c0 0 123.872 168.55 276.192 0c0 0 -123.872 -172.615 -276.192 0zM257.594 99.7119c28.7549 0 52.0576 23.3154 52.0576 52.0381c0 28.749 -23.2959 52.0576 -52.0576 52.0576c-28.7295 0 -52.0322 -23.3086 -52.0322 -52.0576
33
+ c0 -28.7227 23.3027 -52.0381 52.0322 -52.0381zM257.594 117.453c-18.9316 0 -34.2979 15.3594 -34.2979 34.2969c0 18.957 15.3662 34.3105 34.2979 34.3105c18.957 0 34.3164 -15.3535 34.3164 -34.3105c0 -18.9375 -15.3594 -34.2969 -34.3164 -34.2969z
34
+ M257.594 186.061c18.957 0 34.3164 -15.3535 34.3164 -34.3105c0 -18.9375 -15.3594 -34.2969 -34.3164 -34.2969c-18.9316 0 -34.2979 15.3594 -34.2979 34.2969c0 18.957 15.3662 34.3105 34.2979 34.3105z" />
35
+ <glyph glyph-name="uniF113" unicode="&#xf113;"
36
+ d="M318.489 170.215v16.1211l30.0742 -30.0859l-30.0742 -30.0742v16.1094h-120.902v-16.1094l-30.0732 30.0742l30.0732 30.0859v-16.1211h120.902zM371.2 345.6h76.7998v-384h-384v384h76.7998v76.8008h76.7998v-76.8008h76.8008v76.8008h76.7998v-76.8008z
37
+ M388.448 76.8252v0v157.606c0 11.2256 -9.08789 20.3135 -20.3008 20.3135h-225.376c-11.2197 0 -20.3076 -9.09375 -20.3076 -20.3135v-157.606c0 -11.2256 9.08789 -20.3193 20.3076 -20.3193h97.3633c-1.27441 -7.69922 -7.61035 -28.666 -39.002 -28.666v-10.0479
38
+ h50.4316h10.7461h50.4258v10.0479c-31.3984 0 -37.7471 20.9727 -39.002 28.666h94.4004c11.2256 0 20.3135 9.09375 20.3135 20.3193z" />
39
+ <glyph glyph-name="uniF112" unicode="&#xf112;"
40
+ d="M368.135 254.745c11.2256 0 20.3135 -9.09375 20.3135 -20.3135v-157.606c0 -11.2256 -9.08789 -20.3193 -20.3008 -20.3193h-94.4131c1.27344 -7.69922 7.61621 -28.666 39.0078 -28.666v-10.0479h-50.4316h-10.7393h-50.4316v10.0479
41
+ c31.3984 0 37.7275 20.9727 39.001 28.666h-97.3691c-11.2197 0 -20.3076 9.09375 -20.3076 20.3193v157.606c0 11.2256 9.08789 20.3135 20.3076 20.3135h225.363zM318.489 126.176l30.0742 30.0742l-30.0742 30.0859v-16.1279h-120.902v16.1279l-30.0732 -30.0859
42
+ l30.0732 -30.0742v16.1152h120.902v-16.1152z" />
43
+ <glyph glyph-name="uniF111" unicode="&#xf111;"
44
+ d="M258.637 256.013c18.6494 0 33.8242 -15.1738 33.8242 -33.8242v-22.5342h-67.6484v22.5342c0 18.6504 15.1748 33.8242 33.8242 33.8242zM371.2 345.6h76.7998v-384h-384v384h76.7998v76.8008h76.7998v-76.8008h76.8008v76.8008h76.7998v-76.8008zM344.313 43.6348
45
+ v138.451c0 9.70312 -7.85938 17.5752 -17.5742 17.5752h-7.21289v22.5342c0 33.5684 -27.3154 60.877 -60.8896 60.877c-33.5615 0 -60.877 -27.3086 -60.877 -60.877v-22.5342h-9.47168c-9.69629 0 -17.5615 -7.87207 -17.5615 -17.5752v-138.451
46
+ c0 -9.70215 7.85938 -17.5742 17.5615 -17.5742h138.451c9.70898 0 17.5742 7.87207 17.5742 17.5742z" />
47
+ <glyph glyph-name="uniF118" unicode="&#xf118;"
48
+ d="M384.007 219.667l-126.164 -75.4941l-129.689 76.8193l127.008 73.3311l128.846 -74.3877v-0.268555zM384.007 192.595v-121.439l-116.979 -67.5459v118.977zM126.323 195.072l117.459 -69.5742v-122.164l-117.459 67.8213v123.917z" />
49
+ <glyph glyph-name="uniF117" unicode="&#xf117;"
50
+ d="M371.2 345.6h76.7998v-384h-384v384h76.7998v76.8008h76.7998v-76.8008h76.8008v76.8008h76.7998v-76.8008zM183.577 12.877v174.188h-70.3359v-174.188h70.3359zM396.8 12.877v174.188h-195.501v-174.188h195.501zM396.8 205.178v74.6494h-283.559v-74.6494h283.559z
51
+ " />
52
+ <glyph glyph-name="uniF110" unicode="&#xf110;"
53
+ d="M344.313 43.6348c0 -9.70215 -7.86523 -17.5742 -17.5742 -17.5742h-138.451c-9.70215 0 -17.5615 7.87207 -17.5615 17.5742v138.451c0 9.70312 7.86523 17.5752 17.5615 17.5752h138.451c9.71484 0 17.5742 -7.87207 17.5742 -17.5752v-138.451zM319.526 155.699
54
+ h-27.0654v66.4893c0 18.6504 -15.1748 33.8242 -33.8242 33.8242s-33.8242 -15.1738 -33.8242 -33.8242v-57.4717h-27.0527v57.4717c0 33.5684 27.3154 60.877 60.877 60.877c33.5742 0 60.8896 -27.3086 60.8896 -60.877v-66.4893z" />
55
+ <glyph glyph-name="uniF116" unicode="&#xf116;"
56
+ d="M113.241 205.178v74.6494h283.559v-74.6494h-283.559zM201.299 12.877v174.188h195.501v-174.188h-195.501zM113.241 12.877v174.188h70.3359v-174.188h-70.3359z" />
57
+ <glyph glyph-name="uniF11C" unicode="&#xf11c;"
58
+ d="M371.2 345.6h76.7998v-384h-384v384h76.7998v76.8008h76.7998v-76.8008h76.8008v76.8008h76.7998v-76.8008zM108.8 219.04v-133.626l55.9746 105.543c3.96777 7.68652 8.62109 11.667 10.8027 12.915c2.20215 1.28027 7.8916 0.927734 17.0889 0.927734h146.534v14.1182
59
+ c0 6.49609 -2.40039 11.4824 -8.73633 11.4824h-87.9355c-7.92969 0 -12.8262 -0.269531 -14.6816 0.665039c-1.85645 0.921875 -3.37988 3.07227 -4.55664 7.8916l-1.51758 6.11133c-1.09375 4.12891 -2.3418 7.29688 -3.7373 8.2627
60
+ c-1.39551 0.966797 -4.49316 2.66895 -9.29297 2.66895h-46.8281c-5.38965 0 -9.01758 -1.60645 -10.8672 -2.61719c-1.86328 -1.08887 -3.2832 -4.57031 -4.29492 -8.19922l-1.52344 -5.59961c-1.35059 -4.79395 -2.84766 -7.32812 -4.49902 -8.40918
61
+ c-1.64453 -1.10742 -5.29297 -0.774414 -10.9375 -0.774414h-7.85254c-4.05762 0 -8.29492 -1.49121 -9.60645 -2.70801c-1.31836 -1.24121 -3.5332 -4.69043 -3.5332 -8.65234zM409.715 175.731c1.8623 4.05762 2.78418 6.52148 2.79688 7.0459
62
+ c-0.255859 1.75391 -2.88574 2.82227 -7.8457 2.82227h-204.23c-4.90234 0 -8.26953 -0.742188 -10.125 -1.83008c-1.85645 -1.10059 -3.75684 -3.76953 -5.69629 -7.6416l-57.3242 -112.128h226.374z" />
63
+ <glyph glyph-name="uniF11A" unicode="&#xf11a;"
64
+ d="M399.36 330.24h61.4395v-368.641h-399.359v368.641h61.4395v92.1602h92.1602v-92.1602h92.1602v92.1602h92.1602v-92.1602zM116.173 121.979c0 2.90332 -0.839844 5.0791 -2.51953 6.54395c-1.68359 1.45898 -4.1875 2.19141 -7.50586 2.19141h-7.26465
65
+ l-6.72266 -31.8008h5.16113l2.49805 11.8887h2.3916c4.39258 0 7.81738 0.962891 10.2754 2.89258c2.45801 1.93066 3.68652 4.69043 3.68652 8.28418zM100.751 115.175l2.38672 11.1865h2.58984c1.75684 0 3.05176 -0.368164 3.90234 -1.0957
66
+ c0.849609 -0.726562 1.27441 -1.87402 1.27441 -3.45605c0 -2.11914 -0.706055 -3.74707 -2.12012 -4.9043c-1.40723 -1.15723 -3.40918 -1.73047 -5.99023 -1.73047h-2.04297zM121.841 98.8975l7.19824 33.8486h-5.10938l-7.17871 -33.8486h5.08984zM138.537 122.962
67
+ v-0.00488281h-5.14062l-2.67285 -12.6982c-0.173828 -0.895508 -0.347656 -1.78613 -0.522461 -2.6875c-0.173828 -0.885742 -0.260742 -1.78223 -0.260742 -2.69824c0 -2.06836 0.527344 -3.64062 1.58691 -4.74121c1.05469 -1.11133 2.55566 -1.65918 4.50098 -1.65918
68
+ c1.49023 0 2.88281 0.384766 4.17285 1.18262c1.29004 0.798828 2.53418 2.02832 3.72168 3.71777h0.174805l-0.456055 -4.45996h4.02441l5.06836 24.0488h-5.06836l-2.15039 -10.1992c-0.435547 -2.06348 -1.0498 -3.86035 -1.84863 -5.38086
69
+ c-0.798828 -1.52539 -1.70996 -2.70898 -2.73926 -3.53809c-1.0293 -0.819336 -2.06348 -1.2334 -3.10742 -1.2334c-1.84375 0 -2.76465 0.961914 -2.76465 2.89258c0 0.74707 0.224609 2.15039 0.675781 4.19336zM178.217 122.962h-8.33008
70
+ c-1.16211 0.291992 -2.31934 0.44043 -3.48145 0.44043c-2.91309 0 -5.25879 -0.870117 -7.03516 -2.61621c-1.78125 -1.74121 -2.66699 -4.02441 -2.66699 -6.87598c0 -2.46777 0.977539 -4.30664 2.93359 -5.47852
71
+ c-1.44922 -0.681641 -2.51367 -1.37793 -3.18457 -2.12012c-0.675781 -0.732422 -1.01367 -1.60254 -1.01367 -2.60059c0 -1.17773 0.552734 -2.10938 1.65332 -2.75977c-2.23242 -0.748047 -3.85059 -1.66895 -4.8584 -2.76465
72
+ c-1.00391 -1.08594 -1.51074 -2.37598 -1.51074 -3.87109c0 -1.89941 0.814453 -3.38965 2.42676 -4.47949c1.61816 -1.08594 3.89648 -1.62305 6.84082 -1.62305c4.03418 0 7.1416 0.767578 9.33301 2.31934c2.19141 1.56152 3.28223 3.74707 3.28223 6.58887
73
+ c0 1.77148 -0.552734 3.13379 -1.65332 4.08105c-1.10156 0.947266 -2.92383 1.58691 -5.47852 1.90918l-2.76562 0.337891c-0.870117 0.123047 -1.53516 0.277344 -1.99121 0.481445c-0.460938 0.200195 -0.686523 0.588867 -0.686523 1.13184
74
+ c0 0.926758 0.80957 1.67969 2.41699 2.25781c0.583984 -0.107422 1.24902 -0.168945 2.00195 -0.168945c2.89844 0 5.21191 0.814453 6.9375 2.46289s2.59082 3.87012 2.59082 6.6709c0 1.14746 -0.205078 2.13574 -0.609375 2.98047l4.17285 0.716797zM160.404 99.3027
75
+ l2.98047 -0.307617c1.6377 -0.168945 2.78516 -0.470703 3.43555 -0.890625c0.649414 -0.419922 0.977539 -0.999023 0.977539 -1.74121c0 -1.46387 -0.666016 -2.59082 -2.00195 -3.36914c-1.33105 -0.788086 -3.18457 -1.17188 -5.54492 -1.17188
76
+ c-1.6543 0 -2.88281 0.28125 -3.68652 0.829102c-0.803711 0.558594 -1.20801 1.30566 -1.20801 2.25293c0 1.13184 0.43457 2.08887 1.30566 2.84668c0.870117 0.77832 2.11914 1.28516 3.74219 1.55176zM166.277 119.982c1.92969 0 2.89258 -1.03418 2.89258 -3.08301
77
+ c0 -1.17676 -0.194336 -2.25781 -0.578125 -3.24609c-0.384766 -0.977539 -0.921875 -1.76074 -1.6084 -2.31934c-0.691406 -0.5625 -1.50488 -0.849609 -2.44727 -0.849609c-0.957031 0 -1.68945 0.276367 -2.20605 0.839844
78
+ c-0.517578 0.563477 -0.773438 1.35156 -0.773438 2.38086c0 1.13672 0.194336 2.20117 0.588867 3.16406c0.388672 0.962891 0.941406 1.72559 1.65332 2.2832c0.707031 0.547852 1.53613 0.830078 2.47852 0.830078zM182.277 98.8975l5.11426 24.0596h-5.11426
79
+ l-5.13086 -24.0596h5.13086zM183.296 128.876c0 -0.804688 0.255859 -1.4082 0.762695 -1.78711c0.506836 -0.374023 1.14746 -0.563477 1.91504 -0.563477c0.942383 0 1.70508 0.291992 2.2832 0.896484c0.579102 0.603516 0.871094 1.41309 0.871094 2.44141
80
+ c0 0.789062 -0.241211 1.36719 -0.722656 1.75098c-0.475586 0.378906 -1.10059 0.568359 -1.86816 0.568359c-1.0293 0 -1.82324 -0.301758 -2.3916 -0.911133s-0.849609 -1.41309 -0.849609 -2.39551zM203.188 98.8975v0.015625h5.14062l2.97949 14.208
81
+ c0.333008 1.62305 0.501953 2.93945 0.501953 3.93262c0 2.03223 -0.538086 3.59863 -1.60254 4.7002c-1.06543 1.10547 -2.57031 1.64844 -4.51074 1.64844c-1.49512 0 -2.87793 -0.394531 -4.1582 -1.16699c-1.27441 -0.773438 -2.51855 -2.0127 -3.72168 -3.7334
82
+ h-0.194336l0.455078 4.45996h-4.00391l-5.12988 -24.0488h5.12988l2.13574 10.1992c0.404297 1.97168 1.01367 3.73242 1.82227 5.28906c0.814453 1.55664 1.73047 2.75488 2.74414 3.5791s2.04297 1.23828 3.08789 1.23828c1.86816 0 2.80566 -0.952148 2.80566 -2.85156
83
+ c0 -0.603516 -0.12793 -1.55078 -0.389648 -2.85645zM230.753 106.302c0 0.936523 -0.163086 1.76562 -0.491211 2.46777c-0.333008 0.72168 -0.819336 1.38184 -1.45898 1.99121c-0.640625 0.609375 -1.7207 1.3418 -3.24121 2.20215
84
+ c-1.47949 0.798828 -2.45801 1.44824 -2.93359 1.96094c-0.481445 0.506836 -0.72168 1.08496 -0.72168 1.74023c0 0.855469 0.332031 1.52051 0.988281 2.00195c0.655273 0.481445 1.51465 0.72168 2.5752 0.72168c1.82715 0 3.75781 -0.547852 5.78516 -1.64844
85
+ l1.6543 3.83008c-2.17676 1.20801 -4.68555 1.81738 -7.52637 1.81738c-2.64258 0 -4.73633 -0.639648 -6.28809 -1.90918c-1.55078 -1.28027 -2.3291 -3.04199 -2.3291 -5.28906c0 -1.36719 0.374023 -2.57031 1.12109 -3.56934
86
+ c0.74707 -1.00781 2.02734 -2.00195 3.83984 -2.96875c1.55176 -0.886719 2.58105 -1.58789 3.07715 -2.12012c0.49707 -0.527344 0.748047 -1.15723 0.748047 -1.9043c0 -0.994141 -0.435547 -1.79785 -1.30566 -2.37109
87
+ c-0.871094 -0.573242 -2.00781 -0.870117 -3.41504 -0.870117c-2.30469 0 -4.56738 0.650391 -6.78418 1.95605v-4.4082c1.91504 -0.967773 4.24902 -1.45996 7.00391 -1.45996c3.04688 0 5.42773 0.675781 7.1377 2.0332c1.70996 1.35645 2.56445 3.28711 2.56445 5.7959z
88
+ M242.826 88.2129c2.12988 0 3.86035 0.639648 5.16602 1.90918c1.32129 1.29004 2.27344 3.3125 2.85156 6.05176l4.84863 22.9072h4.98242l0.803711 3.87598h-4.97656l0.394531 1.86328c0.317383 1.42871 0.777344 2.44727 1.38184 3.07715
89
+ c0.598633 0.620117 1.40332 0.9375 2.40137 0.9375c0.901367 0 1.88379 -0.205078 2.95898 -0.609375l1.32617 3.82422c-1.39746 0.625 -2.92871 0.942383 -4.58691 0.942383c-2.40625 0 -4.27051 -0.609375 -5.58105 -1.8125
90
+ c-1.31055 -1.20801 -2.2832 -3.24121 -2.92383 -6.11816l-0.455078 -2.00781l-4.21973 -1.64844l-0.455078 -2.29883h3.89062l-4.71973 -22.2363c-0.625 -2.96973 -1.90527 -4.45898 -3.85059 -4.45898c-0.727539 0 -1.55176 0.143555 -2.47852 0.43457v-4.13184
91
+ c0.855469 -0.342773 1.93555 -0.500977 3.24121 -0.500977zM282.772 113.956c0 2.89258 -0.798828 5.19141 -2.38086 6.87598c-1.60254 1.67969 -3.80957 2.51855 -6.64062 2.51855c-2.45215 0 -4.61328 -0.669922 -6.48145 -2.01172
92
+ c-1.88477 -1.3418 -3.33398 -3.2207 -4.37305 -5.62207c-1.0293 -2.41602 -1.55078 -5.06348 -1.55078 -7.94629c0 -2.85156 0.818359 -5.11426 2.45215 -6.77344c1.63867 -1.65918 3.85059 -2.4834 6.64062 -2.4834c2.40625 0 4.53613 0.640625 6.37988 1.92578
93
+ c1.85254 1.2793 3.30664 3.11719 4.36719 5.51855c1.05469 2.40723 1.58691 5.07422 1.58691 7.99805zM277.622 114.176c0 -2.13477 -0.296875 -4.08594 -0.871094 -5.8623c-0.588867 -1.77148 -1.39746 -3.15918 -2.43652 -4.1416
94
+ c-1.0498 -0.988281 -2.22266 -1.48047 -3.52246 -1.48047c-1.4082 0 -2.46289 0.430664 -3.19043 1.29102c-0.72168 0.849609 -1.06934 2.08887 -1.06934 3.69141c0 2.01172 0.291016 3.90625 0.879883 5.68848c0.579102 1.76562 1.4082 3.17871 2.47363 4.21289
95
+ c1.06445 1.04004 2.2627 1.55664 3.61914 1.55664c1.32129 0 2.33496 -0.429688 3.04688 -1.31055s1.07031 -2.08887 1.07031 -3.64551zM301.731 123.402c-1.35645 0 -2.63086 -0.394531 -3.84473 -1.14746c-1.19336 -0.762695 -2.40625 -2.01172 -3.60938 -3.75293
96
+ h-0.189453l0.450195 4.45996h-3.99316l-5.13574 -24.0488h5.13574l2.30371 10.8701c0.557617 2.66211 1.56641 4.80762 3 6.44629c1.43945 1.63281 3.07227 2.45215 4.88965 2.45215c0.702148 0 1.44434 -0.107422 2.22754 -0.3125l1.11621 4.7666
97
+ c-0.675781 0.174805 -1.44922 0.266602 -2.35059 0.266602zM119.286 43.2178l14.249 31.8008h-5.35059l-7.78809 -18.4014c-0.276367 -0.620117 -0.716797 -1.71582 -1.32617 -3.3125c-0.608398 -1.58789 -1.11621 -3.02637 -1.52051 -4.2959h-0.173828l0.0664062 4.09082
98
+ l-0.0664062 3.67578l-0.670898 18.2432h-4.89453l-8.41699 -18.2891c-0.855469 -1.94043 -1.88477 -4.52051 -3.08789 -7.7207h-0.12793c0.18457 3.0459 0.282227 5.5498 0.282227 7.52637l-0.415039 18.4834h-4.98145l1.15137 -31.8008h5.56543l8.37695 18.3193
99
+ c1.01367 2.12988 1.86328 4.23926 2.54395 6.32324h0.12793l-0.0869141 -2.30371l0.12793 -4.01953l0.803711 -18.3193h5.6123zM152.551 58.2754c0 2.89355 -0.798828 5.19727 -2.3916 6.87695c-1.5918 1.67871 -3.80371 2.51855 -6.62988 2.51855
100
+ c-2.44727 0 -4.6084 -0.670898 -6.48242 -2.01172c-1.87402 -1.3418 -3.32812 -3.2207 -4.3623 -5.62207c-1.03906 -2.41699 -1.55664 -5.06348 -1.55664 -7.94629c0 -2.85156 0.819336 -5.11523 2.45801 -6.77344c1.63281 -1.65918 3.85059 -2.4834 6.63086 -2.4834
101
+ c2.40625 0 4.53613 0.639648 6.38379 1.9248c1.84863 1.28027 3.30273 3.11816 4.3623 5.51953c1.06055 2.40625 1.58789 5.07422 1.58789 7.99707zM147.395 58.4961c0 -2.13477 -0.291992 -4.08594 -0.865234 -5.8623
102
+ c-0.583984 -1.77148 -1.39258 -3.15918 -2.4375 -4.14258c-1.04395 -0.988281 -2.2168 -1.47949 -3.52246 -1.47949c-1.4082 0 -2.47266 0.430664 -3.18945 1.29004c-0.716797 0.850586 -1.0752 2.08887 -1.0752 3.69141c0 2.0127 0.291992 3.90723 0.880859 5.68848
103
+ c0.583008 1.7666 1.41309 3.17969 2.47754 4.21387c1.06543 1.03906 2.27344 1.55664 3.62012 1.55664c1.32129 0 2.33496 -0.429688 3.04688 -1.31055c0.710938 -0.880859 1.06445 -2.08887 1.06445 -3.64551zM171.51 67.7227
104
+ c-1.35156 0 -2.62695 -0.394531 -3.82422 -1.14746c-1.20898 -0.762695 -2.41211 -2.01172 -3.61523 -3.75293h-0.194336l0.455078 4.45996h-4.00293l-5.13086 -24.0488h5.13086l2.30371 10.8701c0.563477 2.66211 1.56641 4.80762 3 6.44531
105
+ c1.43848 1.63379 3.07227 2.45312 4.89453 2.45312c0.702148 0 1.43945 -0.107422 2.22266 -0.3125l1.10547 4.7666c-0.660156 0.173828 -1.44922 0.266602 -2.34473 0.266602zM185.462 67.7227c-2.12012 0 -4.04492 -0.711914 -5.78027 -2.125
106
+ c-1.73633 -1.41309 -3.12891 -3.41992 -4.16309 -6.00098c-1.03906 -2.58594 -1.55664 -5.36035 -1.55664 -8.33008c0 -2.70312 0.588867 -4.78711 1.76172 -6.25684c1.17773 -1.47461 2.80078 -2.2168 4.87402 -2.2168c1.33105 0 2.5957 0.322266 3.78418 0.977539
107
+ c1.1875 0.650391 2.4209 1.75098 3.69629 3.29297h0.15332l-0.414062 -3.83008h3.99805l7.17871 33.8379h-5.06934l-1.65332 -7.78711c-0.348633 -1.50098 -0.614258 -3.32324 -0.803711 -5.43262h-0.174805c-1.29492 2.58008 -3.23535 3.87109 -5.83105 3.87109z
108
+ M182.543 46.9199c-2.27246 0 -3.41504 1.47461 -3.41504 4.41797c0 2.0127 0.323242 3.99902 0.958008 5.93945s1.49512 3.47168 2.56543 4.58789c1.06934 1.11621 2.22168 1.67383 3.45508 1.67383c1.29102 0 2.25293 -0.399414 2.88281 -1.1875
109
+ c0.629883 -0.798828 0.947266 -1.8584 0.947266 -3.17969c0 -1.96094 -0.347656 -3.89648 -1.05469 -5.81152c-0.701172 -1.91504 -1.63867 -3.46094 -2.80566 -4.64844c-1.16699 -1.20312 -2.34473 -1.79199 -3.5332 -1.79199zM223.053 66.2988
110
+ c0 2.90332 -0.839844 5.0791 -2.51367 6.54297c-1.68457 1.45996 -4.18848 2.19141 -7.50586 2.19141h-7.26562l-6.72266 -31.7998h5.15625l2.49805 11.8887h2.3916c4.39258 0 7.81836 0.962891 10.2754 2.89258c2.45801 1.93066 3.68652 4.69043 3.68652 8.28418z
111
+ M207.632 59.4941l2.38574 11.1875h2.59082c1.75586 0 3.05078 -0.369141 3.90137 -1.0957c0.849609 -0.727539 1.27441 -1.87402 1.27441 -3.45605c0 -2.12012 -0.706055 -3.74805 -2.11914 -4.90527c-1.4082 -1.15723 -3.41016 -1.73047 -5.99121 -1.73047h-2.04199z
112
+ M239.943 67.7227c-1.34668 0 -2.62109 -0.394531 -3.82422 -1.14746c-1.20801 -0.762695 -2.41113 -2.01172 -3.61523 -3.75293h-0.194336l0.456055 4.45996h-4.00391l-5.12988 -24.0488h5.12988l2.30371 10.8701c0.563477 2.66211 1.56641 4.80762 3.00098 6.44531
113
+ c1.43848 1.63379 3.07129 2.45312 4.89453 2.45312c0.701172 0 1.43848 -0.107422 2.22168 -0.3125l1.10645 4.7666c-0.661133 0.173828 -1.44922 0.266602 -2.3457 0.266602zM251.484 42.7881c1.43359 0 2.7334 0.137695 3.89062 0.378906
114
+ c1.16797 0.271484 2.44727 0.726562 3.84082 1.36133v4.07031c-1.4082 -0.665039 -2.62695 -1.13672 -3.65625 -1.40723c-1.0293 -0.282227 -2.06348 -0.419922 -3.10742 -0.419922c-1.62891 0 -2.84668 0.460938 -3.66602 1.37207s-1.22949 2.18066 -1.22949 3.78906
115
+ v0.628906l0.046875 0.670898h0.936523c4.46484 0 7.90527 0.75293 10.3271 2.2373c2.41699 1.48535 3.62012 3.54297 3.62012 6.19043c0 1.9248 -0.650391 3.41504 -1.94043 4.46973c-1.2959 1.0498 -3.11328 1.57715 -5.44824 1.57715
116
+ c-2.38086 0 -4.53125 -0.670898 -6.45117 -2.02246s-3.44531 -3.26172 -4.56641 -5.73438c-1.12207 -2.46289 -1.68457 -5.13574 -1.68457 -8.0127c0 -2.87793 0.798828 -5.11523 2.40137 -6.7334c1.60254 -1.61719 3.8291 -2.41602 6.68652 -2.41602zM254.792 63.8008
117
+ c0.911133 0 1.60254 -0.205078 2.07324 -0.609375c0.46582 -0.415039 0.696289 -0.983398 0.696289 -1.73047c0 -1.42871 -0.773438 -2.5293 -2.30859 -3.29785c-1.53613 -0.783203 -3.67188 -1.16699 -6.39551 -1.16699h-0.634766
118
+ c0.538086 2.04785 1.41797 3.69629 2.6416 4.93555c1.22363 1.24414 2.53516 1.86914 3.92773 1.86914zM280.289 50.6211c0 0.9375 -0.168945 1.7666 -0.496094 2.46777c-0.328125 0.722656 -0.819336 1.38281 -1.45996 1.99219
119
+ c-0.628906 0.609375 -1.70996 1.3418 -3.24023 2.20117c-1.47949 0.798828 -2.45312 1.44922 -2.92871 1.96094c-0.481445 0.506836 -0.72168 1.08594 -0.72168 1.74121c0 0.855469 0.322266 1.52051 0.982422 2.00195s1.52051 0.72168 2.58105 0.72168
120
+ c1.82715 0 3.75781 -0.547852 5.78516 -1.64844l1.64844 3.83008c-2.18066 1.20801 -4.67969 1.81738 -7.53125 1.81738c-2.6416 0 -4.73047 -0.640625 -6.28711 -1.91016c-1.55176 -1.2793 -2.3252 -3.04102 -2.3252 -5.28906
121
+ c0 -1.36621 0.374023 -2.57031 1.12207 -3.56836c0.74707 -1.00879 2.02734 -2.00195 3.83984 -2.96973c1.55664 -0.885742 2.58496 -1.5918 3.08203 -2.11914s0.74707 -1.15723 0.74707 -1.90527c0 -0.993164 -0.439453 -1.79688 -1.31055 -2.37012
122
+ c-0.870117 -0.573242 -2.01172 -0.870117 -3.40918 -0.870117c-2.30957 0 -4.5625 0.649414 -6.79004 1.95508v-4.4082c1.9209 -0.967773 4.25 -1.45898 7.00977 -1.45898c3.04102 0 5.42188 0.675781 7.13184 2.03223c1.71582 1.35742 2.57031 3.28711 2.57031 5.7959z
123
+ M299.898 50.6211c0 0.9375 -0.168945 1.7666 -0.496094 2.46777c-0.328125 0.722656 -0.819336 1.38281 -1.45898 1.99219c-0.629883 0.609375 -1.70996 1.3418 -3.24121 2.20117c-1.47949 0.798828 -2.45215 1.44922 -2.92871 1.96094
124
+ c-0.481445 0.506836 -0.72168 1.08594 -0.72168 1.74121c0 0.855469 0.322266 1.52051 0.982422 2.00195c0.661133 0.481445 1.52148 0.72168 2.58105 0.72168c1.82812 0 3.75781 -0.547852 5.78516 -1.64844l1.64844 3.83008
125
+ c-2.18066 1.20801 -4.67969 1.81738 -7.53125 1.81738c-2.6416 0 -4.73047 -0.640625 -6.28711 -1.91016c-1.55176 -1.2793 -2.32422 -3.04102 -2.32422 -5.28906c0 -1.36621 0.373047 -2.57031 1.12109 -3.56836c0.74707 -1.00879 2.02734 -2.00195 3.83984 -2.96973
126
+ c1.55176 -0.885742 2.58008 -1.58691 3.08203 -2.11914c0.492188 -0.527344 0.748047 -1.15723 0.748047 -1.90527c0 -0.993164 -0.44043 -1.79688 -1.31055 -2.37012c-0.871094 -0.573242 -2.0127 -0.870117 -3.41016 -0.870117
127
+ c-2.30957 0 -4.5625 0.649414 -6.78906 1.95508v-4.4082c1.91992 -0.967773 4.24902 -1.45898 7.00879 -1.45898c3.04102 0 5.42188 0.675781 7.13281 2.03223c1.71484 1.35742 2.56934 3.28711 2.56934 5.7959zM119.152 6.96875
128
+ c0 4.03906 -1.05957 7.11621 -3.17383 9.2207c-2.11523 2.09961 -5.14062 3.14844 -9.06738 3.14844h-8.02832l-6.72266 -31.7998h8.72461c3.7373 0 6.99316 0.798828 9.76367 2.37012c2.76953 1.57715 4.87891 3.83984 6.32812 6.76855s2.17578 6.35938 2.17578 10.292z
129
+ M101.146 -8.08496v0l-2.93848 -0.00976562l4.93555 23.0811h3.17969c2.43164 0 4.28516 -0.701172 5.56543 -2.09961c1.27441 -1.39258 1.91406 -3.4248 1.91406 -6.09277c0 -2.9082 -0.506836 -5.48828 -1.53027 -7.74609
130
+ c-1.01855 -2.25781 -2.48828 -4.01953 -4.40332 -5.26367s-4.15723 -1.86914 -6.72266 -1.86914zM131.216 -12.8926c1.43848 0 2.73828 0.138672 3.89551 0.378906c1.16797 0.271484 2.44727 0.727539 3.84082 1.3623v4.07031
131
+ c-1.4082 -0.665039 -2.62695 -1.13672 -3.65625 -1.4082c-1.0293 -0.28125 -2.06348 -0.419922 -3.10742 -0.419922c-1.62891 0 -2.84668 0.460938 -3.66602 1.37207c-0.819336 0.912109 -1.22949 2.18164 -1.22949 3.78906v0.629883l0.046875 0.670898h0.936523
132
+ c4.46484 0 7.90527 0.75293 10.3223 2.2373c2.41602 1.48438 3.625 3.54297 3.625 6.19043c0 1.9248 -0.650391 3.41504 -1.94629 4.46973c-1.29492 1.0498 -3.1123 1.57715 -5.44727 1.57715c-2.38086 0 -4.53125 -0.670898 -6.45117 -2.02246
133
+ c-1.91992 -1.35254 -3.44531 -3.26172 -4.56738 -5.73438c-1.12109 -2.46289 -1.68457 -5.13574 -1.68457 -8.01367c0 -2.87695 0.798828 -5.11426 2.40137 -6.73242s3.83008 -2.41699 6.6875 -2.41699zM134.522 8.12012c0.912109 0 1.60254 -0.205078 2.07422 -0.609375
134
+ c0.46582 -0.414062 0.696289 -0.982422 0.696289 -1.73047c0 -1.42871 -0.773438 -2.5293 -2.30957 -3.29688c-1.53613 -0.783203 -3.6709 -1.16797 -6.39453 -1.16797h-0.634766c0.537109 2.04883 1.41797 3.69727 2.6416 4.93652
135
+ c1.22852 1.24414 2.53418 1.86816 3.92676 1.86816zM148.04 -12.4619v0h5.97461l13.0098 24.0586h-5.4375l-6.76367 -13.0098c-0.332031 -0.604492 -0.803711 -1.55664 -1.41309 -2.87207c-0.608398 -1.32129 -1.11621 -2.51953 -1.52051 -3.58984h-0.15332
136
+ c0 2.00195 -0.102539 4.16309 -0.307617 6.46191l-1.19727 13.0098h-5.04395zM175.391 -12.8926c1.43848 0 2.73926 0.138672 3.90137 0.378906c1.16797 0.271484 2.44727 0.727539 3.83984 1.3623v4.07031c-1.40723 -0.665039 -2.62598 -1.13672 -3.65527 -1.4082
137
+ c-1.0293 -0.28125 -2.06348 -0.419922 -3.1084 -0.419922c-1.62793 0 -2.84668 0.460938 -3.66504 1.37207c-0.819336 0.912109 -1.22949 2.18164 -1.22949 3.78906v0.629883l0.0458984 0.670898h0.932617c4.46387 0 7.90527 0.75293 10.3213 2.2373
138
+ c2.41699 1.48438 3.625 3.54297 3.625 6.19043c0 1.9248 -0.650391 3.41504 -1.94531 4.46973c-1.29492 1.0498 -3.11328 1.57715 -5.44727 1.57715c-2.38086 0 -4.53125 -0.670898 -6.45117 -2.02246c-1.9209 -1.35254 -3.44629 -3.26172 -4.56738 -5.73438
139
+ c-1.12109 -2.46289 -1.68457 -5.13574 -1.68457 -8.01367c0 -2.87695 0.798828 -5.11426 2.40137 -6.73242s3.83008 -2.41699 6.68652 -2.41699zM178.698 8.12012c0.911133 0 1.60254 -0.205078 2.07324 -0.609375c0.46582 -0.414062 0.696289 -0.982422 0.696289 -1.73047
140
+ c0 -1.42871 -0.772461 -2.5293 -2.30859 -3.29688c-1.53613 -0.783203 -3.6709 -1.16797 -6.39551 -1.16797h-0.634766c0.538086 2.04883 1.41895 3.69727 2.64258 4.93652c1.22852 1.24414 2.53418 1.86816 3.92676 1.86816zM193.301 -12.4619l7.19824 33.8486h-5.10938
141
+ l-7.17871 -33.8486h5.08984zM222.459 2.5957c0 2.89258 -0.798828 5.19727 -2.3916 6.87598c-1.5918 1.67969 -3.80371 2.51953 -6.62988 2.51953c-2.44727 0 -4.6084 -0.670898 -6.48242 -2.0127c-1.87305 -1.34082 -3.32715 -3.21973 -4.36133 -5.62109
142
+ c-1.04004 -2.41699 -1.55664 -5.06445 -1.55664 -7.94629c0 -2.85254 0.819336 -5.11523 2.45703 -6.77441c1.63379 -1.6582 3.85059 -2.48242 6.63086 -2.48242c2.40625 0 4.53613 0.639648 6.38477 1.9248c1.84766 1.28027 3.30762 3.11816 4.3623 5.51953
143
+ c1.05469 2.40625 1.58691 5.07324 1.58691 7.99707zM217.303 2.81641c0 -2.13574 -0.291992 -4.08594 -0.865234 -5.86328c-0.583008 -1.77148 -1.39258 -3.1582 -2.43652 -4.1416c-1.04492 -0.988281 -2.21777 -1.47949 -3.52246 -1.47949
144
+ c-1.4082 0 -2.47363 0.429688 -3.19043 1.29004c-0.716797 0.849609 -1.0752 2.08887 -1.0752 3.69141c0 2.0127 0.291992 3.90625 0.880859 5.68848c0.583984 1.7666 1.41309 3.17969 2.47852 4.21387c1.06445 1.03906 2.27246 1.55664 3.61914 1.55664
145
+ c1.32129 0 2.33496 -0.430664 3.04688 -1.31055c0.711914 -0.880859 1.06445 -2.08984 1.06445 -3.64551zM236.651 -12.8926c2.09961 0 4.02441 0.716797 5.77539 2.14551s3.13379 3.44043 4.14746 6.01074c1.01367 2.57617 1.52051 5.34082 1.52051 8.2998
146
+ c0 2.65723 -0.583984 4.72559 -1.76172 6.2207c-1.17676 1.49512 -2.7998 2.24316 -4.87402 2.24316c-2.70801 0 -5.20215 -1.51074 -7.48047 -4.52637h-0.194336l0.456055 4.0957h-4.00391l-7.35254 -34.7598h5.06934l2.08887 10.0713
147
+ c0.260742 1.28027 0.439453 2.62109 0.541992 4.0293h0.21582c1.27441 -2.55957 3.22559 -3.83008 5.85156 -3.83008zM239.544 7.85938c2.24805 0 3.36914 -1.45898 3.37402 -4.37305c0 -2.07812 -0.311523 -4.07031 -0.936523 -5.97949
148
+ c-0.625 -1.89941 -1.47461 -3.4209 -2.54492 -4.56738c-1.06934 -1.14648 -2.22168 -1.70996 -3.45605 -1.70996c-1.2334 0 -2.18555 0.388672 -2.86133 1.16699c-0.675781 0.783203 -1.01465 1.86914 -1.01465 3.26172c0 2.02246 0.369141 3.98828 1.10156 5.8877
149
+ c0.726562 1.90527 1.67383 3.43066 2.83594 4.58301c1.15723 1.15723 2.33008 1.73047 3.50195 1.73047zM267.279 12.042c-2.9541 0 -5.50879 -1.64355 -7.66504 -4.89453h-0.194336l0.456055 4.45996h-4.00391l-5.12988 -24.0596h5.12988l2.13477 10.1992
150
+ c0.645508 3.06152 1.64844 5.52441 3.00586 7.35742c1.35156 1.84375 2.82617 2.76465 4.42871 2.76465c1.68945 0 2.53906 -0.977539 2.53906 -2.93359c0 -0.655273 -0.117188 -1.57715 -0.368164 -2.76465l-3.10254 -14.6123h5.10938l2.20117 10.46
151
+ c0.620117 2.96973 1.60352 5.3457 2.96484 7.14746c1.34668 1.79688 2.81641 2.69824 4.37793 2.69824c1.76074 0 2.63672 -0.942383 2.63672 -2.81055c0 -0.542969 -0.132812 -1.50586 -0.410156 -2.8877l-3.10254 -14.6123h5.11035l3.04102 14.1973
152
+ c0.327148 1.7002 0.481445 3.01074 0.481445 3.94238c0 2.0127 -0.501953 3.56836 -1.51074 4.67969c-1.00391 1.11621 -2.46777 1.66895 -4.40332 1.66895c-1.48926 0 -2.92871 -0.429688 -4.31641 -1.2998c-1.39258 -0.860352 -2.62109 -2.12988 -3.71191 -3.80957
153
+ h-0.173828c-0.496094 3.39941 -2.33496 5.10938 -5.52441 5.10938zM299.986 -12.8926c1.43359 0 2.73926 0.138672 3.88574 0.378906c1.17285 0.271484 2.45215 0.727539 3.83984 1.3623v4.07031c-1.4082 -0.665039 -2.62695 -1.13672 -3.65039 -1.4082
154
+ c-1.0293 -0.28125 -2.06836 -0.419922 -3.1084 -0.419922c-1.63281 0 -2.85156 0.460938 -3.6709 1.37207c-0.819336 0.912109 -1.22363 2.18164 -1.22363 3.78906v0.629883l0.0458984 0.670898h0.942383c4.45996 0 7.90039 0.75293 10.3223 2.2373
155
+ c2.41602 1.48438 3.62012 3.54297 3.62012 6.19043c0 1.9248 -0.650391 3.41504 -1.95117 4.46973c-1.28516 1.0498 -3.10742 1.57715 -5.44238 1.57715c-2.37598 0 -4.52637 -0.670898 -6.44629 -2.02246c-1.9248 -1.35254 -3.45117 -3.26172 -4.57227 -5.73438
156
+ c-1.13184 -2.46289 -1.68945 -5.13574 -1.68945 -8.01367c0 -2.87695 0.808594 -5.12988 2.41113 -6.73242c1.60254 -1.61816 3.83008 -2.41699 6.6875 -2.41699zM303.288 8.12012c0.916992 0 1.6084 -0.205078 2.05371 -0.609375
157
+ c0.459961 -0.414062 0.701172 -0.982422 0.701172 -1.73047c0 -1.42871 -0.768555 -2.5293 -2.30371 -3.29688c-1.54688 -0.783203 -3.67676 -1.16797 -6.39551 -1.16797h-0.629883c0.542969 2.04883 1.41309 3.69727 2.64258 4.93652
158
+ c1.2334 1.24414 2.54395 1.86816 3.93164 1.86816zM327.056 -12.4619h0.00488281v0.015625h5.13574l2.97949 14.208c0.342773 1.62305 0.501953 2.93848 0.501953 3.93164c0 2.0332 -0.533203 3.59961 -1.59766 4.7002c-1.07031 1.10645 -2.57031 1.64844 -4.51562 1.64844
159
+ c-1.49512 0 -2.88281 -0.393555 -4.16309 -1.16699c-1.26953 -0.773438 -2.52441 -2.0127 -3.72168 -3.73242h-0.195312l0.456055 4.45898h-3.99902l-5.12988 -24.0479h5.12988l2.12988 10.1982c0.410156 1.97168 1.01367 3.73242 1.82812 5.28906
160
+ c0.808594 1.55664 1.71484 2.75488 2.73926 3.5791s2.05273 1.23926 3.09277 1.23926c1.86816 0 2.81055 -0.952148 2.81055 -2.85156c0 -0.604492 -0.12793 -1.55176 -0.399414 -2.85742zM347.51 -8.76074c-0.737305 0 -1.29004 0.18457 -1.65332 0.547852
161
+ c-0.358398 0.369141 -0.538086 0.871094 -0.538086 1.49023c0 0.547852 0.0976562 1.21387 0.28125 2.0127l2.66309 12.4414h6.02051l0.850586 3.87012h-6.07227l1.13086 5.35059h-3.16895l-2.81055 -5.03809l-4.13184 -1.79199l-0.460938 -2.39062h3.52246
162
+ l-2.63184 -12.4014c-0.235352 -1.06934 -0.348633 -2.02148 -0.348633 -2.85156c0 -3.5791 1.99219 -5.37109 5.95996 -5.37109c0.870117 0 1.74121 0.0976562 2.61133 0.287109c0.875977 0.18457 1.55664 0.404297 2.06836 0.650391v3.87012
163
+ c-1.21289 -0.450195 -2.31445 -0.675781 -3.29199 -0.675781zM116.858 188.001l11.6797 56.1611h15.6816l3.50293 15.9287h-50.6885l-3.4043 -15.9287h15.6309l-11.6836 -56.1611h19.2812zM164.168 187.019c6.3125 0 11.8369 1.54102 16.5684 4.62793
164
+ c4.73047 3.08789 8.40137 7.42383 11.0176 12.9951c2.61621 5.5752 3.92188 11.8115 3.92188 18.7129c0 6.90234 -1.86328 12.2119 -5.5957 15.9287c-3.73242 3.71191 -9.03223 5.57031 -15.9023 5.57031c-6.31348 0 -11.833 -1.54102 -16.5684 -4.63379
165
+ c-4.73145 -3.0918 -8.40723 -7.42383 -11.0186 -12.9941c-2.61621 -5.5752 -3.92188 -11.8115 -3.92188 -18.7139c0 -6.90137 1.86328 -12.2109 5.5957 -15.9277c3.73242 -3.71777 9.03223 -5.56543 15.9033 -5.56543zM171.96 230.508
166
+ c1.31641 0 2.35059 -0.547852 3.1084 -1.6543c0.757812 -1.10059 1.13672 -2.73926 1.13672 -4.9043c0 -5.9502 -0.988281 -11.208 -2.95996 -15.7803c-1.9707 -4.57227 -4.28516 -6.85547 -6.95312 -6.85547c-2.75879 0 -4.1416 2.18652 -4.1416 6.55859
167
+ c0 5.91895 0.957031 11.167 2.88281 15.7539c1.91992 4.58789 4.22852 6.88184 6.92676 6.88184zM222.331 187.019c6.3125 0 11.832 1.54102 16.5684 4.62793c4.73047 3.08789 8.40137 7.42383 11.0176 12.9951c2.61719 5.5752 3.92285 11.8115 3.92285 18.7129
168
+ c0 6.90234 -1.86426 12.2119 -5.59668 15.9287c-3.73242 3.71191 -9.03125 5.57031 -15.9023 5.57031c-6.31348 0 -11.833 -1.54102 -16.5684 -4.63379c-4.73145 -3.0918 -8.40723 -7.42383 -11.0186 -12.9941c-2.61621 -5.5752 -3.92188 -11.8115 -3.92188 -18.7139
169
+ c0 -6.90137 1.86328 -12.2109 5.5957 -15.9277c3.73242 -3.71777 9.03223 -5.56543 15.9033 -5.56543zM230.123 230.508c1.31152 0 2.35059 -0.547852 3.1084 -1.6543c0.757812 -1.10059 1.13672 -2.73926 1.13672 -4.9043c0 -5.9502 -0.988281 -11.208 -2.95996 -15.7803
170
+ c-1.9707 -4.57227 -4.28516 -6.85547 -6.95215 -6.85547c-2.75977 0 -4.14258 2.18652 -4.14258 6.55859c0 5.91895 0.958008 11.167 2.88281 15.7539c1.91992 4.58789 4.22852 6.88184 6.92676 6.88184zM275.072 188.001l16.2197 76.7236h-19.0869l-16.2207 -76.7236
171
+ h19.0879zM328.494 207.381c0 6.83496 -3.69141 12.0986 -11.0947 15.7744c-2.33496 1.15234 -4.01953 2.08887 -5.05371 2.81055c-1.03418 0.722656 -1.55176 1.56152 -1.55176 2.51465c0 2.2373 1.23926 3.35352 3.73828 3.35352
172
+ c1.67383 0 3.68066 -0.419922 5.99023 -1.25977c2.31934 -0.839844 4.55664 -1.96582 6.72754 -3.37891l5.96973 12.4258c-2.8623 1.77637 -5.80566 3.09277 -8.83203 3.94727c-3.03125 0.855469 -6.37891 1.28027 -10.0605 1.28027
173
+ c-7.33203 0 -12.9844 -1.53125 -16.9629 -4.58789c-3.96777 -3.05664 -5.96484 -7.41309 -5.96484 -13.0654c0 -3.54883 0.793945 -6.55371 2.3916 -9.02148c1.5918 -2.46777 4.13184 -4.6543 7.61816 -6.55957c3.41504 -1.94043 5.55566 -3.32715 6.41016 -4.16699
174
+ c0.855469 -0.839844 1.28027 -1.83301 1.28027 -2.98535c0 -1.08496 -0.552734 -1.92969 -1.6748 -2.53906c-1.11035 -0.609375 -2.78516 -0.912109 -5.02734 -0.912109c-2.66211 0 -5.28906 0.328125 -7.88965 0.988281
175
+ c-2.59082 0.655273 -5.40234 1.80762 -8.42773 3.45117v-15.334c4.4082 -2.06934 10.2549 -3.09766 17.5566 -3.09766c8.02832 0 14.1719 1.75586 18.4473 5.27344c4.26953 3.51758 6.41016 8.5498 6.41016 15.0889zM358.349 187.019
176
+ c4.17285 0 7.84961 0.373047 11.0391 1.10059c3.18945 0.742188 6.62012 2.04785 10.3115 3.92188v13.5117c-3.18945 -1.67969 -6.04199 -2.90332 -8.53027 -3.67578c-2.49805 -0.773438 -5.04785 -1.15723 -7.64355 -1.15723c-5.3916 0 -8.08496 2.43164 -8.08496 7.2959
177
+ v0.788086h2.9082c9.72852 0 17.1572 1.77148 22.3076 5.30469c5.14062 3.53223 7.71094 8.60645 7.71094 15.2109c0 4.70605 -1.79199 8.46875 -5.37109 11.2949c-3.57812 2.82617 -8.49902 4.23926 -14.7451 4.23926c-6.27246 0 -11.8018 -1.43359 -16.5938 -4.31055
178
+ c-4.78223 -2.87793 -8.54004 -7.10156 -11.29 -12.6719c-2.73926 -5.57617 -4.12109 -11.833 -4.12109 -18.7656c0 -6.9375 1.94043 -12.3486 5.82129 -16.2451s9.31348 -5.8418 16.2812 -5.8418zM366.142 231.936c1.44336 0 2.49316 -0.363281 3.15332 -1.08496
179
+ c0.65625 -0.72168 0.983398 -1.60742 0.983398 -2.66211c0 -2.2373 -1.0293 -4.03516 -3.06152 -5.40234c-2.0332 -1.36133 -4.84863 -2.04199 -8.42773 -2.04199h-1.42871c0.364258 2.89258 1.41309 5.4834 3.1543 7.7666c1.74609 2.2832 3.62012 3.4248 5.62695 3.4248z
180
+ M415.432 202.353c-2.08398 0 -3.11328 1.03418 -3.09277 3.11328c0 0.916016 0.255859 2.64648 0.789062 5.17578l4.14648 18.8828h14.2441l3.1084 14.3516h-14.1982l2.41699 11.1924h-12.7129l-6.75391 -11.832l-10.7568 -4.3418l-2.02734 -9.37012h7.59277
181
+ l-4.14746 -19.8242c-0.783203 -3.68164 -1.18262 -6.77441 -1.18262 -9.27246c0 -4.7666 1.25977 -8.19727 3.76855 -10.2812c2.51367 -2.08887 6.20508 -3.12793 11.0693 -3.12793c6.70703 0 12.2881 1.10059 16.7578 3.30176v14.3516
182
+ c-3.83984 -1.55078 -6.85059 -2.31934 -9.02148 -2.31934z" />
183
+ <glyph glyph-name="uniF11E" unicode="&#xf11e;"
184
+ d="M371.2 345.6h76.7998v-384h-384v384h76.7998v76.8008h76.7998v-76.8008h76.8008v76.8008h76.7998v-76.8008zM119.507 152.666c152.32 -172.615 276.192 0 276.192 0c-152.32 168.55 -276.192 0 -276.192 0zM257.594 203.808c28.7549 0 52.0576 -23.3086 52.0576 -52.0576
185
+ c0 -28.7227 -23.2959 -52.0381 -52.0576 -52.0381c-28.7295 0 -52.0322 23.3154 -52.0322 52.0381c0 28.749 23.3027 52.0576 52.0322 52.0576zM257.594 117.453c18.957 0 34.3164 15.3594 34.3164 34.2969c0 18.957 -15.3594 34.3105 -34.3164 34.3105
186
+ c-18.9316 0 -34.2979 -15.3535 -34.2979 -34.3105c0 -18.9375 15.3662 -34.2969 34.2979 -34.2969z" />
187
+ <glyph glyph-name="uniF115" unicode="&#xf115;"
188
+ d="M371.2 345.6h76.7998v-384h-384v384h76.7998v76.8008h76.7998v-76.8008h76.8008v76.8008h76.7998v-76.8008zM342.624 49.6641l0.0126953 1.03027l-0.441406 50.0029l-0.0703125 -1.29199c-0.0830078 -0.793945 -0.210938 -1.58789 -0.397461 -2.36816
189
+ l-0.0761719 -0.230469c-0.185547 -0.678711 -0.422852 -1.36328 -0.710938 -2.0293l-0.236328 -0.5625c-0.313477 -0.672852 -0.65918 -1.33789 -1.0625 -2.00391l-0.102539 -0.15332c-0.435547 -0.697266 -0.972656 -1.38867 -1.49707 -2.07324l-0.442383 -0.525391
190
+ c-0.524414 -0.594727 -1.06836 -1.19629 -1.66406 -1.79785l-0.306641 -0.300781c-0.723633 -0.704102 -1.5293 -1.40234 -2.3877 -2.08691l-0.537109 -0.40332c-0.954102 -0.729492 -1.93945 -1.47168 -3.02734 -2.16309l-0.185547 -0.133789
191
+ c-1.33789 -0.864258 -2.77734 -1.70898 -4.30078 -2.51562c-0.889648 -0.480469 -1.84961 -0.954102 -2.80371 -1.41406l-0.978516 -0.448242c-0.671875 -0.307617 -1.33789 -0.601562 -2.03516 -0.896484l-0.876953 -0.371094
192
+ c-1.62598 -0.671875 -3.32812 -1.31152 -5.0752 -1.92578l-0.710938 -0.237305c-1.79199 -0.601562 -3.63477 -1.18359 -5.54883 -1.73438l-0.703125 -0.185547c-2.18262 -0.614258 -4.46777 -1.19043 -6.8291 -1.69629l-0.838867 -0.185547
193
+ c-2.38672 -0.511719 -4.83203 -0.998047 -7.36621 -1.41406l-0.774414 -0.134766c-2.04785 -0.332031 -4.12109 -0.626953 -6.2207 -0.889648l-1.08789 -0.133789c-2.125 -0.255859 -4.28809 -0.480469 -6.47656 -0.65918l-1.02441 -0.0966797
194
+ c-2.56641 -0.178711 -5.16504 -0.332031 -7.80176 -0.447266l-1.20898 -0.0449219c-2.1377 -0.0703125 -4.33984 -0.12207 -6.52832 -0.12207c-1.26758 0 -2.54102 0 -3.81445 0.0126953c-1.31836 0.0263672 -2.61719 0.0644531 -3.91016 0.109375
195
+ c-1.8623 0.0634766 -3.71875 0.140625 -5.54883 0.262695l-1.46582 0.0957031c-1.4209 0.115234 -2.82227 0.205078 -4.21777 0.338867l-1.43359 0.115234c-1.74023 0.15332 -3.44922 0.333008 -5.13867 0.538086l-1.03711 0.140625
196
+ c-1.44043 0.178711 -2.84766 0.383789 -4.25586 0.588867l-1.37598 0.198242c-1.72168 0.275391 -3.41797 0.563477 -5.08789 0.876953l-0.40332 0.0830078c-1.65137 0.313477 -3.27734 0.652344 -4.87695 1.01074l-1.1709 0.256836
197
+ c-1.79199 0.40918 -3.55273 0.857422 -5.28027 1.31152l-0.857422 0.237305c-2.02246 0.543945 -3.9873 1.12598 -5.8877 1.74707l-1.2041 0.40332c-0.780273 0.261719 -1.56152 0.537109 -2.31641 0.8125l-1.35645 0.499023
198
+ c-0.743164 0.275391 -1.47852 0.563477 -2.20215 0.851562l-1.26074 0.511719l-1.47168 0.633789l-1.4082 0.633789l-1.4209 0.665039l-1.33789 0.65918l-1.33105 0.691406l-1.26074 0.666016l-1.26074 0.729492l-1.17773 0.665039l-1.18359 0.761719l-1.08203 0.704102
199
+ l-1.08789 0.774414l-1.01074 0.729492l-1.00488 0.799805l-0.93457 0.749023l-0.915039 0.825195l-0.844727 0.761719l-0.813477 0.826172l-0.760742 0.787109l-0.691406 0.864258l-0.671875 0.8125l-0.601562 0.851562l-0.576172 0.837891l-0.511719 0.864258
200
+ l-0.5 0.850586l-0.383789 0.896484l-0.37793 0.870117l-0.293945 0.915039l-0.268555 0.864258l-0.198242 1.02441l-0.147461 0.761719c-0.0830078 0.614258 -0.12207 1.20898 -0.12207 1.82324l0.435547 -50.0098c0 -0.614258 0.0449219 -1.20898 0.121094 -1.81738
201
+ l0.102539 -0.543945l0.25 -1.24805l0.210938 -0.665039l0.352539 -1.11426l0.300781 -0.697266l0.473633 -1.0498l0.40332 -0.722656l0.569336 -0.999023l0.518555 -0.729492l0.65918 -0.94043l0.607422 -0.736328l0.78125 -0.953125l0.697266 -0.729492l0.864258 -0.889648
202
+ l0.806641 -0.723633l0.947266 -0.857422l0.895508 -0.729492l1.03711 -0.813477l0.998047 -0.722656l1.10742 -0.787109l1.10742 -0.716797l1.16406 -0.729492l1.20312 -0.698242l1.22949 -0.709961l1.29297 -0.68457l1.30566 -0.671875l1.40137 -0.672852
203
+ l1.32422 -0.632812l1.51074 -0.666016l1.38281 -0.588867l0.459961 -0.198242l0.845703 -0.326172c0.722656 -0.294922 1.43359 -0.583008 2.17578 -0.851562l1.36328 -0.505859c0.780273 -0.274414 1.54883 -0.537109 2.3418 -0.8125l0.896484 -0.307617l0.28125 -0.101562
204
+ c1.89453 -0.601562 3.85254 -1.17773 5.86914 -1.73438l0.505859 -0.154297l0.402344 -0.0957031c1.70312 -0.454102 3.45605 -0.889648 5.23535 -1.30566l0.499023 -0.134766l0.716797 -0.140625c1.60645 -0.333008 3.21289 -0.68457 4.87109 -0.998047
205
+ l0.300781 -0.0644531l0.0761719 -0.0126953c1.66406 -0.319336 3.35352 -0.607422 5.05664 -0.870117l0.652344 -0.12207l0.793945 -0.101562c1.37598 -0.211914 2.76465 -0.416016 4.17871 -0.588867l0.826172 -0.12793l0.268555 -0.0136719
206
+ c1.67676 -0.210938 3.37891 -0.396484 5.10059 -0.5625l0.53125 -0.0576172l0.959961 -0.0771484c1.37012 -0.134766 2.75195 -0.223633 4.14746 -0.333008l1.00488 -0.0761719l0.499023 -0.0263672c1.82422 -0.114258 3.67383 -0.198242 5.53613 -0.261719
207
+ l0.396484 -0.0126953c1.17188 -0.0449219 2.34277 -0.0644531 3.51367 -0.0839844c1.16504 -0.03125 2.29785 -0.03125 3.44336 -0.03125h0.383789c2.20215 0.0126953 4.37109 0.0576172 6.53418 0.133789l0.672852 0.0126953l0.517578 0.0263672
208
+ c2.65625 0.0957031 5.26074 0.249023 7.80859 0.454102l0.543945 0.0449219l0.486328 0.0380859c2.20117 0.198242 4.35156 0.416016 6.46387 0.65918l1.08789 0.134766c2.10547 0.261719 4.19238 0.563477 6.2207 0.889648l0.40332 0.0703125l0.473633 0.0957031
209
+ c2.48926 0.416016 4.92188 0.876953 7.27734 1.38867l0.844727 0.179688c2.34863 0.511719 4.60742 1.08105 6.80273 1.70898l0.441406 0.101562l0.300781 0.102539c1.88867 0.538086 3.73828 1.11426 5.49121 1.72168l0.761719 0.243164
210
+ c1.7666 0.621094 3.46875 1.28027 5.09473 1.95215l0.390625 0.134766l0.416016 0.191406c0.716797 0.300781 1.42676 0.614258 2.11816 0.941406l0.953125 0.43457c0.871094 0.40332 1.73438 0.838867 2.56055 1.26758l0.261719 0.134766l0.0517578 0.0253906
211
+ c1.48438 0.787109 2.86719 1.625 4.16016 2.45117l0.217773 0.12793l0.0703125 0.0634766c1.05566 0.678711 2.02832 1.40234 2.95605 2.125l0.358398 0.25l0.25 0.210938c0.838867 0.666016 1.62598 1.35059 2.34863 2.04199l0.102539 0.0830078l0.223633 0.275391
212
+ c0.588867 0.556641 1.13965 1.14551 1.63867 1.75293l0.275391 0.307617l0.160156 0.217773c0.563477 0.677734 1.0752 1.37598 1.50391 2.08008l0.0253906 0.03125l0.0703125 0.102539c0.410156 0.65332 0.755859 1.34473 1.0752 2.0166l0.134766 0.275391
213
+ l0.115234 0.293945c0.275391 0.652344 0.537109 1.35059 0.691406 2.02832l0.0761719 0.179688v0.0576172c0.210938 0.774414 0.333008 1.57422 0.397461 2.36133zM342.624 121.312l0.0253906 1.05664l-0.441406 50.0029l-0.0703125 -1.29883
214
+ c-0.0771484 -0.787109 -0.210938 -1.57422 -0.396484 -2.3623l-0.0771484 -0.236328c-0.185547 -0.671875 -0.422852 -1.35059 -0.710938 -2.02246l-0.236328 -0.563477c-0.313477 -0.677734 -0.652344 -1.33691 -1.05566 -2.00293l-0.109375 -0.160156
215
+ c-0.43457 -0.68457 -0.972656 -1.40137 -1.49707 -2.07324l-0.441406 -0.518555c-0.525391 -0.601562 -1.06934 -1.20312 -1.66406 -1.79199l-0.307617 -0.313477c-0.723633 -0.697266 -1.5293 -1.4082 -2.38086 -2.07422l-0.543945 -0.40918
216
+ c-0.953125 -0.742188 -1.93945 -1.47852 -3.02734 -2.16992l-0.185547 -0.133789c-1.33789 -0.864258 -2.77734 -1.70898 -4.30078 -2.50879c-0.889648 -0.486328 -1.84961 -0.972656 -2.80273 -1.4209l-0.979492 -0.448242
217
+ c-0.671875 -0.293945 -1.33789 -0.614258 -2.03516 -0.915039l-0.876953 -0.352539c-1.62598 -0.677734 -3.32812 -1.31152 -5.0752 -1.91992l-0.709961 -0.243164c-1.79199 -0.614258 -3.63574 -1.19043 -5.54883 -1.72754l-0.698242 -0.192383
218
+ c-2.18848 -0.607422 -4.47363 -1.18359 -6.83496 -1.70898l-0.838867 -0.178711c-2.38672 -0.518555 -4.83105 -0.992188 -7.36621 -1.4209l-0.774414 -0.134766c-2.04785 -0.326172 -4.12109 -0.620117 -6.2207 -0.882812l-1.08789 -0.134766
219
+ c-2.125 -0.249023 -4.28809 -0.479492 -6.47656 -0.652344l-1.02441 -0.0898438c-2.56641 -0.198242 -5.16406 -0.345703 -7.80176 -0.448242l-1.20898 -0.0634766c-2.1377 -0.0644531 -4.33984 -0.12207 -6.52832 -0.12207c-1.2666 0 -2.54102 0 -3.81445 0.0263672
220
+ c-1.31836 0.0126953 -2.61719 0.0576172 -3.91016 0.0957031c-1.8623 0.0634766 -3.71875 0.15332 -5.54883 0.275391l-1.47852 0.0185547c-1.4209 0.102539 -2.82227 0.211914 -4.21777 0.339844l-1.43359 0.12793c-1.74023 0.160156 -3.44922 0.358398 -5.13867 0.549805
221
+ l-1.03711 0.134766c-1.44043 0.198242 -2.84766 0.396484 -4.25586 0.608398l-1.37598 0.204102c-1.72168 0.275391 -3.41797 0.550781 -5.08789 0.871094l-0.40332 0.0761719c-1.65137 0.327148 -3.27734 0.65332 -4.87695 1.02441l-1.1709 0.249023
222
+ c-1.79199 0.416016 -3.55273 0.851562 -5.28027 1.3125l-0.857422 0.230469c-2.02246 0.549805 -3.9873 1.13867 -5.8877 1.75391l-1.2041 0.40918c-0.780273 0.262695 -1.56152 0.524414 -2.31641 0.8125l-1.35645 0.480469
223
+ c-0.743164 0.288086 -1.47852 0.582031 -2.20215 0.870117l-1.26074 0.511719l-1.47168 0.62793l-1.4082 0.626953l-1.4209 0.671875l-1.33789 0.652344l-1.33105 0.698242l-1.26074 0.665039l-1.26074 0.730469l-1.17773 0.677734l-1.18359 0.742188l-1.08203 0.710938
224
+ l-1.08789 0.780273l-1.01074 0.710938l-1.00488 0.8125l-0.93457 0.736328l-0.915039 0.825195l-0.844727 0.761719l-0.813477 0.838867l-0.760742 0.787109l-0.691406 0.850586l-0.671875 0.813477l-0.601562 0.850586l-0.576172 0.844727l-0.511719 0.876953
225
+ l-0.5 0.857422l-0.383789 0.889648l-0.37793 0.864258l-0.293945 0.915039l-0.268555 0.864258l-0.198242 1.01074l-0.147461 0.774414c-0.0830078 0.601562 -0.12207 1.20996 -0.12207 1.81836l0.435547 -50.0039c0 -0.614258 0.0449219 -1.20312 0.121094 -1.81738
226
+ l0.102539 -0.556641l0.25 -1.23535l0.210938 -0.665039l0.352539 -1.11426l0.300781 -0.709961l0.473633 -1.04297l0.40332 -0.723633l0.569336 -0.992188l0.518555 -0.735352l0.65918 -0.947266l0.607422 -0.736328l0.787109 -0.927734l0.698242 -0.723633
227
+ l0.863281 -0.889648l0.806641 -0.736328l0.947266 -0.850586l0.896484 -0.723633l1.03613 -0.819336l0.999023 -0.729492l1.10645 -0.761719l1.10742 -0.722656l1.16504 -0.736328l1.20312 -0.697266l1.22852 -0.710938l1.29297 -0.68457l1.30566 -0.665039
228
+ l1.40137 -0.685547l1.3252 -0.639648l1.51074 -0.666016l1.38184 -0.587891l0.460938 -0.199219l0.844727 -0.338867c0.723633 -0.28125 1.43359 -0.569336 2.17578 -0.844727l1.36328 -0.493164c0.78125 -0.28125 1.54883 -0.549805 2.34277 -0.832031l0.895508 -0.300781
229
+ l0.282227 -0.0761719c1.89453 -0.621094 3.85254 -1.20312 5.86816 -1.76074l0.505859 -0.140625l0.396484 -0.0830078c1.70312 -0.460938 3.45605 -0.895508 5.23535 -1.29883l0.499023 -0.134766l0.716797 -0.134766c1.60645 -0.351562 3.21289 -0.69043 4.87109 -1.01074
230
+ l0.300781 -0.0644531l0.0761719 -0.0126953c1.66406 -0.319336 3.35352 -0.607422 5.05664 -0.870117l0.652344 -0.121094l0.793945 -0.109375c1.37598 -0.210938 2.76465 -0.40332 4.17871 -0.588867l0.826172 -0.121094l0.268555 -0.0263672
231
+ c1.67676 -0.204102 3.37891 -0.396484 5.10059 -0.549805l0.53125 -0.0703125l0.959961 -0.0644531c1.37012 -0.12793 2.75195 -0.236328 4.14746 -0.326172l1.00488 -0.0771484l0.499023 -0.03125c1.82422 -0.109375 3.67383 -0.192383 5.53613 -0.256836
232
+ l0.396484 -0.0253906c1.17188 -0.0380859 2.34277 -0.0634766 3.51367 -0.0898438c1.16504 -0.0126953 2.29785 -0.0126953 3.44336 -0.0126953h0.383789c2.20215 0 4.37109 0.0644531 6.53418 0.12793l0.672852 0.0136719l0.517578 0.0380859
233
+ c2.65625 0.0957031 5.26074 0.249023 7.80859 0.454102l0.543945 0.0322266l0.486328 0.0507812c2.20117 0.192383 4.35156 0.40332 6.46387 0.65332l1.08789 0.133789c2.10547 0.269531 4.19238 0.557617 6.2207 0.90332l0.40332 0.0507812l0.473633 0.0898438
234
+ c2.48926 0.428711 4.92188 0.889648 7.27734 1.40137l0.844727 0.178711c2.34863 0.518555 4.60742 1.08203 6.80273 1.69629l0.448242 0.0957031l0.300781 0.12207c1.8877 0.524414 3.7373 1.10059 5.49121 1.70898l0.761719 0.249023
235
+ c1.7666 0.62793 3.46875 1.26758 5.09375 1.95215l0.390625 0.134766l0.40332 0.191406c0.716797 0.288086 1.43359 0.595703 2.11816 0.93457l0.959961 0.422852c0.864258 0.40918 1.72852 0.837891 2.56055 1.28027l0.261719 0.133789l0.0517578 0.0253906
236
+ c1.47852 0.787109 2.86035 1.61328 4.15332 2.45117l0.217773 0.12207l0.0771484 0.0703125c1.05566 0.671875 2.02832 1.38867 2.95605 2.1123l0.358398 0.243164l0.25 0.223633c0.838867 0.666016 1.62598 1.34375 2.34863 2.04199l0.102539 0.0888672l0.223633 0.256836
237
+ c0.588867 0.5625 1.13965 1.16406 1.63867 1.76562l0.275391 0.300781l0.160156 0.224609c0.563477 0.677734 1.0752 1.37598 1.50391 2.08594l0.0253906 0.0126953l0.0703125 0.12207c0.410156 0.652344 0.755859 1.33789 1.0752 2.01562l0.134766 0.262695
238
+ l0.115234 0.300781c0.275391 0.65918 0.537109 1.33789 0.691406 2.02246l0.0761719 0.192383v0.0439453c0.210938 0.78125 0.333008 1.5752 0.397461 2.3623zM342.624 192.947l0.0253906 0.998047l-0.43457 50.0166l-0.0771484 -1.2998
239
+ c-0.0576172 -0.607422 -0.172852 -1.21582 -0.300781 -1.81738c-3.66113 18.0225 -40.5762 32.7168 -85.5742 33.4082c-44.96 0.691406 -81.7344 -12.8262 -85.3701 -30.7012l-0.0898438 0.448242l-0.146484 0.774414
240
+ c-0.0830078 0.608398 -0.12207 1.21582 -0.12207 1.82422l0.0517578 -5.60059c-0.00683594 -0.133789 -0.0517578 -0.268555 -0.0517578 -0.40332c0 -0.15332 0.0517578 -0.293945 0.0576172 -0.441406l0.37793 -43.5645c0 -0.614258 0.0449219 -1.22266 0.121094 -1.81738
241
+ l0.102539 -0.550781l0.25 -1.24805l0.210938 -0.652344l0.352539 -1.12012l0.300781 -0.698242l0.473633 -1.04297l0.402344 -0.729492l0.570312 -0.998047l0.518555 -0.736328l0.65918 -0.93457l0.607422 -0.742188l0.787109 -0.93457l0.698242 -0.722656
242
+ l0.863281 -0.889648l0.806641 -0.736328l0.947266 -0.851562l0.896484 -0.722656l1.03613 -0.826172l0.999023 -0.716797l1.10645 -0.774414l1.10742 -0.716797l1.16504 -0.735352l1.20312 -0.704102l1.22852 -0.704102l1.29297 -0.68457l1.30566 -0.666016
243
+ l1.40137 -0.677734l1.3252 -0.62793l1.50977 -0.671875l1.38281 -0.588867l0.460938 -0.191406l0.844727 -0.345703c0.723633 -0.275391 1.43359 -0.563477 2.17578 -0.838867l1.36328 -0.499023c0.78125 -0.275391 1.54883 -0.550781 2.34277 -0.8125l0.895508 -0.313477
244
+ l0.282227 -0.0839844c1.89355 -0.614258 3.85254 -1.19043 5.86816 -1.74023l0.505859 -0.154297l0.40332 -0.0957031c1.70215 -0.473633 3.45605 -0.908203 5.23535 -1.31152l0.499023 -0.12207l0.716797 -0.140625c1.60645 -0.345703 3.21289 -0.68457 4.87012 -1.00488
245
+ l0.300781 -0.0703125l0.0771484 -0.0126953c1.66406 -0.313477 3.35352 -0.601562 5.05566 -0.864258l0.65332 -0.121094l0.792969 -0.12207c1.37598 -0.198242 2.76465 -0.396484 4.17969 -0.576172l0.825195 -0.115234l0.268555 -0.0380859
246
+ c1.67773 -0.198242 3.37988 -0.37793 5.10156 -0.537109l0.53125 -0.0644531l0.959961 -0.0830078c1.36914 -0.12207 2.75195 -0.217773 4.14648 -0.326172l1.00488 -0.0712891l0.499023 -0.0253906c1.82422 -0.12793 3.67383 -0.198242 5.53613 -0.261719
247
+ l0.397461 -0.0263672c1.1709 -0.0380859 2.3418 -0.0761719 3.51367 -0.0830078c1.16406 -0.0195312 2.29688 -0.0253906 3.44238 -0.0253906l0.384766 0.00585938c2.20117 0.00683594 4.37109 0.0517578 6.53418 0.128906h0.671875l0.518555 0.0380859
248
+ c2.65625 0.0957031 5.26074 0.262695 7.80762 0.460938l0.543945 0.0253906l0.486328 0.0507812c2.20215 0.199219 4.35254 0.410156 6.46484 0.671875l1.08789 0.128906c2.10547 0.261719 4.19141 0.5625 6.2207 0.889648l0.40918 0.0380859l0.473633 0.102539
249
+ c2.48926 0.421875 4.92188 0.895508 7.27734 1.40723l0.844727 0.154297c2.34863 0.524414 4.60742 1.10059 6.80273 1.71484l0.441406 0.115234l0.300781 0.102539c1.88867 0.537109 3.73828 1.11328 5.49121 1.71484l0.761719 0.25
250
+ c1.7666 0.626953 3.46875 1.27344 5.09473 1.93945l0.390625 0.133789l0.40918 0.192383c0.716797 0.293945 1.43359 0.607422 2.11816 0.93457l0.959961 0.421875c0.864258 0.422852 1.72852 0.851562 2.56055 1.28711l0.261719 0.12793l0.0517578 0.0380859
251
+ c1.47852 0.787109 2.86035 1.59961 4.15332 2.45117l0.217773 0.115234l0.0771484 0.0576172c1.05566 0.678711 2.02832 1.40137 2.95605 2.125l0.358398 0.249023l0.25 0.217773c0.838867 0.65918 1.62598 1.35059 2.34863 2.03516l0.102539 0.0898438l0.223633 0.249023
252
+ c0.588867 0.583008 1.13965 1.17188 1.63867 1.78613l0.275391 0.288086l0.160156 0.223633c0.563477 0.68457 1.0752 1.38867 1.50391 2.08691l0.0253906 0.0253906l0.0703125 0.102539c0.410156 0.671875 0.755859 1.35059 1.0752 2.02246l0.134766 0.275391
253
+ l0.115234 0.300781c0.275391 0.65918 0.537109 1.33105 0.691406 2.02148l0.0761719 0.186523v0.0439453c0.210938 0.78125 0.333008 1.5752 0.397461 2.375z" />
254
+ <glyph glyph-name="uniF114" unicode="&#xf114;"
255
+ d="M342.15 99.4111l0.0898438 1.29883l0.43457 -50.0029l-0.0380859 -1.03027l-0.0507812 -0.262695c-0.0644531 -0.799805 -0.199219 -1.58691 -0.397461 -2.37402v-0.0322266l-0.0761719 -0.172852c-0.154297 -0.68457 -0.416016 -1.36914 -0.691406 -2.03516
256
+ l-0.115234 -0.293945l-0.134766 -0.269531c-0.319336 -0.671875 -0.671875 -1.35645 -1.0752 -2.02148l-0.0703125 -0.102539l-0.0253906 -0.0263672c-0.428711 -0.709961 -0.94043 -1.40137 -1.50391 -2.08594l-0.15332 -0.217773l-0.275391 -0.306641
257
+ c-0.505859 -0.595703 -1.05664 -1.18457 -1.64453 -1.76074l-0.224609 -0.261719l-0.102539 -0.0898438c-0.722656 -0.68457 -1.50977 -1.37598 -2.34863 -2.04785l-0.249023 -0.211914l-0.352539 -0.249023c-0.93457 -0.716797 -1.90723 -1.44043 -2.96289 -2.1123
258
+ l-0.0771484 -0.0634766l-0.217773 -0.12793c-1.29297 -0.826172 -2.6748 -1.66406 -4.15332 -2.44531l-0.0507812 -0.0322266l-0.262695 -0.133789c-0.826172 -0.428711 -1.68359 -0.864258 -2.56055 -1.26758l-0.959961 -0.435547
259
+ c-0.68457 -0.306641 -1.40137 -0.620117 -2.11816 -0.933594l-0.40332 -0.185547l-0.383789 -0.134766c-1.62598 -0.68457 -3.32129 -1.33105 -5.09473 -1.94531l-0.760742 -0.25c-1.76074 -0.601562 -3.59082 -1.19043 -5.48535 -1.71484l-0.313477 -0.109375
260
+ l-0.435547 -0.108398c-2.18848 -0.614258 -4.4668 -1.19043 -6.80273 -1.70215l-0.851562 -0.185547c-2.36133 -0.512695 -4.78711 -0.979492 -7.27637 -1.38965l-0.473633 -0.0888672l-0.410156 -0.0644531c-2.03516 -0.338867 -4.1084 -0.626953 -6.21387 -0.889648
261
+ l-1.08789 -0.133789c-2.1123 -0.25 -4.2627 -0.473633 -6.46387 -0.65332l-0.486328 -0.0507812l-0.544922 -0.0390625c-2.55957 -0.198242 -5.15137 -0.345703 -7.80762 -0.447266l-0.518555 -0.0263672l-0.665039 -0.0126953
262
+ c-2.15723 -0.0761719 -4.32715 -0.121094 -6.53516 -0.133789l-0.389648 -0.00683594c-1.13965 0 -2.27832 0.00683594 -3.4375 0.0322266c-1.1709 0.0195312 -2.3418 0.0380859 -3.51367 0.0898438l-0.396484 0.0126953
263
+ c-1.8623 0.0634766 -3.71191 0.140625 -5.53613 0.261719l-0.499023 0.0263672l-1.00488 0.0761719c-1.39551 0.102539 -2.77734 0.198242 -4.14746 0.327148l-0.959961 0.0761719l-0.53125 0.0644531c-1.7207 0.160156 -3.41699 0.338867 -5.10059 0.549805
264
+ l-0.268555 0.0263672l-0.825195 0.121094c-1.41504 0.185547 -2.80371 0.383789 -4.17969 0.588867l-0.793945 0.108398l-0.652344 0.115234c-1.70215 0.262695 -3.3916 0.550781 -5.05566 0.876953h-0.0771484l-0.300781 0.0771484
265
+ c-1.65723 0.313477 -3.26367 0.646484 -4.87012 0.998047l-0.716797 0.134766l-0.5 0.12793c-1.77832 0.421875 -3.53223 0.851562 -5.23438 1.31152l-0.40332 0.0898438l-0.505859 0.160156c-2.02246 0.543945 -3.98047 1.12012 -5.86914 1.73438l-0.28125 0.0957031
266
+ l-0.896484 0.307617c-0.792969 0.275391 -1.56152 0.537109 -2.3418 0.8125l-1.36328 0.505859c-0.736328 0.268555 -1.44629 0.556641 -2.17578 0.844727l-0.844727 0.326172l-0.460938 0.211914l-1.38281 0.587891l-1.50977 0.666016l-1.3252 0.639648l-1.40137 0.666016
267
+ l-1.30566 0.678711l-1.29297 0.677734l-1.22852 0.704102l-1.20312 0.710938l-1.16504 0.722656l-1.10742 0.723633l-1.10742 0.774414l-0.998047 0.722656l-1.03711 0.826172l-0.895508 0.722656l-0.947266 0.851562l-0.806641 0.729492l-0.864258 0.882812
268
+ l-0.697266 0.736328l-0.787109 0.927734l-0.608398 0.736328l-0.65918 0.947266l-0.518555 0.736328l-0.569336 0.985352l-0.40332 0.729492l-0.473633 1.0498l-0.300781 0.697266l-0.351562 1.11328l-0.210938 0.666016l-0.25 1.24121l-0.102539 0.543945
269
+ c-0.0830078 0.615234 -0.121094 1.19727 -0.121094 1.81836l-0.435547 50.0029c0 -0.601562 0.0380859 -1.20312 0.12207 -1.81152l0.146484 -0.767578l0.198242 -1.02441l0.269531 -0.870117l0.293945 -0.902344l0.37793 -0.876953l0.383789 -0.889648l0.499023 -0.850586
270
+ l0.511719 -0.876953l0.576172 -0.832031l0.601562 -0.851562l0.671875 -0.8125l0.691406 -0.871094l0.761719 -0.787109l0.8125 -0.825195l0.845703 -0.754883l0.915039 -0.832031l0.93457 -0.743164l1.00391 -0.799805l1.01172 -0.729492l1.08789 -0.774414
271
+ l1.08203 -0.697266l1.18359 -0.761719l1.17773 -0.671875l1.26074 -0.736328l1.26074 -0.665039l1.33105 -0.685547l1.33789 -0.65918l1.4209 -0.665039l1.40723 -0.640625l1.47266 -0.639648l1.26074 -0.499023c0.722656 -0.300781 1.45312 -0.588867 2.20117 -0.864258
272
+ l1.35742 -0.505859c0.754883 -0.261719 1.5293 -0.537109 2.31641 -0.799805l1.20312 -0.40332c1.90137 -0.607422 3.86621 -1.19043 5.8877 -1.74023l0.858398 -0.237305c1.72168 -0.460938 3.4873 -0.902344 5.2793 -1.31152l1.17188 -0.262695
273
+ c1.59961 -0.345703 3.22559 -0.697266 4.87695 -1.01074l0.40918 -0.102539c1.66406 -0.313477 3.36621 -0.601562 5.08789 -0.876953l1.37598 -0.210938c1.4082 -0.199219 2.81641 -0.416016 4.25586 -0.588867l1.03711 -0.134766
274
+ c1.68945 -0.205078 3.39844 -0.390625 5.13867 -0.537109l1.43359 -0.134766c1.39551 -0.12793 2.79688 -0.223633 4.21777 -0.333008l1.46582 -0.0957031c1.83008 -0.115234 3.68652 -0.198242 5.54883 -0.262695c1.29297 -0.0380859 2.5918 -0.0761719 3.91016 -0.102539
275
+ c1.28027 -0.0126953 2.55371 -0.0126953 3.81445 -0.0126953c2.19531 0 4.38379 0.0517578 6.53418 0.115234l1.2041 0.0449219c2.63672 0.102539 5.24707 0.268555 7.80762 0.454102l1.02441 0.0898438c2.18848 0.192383 4.33887 0.40332 6.46387 0.666016
276
+ l1.10059 0.133789c2.09863 0.262695 4.17871 0.556641 6.21387 0.896484l0.774414 0.12793c2.53516 0.428711 4.98633 0.902344 7.37305 1.41406l0.826172 0.185547c2.36133 0.512695 4.63965 1.08203 6.83496 1.69629l0.704102 0.185547
277
+ c1.91309 0.550781 3.75684 1.13281 5.54199 1.73438l0.710938 0.237305c1.75293 0.614258 3.44922 1.26074 5.0752 1.92578l0.875977 0.37793c0.698242 0.293945 1.37012 0.588867 2.03516 0.895508l0.986328 0.448242c0.959961 0.473633 1.90039 0.93457 2.80957 1.41406
278
+ c1.52246 0.806641 2.96289 1.6582 4.28809 2.52246l0.198242 0.12793c1.08789 0.697266 2.08008 1.42676 3.02734 2.16309l0.537109 0.416016c0.851562 0.68457 1.6582 1.37598 2.3877 2.08594l0.300781 0.300781c0.594727 0.595703 1.13867 1.19043 1.66406 1.79883
279
+ l0.441406 0.524414c0.53125 0.678711 1.06836 1.37598 1.49121 2.06738l0.115234 0.15332c0.396484 0.666016 0.735352 1.33789 1.0625 2.00391l0.236328 0.575195c0.288086 0.65332 0.525391 1.33789 0.710938 2.02246l0.0761719 0.230469
280
+ c0.192383 0.78125 0.313477 1.57422 0.390625 2.36816zM342.15 171.053l0.0898438 1.33105l0.43457 -50.0029l-0.0380859 -1.03027l-0.0507812 -0.275391c-0.0644531 -0.787109 -0.199219 -1.58105 -0.397461 -2.36133v-0.0449219l-0.0761719 -0.185547
281
+ c-0.154297 -0.68457 -0.416016 -1.35742 -0.691406 -2.02246l-0.115234 -0.300781l-0.134766 -0.262695c-0.319336 -0.68457 -0.671875 -1.35645 -1.0752 -2.02246l-0.0703125 -0.115234l-0.0253906 -0.0253906c-0.428711 -0.697266 -0.94043 -1.40137 -1.50391 -2.08594
282
+ l-0.15332 -0.211914l-0.275391 -0.300781c-0.505859 -0.594727 -1.05664 -1.19629 -1.64453 -1.77246l-0.224609 -0.255859l-0.102539 -0.0830078c-0.722656 -0.704102 -1.50977 -1.37598 -2.34863 -2.04883l-0.249023 -0.223633l-0.352539 -0.236328
283
+ c-0.93457 -0.723633 -1.90723 -1.44727 -2.96289 -2.125l-0.0771484 -0.0644531l-0.217773 -0.115234c-1.29297 -0.837891 -2.6748 -1.66406 -4.15332 -2.45117l-0.0507812 -0.0380859l-0.262695 -0.12793c-0.826172 -0.435547 -1.68359 -0.864258 -2.56055 -1.28027
284
+ l-0.959961 -0.428711c-0.68457 -0.326172 -1.40137 -0.633789 -2.11816 -0.93457l-0.40332 -0.178711l-0.383789 -0.134766c-1.62598 -0.697266 -3.32129 -1.3252 -5.09473 -1.95215l-0.760742 -0.249023c-1.76074 -0.601562 -3.59082 -1.18457 -5.48535 -1.70898
285
+ l-0.313477 -0.12207l-0.435547 -0.102539c-2.18848 -0.614258 -4.4668 -1.17676 -6.80273 -1.69531l-0.851562 -0.179688c-2.36133 -0.511719 -4.78711 -0.992188 -7.27637 -1.40137l-0.473633 -0.0898438l-0.410156 -0.0507812
286
+ c-2.03516 -0.339844 -4.1084 -0.633789 -6.21387 -0.902344l-1.08789 -0.134766c-2.1123 -0.249023 -4.2627 -0.473633 -6.46387 -0.652344l-0.486328 -0.0517578l-0.544922 -0.0322266c-2.55957 -0.204102 -5.15137 -0.351562 -7.80762 -0.454102l-0.518555 -0.0380859
287
+ l-0.665039 -0.0126953c-2.15723 -0.0644531 -4.32715 -0.12793 -6.53516 -0.12793h-0.389648c-1.13965 0 -2.27832 0 -3.4375 0.0126953c-1.1709 0.0253906 -2.3418 0.0576172 -3.51367 0.0898438l-0.396484 0.0253906
288
+ c-1.8623 0.0634766 -3.71191 0.146484 -5.53613 0.255859l-0.499023 0.0322266l-1.00488 0.0761719c-1.39551 0.0898438 -2.77734 0.198242 -4.14746 0.327148l-0.959961 0.0703125l-0.53125 0.0634766c-1.7207 0.15332 -3.41699 0.345703 -5.10059 0.550781
289
+ l-0.268555 0.0322266l-0.825195 0.115234c-1.41504 0.185547 -2.80371 0.376953 -4.17969 0.587891l-0.793945 0.115234l-0.652344 0.115234c-1.70215 0.262695 -3.3916 0.557617 -5.05566 0.871094l-0.0771484 0.0126953l-0.300781 0.0703125
290
+ c-1.65723 0.313477 -3.26367 0.633789 -4.87012 1.00488l-0.716797 0.133789l-0.5 0.134766c-1.77832 0.40332 -3.53223 0.838867 -5.23438 1.29883l-0.40332 0.109375l-0.505859 0.140625c-2.02246 0.550781 -3.98047 1.12012 -5.86914 1.75391l-0.28125 0.0761719
291
+ l-0.896484 0.307617c-0.792969 0.275391 -1.56152 0.543945 -2.3418 0.825195l-1.36328 0.499023c-0.736328 0.275391 -1.44629 0.557617 -2.17578 0.838867l-0.844727 0.345703l-0.460938 0.192383l-1.38281 0.587891l-1.50977 0.666016l-1.3252 0.639648
292
+ l-1.40137 0.685547l-1.30566 0.665039l-1.29297 0.68457l-1.22852 0.710938l-1.20312 0.697266l-1.16504 0.736328l-1.10742 0.722656l-1.10742 0.761719l-0.998047 0.729492l-1.03711 0.819336l-0.895508 0.723633l-0.947266 0.850586l-0.806641 0.736328
293
+ l-0.864258 0.889648l-0.697266 0.723633l-0.787109 0.927734l-0.608398 0.736328l-0.65918 0.947266l-0.518555 0.735352l-0.569336 0.992188l-0.40332 0.723633l-0.473633 1.04883l-0.300781 0.704102l-0.351562 1.11426l-0.210938 0.665039l-0.25 1.24219
294
+ l-0.102539 0.549805c-0.0830078 0.614258 -0.121094 1.20312 -0.121094 1.81738l-0.435547 50.0098c0 -0.614258 0.0380859 -1.22266 0.12207 -1.82422l0.146484 -0.774414l0.198242 -1.01074l0.269531 -0.864258l0.293945 -0.915039l0.37793 -0.864258l0.383789 -0.889648
295
+ l0.499023 -0.850586l0.511719 -0.883789l0.576172 -0.837891l0.601562 -0.857422l0.671875 -0.813477l0.691406 -0.850586l0.761719 -0.787109l0.8125 -0.838867l0.845703 -0.761719l0.915039 -0.825195l0.93457 -0.736328l1.00391 -0.8125l1.01172 -0.710938
296
+ l1.08789 -0.780273l1.08203 -0.704102l1.18359 -0.749023l1.17773 -0.678711l1.26074 -0.729492l1.26074 -0.665039l1.33105 -0.698242l1.33789 -0.652344l1.4209 -0.671875l1.40723 -0.621094l1.47266 -0.633789l1.26074 -0.511719
297
+ c0.722656 -0.288086 1.45312 -0.576172 2.20117 -0.864258l1.36328 -0.492188c0.755859 -0.288086 1.53027 -0.550781 2.31738 -0.813477l1.20312 -0.402344c1.90039 -0.602539 3.86523 -1.2041 5.8877 -1.75391l0.857422 -0.237305
298
+ c1.72168 -0.459961 3.48828 -0.895508 5.28027 -1.31152l1.1709 -0.25c1.60059 -0.358398 3.22559 -0.697266 4.87695 -1.02344l0.40332 -0.0771484c1.66406 -0.320312 3.36621 -0.594727 5.08789 -0.870117l1.37598 -0.205078
299
+ c1.4082 -0.210938 2.81641 -0.421875 4.25586 -0.608398l1.03711 -0.133789c1.68945 -0.192383 3.39844 -0.390625 5.13867 -0.550781l1.43359 -0.12793c1.39551 -0.12793 2.79688 -0.236328 4.21777 -0.338867l1.46582 -0.0898438
300
+ c1.83008 -0.121094 3.68652 -0.210938 5.54883 -0.275391c1.29297 -0.0380859 2.5918 -0.0830078 3.91016 -0.0957031c1.28027 -0.0253906 2.55371 -0.0253906 3.81445 -0.0253906c2.19531 0 4.38379 0.0507812 6.53418 0.121094l1.2041 0.0644531
301
+ c2.63672 0.0898438 5.24707 0.249023 7.80762 0.448242l1.02441 0.0888672c2.18848 0.192383 4.33887 0.40332 6.46387 0.65332l1.10059 0.133789c2.09863 0.262695 4.17871 0.550781 6.21387 0.883789l0.774414 0.133789c2.53516 0.442383 4.98633 0.902344 7.37305 1.4209
302
+ l0.826172 0.179688c2.36133 0.524414 4.63965 1.10059 6.83496 1.70898l0.704102 0.191406c1.91309 0.538086 3.75684 1.11426 5.54199 1.72852l0.710938 0.243164c1.75293 0.607422 3.44922 1.24805 5.0752 1.91992l0.875977 0.351562
303
+ c0.698242 0.300781 1.37012 0.621094 2.03516 0.915039l0.986328 0.448242c0.959961 0.467773 1.90039 0.93457 2.80957 1.4209c1.52246 0.799805 2.96289 1.64453 4.28809 2.50879l0.198242 0.134766c1.08789 0.704102 2.08008 1.42676 3.02734 2.16895l0.537109 0.410156
304
+ c0.851562 0.665039 1.6582 1.37598 2.3877 2.07324l0.300781 0.313477c0.594727 0.588867 1.13867 1.17773 1.66406 1.79199l0.441406 0.518555c0.53125 0.671875 1.06836 1.38867 1.49121 2.07422l0.115234 0.15918c0.396484 0.666016 0.735352 1.33203 1.0625 2.00391
305
+ l0.236328 0.5625c0.288086 0.671875 0.525391 1.35059 0.710938 2.02246l0.0761719 0.237305c0.192383 0.787109 0.313477 1.57422 0.390625 2.36133zM342.15 242.694l0.0703125 1.31836l0.441406 -50.0156l-0.0380859 -1.03027l-0.0576172 -0.256836
306
+ c-0.0644531 -0.805664 -0.192383 -1.59277 -0.390625 -2.37402v-0.0253906l-0.0761719 -0.185547c-0.160156 -0.68457 -0.410156 -1.35059 -0.698242 -2.0166l-0.108398 -0.306641l-0.140625 -0.275391c-0.313477 -0.678711 -0.671875 -1.35059 -1.0752 -2.01562
307
+ l-0.0644531 -0.109375l-0.0253906 -0.0253906c-0.435547 -0.704102 -0.947266 -1.40137 -1.51074 -2.08008l-0.146484 -0.223633l-0.275391 -0.288086c-0.505859 -0.608398 -1.0625 -1.19727 -1.63867 -1.78613l-0.236328 -0.249023l-0.102539 -0.0898438
308
+ c-0.723633 -0.691406 -1.51074 -1.36914 -2.34961 -2.03516l-0.249023 -0.223633l-0.352539 -0.25c-0.927734 -0.723633 -1.90039 -1.44043 -2.95605 -2.125l-0.0771484 -0.0507812l-0.217773 -0.12793c-1.29297 -0.844727 -2.6748 -1.6582 -4.16016 -2.44531
309
+ l-0.0507812 -0.0380859l-0.262695 -0.134766c-0.825195 -0.428711 -1.67676 -0.850586 -2.55957 -1.28613l-0.954102 -0.416016c-0.69043 -0.320312 -1.40137 -0.633789 -2.11816 -0.93457l-0.40332 -0.185547l-0.390625 -0.133789
310
+ c-1.625 -0.678711 -3.32715 -1.3125 -5.09375 -1.93945l-0.761719 -0.25c-1.75391 -0.601562 -3.59082 -1.17773 -5.49121 -1.71484l-0.300781 -0.102539l-0.441406 -0.115234c-2.18945 -0.614258 -4.46094 -1.19043 -6.80371 -1.71484l-0.844727 -0.154297
311
+ c-2.35547 -0.511719 -4.78711 -0.998047 -7.27637 -1.40137l-0.473633 -0.108398l-0.40332 -0.0517578c-2.04199 -0.326172 -4.11523 -0.620117 -6.2207 -0.889648l-1.08789 -0.12793c-2.1123 -0.261719 -4.2627 -0.486328 -6.46484 -0.665039l-0.486328 -0.0576172
312
+ l-0.543945 -0.0263672c-2.56641 -0.191406 -5.15137 -0.344727 -7.80762 -0.454102l-0.518555 -0.0449219h-0.671875c-2.15723 -0.0761719 -4.32617 -0.115234 -6.53418 -0.12793l-0.383789 -0.00585938c-1.14648 0 -2.28516 0.00585938 -3.44336 0.03125
313
+ c-1.17188 0 -2.34277 0.0390625 -3.51367 0.0771484l-0.397461 0.0253906c-1.8623 0.0644531 -3.71191 0.134766 -5.53516 0.262695l-0.5 0.0253906l-1.00391 0.0703125c-1.39551 0.109375 -2.77832 0.205078 -4.14746 0.333008l-0.959961 0.0771484l-0.53125 0.0634766
314
+ c-1.72168 0.160156 -3.41797 0.339844 -5.10059 0.538086l-0.269531 0.0380859l-0.825195 0.115234c-1.41406 0.179688 -2.80371 0.383789 -4.17969 0.576172l-0.792969 0.121094l-0.65332 0.12207c-1.70215 0.262695 -3.3916 0.550781 -5.05566 0.864258
315
+ l-0.0771484 0.0126953l-0.300781 0.0703125c-1.65723 0.320312 -3.26367 0.652344 -4.87012 1.00488l-0.716797 0.147461l-0.499023 0.114258c-1.7793 0.410156 -3.5332 0.845703 -5.23535 1.3125l-0.40332 0.0957031l-0.505859 0.154297
316
+ c-2.02246 0.537109 -3.98047 1.11328 -5.86816 1.74023l-0.282227 0.0830078l-0.895508 0.313477c-0.793945 0.262695 -1.56152 0.538086 -2.34277 0.813477l-1.36328 0.499023c-0.735352 0.275391 -1.44629 0.563477 -2.17578 0.837891l-0.844727 0.345703
317
+ l-0.460938 0.192383l-1.38184 0.588867l-1.51074 0.671875l-1.3252 0.633789l-1.40137 0.678711l-1.30566 0.665039l-1.29297 0.678711l-1.22852 0.704102l-1.20312 0.704102l-1.16504 0.735352l-1.10742 0.716797l-1.10645 0.774414l-0.999023 0.716797l-1.03613 0.832031
318
+ l-0.896484 0.716797l-0.947266 0.851562l-0.806641 0.735352l-0.863281 0.896484l-0.698242 0.716797l-0.787109 0.93457l-0.607422 0.742188l-0.65918 0.93457l-0.518555 0.736328l-0.569336 0.998047l-0.40332 0.729492l-0.473633 1.04297l-0.300781 0.698242
319
+ l-0.352539 1.11914l-0.210938 0.65332l-0.25 1.24805l-0.102539 0.549805c-0.0830078 0.602539 -0.121094 1.2041 -0.121094 1.81836l-0.37793 43.5645c-0.00585938 0.147461 -0.0576172 0.294922 -0.0576172 0.441406c0 0.134766 0.0517578 0.269531 0.0517578 0.40332
320
+ l-0.0517578 5.60059c0 -0.608398 0.0390625 -1.2168 0.12207 -1.82422l0.147461 -0.774414l0.0888672 -0.448242c3.63574 17.875 40.4102 31.3916 85.3701 30.7012c44.998 -0.691406 81.9131 -15.3857 85.5742 -33.4082c0.12793 0.607422 0.243164 1.20898 0.300781 1.81738
321
+ z" />
322
+ <glyph glyph-name="uniF11B" unicode="&#xf11b;"
323
+ d="M404.666 185.6c4.95996 0 7.57715 -1.06836 7.8457 -2.82227c0 -0.524414 -0.93457 -2.98828 -2.79688 -7.0459l-56.0508 -111.731h-226.374l57.3184 112.378c1.94531 3.87207 3.83984 5.97754 5.69531 7.07812c1.8623 1.08789 5.22949 2.14355 10.1318 2.14355h204.23z
324
+ M175.584 203.872c-2.18848 -1.24805 -6.8418 -5.22852 -10.8027 -12.9092l-55.9814 -105.549v133.626c0 3.96191 2.21484 7.41113 3.52637 8.64648c1.31836 1.22266 5.55566 2.71387 9.60645 2.71387h7.85254c5.65137 0 9.29297 -0.179688 10.9385 0.920898
325
+ c1.65039 1.08203 3.1543 3.33496 4.49902 8.12793l1.52246 6.11914c1.01172 3.63477 2.43262 6.61719 4.29492 7.70508c1.8623 1.00488 5.49121 2.72656 10.8799 2.72656h46.8291c4.7998 0 7.89746 -1.59375 9.29297 -2.55371
326
+ c1.39453 -0.972656 2.64258 -4.63379 3.7373 -8.76172l1.5166 -5.59375c1.17773 -4.81836 2.70117 -7.25098 4.55664 -8.17285c1.85645 -0.94043 6.74609 -0.517578 14.6758 -0.517578h87.9355c6.33594 0 8.73633 -4.98633 8.73633 -11.4824v-14.1182h-146.534
327
+ c-9.19043 0 -14.8809 0.352539 -17.082 -0.927734z" />
328
+ </font>
329
+ </defs></svg>
embedded/toolset/onthego-resources/onthegosystems-icons/fonts/onthegosystems-icons_8d9a6c3bf95bd4630d40a722f192ec47.ttf ADDED
Binary file
embedded/toolset/onthego-resources/onthegosystems-icons/fonts/onthegosystems-icons_8d9a6c3bf95bd4630d40a722f192ec47.woff ADDED
Binary file
embedded/toolset/onthego-resources/onthegosystems-icons/vectors/access-logo.svg ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
4
+ <svg version="1.1" baseProfile="tiny" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
5
+ x="0px" y="0px" width="80px" height="80px" viewBox="0 0 80 80" xml:space="preserve">
6
+ <g>
7
+ <path fill="#333333" d="M40.412,29.998c-2.914,0-5.285,2.371-5.285,5.285v3.521h10.57v-3.521
8
+ C45.697,32.369,43.326,29.998,40.412,29.998z"/>
9
+ <path fill="#333333" d="M58,16V4H46v12H34V4H22v12H10v60h60V16H58z M53.799,63.182c0,1.516-1.229,2.746-2.746,2.746H29.42
10
+ c-1.516,0-2.744-1.23-2.744-2.746V41.549c0-1.516,1.229-2.746,2.744-2.746h1.48v-3.521c0-5.245,4.268-9.512,9.512-9.512
11
+ c5.246,0,9.514,4.267,9.514,9.512v3.521h1.127c1.518,0,2.746,1.23,2.746,2.746V63.182z"/>
12
+ </g>
13
+ </svg>
embedded/toolset/onthego-resources/onthegosystems-icons/vectors/access.svg ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
4
+ <svg version="1.1" baseProfile="tiny" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
5
+ x="0px" y="0px" width="80px" height="80px" viewBox="0 0 80 80" xml:space="preserve">
6
+ <g>
7
+ <g>
8
+ <path fill="#333333" d="M53.799,63.182c0,1.516-1.229,2.746-2.746,2.746H29.42c-1.516,0-2.744-1.23-2.744-2.746V41.549
9
+ c0-1.516,1.229-2.746,2.744-2.746h21.633c1.518,0,2.746,1.23,2.746,2.746V63.182z"/>
10
+ <g>
11
+ <path fill="#333333" d="M49.926,45.672h-4.229V35.283c0-2.914-2.371-5.285-5.285-5.285s-5.285,2.371-5.285,5.285v8.98H30.9v-8.98
12
+ c0-5.245,4.268-9.512,9.512-9.512c5.246,0,9.514,4.267,9.514,9.512V45.672z"/>
13
+ </g>
14
+ </g>
15
+ </g>
16
+ </svg>
embedded/toolset/onthego-resources/onthegosystems-icons/vectors/bootstrap-logo.svg ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
4
+ <svg version="1.1" baseProfile="tiny" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
5
+ x="0px" y="0px" width="80px" height="80px" viewBox="0 0 80 80" xml:space="preserve">
6
+ <g>
7
+ <polygon fill="#333333" points="49.764,43.404 30.873,43.404 30.873,40.885 26.174,45.586 30.873,50.285 30.873,47.768
8
+ 49.764,47.768 49.764,50.285 54.463,45.586 49.764,40.885 "/>
9
+ <path fill="#333333" d="M58,16V4H46v12H34V4H22v12H10v60h60V16H58z M60.695,57.996c0,1.754-1.42,3.175-3.174,3.175h-14.75
10
+ c0.196,1.202,1.188,4.479,6.094,4.479v1.57h-7.879h-1.679h-7.88v-1.57c4.905,0,5.895-3.276,6.094-4.479H22.308
11
+ c-1.753,0-3.173-1.421-3.173-3.175V33.37c0-1.753,1.42-3.174,3.173-3.174h35.215c1.752,0,3.172,1.42,3.172,3.174V57.996
12
+ L60.695,57.996z"/>
13
+ </g>
14
+ </svg>
embedded/toolset/onthego-resources/onthegosystems-icons/vectors/bootstrap.svg ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
4
+ <svg version="1.1" baseProfile="tiny" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
5
+ x="0px" y="0px" width="80px" height="80px" viewBox="0 0 80 80" xml:space="preserve">
6
+ <g>
7
+ <g>
8
+ <path fill="#333333" d="M57.521,30.196H22.308c-1.753,0-3.173,1.42-3.173,3.174v24.626c0,1.754,1.42,3.175,3.173,3.175h15.214
9
+ c-0.199,1.202-1.188,4.479-6.094,4.479v1.57h7.88h1.678h7.88v-1.57c-4.905,0-5.896-3.276-6.095-4.479h14.752
10
+ c1.752,0,3.172-1.421,3.172-3.175V33.37C60.695,31.617,59.275,30.196,57.521,30.196z M49.764,50.285v-2.518H30.873v2.518
11
+ l-4.699-4.699l4.699-4.701v2.52h18.891v-2.52l4.699,4.701L49.764,50.285z"/>
12
+ </g>
13
+ </g>
14
+ </svg>
embedded/toolset/onthego-resources/onthegosystems-icons/vectors/conditional-alert.svg ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
4
+ <svg version="1.1" baseProfile="tiny" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
5
+ x="0px" y="0px" width="104.5px" height="91.5px" viewBox="0 0 104.5 91.5" xml:space="preserve">
6
+ <g>
7
+ <polygon fill="#939393" points="53.202,80.121 10.355,80.121 31.778,44.048 53.202,8.121 74.626,44.12 96.049,80.121 "/>
8
+ <g>
9
+ <path fill="#FFFFFF" d="M58.09,58.538h-9.567l-1.479-26.446h12.523L58.09,58.538z M47.16,68.323c0-1.696,0.522-3.014,1.566-3.957
10
+ c1.043-0.941,2.56-1.412,4.551-1.412c1.972,0,3.465,0.47,4.479,1.412s1.522,2.26,1.522,3.957c0,1.677-0.526,2.987-1.58,3.927
11
+ c-1.054,0.941-2.527,1.412-4.421,1.412c-1.913,0-3.411-0.47-4.494-1.412C47.701,71.31,47.16,70,47.16,68.323z"/>
12
+ </g>
13
+ </g>
14
+ </svg>
embedded/toolset/onthego-resources/onthegosystems-icons/vectors/conditional-if.svg ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
4
+ <svg version="1.1" baseProfile="tiny" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
5
+ x="0px" y="0px" width="90.5px" height="85.5px" viewBox="0 0 90.5 85.5" xml:space="preserve">
6
+ <g>
7
+ <circle fill="#939393" cx="46" cy="43" r="36"/>
8
+ <g>
9
+ <path fill="#FFFFFF" d="M40.655,33.135l-5.048,17.5c-0.266,1-0.397,1.663-0.397,1.989c0,0.164,0.071,0.327,0.214,0.49
10
+ c0.143,0.164,0.296,0.245,0.459,0.245c0.285,0,0.562-0.122,0.826-0.367c0.754-0.612,1.642-1.713,2.662-3.304l0.856,0.489
11
+ c-2.488,4.325-5.13,6.487-7.925,6.487c-1.061,0-1.907-0.301-2.539-0.903c-0.632-0.601-0.948-1.36-0.948-2.279
12
+ c0-0.612,0.142-1.388,0.429-2.325l3.427-11.78c0.326-1.121,0.489-1.968,0.489-2.539c0-0.367-0.158-0.693-0.474-0.979
13
+ c-0.316-0.285-0.74-0.429-1.27-0.429c-0.265,0-0.561,0.011-0.887,0.031l0.306-0.979l8.354-1.346L40.655,33.135L40.655,33.135z
14
+ M39.125,21.784c1.021,0,1.882,0.357,2.585,1.071c0.704,0.714,1.056,1.571,1.056,2.57c0,1-0.356,1.851-1.07,2.555
15
+ c-0.714,0.703-1.571,1.055-2.57,1.055c-0.979,0-1.82-0.352-2.524-1.055c-0.703-0.704-1.055-1.555-1.055-2.555
16
+ c0-0.999,0.347-1.856,1.04-2.57S38.125,21.784,39.125,21.784z"/>
17
+ <path fill="#FFFFFF" d="M55.004,36.684l-2.876,11.381c-1.346,5.386-2.657,9.281-3.932,11.688
18
+ c-1.275,2.407-2.774,4.191-4.497,5.354c-1.725,1.163-3.688,1.743-5.891,1.743c-1.406,0-2.437-0.271-3.09-0.811
19
+ c-0.652-0.541-0.979-1.168-0.979-1.882c0-0.673,0.271-1.254,0.811-1.744c0.541-0.49,1.26-0.735,2.157-0.735
20
+ c0.734,0,1.296,0.188,1.683,0.566c0.389,0.377,0.581,0.852,0.581,1.423c0,0.53-0.122,0.923-0.367,1.178
21
+ c-0.244,0.255-0.366,0.423-0.366,0.505l0.122,0.153c0.102,0.081,0.225,0.122,0.366,0.122c0.49,0,0.908-0.153,1.255-0.459
22
+ c0.856-0.775,1.5-1.713,1.928-2.814c0.306-0.756,0.877-2.743,1.713-5.967l5.018-19.703h-3.427l0.826-2.876
23
+ c1.224,0.021,2.116-0.132,2.677-0.459c0.562-0.326,1.148-1.06,1.759-2.203c1.815-3.345,3.723-5.742,5.723-7.19
24
+ c1.999-1.448,4.231-2.172,6.699-2.172c1.571,0,2.714,0.306,3.428,0.918c0.713,0.612,1.071,1.407,1.071,2.387
25
+ c0,0.836-0.235,1.504-0.703,2.004c-0.471,0.5-1.062,0.75-1.774,0.75c-0.653,0-1.193-0.204-1.622-0.612
26
+ c-0.429-0.408-0.642-0.897-0.642-1.468c0-0.408,0.138-0.842,0.413-1.3c0.274-0.458,0.413-0.77,0.413-0.933
27
+ c0-0.184-0.062-0.331-0.185-0.444c-0.122-0.112-0.286-0.168-0.49-0.168c-0.979,0-1.979,0.592-2.998,1.774
28
+ c-1.673,1.938-3.019,4.977-4.039,9.117h3.58l-0.855,2.876H55.004L55.004,36.684z"/>
29
+ </g>
30
+ </g>
31
+ </svg>
embedded/toolset/onthego-resources/onthegosystems-icons/vectors/cred-logo.svg ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
4
+ <svg version="1.1" baseProfile="tiny" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
5
+ x="0px" y="0px" width="80px" height="80px" viewBox="0 0 80 80" xml:space="preserve">
6
+ <g>
7
+ <path fill="#333333" d="M58,16V4H46v12H34V4H22v12H10v60h60V16H58z M53.535,62.24l-0.008,0.041
8
+ c-0.01,0.123-0.029,0.248-0.062,0.369v0.009l-0.012,0.028c-0.024,0.106-0.065,0.215-0.108,0.317l-0.018,0.046l-0.021,0.043
9
+ c-0.05,0.105-0.104,0.213-0.168,0.315l-0.011,0.016l-0.004,0.005c-0.067,0.11-0.147,0.219-0.235,0.325l-0.025,0.034l-0.043,0.048
10
+ c-0.078,0.095-0.164,0.187-0.256,0.274l-0.035,0.043l-0.016,0.013c-0.113,0.108-0.236,0.215-0.367,0.319l-0.039,0.033l-0.056,0.039
11
+ c-0.145,0.113-0.297,0.226-0.462,0.332l-0.011,0.01l-0.034,0.02c-0.202,0.129-0.418,0.26-0.65,0.383l-0.008,0.004l-0.041,0.021
12
+ c-0.129,0.067-0.264,0.135-0.4,0.198l-0.149,0.068c-0.108,0.051-0.219,0.1-0.331,0.147L49.9,65.77l-0.061,0.021
13
+ c-0.254,0.105-0.52,0.208-0.796,0.305l-0.119,0.038c-0.274,0.095-0.563,0.185-0.858,0.269l-0.047,0.016l-0.069,0.016
14
+ c-0.343,0.098-0.696,0.187-1.063,0.267l-0.132,0.028c-0.368,0.08-0.748,0.152-1.137,0.217l-0.074,0.015l-0.063,0.011
15
+ c-0.317,0.051-0.643,0.098-0.972,0.139l-0.17,0.021c-0.33,0.038-0.666,0.072-1.01,0.103l-0.076,0.006l-0.085,0.007
16
+ c-0.398,0.032-0.805,0.056-1.22,0.071l-0.081,0.004l-0.105,0.002c-0.338,0.012-0.677,0.019-1.021,0.021h-0.06
17
+ c-0.179,0-0.356,0-0.538-0.005c-0.183-0.003-0.366-0.006-0.549-0.013l-0.062-0.002c-0.291-0.01-0.58-0.023-0.865-0.041
18
+ l-0.078-0.004l-0.157-0.012c-0.218-0.017-0.434-0.031-0.648-0.052l-0.15-0.012l-0.083-0.009c-0.269-0.026-0.535-0.055-0.797-0.088
19
+ l-0.042-0.002l-0.129-0.02c-0.221-0.027-0.438-0.059-0.653-0.092l-0.124-0.016l-0.102-0.019c-0.266-0.041-0.53-0.086-0.79-0.136
20
+ l-0.012-0.002l-0.047-0.01c-0.259-0.049-0.51-0.104-0.761-0.156l-0.112-0.022l-0.078-0.021c-0.278-0.065-0.552-0.133-0.818-0.204
21
+ l-0.063-0.015l-0.079-0.024c-0.315-0.087-0.621-0.177-0.917-0.271l-0.044-0.016l-0.14-0.048c-0.124-0.043-0.244-0.084-0.366-0.127
22
+ l-0.213-0.079c-0.116-0.042-0.227-0.087-0.34-0.133l-0.132-0.051l-0.072-0.031l-0.216-0.092l-0.236-0.104l-0.207-0.099
23
+ l-0.219-0.105l-0.204-0.105l-0.202-0.107l-0.192-0.111l-0.188-0.109l-0.182-0.114l-0.173-0.112l-0.173-0.123l-0.156-0.113
24
+ l-0.162-0.127l-0.14-0.114l-0.148-0.134l-0.126-0.113l-0.135-0.139l-0.109-0.114L27.43,63.43l-0.095-0.115l-0.103-0.147
25
+ l-0.081-0.114l-0.089-0.156l-0.063-0.113l-0.074-0.164l-0.047-0.109l-0.055-0.174l-0.033-0.104l-0.039-0.195l-0.016-0.085
26
+ c-0.012-0.095-0.019-0.188-0.019-0.284l-0.068-7.814c0,0.096,0.006,0.189,0.019,0.285l0.023,0.119l0.031,0.16l0.042,0.135
27
+ l0.046,0.143l0.059,0.136l0.06,0.14l0.078,0.133l0.08,0.135l0.09,0.131l0.094,0.133l0.105,0.127l0.108,0.135l0.119,0.123
28
+ l0.127,0.129l0.132,0.119l0.143,0.129l0.146,0.117l0.157,0.125l0.158,0.114l0.17,0.121l0.169,0.11l0.185,0.119l0.184,0.104
29
+ l0.197,0.114l0.197,0.104l0.208,0.108l0.209,0.103l0.222,0.104l0.22,0.099l0.23,0.099l0.197,0.08
30
+ c0.113,0.045,0.228,0.09,0.344,0.133l0.212,0.078c0.118,0.043,0.24,0.086,0.362,0.127l0.188,0.063
31
+ c0.297,0.097,0.604,0.188,0.92,0.273l0.134,0.037c0.27,0.071,0.545,0.141,0.825,0.205l0.183,0.04
32
+ c0.25,0.056,0.504,0.109,0.762,0.158l0.063,0.013c0.261,0.049,0.526,0.094,0.795,0.137l0.215,0.031
33
+ c0.22,0.032,0.44,0.064,0.665,0.092l0.162,0.022c0.264,0.032,0.531,0.06,0.803,0.084L37.71,59.4
34
+ c0.218,0.021,0.437,0.035,0.659,0.053l0.229,0.015c0.286,0.019,0.576,0.031,0.867,0.041c0.202,0.007,0.405,0.013,0.611,0.017
35
+ c0.199,0.002,0.398,0.002,0.596,0.002c0.342,0,0.686-0.008,1.02-0.019l0.189-0.007c0.412-0.018,0.818-0.042,1.219-0.07l0.16-0.015
36
+ c0.342-0.028,0.68-0.063,1.012-0.103l0.17-0.021c0.328-0.041,0.652-0.087,0.972-0.139l0.121-0.021
37
+ c0.396-0.065,0.778-0.141,1.151-0.221l0.131-0.029c0.369-0.079,0.726-0.169,1.067-0.265l0.11-0.029
38
+ c0.299-0.086,0.587-0.177,0.867-0.271l0.111-0.037c0.273-0.096,0.539-0.196,0.793-0.301l0.137-0.058
39
+ c0.109-0.046,0.213-0.092,0.318-0.14l0.153-0.07c0.149-0.072,0.299-0.146,0.438-0.221c0.238-0.126,0.463-0.258,0.672-0.393
40
+ l0.029-0.021c0.17-0.108,0.324-0.224,0.473-0.338l0.084-0.063c0.134-0.107,0.26-0.216,0.373-0.326l0.048-0.047
41
+ c0.093-0.094,0.178-0.188,0.26-0.281l0.069-0.082c0.082-0.107,0.166-0.215,0.234-0.324l0.016-0.024
42
+ c0.063-0.104,0.117-0.208,0.166-0.313l0.037-0.088c0.045-0.104,0.082-0.211,0.111-0.317l0.012-0.036
43
+ c0.029-0.122,0.049-0.246,0.062-0.37l0.011-0.202l0.069,7.813L53.535,62.24z M53.535,51.045l-0.008,0.043
44
+ c-0.01,0.123-0.029,0.247-0.062,0.369v0.007l-0.012,0.03c-0.024,0.107-0.065,0.213-0.108,0.316l-0.018,0.047l-0.021,0.041
45
+ c-0.05,0.106-0.104,0.213-0.168,0.315l-0.011,0.019l-0.004,0.002c-0.067,0.111-0.147,0.22-0.235,0.326l-0.025,0.035l-0.043,0.047
46
+ c-0.078,0.094-0.164,0.188-0.256,0.276l-0.035,0.04l-0.016,0.014c-0.113,0.109-0.236,0.215-0.367,0.319l-0.039,0.035l-0.056,0.038
47
+ c-0.145,0.113-0.297,0.225-0.462,0.33l-0.012,0.011l-0.034,0.019c-0.202,0.131-0.418,0.26-0.649,0.383l-0.008,0.004l-0.041,0.021
48
+ c-0.13,0.069-0.265,0.136-0.4,0.2l-0.15,0.066c-0.107,0.053-0.219,0.101-0.331,0.146l-0.063,0.03l-0.061,0.021
49
+ c-0.254,0.107-0.52,0.207-0.796,0.305l-0.119,0.039c-0.274,0.095-0.563,0.185-0.858,0.267l-0.047,0.019L47.95,55.24
50
+ c-0.343,0.096-0.696,0.184-1.063,0.265l-0.132,0.028c-0.368,0.08-0.748,0.152-1.137,0.219l-0.074,0.014l-0.063,0.008
51
+ c-0.317,0.054-0.643,0.099-0.972,0.141l-0.17,0.021c-0.33,0.039-0.666,0.072-1.01,0.102l-0.076,0.008l-0.085,0.005
52
+ c-0.398,0.032-0.805,0.056-1.22,0.071l-0.081,0.006l-0.105,0.002c-0.338,0.01-0.677,0.02-1.021,0.02h-0.06
53
+ c-0.179,0-0.356,0-0.538-0.002c-0.183-0.004-0.366-0.008-0.549-0.014l-0.062-0.004c-0.291-0.01-0.58-0.023-0.865-0.04l-0.078-0.005
54
+ l-0.157-0.012c-0.218-0.014-0.434-0.031-0.648-0.051l-0.15-0.01l-0.083-0.011c-0.269-0.024-0.535-0.054-0.797-0.086l-0.042-0.004
55
+ l-0.129-0.019c-0.221-0.029-0.438-0.059-0.653-0.092l-0.124-0.017l-0.102-0.019c-0.266-0.041-0.53-0.086-0.79-0.136l-0.012-0.002
56
+ l-0.047-0.01c-0.259-0.05-0.51-0.103-0.761-0.158l-0.112-0.021l-0.078-0.021c-0.278-0.063-0.552-0.131-0.818-0.203L33.024,55.2
57
+ l-0.079-0.022c-0.315-0.087-0.621-0.178-0.917-0.275l-0.044-0.012l-0.14-0.047c-0.124-0.044-0.244-0.086-0.366-0.13l-0.213-0.077
58
+ c-0.116-0.043-0.227-0.088-0.34-0.132l-0.132-0.053l-0.072-0.031l-0.216-0.092l-0.236-0.104l-0.207-0.1l-0.219-0.107l-0.204-0.104
59
+ l-0.202-0.107l-0.192-0.111l-0.188-0.109l-0.182-0.115l-0.173-0.113l-0.173-0.119l-0.156-0.114l-0.162-0.128l-0.14-0.113
60
+ l-0.148-0.133l-0.126-0.115l-0.135-0.139l-0.109-0.113l-0.123-0.145l-0.095-0.115l-0.103-0.148l-0.081-0.115l-0.089-0.155
61
+ l-0.063-0.113l-0.074-0.163l-0.047-0.111l-0.055-0.174l-0.033-0.104l-0.039-0.193l-0.016-0.087
62
+ c-0.012-0.096-0.019-0.188-0.019-0.284l-0.068-7.813c0,0.095,0.006,0.19,0.019,0.284l0.023,0.121l0.031,0.158l0.042,0.135
63
+ l0.046,0.143l0.059,0.135l0.06,0.139l0.078,0.134l0.08,0.137l0.09,0.132l0.094,0.133l0.105,0.127l0.108,0.133l0.119,0.123
64
+ l0.127,0.131l0.132,0.119l0.143,0.129l0.146,0.115l0.157,0.127l0.158,0.111l0.17,0.122l0.169,0.111l0.185,0.116l0.184,0.106
65
+ l0.197,0.114l0.197,0.104l0.208,0.109l0.209,0.102l0.222,0.105l0.22,0.098l0.23,0.098l0.197,0.08
66
+ c0.113,0.045,0.228,0.091,0.344,0.136l0.212,0.075c0.118,0.045,0.24,0.086,0.362,0.127l0.188,0.064
67
+ c0.297,0.096,0.604,0.188,0.92,0.274l0.134,0.036c0.27,0.072,0.545,0.14,0.825,0.205l0.183,0.039
68
+ c0.25,0.058,0.504,0.109,0.762,0.16l0.063,0.012c0.261,0.05,0.526,0.093,0.795,0.136l0.215,0.032
69
+ c0.22,0.033,0.44,0.064,0.665,0.095l0.162,0.021c0.264,0.03,0.531,0.061,0.803,0.086l0.224,0.02
70
+ c0.218,0.02,0.437,0.037,0.659,0.053L38.6,48.27c0.286,0.019,0.576,0.033,0.867,0.043c0.202,0.006,0.405,0.013,0.611,0.015
71
+ c0.199,0.004,0.398,0.004,0.596,0.004c0.342,0,0.686-0.009,1.02-0.019l0.189-0.01c0.412-0.016,0.818-0.039,1.219-0.07l0.16-0.014
72
+ c0.342-0.027,0.68-0.063,1.012-0.102l0.17-0.021c0.328-0.041,0.652-0.087,0.972-0.138l0.121-0.021
73
+ c0.396-0.067,0.778-0.141,1.151-0.222l0.131-0.028c0.369-0.082,0.726-0.172,1.068-0.267l0.109-0.03
74
+ c0.299-0.084,0.587-0.174,0.867-0.27l0.111-0.038c0.273-0.095,0.539-0.194,0.793-0.3l0.137-0.055
75
+ c0.109-0.047,0.213-0.097,0.318-0.143l0.153-0.07c0.149-0.07,0.299-0.146,0.438-0.222c0.238-0.125,0.463-0.257,0.672-0.392
76
+ l0.029-0.021c0.17-0.108,0.324-0.223,0.473-0.339l0.085-0.064c0.133-0.104,0.259-0.215,0.372-0.324l0.048-0.049
77
+ c0.093-0.092,0.178-0.186,0.26-0.28l0.069-0.081c0.082-0.105,0.166-0.217,0.234-0.324l0.017-0.025
78
+ c0.063-0.104,0.116-0.207,0.165-0.313l0.037-0.088c0.045-0.105,0.082-0.211,0.111-0.316l0.012-0.037
79
+ c0.029-0.123,0.05-0.246,0.062-0.369l0.011-0.203l0.069,7.813L53.535,51.045z M53.535,39.852l-0.008,0.04
80
+ c-0.01,0.125-0.029,0.249-0.062,0.371v0.007l-0.012,0.029c-0.024,0.108-0.065,0.213-0.108,0.316l-0.018,0.047l-0.021,0.043
81
+ c-0.05,0.105-0.104,0.211-0.168,0.316l-0.011,0.016l-0.004,0.004c-0.067,0.109-0.147,0.219-0.235,0.326l-0.025,0.035l-0.043,0.045
82
+ c-0.078,0.096-0.164,0.188-0.256,0.279l-0.035,0.039l-0.016,0.014c-0.113,0.107-0.236,0.215-0.367,0.318l-0.039,0.034l-0.056,0.039
83
+ c-0.145,0.113-0.297,0.226-0.462,0.332l-0.012,0.009l-0.034,0.018c-0.202,0.133-0.418,0.26-0.649,0.383l-0.008,0.006l-0.041,0.02
84
+ c-0.13,0.068-0.265,0.135-0.4,0.201l-0.15,0.066c-0.107,0.051-0.219,0.1-0.331,0.146L49.9,43.381l-0.061,0.021
85
+ c-0.254,0.104-0.52,0.205-0.796,0.303l-0.119,0.039c-0.274,0.094-0.563,0.184-0.858,0.268l-0.047,0.016l-0.069,0.018
86
+ c-0.343,0.096-0.696,0.186-1.063,0.268l-0.132,0.024c-0.368,0.08-0.748,0.154-1.137,0.22l-0.074,0.016L45.48,44.58
87
+ c-0.317,0.051-0.643,0.098-0.972,0.139l-0.17,0.02c-0.33,0.041-0.666,0.074-1.01,0.105l-0.076,0.008l-0.085,0.004
88
+ c-0.398,0.031-0.805,0.057-1.22,0.072l-0.081,0.006h-0.105c-0.338,0.012-0.677,0.019-1.021,0.02l-0.06,0.001
89
+ c-0.179,0-0.356-0.001-0.538-0.004c-0.183-0.001-0.366-0.007-0.549-0.013l-0.062-0.004c-0.291-0.01-0.58-0.021-0.865-0.041
90
+ l-0.078-0.004l-0.157-0.011c-0.218-0.017-0.434-0.032-0.648-0.051l-0.15-0.013l-0.083-0.01c-0.269-0.025-0.535-0.053-0.797-0.084
91
+ l-0.042-0.006l-0.129-0.018c-0.221-0.028-0.438-0.059-0.653-0.09l-0.124-0.019l-0.102-0.019c-0.266-0.041-0.53-0.086-0.79-0.135
92
+ l-0.012-0.002l-0.047-0.011c-0.259-0.05-0.51-0.103-0.761-0.157l-0.112-0.022l-0.078-0.019c-0.278-0.063-0.552-0.131-0.818-0.205
93
+ l-0.063-0.015l-0.079-0.024c-0.315-0.086-0.621-0.176-0.917-0.272l-0.044-0.013l-0.14-0.049c-0.124-0.041-0.244-0.084-0.366-0.127
94
+ l-0.213-0.078c-0.116-0.043-0.227-0.088-0.34-0.131l-0.132-0.054l-0.072-0.03l-0.216-0.092l-0.236-0.105l-0.207-0.098l-0.219-0.106
95
+ l-0.204-0.104l-0.202-0.107l-0.192-0.11l-0.188-0.11l-0.182-0.115l-0.173-0.112l-0.173-0.121l-0.156-0.112l-0.162-0.129
96
+ l-0.14-0.113l-0.148-0.133l-0.126-0.115l-0.135-0.139l-0.109-0.113l-0.123-0.146l-0.095-0.116l-0.103-0.146l-0.081-0.115
97
+ l-0.089-0.156l-0.063-0.114l-0.074-0.163l-0.047-0.109l-0.055-0.175l-0.033-0.102l-0.039-0.195l-0.016-0.086
98
+ c-0.012-0.093-0.019-0.188-0.019-0.284l-0.059-6.807c-0.001-0.023-0.009-0.045-0.009-0.069c0-0.021,0.007-0.042,0.008-0.063
99
+ l-0.008-0.875c0,0.095,0.006,0.19,0.019,0.285l0.023,0.121l0.014,0.07c0.568-2.793,6.314-4.905,13.339-4.797
100
+ c7.031,0.108,12.799,2.404,13.371,5.22c0.02-0.094,0.038-0.189,0.047-0.284l0.012-0.203l0.068,7.815L53.535,39.852z"/>
101
+ </g>
102
+ </svg>
embedded/toolset/onthego-resources/onthegosystems-icons/vectors/cred.svg ADDED
@@ -0,0 +1,101 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
4
+ <svg version="1.1" baseProfile="tiny" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
5
+ x="0px" y="0px" width="80px" height="80px" viewBox="0 0 80 80" xml:space="preserve">
6
+ <g>
7
+ <path fill="#333333" d="M53.461,54.467c-0.012,0.124-0.031,0.248-0.061,0.37l-0.012,0.036c-0.029,0.107-0.066,0.214-0.111,0.316
8
+ l-0.037,0.09c-0.051,0.104-0.104,0.209-0.166,0.313l-0.018,0.024c-0.066,0.108-0.15,0.217-0.233,0.323l-0.069,0.082
9
+ c-0.082,0.095-0.167,0.188-0.26,0.281l-0.047,0.047c-0.114,0.111-0.24,0.219-0.373,0.326L51.99,56.74
10
+ c-0.148,0.115-0.303,0.229-0.473,0.338l-0.031,0.02c-0.207,0.135-0.432,0.268-0.67,0.394c-0.142,0.075-0.289,0.147-0.439,0.221
11
+ l-0.154,0.07c-0.104,0.048-0.209,0.094-0.318,0.14l-0.137,0.059c-0.254,0.104-0.519,0.205-0.793,0.301l-0.111,0.037
12
+ c-0.279,0.094-0.567,0.185-0.866,0.271l-0.11,0.029c-0.343,0.096-0.699,0.185-1.068,0.265l-0.129,0.029
13
+ c-0.373,0.08-0.756,0.154-1.152,0.221l-0.121,0.02c-0.318,0.053-0.643,0.099-0.971,0.14l-0.172,0.021
14
+ c-0.332,0.041-0.668,0.074-1.01,0.104l-0.16,0.014c-0.4,0.029-0.808,0.055-1.22,0.071l-0.188,0.007
15
+ c-0.336,0.01-0.678,0.018-1.021,0.018c-0.197,0-0.396,0-0.596-0.002c-0.206-0.004-0.409-0.01-0.611-0.016
16
+ c-0.291-0.01-0.581-0.023-0.867-0.041l-0.229-0.015c-0.222-0.017-0.441-0.032-0.659-0.052l-0.224-0.021
17
+ c-0.272-0.023-0.539-0.052-0.803-0.084l-0.162-0.021c-0.225-0.027-0.445-0.061-0.665-0.092l-0.215-0.033
18
+ c-0.269-0.043-0.535-0.088-0.795-0.137L34.786,59c-0.258-0.049-0.512-0.104-0.762-0.158l-0.183-0.041
19
+ c-0.28-0.064-0.556-0.133-0.825-0.205l-0.134-0.037c-0.316-0.086-0.623-0.177-0.92-0.272l-0.188-0.063
20
+ c-0.123-0.041-0.244-0.084-0.362-0.125L31.2,58.02c-0.117-0.043-0.231-0.088-0.344-0.135l-0.197-0.078l-0.23-0.1l-0.22-0.1
21
+ l-0.222-0.104L29.778,57.4l-0.208-0.107l-0.197-0.104l-0.197-0.115l-0.184-0.105l-0.185-0.119l-0.169-0.109l-0.17-0.121
22
+ l-0.158-0.114l-0.157-0.125l-0.146-0.116l-0.143-0.13l-0.132-0.118l-0.127-0.129l-0.119-0.123l-0.108-0.136l-0.105-0.127
23
+ l-0.094-0.133l-0.09-0.13l-0.08-0.137l-0.078-0.133l-0.06-0.139l-0.059-0.137l-0.046-0.141l-0.042-0.136l-0.031-0.16l-0.023-0.12
24
+ c-0.013-0.095-0.019-0.189-0.019-0.283l0.068,7.813c0,0.097,0.006,0.188,0.019,0.284l0.016,0.085l0.039,0.194l0.033,0.104
25
+ l0.055,0.174l0.047,0.109l0.074,0.164l0.063,0.114l0.089,0.154l0.081,0.115l0.103,0.148l0.095,0.115l0.123,0.145l0.109,0.115
26
+ l0.135,0.138l0.126,0.114l0.148,0.133l0.14,0.113l0.162,0.129l0.156,0.113l0.173,0.121l0.173,0.113l0.182,0.113l0.188,0.111
27
+ l0.192,0.11l0.202,0.106l0.204,0.106l0.219,0.104l0.207,0.1l0.236,0.104l0.216,0.092l0.072,0.033l0.132,0.051
28
+ c0.114,0.045,0.225,0.09,0.34,0.132l0.213,0.079c0.122,0.043,0.242,0.084,0.366,0.127l0.14,0.048l0.044,0.015
29
+ c0.295,0.096,0.601,0.186,0.917,0.271l0.079,0.025l0.063,0.014c0.266,0.072,0.54,0.139,0.818,0.205l0.078,0.02l0.112,0.021
30
+ c0.251,0.055,0.502,0.107,0.761,0.156l0.047,0.012h0.012c0.26,0.051,0.524,0.096,0.79,0.137l0.102,0.018l0.124,0.017
31
+ c0.215,0.032,0.432,0.063,0.653,0.092l0.129,0.019l0.042,0.004c0.263,0.033,0.528,0.061,0.797,0.086l0.083,0.01l0.15,0.012
32
+ c0.214,0.02,0.43,0.035,0.648,0.051l0.157,0.012l0.078,0.004c0.285,0.019,0.574,0.031,0.865,0.041l0.062,0.002
33
+ c0.183,0.008,0.366,0.011,0.549,0.014c0.181,0.004,0.359,0.005,0.537,0.005l0.061-0.001c0.345-0.002,0.684-0.009,1.021-0.021
34
+ l0.104-0.002l0.081-0.004c0.415-0.016,0.82-0.039,1.22-0.07l0.085-0.006l0.076-0.008c0.344-0.028,0.68-0.063,1.01-0.102l0.17-0.021
35
+ c0.329-0.041,0.653-0.086,0.971-0.139l0.064-0.01l0.074-0.014c0.389-0.064,0.768-0.137,1.137-0.217l0.133-0.029
36
+ c0.365-0.08,0.721-0.17,1.063-0.266l0.068-0.017l0.049-0.017c0.296-0.082,0.582-0.174,0.857-0.268l0.119-0.039
37
+ c0.277-0.096,0.542-0.197,0.796-0.304l0.06-0.021l0.063-0.029c0.112-0.049,0.224-0.098,0.331-0.146l0.15-0.068
38
+ c0.137-0.063,0.271-0.131,0.4-0.198l0.041-0.021l0.008-0.005c0.231-0.122,0.447-0.253,0.649-0.382l0.034-0.02l0.012-0.01
39
+ c0.165-0.105,0.317-0.218,0.463-0.33l0.055-0.039l0.039-0.033c0.131-0.105,0.254-0.213,0.367-0.32l0.016-0.014l0.035-0.041
40
+ c0.092-0.09,0.178-0.182,0.257-0.275l0.043-0.048l0.024-0.034c0.088-0.107,0.168-0.215,0.235-0.326l0.004-0.004l0.011-0.016
41
+ c0.063-0.104,0.118-0.211,0.168-0.316l0.021-0.042l0.018-0.046c0.043-0.104,0.084-0.211,0.108-0.318l0.012-0.027V62.65
42
+ c0.031-0.123,0.052-0.246,0.062-0.371l0.008-0.041l0.006-0.161l-0.068-7.813L53.461,54.467z"/>
43
+ <path fill="#333333" d="M53.461,43.273c-0.012,0.123-0.031,0.246-0.061,0.369l-0.012,0.037c-0.029,0.105-0.066,0.211-0.111,0.316
44
+ l-0.037,0.088c-0.051,0.105-0.104,0.209-0.166,0.313l-0.018,0.025c-0.066,0.107-0.15,0.219-0.233,0.324l-0.069,0.081
45
+ c-0.082,0.096-0.167,0.188-0.26,0.28l-0.047,0.049c-0.114,0.109-0.24,0.22-0.373,0.324l-0.084,0.064
46
+ c-0.148,0.116-0.303,0.229-0.473,0.339l-0.031,0.021c-0.207,0.135-0.432,0.267-0.67,0.392c-0.142,0.076-0.289,0.149-0.439,0.222
47
+ l-0.154,0.07c-0.104,0.046-0.209,0.096-0.318,0.143l-0.137,0.055c-0.254,0.105-0.519,0.205-0.793,0.3l-0.111,0.038
48
+ c-0.279,0.096-0.567,0.186-0.866,0.27l-0.11,0.03c-0.343,0.095-0.699,0.185-1.068,0.267l-0.129,0.028
49
+ c-0.373,0.081-0.756,0.153-1.152,0.222l-0.121,0.021c-0.318,0.052-0.643,0.097-0.971,0.138l-0.172,0.021
50
+ c-0.332,0.039-0.668,0.072-1.01,0.102l-0.16,0.014c-0.4,0.031-0.808,0.056-1.22,0.07l-0.188,0.01
51
+ c-0.336,0.011-0.678,0.019-1.021,0.019c-0.197,0-0.396,0-0.596-0.004c-0.206-0.002-0.409-0.009-0.611-0.015
52
+ c-0.291-0.01-0.581-0.024-0.867-0.043l-0.229-0.014c-0.222-0.016-0.441-0.033-0.659-0.053l-0.224-0.02
53
+ c-0.272-0.025-0.539-0.056-0.803-0.086l-0.162-0.021c-0.225-0.029-0.445-0.062-0.665-0.095l-0.215-0.032
54
+ c-0.269-0.043-0.535-0.086-0.795-0.136l-0.063-0.012c-0.258-0.051-0.512-0.104-0.762-0.16l-0.183-0.039
55
+ c-0.28-0.065-0.556-0.133-0.825-0.205l-0.134-0.037c-0.316-0.086-0.623-0.18-0.92-0.274l-0.188-0.063
56
+ c-0.123-0.041-0.244-0.082-0.362-0.127L31.2,46.822c-0.117-0.045-0.231-0.09-0.344-0.135l-0.197-0.08l-0.23-0.099l-0.22-0.097
57
+ l-0.222-0.105l-0.209-0.102l-0.208-0.109l-0.197-0.104l-0.197-0.114l-0.184-0.106l-0.185-0.117l-0.169-0.11l-0.17-0.122
58
+ l-0.158-0.111l-0.157-0.127l-0.146-0.115l-0.143-0.129l-0.132-0.119l-0.127-0.131l-0.119-0.123l-0.108-0.133l-0.105-0.127
59
+ l-0.094-0.134l-0.09-0.131l-0.08-0.138l-0.078-0.133l-0.06-0.139l-0.059-0.135l-0.046-0.143l-0.042-0.135l-0.031-0.158
60
+ l-0.023-0.121c-0.013-0.094-0.019-0.189-0.019-0.285l0.068,7.814c0,0.096,0.006,0.188,0.019,0.284l0.016,0.086l0.039,0.194
61
+ l0.033,0.104l0.055,0.174l0.047,0.11l0.074,0.164l0.063,0.113l0.089,0.155l0.081,0.115l0.103,0.148l0.095,0.115l0.123,0.145
62
+ l0.109,0.113l0.135,0.139l0.126,0.115l0.148,0.133l0.14,0.113l0.162,0.128l0.156,0.114l0.173,0.119l0.173,0.113l0.182,0.115
63
+ l0.188,0.109l0.192,0.111l0.202,0.107l0.204,0.104l0.219,0.107l0.207,0.1l0.236,0.104l0.216,0.092l0.072,0.03l0.132,0.054
64
+ c0.114,0.044,0.225,0.088,0.34,0.131l0.213,0.078c0.122,0.044,0.242,0.086,0.366,0.129l0.14,0.048l0.044,0.012
65
+ c0.295,0.099,0.601,0.188,0.917,0.274l0.079,0.022l0.063,0.017c0.266,0.072,0.54,0.14,0.818,0.203l0.078,0.021l0.112,0.021
66
+ c0.251,0.058,0.502,0.108,0.761,0.157l0.047,0.011l0.012,0.002c0.26,0.049,0.524,0.095,0.79,0.136l0.102,0.018l0.124,0.018
67
+ c0.215,0.033,0.432,0.063,0.653,0.092l0.129,0.018l0.042,0.005c0.263,0.032,0.528,0.062,0.797,0.086l0.083,0.01l0.15,0.011
68
+ c0.214,0.02,0.43,0.037,0.648,0.051l0.157,0.012l0.078,0.005c0.285,0.017,0.574,0.03,0.865,0.04l0.062,0.004
69
+ c0.183,0.005,0.366,0.01,0.549,0.014c0.181,0.002,0.359,0.002,0.537,0.002h0.061c0.345,0,0.684-0.01,1.021-0.02l0.104-0.002
70
+ l0.081-0.006c0.415-0.016,0.82-0.039,1.22-0.071l0.085-0.005l0.076-0.008c0.344-0.028,0.68-0.063,1.01-0.102l0.17-0.021
71
+ c0.329-0.042,0.653-0.088,0.971-0.141l0.064-0.008l0.074-0.014c0.389-0.064,0.768-0.139,1.137-0.219l0.133-0.028
72
+ c0.365-0.081,0.721-0.169,1.063-0.265l0.068-0.016l0.049-0.019c0.296-0.082,0.582-0.173,0.857-0.267l0.119-0.039
73
+ c0.277-0.098,0.542-0.196,0.796-0.305l0.06-0.021l0.063-0.028c0.112-0.047,0.224-0.095,0.331-0.146l0.15-0.067
74
+ c0.137-0.065,0.271-0.132,0.4-0.2l0.041-0.02l0.008-0.006c0.231-0.123,0.447-0.252,0.649-0.383l0.034-0.018l0.012-0.01
75
+ c0.165-0.106,0.317-0.219,0.463-0.332l0.055-0.037l0.039-0.035c0.131-0.105,0.254-0.21,0.367-0.32l0.016-0.013l0.035-0.04
76
+ c0.092-0.09,0.178-0.184,0.257-0.277l0.043-0.047l0.024-0.033c0.088-0.107,0.168-0.217,0.235-0.326l0.004-0.004l0.011-0.018
77
+ c0.063-0.104,0.118-0.209,0.168-0.316l0.021-0.041l0.018-0.047c0.043-0.104,0.084-0.209,0.108-0.316l0.012-0.029v-0.007
78
+ c0.031-0.122,0.052-0.246,0.062-0.369l0.008-0.043l0.006-0.161l-0.068-7.813L53.461,43.273z"/>
79
+ <path fill="#333333" d="M53.461,32.079c-0.009,0.095-0.027,0.189-0.047,0.284c-0.572-2.816-6.34-5.112-13.371-5.22
80
+ c-7.025-0.108-12.771,2.004-13.339,4.797l-0.014-0.07l-0.023-0.121c-0.013-0.095-0.019-0.19-0.019-0.285l0.008,0.875
81
+ c0,0.021-0.008,0.042-0.008,0.063c0,0.023,0.008,0.046,0.009,0.069l0.059,6.807c0,0.096,0.006,0.19,0.019,0.284l0.016,0.086
82
+ l0.039,0.195l0.033,0.102l0.055,0.175l0.047,0.109l0.074,0.163l0.063,0.114l0.089,0.156l0.081,0.115l0.103,0.146l0.095,0.116
83
+ l0.123,0.146l0.109,0.112l0.135,0.14l0.126,0.115l0.148,0.133l0.14,0.112l0.162,0.13l0.156,0.112l0.173,0.121l0.173,0.112
84
+ l0.182,0.115l0.188,0.11l0.192,0.11l0.202,0.106l0.204,0.104l0.219,0.106l0.207,0.099l0.236,0.105l0.216,0.092l0.072,0.03
85
+ l0.132,0.054c0.114,0.043,0.225,0.088,0.34,0.131l0.213,0.078c0.122,0.043,0.242,0.086,0.366,0.127l0.14,0.049l0.044,0.013
86
+ c0.295,0.098,0.601,0.188,0.917,0.272l0.079,0.024l0.063,0.015c0.266,0.073,0.54,0.141,0.818,0.205l0.078,0.018l0.112,0.023
87
+ c0.251,0.055,0.502,0.107,0.761,0.157l0.047,0.011l0.012,0.002c0.26,0.049,0.524,0.094,0.79,0.135l0.102,0.019l0.124,0.019
88
+ c0.215,0.03,0.432,0.062,0.653,0.09l0.129,0.018l0.042,0.006c0.263,0.031,0.528,0.059,0.797,0.084l0.083,0.01l0.15,0.012
89
+ c0.214,0.02,0.43,0.035,0.648,0.052l0.157,0.011l0.078,0.004c0.285,0.02,0.574,0.031,0.865,0.041l0.062,0.004
90
+ c0.183,0.006,0.366,0.012,0.549,0.012c0.181,0.004,0.359,0.005,0.538,0.005l0.06-0.001c0.345-0.002,0.684-0.008,1.021-0.02h0.105
91
+ l0.081-0.007c0.415-0.017,0.819-0.041,1.22-0.071l0.085-0.004l0.076-0.009c0.344-0.028,0.68-0.063,1.01-0.104l0.17-0.02
92
+ c0.329-0.042,0.653-0.088,0.972-0.139l0.063-0.008l0.074-0.017c0.389-0.063,0.769-0.139,1.137-0.219l0.132-0.024
93
+ c0.366-0.082,0.721-0.172,1.063-0.268l0.069-0.018l0.047-0.016c0.297-0.084,0.584-0.174,0.858-0.268l0.119-0.039
94
+ c0.276-0.098,0.542-0.197,0.796-0.303l0.061-0.021l0.063-0.029c0.112-0.047,0.223-0.096,0.331-0.146l0.149-0.065
95
+ c0.138-0.068,0.271-0.134,0.4-0.201l0.041-0.021l0.008-0.006c0.232-0.123,0.448-0.25,0.65-0.382l0.034-0.02l0.012-0.008
96
+ c0.165-0.107,0.317-0.219,0.462-0.332l0.055-0.039l0.039-0.035c0.131-0.104,0.254-0.21,0.367-0.318l0.016-0.014l0.037-0.039
97
+ c0.09-0.092,0.177-0.184,0.256-0.279l0.043-0.045l0.023-0.035c0.088-0.106,0.168-0.215,0.236-0.325l0.004-0.004l0.01-0.017
98
+ c0.063-0.104,0.119-0.209,0.168-0.315l0.022-0.043l0.017-0.048c0.045-0.104,0.084-0.208,0.109-0.315l0.012-0.029V40.26
99
+ c0.031-0.122,0.051-0.245,0.061-0.371l0.009-0.04l0.006-0.161l-0.069-7.815L53.461,32.079z"/>
100
+ </g>
101
+ </svg>
embedded/toolset/onthego-resources/onthegosystems-icons/vectors/layouts-logo.svg ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
4
+ <svg version="1.1" baseProfile="tiny" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
5
+ x="0px" y="0px" width="80px" height="80px" viewBox="0 0 80 80" xml:space="preserve">
6
+ <g>
7
+ <path fill="#333333" d="M58,16V4H46v12H34V4H22v12H10v60h60V16H58z M28.684,67.988h-10.99V40.771h10.99V67.988z M62,67.988H31.453
8
+ V40.771H62V67.988z M62,37.941H17.694V26.277H62V37.941z"/>
9
+ </g>
10
+ </svg>
embedded/toolset/onthego-resources/onthegosystems-icons/vectors/layouts.svg ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
4
+ <svg version="1.1" baseProfile="tiny" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
5
+ x="0px" y="0px" width="80px" height="80px" viewBox="0 0 80 80" xml:space="preserve">
6
+ <g>
7
+ <rect x="17.694" y="26.277" fill="#333333" width="44.306" height="11.664"/>
8
+ <rect x="31.453" y="40.771" fill="#333333" width="30.547" height="27.217"/>
9
+ <rect x="17.694" y="40.771" fill="#333333" width="10.99" height="27.217"/>
10
+ </g>
11
+ </svg>
embedded/toolset/onthego-resources/onthegosystems-icons/vectors/module-logo.svg ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
4
+ <svg version="1.1" baseProfile="tiny" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
5
+ x="0px" y="0px" width="80px" height="80px" viewBox="0 0 80 80" xml:space="preserve">
6
+ <g>
7
+ <path fill="#333333" d="M58,16V4H46v12H34V4H22v12H10v60h60V16H58z M38.091,69.479L19.738,58.882V39.52l18.353,10.871V69.479z
8
+ M60.001,58.882L41.723,69.436v-18.59l18.278-10.939V58.882z M60.001,35.677L40.288,47.473L20.024,35.47l19.845-11.458
9
+ l20.132,11.623V35.677z"/>
10
+ </g>
11
+ </svg>
embedded/toolset/onthego-resources/onthegosystems-icons/vectors/module.svg ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
4
+ <svg version="1.1" baseProfile="tiny" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
5
+ x="0px" y="0px" width="80px" height="80px" viewBox="0 0 80 80" xml:space="preserve">
6
+ <g>
7
+ <polygon fill="#333333" points="60.001,35.677 60.001,35.635 39.869,24.012 20.024,35.47 40.288,47.473 "/>
8
+ <polygon fill="#333333" points="60.001,39.907 41.723,50.846 41.723,69.436 60.001,58.882 "/>
9
+ <polygon fill="#333333" points="19.738,39.52 19.738,58.882 38.091,69.479 38.091,50.391 "/>
10
+ </g>
11
+ </svg>
embedded/toolset/onthego-resources/onthegosystems-icons/vectors/packager-logo.svg ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
4
+ <svg version="1.1" baseProfile="tiny" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
5
+ x="0px" y="0px" width="141px" height="141px" viewBox="0 0 141 141" xml:space="preserve">
6
+ <g>
7
+ <polygon fill="#F05A29" points="46.882,95.175 61.159,95.175 61.159,107.688 79.665,107.688 79.665,95.175 93.941,95.175
8
+ 70.5,76.316 "/>
9
+ <path fill="#F05A29" d="M102.225,28.2V7.05H81.075V28.2h-21.15V7.05h-21.15V28.2h-21.15v105.75h105.75V28.2H102.225z
10
+ M105.573,113.152c0.177,2.115-1.587,3.877-3.701,3.877H38.951c-2.115,0-3.877-1.762-3.877-3.877V68.385l13.571-13.571h43.358
11
+ l13.57,13.571V113.152z"/>
12
+ <polygon fill="#F05A29" points="50.936,61.511 44.944,67.504 96.057,67.504 90.24,61.511 "/>
13
+ </g>
14
+ </svg>
embedded/toolset/onthego-resources/onthegosystems-icons/vectors/packager.svg ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
4
+ <svg version="1.1" baseProfile="tiny" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
5
+ x="0px" y="0px" width="56.333px" height="52.166px" viewBox="0 0 56.333 52.166" xml:space="preserve">
6
+ <path fill="#333333" d="M41.101,7.506H15.226L7.121,15.61v26.735c0,1.265,1.053,2.315,2.314,2.315h37.561
7
+ c1.263,0,2.314-1.053,2.21-2.315V15.61L41.101,7.506z M33.745,31.61v7.475H22.699V31.61h-8.526l14.104-11.263l13.98,11.263H33.745z
8
+ M13.015,15.085l3.578-3.579h23.456l3.472,3.579H13.015z"/>
9
+ </svg>
embedded/toolset/onthego-resources/onthegosystems-icons/vectors/toolset-logo.svg ADDED
@@ -0,0 +1,207 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
4
+ <svg version="1.1" baseProfile="tiny" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
5
+ x="0px" y="0px" width="100px" height="100px" viewBox="0 0 100 100" xml:space="preserve">
6
+ <path fill="#F05A29" d="M78,23V5H60v18H42V5H24v18H12v72h78V23H78z"/>
7
+ <g>
8
+ <path fill="#FFFFFF" d="M22.69,63.676c0,0.702-0.24,1.241-0.72,1.618s-1.149,0.565-2.007,0.565h-0.467l-0.488,2.322H18l1.313-6.211
9
+ h1.419c0.648,0,1.137,0.143,1.466,0.428C22.526,62.684,22.69,63.109,22.69,63.676z M19.678,65.005h0.399
10
+ c0.504,0,0.895-0.112,1.17-0.338c0.276-0.226,0.414-0.544,0.414-0.958c0-0.309-0.083-0.533-0.249-0.675s-0.419-0.214-0.762-0.214
11
+ h-0.506L19.678,65.005z"/>
12
+ <path fill="#FFFFFF" d="M23.797,68.184h-0.994l1.402-6.611h0.998L23.797,68.184z"/>
13
+ <path fill="#FFFFFF" d="M27.058,63.484l-0.548,2.591c-0.088,0.399-0.132,0.673-0.132,0.819c0,0.377,0.18,0.565,0.54,0.565
14
+ c0.204,0,0.406-0.081,0.607-0.241c0.201-0.162,0.379-0.393,0.535-0.691c0.156-0.297,0.276-0.648,0.361-1.051l0.42-1.992h0.99
15
+ l-0.99,4.697h-0.786l0.089-0.871H28.11c-0.232,0.33-0.475,0.57-0.727,0.726s-0.524,0.231-0.815,0.231
16
+ c-0.38,0-0.673-0.107-0.879-0.324c-0.207-0.215-0.31-0.522-0.31-0.926c0-0.179,0.017-0.354,0.051-0.527
17
+ c0.034-0.176,0.068-0.35,0.102-0.525l0.522-2.48H27.058L27.058,63.484z"/>
18
+ <path fill="#FFFFFF" d="M34.808,63.484l-0.132,0.582l-0.815,0.14c0.079,0.165,0.119,0.358,0.119,0.582
19
+ c0,0.547-0.169,0.981-0.506,1.303c-0.337,0.322-0.789,0.481-1.355,0.481c-0.147,0-0.277-0.012-0.391-0.033
20
+ c-0.314,0.113-0.472,0.26-0.472,0.441c0,0.106,0.044,0.182,0.134,0.221c0.089,0.04,0.219,0.07,0.389,0.094l0.54,0.066
21
+ c0.499,0.063,0.855,0.188,1.07,0.373c0.215,0.185,0.323,0.451,0.323,0.797c0,0.555-0.213,0.982-0.641,1.287
22
+ c-0.428,0.303-1.035,0.453-1.823,0.453c-0.575,0-1.02-0.105-1.336-0.317c-0.315-0.213-0.474-0.504-0.474-0.875
23
+ c0-0.292,0.099-0.544,0.295-0.756c0.197-0.214,0.513-0.394,0.949-0.54c-0.215-0.127-0.323-0.309-0.323-0.539
24
+ c0-0.195,0.066-0.365,0.198-0.508c0.131-0.145,0.339-0.281,0.622-0.414c-0.382-0.229-0.573-0.588-0.573-1.07
25
+ c0-0.557,0.173-1.003,0.521-1.343c0.347-0.341,0.805-0.511,1.374-0.511c0.227,0,0.453,0.029,0.68,0.086H34.808z M31.329,68.105
26
+ c-0.317,0.052-0.561,0.151-0.731,0.303c-0.17,0.148-0.255,0.335-0.255,0.556c0,0.185,0.079,0.331,0.236,0.44
27
+ c0.157,0.107,0.397,0.162,0.72,0.162c0.461,0,0.823-0.075,1.083-0.229c0.261-0.152,0.391-0.372,0.391-0.658
28
+ c0-0.145-0.064-0.258-0.191-0.34s-0.351-0.141-0.671-0.174L31.329,68.105z M32.476,64.066c-0.184,0-0.346,0.055-0.484,0.162
29
+ c-0.139,0.109-0.247,0.258-0.323,0.446c-0.077,0.188-0.115,0.396-0.115,0.618c0,0.201,0.05,0.355,0.151,0.465
30
+ s0.244,0.164,0.431,0.164c0.184,0,0.343-0.056,0.478-0.166c0.134-0.109,0.239-0.262,0.314-0.453
31
+ c0.075-0.193,0.113-0.404,0.113-0.634C33.041,64.268,32.853,64.066,32.476,64.066z"/>
32
+ <path fill="#FFFFFF" d="M35.601,68.184h-1.002l1.002-4.699H36.6L35.601,68.184z M35.8,62.329c0-0.192,0.055-0.349,0.166-0.468
33
+ c0.111-0.119,0.266-0.178,0.467-0.178c0.15,0,0.272,0.037,0.365,0.111c0.094,0.075,0.141,0.188,0.141,0.342
34
+ c0,0.201-0.057,0.359-0.17,0.477s-0.262,0.175-0.446,0.175c-0.15,0-0.275-0.037-0.374-0.11C35.85,62.604,35.8,62.486,35.8,62.329z"
35
+ />
36
+ <path fill="#FFFFFF" d="M39.685,68.184l0.604-2.854c0.051-0.255,0.076-0.44,0.076-0.558c0-0.371-0.183-0.557-0.548-0.557
37
+ c-0.204,0-0.405,0.081-0.603,0.242c-0.198,0.161-0.377,0.395-0.536,0.699c-0.158,0.304-0.277,0.648-0.356,1.033l-0.417,1.992
38
+ h-1.002l1.002-4.697h0.782l-0.089,0.871h0.038c0.235-0.336,0.478-0.578,0.727-0.729c0.25-0.151,0.52-0.228,0.812-0.228
39
+ c0.379,0,0.673,0.106,0.881,0.322c0.208,0.215,0.313,0.521,0.313,0.918c0,0.194-0.033,0.451-0.098,0.768l-0.582,2.775h-1.004
40
+ V68.184z"/>
41
+ <path fill="#FFFFFF" d="M45.069,66.738c0,0.49-0.167,0.867-0.501,1.132s-0.799,0.397-1.394,0.397c-0.538,0-0.994-0.096-1.368-0.285
42
+ v-0.861c0.433,0.255,0.875,0.382,1.325,0.382c0.275,0,0.497-0.058,0.667-0.17s0.255-0.269,0.255-0.463
43
+ c0-0.146-0.049-0.269-0.146-0.372c-0.097-0.104-0.298-0.241-0.601-0.414c-0.354-0.189-0.604-0.383-0.75-0.58
44
+ c-0.146-0.195-0.219-0.43-0.219-0.697c0-0.439,0.152-0.783,0.455-1.033c0.303-0.248,0.712-0.373,1.228-0.373
45
+ c0.555,0,1.045,0.119,1.47,0.355l-0.323,0.748c-0.396-0.215-0.773-0.322-1.13-0.322c-0.207,0-0.375,0.047-0.503,0.141
46
+ s-0.193,0.224-0.193,0.391c0,0.128,0.047,0.241,0.141,0.34c0.093,0.1,0.284,0.227,0.573,0.383c0.297,0.168,0.508,0.311,0.633,0.43
47
+ s0.22,0.248,0.285,0.389C45.037,66.393,45.069,66.555,45.069,66.738z"/>
48
+ <path fill="#FFFFFF" d="M47.427,70.271c-0.255,0-0.466-0.031-0.633-0.098v-0.807c0.181,0.057,0.342,0.085,0.484,0.085
49
+ c0.38,0,0.63-0.291,0.752-0.871l0.922-4.343h-0.76l0.089-0.449l0.824-0.322l0.089-0.392c0.125-0.562,0.315-0.959,0.571-1.195
50
+ c0.256-0.235,0.62-0.354,1.09-0.354c0.324,0,0.623,0.062,0.896,0.184l-0.259,0.747c-0.21-0.079-0.402-0.119-0.578-0.119
51
+ c-0.195,0-0.352,0.062-0.469,0.183c-0.118,0.123-0.208,0.322-0.27,0.601l-0.077,0.364h0.972l-0.157,0.757H49.94l-0.947,4.474
52
+ c-0.113,0.535-0.299,0.93-0.557,1.182C48.181,70.146,47.843,70.271,47.427,70.271z"/>
53
+ <path fill="#FFFFFF" d="M55.229,65.243c0,0.571-0.104,1.092-0.31,1.562c-0.207,0.469-0.491,0.828-0.853,1.078
54
+ c-0.36,0.251-0.776,0.376-1.246,0.376c-0.545,0-0.977-0.161-1.297-0.485c-0.319-0.324-0.479-0.766-0.479-1.323
55
+ c0-0.563,0.102-1.08,0.303-1.552c0.203-0.469,0.486-0.836,0.854-1.098c0.365-0.262,0.787-0.393,1.266-0.393
56
+ c0.553,0,0.984,0.164,1.297,0.492C55.073,64.229,55.229,64.678,55.229,65.243z M54.223,65.2c0-0.304-0.07-0.54-0.209-0.712
57
+ s-0.337-0.256-0.595-0.256c-0.265,0-0.499,0.101-0.707,0.304c-0.208,0.202-0.37,0.478-0.483,0.823
58
+ c-0.115,0.348-0.172,0.718-0.172,1.111c0,0.313,0.068,0.555,0.209,0.721c0.142,0.168,0.348,0.252,0.623,0.252
59
+ c0.254,0,0.483-0.096,0.688-0.289c0.203-0.192,0.361-0.463,0.476-0.809C54.165,65.998,54.223,65.617,54.223,65.2z"/>
60
+ <path fill="#FFFFFF" d="M58.932,63.398c0.176,0,0.327,0.018,0.459,0.052l-0.218,0.931c-0.153-0.04-0.298-0.061-0.435-0.061
61
+ c-0.355,0-0.674,0.16-0.955,0.479c-0.28,0.32-0.477,0.739-0.586,1.259l-0.45,2.123h-1.003l1.003-4.697h0.78l-0.088,0.871h0.037
62
+ c0.235-0.34,0.472-0.584,0.705-0.733C58.418,63.475,58.667,63.398,58.932,63.398z"/>
63
+ <path fill="#FFFFFF" d="M23.298,79.059h-1.096l-0.157-3.578l-0.025-0.785l0.017-0.45h-0.025c-0.133,0.407-0.299,0.819-0.497,1.235
64
+ l-1.636,3.578h-1.087l-0.225-6.211h0.973l0.081,3.61c0,0.386-0.019,0.875-0.055,1.47h0.025c0.235-0.625,0.436-1.129,0.603-1.508
65
+ l1.644-3.572h0.956l0.131,3.563l0.013,0.718l-0.013,0.799h0.034c0.079-0.248,0.178-0.529,0.297-0.839
66
+ c0.119-0.312,0.205-0.526,0.259-0.647l1.521-3.594h1.045L23.298,79.059z"/>
67
+ <path fill="#FFFFFF" d="M29.795,76.118c0,0.571-0.103,1.092-0.31,1.562c-0.207,0.469-0.491,0.828-0.852,1.078
68
+ c-0.361,0.251-0.777,0.376-1.247,0.376c-0.543,0-0.976-0.161-1.295-0.485c-0.32-0.324-0.48-0.766-0.48-1.323
69
+ c0-0.563,0.101-1.08,0.304-1.552c0.202-0.469,0.486-0.836,0.852-1.098c0.366-0.262,0.788-0.393,1.266-0.393
70
+ c0.552,0,0.984,0.164,1.295,0.492S29.795,75.553,29.795,76.118z M28.788,76.075c0-0.304-0.069-0.54-0.208-0.712
71
+ s-0.337-0.256-0.595-0.256c-0.263,0-0.499,0.101-0.707,0.304c-0.208,0.202-0.37,0.478-0.484,0.823
72
+ c-0.115,0.348-0.172,0.718-0.172,1.111c0,0.313,0.07,0.555,0.21,0.721c0.14,0.168,0.348,0.252,0.623,0.252
73
+ c0.255,0,0.484-0.096,0.688-0.289c0.204-0.192,0.362-0.463,0.476-0.809C28.731,76.873,28.788,76.492,28.788,76.075z"/>
74
+ <path fill="#FFFFFF" d="M33.498,74.273c0.175,0,0.329,0.018,0.458,0.052l-0.216,0.931c-0.153-0.04-0.297-0.061-0.434-0.061
75
+ c-0.356,0-0.675,0.16-0.956,0.479c-0.28,0.32-0.476,0.739-0.586,1.259l-0.45,2.123h-1.002l1.002-4.697h0.782l-0.089,0.871h0.038
76
+ c0.235-0.34,0.47-0.584,0.706-0.733C32.985,74.35,33.234,74.273,33.498,74.273z"/>
77
+ <path fill="#FFFFFF" d="M36.223,74.273c0.507,0,0.886,0.252,1.139,0.756h0.034c0.037-0.412,0.089-0.768,0.157-1.061l0.323-1.521
78
+ h0.99l-1.402,6.609h-0.781l0.081-0.748h-0.03c-0.249,0.301-0.49,0.516-0.722,0.643c-0.232,0.128-0.479,0.191-0.739,0.191
79
+ c-0.405,0-0.722-0.145-0.952-0.433c-0.229-0.287-0.344-0.694-0.344-1.222c0-0.58,0.101-1.122,0.304-1.627
80
+ c0.202-0.504,0.474-0.896,0.813-1.172C35.433,74.412,35.809,74.273,36.223,74.273z M35.653,78.336c0.232,0,0.462-0.115,0.69-0.35
81
+ c0.228-0.232,0.411-0.534,0.548-0.908c0.138-0.374,0.206-0.752,0.206-1.135c0-0.258-0.062-0.465-0.185-0.621
82
+ c-0.123-0.154-0.311-0.232-0.563-0.232c-0.241,0-0.466,0.109-0.675,0.327s-0.377,0.517-0.501,0.896s-0.187,0.767-0.187,1.16
83
+ C34.986,78.048,35.209,78.336,35.653,78.336z"/>
84
+ <path fill="#FFFFFF" d="M43.565,74.551c0,0.702-0.24,1.241-0.72,1.618s-1.149,0.565-2.007,0.565h-0.467l-0.488,2.322h-1.007
85
+ l1.313-6.211h1.419c0.648,0,1.137,0.143,1.466,0.428C43.401,73.559,43.565,73.984,43.565,74.551z M40.553,75.88h0.399
86
+ c0.504,0,0.895-0.112,1.17-0.338c0.276-0.226,0.414-0.544,0.414-0.958c0-0.309-0.083-0.533-0.249-0.675s-0.419-0.214-0.762-0.214
87
+ h-0.506L40.553,75.88z"/>
88
+ <path fill="#FFFFFF" d="M46.864,74.273c0.175,0,0.329,0.018,0.458,0.052l-0.216,0.931c-0.153-0.04-0.297-0.061-0.434-0.061
89
+ c-0.356,0-0.675,0.16-0.956,0.479c-0.28,0.32-0.476,0.739-0.586,1.259l-0.45,2.123h-1.002l1.002-4.697h0.782l-0.089,0.871h0.038
90
+ c0.235-0.34,0.47-0.584,0.706-0.733C46.352,74.35,46.601,74.273,46.864,74.273z"/>
91
+ <path fill="#FFFFFF" d="M49.118,79.143c-0.558,0-0.993-0.156-1.306-0.472s-0.469-0.753-0.469-1.315s0.11-1.084,0.329-1.565
92
+ c0.219-0.483,0.517-0.856,0.892-1.12s0.795-0.395,1.26-0.395c0.456,0,0.811,0.103,1.064,0.308c0.252,0.206,0.379,0.497,0.379,0.873
93
+ c0,0.517-0.235,0.919-0.707,1.209c-0.473,0.29-1.145,0.437-2.017,0.437h-0.183l-0.009,0.131v0.123c0,0.314,0.08,0.562,0.24,0.74
94
+ c0.16,0.178,0.398,0.268,0.716,0.268c0.204,0,0.406-0.027,0.607-0.082c0.201-0.053,0.439-0.145,0.714-0.275v0.795
95
+ c-0.272,0.124-0.522,0.213-0.75,0.266C49.652,79.116,49.398,79.143,49.118,79.143z M49.764,75.039
96
+ c-0.272,0-0.528,0.122-0.767,0.365c-0.239,0.242-0.411,0.564-0.516,0.964h0.124c0.532,0,0.949-0.075,1.249-0.228
97
+ c0.3-0.15,0.451-0.365,0.451-0.644c0-0.146-0.045-0.257-0.136-0.338C50.077,75.079,49.942,75.039,49.764,75.039z"/>
98
+ <path fill="#FFFFFF" d="M54.744,77.613c0,0.49-0.167,0.867-0.502,1.132c-0.334,0.265-0.799,0.397-1.393,0.397
99
+ c-0.539,0-0.994-0.096-1.369-0.285v-0.861c0.435,0.255,0.875,0.382,1.326,0.382c0.273,0,0.496-0.058,0.666-0.17
100
+ s0.256-0.269,0.256-0.463c0-0.146-0.049-0.269-0.146-0.372s-0.298-0.241-0.602-0.414c-0.354-0.189-0.604-0.383-0.75-0.58
101
+ c-0.146-0.195-0.219-0.43-0.219-0.697c0-0.439,0.151-0.783,0.454-1.033c0.304-0.248,0.712-0.373,1.228-0.373
102
+ c0.557,0,1.045,0.119,1.471,0.355l-0.322,0.748c-0.396-0.215-0.773-0.322-1.13-0.322c-0.207,0-0.375,0.047-0.504,0.141
103
+ s-0.192,0.224-0.192,0.391c0,0.128,0.047,0.241,0.141,0.34c0.093,0.1,0.283,0.227,0.572,0.383c0.299,0.168,0.51,0.311,0.633,0.43
104
+ c0.125,0.119,0.221,0.248,0.285,0.389C54.711,77.268,54.744,77.43,54.744,77.613z"/>
105
+ <path fill="#FFFFFF" d="M58.574,77.613c0,0.49-0.167,0.867-0.502,1.132c-0.334,0.265-0.799,0.397-1.393,0.397
106
+ c-0.539,0-0.994-0.096-1.369-0.285v-0.861c0.435,0.255,0.875,0.382,1.326,0.382c0.273,0,0.496-0.058,0.666-0.17
107
+ s0.256-0.269,0.256-0.463c0-0.146-0.05-0.269-0.146-0.372c-0.098-0.104-0.299-0.241-0.602-0.414
108
+ c-0.354-0.189-0.604-0.383-0.75-0.58c-0.146-0.195-0.219-0.43-0.219-0.697c0-0.439,0.151-0.783,0.454-1.033
109
+ c0.304-0.248,0.712-0.373,1.228-0.373c0.557,0,1.045,0.119,1.471,0.355l-0.322,0.748c-0.396-0.215-0.773-0.322-1.13-0.322
110
+ c-0.207,0-0.375,0.047-0.504,0.141s-0.192,0.224-0.192,0.391c0,0.128,0.047,0.241,0.141,0.34c0.093,0.1,0.283,0.227,0.572,0.383
111
+ c0.299,0.168,0.51,0.311,0.633,0.43c0.125,0.119,0.221,0.248,0.285,0.389C58.541,77.268,58.574,77.43,58.574,77.613z"/>
112
+ <path fill="#FFFFFF" d="M23.272,86.139c0,0.768-0.142,1.438-0.425,2.01c-0.283,0.572-0.695,1.014-1.236,1.322
113
+ c-0.541,0.307-1.177,0.463-1.907,0.463H18l1.313-6.211h1.568c0.767,0,1.358,0.205,1.771,0.615
114
+ C23.065,84.749,23.272,85.35,23.272,86.139z M19.755,89.079c0.501,0,0.939-0.122,1.313-0.365s0.661-0.587,0.86-1.028
115
+ c0.2-0.441,0.299-0.945,0.299-1.513c0-0.521-0.125-0.918-0.374-1.19c-0.25-0.273-0.612-0.41-1.087-0.41h-0.621l-0.964,4.508
116
+ L19.755,89.079L19.755,89.079z"/>
117
+ <path fill="#FFFFFF" d="M25.628,90.018c-0.558,0-0.993-0.156-1.306-0.472s-0.469-0.753-0.469-1.315s0.11-1.084,0.329-1.565
118
+ c0.219-0.483,0.517-0.856,0.892-1.12s0.795-0.395,1.26-0.395c0.456,0,0.811,0.103,1.064,0.308c0.253,0.206,0.38,0.497,0.38,0.873
119
+ c0,0.517-0.236,0.919-0.708,1.209c-0.472,0.29-1.144,0.437-2.016,0.437h-0.183l-0.009,0.131v0.123c0,0.314,0.08,0.562,0.24,0.74
120
+ c0.16,0.178,0.398,0.268,0.716,0.268c0.204,0,0.406-0.027,0.607-0.082c0.201-0.053,0.439-0.145,0.714-0.275v0.795
121
+ c-0.272,0.124-0.522,0.213-0.75,0.266C26.163,89.991,25.909,90.018,25.628,90.018z M26.274,85.914
122
+ c-0.272,0-0.527,0.122-0.767,0.365c-0.239,0.242-0.411,0.564-0.516,0.964h0.124c0.532,0,0.949-0.075,1.249-0.228
123
+ c0.3-0.15,0.451-0.365,0.451-0.644c0-0.146-0.045-0.257-0.136-0.338C26.587,85.954,26.452,85.914,26.274,85.914z"/>
124
+ <path fill="#FFFFFF" d="M28.914,89.934l-0.557-4.699h0.985l0.234,2.541c0.04,0.449,0.06,0.871,0.06,1.262h0.03
125
+ c0.079-0.209,0.178-0.443,0.297-0.701c0.119-0.257,0.211-0.443,0.276-0.561l1.321-2.541h1.062l-2.541,4.699H28.914L28.914,89.934z"
126
+ />
127
+ <path fill="#FFFFFF" d="M34.256,90.018c-0.558,0-0.993-0.156-1.306-0.472s-0.469-0.753-0.469-1.315s0.11-1.084,0.329-1.565
128
+ c0.219-0.483,0.517-0.856,0.892-1.12s0.795-0.395,1.26-0.395c0.456,0,0.811,0.103,1.064,0.308c0.253,0.206,0.38,0.497,0.38,0.873
129
+ c0,0.517-0.236,0.919-0.708,1.209c-0.472,0.29-1.144,0.437-2.016,0.437H33.5l-0.009,0.131v0.123c0,0.314,0.08,0.562,0.24,0.74
130
+ c0.16,0.178,0.398,0.268,0.716,0.268c0.204,0,0.406-0.027,0.607-0.082c0.201-0.053,0.439-0.145,0.714-0.275v0.795
131
+ c-0.272,0.124-0.522,0.213-0.75,0.266C34.791,89.991,34.537,90.018,34.256,90.018z M34.902,85.914
132
+ c-0.272,0-0.527,0.122-0.767,0.365c-0.239,0.242-0.411,0.564-0.516,0.964h0.124c0.532,0,0.949-0.075,1.249-0.228
133
+ c0.3-0.15,0.451-0.365,0.451-0.644c0-0.146-0.045-0.257-0.136-0.338C35.215,85.954,35.08,85.914,34.902,85.914z"/>
134
+ <path fill="#FFFFFF" d="M37.754,89.934H36.76l1.402-6.611h0.998L37.754,89.934z"/>
135
+ <path fill="#FFFFFF" d="M43.449,86.993c0,0.571-0.104,1.092-0.31,1.562c-0.206,0.469-0.491,0.828-0.852,1.078
136
+ c-0.361,0.251-0.777,0.376-1.247,0.376c-0.543,0-0.976-0.161-1.295-0.485c-0.32-0.324-0.48-0.766-0.48-1.323
137
+ c0-0.563,0.101-1.08,0.304-1.552c0.202-0.469,0.486-0.836,0.852-1.098c0.366-0.262,0.788-0.393,1.266-0.393
138
+ c0.552,0,0.984,0.164,1.295,0.492S43.449,86.428,43.449,86.993z M42.442,86.95c0-0.304-0.069-0.54-0.208-0.712
139
+ c-0.139-0.172-0.337-0.256-0.595-0.256c-0.263,0-0.499,0.101-0.707,0.304c-0.208,0.202-0.37,0.478-0.484,0.823
140
+ c-0.115,0.348-0.172,0.718-0.172,1.111c0,0.313,0.07,0.555,0.21,0.721c0.14,0.168,0.348,0.252,0.623,0.252
141
+ c0.255,0,0.484-0.096,0.688-0.289c0.204-0.192,0.362-0.463,0.476-0.809C42.385,87.748,42.442,87.367,42.442,86.95z"/>
142
+ <path fill="#FFFFFF" d="M46.221,90.018c-0.513,0-0.894-0.248-1.143-0.748h-0.042c-0.02,0.275-0.055,0.537-0.106,0.787l-0.408,1.967
143
+ h-0.99l1.436-6.789h0.782l-0.089,0.8h0.038c0.445-0.589,0.932-0.884,1.461-0.884c0.405,0,0.722,0.146,0.952,0.438
144
+ s0.344,0.696,0.344,1.215c0,0.578-0.099,1.118-0.297,1.621c-0.198,0.502-0.468,0.895-0.81,1.174
145
+ C47.007,89.878,46.631,90.018,46.221,90.018z M46.786,85.965c-0.229,0-0.458,0.112-0.684,0.338
146
+ c-0.227,0.225-0.412,0.523-0.554,0.895c-0.143,0.371-0.215,0.755-0.215,1.15c0,0.272,0.066,0.484,0.198,0.637
147
+ c0.132,0.152,0.318,0.228,0.559,0.228c0.241,0,0.466-0.11,0.675-0.334s0.375-0.521,0.497-0.892
148
+ c0.122-0.373,0.183-0.762,0.183-1.168C47.444,86.25,47.225,85.965,46.786,85.965z"/>
149
+ <path fill="#FFFFFF" d="M52.203,85.148c0.623,0,0.982,0.334,1.079,0.998h0.034c0.213-0.328,0.453-0.576,0.725-0.744
150
+ c0.271-0.17,0.552-0.254,0.843-0.254c0.378,0,0.664,0.108,0.86,0.326c0.197,0.217,0.295,0.521,0.295,0.914
151
+ c0,0.182-0.03,0.438-0.094,0.77l-0.594,2.773h-0.998l0.606-2.854c0.054-0.27,0.08-0.458,0.08-0.564
152
+ c0-0.365-0.171-0.549-0.515-0.549c-0.305,0-0.592,0.176-0.855,0.527c-0.266,0.352-0.458,0.816-0.579,1.396l-0.43,2.043h-0.998
153
+ l0.606-2.854c0.049-0.232,0.072-0.412,0.072-0.54c0-0.382-0.166-0.573-0.496-0.573c-0.313,0-0.601,0.18-0.865,0.54
154
+ c-0.265,0.358-0.461,0.839-0.587,1.437l-0.417,1.992h-1.002l1.002-4.699h0.782l-0.089,0.871h0.038
155
+ C51.127,85.469,51.626,85.148,52.203,85.148z"/>
156
+ <path fill="#FFFFFF" d="M58.591,90.018c-0.558,0-0.993-0.156-1.306-0.472c-0.313-0.313-0.471-0.753-0.471-1.315
157
+ s0.109-1.084,0.33-1.565c0.219-0.483,0.517-0.856,0.893-1.12c0.375-0.264,0.795-0.395,1.259-0.395c0.456,0,0.812,0.103,1.063,0.308
158
+ c0.254,0.206,0.381,0.497,0.381,0.873c0,0.517-0.235,0.919-0.707,1.209c-0.473,0.29-1.145,0.437-2.016,0.437h-0.184l-0.009,0.131
159
+ v0.123c0,0.314,0.079,0.562,0.239,0.74c0.16,0.178,0.398,0.268,0.717,0.268c0.203,0,0.406-0.027,0.607-0.082
160
+ c0.2-0.053,0.438-0.145,0.713-0.275v0.795c-0.271,0.124-0.521,0.213-0.75,0.266C59.126,89.991,58.871,90.018,58.591,90.018z
161
+ M59.236,85.914c-0.271,0-0.527,0.122-0.768,0.365c-0.24,0.242-0.41,0.564-0.516,0.964h0.123c0.531,0,0.947-0.075,1.249-0.228
162
+ c0.3-0.15,0.45-0.365,0.45-0.644c0-0.146-0.047-0.257-0.137-0.338C59.55,85.954,59.415,85.914,59.236,85.914z"/>
163
+ <path fill="#FFFFFF" d="M63.878,89.934l0.603-2.854c0.053-0.255,0.078-0.44,0.078-0.558c0-0.371-0.184-0.557-0.549-0.557
164
+ c-0.203,0-0.404,0.081-0.604,0.242s-0.377,0.395-0.535,0.699c-0.159,0.304-0.277,0.648-0.357,1.033l-0.416,1.992h-1.002
165
+ l1.002-4.697h0.781l-0.089,0.871h0.038c0.234-0.336,0.479-0.578,0.727-0.729c0.25-0.151,0.521-0.228,0.813-0.228
166
+ c0.38,0,0.673,0.106,0.882,0.322c0.208,0.215,0.312,0.521,0.312,0.918c0,0.194-0.031,0.451-0.098,0.768l-0.582,2.775h-1.003V89.934
167
+ z"/>
168
+ <path fill="#FFFFFF" d="M67.873,89.211c0.191,0,0.406-0.044,0.643-0.132v0.756c-0.1,0.048-0.233,0.091-0.404,0.127
169
+ c-0.17,0.037-0.34,0.056-0.51,0.056c-0.775,0-1.164-0.35-1.164-1.049c0-0.162,0.022-0.348,0.068-0.557l0.514-2.422h-0.688
170
+ l0.09-0.467l0.807-0.35l0.549-0.984h0.619l-0.221,1.045h1.186l-0.166,0.756H68.02l-0.52,2.43c-0.036,0.156-0.055,0.286-0.055,0.393
171
+ c0,0.121,0.035,0.219,0.105,0.291C67.621,89.175,67.729,89.211,67.873,89.211z"/>
172
+ </g>
173
+ <g>
174
+ <path fill="#FFFFFF" d="M22.824,50.781h-3.766l2.282-10.969h-3.053l0.665-3.111h9.9l-0.684,3.111h-3.063L22.824,50.781z"/>
175
+ <path fill="#FFFFFF" d="M32.064,50.973c-1.342,0-2.377-0.361-3.106-1.087s-1.093-1.763-1.093-3.111s0.255-2.566,0.766-3.655
176
+ c0.51-1.088,1.228-1.934,2.152-2.538c0.925-0.604,2.003-0.905,3.236-0.905c1.342,0,2.377,0.363,3.106,1.088
177
+ c0.729,0.726,1.093,1.763,1.093,3.111s-0.255,2.566-0.766,3.655c-0.511,1.088-1.228,1.935-2.152,2.538
178
+ C34.376,50.672,33.297,50.973,32.064,50.973z M33.586,42.479c-0.527,0-0.978,0.448-1.353,1.344
179
+ c-0.376,0.896-0.563,1.921-0.563,3.077c0,0.854,0.27,1.281,0.809,1.281c0.521,0,0.973-0.446,1.358-1.339
180
+ c0.385-0.893,0.578-1.92,0.578-3.082c0-0.423-0.074-0.743-0.222-0.958C34.045,42.586,33.843,42.479,33.586,42.479z"/>
181
+ <path fill="#FFFFFF" d="M43.424,50.973c-1.342,0-2.377-0.361-3.106-1.087s-1.093-1.763-1.093-3.111s0.255-2.566,0.766-3.655
182
+ c0.51-1.088,1.228-1.934,2.152-2.538c0.925-0.604,2.003-0.905,3.236-0.905c1.342,0,2.377,0.363,3.106,1.088
183
+ c0.729,0.726,1.093,1.763,1.093,3.111s-0.255,2.566-0.766,3.655c-0.511,1.088-1.228,1.935-2.152,2.538
184
+ C45.735,50.672,44.657,50.973,43.424,50.973z M44.946,42.479c-0.527,0-0.978,0.448-1.353,1.344
185
+ c-0.376,0.896-0.563,1.921-0.563,3.077c0,0.854,0.27,1.281,0.809,1.281c0.521,0,0.973-0.446,1.358-1.339
186
+ c0.385-0.893,0.578-1.92,0.578-3.082c0-0.423-0.074-0.743-0.222-0.958C45.405,42.586,45.202,42.479,44.946,42.479z"/>
187
+ <path fill="#FFFFFF" d="M53.725,50.781h-3.728l3.168-14.985h3.728L53.725,50.781z"/>
188
+ <path fill="#FFFFFF" d="M64.159,46.996c0,1.277-0.418,2.26-1.252,2.947c-0.835,0.687-2.035,1.03-3.603,1.03
189
+ c-1.426,0-2.568-0.201-3.429-0.605v-2.995c0.591,0.321,1.14,0.546,1.646,0.674c0.508,0.129,1.021,0.193,1.541,0.193
190
+ c0.438,0,0.765-0.059,0.982-0.178c0.219-0.119,0.327-0.284,0.327-0.496c0-0.225-0.083-0.419-0.25-0.583s-0.585-0.435-1.252-0.814
191
+ c-0.681-0.372-1.177-0.799-1.488-1.281c-0.312-0.482-0.467-1.069-0.467-1.762c0-1.104,0.39-1.955,1.165-2.552
192
+ c0.777-0.597,1.881-0.896,3.313-0.896c0.719,0,1.373,0.083,1.965,0.25c0.591,0.167,1.166,0.424,1.725,0.771l-1.166,2.427
193
+ c-0.424-0.276-0.861-0.496-1.314-0.66c-0.451-0.164-0.843-0.246-1.17-0.246c-0.488,0-0.73,0.218-0.73,0.655
194
+ c0,0.186,0.101,0.35,0.303,0.491c0.202,0.141,0.531,0.324,0.987,0.549C63.438,44.633,64.159,45.661,64.159,46.996z"/>
195
+ <path fill="#FFFFFF" d="M69.99,50.973c-1.361,0-2.422-0.38-3.18-1.141c-0.758-0.761-1.137-1.818-1.137-3.173
196
+ c0-1.354,0.27-2.576,0.805-3.665c0.537-1.088,1.271-1.913,2.205-2.475c0.936-0.562,2.016-0.842,3.241-0.842
197
+ c1.22,0,2.181,0.276,2.88,0.828c0.699,0.552,1.049,1.287,1.049,2.206c0,1.29-0.502,2.281-1.506,2.971
198
+ c-1.006,0.69-2.457,1.036-4.357,1.036h-0.568v0.154c0,0.95,0.526,1.425,1.579,1.425c0.507,0,1.005-0.075,1.493-0.226
199
+ c0.486-0.151,1.043-0.39,1.666-0.718v2.639c-0.721,0.366-1.391,0.621-2.014,0.766C71.523,50.9,70.805,50.973,69.99,50.973z
200
+ M71.512,42.2c-0.392,0-0.758,0.223-1.099,0.669c-0.34,0.446-0.545,0.952-0.616,1.517h0.279c0.699,0,1.249-0.133,1.646-0.399
201
+ c0.397-0.267,0.598-0.618,0.598-1.055c0-0.206-0.064-0.379-0.192-0.52C71.999,42.271,71.794,42.2,71.512,42.2z"/>
202
+ <path fill="#FFFFFF" d="M81.139,47.978c0.424,0,1.012-0.15,1.762-0.453v2.803c-0.873,0.43-1.963,0.645-3.273,0.645
203
+ c-0.95,0-1.671-0.203-2.162-0.611c-0.49-0.407-0.736-1.077-0.736-2.008c0-0.488,0.078-1.092,0.231-1.811l0.81-3.872h-1.483
204
+ l0.396-1.83l2.101-0.848l1.319-2.311h2.483l-0.472,2.186h2.773l-0.607,2.803h-2.782l-0.81,3.688
205
+ c-0.104,0.494-0.154,0.832-0.154,1.011C80.531,47.776,80.732,47.978,81.139,47.978z"/>
206
+ </g>
207
+ </svg>
embedded/toolset/onthego-resources/onthegosystems-icons/vectors/types-logo.svg ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
4
+ <svg version="1.1" baseProfile="tiny" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
5
+ x="0px" y="0px" width="80px" height="80px" viewBox="0 0 80 80" xml:space="preserve">
6
+ <g>
7
+ <path fill="#333333" d="M58,16V4H46v12H34V4H22v12H10v60h60V16H58z M17,35.775c0-0.619,0.346-1.158,0.552-1.352
8
+ C17.757,34.233,18.419,34,19.053,34h1.227c0.882,0,1.452,0.052,1.709-0.121c0.258-0.169,0.492-0.565,0.703-1.314l0.238-0.875
9
+ c0.158-0.567,0.38-1.111,0.671-1.281C23.89,30.251,24.457,30,25.299,30h7.317c0.75,0,1.234,0.266,1.452,0.417
10
+ c0.218,0.151,0.413,0.646,0.584,1.291l0.237,0.955c0.184,0.753,0.422,1.089,0.712,1.233C35.891,34.042,36.656,34,37.895,34h13.74
11
+ C52.625,34,53,34.779,53,35.794V38H30.104c-1.437,0-2.326-0.055-2.67,0.145c-0.341,0.195-1.068,0.817-1.688,2.018L17,56.654V35.775
12
+ z M64.018,42.542L55.26,60H19.889l8.957-17.52c0.303-0.605,0.6-1.022,0.89-1.194c0.29-0.17,0.816-0.286,1.582-0.286h31.911
13
+ c0.775,0,1.186,0.167,1.226,0.441C64.453,41.523,64.309,41.908,64.018,42.542z"/>
14
+ </g>
15
+ </svg>
embedded/toolset/onthego-resources/onthegosystems-icons/vectors/types.svg ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
4
+ <svg version="1.1" baseProfile="tiny" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
5
+ x="0px" y="0px" width="80px" height="80px" viewBox="0 0 80 80" xml:space="preserve">
6
+ <g>
7
+ <path fill="#333333" d="M63.229,41H31.318c-0.766,0-1.292,0.165-1.583,0.335c-0.29,0.172-0.586,0.501-0.89,1.106L19.889,60H55.26
8
+ l8.758-17.458c0.291-0.634,0.437-1.019,0.437-1.101C64.413,41.167,64.004,41,63.229,41z"/>
9
+ <path fill="#333333" d="M27.435,38.145c0.344-0.2,1.233-0.145,2.669-0.145H53v-2.206C53,34.779,52.625,34,51.635,34h-13.74
10
+ c-1.239,0-2.003,0.066-2.293-0.081c-0.29-0.144-0.528-0.524-0.712-1.277l-0.237-0.874c-0.171-0.645-0.366-1.217-0.584-1.369
11
+ C33.851,30.249,33.367,30,32.617,30H25.3c-0.842,0-1.409,0.269-1.7,0.426c-0.291,0.17-0.513,0.636-0.671,1.204l-0.238,0.956
12
+ c-0.21,0.749-0.445,1.101-0.703,1.27C21.731,34.028,21.162,34,20.279,34h-1.227c-0.633,0-1.295,0.233-1.501,0.424
13
+ C17.346,34.617,17,35.156,17,35.775v20.879l8.747-16.492C26.366,38.962,27.093,38.34,27.435,38.145z"/>
14
+ </g>
15
+ </svg>
embedded/toolset/onthego-resources/onthegosystems-icons/vectors/views-logo.svg ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
4
+ <svg version="1.1" baseProfile="tiny" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
5
+ x="0px" y="0px" width="80px" height="80px" viewBox="0 0 80 80" xml:space="preserve">
6
+ <g>
7
+ <g>
8
+ <path fill="#333333" d="M58,16V4H46v12H34V4H22v12H10v60h60V16H58z M18.673,46.146c0,0,19.355-26.336,43.155,0
9
+ C61.828,46.146,42.473,73.117,18.673,46.146z"/>
10
+ <path fill="#333333" d="M40.249,38.155c-4.489,0-8.13,3.642-8.13,8.134c0,4.488,3.641,8.131,8.13,8.131
11
+ c4.494,0,8.134-3.643,8.134-8.131C48.383,41.797,44.742,38.155,40.249,38.155z M40.249,51.648c-2.958,0-5.359-2.4-5.359-5.359
12
+ c0-2.962,2.401-5.361,5.359-5.361c2.962,0,5.362,2.399,5.362,5.361C45.611,49.248,43.211,51.648,40.249,51.648z"/>
13
+ </g>
14
+ </g>
15
+ </svg>
embedded/toolset/onthego-resources/onthegosystems-icons/vectors/views.svg ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
4
+ <svg version="1.1" baseProfile="tiny" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
5
+ x="0px" y="0px" width="80px" height="80px" viewBox="0 0 80 80" xml:space="preserve">
6
+ <path fill="#333333" d="M18.673,46.146c23.8,26.971,43.155,0,43.155,0C38.028,19.81,18.673,46.146,18.673,46.146z M40.249,54.42
7
+ c-4.489,0-8.13-3.643-8.13-8.131c0-4.492,3.641-8.134,8.13-8.134c4.494,0,8.134,3.642,8.134,8.134
8
+ C48.383,50.777,44.742,54.42,40.249,54.42z"/>
9
+ <path fill="#333333" d="M40.249,51.648c-2.958,0-5.359-2.4-5.359-5.359c0-2.962,2.401-5.361,5.359-5.361
10
+ c2.962,0,5.362,2.399,5.362,5.361C45.611,49.248,43.211,51.648,40.249,51.648z"/>
11
+ <path fill="#333333" d="M40.249,40.928c-2.958,0-5.359,2.399-5.359,5.361c0,2.959,2.401,5.359,5.359,5.359
12
+ c2.962,0,5.362-2.4,5.362-5.359C45.611,43.327,43.211,40.928,40.249,40.928z"/>
13
+ </svg>
embedded/toolset/onthego-resources/onthegosystems-icons/vectors/wpml-logo.svg ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
4
+ <svg version="1.1" baseProfile="tiny" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
5
+ x="0px" y="0px" width="136px" height="142px" viewBox="0 0 136 142" xml:space="preserve">
6
+ <path fill="#58595B" d="M80.434,78.539c0.678,10.414,9.646,17.928,19.194,17.914c12.908-0.012,18.667-12.064,20.474-21.752
7
+ C127.609,34.315,96.697,3.656,59.96,8.16c-19.937,2.445-48.971,24.759-44.787,60.142c3.727,31.556,39.58,56.212,78.056,39.671
8
+ c16.635-7.156,23.711,23.221,5.119,24.311c-3.517-2.055-3-8.145-4.701-12.012c-0.369-1.569-1.131-2.885-2.142-3.719
9
+ c-0.796-0.947-1.819-1.552-2.97-1.628c-2.838-0.19-5.355,2.861-5.622,6.816c-0.185,2.771,0.791,5.245,2.366,6.546
10
+ c0.414,0.492,0.887,0.895,1.41,1.174c3.945,4.432,13.037,5.826,18.055,4.102c11.99-4.121,10.826-25.851-3.837-28.152
11
+ c-9.278-1.457-13.55,3.826-19.194,5.117c-38.132,8.701-60.616-26.934-56.301-55.021c2.827-18.389,19.001-33.68,35.827-37.11
12
+ c18.694-3.813,39.768,2.739,40.946,16.635C103.811,54.212,79.193,59.458,80.434,78.539z"/>
13
+ </svg>
embedded/toolset/onthego-resources/readme.md ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # OnTheGoSystem Resources loader master branch
2
+
3
+ We have code and resources in GIT for branding of our plugins.
4
+ https://www.onthegosystems.com/misc_svn/onthegosystems-branding/
5
+
6
+ It contains icons (as fonts) and colors for Toolset plugins.
7
+
8
+ For example the menu icons and icon and color of popups.
9
+
10
+ ## Including the code:
11
+
12
+ Plugins can include this code via SVN externals.
13
+
14
+ ## Loading code and resources:
15
+
16
+ The loader.php should be included early in the main plugin.php file. Then the onthego_intialize function should be called. The onthego_intialize function should be passed the file path to the directory where loader.php is and the URL to the directory where loader.php is.
17
+
18
+ require PATH_TO_ONTHEGO_RESOURCES_DIR . 'loader.php';
19
+ onthego_initialize(PATH_TO_ONTHEGO_RESOURCES_DIR, URL_TO_ONTHEGO_RESOURCES_DIR);
20
+
21
+ ### Loading the latest version of the resources when multiple plugins use the code:
22
+
23
+ Normally the first plugin that runs its code will determine what resources get loaded.
24
+
25
+ loader.php is responsible for loading the latest version of the resources. The loader.php has a version number and keeps a record of the path and url for that version of the code.
26
+
27
+ Then after all the plugins code are loaded it uses the ‘plugins_loaded’ hook to then find the latest version of the code and then uses the matching path to load further php files and the matching url for loading the resources.
28
+
29
+ This way a user can have various versions of the onthego branding resources in his plugins but the code will always ensure that the latest version is used.
30
+
31
+
32
+ // This version number should always be incremented by 1 whenever a change
33
+ // is made to the onthego-resources code.
34
+ // The version number will then be used to work out which plugin has the latest
35
+ // version of the code.
36
+
37
+ $onthegosystems_branding_version = 1;
38
+
39
+
40
+ // ----------------------------------------------------------------------//
41
+ // WARNING * WARNING *WARNING
42
+ // ----------------------------------------------------------------------//
43
+
44
+ // Don't modify or add to this code.
45
+ // This is only responsible for making sure the latest version of the resources
46
+ // is loaded.
47
+
48
+ global $onthegosystems_branding_paths;
49
+
50
+ if (!isset($onthegosystems_branding_paths)) {
51
+ $onthegosystems_branding_paths = array();
52
+ }
53
+
54
+ if (!isset($onthegosystems_branding_paths[$onthegosystems_branding_version])) {
55
+ // Save the path to this version.
56
+ $onthegosystems_branding_paths[$onthegosystems_branding_version]['path'] = str_replace('\\', '/', dirname(__FILE__));
57
+ }
58
+
59
+
60
+ function onthego_initialize($path, $url) {
61
+ global $onthegosystems_branding_paths;
62
+
63
+ $path = str_replace('\\', '/', $path);
64
+
65
+ if (substr($path, strlen($path) - 1) == '/') {
66
+ $path = substr($path, 0, strlen($path) - 1);
67
+ }
68
+
69
+ // Save the url in the matching path
70
+ foreach ($onthegosystems_branding_paths as $key => $data) {
71
+ if ($onthegosystems_branding_paths[$key]['path'] == $path) {
72
+ $onthegosystems_branding_paths[$key]['url'] = $url;
73
+ break;
74
+ }
75
+ }
76
+ }
77
+
78
+
79
+ function on_the_go_systems_branding_plugins_loaded()
80
+ {
81
+ global $onthegosystems_branding_paths;
82
+
83
+ // find the latest version
84
+ $latest = 0;
85
+ foreach ($onthegosystems_branding_paths as $key => $data) {
86
+ if ($key > $latest) {
87
+ $latest = $key;
88
+ }
89
+ }
90
+
91
+ if ($latest > 0) {
92
+ require_once $onthegosystems_branding_paths[$latest]['path'] . '/onthegosystems-branding-loader.php';
93
+ ont_set_on_the_go_systems_uri_and_start( $onthegosystems_branding_paths[$latest]['url'] );
94
+ }
95
+ }
96
+
97
+ add_action( 'plugins_loaded', 'on_the_go_systems_branding_plugins_loaded');
98
+
embedded/toolset/toolset-common/WPML/wpml-string-shortcode.php ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /** provide default implementation of [wpml-string] shortcode for when
3
+ * wpml plugin is not active.
4
+ */
5
+
6
+ if (!isset($wpml_string_sub_active)) {
7
+
8
+ add_action('init', 'stub_wpml_add_shortcode', 100);
9
+
10
+ $wpml_string_sub_active = true;
11
+
12
+ if( !function_exists('stub_wpml_add_shortcode') )
13
+ {
14
+ function stub_wpml_add_shortcode() {
15
+ global $WPML_String_Translation;
16
+
17
+ if (!isset($WPML_String_Translation)) {
18
+ // WPML string translation is not active
19
+ // Add our own do nothing shortcode
20
+
21
+ add_shortcode('wpml-string', 'stub_wpml_string_shortcode');
22
+
23
+ }
24
+ }
25
+ }
26
+
27
+ if( !function_exists('stub_wpml_string_shortcode') )
28
+ {
29
+ function stub_wpml_string_shortcode($atts, $value) {
30
+ // return un-processed.
31
+ return do_shortcode($value);
32
+ }
33
+ }
34
+ }
embedded/toolset/toolset-common/Zip.php ADDED
@@ -0,0 +1,861 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Class to create and manage a Zip file.
4
+ *
5
+ * Initially inspired by CreateZipFile by Rochak Chauhan www.rochakchauhan.com (http://www.phpclasses.org/browse/package/2322.html)
6
+ * and
7
+ * http://www.pkware.com/documents/casestudies/APPNOTE.TXT Zip file specification.
8
+ *
9
+ * License: GNU LGPL 2.1.
10
+ *
11
+ * @author A. Grandt <php@grandt.com>
12
+ * @copyright 2009-2014 A. Grandt
13
+ * @license GNU LGPL 2.1
14
+ * @link http://www.phpclasses.org/package/6110
15
+ * @link https://github.com/Grandt/PHPZip
16
+ * @version 1.62
17
+ */
18
+ class Zip {
19
+ const VERSION = 1.62;
20
+
21
+ const ZIP_LOCAL_FILE_HEADER = "\x50\x4b\x03\x04"; // Local file header signature
22
+ const ZIP_CENTRAL_FILE_HEADER = "\x50\x4b\x01\x02"; // Central file header signature
23
+ const ZIP_END_OF_CENTRAL_DIRECTORY = "\x50\x4b\x05\x06\x00\x00\x00\x00"; //end of Central directory record
24
+
25
+ const EXT_FILE_ATTR_DIR = 010173200020; // Permission 755 drwxr-xr-x = (((S_IFDIR | 0755) << 16) | S_DOS_D);
26
+ const EXT_FILE_ATTR_FILE = 020151000040; // Permission 644 -rw-r--r-- = (((S_IFREG | 0644) << 16) | S_DOS_A);
27
+
28
+ const ATTR_VERSION_TO_EXTRACT = "\x14\x00"; // Version needed to extract
29
+ const ATTR_MADE_BY_VERSION = "\x1E\x03"; // Made By Version
30
+
31
+ // UID 1000, GID 0
32
+ const EXTRA_FIELD_NEW_UNIX_GUID = "\x75\x78\x0B\x00\x01\x04\xE8\x03\x00\x00\x04\x00\x00\x00\x00";
33
+
34
+ // Unix file types
35
+ const S_IFIFO = 0010000; // named pipe (fifo)
36
+ const S_IFCHR = 0020000; // character special
37
+ const S_IFDIR = 0040000; // directory
38
+ const S_IFBLK = 0060000; // block special
39
+ const S_IFREG = 0100000; // regular
40
+ const S_IFLNK = 0120000; // symbolic link
41
+ const S_IFSOCK = 0140000; // socket
42
+
43
+ // setuid/setgid/sticky bits, the same as for chmod:
44
+
45
+ const S_ISUID = 0004000; // set user id on execution
46
+ const S_ISGID = 0002000; // set group id on execution
47
+ const S_ISTXT = 0001000; // sticky bit
48
+
49
+ // And of course, the other 12 bits are for the permissions, the same as for chmod:
50
+ // When addding these up, you can also just write the permissions as a simgle octal number
51
+ // ie. 0755. The leading 0 specifies octal notation.
52
+ const S_IRWXU = 0000700; // RWX mask for owner
53
+ const S_IRUSR = 0000400; // R for owner
54
+ const S_IWUSR = 0000200; // W for owner
55
+ const S_IXUSR = 0000100; // X for owner
56
+ const S_IRWXG = 0000070; // RWX mask for group
57
+ const S_IRGRP = 0000040; // R for group
58
+ const S_IWGRP = 0000020; // W for group
59
+ const S_IXGRP = 0000010; // X for group
60
+ const S_IRWXO = 0000007; // RWX mask for other
61
+ const S_IROTH = 0000004; // R for other
62
+ const S_IWOTH = 0000002; // W for other
63
+ const S_IXOTH = 0000001; // X for other
64
+ const S_ISVTX = 0001000; // save swapped text even after use
65
+
66
+ // Filetype, sticky and permissions are added up, and shifted 16 bits left BEFORE adding the DOS flags.
67
+
68
+ // DOS file type flags, we really only use the S_DOS_D flag.
69
+
70
+ const S_DOS_A = 0000040; // DOS flag for Archive
71
+ const S_DOS_D = 0000020; // DOS flag for Directory
72
+ const S_DOS_V = 0000010; // DOS flag for Volume
73
+ const S_DOS_S = 0000004; // DOS flag for System
74
+ const S_DOS_H = 0000002; // DOS flag for Hidden
75
+ const S_DOS_R = 0000001; // DOS flag for Read Only
76
+
77
+ private $zipMemoryThreshold = 1048576; // Autocreate tempfile if the zip data exceeds 1048576 bytes (1 MB)
78
+
79
+ private $zipData = NULL;
80
+ private $zipFile = NULL;
81
+ private $zipComment = NULL;
82
+ private $cdRec = array(); // central directory
83
+ private $offset = 0;
84
+ private $isFinalized = FALSE;
85
+ private $addExtraField = TRUE;
86
+
87
+ private $streamChunkSize = 65536;
88
+ private $streamFilePath = NULL;
89
+ private $streamTimestamp = NULL;
90
+ private $streamFileComment = NULL;
91
+ private $streamFile = NULL;
92
+ private $streamData = NULL;
93
+ private $streamFileLength = 0;
94
+ private $streamExtFileAttr = null;
95
+ /**
96
+ * A custom temporary folder, or a callable that returns a custom temporary file.
97
+ * @var string|callable
98
+ */
99
+ public static $temp = null;
100
+
101
+ /**
102
+ * Constructor.
103
+ *
104
+ * @param boolean $useZipFile Write temp zip data to tempFile? Default FALSE
105
+ */
106
+ function __construct($useZipFile = FALSE) {
107
+ if ($useZipFile) {
108
+ $this->zipFile = tmpfile();
109
+ } else {
110
+ $this->zipData = "";
111
+ }
112
+ }
113
+
114
+ function __destruct() {
115
+ if (is_resource($this->zipFile)) {
116
+ fclose($this->zipFile);
117
+ }
118
+ $this->zipData = NULL;
119
+ }
120
+
121
+ /**
122
+ * Extra fields on the Zip directory records are Unix time codes needed for compatibility on the default Mac zip archive tool.
123
+ * These are enabled as default, as they do no harm elsewhere and only add 26 bytes per file added.
124
+ *
125
+ * @param bool $setExtraField TRUE (default) will enable adding of extra fields, anything else will disable it.
126
+ */
127
+ function setExtraField($setExtraField = TRUE) {
128
+ $this->addExtraField = ($setExtraField === TRUE);
129
+ }
130
+
131
+ /**
132
+ * Set Zip archive comment.
133
+ *
134
+ * @param string $newComment New comment. NULL to clear.
135
+ * @return bool $success
136
+ */
137
+ public function setComment($newComment = NULL) {
138
+ if ($this->isFinalized) {
139
+ return FALSE;
140
+ }
141
+ $this->zipComment = $newComment;
142
+
143
+ return TRUE;
144
+ }
145
+
146
+ /**
147
+ * Set zip file to write zip data to.
148
+ * This will cause all present and future data written to this class to be written to this file.
149
+ * This can be used at any time, even after the Zip Archive have been finalized. Any previous file will be closed.
150
+ * Warning: If the given file already exists, it will be overwritten.
151
+ *
152
+ * @param string $fileName
153
+ * @return bool $success
154
+ */
155
+ public function setZipFile($fileName) {
156
+ if (is_file($fileName)) {
157
+ unlink($fileName);
158
+ }
159
+ $fd=fopen($fileName, "x+b");
160
+ if (is_resource($this->zipFile)) {
161
+ rewind($this->zipFile);
162
+ while (!feof($this->zipFile)) {
163
+ fwrite($fd, fread($this->zipFile, $this->streamChunkSize));
164
+ }
165
+
166
+ fclose($this->zipFile);
167
+ } else {
168
+ fwrite($fd, $this->zipData);
169
+ $this->zipData = NULL;
170
+ }
171
+ $this->zipFile = $fd;
172
+
173
+ return TRUE;
174
+ }
175
+
176
+ /**
177
+ * Add an empty directory entry to the zip archive.
178
+ * Basically this is only used if an empty directory is added.
179
+ *
180
+ * @param string $directoryPath Directory Path and name to be added to the archive.
181
+ * @param int $timestamp (Optional) Timestamp for the added directory, if omitted or set to 0, the current time will be used.
182
+ * @param string $fileComment (Optional) Comment to be added to the archive for this directory. To use fileComment, timestamp must be given.
183
+ * @param int $extFileAttr (Optional) The external file reference, use generateExtAttr to generate this.
184
+ * @return bool $success
185
+ */
186
+ public function addDirectory($directoryPath, $timestamp = 0, $fileComment = NULL, $extFileAttr = self::EXT_FILE_ATTR_DIR) {
187
+ if ($this->isFinalized) {
188
+ return FALSE;
189
+ }
190
+ $directoryPath = str_replace("\\", "/", $directoryPath);
191
+ $directoryPath = rtrim($directoryPath, "/");
192
+
193
+ if (strlen($directoryPath) > 0) {
194
+ $this->buildZipEntry($directoryPath.'/', $fileComment, "\x00\x00", "\x00\x00", $timestamp, "\x00\x00\x00\x00", 0, 0, $extFileAttr);
195
+ return TRUE;
196
+ }
197
+ return FALSE;
198
+ }
199
+
200
+ /**
201
+ * Add a file to the archive at the specified location and file name.
202
+ *
203
+ * @param string $data File data.
204
+ * @param string $filePath Filepath and name to be used in the archive.
205
+ * @param int $timestamp (Optional) Timestamp for the added file, if omitted or set to 0, the current time will be used.
206
+ * @param string $fileComment (Optional) Comment to be added to the archive for this file. To use fileComment, timestamp must be given.
207
+ * @param bool $compress (Optional) Compress file, if set to FALSE the file will only be stored. Default TRUE.
208
+ * @param int $extFileAttr (Optional) The external file reference, use generateExtAttr to generate this.
209
+ * @return bool $success
210
+ */
211
+ public function addFile($data, $filePath, $timestamp = 0, $fileComment = NULL, $compress = TRUE, $extFileAttr = self::EXT_FILE_ATTR_FILE) {
212
+ if ($this->isFinalized) {
213
+ return FALSE;
214
+ }
215
+
216
+ if (is_resource($data) && get_resource_type($data) == "stream") {
217
+ $this->addLargeFile($data, $filePath, $timestamp, $fileComment, $extFileAttr);
218
+ return FALSE;
219
+ }
220
+
221
+ $gzData = "";
222
+ $gzType = "\x08\x00"; // Compression type 8 = deflate
223
+ $gpFlags = "\x00\x00"; // General Purpose bit flags for compression type 8 it is: 0=Normal, 1=Maximum, 2=Fast, 3=super fast compression.
224
+ $dataLength = strlen($data);
225
+ $fileCRC32 = pack("V", crc32($data));
226
+
227
+ if ($compress) {
228
+ $gzTmp = gzcompress($data);
229
+ $gzData = substr(substr($gzTmp, 0, strlen($gzTmp) - 4), 2); // gzcompress adds a 2 byte header and 4 byte CRC we can't use.
230
+ // The 2 byte header does contain useful data, though in this case the 2 parameters we'd be interrested in will always be 8 for compression type, and 2 for General purpose flag.
231
+ $gzLength = strlen($gzData);
232
+ } else {
233
+ $gzLength = $dataLength;
234
+ }
235
+
236
+ if ($gzLength >= $dataLength) {
237
+ $gzLength = $dataLength;
238
+ $gzData = $data;
239
+ $gzType = "\x00\x00"; // Compression type 0 = stored
240
+ $gpFlags = "\x00\x00"; // Compression type 0 = stored
241
+ }
242
+
243
+ if (!is_resource($this->zipFile) && ($this->offset + $gzLength) > $this->zipMemoryThreshold) {
244
+ $this->zipflush();
245
+ }
246
+
247
+ $this->buildZipEntry($filePath, $fileComment, $gpFlags, $gzType, $timestamp, $fileCRC32, $gzLength, $dataLength, $extFileAttr);
248
+
249
+ $this->zipwrite($gzData);
250
+
251
+ return TRUE;
252
+ }
253
+
254
+ /**
255
+ * Add the content to a directory.
256
+ *
257
+ * @author Adam Schmalhofer <Adam.Schmalhofer@gmx.de>
258
+ * @author A. Grandt
259
+ *
260
+ * @param string $realPath Path on the file system.
261
+ * @param string $zipPath Filepath and name to be used in the archive.
262
+ * @param bool $recursive Add content recursively, default is TRUE.
263
+ * @param bool $followSymlinks Follow and add symbolic links, if they are accessible, default is TRUE.
264
+ * @param array &$addedFiles Reference to the added files, this is used to prevent duplicates, efault is an empty array.
265
+ * If you start the function by parsing an array, the array will be populated with the realPath
266
+ * and zipPath kay/value pairs added to the archive by the function.
267
+ * @param bool $overrideFilePermissions Force the use of the file/dir permissions set in the $extDirAttr
268
+ * and $extFileAttr parameters.
269
+ * @param int $extDirAttr Permissions for directories.
270
+ * @param int $extFileAttr Permissions for files.
271
+ */
272
+ public function addDirectoryContent($realPath, $zipPath, $recursive = TRUE, $followSymlinks = TRUE, &$addedFiles = array(),
273
+ $overrideFilePermissions = FALSE, $extDirAttr = self::EXT_FILE_ATTR_DIR, $extFileAttr = self::EXT_FILE_ATTR_FILE) {
274
+ if (file_exists($realPath) && !isset($addedFiles[realpath($realPath)])) {
275
+ if (is_dir($realPath)) {
276
+ if ($overrideFilePermissions) {
277
+ $this->addDirectory($zipPath, 0, null, $extDirAttr);
278
+ } else {
279
+ $this->addDirectory($zipPath, 0, null, self::getFileExtAttr($realPath));
280
+ }
281
+ }
282
+
283
+ $addedFiles[realpath($realPath)] = $zipPath;
284
+
285
+ $iter = new DirectoryIterator($realPath);
286
+ foreach ($iter as $file) {
287
+ if ($file->isDot()) {
288
+ continue;
289
+ }
290
+ $newRealPath = $file->getPathname();
291
+ $newZipPath = self::pathJoin($zipPath, $file->getFilename());
292
+
293
+ if (file_exists($newRealPath) && ($followSymlinks === TRUE || !is_link($newRealPath))) {
294
+ if ($file->isFile()) {
295
+ $addedFiles[realpath($newRealPath)] = $newZipPath;
296
+ if ($overrideFilePermissions) {
297
+ $this->addLargeFile($newRealPath, $newZipPath, 0, null, $extFileAttr);
298
+ } else {
299
+ $this->addLargeFile($newRealPath, $newZipPath, 0, null, self::getFileExtAttr($newRealPath));
300
+ }
301
+ } else if ($recursive === TRUE) {
302
+ $this->addDirectoryContent($newRealPath, $newZipPath, $recursive, $followSymlinks, $addedFiles, $overrideFilePermissions, $extDirAttr, $extFileAttr);
303
+ } else {
304
+ if ($overrideFilePermissions) {
305
+ $this->addDirectory($zipPath, 0, null, $extDirAttr);
306
+ } else {
307
+ $this->addDirectory($zipPath, 0, null, self::getFileExtAttr($newRealPath));
308
+ }
309
+ }
310
+ }
311
+ }
312
+ }
313
+ }
314
+
315
+ /**
316
+ * Add a file to the archive at the specified location and file name.
317
+ *
318
+ * @param string $dataFile File name/path.
319
+ * @param string $filePath Filepath and name to be used in the archive.
320
+ * @param int $timestamp (Optional) Timestamp for the added file, if omitted or set to 0, the current time will be used.
321
+ * @param string $fileComment (Optional) Comment to be added to the archive for this file. To use fileComment, timestamp must be given.
322
+ * @param int $extFileAttr (Optional) The external file reference, use generateExtAttr to generate this.
323
+ * @return bool $success
324
+ */
325
+ public function addLargeFile($dataFile, $filePath, $timestamp = 0, $fileComment = NULL, $extFileAttr = self::EXT_FILE_ATTR_FILE) {
326
+ if ($this->isFinalized) {
327
+ return FALSE;
328
+ }
329
+
330
+ if (is_string($dataFile) && is_file($dataFile)) {
331
+ $this->processFile($dataFile, $filePath, $timestamp, $fileComment, $extFileAttr);
332
+ } else if (is_resource($dataFile) && get_resource_type($dataFile) == "stream") {
333
+ $fh = $dataFile;
334
+ $this->openStream($filePath, $timestamp, $fileComment, $extFileAttr);
335
+
336
+ while (!feof($fh)) {
337
+ $this->addStreamData(fread($fh, $this->streamChunkSize));
338
+ }
339
+ $this->closeStream($this->addExtraField);
340
+ }
341
+ return TRUE;
342
+ }
343
+
344
+ /**
345
+ * Create a stream to be used for large entries.
346
+ *
347
+ * @param string $filePath Filepath and name to be used in the archive.
348
+ * @param int $timestamp (Optional) Timestamp for the added file, if omitted or set to 0, the current time will be used.
349
+ * @param string $fileComment (Optional) Comment to be added to the archive for this file. To use fileComment, timestamp must be given.
350
+ * @param int $extFileAttr (Optional) The external file reference, use generateExtAttr to generate this.
351
+ * @throws Exception Throws an exception in case of errors
352
+ * @return bool $success
353
+ */
354
+ public function openStream($filePath, $timestamp = 0, $fileComment = null, $extFileAttr = self::EXT_FILE_ATTR_FILE) {
355
+ if (!function_exists('sys_get_temp_dir')) {
356
+ throw new Exception("Zip " . self::VERSION . " requires PHP version 5.2.1 or above if large files are used.");
357
+ }
358
+
359
+ if ($this->isFinalized) {
360
+ return FALSE;
361
+ }
362
+
363
+ $this->zipflush();
364
+
365
+ if (strlen($this->streamFilePath) > 0) {
366
+ $this->closeStream();
367
+ }
368
+
369
+ $this->streamFile = self::getTemporaryFile();
370
+ $this->streamData = fopen($this->streamFile, "wb");
371
+ $this->streamFilePath = $filePath;
372
+ $this->streamTimestamp = $timestamp;
373
+ $this->streamFileComment = $fileComment;
374
+ $this->streamFileLength = 0;
375
+ $this->streamExtFileAttr = $extFileAttr;
376
+
377
+ return TRUE;
378
+ }
379
+
380
+ /**
381
+ * Add data to the open stream.
382
+ *
383
+ * @param string $data
384
+ * @throws Exception Throws an exception in case of errors
385
+ * @return mixed length in bytes added or FALSE if the archive is finalized or there are no open stream.
386
+ */
387
+ public function addStreamData($data) {
388
+ if ($this->isFinalized || strlen($this->streamFilePath) == 0) {
389
+ return FALSE;
390
+ }
391
+
392
+ $length = fwrite($this->streamData, $data, strlen($data));
393
+ if ($length != strlen($data)) {
394
+ throw new Exception("File IO: Error writing; Length mismatch: Expected " . strlen($data) . " bytes, wrote " . ($length === FALSE ? "NONE!" : $length));
395
+ }
396
+ $this->streamFileLength += $length;
397
+
398
+ return $length;
399
+ }
400
+
401
+ /**
402
+ * Close the current stream.
403
+ *
404
+ * @return bool $success
405
+ */
406
+ public function closeStream() {
407
+ if ($this->isFinalized || strlen($this->streamFilePath) == 0) {
408
+ return FALSE;
409
+ }
410
+
411
+ fflush($this->streamData);
412
+ fclose($this->streamData);
413
+
414
+ $this->processFile($this->streamFile, $this->streamFilePath, $this->streamTimestamp, $this->streamFileComment, $this->streamExtFileAttr);
415
+
416
+ $this->streamData = null;
417
+ $this->streamFilePath = null;
418
+ $this->streamTimestamp = null;
419
+ $this->streamFileComment = null;
420
+ $this->streamFileLength = 0;
421
+ $this->streamExtFileAttr = null;
422
+
423
+ // Windows is a little slow at times, so a millisecond later, we can unlink this.
424
+ unlink($this->streamFile);
425
+
426
+ $this->streamFile = null;
427
+
428
+ return TRUE;
429
+ }
430
+
431
+ private function processFile($dataFile, $filePath, $timestamp = 0, $fileComment = null, $extFileAttr = self::EXT_FILE_ATTR_FILE) {
432
+ if ($this->isFinalized) {
433
+ return FALSE;
434
+ }
435
+
436
+ $tempzip = self::getTemporaryFile();
437
+
438
+ $zip = new ZipArchive;
439
+ if ($zip->open($tempzip) === TRUE) {
440
+ $zip->addFile($dataFile, 'file');
441
+ $zip->close();
442
+ }
443
+
444
+ $file_handle = fopen($tempzip, "rb");
445
+ $stats = fstat($file_handle);
446
+ $eof = $stats['size']-72;
447
+
448
+ fseek($file_handle, 6);
449
+
450
+ $gpFlags = fread($file_handle, 2);
451
+ $gzType = fread($file_handle, 2);
452
+ fread($file_handle, 4);
453
+ $fileCRC32 = fread($file_handle, 4);
454
+ $v = unpack("Vval", fread($file_handle, 4));
455
+ $gzLength = $v['val'];
456
+ $v = unpack("Vval", fread($file_handle, 4));
457
+ $dataLength = $v['val'];
458
+
459
+ $this->buildZipEntry($filePath, $fileComment, $gpFlags, $gzType, $timestamp, $fileCRC32, $gzLength, $dataLength, $extFileAttr);
460
+
461
+ fseek($file_handle, 34);
462
+ $pos = 34;
463
+
464
+ while (!feof($file_handle) && $pos < $eof) {
465
+ $datalen = $this->streamChunkSize;
466
+ if ($pos + $this->streamChunkSize > $eof) {
467
+ $datalen = $eof-$pos;
468
+ }
469
+ $data = fread($file_handle, $datalen);
470
+ $pos += $datalen;
471
+
472
+ $this->zipwrite($data);
473
+ }
474
+
475
+ fclose($file_handle);
476
+
477
+ unlink($tempzip);
478
+ }
479
+
480
+ /**
481
+ * Close the archive.
482
+ * A closed archive can no longer have new files added to it.
483
+ *
484
+ * @return bool $success
485
+ */
486
+ public function finalize() {
487
+ if (!$this->isFinalized) {
488
+ if (strlen($this->streamFilePath) > 0) {
489
+ $this->closeStream();
490
+ }
491
+ $cd = implode("", $this->cdRec);
492
+
493
+ $cdRecSize = pack("v", sizeof($this->cdRec));
494
+ $cdRec = $cd . self::ZIP_END_OF_CENTRAL_DIRECTORY
495
+ . $cdRecSize . $cdRecSize
496
+ . pack("VV", strlen($cd), $this->offset);
497
+ if (!empty($this->zipComment)) {
498
+ $cdRec .= pack("v", strlen($this->zipComment)) . $this->zipComment;
499
+ } else {
500
+ $cdRec .= "\x00\x00";
501
+ }
502
+
503
+ $this->zipwrite($cdRec);
504
+
505
+ $this->isFinalized = TRUE;
506
+ $this->cdRec = NULL;
507
+
508
+ return TRUE;
509
+ }
510
+ return FALSE;
511
+ }
512
+
513
+ /**
514
+ * Get the handle ressource for the archive zip file.
515
+ * If the zip haven't been finalized yet, this will cause it to become finalized
516
+ *
517
+ * @return zip file handle
518
+ */
519
+ public function getZipFile() {
520
+ if (!$this->isFinalized) {
521
+ $this->finalize();
522
+ }
523
+
524
+ $this->zipflush();
525
+
526
+ rewind($this->zipFile);
527
+
528
+ return $this->zipFile;
529
+ }
530
+
531
+ /**
532
+ * Get the zip file contents
533
+ * If the zip haven't been finalized yet, this will cause it to become finalized
534
+ *
535
+ * @return zip data
536
+ */
537
+ public function getZipData() {
538
+ if (!$this->isFinalized) {
539
+ $this->finalize();
540
+ }
541
+ if (!is_resource($this->zipFile)) {
542
+ return $this->zipData;
543
+ } else {
544
+ rewind($this->zipFile);
545
+ $filestat = fstat($this->zipFile);
546
+ return fread($this->zipFile, $filestat['size']);
547
+ }
548
+ }
549
+
550
+ /**
551
+ * Send the archive as a zip download
552
+ *
553
+ * @param String $fileName The name of the Zip archive, in ISO-8859-1 (or ASCII) encoding, ie. "archive.zip". Optional, defaults to NULL, which means that no ISO-8859-1 encoded file name will be specified.
554
+ * @param String $contentType Content mime type. Optional, defaults to "application/zip".
555
+ * @param String $utf8FileName The name of the Zip archive, in UTF-8 encoding. Optional, defaults to NULL, which means that no UTF-8 encoded file name will be specified.
556
+ * @param bool $inline Use Content-Disposition with "inline" instead of "attached". Optional, defaults to FALSE.
557
+ * @throws Exception Throws an exception in case of errors
558
+ * @return bool Always returns true (for backward compatibility).
559
+ */
560
+ function sendZip($fileName = null, $contentType = "application/zip", $utf8FileName = null, $inline = false) {
561
+ if (!$this->isFinalized) {
562
+ $this->finalize();
563
+ }
564
+ $headerFile = null;
565
+ $headerLine = null;
566
+ if(headers_sent($headerFile, $headerLine)) {
567
+ throw new Exception("Unable to send file '$fileName'. Headers have already been sent from '$headerFile' in line $headerLine");
568
+ }
569
+ if(ob_get_contents() !== false && strlen(ob_get_contents())) {
570
+ throw new Exception("Unable to send file '$fileName'. Output buffer contains the following text (typically warnings or errors):\n" . ob_get_contents());
571
+ }
572
+ if(@ini_get('zlib.output_compression')) {
573
+ @ini_set('zlib.output_compression', 'Off');
574
+ }
575
+ header("Pragma: public");
576
+ header("Last-Modified: " . @gmdate("D, d M Y H:i:s T"));
577
+ header("Expires: 0");
578
+ header("Accept-Ranges: bytes");
579
+ header("Connection: close");
580
+ header("Content-Type: " . $contentType);
581
+ $cd = "Content-Disposition: ";
582
+ if ($inline) {
583
+ $cd .= "inline";
584
+ } else {
585
+ $cd .= "attached";
586
+ }
587
+ if ($fileName) {
588
+ $cd .= '; filename="' . $fileName . '"';
589
+ }
590
+ if ($utf8FileName) {
591
+ $cd .= "; filename*=UTF-8''" . rawurlencode($utf8FileName);
592
+ }
593
+ header($cd);
594
+ header("Content-Length: ". $this->getArchiveSize());
595
+ if (!is_resource($this->zipFile)) {
596
+ echo $this->zipData;
597
+ } else {
598
+ rewind($this->zipFile);
599
+ while (!feof($this->zipFile)) {
600
+ echo fread($this->zipFile, $this->streamChunkSize);
601
+ }
602
+ }
603
+ return true;
604
+ }
605
+
606
+ /**
607
+ * Return the current size of the archive
608
+ *
609
+ * @return $size Size of the archive
610
+ */
611
+ public function getArchiveSize() {
612
+ if (!is_resource($this->zipFile)) {
613
+ return strlen($this->zipData);
614
+ }
615
+ $filestat = fstat($this->zipFile);
616
+
617
+ return $filestat['size'];
618
+ }
619
+
620
+ /**
621
+ * Calculate the 2 byte dostime used in the zip entries.
622
+ *
623
+ * @param int $timestamp
624
+ * @return 2-byte encoded DOS Date
625
+ */
626
+ private function getDosTime($timestamp = 0) {
627
+ $timestamp = (int)$timestamp;
628
+ $oldTZ = @date_default_timezone_get();
629
+ date_default_timezone_set('UTC');
630
+ $date = ($timestamp == 0 ? getdate() : getdate($timestamp));
631
+ date_default_timezone_set($oldTZ);
632
+ if ($date["year"] >= 1980) {
633
+ return pack("V", (($date["mday"] + ($date["mon"] << 5) + (($date["year"]-1980) << 9)) << 16) |
634
+ (($date["seconds"] >> 1) + ($date["minutes"] << 5) + ($date["hours"] << 11)));
635
+ }
636
+ return "\x00\x00\x00\x00";
637
+ }
638
+
639
+ /**
640
+ * Build the Zip file structures
641
+ *
642
+ * @param string $filePath
643
+ * @param string $fileComment
644
+ * @param string $gpFlags
645
+ * @param string $gzType
646
+ * @param int $timestamp
647
+ * @param string $fileCRC32
648
+ * @param int $gzLength
649
+ * @param int $dataLength
650
+ * @param int $extFileAttr Use self::EXT_FILE_ATTR_FILE for files, self::EXT_FILE_ATTR_DIR for Directories.
651
+ */
652
+ private function buildZipEntry($filePath, $fileComment, $gpFlags, $gzType, $timestamp, $fileCRC32, $gzLength, $dataLength, $extFileAttr) {
653
+ $filePath = str_replace("\\", "/", $filePath);
654
+ $fileCommentLength = (empty($fileComment) ? 0 : strlen($fileComment));
655
+ $timestamp = (int)$timestamp;
656
+ $timestamp = ($timestamp == 0 ? time() : $timestamp);
657
+
658
+ $dosTime = $this->getDosTime($timestamp);
659
+ $tsPack = pack("V", $timestamp);
660
+
661
+ if (!isset($gpFlags) || strlen($gpFlags) != 2) {
662
+ $gpFlags = "\x00\x00";
663
+ }
664
+
665
+ $isFileUTF8 = mb_check_encoding($filePath, "UTF-8") && !mb_check_encoding($filePath, "ASCII");
666
+ $isCommentUTF8 = !empty($fileComment) && mb_check_encoding($fileComment, "UTF-8") && !mb_check_encoding($fileComment, "ASCII");
667
+
668
+ $localExtraField = "";
669
+ $centralExtraField = "";
670
+
671
+ if ($this->addExtraField) {
672
+ $localExtraField .= "\x55\x54\x09\x00\x03" . $tsPack . $tsPack . Zip::EXTRA_FIELD_NEW_UNIX_GUID;
673
+ $centralExtraField .= "\x55\x54\x05\x00\x03" . $tsPack . Zip::EXTRA_FIELD_NEW_UNIX_GUID;
674
+ }
675
+
676
+ if ($isFileUTF8 || $isCommentUTF8) {
677
+ $flag = 0;
678
+ $gpFlagsV = unpack("vflags", $gpFlags);
679
+ if (isset($gpFlagsV['flags'])) {
680
+ $flag = $gpFlagsV['flags'];
681
+ }
682
+ $gpFlags = pack("v", $flag | (1 << 11));
683
+
684
+ if ($isFileUTF8) {
685
+ $utfPathExtraField = "\x75\x70"
686
+ . pack ("v", (5 + strlen($filePath)))
687
+ . "\x01"
688
+ . pack("V", crc32($filePath))
689
+ . $filePath;
690
+
691
+ $localExtraField .= $utfPathExtraField;
692
+ $centralExtraField .= $utfPathExtraField;
693
+ }
694
+ if ($isCommentUTF8) {
695
+ $centralExtraField .= "\x75\x63" // utf8 encoded file comment extra field
696
+ . pack ("v", (5 + strlen($fileComment)))
697
+ . "\x01"
698
+ . pack("V", crc32($fileComment))
699
+ . $fileComment;
700
+ }
701
+ }
702
+
703
+ $header = $gpFlags . $gzType . $dosTime. $fileCRC32
704
+ . pack("VVv", $gzLength, $dataLength, strlen($filePath)); // File name length
705
+
706
+ $zipEntry = self::ZIP_LOCAL_FILE_HEADER
707
+ . self::ATTR_VERSION_TO_EXTRACT
708
+ . $header
709
+ . pack("v", strlen($localExtraField)) // Extra field length
710
+ . $filePath // FileName
711
+ . $localExtraField; // Extra fields
712
+
713
+ $this->zipwrite($zipEntry);
714
+
715
+ $cdEntry = self::ZIP_CENTRAL_FILE_HEADER
716
+ . self::ATTR_MADE_BY_VERSION
717
+ . ($dataLength === 0 ? "\x0A\x00" : self::ATTR_VERSION_TO_EXTRACT)
718
+ . $header
719
+ . pack("v", strlen($centralExtraField)) // Extra field length
720
+ . pack("v", $fileCommentLength) // File comment length
721
+ . "\x00\x00" // Disk number start
722
+ . "\x00\x00" // internal file attributes
723
+ . pack("V", $extFileAttr) // External file attributes
724
+ . pack("V", $this->offset) // Relative offset of local header
725
+ . $filePath // FileName
726
+ . $centralExtraField; // Extra fields
727
+
728
+ if (!empty($fileComment)) {
729
+ $cdEntry .= $fileComment; // Comment
730
+ }
731
+
732
+ $this->cdRec[] = $cdEntry;
733
+ $this->offset += strlen($zipEntry) + $gzLength;
734
+ }
735
+
736
+ private function zipwrite($data) {
737
+ if (!is_resource($this->zipFile)) {
738
+ $this->zipData .= $data;
739
+ } else {
740
+ fwrite($this->zipFile, $data);
741
+ fflush($this->zipFile);
742
+ }
743
+ }
744
+
745
+ private function zipflush() {
746
+ if (!is_resource($this->zipFile)) {
747
+ $this->zipFile = tmpfile();
748
+ fwrite($this->zipFile, $this->zipData);
749
+ $this->zipData = NULL;
750
+ }
751
+ }
752
+
753
+ /**
754
+ * Join $file to $dir path, and clean up any excess slashes.
755
+ *
756
+ * @param string $dir
757
+ * @param string $file
758
+ */
759
+ public static function pathJoin($dir, $file) {
760
+ if (empty($dir) || empty($file)) {
761
+ return self::getRelativePath($dir . $file);
762
+ }
763
+ return self::getRelativePath($dir . '/' . $file);
764
+ }
765
+
766
+ /**
767
+ * Clean up a path, removing any unnecessary elements such as /./, // or redundant ../ segments.
768
+ * If the path starts with a "/", it is deemed an absolute path and any /../ in the beginning is stripped off.
769
+ * The returned path will not end in a "/".
770
+ *
771
+ * Sometimes, when a path is generated from multiple fragments,
772
+ * you can get something like "../data/html/../images/image.jpeg"
773
+ * This will normalize that example path to "../data/images/image.jpeg"
774
+ *
775
+ * @param string $path The path to clean up
776
+ * @return string the clean path
777
+ */
778
+ public static function getRelativePath($path) {
779
+ $path = preg_replace("#/+\.?/+#", "/", str_replace("\\", "/", $path));
780
+ $dirs = explode("/", rtrim(preg_replace('#^(?:\./)+#', '', $path), '/'));
781
+
782
+ $offset = 0;
783
+ $sub = 0;
784
+ $subOffset = 0;
785
+ $root = "";
786
+
787
+ if (empty($dirs[0])) {
788
+ $root = "/";
789
+ $dirs = array_splice($dirs, 1);
790
+ } else if (preg_match("#[A-Za-z]:#", $dirs[0])) {
791
+ $root = strtoupper($dirs[0]) . "/";
792
+ $dirs = array_splice($dirs, 1);
793
+ }
794
+
795
+ $newDirs = array();
796
+ foreach ($dirs as $dir) {
797
+ if ($dir !== "..") {
798
+ $subOffset--;
799
+ $newDirs[++$offset] = $dir;
800
+ } else {
801
+ $subOffset++;
802
+ if (--$offset < 0) {
803
+ $offset = 0;
804
+ if ($subOffset > $sub) {
805
+ $sub++;
806
+ }
807
+ }
808
+ }
809
+ }
810
+
811
+ if (empty($root)) {
812
+ $root = str_repeat("../", $sub);
813
+ }
814
+ return $root . implode("/", array_slice($newDirs, 0, $offset));
815
+ }
816
+
817
+ /**
818
+ * Create the file permissions for a file or directory, for use in the extFileAttr parameters.
819
+ *
820
+ * @param int $owner Unix permisions for owner (octal from 00 to 07)
821
+ * @param int $group Unix permisions for group (octal from 00 to 07)
822
+ * @param int $other Unix permisions for others (octal from 00 to 07)
823
+ * @param bool $isFile
824
+ * @return EXTRERNAL_REF field.
825
+ */
826
+ public static function generateExtAttr($owner = 07, $group = 05, $other = 05, $isFile = true) {
827
+ $fp = $isFile ? self::S_IFREG : self::S_IFDIR;
828
+ $fp |= (($owner & 07) << 6) | (($group & 07) << 3) | ($other & 07);
829
+
830
+ return ($fp << 16) | ($isFile ? self::S_DOS_A : self::S_DOS_D);
831
+ }
832
+
833
+ /**
834
+ * Get the file permissions for a file or directory, for use in the extFileAttr parameters.
835
+ *
836
+ * @param string $filename
837
+ * @return external ref field, or FALSE if the file is not found.
838
+ */
839
+ public static function getFileExtAttr($filename) {
840
+ if (file_exists($filename)) {
841
+ $fp = fileperms($filename) << 16;
842
+ return $fp | (is_dir($filename) ? self::S_DOS_D : self::S_DOS_A);
843
+ }
844
+ return FALSE;
845
+ }
846
+ /**
847
+ * Returns the path to a temporary file.
848
+ * @return string
849
+ */
850
+ private static function getTemporaryFile() {
851
+ if(is_callable(self::$temp)) {
852
+ $temporaryFile = @call_user_func(self::$temp);
853
+ if(is_string($temporaryFile) && strlen($temporaryFile) && is_writable($temporaryFile)) {
854
+ return $temporaryFile;
855
+ }
856
+ }
857
+ $temporaryDirectory = (is_string(self::$temp) && strlen(self::$temp)) ? self::$temp : sys_get_temp_dir();
858
+ return tempnam($temporaryDirectory, 'Zip');
859
+ }
860
+ }
861
+
embedded/toolset/toolset-common/array2xml.php ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ if (!class_exists('ICL_Array2XML')) {
4
+
5
+ /**
6
+ * Converts array to XML
7
+ */
8
+ class ICL_Array2XML
9
+ {
10
+
11
+ var $text;
12
+ var $arrays, $keys, $node_flag, $depth, $xml_parser;
13
+
14
+ function array2xml($array, $root) {
15
+ $this->depth = 1;
16
+ $this->text = "<?xml version=\"1.0\" encoding=\""
17
+ . get_option('blog_charset'). "\"?>\r\n<$root>\r\n";
18
+ $this->text .= $this->array_transform($array);
19
+ $this->text .="</$root>";
20
+ return $this->text;
21
+ }
22
+
23
+ function array_transform($array) {
24
+ $output = '';
25
+ $indent = str_repeat(' ', $this->depth * 4);
26
+ $child_key = false;
27
+ if (isset($array['__key'])) {
28
+ $child_key = $array['__key'];
29
+ unset($array['__key']);
30
+ }
31
+ foreach ($array as $key => $value) {
32
+ $key = str_replace(' ', '___032___', $key); // encode spaces
33
+ if (!is_array($value)) {
34
+ if (empty($key)) {
35
+ continue;
36
+ }
37
+ $key = $child_key ? $child_key : $key;
38
+ $output .= $indent . "<$key>" . htmlspecialchars($value, ENT_QUOTES) . "</$key>\r\n";
39
+ } else {
40
+ $this->depth++;
41
+ $key = $child_key ? $child_key : $key;
42
+ $output_temp = $this->array_transform($value);
43
+ if (!empty($output_temp)) {
44
+ $output .= $indent . "<$key>\r\n";
45
+ $output .= $output_temp;
46
+ $output .= $indent . "</$key>\r\n";
47
+ }
48
+ $this->depth--;
49
+ }
50
+ }
51
+ return $output;
52
+ }
53
+
54
+ }
55
+ }
embedded/toolset/toolset-common/changelog.txt ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Common 1.6.2 (September 25, 2015)
2
+ - Tagged for CRED 1.4, Types 1.8.2
3
+
4
+ Common 1.6.1 (August 17, 2015)
5
+ - Tagged for Composer Types 1.8, Views 1.10, CRED 1.4 and Layouts 1.3
6
+
7
+ Common 1.6 (June 11, 2015)
8
+ - Tagged for Types 1.7, Views 1.9 and Layouts 1.2
9
+
10
+ -------------------------------------------------------------------------------------------------------------------
11
+ Common 1.5 (Apr 1, 2015)
12
+ - Tagged for Types 1.6.6, Views 1.8, CRED 1.3.6 and Layouts 1.1.
13
+ - Fixed issue when there is more than one CRED form on a page with the same taxonomy.
14
+ - Fixed a little problem with edit skype button modal window - was too narrow.
15
+ - Fixed empty title problem for filter "wpt_field_options" on user edit/add screen.
16
+ https://wp-types.com/forums/topic/populate-select-field-in-wpcf-um-group/
17
+ - Added filter "toolset_editor_add_form_buttons" to disable Toolset buttons on the post editor.
18
+ - Added placeholder attributes to fields.
19
+ - Updated CakePHP validation URL method to allow new TLD's.
20
+
21
+ -------------------------------------------------------------------------------------------------------------------
22
+ Common 1.4 (Feb 2 2015)
23
+ - Tagged for Views 1.7, Types 1.6.5, CRED 1.3.5 and Layouts 1.0 beta1
24
+ - Updated Installer to 1.5
25
+
26
+ -------------------------------------------------------------------------------------------------------------------
27
+ Common 1.3.1 (Dec 16 2014)
28
+ - Tagged for Views 1.7 beta1 and Layouts 1.0 beta1
29
+ - Fixed issue about Editor addon and ACF compatibility
30
+ - Fixed issue about branding loader
31
+
32
+ -------------------------------------------------------------------------------------------------------------------
33
+ Common 1.3 (Dec 15 2014)
34
+ - Tagged for Views 1.7 beta1 and Layouts 1.0 beta1
embedded/toolset/toolset-common/classes/class-toolset-admin-bar-menu.php ADDED
@@ -0,0 +1,779 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ if ( ! class_exists( 'Toolset_Admin_Bar_Menu' ) ) {
4
+
5
+ class Toolset_Admin_Bar_Menu {
6
+
7
+ // singleton
8
+ private static $instance;
9
+
10
+ /**
11
+ * Avoid executing more than once the code
12
+ * @var type bool
13
+ */
14
+ private $done;
15
+
16
+ /** @const */
17
+ public static $default_wordpress_archives = array( 'home-blog', 'search', 'author', 'year', 'month', 'day' );
18
+
19
+ private function __construct() {
20
+ $this->done = false;
21
+
22
+ add_action( 'admin_bar_menu', array( $this, 'admin_bar_menu' ), 99 );
23
+ add_filter( 'toolset_filter_toolset_admin_bar_menu_disable', array( $this, 'admin_bar_menu_disable' ), 1 );
24
+
25
+ if ( is_admin() ) {
26
+
27
+ /*
28
+ add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_styles' ) );
29
+ */
30
+
31
+ } else {
32
+ add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_styles' ) );
33
+ }
34
+ }
35
+
36
+ public static function get_instance() {
37
+ if ( ! self::$instance ) {
38
+ self::$instance = new Toolset_Admin_Bar_Menu();
39
+ }
40
+
41
+ return self::$instance;
42
+ }
43
+
44
+ public function enqueue_styles() {
45
+
46
+ if( ! is_admin_bar_showing() ) {
47
+ return;
48
+ }
49
+
50
+ if ( $this->is_layouts_available() ) {
51
+
52
+ // Check also @WPDD_Layouts::enqueue_toolset_common_styles()
53
+ global $wpddlayout;
54
+ $wpddlayout->enqueue_styles( array( 'toolset-common' ) );
55
+
56
+ } else if ( $this->is_views_available() ) {
57
+
58
+ wp_enqueue_style( 'onthegosystems-icons', WPV_URL_EMBEDDED . '/toolset/toolset-common/res/css/toolset-common.css', array(), WPV_VERSION );
59
+ wp_enqueue_style( 'toolset-common', WPV_URL_EMBEDDED . '/toolset/onthego-resources/onthegosystems-icons/css/onthegosystems-icons.css', array( 'onthegosystems-icons' ), WPV_VERSION );
60
+
61
+ }
62
+ }
63
+
64
+ /**
65
+ * @see action admin_bar_menu
66
+ */
67
+ public function admin_bar_menu( $wp_admin_bar ) {
68
+ // Check this haven't called more than once
69
+ if ( $this->done ) {
70
+ return;
71
+ }
72
+
73
+ /**
74
+ * Filter to disable the Toolset Admin Bar menu
75
+ *
76
+ * Used to disable the Admin Bar Menu when the 'show_admin_bar_shortcut' entry on the 'toolset_options' option has an 'off' value
77
+ * It is up to the plugins to produce a GUI for setting that value
78
+ *
79
+ * @since 1.7
80
+ */
81
+
82
+ if ( apply_filters( 'toolset_filter_toolset_admin_bar_menu_disable', false ) ) {
83
+ return;
84
+ }
85
+
86
+ if ( $this->get_default_plugin() && $this->has_capatibilities() && $this->is_assignable() ) {
87
+
88
+ //
89
+ // We create a Toolset menu and a child submenu.
90
+ // Clicking the parent achieves the same result than clicking the child
91
+ // Maybe we add extra menu options in the future
92
+ //
93
+ // (Icon) Design with Toolset < $href >
94
+ // |
95
+ // +- $title < $href >
96
+ //
97
+
98
+ $menu_data = $this->get_menu_data();
99
+ if ( empty( $menu_data ) ) {
100
+ // If no menu is available, then don't render menu
101
+ return;
102
+ }
103
+ list( $title, $href ) = $menu_data;
104
+
105
+ $args = array(
106
+ 'id' => 'toolset_admin_bar_menu',
107
+ 'title' => __( 'Design with Toolset', 'wpv-views' ),
108
+ 'href' => $href,
109
+ 'meta' => array( 'class' => 'toolset-edit-link' )
110
+ );
111
+ $wp_admin_bar->add_node( $args );
112
+
113
+ $args = array(
114
+ 'parent' => 'toolset_admin_bar_menu',
115
+ 'id' => 'toolset_design_this_item',
116
+ 'title' => $title,
117
+ 'href' => $href,
118
+ );
119
+ $wp_admin_bar->add_node( $args );
120
+
121
+ $settings_href = $this->get_settings_href();
122
+ $args = array(
123
+ 'parent' => 'toolset_admin_bar_menu',
124
+ 'id' => 'toolset_remove_this_menu',
125
+ 'title' => __( 'Remove this menu', 'wpv-views' ),
126
+ 'href' => $settings_href,
127
+ );
128
+ $wp_admin_bar->add_node( $args );
129
+
130
+ $this->done = true;
131
+ }
132
+ }
133
+
134
+ /**
135
+ * Disable the Admin Bar Menu entry when the 'show_admin_bar_shortcut' entry on the 'toolset_options' option has an 'off' value
136
+ *
137
+ * @since 1.7
138
+ */
139
+ public function admin_bar_menu_disable( $state ) {
140
+ $toolset_options = get_option( 'toolset_options', array() );
141
+ $toolset_admin_bar_menu_remove = ( isset( $toolset_options['show_admin_bar_shortcut'] ) && $toolset_options['show_admin_bar_shortcut'] == 'off' ) ? true : false;
142
+ if ( $toolset_admin_bar_menu_remove ) {
143
+ $state = true;
144
+ }
145
+ return $state;
146
+ }
147
+
148
+ /**
149
+ * User is admin or similar?
150
+ * @return boolean
151
+ */
152
+ private function has_capatibilities() {
153
+ $manage_options = current_user_can( 'manage_options' );
154
+
155
+ $has_layouts = $this->is_layouts_available();
156
+
157
+ $has_views = $this->is_views_available();
158
+
159
+ return $manage_options && ( $has_layouts || $has_views );
160
+ }
161
+
162
+ /**
163
+ * Can you assign what you are seeing right now to a Layout, Content Template or WordPress Archive?
164
+ * @return boolean
165
+ */
166
+ private function is_assignable() {
167
+
168
+ $context = $this->get_context();
169
+ if ( ! $context ) { return false; }
170
+ list( $type, $class ) = explode( '|', $context );
171
+
172
+ if ( is_admin() ) {
173
+
174
+ /*
175
+ global $post_type;
176
+ $screen = get_current_screen();
177
+ if( preg_match( '/^(edit|edit-tags|post)$/', $screen->base ) && empty($screen->action) ) {
178
+
179
+ if( 'edit' === $screen->base ) {
180
+
181
+ // $post_type | archive
182
+
183
+ if ( 'page' === $post_type ) {
184
+ return false;
185
+ }
186
+
187
+ $post_type_object = get_post_type_object( $screen->post_type );
188
+ if ( ! ( $post_type_object->publicly_queryable && $post_type_object->has_archive ) ) {
189
+ return false;
190
+ }
191
+
192
+ } else if( 'edit-tags' === $screen->base ) {
193
+
194
+ // $taxonomy | archive
195
+
196
+ $taxonomy = get_taxonomy( $screen->taxonomy );
197
+ if ( !( $taxonomy->public ) ) {
198
+ return false;
199
+ }
200
+
201
+ } else if( 'post' === $screen->base ) {
202
+
203
+ // $post_type | page
204
+
205
+ $post_type_object = get_post_type_object( $screen->post_type );
206
+ if ( ! $post_type_object->publicly_queryable ) {
207
+ return false;
208
+ }
209
+
210
+ }
211
+
212
+ }
213
+ */
214
+
215
+ } else {
216
+
217
+ // Backend
218
+ if( 'page' === $class && '404' === $type ) {
219
+
220
+ return $this->is_layouts_available() && ( WPDD_Layouts_Users_Profiles::user_can_create() && WPDD_Layouts_Users_Profiles::user_can_assign() || WPDD_Layouts_Users_Profiles::user_can_edit() );
221
+
222
+ } else if ( 'page' === $class ) {
223
+
224
+ $post_type_object = get_post_type_object( $type );
225
+ $is_cpt = $post_type_object != null;
226
+ if( ! $is_cpt /* || ! $post_type_object->publicly_queryable */ ) {
227
+ return false;
228
+ }
229
+
230
+ } else if ( 'archive' === $class && in_array( $type, self::$default_wordpress_archives ) ) {
231
+ // DO NOTHING
232
+ } else if ( 'archive' === $class && 'page' === $type ) {
233
+ return false;
234
+ } else if ( 'archive' === $class ) {
235
+
236
+ $taxonomy = get_taxonomy( $type );
237
+ $is_tax = $taxonomy !== false;
238
+ if ( $is_tax && ! $taxonomy->public ) {
239
+ return false;
240
+ }
241
+
242
+ $post_type_object = get_post_type_object( $type );
243
+ $is_cpt = $post_type_object != null;
244
+ if( $is_cpt && ( ! $post_type_object->publicly_queryable || ! $post_type_object->has_archive ) ) {
245
+ return false;
246
+ }
247
+
248
+ }
249
+
250
+ }
251
+
252
+ return true;
253
+ }
254
+
255
+ private function is_layouts_available() {
256
+ global $wpddlayout;
257
+
258
+ // class WPDDL_Admin_Pages exists only in full version
259
+ return class_exists( 'WPDDL_Admin_Pages' ) && isset( $wpddlayout ) && is_object( $wpddlayout );
260
+ }
261
+
262
+ private function is_views_available() {
263
+ global $WP_Views;
264
+
265
+ // class WP_Views_plugin exists only in full version
266
+ return class_exists( 'WP_Views_plugin' ) && isset( $WP_Views ) && is_object( $WP_Views );
267
+ }
268
+
269
+ /**
270
+ * Get the best plugin available
271
+ * @return string (layouts|views|)
272
+ */
273
+ private function get_default_plugin() {
274
+ // Layouts always has precedence
275
+ if ( $this->is_layouts_available() ) {
276
+ return 'layouts';
277
+ } else if ( $this->is_views_available() ) {
278
+ return 'views';
279
+ } else {
280
+ // Other toolset plugins may be present
281
+ return null;
282
+ }
283
+ }
284
+
285
+ private function get_settings_href() {
286
+ $plugin_name = $this->get_default_plugin();
287
+
288
+ if( 'layouts' === $plugin_name ) {
289
+ return admin_url( 'admin.php?page=dd_layout_settings' ).'#toolset-admin-bar-settings';
290
+ } else /* 'views' */ {
291
+ return admin_url( 'admin.php?page=views-settings' ).'#toolset-admin-bar-settings';
292
+ }
293
+ }
294
+
295
+ /**
296
+ * Finds the right action depending on what you're seeing and have done
297
+ * @returns array ($title, $href) or null (do not show menu)
298
+ */
299
+ private function get_menu_data() {
300
+
301
+ $context = $this->get_context();
302
+ if ( ! $context ) {
303
+ // No context => No menu
304
+ return null;
305
+ }
306
+
307
+ // Get type {post types, taxonomies, wordpress archives slugs, 404} and class {page, archive}
308
+ list( $type, $class ) = explode( '|', $context );
309
+
310
+ // We are using the best plugin available by default, unless state otherwise below
311
+ $plugin_used = $this->get_default_plugin();
312
+
313
+ $layout_id = 0;
314
+ $ct_id = 0;
315
+ $wpa_id = 0;
316
+ $post_id = 0;
317
+ $edit_link = null;
318
+
319
+ $is_new = true;
320
+ // warning! syntax sugar ahead
321
+
322
+ // Layouts - Edit Link
323
+ if ( $is_new && $this->is_layouts_available() && WPDD_Layouts_Users_Profiles::user_can_edit() ) {
324
+
325
+ global $wpddlayout;
326
+
327
+ if( is_admin() ) {
328
+
329
+ /*
330
+ // Only individual pages, post type pages, post type archives
331
+ // and taxonomy archives are editable from backend
332
+ //
333
+
334
+ $screen = get_current_screen();
335
+ if( preg_match( '/^(edit|edit-tags|post)$/', $screen->base ) ) {
336
+ // Exists layout? $layout_id?
337
+
338
+ if( 'edit' === $screen->base ) {
339
+ // $post_type | archive
340
+
341
+ $post_type_object = get_post_type_object( $screen->post_type );
342
+ $option_type_name = WPDD_layout_post_loop_cell_manager::OPTION_TYPES_PREFIX . $post_type_object->name;
343
+ if ( $post_type_object && property_exists( $post_type_object, 'public' ) && $post_type_object->public && $wpddlayout->layout_post_loop_cell_manager->get_option( $option_type_name ) ) {
344
+ $layout_id = (int) $wpddlayout->layout_post_loop_cell_manager->get_option( $option_type_name );
345
+ }
346
+
347
+ } else if( 'edit-tags' === $screen->base ) {
348
+ // $taxonomy | archive
349
+
350
+ $option_type_name = WPDD_layout_post_loop_cell_manager::OPTION_TAXONOMY_PREFIX . $screen->taxonomy;
351
+ if ( $wpddlayout->layout_post_loop_cell_manager->get_option( $option_type_name ) ) {
352
+ $layout_id = (int) $wpddlayout->layout_post_loop_cell_manager->get_option( $option_type_name );
353
+ }
354
+
355
+ } else if( 'post' === $screen->base ) {
356
+ // $post_type | page
357
+
358
+ // Individual
359
+ $layout_slug = get_post_meta( (int) $_GET['post'], WPDDL_LAYOUTS_META_KEY, true );
360
+ if( ! empty( $layout_slug ) ) {
361
+ $layout_id = WPDD_Layouts::get_layout_id_by_slug( $layout_slug );
362
+
363
+ }
364
+
365
+ // Multiple
366
+ if( (int) $layout_id == 0 ) {
367
+ $layout_object = $wpddlayout->post_types_manager->get_layout_to_type_object( $type );
368
+ $layout_id = $layout_object && property_exists( $layout_object, 'layout_id' ) && $layout_object->layout_id > 0
369
+ ? $layout_object->layout_id
370
+ : 0;
371
+ }
372
+
373
+ }
374
+
375
+ }
376
+ */
377
+
378
+ } else if ( (int) $wpddlayout->get_rendered_layout_id() > 0 ) {
379
+
380
+ $layout_id = $wpddlayout->get_rendered_layout_id();
381
+
382
+ }
383
+
384
+ $is_new = $layout_id > 0 ? false : true;
385
+ $plugin_used = ! $is_new ? 'layouts' : $plugin_used;
386
+
387
+ }
388
+
389
+ // Views - Edit Link
390
+ if ( $is_new && $this->is_views_available() ) {
391
+
392
+ global $WPV_settings;
393
+
394
+ if( is_admin() ) {
395
+
396
+ /*
397
+ // Same as Layouts
398
+ $screen = get_current_screen();
399
+ if( preg_match( '/^(edit|edit-tags|post)$/', $screen->base ) ) {
400
+ // Exists layout? $layout_id?
401
+
402
+ if( 'edit' === $screen->base ) {
403
+ // $post_type | archive
404
+
405
+ if ( isset( $WPV_settings['view_cpt_' . $type] ) && $WPV_settings['views_template_for_' . $type] > 0 ) {
406
+ $wpa_id = $WPV_settings['view_cpt_' . $type];
407
+ }
408
+
409
+ } else if( 'edit-tags' === $screen->base ) {
410
+ // $taxonomy | archive
411
+
412
+ if ( isset( $WPV_settings['view_taxonomy_loop_' . $type] ) && $WPV_settings['view_taxonomy_loop_' . $type] > 0 ) {
413
+ $wpa_id = $WPV_settings['view_taxonomy_loop_' . $type];
414
+ }
415
+
416
+ } else if( 'post' === $screen->base ) {
417
+ // $post_type | page
418
+
419
+ // Individual
420
+ if ( isset( $_GET['post'] ) && (int) $_GET['post'] > 0 ) {
421
+ $ct_id = (int) get_post_meta( (int) $_GET['post'], '_views_template', true );
422
+ }
423
+
424
+ // Multiple
425
+ if ( (int) $ct_id == 0
426
+ && isset( $WPV_settings['views_template_for_' . $type] )
427
+ && $WPV_settings['views_template_for_' . $type] > 0
428
+ ) {
429
+ $ct_id = $WPV_settings['views_template_for_' . $type];
430
+ }
431
+
432
+ }
433
+
434
+ }
435
+
436
+ if ( ( int ) $wpa_id > 0 || ( int ) $ct_id > 0 ) {
437
+ $is_new = false;
438
+ }
439
+ */
440
+ } else {
441
+
442
+ if ( 'archive' === $class && 'page' != $type ) {
443
+ /* WordPress Archive */
444
+
445
+ // WordPress Loop Archives
446
+ if( in_array( $type, self::$default_wordpress_archives )
447
+ && isset( $WPV_settings['view_'.$type.'-page'] )
448
+ && (int) $WPV_settings['view_'.$type.'-page'] > 0
449
+ ) {
450
+ $wpa_id = (int) $WPV_settings['view_'.$type.'-page'];
451
+ }
452
+
453
+ // Taxonomy Archive
454
+ if( ! $wpa_id ) {
455
+ $taxonomy = get_taxonomy( $type );
456
+ $is_tax = $taxonomy !== false;
457
+ if( $is_tax
458
+ && isset( $WPV_settings['view_taxonomy_loop_' . $type] )
459
+ && (int) $WPV_settings['view_taxonomy_loop_' . $type] > 0
460
+ ) {
461
+ $wpa_id = $WPV_settings['view_taxonomy_loop_' . $type];
462
+ }
463
+ }
464
+
465
+ // Post Type Archive
466
+ if( ! $wpa_id ) {
467
+ $post_type_object = get_post_type_object( $type );
468
+ $is_cpt = $post_type_object != null;
469
+ if( $is_cpt && isset( $WPV_settings['view_cpt_' . $type] )
470
+ && $WPV_settings['view_cpt_' . $type] > 0
471
+ ) {
472
+ $wpa_id = $WPV_settings['view_cpt_' . $type];
473
+ }
474
+ }
475
+
476
+ if ( (int) $wpa_id > 0 ) {
477
+ $is_new = false;
478
+ }
479
+
480
+ } else if( 'page' === $class && ! is_404() ) {
481
+ /* Content Template */
482
+
483
+ // Individual
484
+ $ct_id = (int) get_post_meta( get_the_ID(), '_views_template', true );
485
+
486
+ // Multiple
487
+ if( (int) $ct_id == 0 ) {
488
+
489
+ // This doesn't satisfies expectations.
490
+ // You cannot edit content templates you're not seeing, even if they're assigned to the current post type.
491
+ // FIXME: Define the right behavior.
492
+ // My proposal: if there is a CT assigned to post type, suggest "bind this and edit template" or similar approach
493
+
494
+ /*
495
+ if( isset( $WPV_settings['views_template_for_'.$type] ) && $WPV_settings['views_template_for_'.$type] > 0 ) {
496
+ $ct_id = $WPV_settings['views_template_for_'.$type];
497
+ }
498
+ */
499
+ }
500
+
501
+ if ( (int) $ct_id > 0 ) {
502
+ $is_new = false;
503
+ }
504
+
505
+ }
506
+
507
+ }
508
+
509
+ $plugin_used = ! $is_new ? 'views' : $plugin_used;
510
+
511
+ }
512
+
513
+ // $plugin_used - Create Link
514
+ if ( $is_new ) {
515
+ if( is_admin() ) {
516
+
517
+ /*
518
+ $screen = get_current_screen();
519
+ if( $screen->id == 'post' ) {
520
+ $post_id = (int) $_GET['post'];
521
+ }
522
+ */
523
+
524
+ } else {
525
+ $post_id = get_the_ID();
526
+ }
527
+ }
528
+
529
+ $title = $this->get_title ( $plugin_used, $is_new, $type, $class, max( array( $layout_id, $ct_id, $wpa_id, $post_id ) ) );
530
+ $edit_link = $this->get_edit_link( $plugin_used, $is_new, $type, $class, max( array( $layout_id, $ct_id, $wpa_id, $post_id ) ) );
531
+
532
+ if ( $edit_link !== null ) {
533
+ return array( $title, $edit_link );
534
+ } else {
535
+ // No valid data => No menu
536
+ return null;
537
+ }
538
+ }
539
+
540
+ /**
541
+ * Returns an string with the context where the link is going to be display
542
+ * It is going to be like "post_type|archive" or null if link should not be displayed
543
+ * @return string {post_type or archive_type or taxonomy or 404}|{page or archive}
544
+ */
545
+ private function get_context() {
546
+
547
+ // Rule of thumb: if there is a list of posts, it is an archive
548
+
549
+ // null means we will not show the link
550
+ $context = null;
551
+
552
+ if ( is_admin() ) {
553
+
554
+ /*
555
+ // There are less places inside the admin to define Layouts/Templates
556
+
557
+ global $post_type;
558
+
559
+ $screen = get_current_screen();
560
+
561
+ if ( $screen->base == 'edit' && $post_type !== 'page' ) {
562
+ // list of posts page => create an archive ( WordPress Archive )
563
+ return "$post_type|archive";
564
+ } else if ( $screen->base == 'post' && empty( $screen->action ) ) {
565
+ // post editor page => create a page ( Content Template )
566
+ return "$post_type|page";
567
+ } else if ( $screen->base == 'edit-tags' ) {
568
+ // taxonomy page => always an archive ( WordPress Archive )
569
+ return "{$screen->taxonomy}|archive";
570
+ }
571
+ */
572
+
573
+ } else {
574
+
575
+ global $post, $wp_query;
576
+
577
+ if ( is_home() ) {
578
+ // Blog posts index
579
+ $context = 'home-blog|archive';
580
+ } else if ( is_search() ) {
581
+ $context = 'search|archive';
582
+ } else if ( is_author() ) {
583
+ $context = 'author|archive';
584
+ } else if ( is_year() ) {
585
+ $context = 'year|archive';
586
+ } else if ( is_month() ) {
587
+ $context = 'month|archive';
588
+ } else if ( is_day() ) {
589
+ $context = 'day|archive';
590
+ } else if ( is_category() ) {
591
+ $context = 'category|archive';
592
+ } else if ( is_tag() ) {
593
+ $context = 'post_tag|archive';
594
+ } else if ( is_tax() ) {
595
+ $term = $wp_query->get_queried_object();
596
+ if (
597
+ $term
598
+ && isset( $term->taxonomy )
599
+ ) {
600
+ $context = $term->taxonomy . '|archive';
601
+ }
602
+ } else if ( is_post_type_archive() ) {
603
+ $post_type = $wp_query->get('post_type');
604
+ if ( is_array( $post_type ) ) {
605
+ $post_type = reset( $post_type );
606
+ }
607
+ $context = $post_type . '|archive';
608
+ } else if ( is_404() ) {
609
+ // Special WordPress Error 404 Page
610
+ $context = '404|page';
611
+ } else if ( is_object( $post ) && get_class( $post ) === 'WP_Post' ) {
612
+ $context = get_post_type() . '|page';
613
+ }
614
+
615
+ }
616
+
617
+ return $context;
618
+ }
619
+
620
+ /**
621
+ * Get title for menu subitem
622
+ * @param string $plugin are we using 'layouts' or 'views'?
623
+ * @param boolean $is_new are we creating a new object?
624
+ * @param string $type post_type, taxonomy or wp slug
625
+ * @param string $class (single) page or archive
626
+ * @param int $post_id must be layout or template id if !$is_new, else post
627
+ * @return string title for menu subitem
628
+ */
629
+ private function get_title( $plugin, $is_new, $type, $class, $post_id = null) {
630
+
631
+ if ( $is_new ) {
632
+ /* Create */
633
+ // "Create a new 'Layout for Restaurant archives'"
634
+ // "Create a new 'Content Template for Restaurants'"
635
+ // "Create a new 'WordPress Archive for Restaurant archives'"
636
+
637
+ $create_a_new = __( 'Create a new', 'wpv-views' );
638
+ $object = $this->get_name_auto( $plugin, $type, $class, $post_id );
639
+
640
+ return trim( sprintf( '%s %s', $create_a_new, $object ) );
641
+
642
+ } else {
643
+ /* Edit */
644
+ // "Edit 'Restaurants' Layout"
645
+ // "Edit 'Layout for Restaurants' Layout" => "Edit 'Layout for Restaurants'"
646
+ // "Edit 'Layout for Restaurant archives' Layout" => "Edit 'Layout for Restaurant' archives"
647
+
648
+ $edit = __( 'Edit', 'wpv-views' );
649
+
650
+ // Layout or Content Template or WordPress Archive
651
+ $layouts = __( 'Layout', 'wpv-views' );
652
+ $views = 'archive' === $class ? __( 'Archive', 'wpv-views' ) : __( 'Template', 'wpv-views' );
653
+ $artifact = 'layouts' === $plugin ? $layouts : $views;
654
+
655
+ // avoid "'Layout for Restaurant archives' Layout"
656
+ // get "'Layout for Restaurants'" instead
657
+ $post_title = get_the_title( $post_id );
658
+ $object = strpos( $post_title, $artifact ) === false ? sprintf( '%s %s', $post_title, $artifact ) : $post_title;
659
+
660
+ return trim( sprintf( '%s %s', $edit, $object ) );
661
+
662
+ }
663
+
664
+ }
665
+
666
+ /**
667
+ * Get a valid and self-defining title for a Layout, Content Template or WordPress Archive
668
+ *
669
+ * @param string $plugin layouts or views
670
+ * @param string $type post_type, taxonomy or wp slug
671
+ * @param string $class page or archive
672
+ * @param int|null $post_id
673
+ *
674
+ * @return string
675
+ *
676
+ * @since unknown
677
+ */
678
+ public function get_name_auto( $plugin, $type, $class, $post_id = null ) {
679
+ // Examples:
680
+ // Layout for Restaurants
681
+ // Layout for Restaurant archives
682
+ // Content Template for Restaurants
683
+ // WordPress Archive for Restaurants
684
+
685
+ /* Layout or Content Template or WordPress Archive */
686
+ $layouts = __( 'Layout', 'wpv-views' );
687
+ $views = 'archive' === $class ? __( 'Archive', 'wpv-views' ) : __( 'Template', 'wpv-views' );
688
+ $artifact = 'layouts' === $plugin ? $layouts : $views;
689
+
690
+ /* for */
691
+ $for = __( 'for', 'wpv-views' );
692
+
693
+ /* selection */
694
+ $selection = '';
695
+
696
+ if ( 'page' === $class && '404' === $type && 'layouts' === $plugin ) {
697
+ $selection = __( 'Error 404 page', 'wpv-views' );
698
+ } else if ( 'page' === $type ) {
699
+ $selection = get_the_title( $post_id );
700
+ } else if ( 'page' === $class ) {
701
+ $post_type = get_post_type_object( $type );
702
+ $selection = ucfirst( $post_type->label );
703
+ } else if ( 'archive' === $class && in_array( $type, self::$default_wordpress_archives ) ) {
704
+ $selection = sprintf( '%s %s', ucfirst( $type ), __( 'Archives', 'wpv-views' ) );
705
+ /*
706
+ } else if ( 'archive' === $class && preg_match( '/^(category|post_tag)$/', $type ) ) {
707
+ $taxonomy = get_taxonomy( $type );
708
+ $selection = 'layouts' === $plugin ? sprintf( '%s %s', ucfirst( $taxonomy->labels->singular_name ), __( 'Archives', 'wpv-views' ) ) : ucfirst( $taxonomy->labels->name );
709
+ */
710
+ } else if ( 'archive' === $class ) {
711
+ $post_type = get_post_type_object( $type );
712
+ $is_cpt = $post_type != null;
713
+
714
+ $taxonomy = get_taxonomy( $type );
715
+ $is_tax = $taxonomy !== false;
716
+
717
+ if ( $is_cpt ) {
718
+ $selection = 'layouts' === $plugin ? sprintf( '%s %s', ucfirst( $post_type->labels->singular_name ), __( 'Archives', 'wpv-views' ) ) : ucfirst( $post_type->labels->name );
719
+ } else if ( $is_tax ) {
720
+ $selection = 'layouts' === $plugin ? sprintf( '%s %s', ucfirst( $taxonomy->labels->singular_name ), __( 'Archives', 'wpv-views' ) ) : ucfirst( $taxonomy->labels->name );
721
+ } else {
722
+ $selection = __( 'Unsupported post type archives', 'wpv-views' );
723
+ }
724
+
725
+ } else {
726
+ $selection = __( 'Unsupported page', 'wpv-views' );
727
+ }
728
+
729
+ return trim( sprintf( '%s %s %s', $artifact, $for, $selection ) );
730
+ }
731
+
732
+ public function get_edit_link( $plugin, $is_new, $type, $class, $post_id = null ) {
733
+ $edit_link = null;
734
+
735
+ if( 'layouts' === $plugin ) {
736
+
737
+ if( $is_new && WPDD_Layouts_Users_Profiles::user_can_create() && WPDD_Layouts_Users_Profiles::user_can_assign() ) {
738
+ $edit_link = wp_nonce_url( admin_url( sprintf( 'admin.php?page=dd_layouts_create_auto&type=%s&class=%s&post=%s', $type, $class, $post_id ) ), 'create_auto' );
739
+ } else if( $post_id > 0 && WPDD_Layouts_Users_Profiles::user_can_edit() ) {
740
+ // Layouts editor
741
+ $edit_link = admin_url( sprintf( 'admin.php?page=dd_layouts_edit&layout_id=%s&action=edit', $post_id ) );
742
+ }
743
+
744
+ } else if ( 'views' === $plugin && '404' != $type /* No support for Error 404 page */ ) {
745
+
746
+ if ( $is_new ) {
747
+ $edit_link = wp_nonce_url( admin_url( sprintf( 'admin.php?page=views_create_auto&type=%s&class=%s&post=%s', $type, $class, $post_id ) ), 'create_auto' );
748
+ } else if( $post_id > 0 ) {
749
+
750
+ if( 'archive' === $class ) {
751
+ // Views' WordPress Archive editor
752
+ $edit_link = admin_url( sprintf( 'admin.php?page=view-archives-editor&view_id=%s', $post_id ) );
753
+ } else if( 'page' === $class ) {
754
+ // Views' Content Temaplate editor
755
+ //$edit_link = admin_url( sprintf( 'post.php?action=edit&post=%s', $post_id ) );
756
+ $edit_link = esc_url_raw(
757
+ add_query_arg(
758
+ array( 'page' => WPV_CT_EDITOR_PAGE_NAME, 'ct_id' => esc_attr( $post_id ), 'action' => 'edit' ),
759
+ admin_url( 'admin.php' )
760
+ )
761
+ );
762
+ }
763
+
764
+ }
765
+ }
766
+
767
+ return $edit_link;
768
+ }
769
+
770
+ }
771
+
772
+ // We have checked if @class Toolset_Admin_Bar_Menu already existed.
773
+ // After that, we've defined the class. Now, we instantiate it once.
774
+ // This works lìke a singleton.
775
+ // But the class itself is also a singleton. Using design patterns
776
+ // clarifies and prevents against changes in future.
777
+ global $toolset_admin_bar_menu;
778
+ $toolset_admin_bar_menu = Toolset_Admin_Bar_Menu::get_instance();
779
+ }
embedded/toolset/toolset-common/classes/class.toolset.promo.php ADDED
@@ -0,0 +1,193 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ *
5
+ *
6
+ */
7
+
8
+ if (!class_exists('Toolset_Promotion')) {
9
+
10
+ /**
11
+ * Class to show promotion message.
12
+ *
13
+ * @since 1.5
14
+ * @access public
15
+ */
16
+ class Toolset_Promotion
17
+ {
18
+ private $version = '1.0';
19
+
20
+ public function __construct()
21
+ {
22
+ add_action('admin_init', array($this, 'admin_init'));
23
+ add_action('admin_footer', array($this, 'admin_footer'));
24
+ add_action('admin_enqueue_scripts', array($this, 'admin_enqueue_scripts'));
25
+ add_action('plugins_loaded', 'on_the_go_systems_branding_plugins_loaded');
26
+ }
27
+
28
+ /**
29
+ * Register script and styles
30
+ *
31
+ * Register script and styles for future usage.
32
+ *
33
+ * @since 1.5
34
+ *
35
+ */
36
+ public function admin_init()
37
+ {
38
+ wp_register_script(
39
+ 'toolset-colorbox',
40
+ plugins_url('/res/js/jquery.colorbox-min.js', dirname(__FILE__)),
41
+ array('jquery'),
42
+ '1.4.31'
43
+ );
44
+ wp_register_script(
45
+ __CLASS__,
46
+ plugins_url('/res/js/toolset-promotion.js', dirname(__FILE__)),
47
+ array('underscore', 'toolset-colorbox'),
48
+ $this->version,
49
+ true
50
+ );
51
+ wp_register_style(
52
+ 'toolset-colorbox',
53
+ plugins_url('/res/css/colorbox.css', dirname(__FILE__)),
54
+ false,
55
+ '1.4.31'
56
+ );
57
+ wp_register_style(
58
+ __CLASS__,
59
+ plugins_url('/res/css/toolset-promotion.css', dirname(__FILE__)),
60
+ array('toolset-colorbox', 'onthego-admin-styles'),
61
+ $this->version
62
+ );
63
+ }
64
+
65
+ /**
66
+ * Enqueue scripts & styles
67
+ *
68
+ * After check is a correct place, this function enqueue scripts & styles
69
+ * for toolset promotion box.
70
+ *
71
+ * @since 1.5
72
+ *
73
+ */
74
+ public function admin_enqueue_scripts()
75
+ {
76
+ if (!is_admin() || !function_exists('get_current_screen')) {
77
+ return;
78
+ }
79
+ /**
80
+ * List of admin page id
81
+ *
82
+ * Filter allow to add or change list of admin screen id for checking
83
+ * where we need enqueue toolset promotion assets.
84
+ *
85
+ * @since 1.5
86
+ *
87
+ * @param array $screen_ids List of admin page screen ids.
88
+ *
89
+ */
90
+ $screen_ids = apply_filters('toolset_promotion_screen_ids', array());
91
+ if (empty($screen_ids)) {
92
+ return;
93
+ }
94
+ $screen = get_current_screen();
95
+ if (!in_array($screen->id, $screen_ids)) {
96
+ return;
97
+ }
98
+ wp_enqueue_style(__CLASS__);
99
+ wp_enqueue_script(__CLASS__);
100
+ }
101
+
102
+ /**
103
+ * Print in footer
104
+ *
105
+ * Print nessary elemnt in admin footer
106
+ *
107
+ * @since 1.5
108
+ *
109
+ */
110
+ public function admin_footer()
111
+ {
112
+ $link_learn = $this->get_affiliate_link_string('http://wp-types.com/');
113
+ $link_button = $this->get_affiliate_link_string('http://wp-types.com/#buy-toolset');
114
+
115
+ ob_start();
116
+ ?>
117
+
118
+ <div class="ddl-dialogs-container">
119
+ <div id="js-buy-toolset-embedded-message-wrap"></div>
120
+ </div>
121
+ <script type="text/html" id="js-buy-toolset-embedded-message">
122
+ <div class="toolset-modal">
123
+ <h2><?php _e('Want to edit Views, CRED forms and Layouts? Get the full <em>Toolset</em> package!', 'wpcf'); ?></h2>
124
+
125
+ <div class="content">
126
+ <p class="full"><?php _e('The full <em>Toolset</em> package allows you to develop and customize themes without touching PHP. You will be able to:', 'wpcf'); ?></p>
127
+
128
+ <div class="icons">
129
+ <ul>
130
+ <li class="template"><?php _e('Create templates', 'wpcf'); ?></li>
131
+ <li class="layout"><?php _e('Design page layouts using drag-and-drop', 'wpcf'); ?></li>
132
+ <li class="toolset-search"><?php _e('Build parametric searches', 'wpcf'); ?></li>
133
+ </ul>
134
+ <ul>
135
+ <li class="list"><?php _e('Display lists of content', 'wpcf'); ?></li>
136
+ <li class="form"><?php _e('Create front-end content editing forms', 'wpcf'); ?></li>
137
+ <li class="more"><?php _e('and more…', 'wpcf'); ?></li>
138
+ </ul>
139
+ </div>
140
+
141
+ <p class="description"><?php _e('Once you buy the full Toolset, you will be able to edit Views, CRED forms and Layouts in your site, as well as build new ones.', 'wpcf'); ?></p>
142
+
143
+ <a href="<?php echo $link_button; ?>"
144
+ class="button"><?php _e('<em>Toolset</em> Package Options', 'wpcf'); ?></a>
145
+ <a href="<?php echo $link_learn; ?>"
146
+ class="learn"><?php _e('Learn more about <em>Toolset</em>', 'wpcf'); ?></a>
147
+
148
+ </div>
149
+ <span class="icon-toolset-logo"></span>
150
+ <span class="js-close-promotional-message"></span>
151
+ </div>
152
+ </script>
153
+ <?php
154
+ echo ob_get_clean();
155
+ }
156
+
157
+ private function get_affiliate_link_string($link)
158
+ {
159
+ if (function_exists('installer_ep_get_configuration') === false) {
160
+ return $link;
161
+ }
162
+
163
+ $info = installer_ep_get_configuration(wp_get_theme()->Name);
164
+
165
+ if (!isset($info['repositories']) &&
166
+ !isset($info['repositories']['toolset'])
167
+ ) {
168
+ return $link;
169
+
170
+ } else if (
171
+ isset($info['repositories']['toolset']['affiliate_id']) &&
172
+ isset($info['repositories']['toolset']['affiliate_key'])
173
+ ) {
174
+ $id = $info['repositories']['toolset']['affiliate_id'];
175
+ $key = $info['repositories']['toolset']['affiliate_key'];
176
+
177
+ $hash = explode( '#', $link );
178
+ if( count($hash) > 1 ){
179
+ $link = $hash[0];
180
+ $hash = "#" . $hash[1];
181
+ } else {
182
+ $hash = '';
183
+ }
184
+
185
+ return sprintf("%s?aid=%s&affiliate_key=%s%s", $link, $id, $key, $hash);
186
+ }
187
+
188
+ return $link;
189
+ }
190
+
191
+ }
192
+
193
+ }
embedded/toolset/toolset-common/classes/control_forms.php ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ include_once 'forms.php';
4
+
5
+ class Enlimbo_Control_Forms extends Enlimbo_Forms_Wpcf {
6
+
7
+ private $_urlParam = '';
8
+
9
+ public function isSubmitted($id = '') {
10
+ if(!empty($id)) {
11
+ $this->_urlParam = $id;
12
+ }
13
+
14
+ if(empty($this->_urlParam)) {
15
+ return false;
16
+ }
17
+
18
+ return isset($_GET[$this->_urlParam]);
19
+ }
20
+
21
+ public function renderElements($elements) {
22
+ if(isset($elements['field'])) {
23
+ $this->_urlParam = $elements['field']['#name'];
24
+ }
25
+
26
+ return parent::renderElements($elements);
27
+ }
28
+ }
embedded/toolset/toolset-common/classes/forms.php ADDED
@@ -0,0 +1,972 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Returns HTML formatted output for elements and handles form submission.
4
+ *
5
+ *
6
+ * @version 1.0
7
+ */
8
+ if (!class_exists('Enlimbo_Forms_Wpcf')) {
9
+
10
+ class Enlimbo_Forms_Wpcf
11
+ {
12
+
13
+ /**
14
+ * @var string
15
+ */
16
+ private $_id;
17
+
18
+ /**
19
+ * @var array
20
+ */
21
+ private $_errors = array();
22
+
23
+ /**
24
+ * @var array
25
+ */
26
+ private $_elements = array();
27
+
28
+ /**
29
+ * @var array
30
+ */
31
+ private $_count = array();
32
+
33
+ /**
34
+ * @var string
35
+ */
36
+ public $css_class = 'wpcf-form';
37
+
38
+ /**
39
+ * Auto handler
40
+ *
41
+ * Renders.
42
+ *
43
+ * @param array $element
44
+ * @return HTML formatted output
45
+ */
46
+ public function getId() {
47
+ return $this->_id;
48
+ }
49
+
50
+ public function autoHandle($id, $form)
51
+ {
52
+ // Auto-add wpnonce field
53
+ $form['_wpnonce'] = array(
54
+ '#type' => 'markup',
55
+ '#markup' => wp_nonce_field($id, '_wpnonce_wpcf', true, false)
56
+ );
57
+
58
+ $this->_id = $id;
59
+ $this->_elements = $form;
60
+
61
+ do_action('wpcf_form_autohandle', $id, $form, $this);
62
+ do_action('wpcf_form_autohandle_' . $id, $form, $this);
63
+
64
+ // get submitted data
65
+ if ($this->isSubmitted()) {
66
+
67
+ do_action('wpcf_form_autohandle_submit', $id, $form, $this);
68
+ do_action('wpcf_form_autohandle_submit_' . $id, $form, $this);
69
+
70
+ // check if errors (validation)
71
+ $this->validate($this->_elements);
72
+
73
+ do_action('wpcf_form_autohandle_validate', $id, $form, $this);
74
+ do_action('wpcf_form_autohandle_validate_' . $id, $form, $this);
75
+
76
+ // callback
77
+ if (empty($this->_errors)) {
78
+
79
+ if (isset($form['#form']['callback'])) {
80
+ if (is_array($form['#form']['callback'])) {
81
+ foreach ($form['#form']['callback'] as $callback) {
82
+ if (is_callable($callback)) {
83
+ call_user_func($callback, $this);
84
+ }
85
+ }
86
+ } else {
87
+ if (is_callable($form['#form']['callback'])) {
88
+ call_user_func($form['#form']['callback'], $this);
89
+ }
90
+ }
91
+ }
92
+ // Maybe triggered by callback function
93
+ if (empty($this->_errors)) {
94
+ // redirect
95
+ do_action('wpcf_form_autohandle_redirection', $id,
96
+ $form, $this);
97
+ do_action('wpcf_form_autohandle_redirection_' . $id,
98
+ $form, $this);
99
+ if (!isset($form['#form']['redirection'])) {
100
+ header('Location: ' . $_SERVER['REQUEST_URI']);
101
+ } else if ($form['#form']['redirection'] != false) {
102
+ header('Location: ' . $form['#form']['redirection']);
103
+ }
104
+ }
105
+ }
106
+ }
107
+ }
108
+
109
+ /**
110
+ * Checks if form is submitted.
111
+ *
112
+ * @param type $id
113
+ * @return type
114
+ */
115
+ public function isSubmitted($id = '')
116
+ {
117
+ if (empty($id)) {
118
+ $id = $this->_id;
119
+ }
120
+ return (isset($_REQUEST['_wpnonce_wpcf'])
121
+ && wp_verify_nonce($_REQUEST['_wpnonce_wpcf'], $id));
122
+ }
123
+
124
+ /**
125
+ * Loops over elements and validates them.
126
+ *
127
+ * @param type $elements
128
+ */
129
+ public function validate(&$elements)
130
+ {
131
+ require_once WPCF_EMBEDDED_ABSPATH . '/classes/validate.php';
132
+ foreach ($elements as $key => &$element) {
133
+ if (!isset($element['#type'])
134
+ || !$this->_isValidType($element['#type'])) {
135
+ continue;
136
+ }
137
+ if ($element['#type'] != 'fieldset') {
138
+ if (isset($element['#name'])
139
+ && !in_array($element['#type'],
140
+ array('submit', 'reset'))) {
141
+ // Set submitted data
142
+ if (!in_array($element['#type'], array('checkboxes'))
143
+ && empty($element['#forced_value'])) {
144
+ $element['#value'] = $this->getSubmittedData($element);
145
+ } else if (!empty($element['#options'])
146
+ && empty($element['#forced_value'])) {
147
+ foreach ($element['#options'] as $option_key => $option) {
148
+ $option['#type'] = 'checkbox';
149
+ $element['#options'][$option_key]['#value'] = $this->getSubmittedData($option);
150
+ }
151
+ }
152
+ }
153
+ // Validate
154
+ if (isset($element['#validate'])) {
155
+ $this->validateElement($element);
156
+ }
157
+ } else if (isset($element['#type'])
158
+ && $element['#type'] == 'fieldset') {
159
+ $this->validate($element);
160
+ } else if (is_array($element)) {
161
+ $this->validate($element);
162
+ }
163
+ }
164
+ }
165
+
166
+ /**
167
+ * Validates element.
168
+ *
169
+ * @param type $element
170
+ */
171
+ public function validateElement(&$element)
172
+ {
173
+ $check = Wpcf_Validate::check($element['#validate'],
174
+ $element['#value']);
175
+ if (isset($check['error'])) {
176
+ $this->_errors = true;
177
+ $element['#error'] = $check['message'];
178
+ }
179
+ }
180
+
181
+ /**
182
+ * Checks if there are errors.
183
+ *
184
+ * @return type
185
+ */
186
+ public function isError()
187
+ {
188
+ return $this->_errors;
189
+ }
190
+
191
+ /**
192
+ * Sets errors to true.
193
+ */
194
+ public function triggerError()
195
+ {
196
+ $this->_errors = true;
197
+ }
198
+
199
+ /**
200
+ * Renders form.
201
+ *
202
+ * @return type
203
+ */
204
+ public function renderForm()
205
+ {
206
+ // loop over elements and render them
207
+ return $this->renderElements($this->_elements);
208
+ }
209
+
210
+ /**
211
+ * Counts element types.
212
+ *
213
+ * @param type $type
214
+ * @return type
215
+ */
216
+ private function _count($type) {
217
+ if (!isset($this->_count[$type])) {
218
+ $this->_count[$type] = 0;
219
+ }
220
+ $this->_count[$type] += 1;
221
+ return $this->_count[$type];
222
+ }
223
+
224
+ /**
225
+ * Check if element is of valid type
226
+ *
227
+ * @param string $type
228
+ * @return boolean
229
+ */
230
+ private function _isValidType($type)
231
+ {
232
+ return in_array($type,
233
+ array('select', 'checkboxes', 'checkbox', 'radios',
234
+ 'radio', 'textfield', 'textarea', 'file', 'submit', 'reset',
235
+ 'hidden', 'fieldset', 'markup', 'button'));
236
+ }
237
+
238
+ /**
239
+ * Renders elements.
240
+ *
241
+ * @param type $elements
242
+ * @return type
243
+ */
244
+ public function renderElements($elements)
245
+ {
246
+ $output = '';
247
+ foreach ($elements as $key => $element) {
248
+ if (!isset($element['#type'])
249
+ || !$this->_isValidType($element['#type'])) {
250
+ continue;
251
+ }
252
+ if ($element['#type'] != 'fieldset') {
253
+ $output .= $this->renderElement($element);
254
+ } else if (isset($element['#type'])
255
+ && $element['#type'] == 'fieldset') {
256
+ $buffer = $this->renderElements($element);
257
+ $output .= $this->fieldset($element, 'wrap', $buffer);
258
+ } else if (is_array($element)) {
259
+ $output .= $this->renderElements($element);
260
+ }
261
+ }
262
+ return $output;
263
+ }
264
+
265
+ /**
266
+ * Renders element.
267
+ *
268
+ * Depending on element type, it calls class methods.
269
+ *
270
+ * @param array $element
271
+ * @return HTML formatted output
272
+ */
273
+ public function renderElement($element)
274
+ {
275
+ $method = $element['#type'];
276
+ if (!isset($element['#name']) && $element['#type'] != 'markup') {
277
+ if (!isset($element['#attributes']['name'])) {
278
+ return '#name or #attributes[\'name\'] required!';
279
+ } else {
280
+ $element['#name'] = $element['#attributes']['name'];
281
+ }
282
+ }
283
+ if (is_callable(array($this, $method))) {
284
+ if (!isset($element['#id'])) {
285
+ if (isset($element['#attributes']['id'])) {
286
+ $element['#id'] = $element['#attributes']['id'];
287
+ } else {
288
+ $element['#id'] = $element['#type'] . '-'
289
+ . $this->_count($element['#type']);
290
+ }
291
+ }
292
+ if (isset($this->_errors[$element['#id']])) {
293
+ $element['#error'] = $this->_errors[$element['#id']];
294
+ }
295
+ // Add JS validation
296
+ if (!empty($element['#validate'])) {
297
+ wpcf_form_add_js_validation($element);
298
+ }
299
+ return $this->{$method}($element);
300
+ }
301
+ }
302
+
303
+ /**
304
+ * Sets other element attributes.
305
+ *
306
+ * @param array $element
307
+ * @return string
308
+ */
309
+ private function _setElementAttributes($element)
310
+ {
311
+ $attributes = '';
312
+ $error_class = isset($element['#error']) ? ' ' . $this->css_class . '-error ' . $this->css_class . '-' . $element['#type'] . '-error ' . ' form-' . $element['#type'] . '-error ' . $element['#type'] . '-error form-error ' : '';
313
+ $class = $this->css_class . '-' . $element['#type']
314
+ . ' form-' . $element['#type'] . ' ' . $element['#type'];
315
+ if (isset($element['#attributes'])) {
316
+ foreach ($element['#attributes'] as $attribute => $value) {
317
+ // Prevent undesired elements
318
+ if (in_array($attribute, array('id', 'name'))) {
319
+ continue;
320
+ }
321
+ // Don't set disabled for checkbox
322
+ if ( ( 'disabled' == $attribute || '#disabled' == $attribute ) && $element['#type'] == 'checkbox') {
323
+ continue;
324
+ }
325
+ // Append class values
326
+ if ($attribute == 'class') {
327
+ $value = $value . ' ' . $class . $error_class;
328
+
329
+ }
330
+ // Set return string
331
+ $attributes .= ' ' . $attribute . '="' . $value . '"';
332
+ }
333
+ }
334
+ if (!isset($element['#attributes']['class'])) {
335
+ $is_default_element = isset( $element['#default_value'] ) && $element['#default_value'] ? ' wpcf-default-value-input' : '';
336
+
337
+ $attributes .= ' class="' . $class . $error_class . $is_default_element . '"';
338
+ }
339
+ return $attributes;
340
+ }
341
+
342
+ /**
343
+ * Sets render elements.
344
+ *
345
+ * @param array $element
346
+ */
347
+ private function _setRender($element)
348
+ {
349
+ if (!isset($element['#id'])) {
350
+ if (isset($element['#attributes']['id'])) {
351
+ $element['#id'] = $element['#attributes']['id'];
352
+ } else {
353
+ $element['#id'] = 'form-' . md5(serialize($element)) . '-'
354
+ . $this->_count($element['#type']);
355
+ }
356
+ }
357
+ $element['_attributes_string'] = $this->_setElementAttributes($element);
358
+ $element['_render'] = array();
359
+ $element['_render']['prefix'] = isset($element['#prefix']) ? $element['#prefix'] . "\r\n" : '';
360
+ $element['_render']['suffix'] = isset($element['#suffix']) ? $element['#suffix'] . "\r\n" : '';
361
+ $element['_render']['before'] = isset($element['#before']) ? $element['#before'] . "\r\n" : '';
362
+ $element['_render']['after'] = isset($element['#after']) ? $element['#after'] . "\r\n" : '';
363
+ $labelclass = '';
364
+ if ( isset( $element['#labelclass'] ) ) {
365
+ $labelclass = $element['#labelclass'] . ' ';
366
+ }
367
+ $labelstyle = '';
368
+ if ( isset( $element['#labelstyle'] ) ) {
369
+ $labelstyle = ' style="' . $element['#labelstyle'] . '" ';
370
+ }
371
+ $element['_render']['label'] = isset($element['#title']) ? '<label class="'
372
+ . $labelclass
373
+ . $this->css_class . '-label ' . $this->css_class . '-'
374
+ . $element['#type'] . '-label" for="' . $element['#id'] . '"'.
375
+ $labelstyle . '>'
376
+ . stripslashes($element['#title'])
377
+ . '</label>' . "\r\n" : '';
378
+ $element['_render']['title'] = $this->_setElementTitle($element);
379
+ $element['_render']['description'] = isset($element['#description']) ? $this->_setElementDescription($element) : '';
380
+ $element['_render']['error'] = $this->renderError($element) . "\r\n";
381
+
382
+ return $element;
383
+ }
384
+
385
+ /**
386
+ * Applies pattern to output.
387
+ *
388
+ * Pass element property #pattern to get custom renedered element.
389
+ *
390
+ * @param array $pattern
391
+ * Accepts: <prefix><suffix><label><title><desription><error>
392
+ * @param array $element
393
+ */
394
+ private function _pattern($pattern, $element)
395
+ {
396
+ $pattern = strtolower($pattern);
397
+ foreach ($element['_render'] as $key => $value) {
398
+ $pattern = str_replace('<' . strtolower($key) . '>', $value,
399
+ $pattern);
400
+ }
401
+ return $pattern;
402
+ }
403
+
404
+ /**
405
+ * Wrapps element in <div></div>.
406
+ *
407
+ * @param arrat $element
408
+ * @param string $output
409
+ * @return string
410
+ */
411
+ private function _wrapElement($element, $output)
412
+ {
413
+ if (empty($element['#inline'])) {
414
+ $wrapped = '<div id="' . $element['#id'] . '-wrapper"'
415
+ . ' class="form-item form-item-' . $element['#type'] . ' '
416
+ . $this->css_class . '-item '
417
+ . $this->css_class . '-item-' . $element['#type']
418
+ . '">' . $output . '</div>';
419
+ return $wrapped;
420
+ }
421
+ return $output;
422
+ }
423
+
424
+ /**
425
+ * Returns HTML formatted output for element's title.
426
+ *
427
+ * @param string $element
428
+ * @return string
429
+ */
430
+ private function _setElementTitle($element)
431
+ {
432
+ $output = '';
433
+ if (isset($element['#title'])) {
434
+ $output .= '<div class="title '
435
+ . $this->css_class . '-title '
436
+ . $this->css_class . '-title-' . $element['#type'] . ' '
437
+ . 'title-' . $element['#type'] . '">'
438
+ . stripslashes($element['#title'])
439
+ . "</div>\r\n";
440
+ }
441
+ return $output;
442
+ }
443
+
444
+ /**
445
+ * Returns HTML formatted output for element's description.
446
+ *
447
+ * @param array $element
448
+ * @return string
449
+ */
450
+ private function _setElementDescription($element)
451
+ {
452
+ $element['#description'] = stripslashes($element['#description']);
453
+ $output = "\r\n"
454
+ . '<div class="description '
455
+ . $this->css_class . '-description '
456
+ . $this->css_class . '-description-' . $element['#type'] . ' '
457
+ . 'description-' . $element['#type'] . '">'
458
+ . $element['#description'] . "</div>\r\n";
459
+ return $output;
460
+ }
461
+
462
+ /**
463
+ * Returns HTML formatted element's error message.
464
+ *
465
+ * Pass #supress_errors in #form element to avoid error rendering.
466
+ *
467
+ * @param array $element
468
+ * @return string
469
+ */
470
+ public function renderError($element)
471
+ {
472
+ if (!isset($element['#error'])) {
473
+ return '';
474
+ }
475
+ $output = '<div class="form-error '
476
+ . $this->css_class . '-error '
477
+ . $this->css_class . '-form-error '
478
+ . $this->css_class . '-' . $element['#type'] . '-error '
479
+ . $element['#type'] . '-error form-error-label'
480
+ . '">' . $element['#error'] . '</div>'
481
+ . "\r\n";
482
+ return $output;
483
+ }
484
+
485
+ /**
486
+ * Returns HTML formatted output for fieldset.
487
+ *
488
+ * @param array $element
489
+ * @param string $action open|close|wrap
490
+ * @param string $wrap_content HTML formatted output of child elements
491
+ * @return string
492
+ */
493
+ public function fieldset($element, $action = 'open', $wrap_content = '')
494
+ {
495
+ $collapsible_open = '<div class="fieldset-wrapper">';
496
+ $collapsible_close = '</div>';
497
+ $legend_class = '';
498
+ if (!isset($element['#id'])) {
499
+ $element['#id'] = 'fieldset-' . $this->_count('fieldset');
500
+ }
501
+ if (!isset($element['_attributes_string'])) {
502
+ $element['_attributes_string'] = $this->_setElementAttributes($element);
503
+ }
504
+ if ((isset($element['#collapsible']) && $element['#collapsible'])
505
+ || (isset($element['#collapsed']) && $element['#collapsed'])) {
506
+ $collapsible_open = '<div class="collapsible fieldset-wrapper">';
507
+ $collapsible_close = '</div>';
508
+ $legend_class = ' class="legend-expanded"';
509
+ }
510
+ if (isset($element['#collapsed']) && $element['#collapsed']) {
511
+ $collapsible_open = str_replace('class="', 'class="collapsed ',
512
+ $collapsible_open);
513
+ $legend_class = ' class="legend-collapsed"';
514
+ }
515
+ $output = '';
516
+ switch ($action) {
517
+ case 'close':
518
+ $output .= $collapsible_close . "</fieldset>\r\n";
519
+ $output .= isset($element['#suffix']) ? $element['#suffix']
520
+ . "\r\n" : '';
521
+ $output .= "\n\r";
522
+ break;
523
+
524
+ case 'open':
525
+ $output .= $collapsible_open;
526
+ $output .= isset($element['#prefix']) ? $element['#prefix']
527
+ . "\r\n" : '';
528
+ $output .= '<fieldset' . $element['_attributes_string']
529
+ . ' id="' . $element['#id'] . '">' . "\r\n";
530
+ $output .= isset($element['#title']) ? '<legend'
531
+ . $legend_class . '>'
532
+ . stripslashes($element['#title'])
533
+ . "</legend>\r\n" : '';
534
+ $output .=
535
+ isset($element['#description']) ? $this->_setElementDescription($element) : '';
536
+ $output .= "\n\r";
537
+ break;
538
+
539
+ case 'wrap':
540
+ if (!empty($wrap_content)) {
541
+ $output .= isset($element['#prefix']) ? $element['#prefix'] : '';
542
+ $output .= '<fieldset' . $element['_attributes_string']
543
+ . ' id="' . $element['#id'] . '">' . "\r\n";
544
+ $output .= '<legend' . $legend_class . '>'
545
+ . stripslashes($element['#title'])
546
+ . "</legend>\r\n"
547
+ . $collapsible_open;
548
+ $output .= isset($element['#description']) ? $this->_setElementDescription($element) : '';
549
+ $output .= $wrap_content . $collapsible_close
550
+ . "</fieldset>\r\n";
551
+ $output .=
552
+ isset($element['#suffix']) ? $element['#suffix'] : '';
553
+ $output .= "\n\r";
554
+ }
555
+ break;
556
+ }
557
+ return $output;
558
+ }
559
+
560
+ /**
561
+ * Returns HTML formatted output for checkbox element.
562
+ *
563
+ * @param array $element
564
+ * @return string
565
+ */
566
+ public function checkbox($element)
567
+ {
568
+
569
+ $element['#type'] = 'checkbox';
570
+ $element = $this->_setRender($element);
571
+ $element['_render']['element'] = '<input type="checkbox" id="'
572
+ . $element['#id'] . '" name="'
573
+ . $element['#name'] . '" value="';
574
+ // Specific: if value is empty force 1 to be rendered
575
+ // Juan: removed this 1 forced value since it broke the default value in checkboxes filter controls
576
+ $element['_render']['element'] .=
577
+ !empty($element['#value']) ? htmlspecialchars($element['#value']) : '';
578
+ $element['_render']['element'] .= '"' . $element['_attributes_string'];
579
+ $element['_render']['element'] .= ((!$this->isSubmitted()
580
+ && !empty($element['#default_value']))
581
+ || ($this->isSubmitted()
582
+ && !empty($element['#value']))) ? ' checked="checked"' : '';
583
+ if (!empty($element['#attributes']['disabled']) || !empty($element['#disable'])) {
584
+ $element['_render']['element'] .= ' onclick="javascript:return false; if(this.checked == 1){this.checked=1; return true;}else{this.checked=0; return false;}"';
585
+ }
586
+ if (!empty($element['#attributes']['#disabled'])) {
587
+ $element['_render']['element'] .= ' disabled="disabled"';
588
+ }
589
+
590
+ $element['_render']['element'] .= ' />';
591
+ $pattern = isset($element['#pattern']) ? $element['#pattern'] : '<BEFORE><PREFIX><ELEMENT>&nbsp;<LABEL><ERROR><SUFFIX><DESCRIPTION><AFTER>';
592
+ $output = $this->_pattern($pattern, $element);
593
+ $output = $this->_wrapElement($element, $output);
594
+ return $output . "\r\n";
595
+ }
596
+
597
+ /**
598
+ * Returns HTML formatted output for checkboxes element.
599
+ *
600
+ * Renders more than one checkboxes provided as elements in '#options'
601
+ * array element.
602
+ *
603
+ * @param array $element
604
+ * @return string
605
+ */
606
+ public function checkboxes($element)
607
+ {
608
+ $element['#type'] = 'checkboxes';
609
+ $element = $this->_setRender($element);
610
+ $clone = $element;
611
+ $clone['#type'] = 'checkbox';
612
+ $element['_render']['element'] = '';
613
+ foreach ($element['#options'] as $ID => $value) {
614
+ if (!is_array($value)) {
615
+ $value = array('#title' => $ID, '#value' => $value, '#name' => $element['#name'] . '[]');
616
+ }
617
+ $element['_render']['element'] .= $this->checkbox($value);
618
+ }
619
+ $pattern = isset($element['#pattern']) ? $element['#pattern'] : '<BEFORE><PREFIX><TITLE><DESCRIPTION><ELEMENT><SUFFIX><AFTER>';
620
+ $output = $this->_pattern($pattern, $element);
621
+ $output = $this->_wrapElement($element, $output);
622
+ return $output;
623
+ }
624
+
625
+ /**
626
+ * Returns HTML formatted output for radio element.
627
+ *
628
+ * @param array $element
629
+ * @return string
630
+ */
631
+ public function radio($element)
632
+ {
633
+ $element['#type'] = 'radio';
634
+ $element = $this->_setRender($element);
635
+ $element['_render']['element'] = '<input type="radio" id="'
636
+ . $element['#id'] . '" name="'
637
+ . $element['#name'] . '" value="';
638
+ $element['_render']['element'] .= isset($element['#value']) ? htmlspecialchars($element['#value']) : $this->_count['radio'];
639
+ $element['_render']['element'] .= '"';
640
+ $element['_render']['element'] .= $element['_attributes_string'];
641
+ $element['_render']['element'] .= ( isset($element['#value'])
642
+ && $element['#value'] === $element['#default_value']) ? ' checked="checked"' : '';
643
+ if (isset($element['#disable']) && $element['#disable']) {
644
+ $element['_render']['element'] .= ' disabled="disabled"';
645
+ }
646
+ $element['_render']['element'] .= ' />';
647
+ $pattern = isset($element['#pattern']) ? $element['#pattern'] : '<BEFORE><PREFIX><ELEMENT>&nbsp;<LABEL><ERROR><SUFFIX><DESCRIPTION><AFTER>';
648
+ $output = $this->_pattern($pattern, $element);
649
+ $output = $this->_wrapElement($element, $output);
650
+ return $output . "\r\n";
651
+ }
652
+
653
+ /**
654
+ * Returns HTML formatted output for radios elements.
655
+ *
656
+ * Radios are provided via #options array.
657
+ * Requires #name value.
658
+ *
659
+ * @param array $element
660
+ * @return string
661
+ */
662
+ public function radios($element)
663
+ {
664
+ if (!isset($element['#name']) || empty($element['#name'])) {
665
+ return FALSE;
666
+ }
667
+ $element['#type'] = 'radios';
668
+ $element = $this->_setRender($element);
669
+ $element['_render']['element'] = '';
670
+ foreach ($element['#options'] as $ID => $value) {
671
+ $this->_count('radio');
672
+ if (!is_array($value)) {
673
+ $value = array('#title' => $ID, '#value' => $value);
674
+ $value['#inline'] = true;
675
+ $value['#after'] = '<br />';
676
+ }
677
+ $value['#name'] = $element['#name'];
678
+ $value['#default_value'] = isset($element['#default_value']) ? $element['#default_value'] : $value['#value'];
679
+ if ( !isset( $value['#disable'] ) ) {
680
+ $value['#disable'] = isset($element['#disable']) ? $element['#disable'] : false;
681
+ }
682
+ if ( isset( $element['#attributes'] ) && !isset( $value['#attributes'] ) ) {
683
+ $value['#attributes'] = $element['#attributes'];
684
+ }
685
+ $element['_render']['element'] .= $this->radio($value);
686
+ }
687
+ $pattern = isset($element['#pattern']) ? $element['#pattern'] : '<BEFORE><PREFIX><TITLE><DESCRIPTION><ELEMENT><SUFFIX><AFTER>';
688
+ $output = $this->_pattern($pattern, $element);
689
+ $output = $this->_wrapElement($element, $output);
690
+ return $output;
691
+ }
692
+
693
+ /**
694
+ * Returns HTML formatted output for select element.
695
+ *
696
+ * @param array $element
697
+ * @return string
698
+ */
699
+ public function select($element)
700
+ {
701
+ $element['#type'] = 'select';
702
+ $element = $this->_setRender($element);
703
+ $multiple = isset( $element['#multiple'] ) ? $element['#multiple'] : '';
704
+
705
+ $element['_render']['element'] = '<select '.$multiple.' id="' . $element['#id']
706
+ . '" name="' . $element['#name'] . '"'
707
+ . $element['_attributes_string'] . ">\r\n";
708
+ $count = 1;
709
+ foreach ($element['#options'] as $id => $value) {
710
+ if (!is_array($value)) {
711
+ $value = array('#title' => $id, '#value' => $value);
712
+ }
713
+ if (!isset($value['#value'])) {
714
+ $value['#value'] = $this->_count['select'] . '-' . $count;
715
+ $count += 1;
716
+ }
717
+
718
+ $value['#type'] = 'option';
719
+ $element['_render']['element'] .= '<option value="'
720
+ . htmlspecialchars($value['#value']) . '"';
721
+
722
+ if( is_array( $element['#default_value'] ) )
723
+ {
724
+ $element['_render']['element'] .= in_array( $value['#value'], $element['#default_value'] ) ? ' selected="selected"' : '';
725
+ }
726
+ else
727
+ {
728
+ $element['_render']['element'] .= ( $element['#default_value']
729
+ == $value['#value']) ? ' selected="selected"' : '';
730
+ }
731
+ if ( isset( $value['#disable'] ) ) {
732
+ $element['_render']['element'] .= ' disabled="disabled"';
733
+ }
734
+
735
+ $element['_render']['element'] .= $this->_setElementAttributes($value);
736
+ $element['_render']['element'] .= '>';
737
+ $element['_render']['element'] .= isset($value['#title']) ? $value['#title'] : $value['#value'];
738
+ $element['_render']['element'] .= "</option>\r\n";
739
+ }
740
+ $element['_render']['element'] .= "</select>\r\n";
741
+ $pattern = isset($element['#pattern']) ? $element['#pattern'] : '<BEFORE><LABEL><DESCRIPTION><ERROR><PREFIX><ELEMENT><SUFFIX><AFTER>';
742
+ $output = $this->_pattern($pattern, $element);
743
+ $output = $this->_wrapElement($element, $output);
744
+ return $output;
745
+ }
746
+
747
+ /**
748
+ * Returns HTML formatted output for textfield element.
749
+ *
750
+ * @param array $element
751
+ * @return string
752
+ */
753
+ public function textfield($element)
754
+ {
755
+ $element['#type'] = 'textfield';
756
+ $element = $this->_setRender($element);
757
+ $element['_render']['element'] = '<input type="text" id="'
758
+ . $element['#id'] . '" name="' . $element['#name'] . '" value="';
759
+ $element['_render']['element'] .= isset($element['#value']) ? htmlspecialchars(stripslashes($element['#value'])) : '';
760
+ $element['_render']['element'] .= '"' . $element['_attributes_string'];
761
+ if (isset($element['#disable']) && $element['#disable']) {
762
+ $element['_render']['element'] .= ' disabled="disabled"';
763
+ }
764
+ $element['_render']['element'] .= ' />';
765
+ $pattern = isset($element['#pattern']) ? $element['#pattern'] : '<BEFORE><LABEL><ERROR><PREFIX><ELEMENT><SUFFIX><DESCRIPTION><AFTER>';
766
+ $output = $this->_pattern($pattern, $element);
767
+ $output = $this->_wrapElement($element, $output);
768
+ return $output . "\r\n";
769
+ }
770
+
771
+ /**
772
+ * Returns HTML formatted output for textfield element.
773
+ *
774
+ * @param array $element
775
+ * @return string
776
+ */
777
+ public function password($element)
778
+ {
779
+ $element['#type'] = 'password';
780
+ $element = $this->_setRender($element);
781
+ $element['_render']['element'] = '<input type="password" id="'
782
+ . $element['#id'] . '" name="' . $element['#name'] . '" value="';
783
+ $element['_render']['element'] .= isset($element['#value']) ? $element['#value'] : '';
784
+ $element['_render']['element'] .= '"' . $element['_attributes_string'];
785
+ if (isset($element['#disable']) && $element['#disable']) {
786
+ $element['_render']['element'] .= ' disabled="disabled"';
787
+ }
788
+ $element['_render']['element'] .= ' />';
789
+ $pattern = isset($element['#pattern']) ? $element['#pattern'] : '<BEFORE><LABEL><ERROR><PREFIX><ELEMENT><SUFFIX><DESCRIPTION><AFTER>';
790
+ $output = $this->_pattern($pattern, $element);
791
+ $output = $this->_wrapElement($element, $output);
792
+ return $output . "\r\n";
793
+ }
794
+
795
+ /**
796
+ * Returns HTML formatted output for textarea element.
797
+ *
798
+ * @param array $element
799
+ * @return string
800
+ */
801
+ public function textarea($element)
802
+ {
803
+ $element['#type'] = 'textarea';
804
+ if (!isset($element['#attributes']['rows'])) {
805
+ $element['#attributes']['rows'] = 5;
806
+ }
807
+ if (!isset($element['#attributes']['cols'])) {
808
+ $element['#attributes']['cols'] = 1;
809
+ }
810
+ $element = $this->_setRender($element);
811
+ $element['_render']['element'] = '<textarea id="' . $element['#id']
812
+ . '" name="' . $element['#name'] . '"'
813
+ . $element['_attributes_string'] . '>';
814
+ $element['_render']['element'] .= isset($element['#value']) ? htmlspecialchars(stripslashes($element['#value'])) : '';
815
+ $element['_render']['element'] .= '</textarea>' . "\r\n";
816
+ $pattern = isset($element['#pattern']) ? $element['#pattern'] : '<BEFORE><LABEL><DESCRIPTION><ERROR><PREFIX><ELEMENT><SUFFIX><AFTER>';
817
+ $output = $this->_pattern($pattern, $element);
818
+ $output = $this->_wrapElement($element, $output);
819
+ return $output . "\r\n";
820
+ }
821
+
822
+ /**
823
+ * Returns HTML formatted output for file upload element.
824
+ *
825
+ * @param array $element
826
+ * @return string
827
+ */
828
+ public function file($element)
829
+ {
830
+ $element['#type'] = 'file';
831
+ $element = $this->_setRender($element);
832
+ $element['_render']['element'] = '<input type="file" id="'
833
+ . $element['#id'] . '" name="' . $element['#name'] . '"'
834
+ . $element['_attributes_string'];
835
+ if (isset($element['#disable']) && $element['#disable']) {
836
+ $element['_render']['element'] .= ' disabled="disabled"';
837
+ }
838
+ $element['_render']['element'] .= ' />';
839
+ $pattern = isset($element['#pattern']) ? $element['#pattern'] : '<BEFORE><LABEL><ERROR><PREFIX><ELEMENT><DESCRIPTION><SUFFIX><AFTER>';
840
+ $output = $this->_pattern($pattern, $element);
841
+ $output = $this->_wrapElement($element, $output);
842
+ return $output;
843
+ }
844
+
845
+ /**
846
+ * Returns HTML formatted output for markup element.
847
+ *
848
+ * @param array $element
849
+ * @return string
850
+ */
851
+ public function markup($element)
852
+ {
853
+ return $element['#markup'];
854
+ }
855
+
856
+ /**
857
+ * Returns HTML formatted output for hidden element.
858
+ *
859
+ * @param array $element
860
+ * @return string
861
+ */
862
+ public function hidden($element)
863
+ {
864
+ $element['#type'] = 'hidden';
865
+ $output = '<input type="hidden" id="' . $element['#id'] . '" name="'
866
+ . $element['#name'] . '" value="';
867
+ $output .= isset($element['#value']) ? $element['#value'] : 1;
868
+ $output .= '" />';
869
+ return $output;
870
+ }
871
+
872
+ /**
873
+ * Returns HTML formatted output for reset button element.
874
+ *
875
+ * @param array $element
876
+ * @return string
877
+ */
878
+ public function reset($element)
879
+ {
880
+ return $this->submit($element, 'reset', 'Reset');
881
+ }
882
+
883
+ /**
884
+ * Returns HTML formatted output for button element.
885
+ *
886
+ * @param array $element
887
+ * @return string
888
+ */
889
+ public function button($element)
890
+ {
891
+ return $this->submit($element, 'button', 'Button');
892
+ }
893
+
894
+ /**
895
+ * Returns HTML formatted output for radio element.
896
+ *
897
+ * Used by reset and button.
898
+ *
899
+ * @param array $element
900
+ * @param string $type
901
+ * @param string $title
902
+ * @return string
903
+ */
904
+ public function submit($element, $type = 'submit', $title = 'Submit')
905
+ {
906
+ $element['#type'] = $type;
907
+ $element = $this->_setRender($element);
908
+ $element['_render']['element'] = '<input type="' . $type . '" id="'
909
+ . $element['#id'] . '" name="' . $element['#name'] . '" value="';
910
+ $element['_render']['element'] .= isset($element['#value']) ? $element['#value'] : $title;
911
+ $element['_render']['element'] .= '"' . $element['_attributes_string']
912
+ . ' />';
913
+ $pattern = isset($element['#pattern']) ? $element['#pattern'] : '<BEFORE><PREFIX><ELEMENT><SUFFIX><AFTER>';
914
+ $output = $this->_pattern($pattern, $element);
915
+ return $output;
916
+ }
917
+
918
+ /**
919
+ * Searches and returns submitted data for element.
920
+ *
921
+ * @param type $element
922
+ * @return type mixed
923
+ */
924
+ public function getSubmittedData($element)
925
+ {
926
+ $name = $element['#name'];
927
+ if (strpos($name, '[') === false) {
928
+ if ($element['#type'] == 'file') {
929
+ return $_FILES[$name]['tmp_name'];
930
+ }
931
+ return isset($_REQUEST[$name]) ? $_REQUEST[$name] : in_array($element['#type'],
932
+ array('textfield', 'textarea')) ? '' : 0;
933
+ }
934
+
935
+ $parts = explode('[', $name);
936
+ //https://icanlocalize.basecamphq.com/projects/7393061-toolset/todo_items/196173458/comments
937
+ //Security Fixing
938
+ //$parts = array_map(create function('&$a', 'return trim($a, \']\');'), $parts);
939
+ $parts = array_map("cred_mytrimfunction", $parts);
940
+ if (!isset($_REQUEST[$parts[0]])) {
941
+ return in_array($element['#type'],
942
+ array('textfield', 'textarea')) ? '' : 0;
943
+ }
944
+ $search = $_REQUEST[$parts[0]];
945
+ for ($index = 0; $index < count($parts); $index++) {
946
+ $key = $parts[$index];
947
+ // We're at the end but no data retrieved
948
+ if (!isset($parts[$index + 1])) {
949
+ return in_array($element['#type'],
950
+ array('textfield', 'textarea')) ? '' : 0;
951
+ }
952
+ $key_next = $parts[$index + 1];
953
+ if ($index > 0) {
954
+ if (!isset($search[$key])) {
955
+ return in_array($element['#type'],
956
+ array('textfield', 'textarea')) ? '' : 0;
957
+ } else {
958
+ $search = $search[$key];
959
+ }
960
+ }
961
+ if (is_array($search) && array_key_exists($key_next, $search)) {
962
+ if (!is_array($search[$key_next])) {
963
+ return $search[$key_next];
964
+ }
965
+ }
966
+ }
967
+ return 0;
968
+ }
969
+
970
+ }
971
+
972
+ }
embedded/toolset/toolset-common/classes/validate.php ADDED
@@ -0,0 +1,425 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ require_once dirname(__FILE__) . '/validation-cakephp.php';
3
+
4
+ /**
5
+ * Validation class
6
+ *
7
+ * @version 1.0
8
+ */
9
+
10
+ if(!class_exists('Wpcf_Validate')) {
11
+ class Wpcf_Validate
12
+ {
13
+
14
+ /**
15
+ * Holds generic messages.
16
+ * @var type
17
+ */
18
+ public static $messages = null;
19
+ /**
20
+ * Holds function names.
21
+ * @var type
22
+ */
23
+ private static $_cake_aliases = array(
24
+ 'digits' => 'numeric',
25
+ 'number' => 'numeric',
26
+ 'alphanumeric' => 'alphaNumericWhitespaces',
27
+ 'nospecialchars' => 'noSpecialChars',
28
+ );
29
+ /**
30
+ * Current validation has 'required' method.
31
+ * @var type
32
+ */
33
+ private static $_is_required = false;
34
+
35
+ private static $_validation_object = null;
36
+
37
+ /**
38
+ * Sets calls.
39
+ *
40
+ * @param type $args
41
+ * @param type $value
42
+ * @return type
43
+ */
44
+ public static function check($args, $value)
45
+ {
46
+ // Init validation object
47
+ if (is_null(self::$_validation_object)) {
48
+ self::$_validation_object = new Wpcf_Cake_Validation();
49
+ }
50
+
51
+ // Init messages
52
+ if (is_null(self::$messages)) {
53
+ self::_set_messages();
54
+ }
55
+ // Check if there is 'required' method
56
+ if (array_key_exists('required', $args)) {
57
+ self::$_is_required = true;
58
+ }
59
+
60
+ // Loop over validation array
61
+ foreach ($args as $method => $v) {
62
+ // Use this class method
63
+ if (is_callable(array('Wpcf_Validate', $method))) {
64
+ $check = call_user_func_array(array('Wpcf_Validate', $method),
65
+ array($v, $value));
66
+ // Use CakePHP method
67
+ } else if ((isset(self::$_cake_aliases[$method])
68
+ && is_callable(array('Wpcf_Cake_Validation', self::$_cake_aliases[$method])))
69
+ || is_callable(array('Wpcf_Cake_Validation', $method))) {
70
+
71
+ // Check if validation pattern is set
72
+ if (isset($v['pattern'])) {
73
+ $pattern = array_flip(explode('.', $v['pattern']));
74
+ foreach ($pattern as $arg_key => $arg_value) {
75
+ if (isset($v[$arg_key])) {
76
+ $pattern[$arg_key] = $v[$arg_key];
77
+ }
78
+ }
79
+ $pattern['check'] = $value;
80
+ $v = $pattern;
81
+ // Apply simple pattern (check, value)
82
+ } else {
83
+ unset($v['active'], $v['message']);
84
+ $v = array($value) + $v;
85
+ }
86
+
87
+ // Validate
88
+ if (isset(self::$_cake_aliases[$method]) && is_callable(array('Wpcf_Cake_Validation', self::$_cake_aliases[$method]))) {
89
+ // $check = @call_user_func_array(array('Wpcf_Cake_Validation', self::$_cake_aliases[$method]),
90
+ // array_values($v));
91
+ $check = @call_user_func_array(array(self::$_validation_object, self::$_cake_aliases[$method]),
92
+ array_values($v));
93
+ } else {
94
+ // $check = @call_user_func_array(array('Wpcf_Cake_Validation', $method),
95
+ // array_values($v));
96
+ $check = @call_user_func_array(array(self::$_validation_object, $method),
97
+ array_values($v));
98
+ }
99
+ if (!$check) {
100
+ $check = array();
101
+ $check['error'] = 1;
102
+ }
103
+ // No method available
104
+ } else {
105
+ return array('error' => 1, 'message' => 'No validation method');
106
+ }
107
+
108
+ // Set error
109
+ if (isset($check['error'])) {
110
+ // Don't return error if it's empty but not required
111
+ if ((!empty($value) && $method != 'required' && self::$_is_required)
112
+ || (empty($value) && $method == 'required')) {
113
+ $check['message'] = !empty($v['message']) ? $v['message'] : self::$messages[$method];
114
+ return $check;
115
+ }
116
+ }
117
+ }
118
+
119
+ return true;
120
+ }
121
+
122
+ /**
123
+ * Checks if method is available.
124
+ *
125
+ * @param type $method
126
+ * @return type
127
+ */
128
+ public static function canValidate($method)
129
+ {
130
+ return (is_callable(array('Wpcf_Validate', $method))
131
+ || (isset(self::$_cake_aliases[$method])
132
+ && is_callable(array('Wpcf_Cake_Validation', self::$_cake_aliases[$method])))
133
+ || is_callable(array('Wpcf_Cake_Validation', $method)));
134
+ }
135
+
136
+ /**
137
+ * Checks if method has form data.
138
+ *
139
+ * @param type $method
140
+ * @return type
141
+ */
142
+ public static function hasForm($method)
143
+ {
144
+ return is_callable(array('Wpcf_Validate', $method . '_form'));
145
+ }
146
+
147
+ /**
148
+ * Inits messages.
149
+ */
150
+ private static function _set_messages()
151
+ {
152
+ // Set outside in /admin.php
153
+ self::$messages = wpcf_admin_validation_messages();
154
+ }
155
+
156
+ /**
157
+ * Return method invalid message.
158
+ *
159
+ * @param type $method
160
+ * @return type
161
+ */
162
+ public static function get_message($method)
163
+ {
164
+ if (is_null(self::$messages)) {
165
+ self::_set_messages();
166
+ }
167
+ if (isset(self::$messages[$method])) {
168
+ return self::$messages[$method];
169
+ }
170
+ return null;
171
+ }
172
+
173
+ /**
174
+ * Checks 'required'.
175
+ *
176
+ * @param type $args
177
+ * @param type $value
178
+ * @return type
179
+ */
180
+ public static function required($args, $value)
181
+ {
182
+ if (empty($value) && $value !== 0 && $value !== '0') {
183
+ return array(
184
+ 'error' => 1,
185
+ );
186
+ }
187
+ return true;
188
+ }
189
+
190
+ /**
191
+ * Returns form data.
192
+ *
193
+ * @param type $field
194
+ * @param type $data
195
+ * @return array
196
+ */
197
+ public static function required_form($field, $data = array())
198
+ {
199
+ $form = array();
200
+ $form['required-checkbox'] = array(
201
+ '#type' => 'checkbox',
202
+ '#title' => __('Required', 'wpcf'),
203
+ '#name' => $field['#name'] . '[active]',
204
+ '#default_value' => isset($data['active']) ? 1 : 0,
205
+ '#inline' => true,
206
+ '#suffix' => '<br />',
207
+ );
208
+ $form['required-value'] = array(
209
+ '#type' => 'hidden',
210
+ '#value' => 'true',
211
+ '#name' => $field['#name'] . '[value]',
212
+ );
213
+ $form['required-message'] = self::get_custom_message($field,
214
+ self::get_message('required'), $data);
215
+ return $form;
216
+ }
217
+
218
+ /**
219
+ * Checks 'email'.
220
+ *
221
+ * @param type $args
222
+ * @param type $value
223
+ * @return type
224
+ */
225
+ public static function email($args, $value)
226
+ {
227
+ if (!is_email($value)) {
228
+ return array(
229
+ 'error' => 1,
230
+ );
231
+ }
232
+ return true;
233
+ }
234
+
235
+ /**
236
+ * Checks 'rewriteslug'.
237
+ *
238
+ * @param type $args
239
+ * @param type $value
240
+ * @return type
241
+ */
242
+ public static function rewriteslug($args, $value)
243
+ {
244
+ if (preg_match('#[^a-zA-Z0-9\/\_\-\%]#', $value) === false) {
245
+ return array(
246
+ 'error' => 1,
247
+ );
248
+ }
249
+ return true;
250
+ }
251
+
252
+ /**
253
+ * Returns form data.
254
+ *
255
+ * @param type $field
256
+ * @param type $data
257
+ * @return array
258
+ */
259
+ public static function email_form($field, $data = array())
260
+ {
261
+ $form = array();
262
+ $form['email-checkbox'] = array(
263
+ '#type' => 'checkbox',
264
+ '#title' => __('Email', 'wpcf'),
265
+ '#name' => $field['#name'] . '[active]',
266
+ '#default_value' => isset($data['active']) ? 1 : 0,
267
+ '#inline' => true,
268
+ '#suffix' => '<br />',
269
+ );
270
+
271
+ $form['email-message'] = self::get_custom_message($field,
272
+ self::get_message('email'), $data);
273
+ return $form;
274
+ }
275
+
276
+ /**
277
+ * Returns form data.
278
+ *
279
+ * @param type $field
280
+ * @param type $data
281
+ * @return array
282
+ */
283
+ public static function url_form($field, $data = array())
284
+ {
285
+ $form = array();
286
+ $form['url-checkbox'] = array(
287
+ '#type' => 'checkbox',
288
+ '#title' => 'URL',
289
+ '#name' => $field['#name'] . '[active]',
290
+ '#default_value' => isset($data['active']) ? 1 : 0,
291
+ '#inline' => true,
292
+ '#suffix' => '<br />',
293
+ );
294
+
295
+ $form['url-message'] = self::get_custom_message($field,
296
+ self::get_message('url'), $data);
297
+ return $form;
298
+ }
299
+
300
+ /**
301
+ * Returns form data.
302
+ *
303
+ * @param type $field
304
+ * @param type $data
305
+ * @return array
306
+ */
307
+ public static function date_form($field, $data = array())
308
+ {
309
+ $form = array();
310
+ $form['date-checkbox'] = array(
311
+ '#type' => 'checkbox',
312
+ '#title' => __('Date', 'wpcf'),
313
+ '#name' => $field['#name'] . '[active]',
314
+ '#default_value' => isset($data['active']) ? 1 : 0,
315
+ '#inline' => true,
316
+ '#suffix' => '<br />',
317
+ );
318
+ $form['date-format'] = array(
319
+ '#type' => 'hidden',
320
+ '#value' => 'mdy',
321
+ '#name' => $field['#name'] . '[format]',
322
+ );
323
+ $form['date-pattern'] = array(
324
+ '#type' => 'hidden',
325
+ '#value' => 'check.format',
326
+ '#name' => $field['#name'] . '[pattern]',
327
+ );
328
+ $form['url-message'] = self::get_custom_message($field,
329
+ self::get_message('date'), $data);
330
+ return $form;
331
+ }
332
+
333
+ /**
334
+ * Returns form data.
335
+ *
336
+ * @param type $field
337
+ * @param type $data
338
+ * @return array
339
+ */
340
+ public static function digits_form($field, $data = array())
341
+ {
342
+ $form = array();
343
+ $attributes = array();
344
+ $default_value = isset($data['active']) ? 1 : 0;
345
+ $form['digits-checkbox'] = array(
346
+ '#type' => 'checkbox',
347
+ '#title' => __('Digits', 'wpcf'),
348
+ '#name' => $field['#name'] . '[active]',
349
+ '#default_value' => $default_value,
350
+ '#inline' => true,
351
+ '#suffix' => '<br />',
352
+ '#attributes' => $attributes,
353
+ );
354
+ $form['digits-checkbox'] = self::setForced($form['digits-checkbox'], $field, $data);
355
+
356
+ $form['digits-message'] = self::get_custom_message($field,
357
+ self::get_message('digits'), $data);
358
+ return $form;
359
+ }
360
+
361
+ /**
362
+ * Returns form data.
363
+ *
364
+ * @param type $field
365
+ * @param type $data
366
+ * @return array
367
+ */
368
+ public static function number_form($field, $data = array())
369
+ {
370
+ $form = array();
371
+ $attributes = array();
372
+ $default_value = isset($data['active']) ? 1 : 0;
373
+ $form['number-checkbox'] = array(
374
+ '#type' => 'checkbox',
375
+ '#title' => __('Numeric', 'wpcf'),
376
+ '#name' => $field['#name'] . '[active]',
377
+ '#default_value' => $default_value,
378
+ '#inline' => true,
379
+ '#suffix' => '<br />',
380
+ '#attributes' => $attributes,
381
+ );
382
+ $form['number-checkbox'] = self::setForced($form['number-checkbox'], $field, $data);
383
+
384
+ $form['number-message'] = self::get_custom_message($field,
385
+ self::get_message('number'), $data);
386
+ return $form;
387
+ }
388
+
389
+ public static function setForced($element, $field, $data = array())
390
+ {
391
+ $attributes = array();
392
+ $default_value = isset($data['active']) ? 1 : 0;
393
+ if (!empty($data['method_data']['forced'])) {
394
+ if (!isset($element['#attributes'])) {
395
+ $element['#attributes'] = array();
396
+ }
397
+ $element['#attributes']['readonly'] = 'readonly';
398
+ $element['#attributes']['onclick'] = 'jQuery(this).attr(\'checked\', \'checked\');';
399
+ $element['#default_value'] = 1;
400
+ }
401
+ return $element;
402
+ }
403
+
404
+ /**
405
+ * Returns 'custom message' field.
406
+ *
407
+ * @param type $field
408
+ * @param type $default
409
+ * @param type $data
410
+ * @return type
411
+ */
412
+ public static function get_custom_message($field, $default, $data)
413
+ {
414
+ return array(
415
+ '#type' => 'textfield',
416
+ // '#title' => __('Custom message', 'wpcf'),
417
+ '#name' => $field['#name'] . '[message]',
418
+ '#value' => !empty($data['message']) ? $data['message'] : $default,
419
+ '#inline' => true,
420
+ // '#suffix' => '<br /><br />',
421
+ );
422
+ }
423
+
424
+ }
425
+ }
embedded/toolset/toolset-common/classes/validation-cakephp.php ADDED
@@ -0,0 +1,1139 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Validation Class. Used for validation of model data
5
+ *
6
+ * PHP versions 4 and 5
7
+ *
8
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
9
+ * Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
10
+ *
11
+ * Licensed under The MIT License
12
+ * Redistributions of files must retain the above copyright notice.
13
+ *
14
+ * @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
15
+ * @link http://cakephp.org CakePHP(tm) Project
16
+ * @package cake
17
+ * @subpackage cake.cake.libs
18
+ * @since CakePHP(tm) v 1.2.0.3830
19
+ * @license MIT License (http://www.opensource.org/licenses/mit-license.php)
20
+ */
21
+ //if (!class_exists('Multibyte')) {
22
+ // App::import('Core', 'Multibyte', false);
23
+ //}
24
+ /**
25
+ * Offers different validation methods.
26
+ *
27
+ * @package cake
28
+ * @subpackage cake.cake.libs
29
+ * @since CakePHP v 1.2.0.3830
30
+ */
31
+ //class Validation extends Object {
32
+ if (!class_exists('Wpcf_Cake_Validation')) {
33
+
34
+ class Wpcf_Cake_Validation {
35
+
36
+ /**
37
+ * Set the value of methods $check param.
38
+ *
39
+ * @var string
40
+ * @access public
41
+ */
42
+ var $check = null;
43
+
44
+ /**
45
+ * Set to a valid regular expression in the class methods.
46
+ * Can be set from $regex param also
47
+ *
48
+ * @var string
49
+ * @access public
50
+ */
51
+ var $regex = null;
52
+
53
+ /**
54
+ * Some complex patterns needed in multiple places
55
+ *
56
+ * @var array
57
+ * @access private
58
+ */
59
+ var $__pattern = array(
60
+ 'hostname' => '(?:[a-z0-9][-a-z0-9]*\.)*(?:[a-z0-9][-a-z0-9]{0,62})\.(?:(?:[a-z]{2}\.)?[a-z]{2,4}|museum|travel)'
61
+ );
62
+
63
+ /**
64
+ * Some class methods use a country to determine proper validation.
65
+ * This can be passed to methods in the $country param
66
+ *
67
+ * @var string
68
+ * @access public
69
+ */
70
+ var $country = null;
71
+
72
+ /**
73
+ * Some class methods use a deeper validation when set to true
74
+ *
75
+ * @var string
76
+ * @access public
77
+ */
78
+ var $deep = null;
79
+
80
+ /**
81
+ * Some class methods use the $type param to determine which validation to perfom in the method
82
+ *
83
+ * @var string
84
+ * @access public
85
+ */
86
+ var $type = null;
87
+
88
+ /**
89
+ * Holds an array of errors messages set in this class.
90
+ * These are used for debugging purposes
91
+ *
92
+ * @var array
93
+ * @access public
94
+ */
95
+ var $errors = array();
96
+
97
+ /**
98
+ * Gets a reference to the Validation object instance
99
+ *
100
+ * @return object Validation instance
101
+ * @access public
102
+ * @static
103
+ */
104
+ function &getInstance() {
105
+ static $instance = array();
106
+
107
+ if (!$instance) {
108
+ $instance[0] = new Wpcf_Cake_Validation();
109
+ }
110
+ return $instance[0];
111
+ }
112
+
113
+ /**
114
+ * Checks that a string contains something other than whitespace
115
+ *
116
+ * Returns true if string contains something other than whitespace
117
+ *
118
+ * $check can be passed as an array:
119
+ * array('check' => 'valueToCheck');
120
+ *
121
+ * @param mixed $check Value to check
122
+ * @return boolean Success
123
+ * @access public
124
+ */
125
+ function notEmpty($check) {
126
+ $_this = & Wpcf_Cake_Validation::getInstance();
127
+ $_this->__reset();
128
+ $_this->check = $check;
129
+
130
+ if (is_array($check)) {
131
+ $_this->_extract($check);
132
+ }
133
+
134
+ if (empty($_this->check) && $_this->check != '0') {
135
+ return false;
136
+ }
137
+ $_this->regex = '/[^\s]+/m';
138
+ return $_this->_check();
139
+ }
140
+
141
+ /**
142
+ * Checks that a string contains only integer or letters
143
+ *
144
+ * Returns true if string contains only integer or letters
145
+ *
146
+ * $check can be passed as an array:
147
+ * array('check' => 'valueToCheck');
148
+ *
149
+ * @param mixed $check Value to check
150
+ * @return boolean Success
151
+ * @access public
152
+ */
153
+ function alphaNumeric($check) {
154
+ $_this = & Wpcf_Cake_Validation::getInstance();
155
+ $_this->__reset();
156
+ $_this->check = $check;
157
+
158
+ if (is_array($check)) {
159
+ $_this->_extract($check);
160
+ }
161
+
162
+ if (empty($_this->check) && $_this->check != '0') {
163
+ return false;
164
+ }
165
+ $_this->regex = '/^[a-zA-Z0-9]*$/mu';
166
+ $return = $_this->_check();
167
+
168
+ if (!$return) {
169
+ $_this->regex = '/^[\p{Ll}\p{Lm}\p{Lo}\p{Lt}\p{Lu}\p{Nd}]+$/mu';
170
+ $return = $_this->_check();
171
+ }
172
+
173
+ return $_this->_check();
174
+ }
175
+
176
+ function alphaNumericWhitespaces($check) {
177
+ $_this = & Wpcf_Cake_Validation::getInstance();
178
+ $_this->__reset();
179
+ $_this->check = $check;
180
+
181
+ if (is_array($check)) {
182
+ $_this->_extract($check);
183
+ }
184
+
185
+ if (empty($_this->check) && $_this->check != '0') {
186
+ return false;
187
+ }
188
+ $_this->regex = '/^[a-zA-Z0-9\s\-\_]*$/mu';
189
+ $return = $_this->_check();
190
+
191
+ if (!$return) {
192
+ $_this->regex = '/^[\p{Ll}\p{Lm}\p{Lo}\p{Lt}\p{Lu}\p{Nd}\s\-\_]+$/mu';
193
+ $return = $_this->_check();
194
+ }
195
+
196
+ return $return;
197
+ }
198
+
199
+ /**
200
+ * Checks that a string length is within s specified range.
201
+ * Spaces are included in the character count.
202
+ * Returns true is string matches value min, max, or between min and max,
203
+ *
204
+ * @param string $check Value to check for length
205
+ * @param integer $min Minimum value in range (inclusive)
206
+ * @param integer $max Maximum value in range (inclusive)
207
+ * @return boolean Success
208
+ * @access public
209
+ */
210
+ function between($check, $min, $max) {
211
+ $length = strlen($check);
212
+ return ($length >= $min && $length <= $max);
213
+ }
214
+
215
+ /**
216
+ * Returns true if field is left blank -OR- only whitespace characters are present in it's value
217
+ * Whitespace characters include Space, Tab, Carriage Return, Newline
218
+ *
219
+ * $check can be passed as an array:
220
+ * array('check' => 'valueToCheck');
221
+ *
222
+ * @param mixed $check Value to check
223
+ * @return boolean Success
224
+ * @access public
225
+ */
226
+ function blank($check) {
227
+ $_this = & Wpcf_Cake_Validation::getInstance();
228
+ $_this->__reset();
229
+ $_this->check = $check;
230
+
231
+ if (is_array($check)) {
232
+ $_this->_extract($check);
233
+ }
234
+
235
+ $_this->regex = '/[^\\s]/';
236
+ return !$_this->_check();
237
+ }
238
+
239
+ /**
240
+ * Validation of credit card numbers.
241
+ * Returns true if $check is in the proper credit card format.
242
+ *
243
+ * @param mixed $check credit card number to validate
244
+ * @param mixed $type 'all' may be passed as a sting, defaults to fast which checks format of most major credit cards
245
+ * if an array is used only the values of the array are checked.
246
+ * Example: array('amex', 'bankcard', 'maestro')
247
+ * @param boolean $deep set to true this will check the Luhn algorithm of the credit card.
248
+ * @param string $regex A custom regex can also be passed, this will be used instead of the defined regex values
249
+ * @return boolean Success
250
+ * @access public
251
+ * @see Wpcf_Cake_Validation::_luhn()
252
+ */
253
+ function cc($check, $type = 'fast', $deep = false, $regex = null) {
254
+ $_this = & Wpcf_Cake_Validation::getInstance();
255
+ $_this->__reset();
256
+ $_this->check = $check;
257
+ $_this->type = $type;
258
+ $_this->deep = $deep;
259
+ $_this->regex = $regex;
260
+
261
+ if (is_array($check)) {
262
+ $_this->_extract($check);
263
+ }
264
+ $_this->check = str_replace(array('-', ' '), '', $_this->check);
265
+
266
+ if (strlen($_this->check) < 13) {
267
+ return false;
268
+ }
269
+
270
+ if (!is_null($_this->regex)) {
271
+ if ($_this->_check()) {
272
+ return $_this->_luhn();
273
+ }
274
+ }
275
+ $cards = array(
276
+ 'all' => array(
277
+ 'amex' => '/^3[4|7]\\d{13}$/',
278
+ 'bankcard' => '/^56(10\\d\\d|022[1-5])\\d{10}$/',
279
+ 'diners' => '/^(?:3(0[0-5]|[68]\\d)\\d{11})|(?:5[1-5]\\d{14})$/',
280
+ 'disc' => '/^(?:6011|650\\d)\\d{12}$/',
281
+ 'electron' => '/^(?:417500|4917\\d{2}|4913\\d{2})\\d{10}$/',
282
+ 'enroute' => '/^2(?:014|149)\\d{11}$/',
283
+ 'jcb' => '/^(3\\d{4}|2100|1800)\\d{11}$/',
284
+ 'maestro' => '/^(?:5020|6\\d{3})\\d{12}$/',
285
+ 'mc' => '/^5[1-5]\\d{14}$/',
286
+ 'solo' => '/^(6334[5-9][0-9]|6767[0-9]{2})\\d{10}(\\d{2,3})?$/',
287
+ 'switch' => '/^(?:49(03(0[2-9]|3[5-9])|11(0[1-2]|7[4-9]|8[1-2])|36[0-9]{2})\\d{10}(\\d{2,3})?)|(?:564182\\d{10}(\\d{2,3})?)|(6(3(33[0-4][0-9])|759[0-9]{2})\\d{10}(\\d{2,3})?)$/',
288
+ 'visa' => '/^4\\d{12}(\\d{3})?$/',
289
+ 'voyager' => '/^8699[0-9]{11}$/'
290
+ ),
291
+ 'fast' => '/^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6011[0-9]{12}|3(?:0[0-5]|[68][0-9])[0-9]{11}|3[47][0-9]{13})$/'
292
+ );
293
+
294
+ if (is_array($_this->type)) {
295
+ foreach ($_this->type as $value) {
296
+ $_this->regex = $cards['all'][strtolower($value)];
297
+
298
+ if ($_this->_check()) {
299
+ return $_this->_luhn();
300
+ }
301
+ }
302
+ } elseif ($_this->type == 'all') {
303
+ foreach ($cards['all'] as $value) {
304
+ $_this->regex = $value;
305
+
306
+ if ($_this->_check()) {
307
+ return $_this->_luhn();
308
+ }
309
+ }
310
+ } else {
311
+ $_this->regex = $cards['fast'];
312
+
313
+ if ($_this->_check()) {
314
+ return $_this->_luhn();
315
+ }
316
+ }
317
+ }
318
+
319
+ /**
320
+ * Used to compare 2 numeric values.
321
+ *
322
+ * @param mixed $check1 if string is passed for a string must also be passed for $check2
323
+ * used as an array it must be passed as array('check1' => value, 'operator' => 'value', 'check2' -> value)
324
+ * @param string $operator Can be either a word or operand
325
+ * is greater >, is less <, greater or equal >=
326
+ * less or equal <=, is less <, equal to ==, not equal !=
327
+ * @param integer $check2 only needed if $check1 is a string
328
+ * @return boolean Success
329
+ * @access public
330
+ */
331
+ function comparison($check1, $operator = null, $check2 = null) {
332
+ if (is_array($check1)) {
333
+ extract($check1, EXTR_OVERWRITE);
334
+ }
335
+ $operator = str_replace(array(' ', "\t", "\n", "\r", "\0", "\x0B"), '', strtolower($operator));
336
+
337
+ switch ($operator) {
338
+ case 'isgreater':
339
+ case '>':
340
+ if ($check1 > $check2) {
341
+ return true;
342
+ }
343
+ break;
344
+ case 'isless':
345
+ case '<':
346
+ if ($check1 < $check2) {
347
+ return true;
348
+ }
349
+ break;
350
+ case 'greaterorequal':
351
+ case '>=':
352
+ if ($check1 >= $check2) {
353
+ return true;
354
+ }
355
+ break;
356
+ case 'lessorequal':
357
+ case '<=':
358
+ if ($check1 <= $check2) {
359
+ return true;
360
+ }
361
+ break;
362
+ case 'equalto':
363
+ case '==':
364
+ if ($check1 == $check2) {
365
+ return true;
366
+ }
367
+ break;
368
+ case 'notequal':
369
+ case '!=':
370
+ if ($check1 != $check2) {
371
+ return true;
372
+ }
373
+ break;
374
+ default:
375
+ $_this = & Wpcf_Cake_Validation::getInstance();
376
+ $_this->errors[] = __('You must define the $operator parameter for Wpcf_Cake_Validation::comparison()', 'wpcf');
377
+ break;
378
+ }
379
+ return false;
380
+ }
381
+
382
+ /**
383
+ * Used when a custom regular expression is needed.
384
+ *
385
+ * @param mixed $check When used as a string, $regex must also be a valid regular expression.
386
+ * As and array: array('check' => value, 'regex' => 'valid regular expression')
387
+ * @param string $regex If $check is passed as a string, $regex must also be set to valid regular expression
388
+ * @return boolean Success
389
+ * @access public
390
+ */
391
+ function custom($check, $regex = null) {
392
+ $_this = & Wpcf_Cake_Validation::getInstance();
393
+ $_this->__reset();
394
+ $_this->check = $check;
395
+ $_this->regex = $regex;
396
+ if (is_array($check)) {
397
+ $_this->_extract($check);
398
+ }
399
+ if ($_this->regex === null) {
400
+ $_this->errors[] = __('You must define a regular expression for Wpcf_Cake_Validation::custom()', 'wpcf');
401
+ return false;
402
+ }
403
+ return $_this->_check();
404
+ }
405
+
406
+ /**
407
+ * Date validation, determines if the string passed is a valid date.
408
+ * keys that expect full month, day and year will validate leap years
409
+ *
410
+ * @param string $check a valid date string
411
+ * @param mixed $format Use a string or an array of the keys below. Arrays should be passed as array('dmy', 'mdy', etc)
412
+ * Keys: dmy 27-12-2006 or 27-12-06 separators can be a space, period, dash, forward slash
413
+ * mdy 12-27-2006 or 12-27-06 separators can be a space, period, dash, forward slash
414
+ * ymd 2006-12-27 or 06-12-27 separators can be a space, period, dash, forward slash
415
+ * dMy 27 December 2006 or 27 Dec 2006
416
+ * Mdy December 27, 2006 or Dec 27, 2006 comma is optional
417
+ * My December 2006 or Dec 2006
418
+ * my 12/2006 separators can be a space, period, dash, forward slash
419
+ * @param string $regex If a custom regular expression is used this is the only validation that will occur.
420
+ * @return boolean Success
421
+ * @access public
422
+ */
423
+ function date($check, $format = 'ymd', $regex = null) {
424
+
425
+ $date_format = wpcf_get_date_format();
426
+ $cake_date_formats = array(
427
+ 'F j, Y' => 'Mdy',
428
+ 'Y/m/d' => 'ymd',
429
+ 'm/d/Y' => 'mdy',
430
+ 'd/m/Y' => 'dmy',
431
+ 'd/m/y' => 'dmy',
432
+ );
433
+
434
+ $format = $cake_date_formats[$date_format];
435
+
436
+ $_this = & Wpcf_Cake_Validation::getInstance();
437
+ $_this->__reset();
438
+ $_this->check = $check;
439
+ $_this->regex = $regex;
440
+
441
+ if (!is_null($_this->regex)) {
442
+ return $_this->_check();
443
+ }
444
+
445
+ $regex['dmy'] = '%^(?:(?:31(\\/|-|\\.|\\x20)(?:0?[13578]|1[02]))\\1|(?:(?:29|30)(\\/|-|\\.|\\x20)(?:0?[1,3-9]|1[0-2])\\2))(?:(?:1[6-9]|[2-9]\\d)?\\d{2})$|^(?:29(\\/|-|\\.|\\x20)0?2\\3(?:(?:(?:1[6-9]|[2-9]\\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\\d|2[0-8])(\\/|-|\\.|\\x20)(?:(?:0?[1-9])|(?:1[0-2]))\\4(?:(?:1[6-9]|[2-9]\\d)?\\d{2})$%';
446
+ $regex['mdy'] = '%^(?:(?:(?:0?[13578]|1[02])(\\/|-|\\.|\\x20)31)\\1|(?:(?:0?[13-9]|1[0-2])(\\/|-|\\.|\\x20)(?:29|30)\\2))(?:(?:1[6-9]|[2-9]\\d)?\\d{2})$|^(?:0?2(\\/|-|\\.|\\x20)29\\3(?:(?:(?:1[6-9]|[2-9]\\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:(?:0?[1-9])|(?:1[0-2]))(\\/|-|\\.|\\x20)(?:0?[1-9]|1\\d|2[0-8])\\4(?:(?:1[6-9]|[2-9]\\d)?\\d{2})$%';
447
+ $regex['ymd'] = '%^(?:(?:(?:(?:(?:1[6-9]|[2-9]\\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))(\\/|-|\\.|\\x20)(?:0?2\\1(?:29)))|(?:(?:(?:1[6-9]|[2-9]\\d)?\\d{2})(\\/|-|\\.|\\x20)(?:(?:(?:0?[13578]|1[02])\\2(?:31))|(?:(?:0?[1,3-9]|1[0-2])\\2(29|30))|(?:(?:0?[1-9])|(?:1[0-2]))\\2(?:0?[1-9]|1\\d|2[0-8]))))$%';
448
+ $regex['dMy'] = '/^((31(?!\\ (Feb(ruary)?|Apr(il)?|June?|(Sep(?=\\b|t)t?|Nov)(ember)?)))|((30|29)(?!\\ Feb(ruary)?))|(29(?=\\ Feb(ruary)?\\ (((1[6-9]|[2-9]\\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)))))|(0?[1-9])|1\\d|2[0-8])\\ (Jan(uary)?|Feb(ruary)?|Ma(r(ch)?|y)|Apr(il)?|Ju((ly?)|(ne?))|Aug(ust)?|Oct(ober)?|(Sep(?=\\b|t)t?|Nov|Dec)(ember)?)\\ ((1[6-9]|[2-9]\\d)\\d{2})$/';
449
+ $regex['Mdy'] = '/^(?:(((Jan(uary)?|Ma(r(ch)?|y)|Jul(y)?|Aug(ust)?|Oct(ober)?|Dec(ember)?)\\ 31)|((Jan(uary)?|Ma(r(ch)?|y)|Apr(il)?|Ju((ly?)|(ne?))|Aug(ust)?|Oct(ober)?|(Sept|Nov|Dec)(ember)?)\\ (0?[1-9]|([12]\\d)|30))|(Feb(ruary)?\\ (0?[1-9]|1\\d|2[0-8]|(29(?=,?\\ ((1[6-9]|[2-9]\\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)))))))\\,?\\ ((1[6-9]|[2-9]\\d)\\d{2}))$/';
450
+ $regex['My'] = '%^(Jan(uary)?|Feb(ruary)?|Ma(r(ch)?|y)|Apr(il)?|Ju((ly?)|(ne?))|Aug(ust)?|Oct(ober)?|(Sep(?=\\b|t)t?|Nov|Dec)(ember)?)[ /]((1[6-9]|[2-9]\\d)\\d{2})$%';
451
+ $regex['my'] = '%^(((0[123456789]|10|11|12)([- /.])(([1][9][0-9][0-9])|([2][0-9][0-9][0-9]))))$%';
452
+
453
+ $format = (is_array($format)) ? array_values($format) : array($format);
454
+ foreach ($format as $key) {
455
+ $_this->regex = $regex[$key];
456
+
457
+ if ($_this->_check() === true) {
458
+ return true;
459
+ }
460
+ }
461
+ return false;
462
+ }
463
+
464
+ /**
465
+ * Time validation, determines if the string passed is a valid time.
466
+ * Validates time as 24hr (HH:MM) or am/pm ([H]H:MM[a|p]m)
467
+ * Does not allow/validate seconds.
468
+ *
469
+ * @param string $check a valid time string
470
+ * @return boolean Success
471
+ * @access public
472
+ */
473
+ function time($check) {
474
+ $_this = & Wpcf_Cake_Validation::getInstance();
475
+ $_this->__reset();
476
+ $_this->check = $check;
477
+ $_this->regex = '%^((0?[1-9]|1[012])(:[0-5]\d){0,2}([AP]M|[ap]m))$|^([01]\d|2[0-3])(:[0-5]\d){0,2}$%';
478
+ return $_this->_check();
479
+ }
480
+
481
+ /**
482
+ * Boolean validation, determines if value passed is a boolean integer or true/false.
483
+ *
484
+ * @param string $check a valid boolean
485
+ * @return boolean Success
486
+ * @access public
487
+ */
488
+ function boolean($check) {
489
+ $booleanList = array(0, 1, '0', '1', true, false);
490
+ return in_array($check, $booleanList, true);
491
+ }
492
+
493
+ /**
494
+ * Checks that a value is a valid decimal. If $places is null, the $check is allowed to be a scientific float
495
+ * If no decimal point is found a false will be returned. Both the sign and exponent are optional.
496
+ *
497
+ * @param integer $check The value the test for decimal
498
+ * @param integer $places if set $check value must have exactly $places after the decimal point
499
+ * @param string $regex If a custom regular expression is used this is the only validation that will occur.
500
+ * @return boolean Success
501
+ * @access public
502
+ */
503
+ function decimal($check, $places = null, $regex = null) {
504
+ $_this = & Wpcf_Cake_Validation::getInstance();
505
+ $_this->__reset();
506
+ $_this->regex = $regex;
507
+ $_this->check = $check;
508
+
509
+ if (is_null($_this->regex)) {
510
+ if (is_null($places)) {
511
+ $_this->regex = '/^[-+]?[0-9]*\\.{1}[0-9]+(?:[eE][-+]?[0-9]+)?$/';
512
+ } else {
513
+ $_this->regex = '/^[-+]?[0-9]*\\.{1}[0-9]{' . $places . '}$/';
514
+ }
515
+ }
516
+ return $_this->_check();
517
+ }
518
+
519
+ /**
520
+ * Validates for an email address.
521
+ *
522
+ * @param string $check Value to check
523
+ * @param boolean $deep Perform a deeper validation (if true), by also checking availability of host
524
+ * @param string $regex Regex to use (if none it will use built in regex)
525
+ * @return boolean Success
526
+ * @access public
527
+ */
528
+ function email($check, $deep = false, $regex = null) {
529
+ $_this = & Wpcf_Cake_Validation::getInstance();
530
+ $_this->__reset();
531
+ $_this->check = $check;
532
+ $_this->regex = $regex;
533
+ $_this->deep = $deep;
534
+
535
+ if (is_array($check)) {
536
+ $_this->_extract($check);
537
+ }
538
+
539
+ if (is_null($_this->regex)) {
540
+ $_this->regex = '/^[a-z0-9!#$%&\'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&\'*+\/=?^_`{|}~-]+)*@' . $_this->__pattern['hostname'] . '$/i';
541
+ }
542
+ $return = $_this->_check();
543
+
544
+ if ($_this->deep === false || $_this->deep === null) {
545
+ return $return;
546
+ }
547
+
548
+ if ($return === true && preg_match('/@(' . $_this->__pattern['hostname'] . ')$/i', $_this->check, $regs)) {
549
+ if (function_exists('getmxrr') && getmxrr($regs[1], $mxhosts)) {
550
+ return true;
551
+ }
552
+ if (function_exists('checkdnsrr') && checkdnsrr($regs[1], 'MX')) {
553
+ return true;
554
+ }
555
+ return is_array(gethostbynamel($regs[1]));
556
+ }
557
+ return false;
558
+ }
559
+
560
+ /**
561
+ * Check that value is exactly $comparedTo.
562
+ *
563
+ * @param mixed $check Value to check
564
+ * @param mixed $comparedTo Value to compare
565
+ * @return boolean Success
566
+ * @access public
567
+ */
568
+ function equalTo($check, $comparedTo) {
569
+ return ($check === $comparedTo);
570
+ }
571
+
572
+ /**
573
+ * Check that value has a valid file extension.
574
+ *
575
+ * @param mixed $check Value to check
576
+ * @param array $extensions file extenstions to allow
577
+ * @return boolean Success
578
+ * @access public
579
+ */
580
+ function extension($check, $extensions = array('gif', 'jpeg', 'png', 'jpg')) {
581
+ if (is_array($check)) {
582
+ return Wpcf_Cake_Validation::extension(array_shift($check), $extensions);
583
+ }
584
+ $extension = strtolower(array_pop(explode('.', $check)));
585
+ foreach ($extensions as $value) {
586
+ if ($extension == strtolower($value)) {
587
+ return true;
588
+ }
589
+ }
590
+ return false;
591
+ }
592
+
593
+ /**
594
+ * Validation of an IP address.
595
+ *
596
+ * Valid IP version strings for type restriction are:
597
+ * - both: Check both IPv4 and IPv6, return true if the supplied address matches either version
598
+ * - IPv4: Version 4 (Eg: 127.0.0.1, 192.168.10.123, 203.211.24.8)
599
+ * - IPv6: Version 6 (Eg: ::1, 2001:0db8::1428:57ab)
600
+ *
601
+ * @param string $check The string to test.
602
+ * @param string $type The IP Version to test against
603
+ * @return boolean Success
604
+ * @access public
605
+ */
606
+ function ip($check, $type = 'both') {
607
+ $_this = & Wpcf_Cake_Validation::getInstance();
608
+ $success = false;
609
+ $type = strtolower($type);
610
+ if ($type === 'ipv4' || $type === 'both') {
611
+ $success |= $_this->_ipv4($check);
612
+ }
613
+ if ($type === 'ipv6' || $type === 'both') {
614
+ $success |= $_this->_ipv6($check);
615
+ }
616
+ return $success;
617
+ }
618
+
619
+ /**
620
+ * Validation of IPv4 addresses.
621
+ *
622
+ * @param string $check IP Address to test
623
+ * @return boolean Success
624
+ * @access protected
625
+ */
626
+ function _ipv4($check) {
627
+ if (function_exists('filter_var')) {
628
+ return filter_var($check, FILTER_VALIDATE_IP, array('flags' => FILTER_FLAG_IPV4)) !== false;
629
+ }
630
+ $this->__populateIp();
631
+ $this->check = $check;
632
+ $this->regex = '/^' . $this->__pattern['IPv4'] . '$/';
633
+ return $this->_check();
634
+ }
635
+
636
+ /**
637
+ * Validation of IPv6 addresses.
638
+ *
639
+ * @param string $check IP Address to test
640
+ * @return boolean Success
641
+ * @access protected
642
+ */
643
+ function _ipv6($check) {
644
+ if (function_exists('filter_var')) {
645
+ return filter_var($check, FILTER_VALIDATE_IP, array('flags' => FILTER_FLAG_IPV6)) !== false;
646
+ }
647
+ $this->__populateIp();
648
+ $this->check = $check;
649
+ $this->regex = '/^' . $this->__pattern['IPv6'] . '$/';
650
+ return $this->_check();
651
+ }
652
+
653
+ /**
654
+ * Checks whether the length of a string is greater or equal to a minimal length.
655
+ *
656
+ * @param string $check The string to test
657
+ * @param integer $min The minimal string length
658
+ * @return boolean Success
659
+ * @access public
660
+ */
661
+ function minLength($check, $min) {
662
+ $length = strlen($check);
663
+ return ($length >= $min);
664
+ }
665
+
666
+ /**
667
+ * Checks whether the length of a string is smaller or equal to a maximal length..
668
+ *
669
+ * @param string $check The string to test
670
+ * @param integer $max The maximal string length
671
+ * @return boolean Success
672
+ * @access public
673
+ */
674
+ function maxLength($check, $max) {
675
+ $length = strlen($check);
676
+ return ($length <= $max);
677
+ }
678
+
679
+ /**
680
+ * Checks that a value is a monetary amount.
681
+ *
682
+ * @param string $check Value to check
683
+ * @param string $symbolPosition Where symbol is located (left/right)
684
+ * @return boolean Success
685
+ * @access public
686
+ */
687
+ function money($check, $symbolPosition = 'left') {
688
+ $_this = & Wpcf_Cake_Validation::getInstance();
689
+ $_this->check = $check;
690
+
691
+ if ($symbolPosition == 'right') {
692
+ $_this->regex = '/^(?!0,?\d)(?:\d{1,3}(?:([, .])\d{3})?(?:\1\d{3})*|(?:\d+))((?!\1)[,.]\d{2})?(?<!\x{00a2})\p{Sc}?$/u';
693
+ } else {
694
+ $_this->regex = '/^(?!\x{00a2})\p{Sc}?(?!0,?\d)(?:\d{1,3}(?:([, .])\d{3})?(?:\1\d{3})*|(?:\d+))((?!\1)[,.]\d{2})?$/u';
695
+ }
696
+ return $_this->_check();
697
+ }
698
+
699
+ /**
700
+ * Validate a multiple select.
701
+ *
702
+ * Valid Options
703
+ *
704
+ * - in => provide a list of choices that selections must be made from
705
+ * - max => maximun number of non-zero choices that can be made
706
+ * - min => minimum number of non-zero choices that can be made
707
+ *
708
+ * @param mixed $check Value to check
709
+ * @param mixed $options Options for the check.
710
+ * @return boolean Success
711
+ * @access public
712
+ */
713
+ function multiple($check, $options = array()) {
714
+ $defaults = array('in' => null, 'max' => null, 'min' => null);
715
+ $options = array_merge($defaults, $options);
716
+ $check = array_filter((array) $check);
717
+ if (empty($check)) {
718
+ return false;
719
+ }
720
+ if ($options['max'] && count($check) > $options['max']) {
721
+ return false;
722
+ }
723
+ if ($options['min'] && count($check) < $options['min']) {
724
+ return false;
725
+ }
726
+ if ($options['in'] && is_array($options['in'])) {
727
+ foreach ($check as $val) {
728
+ if (!in_array($val, $options['in'])) {
729
+ return false;
730
+ }
731
+ }
732
+ }
733
+ return true;
734
+ }
735
+
736
+ /**
737
+ * Checks if a value is numeric.
738
+ *
739
+ * @param string $check Value to check
740
+ * @return boolean Succcess
741
+ * @access public
742
+ */
743
+ function numeric($check) {
744
+ return is_numeric($check);
745
+ }
746
+
747
+ /**
748
+ * Checks if a value is integer.
749
+ *
750
+ * @param string $check Value to check
751
+ * @return boolean Succcess
752
+ * @access public
753
+ */
754
+ function integer($check) {
755
+ return is_int(intval($check));
756
+ }
757
+
758
+ /**
759
+ * Checks if a value is valid hexadecimal.
760
+ *
761
+ * @param string $check Value to check
762
+ * @return boolean Succcess
763
+ * @access public
764
+ */
765
+ function hexadecimal($check) {
766
+ return preg_match('/^#[a-f0-9]{6}$/i', $check);
767
+ }
768
+
769
+ /**
770
+ * Check that a value is a valid phone number.
771
+ *
772
+ * @param mixed $check Value to check (string or array)
773
+ * @param string $regex Regular expression to use
774
+ * @param string $country Country code (defaults to 'all')
775
+ * @return boolean Success
776
+ * @access public
777
+ */
778
+ function phone($check, $regex = null, $country = 'all') {
779
+ $_this = & Wpcf_Cake_Validation::getInstance();
780
+ $_this->check = $check;
781
+ $_this->regex = $regex;
782
+ $_this->country = $country;
783
+ if (is_array($check)) {
784
+ $_this->_extract($check);
785
+ }
786
+
787
+ if (is_null($_this->regex)) {
788
+ switch ($_this->country) {
789
+ case 'us':
790
+ case 'all':
791
+ case 'can':
792
+ // includes all NANPA members. see http://en.wikipedia.org/wiki/North_American_Numbering_Plan#List_of_NANPA_countries_and_territories
793
+ $_this->regex = '/^(?:\+?1)?[-. ]?\\(?[2-9][0-8][0-9]\\)?[-. ]?[2-9][0-9]{2}[-. ]?[0-9]{4}$/';
794
+ break;
795
+ }
796
+ }
797
+ if (empty($_this->regex)) {
798
+ return $_this->_pass('phone', $check, $country);
799
+ }
800
+ return $_this->_check();
801
+ }
802
+
803
+ /**
804
+ * Checks that a given value is a valid postal code.
805
+ *
806
+ * @param mixed $check Value to check
807
+ * @param string $regex Regular expression to use
808
+ * @param string $country Country to use for formatting
809
+ * @return boolean Success
810
+ * @access public
811
+ */
812
+ function postal($check, $regex = null, $country = null) {
813
+ $_this = & Wpcf_Cake_Validation::getInstance();
814
+ $_this->check = $check;
815
+ $_this->regex = $regex;
816
+ $_this->country = $country;
817
+ if (is_array($check)) {
818
+ $_this->_extract($check);
819
+ }
820
+ if (empty($country)) {
821
+ $_this->country = 'us';
822
+ }
823
+
824
+ if (is_null($_this->regex)) {
825
+ switch ($_this->country) {
826
+ case 'uk':
827
+ $_this->regex = '/\\A\\b[A-Z]{1,2}[0-9][A-Z0-9]? [0-9][ABD-HJLNP-UW-Z]{2}\\b\\z/i';
828
+ break;
829
+ case 'ca':
830
+ $_this->regex = '/\\A\\b[ABCEGHJKLMNPRSTVXY][0-9][A-Z] ?[0-9][A-Z][0-9]\\b\\z/i';
831
+ break;
832
+ case 'it':
833
+ case 'de':
834
+ $_this->regex = '/^[0-9]{5}$/i';
835
+ break;
836
+ case 'be':
837
+ $_this->regex = '/^[1-9]{1}[0-9]{3}$/i';
838
+ break;
839
+ case 'us':
840
+ $_this->regex = '/\\A\\b[0-9]{5}(?:-[0-9]{4})?\\b\\z/i';
841
+ break;
842
+ }
843
+ }
844
+ if (empty($_this->regex)) {
845
+ return $_this->_pass('postal', $check, $country);
846
+ }
847
+ return $_this->_check();
848
+ }
849
+
850
+ /**
851
+ * Validate that a number is in specified range.
852
+ * if $lower and $upper are not set, will return true if
853
+ * $check is a legal finite on this platform
854
+ *
855
+ * @param string $check Value to check
856
+ * @param integer $lower Lower limit
857
+ * @param integer $upper Upper limit
858
+ * @return boolean Success
859
+ * @access public
860
+ */
861
+ function range($check, $lower = null, $upper = null) {
862
+ if (!is_numeric($check)) {
863
+ return false;
864
+ }
865
+ if (isset($lower) && isset($upper)) {
866
+ return ($check > $lower && $check < $upper);
867
+ }
868
+ return is_finite($check);
869
+ }
870
+
871
+ /**
872
+ * Checks that a value is a valid Social Security Number.
873
+ *
874
+ * @param mixed $check Value to check
875
+ * @param string $regex Regular expression to use
876
+ * @param string $country Country
877
+ * @return boolean Success
878
+ * @access public
879
+ */
880
+ function ssn($check, $regex = null, $country = null) {
881
+ $_this = & Wpcf_Cake_Validation::getInstance();
882
+ $_this->check = $check;
883
+ $_this->regex = $regex;
884
+ $_this->country = $country;
885
+ if (is_array($check)) {
886
+ $_this->_extract($check);
887
+ }
888
+
889
+ if (is_null($_this->regex)) {
890
+ switch ($_this->country) {
891
+ case 'dk':
892
+ $_this->regex = '/\\A\\b[0-9]{6}-[0-9]{4}\\b\\z/i';
893
+ break;
894
+ case 'nl':
895
+ $_this->regex = '/\\A\\b[0-9]{9}\\b\\z/i';
896
+ break;
897
+ case 'us':
898
+ $_this->regex = '/\\A\\b[0-9]{3}-[0-9]{2}-[0-9]{4}\\b\\z/i';
899
+ break;
900
+ }
901
+ }
902
+ if (empty($_this->regex)) {
903
+ return $_this->_pass('ssn', $check, $country);
904
+ }
905
+ return $_this->_check();
906
+ }
907
+
908
+ /**
909
+ * Checks that a value is a valid uuid - http://tools.ietf.org/html/rfc4122
910
+ *
911
+ * @param string $check Value to check
912
+ * @return boolean Success
913
+ * @access public
914
+ */
915
+ function uuid($check) {
916
+ $_this = & Wpcf_Cake_Validation::getInstance();
917
+ $_this->check = $check;
918
+ $_this->regex = '/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i';
919
+ return $_this->_check();
920
+ }
921
+
922
+ /**
923
+ * Checks that a value is a valid URL according to http://www.w3.org/Addressing/URL/url-spec.txt
924
+ *
925
+ * The regex checks for the following component parts:
926
+ *
927
+ * - a valid, optional, scheme
928
+ * - a valid ip address OR
929
+ * a valid domain name as defined by section 2.3.1 of http://www.ietf.org/rfc/rfc1035.txt
930
+ * with an optional port number
931
+ * - an optional valid path
932
+ * - an optional query string (get parameters)
933
+ * - an optional fragment (anchor tag)
934
+ *
935
+ * @param string $check Value to check
936
+ * @param boolean $strict Require URL to be prefixed by a valid scheme (one of http(s)/ftp(s)/file/news/gopher)
937
+ * @return boolean Success
938
+ * @access public
939
+ */
940
+ function url($check, $strict = false) {
941
+ $_this = & Wpcf_Cake_Validation::getInstance();
942
+ $_this->__populateIp();
943
+ $_this->check = $check;
944
+ $validChars = '([' . preg_quote('!"$&\'()*+,-.@_:;=~[]') . '\/0-9a-z\p{L}\p{N}]|(%[0-9a-f]{2}))';
945
+ $_this->regex = '/^(?:(?:https?|ftps?|file|news|gopher):\/\/)' . (!empty($strict) ? '' : '?') .
946
+ '(?:' . $_this->__pattern['IPv4'] . '|\[' . $_this->__pattern['IPv6'] . '\]|' . $_this->__pattern['hostname'] . ')' .
947
+ '(?::[1-9][0-9]{0,4})?' .
948
+ '(?:\/?|\/' . $validChars . '*)?' .
949
+ '(?:\?' . $validChars . '*)?' .
950
+ '(?:#' . $validChars . '*)?$/iu';
951
+ return $_this->_check();
952
+ }
953
+
954
+ /**
955
+ * Checks if a value is in a given list.
956
+ *
957
+ * @param string $check Value to check
958
+ * @param array $list List to check against
959
+ * @return boolean Succcess
960
+ * @access public
961
+ */
962
+ function inList($check, $list) {
963
+ return in_array($check, $list);
964
+ }
965
+
966
+ /**
967
+ * Runs an user-defined validation.
968
+ *
969
+ * @param mixed $check value that will be validated in user-defined methods.
970
+ * @param object $object class that holds validation method
971
+ * @param string $method class method name for validation to run
972
+ * @param array $args arguments to send to method
973
+ * @return mixed user-defined class class method returns
974
+ * @access public
975
+ */
976
+ function userDefined($check, $object, $method, $args = null) {
977
+ return call_user_func_array(array(&$object, $method), array($check, $args));
978
+ }
979
+
980
+ function noSpecialChars($check) {
981
+ return preg_match('#[^a-zA-Z0-9\s\_\-]#', $check) ? false : true;
982
+ }
983
+
984
+ function rewriteSlug($check) {
985
+ return preg_match('#[^a-zA-Z0-9\s\_\-\%]#', $check) ? false : true;
986
+ }
987
+
988
+ /**
989
+ * Attempts to pass unhandled Validation locales to a class starting with $classPrefix
990
+ * and ending with Validation. For example $classPrefix = 'nl', the class would be
991
+ * `NlValidation`.
992
+ *
993
+ * @param string $method The method to call on the other class.
994
+ * @param mixed $check The value to check or an array of parameters for the method to be called.
995
+ * @param string $classPrefix The prefix for the class to do the validation.
996
+ * @return mixed Return of Passed method, false on failure
997
+ * @access protected
998
+ * */
999
+ function _pass($method, $check, $classPrefix) {
1000
+ $className = ucwords($classPrefix) . 'Validation';
1001
+ if (!class_exists($className)) {
1002
+ trigger_error(sprintf(__('Could not find %s class, unable to complete validation.', true), $className), E_USER_WARNING);
1003
+ return false;
1004
+ }
1005
+ if (!is_callable(array($className, $method))) {
1006
+ trigger_error(sprintf(__('Method %s does not exist on %s unable to complete validation.', true), $method, $className), E_USER_WARNING);
1007
+ return false;
1008
+ }
1009
+ $check = (array) $check;
1010
+ return call_user_func_array(array($className, $method), $check);
1011
+ }
1012
+
1013
+ /**
1014
+ * Runs a regular expression match.
1015
+ *
1016
+ * @return boolean Success of match
1017
+ * @access protected
1018
+ */
1019
+ function _check() {
1020
+ $_this = & Wpcf_Cake_Validation::getInstance();
1021
+ if (preg_match($_this->regex, $_this->check)) {
1022
+ $_this->error[] = false;
1023
+ return true;
1024
+ } else {
1025
+ $_this->error[] = true;
1026
+ return false;
1027
+ }
1028
+ }
1029
+
1030
+ /**
1031
+ * Get the values to use when value sent to validation method is
1032
+ * an array.
1033
+ *
1034
+ * @param array $params Parameters sent to validation method
1035
+ * @return void
1036
+ * @access protected
1037
+ */
1038
+ function _extract($params) {
1039
+ $_this = & Wpcf_Cake_Validation::getInstance();
1040
+ extract($params, EXTR_OVERWRITE);
1041
+
1042
+ if (isset($check)) {
1043
+ $_this->check = $check;
1044
+ }
1045
+ if (isset($regex)) {
1046
+ $_this->regex = $regex;
1047
+ }
1048
+ if (isset($country)) {
1049
+ $_this->country = strtolower($country);
1050
+ }
1051
+ if (isset($deep)) {
1052
+ $_this->deep = $deep;
1053
+ }
1054
+ if (isset($type)) {
1055
+ $_this->type = $type;
1056
+ }
1057
+ }
1058
+
1059
+ /**
1060
+ * Luhn algorithm
1061
+ *
1062
+ * @see http://en.wikipedia.org/wiki/Luhn_algorithm
1063
+ * @return boolean Success
1064
+ * @access protected
1065
+ */
1066
+ function _luhn() {
1067
+ $_this = & Wpcf_Cake_Validation::getInstance();
1068
+ if ($_this->deep !== true) {
1069
+ return true;
1070
+ }
1071
+ if ($_this->check == 0) {
1072
+ return false;
1073
+ }
1074
+ $sum = 0;
1075
+ $length = strlen($_this->check);
1076
+
1077
+ for ($position = 1 - ($length % 2); $position < $length; $position += 2) {
1078
+ $sum += $_this->check[$position];
1079
+ }
1080
+
1081
+ for ($position = ($length % 2); $position < $length; $position += 2) {
1082
+ $number = $_this->check[$position] * 2;
1083
+ $sum += ($number < 10) ? $number : $number - 9;
1084
+ }
1085
+
1086
+ return ($sum % 10 == 0);
1087
+ }
1088
+
1089
+ /*
1090
+ * Lazily popualate the IP address patterns used for validations
1091
+ *
1092
+ * @return void
1093
+ * @access private
1094
+ */
1095
+
1096
+ function __populateIp() {
1097
+ if (!isset($this->__pattern['IPv6'])) {
1098
+ $pattern = '((([0-9A-Fa-f]{1,4}:){7}(([0-9A-Fa-f]{1,4})|:))|(([0-9A-Fa-f]{1,4}:){6}';
1099
+ $pattern .= '(:|((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})';
1100
+ $pattern .= '|(:[0-9A-Fa-f]{1,4})))|(([0-9A-Fa-f]{1,4}:){5}((:((25[0-5]|2[0-4]\d|[01]?\d{1,2})';
1101
+ $pattern .= '(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(([0-9A-Fa-f]{1,4}:)';
1102
+ $pattern .= '{4}(:[0-9A-Fa-f]{1,4}){0,1}((:((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2}))';
1103
+ $pattern .= '{3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(([0-9A-Fa-f]{1,4}:){3}(:[0-9A-Fa-f]{1,4}){0,2}';
1104
+ $pattern .= '((:((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|';
1105
+ $pattern .= '((:[0-9A-Fa-f]{1,4}){1,2})))|(([0-9A-Fa-f]{1,4}:){2}(:[0-9A-Fa-f]{1,4}){0,3}';
1106
+ $pattern .= '((:((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2}))';
1107
+ $pattern .= '{3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(([0-9A-Fa-f]{1,4}:)(:[0-9A-Fa-f]{1,4})';
1108
+ $pattern .= '{0,4}((:((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)';
1109
+ $pattern .= '|((:[0-9A-Fa-f]{1,4}){1,2})))|(:(:[0-9A-Fa-f]{1,4}){0,5}((:((25[0-5]|2[0-4]';
1110
+ $pattern .= '\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4})';
1111
+ $pattern .= '{1,2})))|(((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})))(%.+)?';
1112
+
1113
+ $this->__pattern['IPv6'] = $pattern;
1114
+ }
1115
+ if (!isset($this->__pattern['IPv4'])) {
1116
+ $pattern = '(?:(?:25[0-5]|2[0-4][0-9]|(?:(?:1[0-9])?|[1-9]?)[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|(?:(?:1[0-9])?|[1-9]?)[0-9])';
1117
+ $this->__pattern['IPv4'] = $pattern;
1118
+ }
1119
+ }
1120
+
1121
+ /**
1122
+ * Reset internal variables for another validation run.
1123
+ *
1124
+ * @return void
1125
+ * @access private
1126
+ */
1127
+ function __reset() {
1128
+ $this->check = null;
1129
+ $this->regex = null;
1130
+ $this->country = null;
1131
+ $this->deep = null;
1132
+ $this->type = null;
1133
+ $this->error = array();
1134
+ $this->errors = array();
1135
+ }
1136
+
1137
+ }
1138
+
1139
+ }
embedded/toolset/toolset-common/composer.json ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "toolset/toolset-common",
3
+ "description": "A set of libraries for Toolset Plugins",
4
+ "keywords": ["visual-editor", "types-fields", "utils", "models"],
5
+ "homepage": "https://git.onthegosystems.com/toolset/toolset-common",
6
+ "type": "library",
7
+ "license": "GPL-2.0",
8
+ "authors": [
9
+ {
10
+ "name": "Bruce Pearson, Juan de Paco, Riccardo Strobbia, Marcin Pietrzack, Francesco Livolsi",
11
+ "email": "riccardo.s@icanlocalize.com",
12
+ "homepage": "http://www.wp-types.com"
13
+ }
14
+ ],
15
+ "require": {
16
+ "php": ">=5.2.0"
17
+ },
18
+ "require-dev": {
19
+ "phpunit/phpunit": "~4.5"
20
+ },
21
+ "extra": {
22
+ "branch-alias": {
23
+ "dev-master": "1.6.x-dev",
24
+ "dev-develop": "1.6.x-dev"
25
+ }
26
+ },
27
+ "scripts": {
28
+ "test": "phpunit"
29
+ }
30
+ }
embedded/toolset/toolset-common/debug/debug-information.php ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * produce debug information
5
+ *
6
+ *
7
+ */
8
+
9
+ include_once dirname(__FILE__) . '/functions_debug_information.php';
10
+ $debug_information = new ICL_Debug_Information();
11
+ $debug_data = $debug_information->get_debug_info();
12
+ ?>
13
+ <div class="wrap">
14
+ <h2><?php _e('Debug information', 'wpv-views');?></h2>
15
+ <div id="poststuff">
16
+ <div id="toolset-debug-info" class="postbox">
17
+ <h3 class="handle"><span><?php _e( 'Debug information', 'wpv-views' ) ?></span></h3>
18
+ <div class="inside">
19
+ <p><?php _e( 'This information allows our support team to see the versions of WordPress, plugins and theme on your site. Provide this information if requested in our support forum. No passwords or other confidential information is included.', 'sitepress', 'wpv-views' ) ?></p><br/>
20
+ <textarea style="font-size:10px;width:100%;height:250px;" rows="26" readonly="readonly"><?php echo esc_html( $debug_information->do_json_encode( $debug_data ) );?></textarea>
21
+ </div>
22
+ </div>
23
+ </div>
24
+ </div>
embedded/toolset/toolset-common/debug/functions_debug_information.php ADDED
@@ -0,0 +1,160 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * produce debug information
4
+ *
5
+ *
6
+ */
7
+
8
+ class ICL_Debug_Information
9
+ {
10
+ function __construct() {
11
+ }
12
+ function __destruct() {
13
+ }
14
+
15
+ function get_debug_info($info=array()) {
16
+ if (!is_array($info)) {
17
+ $info = explode(',', $info);
18
+ }
19
+ if (empty($info)) {
20
+ $info = array('core', 'plugins', 'theme', 'extra-debug');
21
+ }
22
+
23
+ $output = array();
24
+ foreach ($info as $type) {
25
+ switch ($type) {
26
+ case 'core':
27
+ $output['core'] = $this->get_core_info();
28
+ break;
29
+ case 'plugins':
30
+ $output['plugins'] = $this->get_plugins_info();
31
+ break;
32
+ case 'theme':
33
+ $output['theme'] = $this->get_theme_info();
34
+ break;
35
+ case 'extra-debug':
36
+ $output['extra-debug'] = apply_filters('icl_get_extra_debug_info', array());
37
+ break;
38
+ }
39
+ }
40
+ return $output;
41
+ }
42
+
43
+ /**
44
+ *
45
+ * @global object $wpdb
46
+ *
47
+ */
48
+ function get_core_info() {
49
+
50
+ global $wpdb;
51
+
52
+ $core = array(
53
+ 'Wordpress' => array(
54
+ 'Multisite' => is_multisite() ? 'Yes' : 'No',
55
+ 'SiteURL' => site_url(),
56
+ 'HomeURL' => home_url(),
57
+ 'Version' => get_bloginfo( 'version' ),
58
+ 'PermalinkStructure' => get_option( 'permalink_structure' ),
59
+ 'PostTypes' => implode( ', ', get_post_types( '', 'names' ) ),
60
+ 'PostSatus' => implode( ', ', get_post_stati() )
61
+ ),
62
+ 'Server' => array(
63
+ 'jQueryVersion' => wp_script_is( 'jquery', 'registered' ) ? $GLOBALS['wp_scripts']->registered['jquery']->ver : __( 'n/a', 'wpv-views' ),
64
+ 'PHPVersion' => phpversion(),
65
+ 'MySQLVersion' => $wpdb->db_version(),
66
+ 'ServerSoftware' => $_SERVER['SERVER_SOFTWARE']
67
+ ),
68
+ 'PHP' => array(
69
+ 'MemoryLimit' => ini_get( 'memory_limit' ),
70
+ 'UploadMax' => ini_get( 'upload_max_filesize' ),
71
+ 'PostMax' => ini_get( 'post_max_size' ),
72
+ 'TimeLimit' => ini_get( 'max_execution_time' ),
73
+ 'MaxInputVars' => ini_get( 'max_input_vars' ),
74
+ ),
75
+ );
76
+
77
+ return $core;
78
+ }
79
+
80
+ function get_plugins_info() {
81
+
82
+ if ( ! function_exists( 'get_plugins' ) ) {
83
+ $admin_includes_path = str_replace( site_url('/', 'admin'), ABSPATH, admin_url('includes/', 'admin') );
84
+ require_once $admin_includes_path . 'plugin.php';
85
+ }
86
+
87
+ $plugins = get_plugins();
88
+ $active_plugins = get_option('active_plugins');
89
+ $active_plugins_info = array();
90
+ foreach ($active_plugins as $plugin) {
91
+ if (isset($plugins[$plugin])) {
92
+ unset($plugins[$plugin]['Description']);
93
+ $active_plugins_info[$plugin] = $plugins[$plugin];
94
+ }
95
+ }
96
+
97
+ $mu_plugins = get_mu_plugins();
98
+
99
+ $dropins = get_dropins();
100
+
101
+ $output =array(
102
+ 'active_plugins' => $active_plugins_info,
103
+ 'mu_plugins' => $mu_plugins,
104
+ 'dropins' => $dropins,
105
+ );
106
+
107
+ return $output;
108
+ }
109
+
110
+ function get_theme_info() {
111
+
112
+ if ( get_bloginfo( 'version' ) < '3.4' ) {
113
+ $current_theme = get_theme_data( get_stylesheet_directory() . '/style.css' );
114
+ $theme = $current_theme;
115
+ unset($theme['Description']);
116
+ unset($theme['Satus']);
117
+ unset($theme['Tags']);
118
+ } else {
119
+ $current_theme = wp_get_theme();
120
+ $theme = array(
121
+ 'Name' => $current_theme->Name,
122
+ 'ThemeURI' => $current_theme->ThemeURI,
123
+ 'Author' => $current_theme->Author,
124
+ 'AuthorURI' => $current_theme->AuthorURI,
125
+ 'Template' => $current_theme->Template,
126
+ 'Version' => $current_theme->Version,
127
+ 'TextDomain' => $current_theme->TextDomain,
128
+ 'DomainPath' => $current_theme->DomainPath,
129
+ );
130
+ }
131
+
132
+ return $theme;
133
+ }
134
+
135
+
136
+ function do_json_encode($data)
137
+ {
138
+ if (version_compare(phpversion(), '5.3.0', '<')) {
139
+ return json_encode($data);
140
+ }
141
+ $json_options = 0;
142
+ if (defined('JSON_HEX_TAG')) {
143
+ $json_options += JSON_HEX_TAG;
144
+ }
145
+ if (defined('JSON_HEX_APOS')) {
146
+ $json_options += JSON_HEX_APOS;
147
+ }
148
+ if (defined('JSON_HEX_QUOT')) {
149
+ $json_options += JSON_HEX_QUOT;
150
+ }
151
+ if (defined('JSON_HEX_AMP')) {
152
+ $json_options += JSON_HEX_AMP;
153
+ }
154
+ if (defined('JSON_UNESCAPED_UNICODE')) {
155
+ $json_options += JSON_UNESCAPED_UNICODE;
156
+ }
157
+ return json_encode($data, $json_options);
158
+ }
159
+
160
+ }
embedded/toolset/toolset-common/expression-parser/js/parser.js ADDED
@@ -0,0 +1,2923 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ *
3
+ * Toolset Parser, advanced parser for arithmetic,logical and comparision expressions
4
+ * by Nikos M. <nikos.m@icanlocalize.com>
5
+ *
6
+ * Main Features:
7
+ * + user variables
8
+ * + support mathematical, and date functions
9
+ * + limited date parsing
10
+ *
11
+ * Additional Features:
12
+ * + typed tokens
13
+ * + typed user variables
14
+ * + added string literals
15
+ * + support advanced mathematical, string and date functions
16
+ * + support advanced date operations (like (date + 3 days) or (3 days=date1-date2)) (not yet)
17
+ * + support typecasting
18
+ * + can parse and format every localized PHP date format
19
+ * + precompilation of expressions into functions
20
+ * + faster, optimized code
21
+ * + use of closures for encapsulation and better access
22
+ * + heavy refactoring, and various bug fixes
23
+ *
24
+ * inspired by
25
+ * JS Expression Evaluator by Prasad P. Khandekar
26
+ *
27
+ **/
28
+
29
+ // js closure paradise (or maybe hell?)
30
+ (function(window){
31
+ window.ToolsetParser=window.ToolsetParser ||
32
+
33
+ (function(window){
34
+
35
+ var keywords;
36
+
37
+ var Functions=(function(){
38
+ var _cookies=false;
39
+ var _regexs={};
40
+ var _params={
41
+ user:{
42
+ ID:0,
43
+ role:'',
44
+ roles:[],
45
+ login:'',
46
+ display_name:''
47
+ }
48
+ };
49
+
50
+ function _setParams(params)
51
+ {
52
+ for (var n in params)
53
+ {
54
+ if (params.hasOwnProperty(n))
55
+ _params[n]=params[n];
56
+ }
57
+ }
58
+
59
+ function _Cookie(name)
60
+ {
61
+ var i,c,C;
62
+
63
+ if (!_cookies)
64
+ {
65
+ c = document.cookie.split(/;\s*/);
66
+ _cookies = {};
67
+
68
+ i=c.length;
69
+ while(--i>=0)
70
+ {
71
+ C = c[i].split('=');
72
+ _cookies[C[0]] = C[1];
73
+ }
74
+ }
75
+ return (_cookies[name])?_cookies[name]:'';
76
+ }
77
+
78
+ function _User(att)
79
+ {
80
+ att=att.toUpperCase();
81
+
82
+ switch (att)
83
+ {
84
+ case 'ID':
85
+ return _params['user']['ID']+'';
86
+ case 'NAME':
87
+ return _params['user']['display_name'];
88
+ case 'ROLE':
89
+ return _params['user']['role'];
90
+ case 'LOGIN':
91
+ return _params['user']['login'];
92
+ default:
93
+ return '';
94
+ }
95
+ return '';
96
+ }
97
+
98
+ function _Regex(rx, opts)
99
+ {
100
+ // cache regexes
101
+ var _prefix='__REGEX_' /*,flags, pattern, inputRX*/;
102
+
103
+ // replace flags not supported in JS
104
+ opts=opts.replace(/[^gimy]/,'');
105
+
106
+ // !opts && (opts='');
107
+ if (!_regexs[_prefix+rx+opts])
108
+ {
109
+ /*inputRX=rx;
110
+ flags = inputRX.replace(/.*\/([gimy]*)$/, '$1');
111
+ pattern = inputRX.replace(new RegExp('^/(.*?)/'+flags+'$'), '$1');*/
112
+ _regexs[_prefix+rx+opts]=new RegExp(rx /*pattern*/, /*flags+*/opts);
113
+ //console.log(_regexs[_prefix+rx+opts]);
114
+ }
115
+ return _regexs[_prefix+rx+opts];
116
+ }
117
+
118
+ function _Contains(a,v)
119
+ {
120
+ var found=false;
121
+ var ii=a.length;
122
+ while(--ii>=0)
123
+ {
124
+ if (a[ii]==v)
125
+ {
126
+ found=true;
127
+ break;
128
+ }
129
+ }
130
+ return found;
131
+ }
132
+
133
+ return {
134
+ setParams : _setParams,
135
+ User : _User,
136
+ Cookie : _Cookie,
137
+ Regex : _Regex,
138
+ Contains : _Contains
139
+ };
140
+ })();
141
+
142
+ // private class
143
+ var DateParser = (function(){
144
+
145
+ // private members
146
+ var
147
+ _ZONE_NAMES = {'AM' : 'AM','PM' : 'PM'},
148
+
149
+ //_MONTH_NAMES = {'January':'January','February':'February','March':'March','April':'April','May':'May','June':'June','July':'July','August':'August','September':'September','October':'October','November':'November','December':'December'},
150
+
151
+ //_DAY_NAMES = {'Sunday':'Sunday','Monday':'Monday','Tuesday':'Tuesday','Wednesday':'Wednesday','Thursday':'Thursday','Friday':'Friday','Saturday':'Saturday'},
152
+
153
+ _MONTH_NAMES = ['January','February','March','April','May','June','July','August','September','October','November','December'],
154
+
155
+ _DAY_NAMES = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'],
156
+
157
+ _ENGLISH_MONTH_NAMES = new Array('January','February','March','April','May','June','July','August','September','October','November','December'),
158
+
159
+ _ENGLISH_DAY_NAMES = new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'),
160
+
161
+ _to_int = function(str)
162
+ {
163
+ // return the integer representation of the string given as argument
164
+ return parseInt(str , 10);
165
+ },
166
+
167
+ _escape_regexp = function(str)
168
+ {
169
+ // return string with special characters escaped
170
+ return str.replace(/([-.*+?^${}()|[\]\/\\])/g, '\\$1');
171
+ },
172
+
173
+ _str_pad = function(n, c)
174
+ {
175
+ if ((n = n + '').length < c)
176
+ {
177
+ return new Array((++c) - n.length).join('0') + n;
178
+ }
179
+ return n;
180
+ },
181
+
182
+ _is_string = function(s)
183
+ {
184
+ if (typeof(s)=='string' ||
185
+ (typeof(s)=='object' && ((s instanceof String) || Object.prototype.toString.call(s) === '[object String]')))
186
+ return true;
187
+ return false;
188
+ };
189
+
190
+
191
+ var _parseDate = function(date, supposed_format)
192
+ {
193
+ // if already a date object
194
+ if (typeof(date)!='undefined' && ((date instanceof Date) || Object.prototype.toString.call(date) === '[object Date]'))
195
+ {
196
+ date.setHours(0,0,0,0); // normalize time part
197
+ return date;
198
+ }
199
+
200
+ if (
201
+ typeof(date)=='undefined' ||
202
+ date==null ||
203
+ !_is_string(date) ||
204
+ typeof(supposed_format)=='undefined' ||
205
+ supposed_format==null ||
206
+ !_is_string(supposed_format)
207
+ )
208
+ return false;
209
+
210
+ // treat argument as a string
211
+ str_date = date + '';
212
+ supposed_format = supposed_format+'';
213
+
214
+ // if value is given
215
+ if (str_date != '' && supposed_format != '')
216
+ {
217
+
218
+ var
219
+ // prepare the format by removing white space from it
220
+ // and also escape characters that could have special meaning in a regular expression
221
+ format = _escape_regexp(supposed_format.replace(/\s/g, '')),
222
+
223
+ // allowed characters in date's format
224
+ format_chars = ['d','D','j','l','N','S','w','F','m','M','n','Y','y'],
225
+
226
+ // "matches" will contain the characters defining the date's format
227
+ matches = new Array,
228
+
229
+ // "regexp" will contain the regular expression built for each of the characters used in the date's format
230
+ regexp = new Array;
231
+
232
+ // iterate through the allowed characters in date's format
233
+ for (var i = 0; i < format_chars.length; i++)
234
+ {
235
+ // if character is found in the date's format
236
+ if ((position = format.indexOf(format_chars[i])) > -1)
237
+
238
+ // save it, alongside the character's position
239
+ matches.push({character: format_chars[i], position: position});
240
+ }
241
+
242
+ // sort characters defining the date's format based on their position, ascending
243
+ matches.sort(function(a, b){ return a.position - b.position });
244
+
245
+ // iterate through the characters defining the date's format
246
+ for (var index=0; index<matches.length; index++)
247
+ {
248
+ var match=matches[index];
249
+
250
+ // add to the array of regular expressions, based on the character
251
+ switch (match.character)
252
+ {
253
+
254
+ case 'd': regexp.push('0[1-9]|[12][0-9]|3[01]'); break;
255
+ case 'D': regexp.push('[a-z]{3}'); break;
256
+ case 'j': regexp.push('[1-9]|[12][0-9]|3[01]'); break;
257
+ case 'l': regexp.push('[a-z]+'); break;
258
+ case 'N': regexp.push('[1-7]'); break;
259
+ case 'S': regexp.push('st|nd|rd|th'); break;
260
+ case 'w': regexp.push('[0-6]'); break;
261
+ case 'F': regexp.push('[a-z]+'); break;
262
+ case 'm': regexp.push('0[1-9]|1[012]+'); break;
263
+ case 'M': regexp.push('[a-z]{3}'); break;
264
+ case 'n': regexp.push('[1-9]|1[012]'); break;
265
+ case 'Y': regexp.push('[0-9]{4}'); break;
266
+ case 'y': regexp.push('[0-9]{2}'); break;
267
+
268
+ }
269
+ }
270
+
271
+ // if we have an array of regular expressions
272
+ if (regexp.length)
273
+ {
274
+
275
+ // we will replace characters in the date's format in reversed order
276
+ matches.reverse();
277
+
278
+ // iterate through the characters in date's format
279
+ for (var index=0; index<matches.length; index++)
280
+ {
281
+ var match=matches[index];
282
+
283
+ // replace each character with the appropriate regular expression
284
+ format = format.replace(match.character, '(' + regexp[regexp.length - index - 1] + ')');
285
+ }
286
+
287
+ // the final regular expression
288
+ regexp = new RegExp('^' + format + '$', 'ig');
289
+
290
+ // if regular expression was matched
291
+ if ((segments = regexp.exec(str_date.replace(/\s/g, ''))))
292
+ {
293
+
294
+ // check if date is a valid date (i.e. there's no February 31)
295
+ var original_day,
296
+ original_month,
297
+ original_year,
298
+ english_days = _ENGLISH_DAY_NAMES, //['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'],
299
+ english_months = _ENGLISH_MONTH_NAMES,//['January','February','March','April','May','June','July','August','September','October','November','December'],
300
+ iterable,
301
+
302
+ // by default, we assume the date is valid
303
+ valid = true;
304
+
305
+ // reverse back the characters in the date's format
306
+ matches.reverse();
307
+
308
+ // iterate through the characters in the date's format
309
+ for (var index=0; index<matches.length; index++)
310
+ {
311
+ var match=matches[index];
312
+
313
+ // if the date is not valid, don't look further
314
+ if (!valid) break; //return true;
315
+
316
+ // based on the character
317
+ switch (match.character)
318
+ {
319
+
320
+ case 'm':
321
+ case 'n':
322
+
323
+ // extract the month from the value entered by the user
324
+ original_month = _to_int(segments[index + 1]);
325
+
326
+ break;
327
+
328
+ case 'd':
329
+ case 'j':
330
+
331
+ // extract the day from the value entered by the user
332
+ original_day = _to_int(segments[index + 1]);
333
+
334
+ break;
335
+
336
+ case 'D':
337
+ case 'l':
338
+ case 'F':
339
+ case 'M':
340
+
341
+ // if day is given as day name, we'll check against the names in the used language
342
+ if (match.character == 'D' || match.character == 'l') iterable = _DAY_NAMES;
343
+
344
+ // if month is given as month name, we'll check against the names in the used language
345
+ else iterable = _MONTH_NAMES;
346
+
347
+ // by default, we assume the day or month was not entered correctly
348
+ valid = false;
349
+
350
+ // iterate through the month/days in the used language
351
+ for (var key=0; key<iterable.length; key++)
352
+ {
353
+ // if month/day was entered correctly, don't look further
354
+ if (valid) break; //return true;
355
+
356
+ var value=iterable[key];
357
+
358
+ // if month/day was entered correctly
359
+ if (segments[index + 1].toLowerCase() == value.substring(0, (match.character == 'D' || match.character == 'M' ? 3 : value.length)).toLowerCase())
360
+ {
361
+
362
+ // extract the day/month from the value entered by the user
363
+ switch (match.character)
364
+ {
365
+
366
+ case 'D': segments[index + 1] = english_days[key].substring(0, 3); break;
367
+ case 'l': segments[index + 1] = english_days[key]; break;
368
+ case 'F': segments[index + 1] = english_months[key]; original_month = key + 1; break;
369
+ case 'M': segments[index + 1] = english_months[key].substring(0, 3); original_month = key + 1; break;
370
+
371
+ }
372
+
373
+ // day/month value is valid
374
+ valid = true;
375
+
376
+ }
377
+
378
+ }
379
+
380
+ break;
381
+
382
+ case 'Y':
383
+
384
+ // extract the year from the value entered by the user
385
+ original_year = _to_int(segments[index + 1]);
386
+
387
+ break;
388
+
389
+ case 'y':
390
+
391
+ // extract the year from the value entered by the user
392
+ original_year = '19' + _to_int(segments[index + 1]);
393
+
394
+ break;
395
+
396
+ }
397
+ }
398
+
399
+ // if everything is ok so far
400
+ if (valid)
401
+ {
402
+ // generate a Date object using the values entered by the user
403
+ // (handle also the case when original_month and/or original_day are undefined - i.e date format is "Y-m" or "Y")
404
+ var date = new Date(original_year, (original_month || 1) - 1, original_day || 1);
405
+
406
+ // if, after that, the date is the same as the date entered by the user
407
+ if (date.getFullYear() == original_year && date.getDate() == (original_day || 1) && date.getMonth() == ((original_month || 1) - 1))
408
+ {
409
+ // normalize time part, only date part checked
410
+ date.setHours(0,0,0,0);
411
+ // return the date as JavaScript date object
412
+ return date;
413
+ }
414
+ }
415
+ }
416
+ }
417
+ }
418
+ // if script gets this far, return false as something must've went wrong
419
+ return false;
420
+ };
421
+
422
+ var _formatDate = function(date, format)
423
+ {
424
+
425
+ // if not a date object
426
+ if (typeof(date)=='undefined' || date==null || !(date instanceof Date) || Object.prototype.toString.call(date) !== '[object Date]')
427
+ {
428
+ return '';
429
+ }
430
+
431
+ date.setHours(0,0,0,0); // normalize time
432
+
433
+ if (format=='')
434
+ return date.toString();
435
+
436
+ var result = '',
437
+
438
+ // extract parts of the date:
439
+ // day number, 1 - 31
440
+ j = date.getDate(),
441
+
442
+ // day of the week, 0 - 6, Sunday - Saturday
443
+ w = date.getDay(),
444
+
445
+ // the name of the day of the week Sunday - Saturday
446
+ l = _DAY_NAMES[w],
447
+
448
+ // the month number, 1 - 12
449
+ n = date.getMonth() + 1,
450
+
451
+ // the month name, January - December
452
+ f = _MONTH_NAMES[n - 1],
453
+
454
+ // the year (as a string)
455
+ y = date.getFullYear() + '';
456
+
457
+ // iterate through the characters in the format
458
+ for (var i = 0; i < format.length; i++)
459
+ {
460
+
461
+ // extract the current character
462
+ var chr = format.charAt(i);
463
+
464
+ // see what character it is
465
+ switch(chr)
466
+ {
467
+ // year as two digits
468
+ case 'y': y = y.substr(2);
469
+
470
+ // year as four digits
471
+ case 'Y': result += y; break;
472
+
473
+ // month number, prefixed with 0
474
+ case 'm': n = _str_pad(n, 2);
475
+
476
+ // month number, not prefixed with 0
477
+ case 'n': result += n; break;
478
+
479
+ // month name, three letters
480
+ case 'M': f = f.substr(0, 3);
481
+
482
+ // full month name
483
+ case 'F': result += f; break;
484
+
485
+ // day number, prefixed with 0
486
+ case 'd': j = _str_pad(j, 2);
487
+
488
+ // day number not prefixed with 0
489
+ case 'j': result += j; break;
490
+
491
+ // day name, three letters
492
+ case 'D': l = l.substr(0, 3);
493
+
494
+ // full day name
495
+ case 'l': result += l; break;
496
+
497
+ // ISO-8601 numeric representation of the day of the week, 1 - 7
498
+ case 'N': w++;
499
+
500
+ // day of the week, 0 - 6
501
+ case 'w': result += w; break;
502
+
503
+ // English ordinal suffix for the day of the month, 2 characters
504
+ // (st, nd, rd or th (works well with j))
505
+ case 'S':
506
+
507
+ if (j % 10 == 1 && j != '11') result += 'st';
508
+
509
+ else if (j % 10 == 2 && j != '12') result += 'nd';
510
+
511
+ else if (j % 10 == 3 && j != '13') result += 'rd';
512
+
513
+ else result += 'th';
514
+
515
+ break;
516
+
517
+ // this is probably the separator
518
+ default: result += chr;
519
+
520
+ }
521
+
522
+ }
523
+ // return formated date
524
+ return result;
525
+ };
526
+
527
+ // public (static) methods
528
+ return {
529
+
530
+ setDateLocaleStrings : function(dn, mn, zn)
531
+ {
532
+ if (typeof mn != 'undefined')
533
+ {
534
+ _MONTH_NAMES = mn;
535
+ }
536
+ if (typeof dn != 'undefined')
537
+ {
538
+ _DAY_NAMES = dn;
539
+ }
540
+ if (typeof zn != 'undefined')
541
+ _ZONE_NAMES = zn;
542
+ },
543
+
544
+ parseDate : _parseDate,
545
+ formatDate : _formatDate,
546
+
547
+ isDate : function (val, format, getDate)
548
+ {
549
+ var date=_parseDate(val,format);
550
+ if (date!==false)
551
+ {
552
+ if (typeof(getDate)!='undefined' && typeof(getDate)=='object')
553
+ {
554
+ getDate.date=date;
555
+ }
556
+ return true;
557
+ }
558
+ return false;
559
+ },
560
+
561
+ currentDate : function()
562
+ {
563
+ var _now=new Date();
564
+ _now.setHours(0,0,0,0); // normalize time part
565
+ return _now;
566
+ }
567
+ };
568
+ })();
569
+
570
+ var Stack = (function(){
571
+ // Converts stack contents into a comma separated string
572
+ function _dumpStack()
573
+ {
574
+ var intCntr = 0;
575
+ var strRet = "";
576
+ if (this.intIndex == 0) return null;
577
+ for (intCntr = 0; intCntr < this.intIndex; intCntr++)
578
+ {
579
+ if (strRet.length == 0)
580
+ strRet += this.arrStack[intCntr].val;
581
+ else
582
+ strRet += "," + this.arrStack[intCntr].val;
583
+ }
584
+ return strRet;
585
+ }
586
+
587
+ // Returns size of stack
588
+ function _getSize()
589
+ {
590
+ return this.intIndex;
591
+ }
592
+
593
+ // This method tells us if this Stack object is empty
594
+ function _isStackEmpty()
595
+ {
596
+ if (this.intIndex == 0)
597
+ return true;
598
+ else
599
+ return false;
600
+ }
601
+
602
+ // This method pushes a new element onto the top of the stack
603
+ function _pushElement(newData)
604
+ {
605
+ // Assign our new element to the top
606
+ //debugAssert ("Pushing " + newData);
607
+ this.arrStack[this.intIndex++] = newData;
608
+ //this.intIndex++;
609
+ }
610
+
611
+ // This method pops the top element off of the stack
612
+ function _popElement()
613
+ {
614
+ var retVal;
615
+
616
+ retVal = null;
617
+ if (this.intIndex > 0)
618
+ {
619
+ // Assign our new element to the top
620
+ //this.intIndex--;
621
+ retVal = this.arrStack[--this.intIndex];
622
+ }
623
+ return retVal;
624
+ }
625
+
626
+ // Gets an element at a particular offset from top of the stack
627
+ function _getElement(intPos)
628
+ {
629
+ var retVal;
630
+
631
+ //alert ("Size : " + this.intIndex + ", Index " + intPos);
632
+ if (intPos >= 0 && intPos < this.intIndex)
633
+ retVal = this.arrStack[this.intIndex - intPos - 1];
634
+ return retVal;
635
+ }
636
+ // Stack object constructor
637
+ return function()
638
+ {
639
+ this.arrStack = new Array();
640
+ this.intIndex = 0;
641
+
642
+ this.Size = _getSize;
643
+ this.IsEmpty = _isStackEmpty;
644
+ this.Push = _pushElement;
645
+ this.Pop = _popElement;
646
+ this.Get = _getElement;
647
+ this.toString = _dumpStack;
648
+ };
649
+ })();
650
+
651
+ var Tokenizer = (function(DateParser){
652
+
653
+ // private members
654
+ var _tok_map_prefix = '__TOKEN_MAP_PREFIX__',
655
+ _Alpha = "abcdefghijklmnopqrstuvwxyz",
656
+ _lstAlpha = _Alpha + _Alpha.toUpperCase(),
657
+ _lstVariablePrefix = '_$' + _lstAlpha,
658
+ _lstDigits = "0123456789",
659
+ _lstArithOps = ["^","*","/","%","+","-"],
660
+ _lstLogicOps = ["NOT","!","OR","|","AND","&"],
661
+ _lstCompaOps = ["<","<=",">",">=","<>","=","lt","lte","gt","gte","ne","eq"],
662
+ _lstFuncOps = ["AVG","ABS","ACOS","ARRAY","ASC","ASIN","ATAN","CHR","CONTAINS","COOKIE","COS","DATE","FIX","HEX","IIF","LCASE","LEN","LEFT","LOG","MAX","MID","MIN","NUM","RAND","REGEX","RIGHT","ROUND","SIN","SQRT","STR","TAN","TODAY","UCASE","USER", "EMPTY", "empty"],
663
+
664
+ _UNARY_NEGATIVE = "-",
665
+ _UNARY_NEGATION = "!",
666
+ _ARG_TERMINAL = "?",
667
+
668
+ _aritOpMap = {},
669
+ _logiOpMap = {},
670
+ _compOpMap = {},
671
+ _funcMap = {},
672
+
673
+ _TOKEN_TYPES = { __DEFAULT__:0, STRING_LITERAL:8, REGEX: 83, ARRAY:81, ARRAY_LITERAL:82, DATE:1, ARITHMETIC_OP:2, LOGICAL_OP:3, COMPARISON_OP:4, NUMBER:5, BOOLEAN:6, VARIABLE:7, FUNCTION:9, COMMA:10, LEFT_PAREN:11, LEFT_BRACKET:111, RIGHT_PAREN:12, RIGHT_BRACKET:122, ARG_TERMINAL:13, UNARY_NEGATIVE:14, UNARY_NEGATION:15, EMPTY_TOKEN:30, UNKNOWN:40 },
674
+
675
+ _isDefined = function(s)
676
+ {
677
+ return ((typeof(s)=='undefined' || s==null)?false:true);
678
+ },
679
+ _isDigit = function(c)
680
+ {
681
+ if (!_isDefined(c))
682
+ return false;
683
+ return ((c!='' && _lstDigits.indexOf(c) >= 0)?true:false);
684
+ },
685
+ _isAlpha = function(c)
686
+ {
687
+ if (!_isDefined(c))
688
+ return false;
689
+ return ((c!='' && _lstAlpha.indexOf(c) >= 0)?true:false);
690
+ },
691
+ _isOperator = function(s)
692
+ {
693
+ if (!_isDefined(s))
694
+ return false;
695
+ return ((_aritOpMap[_tok_map_prefix + s])?true:false);
696
+ },
697
+ _isLogicOperator = function(s)
698
+ {
699
+ if (!_isDefined(s))
700
+ return false;
701
+ return ((_logiOpMap[_tok_map_prefix + s])?true:false);
702
+ },
703
+ _isCompOperator = function(s)
704
+ {
705
+ if (!_isDefined(s))
706
+ return false;
707
+ return ((_compOpMap[_tok_map_prefix + s])?true:false);
708
+ },
709
+ _isFunction = function(s)
710
+ {
711
+ if (!_isDefined(s))
712
+ return false;
713
+ return ((_funcMap[_tok_map_prefix + s])?true:false);
714
+ },
715
+ _isVariableName = function(s)
716
+ {
717
+ if (!_isDefined(s))
718
+ return false;
719
+ c=(s=='')?'':s.charAt(0);
720
+ return ((c!='' && _lstVariablePrefix.indexOf(c) >= 0)?true:false);
721
+ },
722
+ _isDateInstance = function(s)
723
+ {
724
+ if (!_isDefined(s))
725
+ return false;
726
+ if (typeof(s)=='object' && ((s instanceof Date) || Object.prototype.toString.call(s) == '[object Date]'))
727
+ return true;
728
+ return false;
729
+ },
730
+ _isArrayInstance = function(s)
731
+ {
732
+ if (!_isDefined(s))
733
+ return false;
734
+ if (typeof(s)=='object' && ((s instanceof Array) || Object.prototype.toString.call(s) == '[object Array]'))
735
+ return true;
736
+ return false;
737
+ },
738
+ _isRegExpInstance = function(s)
739
+ {
740
+ if (!_isDefined(s))
741
+ return false;
742
+ if (typeof(s)=='object' && ((s instanceof RegExp) || Object.prototype.toString.call(s) == '[object RegExp]'))
743
+ return true;
744
+ return false;
745
+ },
746
+ _isNumber = function(s)
747
+ {
748
+ var type_s=typeof(s);
749
+ if (!_isDefined(s)) return false;
750
+ if (_isDateInstance(s) || _isRegExpInstance(s) || _isArrayInstance(s)) return false;
751
+ if ((type_s=='number' || (type_s=='object' && Object.prototype.toString.call(s) !== '[object Number]')) /*&& !isNaN(s)*/)
752
+ return true;
753
+ var dblNo = Number.NaN;
754
+ dblNo = new Number(s);
755
+ return ((isNaN(dblNo))?false:true);
756
+ },
757
+ _isBoolean = function(s)
758
+ {
759
+ if (!_isDefined(s))
760
+ return false;
761
+
762
+ var varType = typeof(s);
763
+ var strTmp = s;
764
+
765
+ if (varType == "boolean") return true;
766
+ if (varType == "number" || varType == "function" || varType == 'undefined') return false;
767
+ if (_isNumber(s) || _isDateInstance(s) || _isRegExpInstance(s) || _isArrayInstance(s)) return false;
768
+ if (varType == "object") strTmp = strTmp.toString();
769
+ if (strTmp.toUpperCase && (strTmp.toUpperCase() == "TRUE" || strTmp.toUpperCase() == "FALSE")) return true;
770
+ return false;
771
+ },
772
+ _rtrim = function(s, ch)
773
+ {
774
+ var w_space;
775
+ if (typeof ch == 'undefined')
776
+ w_space = String.fromCharCode(32);
777
+ else
778
+ w_space = ch;
779
+ var v_length = s.length;
780
+ var strTemp = "";
781
+ if(v_length < 0)
782
+ {
783
+ return"";
784
+ }
785
+ var iTemp = v_length - 1;
786
+
787
+ while(iTemp > -1)
788
+ {
789
+ if(s.charAt(iTemp) == w_space)
790
+ {
791
+ }
792
+ else
793
+ {
794
+ strTemp = s.substring(0, iTemp + 1);
795
+ break;
796
+ }
797
+ iTemp = iTemp - 1;
798
+ }
799
+ return strTemp;
800
+ },
801
+ _ltrim = function (s, ch)
802
+ {
803
+ var w_space;
804
+ if (typeof ch == 'undefined')
805
+ w_space = String.fromCharCode(32);
806
+ else
807
+ w_space = ch;
808
+ if(v_length < 1)
809
+ {
810
+ return "";
811
+ }
812
+ var v_length = s.length;
813
+ var strTemp = "";
814
+ var iTemp = 0;
815
+
816
+ while(iTemp < v_length)
817
+ {
818
+ if(s.charAt(iTemp) == w_space)
819
+ {
820
+ }
821
+ else
822
+ {
823
+ strTemp = s.substring(iTemp, v_length);
824
+ break;
825
+ }
826
+ iTemp = iTemp + 1;
827
+ }
828
+ return strTemp;
829
+ },
830
+ _trim = function(s, ch)
831
+ {
832
+ if (s.length < 1) return "";
833
+
834
+ s = _rtrim(_ltrim(s, ch), ch);
835
+ if (s == "")
836
+ return "";
837
+ else
838
+ return s;
839
+ };
840
+
841
+ // build maps for fast lookup
842
+ var _buildMaps=function()
843
+ {
844
+ var i;
845
+
846
+ for (i=0; i<_lstArithOps.length; i++)
847
+ {
848
+ _aritOpMap[_tok_map_prefix + _lstArithOps[i]]=true;
849
+ }
850
+ for (i=0; i<_lstLogicOps.length; i++)
851
+ {
852
+ _logiOpMap[_tok_map_prefix + _lstLogicOps[i]]=true;
853
+ }
854
+ for (i=0; i<_lstCompaOps.length; i++)
855
+ {
856
+ _compOpMap[_tok_map_prefix + _lstCompaOps[i]]=true;
857
+ }
858
+ for (i=0; i<_lstFuncOps.length; i++)
859
+ {
860
+ _funcMap[_tok_map_prefix + _lstFuncOps[i]]=true;
861
+ }
862
+ };
863
+
864
+ var _makeToken = function(tok, force_type)
865
+ {
866
+ var token={val:tok, type:_TOKEN_TYPES.UNKNOWN};
867
+ var typeoftok=typeof(tok);
868
+
869
+ if (typeof(force_type) == 'undefined' || force_type==null || force_type=='')
870
+ force_type=_TOKEN_TYPES.__DEFAULT__;
871
+
872
+ switch (force_type)
873
+ {
874
+ case _TOKEN_TYPES.EMPTY_TOKEN:
875
+ token.type=_TOKEN_TYPES.EMPTY_TOKEN;
876
+ token.isEmpty=true;
877
+ token.val='';
878
+ break;
879
+ case _TOKEN_TYPES.STRING_LITERAL:
880
+ token.type=_TOKEN_TYPES.STRING_LITERAL;
881
+ token.isStringLiteral=true;
882
+ token.val=tok.toString();
883
+ break;
884
+ case _TOKEN_TYPES.DATE:
885
+ if (_isDateInstance(tok))
886
+ {
887
+ token.type=_TOKEN_TYPES.DATE;
888
+ token.isDate=true;
889
+ }
890
+ break;
891
+ case _TOKEN_TYPES.ARRAY:
892
+ if (!_isArrayInstance(tok))
893
+ {
894
+ token.val=[tok];
895
+ }
896
+ token.type=_TOKEN_TYPES.ARRAY;
897
+ token.isArray=true;
898
+ break;
899
+ case _TOKEN_TYPES.REGEX:
900
+ if (!_isRegExpInstance(tok))
901
+ {
902
+ token.val=Functions.Regex(tok);
903
+ }
904
+ token.type=_TOKEN_TYPES.REGEX;
905
+ token.isRegex=true;
906
+ break;
907
+ case _TOKEN_TYPES.COMMA:
908
+ token.type=_TOKEN_TYPES.COMMA;
909
+ token.isComma=true;
910
+ token.val=',';
911
+ break;
912
+ case _TOKEN_TYPES.LEFT_PAREN:
913
+ token.type=_TOKEN_TYPES.LEFT_PAREN;
914
+ token.isLeftParen=true;
915
+ token.isParen=true;
916
+ token.val='(';
917
+ break;
918
+ case _TOKEN_TYPES.RIGHT_PAREN:
919
+ token.type=_TOKEN_TYPES.RIGHT_PAREN;
920
+ token.isRightParen=true;
921
+ token.isParen=true;
922
+ token.val=')';
923
+ break;
924
+ case _TOKEN_TYPES.ARG_TERMINAL:
925
+ token.type=_TOKEN_TYPES.ARG_TERMINAL;
926
+ token.isArgTerminal=true;
927
+ token.val=_ARG_TERMINAL;
928
+ break;
929
+ case _TOKEN_TYPES.UNARY_NEGATIVE:
930
+ token.type=_TOKEN_TYPES.UNARY_NEGATIVE;
931
+ token.isUnaryNegative=true;
932
+ token.val=_UNARY_NEGATIVE;
933
+ token.isArithmeticOp=true;
934
+ token.isOp=true;
935
+ break;
936
+ case _TOKEN_TYPES.UNARY_NEGATION:
937
+ token.type=_TOKEN_TYPES.UNARY_NEGATION;
938
+ token.isUnaryNegation=true;
939
+ token.val=_UNARY_NEGATION;
940
+ token.isLogicOp=true;
941
+ token.isOp=true;
942
+ break;
943
+ case _TOKEN_TYPES.NUMBER:
944
+ token.type=_TOKEN_TYPES.NUMBER;
945
+ token.isNumber=true;
946
+ if (typeoftok=='string')
947
+ token.val=new Number(tok);
948
+ else if (typeoftok=='number')
949
+ token.val=tok;
950
+ else if (typeoftok=='boolean')
951
+ token.val=(tok==true)?1:0;
952
+ else if (typeoftok=='object')
953
+ token.val=new Number(tok.toString());
954
+ break;
955
+ case _TOKEN_TYPES.BOOLEAN:
956
+ token.type=_TOKEN_TYPES.BOOLEAN;
957
+ token.isBoolean=true;
958
+ if (typeoftok=='boolean')
959
+ token.val=tok;
960
+ else if (typeoftok=='string')
961
+ token.val=(tok.toUpperCase()=='TRUE')?true:false;
962
+ else if (typeoftok=='number')
963
+ token.val=(tok != 0)?true:false;
964
+ else if (Object.prototype.toString.call(tok) === '[object Number]')
965
+ token.val=(tok.valueOf() != 0)?true:false;
966
+ else if (typeoftok=='object')
967
+ token.val=(tok.toString().toUpperCase()=='TRUE')?true:false;
968
+ break;
969
+ case _TOKEN_TYPES.VARIABLE:
970
+ token.type=_TOKEN_TYPES.VARIABLE;
971
+ token.isVariable=true;
972
+ break;
973
+ case _TOKEN_TYPES.__DEFAULT__:
974
+ default:
975
+ if (
976
+ (typeoftok=='object' &&
977
+ ((tok instanceof String) || Object.prototype.toString.call(tok) === '[object String]') &&
978
+ tok._isStringLiteral)
979
+ )
980
+ {
981
+ token.type=_TOKEN_TYPES.STRING_LITERAL;
982
+ token.isStringLiteral=true;
983
+ token.val=tok.toString();
984
+ }
985
+ // date token
986
+ else if (_isDateInstance(tok))
987
+ {
988
+ token.type=_TOKEN_TYPES.DATE;
989
+ token.isDate=true;
990
+ }
991
+ // array token
992
+ else if (_isArrayInstance(tok))
993
+ {
994
+ token.type=_TOKEN_TYPES.ARRAY;
995
+ token.isArray=true;
996
+ }
997
+ // regex token
998
+ else if (_isRegExpInstance(tok))
999
+ {
1000
+ token.type=_TOKEN_TYPES.REGEX;
1001
+ token.isRegex=true;
1002
+ }
1003
+ else if (tok==',')
1004
+ {
1005
+ token.type=_TOKEN_TYPES.COMMA;
1006
+ token.isComma=true;
1007
+ token.val=',';
1008
+ }
1009
+ else if (tok=='(')
1010
+ {
1011
+ token.type=_TOKEN_TYPES.LEFT_PAREN;
1012
+ token.isLeftParen=true;
1013
+ token.isParen=true;
1014
+ token.val='(';
1015
+ token.isOp=true;
1016
+ }
1017
+ else if (tok==')')
1018
+ {
1019
+ token.type=_TOKEN_TYPES.RIGHT_PAREN;
1020
+ token.isRightParen=true;
1021
+ token.isParen=true;
1022
+ token.val=')';
1023
+ //token.isOp=true;
1024
+ }
1025
+ /*else if (tok=='{')
1026
+ {
1027
+ token.type=_TOKEN_TYPES.LEFT_BRACKET;
1028
+ token.isLeftBracket=true;
1029
+ token.isBracket=true;
1030
+ token.val='{';
1031
+ token.isOp=true;
1032
+ }
1033
+ else if (tok=='}')
1034
+ {
1035
+ token.type=_TOKEN_TYPES.RIGHT_BRACKET;
1036
+ token.isRightBracket=true;
1037
+ token.isBracket=true;
1038
+ token.val='}';
1039
+ //token.isOp=true;
1040
+ }*/
1041
+ else if (_isNumber(tok))
1042
+ {
1043
+ token.type=_TOKEN_TYPES.NUMBER;
1044
+ token.isNumber=true;
1045
+ if (typeoftok=='string')
1046
+ token.val=new Number(tok).valueOf();
1047
+ else if (typeoftok=='number')
1048
+ token.val=tok;
1049
+ else if (typeoftok=='boolean')
1050
+ token.val=(tok==true)?1:0;
1051
+ else if (typeoftok=='object')
1052
+ token.val=new Number(tok.toString()).valueOf();
1053
+ }
1054
+ else if (_isBoolean(tok))
1055
+ {
1056
+ token.type=_TOKEN_TYPES.BOOLEAN;
1057
+ token.isBoolean=true;
1058
+ if (typeoftok=='boolean')
1059
+ token.val=tok;
1060
+ else if (typeoftok=='string')
1061
+ token.val=(tok.toUpperCase()=='TRUE')?true:false;
1062
+ else if (typeoftok=='number')
1063
+ token.val=(tok != 0)?true:false;
1064
+ else if (Object.prototype.toString.call(tok) === '[object Number]')
1065
+ token.val=(tok.valueOf() != 0)?true:false;
1066
+ else if (typeoftok=='object')
1067
+ token.val=(tok.toString().toUpperCase()=='TRUE')?true:false;
1068
+ }
1069
+ else if (_isOperator(tok))
1070
+ {
1071
+ token.type=_TOKEN_TYPES.ARITHMETIC_OP;
1072
+ token.isArithmeticOp=true;
1073
+ token.isOp=true;
1074
+
1075
+ }
1076
+ else if (_isLogicOperator(tok))
1077
+ {
1078
+ token.type=_TOKEN_TYPES.LOGICAL_OP;
1079
+ token.isLogicOp=true;
1080
+ token.isOp=true;
1081
+ }
1082
+ else if (_isCompOperator(tok))
1083
+ {
1084
+ token.type=_TOKEN_TYPES.COMPARISON_OP;
1085
+ token.isCompOp=true;
1086
+ token.isOp=true;
1087
+ }
1088
+ else if (_isFunction(tok))
1089
+ {
1090
+ token.type=_TOKEN_TYPES.FUNCTION;
1091
+ token.isFunction=true;
1092
+ token.val=tok;
1093
+ }
1094
+ else if (_isVariableName(tok))
1095
+ {
1096
+ token.type=_TOKEN_TYPES.VARIABLE;
1097
+ token.isVariable=true;
1098
+ }
1099
+ break;
1100
+ }
1101
+ if (token.isOp || token.isFunction)
1102
+ {
1103
+ var intRet = 0;
1104
+
1105
+ switch(token.val)
1106
+ {
1107
+ case "+" :
1108
+ case "-" :
1109
+ intRet = 50;
1110
+ break;
1111
+ case "*" :
1112
+ case "/" :
1113
+ case "%" :
1114
+ intRet = 60;
1115
+ break;
1116
+ case "^" :
1117
+ intRet = 70;
1118
+ break;
1119
+ case _UNARY_NEGATIVE:
1120
+ case _UNARY_NEGATION:
1121
+ case "!" :
1122
+ case "NOT" :
1123
+ intRet = 100;
1124
+ break;
1125
+ case "(" :
1126
+ intRet = 1000;
1127
+ break;
1128
+ /*case "{" :
1129
+ intRet = 500; // as function
1130
+ break;*/
1131
+ case "AND" :
1132
+ case "&" :
1133
+ intRet = 35;
1134
+ break;
1135
+ case "OR" :
1136
+ case "|" :
1137
+ intRet = 30;
1138
+ break;
1139
+ case ">" :
1140
+ case ">=" :
1141
+ case "<" :
1142
+ case "<=" :
1143
+ case "=" :
1144
+ case "<>" :
1145
+ case "gt" :
1146
+ case "gte" :
1147
+ case "lt" :
1148
+ case "lte" :
1149
+ case "eq" :
1150
+ case "ne" :
1151
+ intRet = 40;
1152
+ break;
1153
+ default :
1154
+ if (token.isFunction)
1155
+ intRet = 500;
1156
+ else
1157
+ intRet = 0;
1158
+ break;
1159
+ }
1160
+ token.precedence=intRet;
1161
+ }
1162
+ else
1163
+ token.precedence=0;
1164
+
1165
+ //console.log(token);
1166
+ return token;
1167
+ };
1168
+
1169
+ var _EMPTY_TOKEN = _makeToken('', _TOKEN_TYPES.EMPTY_TOKEN);
1170
+ var _EMPTY_STRING = _makeToken('', _TOKEN_TYPES.STRING_LITERAL);
1171
+
1172
+ // public (static) methods
1173
+ return {
1174
+
1175
+ makeToken : _makeToken,
1176
+
1177
+ cloneToken : function(tok)
1178
+ {
1179
+ var newtok={};
1180
+
1181
+ for (var at in tok)
1182
+ {
1183
+ if (tok.hasOwnProperty(at))
1184
+ {
1185
+ if (_isDateInstance(tok[at]))
1186
+ newtok[at]=new Date(tok[at].getTime());
1187
+ else
1188
+ newtok[at]=tok[at];
1189
+ }
1190
+ }
1191
+ return newtok;
1192
+ },
1193
+
1194
+ TOKEN_TYPE : _TOKEN_TYPES,
1195
+
1196
+ EMPTY_TOKEN : _EMPTY_TOKEN,
1197
+
1198
+ EMPTY_STRING : _EMPTY_STRING,
1199
+
1200
+ UNARY_NEGATIVE : _makeToken(_UNARY_NEGATIVE, _TOKEN_TYPES.UNARY_NEGATIVE),
1201
+
1202
+ UNARY_NEGATION : _makeToken(_UNARY_NEGATION, _TOKEN_TYPES.UNARY_NEGATION),
1203
+
1204
+ ARG_TERMINAL : _makeToken(_ARG_TERMINAL, _TOKEN_TYPES.ARG_TERMINAL),
1205
+
1206
+ isBoolean : _isBoolean,
1207
+
1208
+ isNumber : _isNumber,
1209
+
1210
+ isString : function(a)
1211
+ {
1212
+ if (!_isDefined(a)) return false;
1213
+ var typeofa=typeof(a);
1214
+ if (_isNumber(a) || _isBoolean(a) || _isArrayInstance(a) || _isDateInstance(a) || _isRegExpInstance(a)) return false;
1215
+
1216
+ if (
1217
+ typeofa=='string' ||
1218
+ (
1219
+ typeofa=='object' &&
1220
+ ((a instanceof String) || Object.prototype.toString.call(a) === '[object String]')
1221
+ )
1222
+ )
1223
+ return true;
1224
+ return false;
1225
+ },
1226
+
1227
+ isDateInstance : _isDateInstance,
1228
+
1229
+ isArrayInstance : _isArrayInstance,
1230
+
1231
+ isRegExpInstance : _isRegExpInstance,
1232
+
1233
+ isDate : function(pstrVal, format, getDate)
1234
+ {
1235
+ if (!_isDefined(pstrVal))
1236
+ return false;
1237
+ if (_isDateInstance(pstrVal))
1238
+ {
1239
+ if (typeof(getDate)!='undefined')
1240
+ getDate.date=pstrVal;
1241
+ return true;
1242
+ }
1243
+ return DateParser.isDate(pstrVal, format, getDate);
1244
+ },
1245
+
1246
+ toArray : function(v)
1247
+ {
1248
+ if (_isArrayInstance(v))
1249
+ return v;
1250
+ else return [v];
1251
+ },
1252
+
1253
+ toNumber : function(pobjVal)
1254
+ {
1255
+ var dblRet = Number.NaN;
1256
+
1257
+ if (typeof(pobjVal) == "number")
1258
+ return pobjVal;
1259
+ else
1260
+ {
1261
+ dblRet = new Number(pobjVal);
1262
+ return dblRet.valueOf();
1263
+ }
1264
+ },
1265
+
1266
+ toBoolean : function(pobjVal)
1267
+ {
1268
+ var dblNo = Number.NaN;
1269
+ var strTmp = null;
1270
+
1271
+ if (pobjVal == null || pobjVal == undefined)
1272
+ throw "Boolean value is not defined!";
1273
+ else if (typeof(pobjVal) == "boolean")
1274
+ return pobjVal;
1275
+ else if (typeof(pobjVal) == "number")
1276
+ return (pobjVal != 0);
1277
+ else if (_isNumber(pobjVal))
1278
+ {
1279
+ dblNo = Tokenizer.toNumber(pobjVal);
1280
+ if (isNaN(dblNo))
1281
+ return null;
1282
+ else
1283
+ return (dblNo != 0);
1284
+ }
1285
+ else if (typeof(pobjVal) == "object")
1286
+ {
1287
+ strTmp = pobjVal.toString();
1288
+ if (strTmp.toUpperCase() == "TRUE")
1289
+ return true;
1290
+ else if (strTmp.toUpperCase() == "FALSE")
1291
+ return false;
1292
+ else
1293
+ return null;
1294
+ }
1295
+ else if (typeof(pobjVal) == "string")
1296
+ {
1297
+ if (pobjVal.toUpperCase() == "TRUE")
1298
+ return true;
1299
+ else if (pobjVal.toUpperCase() == "FALSE")
1300
+ return false;
1301
+ else
1302
+ return null;
1303
+ }
1304
+ else
1305
+ return null;
1306
+ },
1307
+
1308
+ Tokanize : function(pstrExpression)
1309
+ {
1310
+
1311
+ var intCntr, intBraces;
1312
+ var arrTokens;
1313
+ var intIndex, intPos;
1314
+ var chrChar, chrNext;
1315
+ var strToken, prevToken;
1316
+
1317
+ // build fast lookup maps
1318
+ _buildMaps();
1319
+
1320
+ intCntr = 0;
1321
+ intBraces = 0;
1322
+ intBrackets = 0;
1323
+ intIndex = 0;
1324
+ strToken = "";
1325
+ arrTokens = new Array();
1326
+ pstrExpression = _trim(pstrExpression);
1327
+ while (intCntr < pstrExpression.length)
1328
+ {
1329
+ prevToken = _EMPTY_TOKEN;
1330
+ chrChar = pstrExpression.substr(intCntr, 1);
1331
+ switch (chrChar)
1332
+ {
1333
+ case " " :
1334
+ if (strToken.length > 0)
1335
+ {
1336
+ arrTokens[intIndex] = _makeToken(strToken);
1337
+ intIndex++;
1338
+ strToken = "";
1339
+ }
1340
+ break;
1341
+ //case "{":
1342
+ case "(":
1343
+ //(chrChar=='(')?intBraces++:intBrackets++;
1344
+ intBraces++;
1345
+ if (strToken.length > 0)
1346
+ {
1347
+ arrTokens[intIndex] = _makeToken(strToken);
1348
+ intIndex++;
1349
+ strToken = "";
1350
+ }
1351
+ arrTokens[intIndex] = _makeToken(chrChar);
1352
+ intIndex++;
1353
+ break;
1354
+ //case "}" :
1355
+ case ")" :
1356
+ //(chrChar==')')?intBraces--:intBrackets--;
1357
+ intBraces--;
1358
+ if (strToken.length > 0)
1359
+ {
1360
+ arrTokens[intIndex] = _makeToken(strToken);
1361
+ intIndex++;
1362
+ strToken = "";
1363
+ }
1364
+ arrTokens[intIndex] = _makeToken(chrChar);
1365
+ intIndex++;
1366
+ break;
1367
+ case "^" :
1368
+ case "*" :
1369
+ case "/" :
1370
+ case "%" :
1371
+ case "&" :
1372
+ case "|" :
1373
+ case "," :
1374
+ case "!" :
1375
+ if (strToken.length > 0)
1376
+ {
1377
+ arrTokens[intIndex] = _makeToken(strToken);
1378
+ intIndex++;
1379
+ strToken = "";
1380
+ }
1381
+ arrTokens[intIndex] = _makeToken(chrChar);
1382
+ intIndex++;
1383
+ break;
1384
+ case "-" :
1385
+ if (strToken.length > 0)
1386
+ {
1387
+ arrTokens[intIndex] = _makeToken(strToken);
1388
+ intIndex++;
1389
+ strToken = "";
1390
+ }
1391
+ chrNext = pstrExpression.substr(intCntr + 1, 1);
1392
+ if (arrTokens.length > 0)
1393
+ prevToken = arrTokens[intIndex - 1];
1394
+ if (/*intCntr == 0 ||*/((prevToken.isArithmeticOp ||
1395
+ prevToken.isLeftParen || prevToken.isComma) &&
1396
+ (_isDigit(chrNext) || chrNext == "(")))
1397
+ {
1398
+ // Negative Number
1399
+ strToken += chrChar;
1400
+ }
1401
+ else
1402
+ {
1403
+ arrTokens[intIndex] = _makeToken(chrChar);
1404
+ intIndex++;
1405
+ strToken = "";
1406
+ }
1407
+ break;
1408
+ case "+" :
1409
+ if (strToken.length > 0)
1410
+ {
1411
+ arrTokens[intIndex] = _makeToken(strToken);
1412
+ intIndex++;
1413
+ strToken = "";
1414
+ }
1415
+ chrNext = pstrExpression.substr(intCntr + 1, 1);
1416
+ if (arrTokens.length > 0)
1417
+ prevToken = arrTokens[intIndex - 1];
1418
+ if (/*intCntr == 0 ||*/ ((prevToken.isArithmeticOp ||
1419
+ prevToken.isLeftParen || prevToken.isComma) &&
1420
+ (_isDigit(chrNext) || chrNext == "(")))
1421
+ {
1422
+ // positive Number
1423
+ strToken += chrChar;
1424
+ }
1425
+ else
1426
+ {
1427
+ arrTokens[intIndex] = _makeToken(chrChar);
1428
+ intIndex++;
1429
+ strToken = "";
1430
+ }
1431
+ break;
1432
+ case "<" :
1433
+ chrNext = pstrExpression.substr(intCntr + 1, 1);
1434
+ if (strToken.length > 0)
1435
+ {
1436
+ arrTokens[intIndex] = _makeToken(strToken);
1437
+ intIndex++;
1438
+ strToken = "";
1439
+ }
1440
+ if (chrNext == "=")
1441
+ {
1442
+ arrTokens[intIndex] = _makeToken(chrChar + "=");
1443
+ intIndex++;
1444
+ intCntr++;
1445
+ }
1446
+ else if (chrNext == ">")
1447
+ {
1448
+ arrTokens[intIndex] = _makeToken(chrChar + ">");
1449
+ intIndex++;
1450
+ intCntr++;
1451
+ }
1452
+ else
1453
+ {
1454
+ arrTokens[intIndex] = _makeToken(chrChar);
1455
+ intIndex++;
1456
+ }
1457
+ break;
1458
+ case ">" :
1459
+ chrNext = pstrExpression.substr(intCntr + 1, 1);
1460
+ if (strToken.length > 0)
1461
+ {
1462
+ arrTokens[intIndex] = _makeToken(strToken);
1463
+ intIndex++;
1464
+ strToken = "";
1465
+ }
1466
+ if (chrNext == "=")
1467
+ {
1468
+ arrTokens[intIndex] = _makeToken(chrChar + "=");
1469
+ intIndex++;
1470
+ intCntr++;
1471
+ }
1472
+ else
1473
+ {
1474
+ arrTokens[intIndex] = _makeToken(chrChar);
1475
+ intIndex++;
1476
+ }
1477
+ break;
1478
+ case "=" :
1479
+ if (strToken.length > 0)
1480
+ {
1481
+ arrTokens[intIndex] = _makeToken(strToken);
1482
+ intIndex++;
1483
+ strToken = "";
1484
+ }
1485
+ arrTokens[intIndex] = _makeToken(chrChar);
1486
+ intIndex++;
1487
+ break;
1488
+ case "'" :
1489
+ case "\"" :
1490
+ if (strToken.length > 0)
1491
+ {
1492
+ arrTokens[intIndex] = _makeToken(strToken);
1493
+ intIndex++;
1494
+ strToken = "";
1495
+ }
1496
+
1497
+ intPos = pstrExpression.indexOf(chrChar, intCntr + 1);
1498
+ if (intPos < 0)
1499
+ throw "Unterminated string constant";
1500
+ else
1501
+ {
1502
+ strToken += pstrExpression.substring(intCntr + 1, intPos);
1503
+ strToken=new String(strToken);
1504
+ strToken._isStringLiteral=true;
1505
+ arrTokens[intIndex] = _makeToken(strToken);
1506
+ intIndex++;
1507
+ strToken = "";
1508
+ intCntr = intPos;
1509
+ }
1510
+ break;
1511
+ default :
1512
+ strToken += chrChar;
1513
+ break;
1514
+ }
1515
+ intCntr++;
1516
+ }
1517
+ if (intBraces > 0)
1518
+ throw "Unbalanced parenthesis!";
1519
+
1520
+ if (strToken.length > 0)
1521
+ arrTokens[intIndex] = _makeToken(strToken);
1522
+ return arrTokens;
1523
+ }
1524
+ }
1525
+ })(DateParser);
1526
+
1527
+ /*------------------------------------------------------------------------------
1528
+ * NAME : HandleFunctions
1529
+ * PURPOSE : Execute built-in functions
1530
+ * PARAMETERS : pstrTok - The current function name
1531
+ * pStack - Operand stack
1532
+ * RETURNS : Nothing, the result is pushed back onto the stack.
1533
+ *----------------------------------------------------------------------------*/
1534
+ function _HandleFunctions(pstrTok, pStack, pdtFormat, parrVars)
1535
+ {
1536
+ var varTmp, varTerm, varTerm2, objTmp, varFormat;
1537
+ var objOp1, objOp2, objFormat;
1538
+ var arrArgs;
1539
+ var intCntr;
1540
+
1541
+
1542
+
1543
+ if (!pstrTok.isFunction)
1544
+ throw "Unsupported function token [" + pstrTok.val + "]";
1545
+
1546
+ varTmp = pstrTok.val;
1547
+ arrArgs = new Array();
1548
+ varTerm = Tokenizer.ARG_TERMINAL;
1549
+ while ( !pStack.IsEmpty() )
1550
+ {
1551
+ varTerm = pStack.Pop();
1552
+ if (!varTerm.isArgTerminal)
1553
+ arrArgs[arrArgs.length] = varTerm;
1554
+ else
1555
+ break;
1556
+ }
1557
+
1558
+ // console.log( 'testing functions ', varTmp, arrArgs );
1559
+
1560
+ switch (varTmp)
1561
+ {
1562
+ case "ARRAY" :
1563
+ var arrArray=new Array();
1564
+
1565
+ objTmp = 0;
1566
+ intCntr = arrArgs.length;
1567
+ while (--intCntr >= 0)
1568
+ {
1569
+ varTerm = arrArgs[intCntr];
1570
+ if (varTerm.isVariable)
1571
+ {
1572
+ objTmp = parrVars[varTerm.val];
1573
+ if (objTmp == undefined || objTmp == null)
1574
+ throw "Variable [" + varTerm.val + "] not defined";
1575
+ else
1576
+ varTerm = objTmp;
1577
+ }
1578
+ arrArray=arrArray.concat(Tokenizer.toArray(varTerm.val));
1579
+ }
1580
+ pStack.Push(Tokenizer.makeToken(arrArray,Tokenizer.TOKEN_TYPE.ARRAY));
1581
+ break;
1582
+ case "TODAY" :
1583
+ pStack.Push(Tokenizer.makeToken(DateParser.currentDate(), Tokenizer.TOKEN_TYPE.DATE));
1584
+ break;
1585
+ case "ACOS" :
1586
+ case "ASIN" :
1587
+ case "ATAN" :
1588
+ throw "Function [" + varTmp + "] is not implemented!";
1589
+ break;
1590
+ case "ABS" :
1591
+ case "CHR" :
1592
+ case "COS" :
1593
+ case "FIX" :
1594
+ case "HEX" :
1595
+ case "LOG" :
1596
+ case "RAND" :
1597
+ case "ROUND" :
1598
+ case "SIN" :
1599
+ case "SQRT" :
1600
+ case "TAN" :
1601
+
1602
+ if (varTmp != "RAND")
1603
+ {
1604
+ if (arrArgs.length < 1)
1605
+ throw varTmp + " requires at least one argument!";
1606
+ else if (arrArgs.length > 1)
1607
+ throw varTmp + " requires only one argument!";
1608
+ }
1609
+ else
1610
+ {
1611
+ if (arrArgs.length < 1)
1612
+ throw varTmp + " requires at least one argument!";
1613
+ else if (arrArgs.length > 2)
1614
+ throw varTmp + " requires at most two arguments!";
1615
+ }
1616
+ varTerm = arrArgs[0];
1617
+ if (varTerm.isVariable)
1618
+ {
1619
+ objTmp = parrVars[varTerm.val];
1620
+ if (objTmp == undefined || objTmp == null)
1621
+ throw "Variable [" + varTerm.val + "] not defined";
1622
+ else
1623
+ varTerm = objTmp;
1624
+ }
1625
+
1626
+ objTmp = varTerm.val;
1627
+
1628
+ if( varTerm.val !== 0 && !varTerm.val )
1629
+ throw varTmp + " operates on numeric operands only!";
1630
+
1631
+ else if ( isNaN( +varTerm.val ) )
1632
+ throw varTmp + " operates on numeric operands only!";
1633
+ else
1634
+ {
1635
+
1636
+ objTmp = Tokenizer.toNumber(varTerm.val);
1637
+ if (varTmp == "RAND")
1638
+ {
1639
+ rand_max=Math.floor(objTmp);
1640
+ if (arrArgs.length == 2)
1641
+ {
1642
+ varTerm = arrArgs[1];
1643
+ if (varTerm.isVariable)
1644
+ {
1645
+ objTmp = parrVars[varTerm.val];
1646
+ if (objTmp == undefined || objTmp == null)
1647
+ throw "Variable [" + varTerm.val + "] not defined";
1648
+ else
1649
+ varTerm = objTmp;
1650
+ }
1651
+
1652
+ if (!varTerm.isNumber)
1653
+ throw varTmp + " operates on numeric operands only!";
1654
+
1655
+ objTmp = Tokenizer.toNumber(varTerm.val);
1656
+
1657
+ rand_min=Math.floor(objTmp);
1658
+ }
1659
+ }
1660
+ }
1661
+
1662
+ if (varTmp == "ABS")
1663
+ pStack.Push(Tokenizer.makeToken(Math.abs(objTmp),Tokenizer.TOKEN_TYPE.NUMBER));
1664
+ else if (varTmp == "CHR"){
1665
+ // TODO check what happens when $objTmp is empty; what does fromCharCode() return?
1666
+
1667
+ pStack.Push(Tokenizer.makeToken(String.fromCharCode(objTmp),Tokenizer.TOKEN_TYPE.STRING_LITERAL));
1668
+ }
1669
+ else if (varTmp == "COS")
1670
+ pStack.Push(Tokenizer.makeToken(Math.cos(objTmp),Tokenizer.TOKEN_TYPE.NUMBER));
1671
+ else if (varTmp == "FIX")
1672
+ pStack.Push(Tokenizer.makeToken(Math.floor(objTmp),Tokenizer.TOKEN_TYPE.NUMBER));
1673
+ else if (varTmp == "HEX")
1674
+ pStack.Push(Tokenizer.makeToken(objTmp.toString(16),Tokenizer.TOKEN_TYPE.STRING_LITERAL));
1675
+ else if (varTmp == "LOG")
1676
+ pStack.Push(Tokenizer.makeToken(Math.log(objTmp),Tokenizer.TOKEN_TYPE.NUMBER));
1677
+ else if (varTmp == "RAND")
1678
+ pStack.Push(Tokenizer.makeToken(Math.round(rand_min+(rand_max-rand_min)*Math.random()),Tokenizer.TOKEN_TYPE.NUMBER));
1679
+ else if (varTmp == "ROUND")
1680
+ pStack.Push(Tokenizer.makeToken(Math.round(objTmp),Tokenizer.TOKEN_TYPE.NUMBER));
1681
+ else if (varTmp == "SIN")
1682
+ pStack.Push(Tokenizer.makeToken(Math.sin(objTmp),Tokenizer.TOKEN_TYPE.NUMBER));
1683
+ else if (varTmp == "SQRT")
1684
+ pStack.Push(Tokenizer.makeToken(Math.sqrt(objTmp),Tokenizer.TOKEN_TYPE.NUMBER));
1685
+ else if (varTmp == "TAN")
1686
+ pStack.Push(Tokenizer.makeToken(Math.tan(objTmp),Tokenizer.TOKEN_TYPE.NUMBER));
1687
+ break;
1688
+ case "STR" :
1689
+ if (arrArgs.length < 1)
1690
+ throw varTmp + " requires at least one argument!";
1691
+ else if (arrArgs.length > 2)
1692
+ throw varTmp + " requires at most two arguments!";
1693
+ varTerm = arrArgs[arrArgs.length-1];
1694
+ if (varTerm.isVariable)
1695
+ {
1696
+ objTmp = parrVars[varTerm.val];
1697
+ if (objTmp == undefined || objTmp == null)
1698
+ throw "Variable [" + varTerm.val + "] not defined";
1699
+ else
1700
+ varTerm = objTmp;
1701
+ }
1702
+ // if date, output formated date string
1703
+ if (varTerm.isDate)
1704
+ {
1705
+ var format='';
1706
+ if (arrArgs.length==2)
1707
+ {
1708
+ varFormat = arrArgs[0];
1709
+ if (varFormat.isVariable)
1710
+ {
1711
+ objTmp = parrVars[varFormat.val];
1712
+ if (objTmp == undefined || objTmp == null)
1713
+ throw "Variable [" + varFormat.val + "] not defined";
1714
+ else
1715
+ varFormat = objTmp;
1716
+ }
1717
+
1718
+ if (!varFormat.isStringLiteral)
1719
+ throw "format argument for " + varTmp + " must be a string!";
1720
+ format=varFormat.val;
1721
+ }
1722
+ pStack.Push(Tokenizer.makeToken(DateParser.formatDate(varTerm.val, format),Tokenizer.TOKEN_TYPE.STRING_LITERAL));
1723
+ }
1724
+ else // just convert to string
1725
+ pStack.Push(Tokenizer.makeToken(varTerm.val.toString(),Tokenizer.TOKEN_TYPE.STRING_LITERAL));
1726
+ break;
1727
+ case "ASC" :
1728
+
1729
+ if (arrArgs.length > 1)
1730
+ throw varTmp + " requires only one argument!";
1731
+ else if (arrArgs.length < 1)
1732
+ throw varTmp + " requires at least one argument!";
1733
+ varTerm = arrArgs[0];
1734
+ if (varTerm.isVariable)
1735
+ {
1736
+ objTmp = parrVars[varTerm.val];
1737
+ if (objTmp == undefined || objTmp == null)
1738
+ throw "Variable [" + varTerm.val + "] not defined";
1739
+ else
1740
+ varTerm = objTmp;
1741
+ }
1742
+ if( varTerm.isNumber )
1743
+ {
1744
+ varTerm.val = varTerm.val.toString();
1745
+ varTerm.isStringLiteral = true;
1746
+ }
1747
+
1748
+ if (!varTerm.isStringLiteral)
1749
+ throw varTmp + " requires a string type operand!";
1750
+ else
1751
+ {
1752
+ if ( varTerm.val ) {
1753
+ pStack.Push(Tokenizer.makeToken(varTerm.val.charCodeAt(0),Tokenizer.TOKEN_TYPE.NUMBER));
1754
+ } else {
1755
+ pStack.Push(Tokenizer.makeToken(0,Tokenizer.TOKEN_TYPE.NUMBER));
1756
+ }
1757
+ }
1758
+ break;
1759
+ case "REGEX" :
1760
+ if (arrArgs.length < 1)
1761
+ throw varTmp + " requires at least one argument!";
1762
+ else if (arrArgs.length > 2)
1763
+ throw varTmp + " requires at most two arguments!";
1764
+
1765
+ varTerm = arrArgs[arrArgs.length-1];
1766
+ if (varTerm.isVariable)
1767
+ {
1768
+ objTmp = parrVars[varTerm.val];
1769
+ if (objTmp == undefined || objTmp == null)
1770
+ throw "Variable [" + varTerm.val + "] not defined";
1771
+ else
1772
+ varTerm = objTmp;
1773
+ }
1774
+
1775
+ if (!varTerm.isStringLiteral)
1776
+ throw varTmp + " operates on string type operands!";
1777
+
1778
+ var opts=Tokenizer.EMPTY_STRING;
1779
+ if (arrArgs.length==2)
1780
+ {
1781
+ opts = arrArgs[0];
1782
+ if (opts.isVariable)
1783
+ {
1784
+ objTmp = parrVars[opts.val];
1785
+ if (objTmp == undefined || objTmp == null)
1786
+ throw "Variable [" + opts.val + "] not defined";
1787
+ else
1788
+ opts = objTmp;
1789
+ }
1790
+
1791
+ if (!opts.isStringLiteral)
1792
+ throw varTmp + " operates on string type operands!";
1793
+ }
1794
+ pStack.Push(Tokenizer.makeToken(Functions.Regex(varTerm.val.toString(), opts.val.toString()),Tokenizer.TOKEN_TYPE.REGEX));
1795
+ break;
1796
+ case "LCASE" :
1797
+ case "UCASE" :
1798
+ case "NUM" :
1799
+
1800
+ if (arrArgs.length < 1)
1801
+ throw varTmp + " requires at least one argument!";
1802
+ else if (arrArgs.length > 1)
1803
+ throw varTmp + " requires only one argument!";
1804
+
1805
+ varTerm = arrArgs[0];
1806
+ if (varTerm.isVariable)
1807
+ {
1808
+ objTmp = parrVars[varTerm.val];
1809
+ if (objTmp == undefined || objTmp == null)
1810
+ throw "Variable [" + varTerm.val + "] not defined";
1811
+ else
1812
+ varTerm = objTmp;
1813
+ }
1814
+
1815
+ if( varTerm.isNumber )
1816
+ {
1817
+ varTerm.val = varTerm.val.toString();
1818
+ varTerm.isStringLiteral = true;
1819
+ }
1820
+
1821
+ if (!varTerm.isStringLiteral && varTmp != "NUM")
1822
+ throw varTmp + " requires a string type operand!";
1823
+ else
1824
+ {
1825
+ if (varTmp == "LCASE")
1826
+ {
1827
+ pStack.Push(Tokenizer.makeToken(varTerm.val.toLowerCase(),Tokenizer.TOKEN_TYPE.STRING_LITERAL));
1828
+ }
1829
+ else if (varTmp == "UCASE")
1830
+ {
1831
+ pStack.Push(Tokenizer.makeToken(varTerm.val.toUpperCase(),Tokenizer.TOKEN_TYPE.STRING_LITERAL));
1832
+ }
1833
+ else if (varTmp == "NUM")
1834
+ {
1835
+ objTmp=Tokenizer.toNumber(varTerm.val)+0.0;
1836
+ if (isNaN(objTmp))
1837
+ throw varTmp + " cannot convert [" + varTerm.val + "] to number!";
1838
+ pStack.Push(Tokenizer.makeToken(objTmp,Tokenizer.TOKEN_TYPE.NUMBER));
1839
+ }
1840
+ }
1841
+ break;
1842
+ case "LEN" :
1843
+ if (arrArgs.length < 1)
1844
+ throw varTmp + " requires at least one argument!";
1845
+ else if (arrArgs.length > 1)
1846
+ throw varTmp + " requires only one argument!";
1847
+
1848
+ varTerm = arrArgs[0];
1849
+ if (varTerm.isVariable)
1850
+ {
1851
+ objTmp = parrVars[varTerm.val];
1852
+ if (objTmp == undefined || objTmp == null)
1853
+ throw "Variable [" + varTerm.val + "] not defined";
1854
+ else
1855
+ varTerm = objTmp;
1856
+ }
1857
+
1858
+ if (!varTerm.isArray && !varTerm.isStringLiteral)
1859
+ throw varTmp + " requires a string or array type operand!";
1860
+ else
1861
+ {
1862
+ pStack.Push(Tokenizer.makeToken(varTerm.val.length,Tokenizer.TOKEN_TYPE.NUMBER));
1863
+ }
1864
+ break;
1865
+ case "USER" :
1866
+ if (arrArgs.length < 1)
1867
+ throw varTmp + " requires at least one argument!";
1868
+ else if (arrArgs.length > 1)
1869
+ throw varTmp + " requires only one argument!";
1870
+
1871
+ varTerm = arrArgs[0];
1872
+ if (varTerm.isVariable)
1873
+ {
1874
+ objTmp = parrVars[varTerm.val];
1875
+ if (objTmp == undefined || objTmp == null)
1876
+ throw "Variable [" + varTerm.val + "] not defined";
1877
+ else
1878
+ varTerm = objTmp;
1879
+ }
1880
+
1881
+ if (!varTerm.isStringLiteral)
1882
+ throw varTmp + " requires a string type operand!";
1883
+ else
1884
+ {
1885
+ pStack.Push(Tokenizer.makeToken(Functions.User(varTerm.val),Tokenizer.TOKEN_TYPE.STRING_LITERAL));
1886
+ }
1887
+ break;
1888
+ case "COOKIE" :
1889
+ if (arrArgs.length < 1)
1890
+ throw varTmp + " requires at least one argument!";
1891
+ else if (arrArgs.length > 1)
1892
+ throw varTmp + " requires only one argument!";
1893
+
1894
+ varTerm = arrArgs[0];
1895
+ if (varTerm.isVariable)
1896
+ {
1897
+ objTmp = parrVars[varTerm.val];
1898
+ if (objTmp == undefined || objTmp == null)
1899
+ throw "Variable [" + varTerm.val + "] not defined";
1900
+ else
1901
+ varTerm = objTmp;
1902
+ }
1903
+
1904
+ if (!varTerm.isStringLiteral)
1905
+ throw varTmp + " requires a string type operand!";
1906
+ else
1907
+ {
1908
+ //console.log(varTerm.val,varTerm.val.length);
1909
+ pStack.Push(Tokenizer.makeToken(Functions.Cookie(varTerm.val),Tokenizer.TOKEN_TYPE.STRING_LITERAL));
1910
+ }
1911
+ break;
1912
+ case "CONTAINS" :
1913
+ // console.log( 'testing functions ', varTmp, arrArgs );
1914
+ if (arrArgs.length < 2)
1915
+ throw varTmp + " requires at least two arguments!";
1916
+ else if (arrArgs.length > 2)
1917
+ throw varTmp + " requires only two arguments!";
1918
+
1919
+ varTerm = arrArgs[1];
1920
+ if (varTerm.isVariable)
1921
+ {
1922
+ objTmp = parrVars[varTerm.val];
1923
+ if (objTmp == undefined || objTmp == null)
1924
+ throw "Variable [" + varTerm.val + "] not defined";
1925
+ else
1926
+ varTerm = objTmp;
1927
+ }
1928
+ varTerm2 = arrArgs[0];
1929
+ if (varTerm2.isVariable)
1930
+ {
1931
+ objTmp = parrVars[varTerm2.val];
1932
+ if (objTmp == undefined || objTmp == null)
1933
+ throw "Variable [" + varTerm2.val + "] not defined";
1934
+ else
1935
+ varTerm2 = objTmp;
1936
+ }
1937
+
1938
+ if ( !varTerm.isArray )
1939
+ throw varTmp + " requires an array as first argument!";
1940
+ else
1941
+ {
1942
+ var found=false;
1943
+ /*var ii=varTerm.val.length;
1944
+ while(--ii>=0)
1945
+ {
1946
+ if (varTerm.val[ii]==varTerm2.val)
1947
+ {
1948
+ found=true;
1949
+ break;
1950
+ }
1951
+ }*/
1952
+ found=Functions.Contains(varTerm.val, varTerm2.val);
1953
+ pStack.Push(Tokenizer.makeToken(found,Tokenizer.TOKEN_TYPE.BOOLEAN));
1954
+ }
1955
+ break;
1956
+ case "DATE" :
1957
+ if (arrArgs.length < 2)
1958
+ throw varTmp + " requires at least two arguments!";
1959
+ else if (arrArgs.length > 2)
1960
+ throw varTmp + " requires only two arguments!";
1961
+
1962
+ varTerm = arrArgs[1];
1963
+ if (varTerm.isVariable)
1964
+ {
1965
+ objTmp = parrVars[varTerm.val];
1966
+ if (objTmp == undefined || objTmp == null)
1967
+ throw "Variable [" + varTerm.val + "] not defined";
1968
+ else
1969
+ varTerm = objTmp;
1970
+ }
1971
+ varFormat = arrArgs[0];
1972
+ if (varFormat.isVariable)
1973
+ {
1974
+ objFormat = parrVars[varFormat.val];
1975
+ if (objFormat == undefined || objFormat == null)
1976
+ throw "Variable [" + varFormat.val + "] not defined";
1977
+ else
1978
+ varFormat = objFormat;
1979
+ }
1980
+
1981
+ var dateobj={};
1982
+ if (
1983
+ (!varTerm.isStringLiteral) ||
1984
+ (!varFormat.isStringLiteral)
1985
+ )
1986
+ throw varTmp + " requires string type operands!";
1987
+ else if (!Tokenizer.isDate(varTerm.val, varFormat.val, dateobj))
1988
+ throw varTmp + " can not convert [" + varTerm.val + "] to a valid date with format [" + varFormat.val + "]!";
1989
+ else
1990
+ {
1991
+ if (dateobj.date)
1992
+ pStack.Push(Tokenizer.makeToken(dateobj.date,Tokenizer.TOKEN_TYPE.DATE));
1993
+ else
1994
+ throw varTmp + " unknown error";
1995
+ }
1996
+ break;
1997
+ case "empty":
1998
+ case "EMPTY":
1999
+ if (arrArgs.length < 1)
2000
+ throw varTmp + " requires at least one arguments!";
2001
+ else if (arrArgs.length > 1)
2002
+ throw varTmp + " requires only one arguments!";
2003
+
2004
+ varFormat = arrArgs[0];
2005
+
2006
+
2007
+ if( varFormat.isEmpty === true )
2008
+ {
2009
+ pStack.Push( Tokenizer.makeToken(true,Tokenizer.TOKEN_TYPE.BOOLEAN) );
2010
+ }
2011
+ else if( varFormat.isArray === true && varFormat.val.length === 0 )
2012
+ {
2013
+ pStack.Push( Tokenizer.makeToken(true,Tokenizer.TOKEN_TYPE.BOOLEAN) );
2014
+ }
2015
+ else if( varFormat.isStringLiteral === true && varFormat.val === "" )
2016
+ {
2017
+ pStack.Push( Tokenizer.makeToken(true,Tokenizer.TOKEN_TYPE.BOOLEAN) );
2018
+ }
2019
+ else if( varFormat.isDate && !varFormat.val )
2020
+ {
2021
+ pStack.Push( Tokenizer.makeToken(true,Tokenizer.TOKEN_TYPE.BOOLEAN) );
2022
+ }
2023
+ else
2024
+ {
2025
+ pStack.Push( Tokenizer.makeToken(false,Tokenizer.TOKEN_TYPE.BOOLEAN) );
2026
+ }
2027
+
2028
+
2029
+ break;
2030
+ case "LEFT" :
2031
+ case "RIGHT" :
2032
+ if (arrArgs.length < 2)
2033
+ throw varTmp + " requires at least two arguments!";
2034
+ else if (arrArgs.length > 2)
2035
+ throw varTmp + " requires only two arguments!";
2036
+
2037
+ for (intCntr = 0; intCntr < arrArgs.length; intCntr++)
2038
+ {
2039
+ varTerm = arrArgs[intCntr];
2040
+ if (varTerm.isVariable)
2041
+ {
2042
+ objTmp = parrVars[varTerm.val];
2043
+ if (objTmp == undefined || objTmp == null)
2044
+ throw "Variable [" + varTerm.val + "] not defined";
2045
+ else
2046
+ varTerm = objTmp;
2047
+ }
2048
+
2049
+ if( varTerm.isNumber )
2050
+ {
2051
+ arrArgs[1].val = arrArgs[1].val.toString()
2052
+ varTerm.isStringLiteral = true;
2053
+ }
2054
+
2055
+ if (intCntr == 0 && !varTerm.isNumber)
2056
+ throw varTmp + " operator requires numeric length!";
2057
+ else if (intCntr == 1 && !varTerm.isStringLiteral)
2058
+ throw varTmp + " operator requires a string operand!";
2059
+ arrArgs[intCntr] = varTerm;
2060
+ }
2061
+ varTerm = arrArgs[1].val.toString();
2062
+ objTmp = Tokenizer.toNumber(arrArgs[0].val);
2063
+ if (varTmp == "LEFT")
2064
+ {
2065
+ pStack.Push(Tokenizer.makeToken(varTerm.substring(0, objTmp),Tokenizer.TOKEN_TYPE.STRING_LITERAL));
2066
+ }
2067
+ else
2068
+ {
2069
+ pStack.Push(Tokenizer.makeToken(varTerm.substr((varTerm.length - objTmp), objTmp),Tokenizer.TOKEN_TYPE.STRING_LITERAL));
2070
+ }
2071
+ break;
2072
+ case "MID" :
2073
+ case "IIF" :
2074
+
2075
+ if (arrArgs.length < 3)
2076
+ throw varTmp + " requires at least three arguments!";
2077
+ else if (arrArgs.length > 3)
2078
+ throw varTmp + " requires only three arguments!";
2079
+
2080
+
2081
+
2082
+ for (intCntr = 0; intCntr < arrArgs.length; intCntr++)
2083
+ {
2084
+ varTerm = arrArgs[intCntr];
2085
+ if (varTerm.isVariable)
2086
+ {
2087
+ objTmp = parrVars[varTerm.val];
2088
+ if (objTmp == undefined || objTmp == null)
2089
+ throw "Variable [" + varTerm.val + "] not defined";
2090
+ else
2091
+ varTerm = objTmp;
2092
+ }
2093
+
2094
+ if( varTerm.isNumber )
2095
+ {
2096
+ arrArgs[2].val = arrArgs[2].val.toString()
2097
+ varTerm.isStringLiteral = true;
2098
+ }
2099
+
2100
+ if (varTmp == "MID" && intCntr <= 1 && !varTerm.isNumber)
2101
+ throw varTmp + " operator requires numeric lengths!";
2102
+ else if (varTmp == "MID" && intCntr == 2 && !varTerm.isStringLiteral)
2103
+ throw varTmp + " operator requires a string input!";
2104
+ //else if (varTmp == "IIF" && intCntr == 2 && !varTerm.isBoolean && !varTerm.isNumber)
2105
+ //throw varTmp + " operator requires boolean condition!";
2106
+ arrArgs[intCntr] = varTerm;
2107
+ }
2108
+ if (varTmp == "MID")
2109
+ {
2110
+ varTerm = arrArgs[2].val.toString();
2111
+ objOp1 = Tokenizer.toNumber(arrArgs[1].val);
2112
+ objOp2 = Tokenizer.toNumber(arrArgs[0].val);
2113
+ pStack.Push(Tokenizer.makeToken(varTerm.substring(objOp1, objOp2),Tokenizer.TOKEN_TYPE.STRING_LITERAL));
2114
+ }
2115
+ else
2116
+ {
2117
+
2118
+ varTerm = Tokenizer.toBoolean(arrArgs[2].val);
2119
+
2120
+ if (varTerm)
2121
+ {
2122
+ objOp1 = arrArgs[1];
2123
+ }
2124
+
2125
+ else
2126
+ {
2127
+ objOp1 = arrArgs[0];
2128
+ }
2129
+
2130
+ pStack.Push(objOp1);
2131
+ }
2132
+ break;
2133
+ case "AVG" :
2134
+ case "MAX" :
2135
+ case "MIN" :
2136
+ if (arrArgs.length < 1)
2137
+ throw varTmp + " requires at least one operand!";
2138
+
2139
+ var _arr=[];
2140
+ intCntr = arrArgs.length;
2141
+ while (--intCntr>=0)
2142
+ {
2143
+ varTerm = arrArgs[intCntr];
2144
+ if (varTerm.isVariable)
2145
+ {
2146
+ objTmp = parrVars[varTerm.val];
2147
+ if (objTmp == undefined || objTmp == null)
2148
+ throw "Variable [" + varTerm.val + "] not defined";
2149
+ else
2150
+ varTerm = objTmp;
2151
+ }
2152
+
2153
+ if( jQuery.isArray( varTerm.val ) )
2154
+ {
2155
+ varTerm.isArray = true;
2156
+ }
2157
+ else if( varTerm.val !== '' || isNaN( +varTerm.val ) === false )
2158
+ {
2159
+ varTerm.isNumber = true;
2160
+ }
2161
+
2162
+ if (!varTerm.isNumber && !varTerm.isArray)
2163
+ throw varTmp + " requires numeric or array operands only!";
2164
+
2165
+ if (!varTerm.isArray)
2166
+ _arr=_arr.concat(Tokenizer.toArray(Tokenizer.toNumber(varTerm.val)));
2167
+ else
2168
+ _arr=_arr.concat(varTerm.val);
2169
+ }
2170
+ intCntr = -1;
2171
+ objTmp = 0;
2172
+ while (++intCntr < _arr.length)
2173
+ {
2174
+ varTerm = _arr[intCntr];
2175
+ if (varTmp == "AVG")
2176
+ objTmp += varTerm;
2177
+ else if (varTmp == "MAX")
2178
+ {
2179
+ if (intCntr == 0)
2180
+ objTmp = varTerm;
2181
+ else if (objTmp < varTerm)
2182
+ objTmp = varTerm;
2183
+ }
2184
+ else if (varTmp == "MIN")
2185
+ {
2186
+ if (intCntr == 0)
2187
+ objTmp = varTerm;
2188
+ else if (objTmp > varTerm)
2189
+ objTmp = varTerm;
2190
+ }
2191
+ }
2192
+ if (varTmp == "AVG" && _arr.length)
2193
+ pStack.Push(Tokenizer.makeToken(objTmp/_arr.length,Tokenizer.TOKEN_TYPE.NUMBER));
2194
+ else if (varTmp == "AVG")
2195
+ pStack.Push(Tokenizer.makeToken(0,Tokenizer.TOKEN_TYPE.NUMBER));
2196
+ else
2197
+ pStack.Push(Tokenizer.makeToken(objTmp,Tokenizer.TOKEN_TYPE.NUMBER));
2198
+ break;
2199
+ }
2200
+ };
2201
+
2202
+ /*------------------------------------------------------------------------------
2203
+ * NAME : InFixToPostFix
2204
+ * PURPOSE : Convert an Infix expression into a postfix (RPN) equivalent
2205
+ * PARAMETERS : Infix expression element array
2206
+ * RETURNS : array containing postfix expression element tokens
2207
+ *----------------------------------------------------------------------------*/
2208
+ function _InFixToPostFix(arrToks)
2209
+ {
2210
+ //console.log('post');
2211
+ var myStack;
2212
+ var intCntr, intIndex;
2213
+ var strTok, strTop, strNext, strPrev;
2214
+ var blnStart;
2215
+
2216
+ blnStart = false;
2217
+ intIndex = 0;
2218
+ arrPFix = new Array();
2219
+ myStack = new Stack();
2220
+
2221
+ // Infix to postfix converter
2222
+ for (intCntr = 0; intCntr < arrToks.length; intCntr++)
2223
+ {
2224
+ //console.log(arrPFix);
2225
+ //console.log(myStack.toString());
2226
+ strTok = arrToks[intCntr];
2227
+ switch (strTok.type)
2228
+ {
2229
+ case Tokenizer.TOKEN_TYPE.LEFT_PAREN :
2230
+ if (myStack.Size() > 0 && myStack.Get(0).isFunction)
2231
+ {
2232
+ arrPFix[intIndex] = Tokenizer.ARG_TERMINAL;
2233
+ intIndex++;
2234
+ }
2235
+ myStack.Push(strTok);
2236
+ break;
2237
+ case Tokenizer.TOKEN_TYPE.RIGHT_PAREN :
2238
+ blnStart = true;
2239
+ while (!myStack.IsEmpty())
2240
+ {
2241
+ strTok = myStack.Pop();
2242
+ if (!strTok.isLeftParen)
2243
+ {
2244
+ arrPFix[intIndex] = strTok;
2245
+ intIndex++;
2246
+ }
2247
+ else
2248
+ {
2249
+ blnStart = false;
2250
+ break;
2251
+ }
2252
+ }
2253
+ if (myStack.IsEmpty() && blnStart)
2254
+ throw "Unbalanced parenthesis!";
2255
+ break;
2256
+ case Tokenizer.TOKEN_TYPE.COMMA :
2257
+ while (!myStack.IsEmpty())
2258
+ {
2259
+ strTok = myStack.Get(0);
2260
+ if (strTok.isLeftParen) break;
2261
+ arrPFix[intIndex] = myStack.Pop();
2262
+ intIndex++;
2263
+ }
2264
+ break;
2265
+ //case Tokenizer.TOKEN_TYPE.UNARY_NEGATIVE :
2266
+ //case Tokenizer.TOKEN_TYPE.UNARY_NEGATION :
2267
+ case Tokenizer.TOKEN_TYPE.ARITHMETIC_OP :
2268
+ case Tokenizer.TOKEN_TYPE.LOGICAL_OP :
2269
+ case Tokenizer.TOKEN_TYPE.COMPARISON_OP :
2270
+ switch (strTok.val)
2271
+ {
2272
+ /*case "-" :
2273
+ case "+" :
2274
+ case "NOT" :
2275
+ case "!" :
2276
+ case "^" :
2277
+ case "*" :
2278
+ case "/" :
2279
+ case "%" :
2280
+ case "AND" :
2281
+ case "&" :
2282
+ case "OR" :
2283
+ case "|" :
2284
+ case ">" :
2285
+ case "<" :
2286
+ case "=" :
2287
+ case ">=" :
2288
+ case "<=" :
2289
+ case "<>" :*/
2290
+ default:
2291
+ if (strTok.val=='-')
2292
+ {
2293
+ // check for unary negative operator.
2294
+ strPrev = null;
2295
+ if (intCntr > 0)
2296
+ strPrev = arrToks[intCntr - 1];
2297
+ strNext = arrToks[intCntr + 1];
2298
+ if (strPrev == null || strPrev.isArithmeticOp || strPrev.isLeftParen || strPrev.isComma)
2299
+ {
2300
+ strTok = Tokenizer.UNARY_NEGATIVE;
2301
+ }
2302
+ }
2303
+ if (strTok.val=='+')
2304
+ {
2305
+ // check for unary + addition operator, we need to ignore this.
2306
+ strPrev = null;
2307
+ if (intCntr > 0)
2308
+ strPrev = arrToks[intCntr - 1];
2309
+ strNext = arrToks[intCntr + 1];
2310
+ if (strPrev == null || strPrev.isArithmeticOp || strPrev.isLeftParen || strPrev.isComma)
2311
+ {
2312
+ break;
2313
+ }
2314
+ }
2315
+ strTop = Tokenizer.EMPTY_TOKEN;
2316
+ if (!myStack.IsEmpty()) strTop = myStack.Get(0);
2317
+ if (myStack.IsEmpty() || (!myStack.IsEmpty() && strTop.isLeftParen))
2318
+ {
2319
+ myStack.Push(strTok);
2320
+ }
2321
+ else if (strTok.precedence >= strTop.precedence)
2322
+ {
2323
+ myStack.Push(strTok);
2324
+ }
2325
+ else
2326
+ {
2327
+ // Pop operators with precedence >= operator strTok
2328
+ while (!myStack.IsEmpty())
2329
+ {
2330
+ strTop = myStack.Get(0);
2331
+ if (strTop.isLeftParen || strTop.precedence < strTok.precedence)
2332
+ {
2333
+ break;
2334
+ }
2335
+ else
2336
+ {
2337
+ arrPFix[intIndex] = myStack.Pop();
2338
+ intIndex++;
2339
+ }
2340
+ }
2341
+ myStack.Push(strTok);
2342
+ }
2343
+ break;
2344
+ }
2345
+ break;
2346
+ default :
2347
+ if (strTok.type!=Tokenizer.TOKEN_TYPE.FUNCTION)
2348
+ {
2349
+ arrPFix[intIndex] = strTok;
2350
+ intIndex++;
2351
+ }
2352
+ else
2353
+ {
2354
+ strTop = Tokenizer.EMPTY_TOKEN;
2355
+ if (!myStack.IsEmpty()) strTop = myStack.Get(0);
2356
+ if (myStack.IsEmpty() || (!myStack.IsEmpty() && strTop.isLeftParen))
2357
+ {
2358
+ myStack.Push(strTok);
2359
+ }
2360
+ else if (strTok.precedence >= strTop.precedence)
2361
+ {
2362
+ myStack.Push(strTok);
2363
+ }
2364
+ else
2365
+ {
2366
+ // Pop operators with precedence >= operator in strTok
2367
+ while (!myStack.IsEmpty())
2368
+ {
2369
+ strTop = myStack.Get(0);
2370
+ if (strTop.val == "(" || strTop.precedence < strTok.precedence)
2371
+ {
2372
+ break;
2373
+ }
2374
+ else
2375
+ {
2376
+ arrPFix[intIndex] = myStack.Pop();
2377
+ intIndex++;
2378
+ }
2379
+ }
2380
+ myStack.Push(strTok);
2381
+ }
2382
+ }
2383
+ break;
2384
+ }
2385
+ }
2386
+
2387
+ // Pop remaining operators from stack.
2388
+ while (!myStack.IsEmpty())
2389
+ {
2390
+ arrPFix[intIndex] = myStack.Pop();
2391
+ intIndex++;
2392
+ }
2393
+ //console.log(arrPFix);
2394
+ return arrPFix;
2395
+ };
2396
+
2397
+ // public methods
2398
+ return (function(Tokenizer,DateParser){
2399
+
2400
+ return {
2401
+ // delegate here
2402
+ setParams : function(params)
2403
+ {
2404
+ Functions.setParams(params);
2405
+ },
2406
+
2407
+ Expression : function(pstrExp)
2408
+ {
2409
+ var strInFix = null;
2410
+ var arrVars = [];
2411
+ var arrTokens = null;
2412
+ var arrPostFix = null;
2413
+ var dtFormat = "d/m/Y";
2414
+ var thiss=this;
2415
+
2416
+ if (typeof(pstrExp)!='undefined' && pstrExp)
2417
+ strInFix=pstrExp;
2418
+
2419
+ // public methods
2420
+ this.dateLocales=function(a,b,c){DateParser.setDateLocaleStrings(a,b,c); return thiss;}
2421
+ this.dateFormat = function(df){dtFormat = df; return thiss;};
2422
+ this.expression = function(exp){strInFix = exp; arrTokens=arrPostFix=null; return thiss;};
2423
+ this.addVar = function(_var){_AddNewVariable(_var, arrVars); return thiss;};
2424
+ this.parse = function(){arrPostFix=_ParseExpression(); return _dumpPostFix(arrPostFix);};
2425
+ this.eval = function(){return _EvaluateExpression(arrPostFix, arrVars);};
2426
+ this.reset = function(){arrVars = [];strInFix=arrTokens=arrPostFix=null; return thiss;};
2427
+ this.dump = function(){return _dumpPostFix(arrPostFix);};
2428
+ this.preCompile = function(_exp){if (typeof(_exp)=='undefined') _exp=strInFix; return _getPrecompiledExpression(_exp);};
2429
+
2430
+ function _AddNewVariable(varObj, varArr)
2431
+ {
2432
+ if (typeof(varArr)=='undefined')
2433
+ varArr = arrVars;
2434
+
2435
+ if (varArr == null || varArr == undefined)
2436
+ varArr = new Array();
2437
+
2438
+ varName=varObj.name;
2439
+ varToken=null;
2440
+ if (varObj.withType)
2441
+ {
2442
+ switch(varObj.withType)
2443
+ {
2444
+ case 'boolean':
2445
+ varToken=Tokenizer.makeToken(varObj.val,Tokenizer.TOKEN_TYPE.BOOLEAN); //Tokenizer.toBoolean(varObj.val);
2446
+ break;
2447
+ case 'number':
2448
+ varToken=Tokenizer.makeToken(varObj.val,Tokenizer.TOKEN_TYPE.NUMBER); //Tokenizer.toNumber(varObj.val);
2449
+ break;
2450
+ case 'array':
2451
+ varToken=Tokenizer.makeToken(varObj.val,Tokenizer.TOKEN_TYPE.ARRAY); //Tokenizer.toArray(varObj.val);
2452
+ break;
2453
+ case 'date':
2454
+ var format;
2455
+ if (varObj.format)
2456
+ format=varObj.format;
2457
+ else
2458
+ format=dtFormat;
2459
+ //varValue=DateParser.parseDate(varObj.val, format);
2460
+ varToken=Tokenizer.makeToken(DateParser.parseDate(varObj.val, format),Tokenizer.TOKEN_TYPE.DATE); //
2461
+ break;
2462
+ case 'string':
2463
+ default:
2464
+ varToken=Tokenizer.makeToken(varObj.val,Tokenizer.TOKEN_TYPE.STRING_LITERAL); //
2465
+ break;
2466
+ }
2467
+ }
2468
+ else
2469
+ varToken=Tokenizer.makeToken(varObj.val,Tokenizer.TOKEN_TYPE.STRING_LITERAL); //
2470
+
2471
+ varArr[varName] = varToken;
2472
+ }
2473
+
2474
+ function _dumpPostFix(pf)
2475
+ {
2476
+ var out='';
2477
+ for (var i=0; i<pf.length; i++)
2478
+ out+=pf[i].val+',';
2479
+ return out;
2480
+ }
2481
+
2482
+ function _clonePostFix(pf)
2483
+ {
2484
+ var newpf=new Array(pf.length);
2485
+ for (var i=0; i<pf.length; i++)
2486
+ newpf[i]=Tokenizer.cloneToken(pf[i]);
2487
+ return newpf;
2488
+ }
2489
+
2490
+ function _createFunction(myarrPostFix)
2491
+ {
2492
+ return function(vars)
2493
+ {
2494
+ // init internal closure vars
2495
+ var myvarsArray=[];
2496
+ // add user vars at run-time
2497
+ if (typeof(vars)!='undefined' && vars)
2498
+ {
2499
+ for (var i=0; i<vars.length; i++)
2500
+ _AddNewVariable(vars[i], myvarsArray);
2501
+ }
2502
+ //console.log(_dumpPostFix(myarrPostFix));
2503
+ // return evaluated result
2504
+ return _EvaluateExpression(_clonePostFix(myarrPostFix), myvarsArray);
2505
+ }
2506
+ }
2507
+
2508
+ function _getPrecompiledExpression(exp)
2509
+ {
2510
+ var myarrTokens = Tokenizer.Tokanize(exp);
2511
+ if (myarrTokens == null || myarrTokens == undefined)
2512
+ throw "Unable to tokanize the expression!";
2513
+ if (myarrTokens.length <= 0)
2514
+ throw "Unable to tokanize the expression!";
2515
+
2516
+ var myarrPostFix0 = _InFixToPostFix(myarrTokens);
2517
+ if (myarrPostFix0 == null || myarrPostFix0 == undefined)
2518
+ throw "Unable to convert the expression to postfix form!";
2519
+ if (myarrPostFix0.length <= 0)
2520
+ throw "Unable to convert the expression to postfix form!";
2521
+
2522
+ // return precompiled dynamic function
2523
+ return _createFunction(myarrPostFix0);
2524
+ }
2525
+
2526
+ function _ParseExpression()
2527
+ {
2528
+ arrTokens = Tokenizer.Tokanize(strInFix);
2529
+ if (arrTokens == null || arrTokens == undefined)
2530
+ throw "Unable to tokanize the expression!";
2531
+ if (arrTokens.length <= 0)
2532
+ throw "Unable to tokanize the expression!";
2533
+
2534
+ var myarrPostFix = _InFixToPostFix(arrTokens);
2535
+ if (myarrPostFix == null || myarrPostFix == undefined)
2536
+ throw "Unable to convert the expression to postfix form!";
2537
+ if (myarrPostFix.length <= 0)
2538
+ throw "Unable to convert the expression to postfix form!";
2539
+ return myarrPostFix;
2540
+ }
2541
+
2542
+ function _getVariable(strVarName, varArr)
2543
+ {
2544
+ var retVal;
2545
+
2546
+ if (typeof(varArr)=='undefined')
2547
+ varArr=arrVars;
2548
+
2549
+ if (varArr == null || varArr == undefined)
2550
+ throw "Variable values are not supplied!";
2551
+
2552
+ retVal = varArr[strVarName];
2553
+ if (typeof(varArr[strVarName])=='undefined' || retVal == undefined || retVal == null)
2554
+ throw "Variable [" + strVarName + "] not defined";
2555
+ return retVal;
2556
+ }
2557
+
2558
+ // postfix function evaluator
2559
+ function _EvaluateExpression(myarrPostFix, myvarArr)
2560
+ {
2561
+
2562
+ var intIndex;
2563
+ var myStack;
2564
+ var strTok, strOp;
2565
+ var objOp1, objOp2, objTmp1, objTmp2;
2566
+ var dblNo, dblVal1, dblVal2;
2567
+
2568
+ if (myarrPostFix == null || myarrPostFix == undefined)
2569
+ myarrPostFix=_ParseExpression();
2570
+ if (myarrPostFix.length == 0)
2571
+ throw "Unable to parse the expression!";
2572
+ if (myarrPostFix == null || myarrPostFix == undefined || myarrPostFix.length == 0)
2573
+ {
2574
+ throw "Invalid postfix expression!";
2575
+ return;
2576
+ }
2577
+
2578
+ intIndex = 0;
2579
+ myStack = new Stack();
2580
+ //console.log(myarrPostFix);
2581
+ while (intIndex < myarrPostFix.length)
2582
+ {
2583
+ //console.log(myStack.toString());
2584
+ strTok = myarrPostFix[intIndex];
2585
+ switch (strTok.type)
2586
+ {
2587
+ case Tokenizer.TOKEN_TYPE.ARG_TERMINAL :
2588
+ myStack.Push(strTok);
2589
+ break;
2590
+ case Tokenizer.TOKEN_TYPE.UNARY_NEGATIVE :
2591
+ if (myStack.IsEmpty())
2592
+ throw "No operand to negate!";
2593
+
2594
+ objOp1 = null;
2595
+ objOp2 = null;
2596
+ objOp1 = myStack.Pop();
2597
+ if (objOp1.isVariable)
2598
+ objOp1 = _getVariable(objOp1.val, myvarArr);
2599
+
2600
+ dblNo = Tokenizer.toNumber(objOp1.val);
2601
+ if (isNaN(dblNo))
2602
+ throw "Not a numeric value!";
2603
+ else
2604
+ {
2605
+ dblNo = (0 - dblNo);
2606
+ myStack.Push(Tokenizer.makeToken(dblNo,Tokenizer.TOKEN_TYPE.NUMBER));
2607
+ }
2608
+ break;
2609
+ case Tokenizer.TOKEN_TYPE.UNARY_NEGATION :
2610
+ if (myStack.IsEmpty())
2611
+ throw "No operand on stack!";
2612
+
2613
+ objOp1 = null;
2614
+ objOp2 = null;
2615
+ objOp1 = myStack.Pop();
2616
+ if (objOp1.isVariable)
2617
+ objOp1 = _getVariable(objOp1.val, myvarArr);
2618
+
2619
+ objOp1 = Tokenizer.toBoolean(objOp1.val);
2620
+ if (objOp1 == null)
2621
+ throw strTok.val + " applied not on a boolean value!";
2622
+ else
2623
+ myStack.Push(Tokenizer.makeToken(!(objOp1),Tokenizer.TOKEN_TYPE.BOOLEAN));
2624
+ break;
2625
+ case Tokenizer.TOKEN_TYPE.ARITHMETIC_OP :
2626
+ switch(strTok.val)
2627
+ {
2628
+ case "*" :
2629
+ case "/" :
2630
+ case "%" :
2631
+ case "^" :
2632
+ if (myStack.IsEmpty() || myStack.Size() < 2)
2633
+ throw "Stack is empty, can not perform [" + strTok.val + "]";
2634
+ objOp1 = null;
2635
+ objOp2 = null;
2636
+ objTmp = null;
2637
+ objOp2 = myStack.Pop();
2638
+ objOp1 = myStack.Pop();
2639
+ if (objOp1.isVariable)
2640
+ objOp1 = _getVariable(objOp1.val, myvarArr);
2641
+ if (objOp2.isVariable)
2642
+ objOp2 = _getVariable(objOp2.val, myvarArr);
2643
+
2644
+ if (!objOp1.iNumber || !objOp2.isNumber)
2645
+ throw "Either one of the operand is not a number can not perform [" + strTok.val + "]";
2646
+
2647
+ dblVal1 = Tokenizer.toNumber(objOp1.val);
2648
+ dblVal2 = Tokenizer.toNumber(objOp2.val);
2649
+ if (isNaN(dblVal1) || isNaN(dblVal2))
2650
+ throw "Either one of the operand is not a number can not perform [" + strTok.val + "]";
2651
+
2652
+ if (strTok.val == "^")
2653
+ myStack.Push(Tokenizer.makeToken(Math.pow(dblVal1, dblVal2),Tokenizer.TOKEN_TYPE.NUMBER));
2654
+ else if (strTok.val == "*")
2655
+ myStack.Push(Tokenizer.makeToken((dblVal1 * dblVal2),Tokenizer.TOKEN_TYPE.NUMBER));
2656
+ else if (strTok.val == "/")
2657
+ myStack.Push(Tokenizer.makeToken((dblVal1 / dblVal2),Tokenizer.TOKEN_TYPE.NUMBER));
2658
+ else
2659
+ myStack.Push(Tokenizer.makeToken((dblVal1 % dblVal2),Tokenizer.TOKEN_TYPE.NUMBER));
2660
+ break;
2661
+ case "+" :
2662
+ case "-" :
2663
+ if (myStack.IsEmpty() || myStack.Size() < 2)
2664
+ throw "Stack is empty, can not perform [" + strTok.val + "]";
2665
+
2666
+ objOp1 = null;
2667
+ objOp2 = null;
2668
+ objTmp1 = null;
2669
+ objTmp2 = null;
2670
+ strOp = ((strTok.val == "+") ? "Addition" : "Substraction");
2671
+ objOp2 = myStack.Pop();
2672
+ objOp1 = myStack.Pop();
2673
+ if (objOp1.isVariable)
2674
+ objOp1 = _getVariable(objOp1.val, myvarArr);
2675
+ if (objOp2.isVariable)
2676
+ objOp2 = _getVariable(objOp2.val, myvarArr);
2677
+
2678
+ if (objOp1.isNumber && objOp2.isNumber)
2679
+ {
2680
+ // Number addition
2681
+ dblVal1 = Tokenizer.toNumber(objOp1.val);
2682
+ dblVal2 = Tokenizer.toNumber(objOp2.val);
2683
+ if (strTok.val == "+")
2684
+ myStack.Push(Tokenizer.makeToken((dblVal1 + dblVal2),Tokenizer.TOKEN_TYPE.NUMBER));
2685
+ else
2686
+ myStack.Push(Tokenizer.makeToken((dblVal1 - dblVal2),Tokenizer.TOKEN_TYPE.NUMBER));
2687
+ }
2688
+ else if (objOp1.isStringLiteral && objOp2.isStringLiteral)
2689
+ {
2690
+ if (strTok.val == "+")
2691
+ myStack.Push(Tokenizer.makeToken((objOp1.val + objOp2.val),Tokenizer.TOKEN_TYPE.STRING_LITERAL));
2692
+ else
2693
+ throw strOp + " not supported for strings!"
2694
+ }
2695
+ else
2696
+ throw strOp + " not supported for other types than numbers and strings!"
2697
+ break;
2698
+ }
2699
+ break;
2700
+ case Tokenizer.TOKEN_TYPE.COMPARISON_OP :
2701
+ switch(strTok.val)
2702
+ {
2703
+ case "=" :
2704
+ case "<" :
2705
+ case ">" :
2706
+ case "<>" :
2707
+ case "<=" :
2708
+ case ">=" :
2709
+ case "eq" :
2710
+ case "lt" :
2711
+ case "gt" :
2712
+ case "ne" :
2713
+ case "lte" :
2714
+ case "gte" :
2715
+ if (myStack.IsEmpty() || myStack.Size() < 2)
2716
+ throw "Stack is empty, can not perform [" + strTok.val + "]";
2717
+ objOp1 = null;
2718
+ objOp2 = null;
2719
+ objTmp1 = null;
2720
+ objTmp2 = null;
2721
+ objOp2 = myStack.Pop();
2722
+ objOp1 = myStack.Pop();
2723
+
2724
+ if (objOp1.isVariable)
2725
+ objOp1 = _getVariable(objOp1.val, myvarArr);
2726
+ if (objOp2.isVariable)
2727
+ objOp2 = _getVariable(objOp2.val, myvarArr);
2728
+
2729
+ if (objOp1.isStringLiteral && objOp2.isNumber)
2730
+ {
2731
+ dblVal1 = objOp1.val.toString();
2732
+ dblVal2 = objOp2.val.toString();
2733
+ }
2734
+ else if (objOp1.isNumber && objOp2.isStringLiteral)
2735
+ {
2736
+ dblVal1 = objOp1.val.toString();
2737
+ dblVal2 = objOp2.val.toString();
2738
+ }
2739
+ else if (objOp1.isNumber && objOp2.isNumber)
2740
+ {
2741
+ dblVal1 = Tokenizer.toNumber(objOp1.val);
2742
+ dblVal2 = Tokenizer.toNumber(objOp2.val);
2743
+ }
2744
+ else if (objOp1.isNumber && objOp2.isBoolean)
2745
+ {
2746
+ dblVal1 = Tokenizer.toNumber(objOp1.val);
2747
+ dblVal2 = Tokenizer.toNumber(objOp2.val);
2748
+ }
2749
+ else if (objOp2.isNumber && objOp1.isBoolean)
2750
+ {
2751
+ dblVal1 = Tokenizer.toNumber(objOp1.val);
2752
+ dblVal2 = Tokenizer.toNumber(objOp2.val);
2753
+ }
2754
+ else if (objOp1.isDate && objOp2.isDate)
2755
+ {
2756
+ dblVal1 = objOp1.val.getTime();
2757
+ dblVal2 = objOp2.val.getTime();
2758
+ }
2759
+ else if (objOp1.isStringLiteral && objOp2.isStringLiteral)
2760
+ {
2761
+ dblVal1=objOp1.val.toString();
2762
+ dblVal2=objOp2.val.toString();
2763
+ /*
2764
+ if (!isNaN(dblVal1))
2765
+ {
2766
+ dblVal1=parseFloat(dblVal1);
2767
+ }
2768
+ if (!isNaN(dblVal2))
2769
+ {
2770
+ dblVal2=parseFloat(dblVal2);
2771
+ }
2772
+ dblVal1=parseFloat(objOp1.val.toString());
2773
+ dblVal2=parseFloat(objOp2.val.toString());
2774
+ */
2775
+ }
2776
+ else if (objOp1.isBoolean && objOp2.isBoolean)
2777
+ {
2778
+ if (strTok.val == "=" || strTok.val == "<>" || strTok.val == "eq" || strTok.val == "ne")
2779
+ {
2780
+ dblVal1 = Tokenizer.toBoolean(objOp1.val);
2781
+ dblVal2 = Tokenizer.toBoolean(objOp2.val);
2782
+ }
2783
+ else
2784
+ throw strTok.val + " not supported for boolean values!";
2785
+ }
2786
+ else if (
2787
+ (strTok.val=='=' || strTok.val=='<>' || strTok.val=='eq' || strTok.val=='ne') &&
2788
+ (objOp1.isStringLiteral && objOp2.isRegex)
2789
+ )
2790
+ {
2791
+ if (strTok.val=='=' || strTok.val=='eq')
2792
+ myStack.Push(Tokenizer.makeToken((objOp2.val.test(objOp1.val.toString())),Tokenizer.TOKEN_TYPE.BOOLEAN));
2793
+ else
2794
+ myStack.Push(Tokenizer.makeToken(!(objOp2.val.test(objOp1.val.toString())),Tokenizer.TOKEN_TYPE.BOOLEAN));
2795
+ break;
2796
+ }
2797
+ else if (
2798
+ (strTok.val=='=' || strTok.val=='<>' || strTok.val=='eq' || strTok.val=='ne') &&
2799
+ (objOp2.isStringLiteral && objOp1.isRegex)
2800
+ )
2801
+ {
2802
+ if (strTok.val=='=' || strTok.val=='eq')
2803
+ myStack.Push(Tokenizer.makeToken((objOp1.val.test(objOp2.val.toString())),Tokenizer.TOKEN_TYPE.BOOLEAN));
2804
+ else
2805
+ myStack.Push(Tokenizer.makeToken(!(objOp1.val.test(objOp2.val.toString())),Tokenizer.TOKEN_TYPE.BOOLEAN));
2806
+ break;
2807
+ }
2808
+ else if (
2809
+ (strTok.val=='=' || strTok.val=='<>' || strTok.val=='eq' || strTok.val=='ne') &&
2810
+ (objOp1.isArray && (objOp2.isStringLiteral || objOp2.isNumber))
2811
+ )
2812
+ {
2813
+ if (strTok.val=='=' || strTok.val=='eq')
2814
+ myStack.Push(Tokenizer.makeToken(Functions.Contains(objOp1.val,objOp2.val),Tokenizer.TOKEN_TYPE.BOOLEAN));
2815
+ else
2816
+ myStack.Push(Tokenizer.makeToken(!Functions.Contains(objOp1.val,objOp2.val),Tokenizer.TOKEN_TYPE.BOOLEAN));
2817
+ break;
2818
+ }
2819
+ else if (
2820
+ (strTok.val=='=' || strTok.val=='<>' || strTok.val=='eq' || strTok.val=='ne') &&
2821
+ (objOp2.isArray && (objOp1.isStringLiteral || objOp1.isNumber))
2822
+ )
2823
+ {
2824
+ if (strTok.val=='=' || strTok.val=='eq')
2825
+ myStack.Push(Tokenizer.makeToken(Functions.Contains(objOp2.val,objOp1.val),Tokenizer.TOKEN_TYPE.BOOLEAN));
2826
+ else
2827
+ myStack.Push(Tokenizer.makeToken(!Functions.Contains(objOp2.val,objOp1.val),Tokenizer.TOKEN_TYPE.BOOLEAN));
2828
+ break;
2829
+ }
2830
+ else
2831
+ throw "For " + strTok.val + " operator LHS & RHS should be of same data type!";
2832
+
2833
+ if (strTok.val=='=' || strTok.val=='eq')// TODO check here, might need to use === instead of ==
2834
+ myStack.Push(Tokenizer.makeToken((dblVal1 == dblVal2),Tokenizer.TOKEN_TYPE.BOOLEAN));
2835
+ else if (strTok.val == "<>" || strTok.val == "ne")// TODO check here, might need to use !== instead of !=
2836
+ myStack.Push(Tokenizer.makeToken((dblVal1 != dblVal2),Tokenizer.TOKEN_TYPE.BOOLEAN));
2837
+ else if (strTok.val == ">" || strTok.val == "gt")
2838
+ myStack.Push(Tokenizer.makeToken((dblVal1 > dblVal2),Tokenizer.TOKEN_TYPE.BOOLEAN));
2839
+ else if (strTok.val == "<" || strTok.val == "lt")
2840
+ myStack.Push(Tokenizer.makeToken((dblVal1 < dblVal2),Tokenizer.TOKEN_TYPE.BOOLEAN));
2841
+ else if (strTok.val == "<=" || strTok.val == "lte")
2842
+ myStack.Push(Tokenizer.makeToken((dblVal1 <= dblVal2),Tokenizer.TOKEN_TYPE.BOOLEAN));
2843
+ else if (strTok.val == ">=" || strTok.val == "gte")
2844
+ myStack.Push(Tokenizer.makeToken((dblVal1 >= dblVal2),Tokenizer.TOKEN_TYPE.BOOLEAN));
2845
+ break;
2846
+ }
2847
+ break;
2848
+ case Tokenizer.TOKEN_TYPE.LOGICAL_OP :
2849
+ switch(strTok.val)
2850
+ {
2851
+ case 'NOT' :
2852
+ case '!' :
2853
+ if (myStack.IsEmpty())
2854
+ throw "No operand on stack!";
2855
+
2856
+ objOp1 = null;
2857
+ objOp2 = null;
2858
+ objOp1 = myStack.Pop();
2859
+ if (objOp1.isVariable)
2860
+ objOp1 = _getVariable(objOp1.val, myvarArr);
2861
+
2862
+ objOp1 = Tokenizer.toBoolean(objOp1.val);
2863
+ if (objOp1 == null)
2864
+ throw strTok.val + " applied not on a boolean value!";
2865
+ else
2866
+ myStack.Push(Tokenizer.makeToken(!(objOp1),Tokenizer.TOKEN_TYPE.BOOLEAN));
2867
+ break;
2868
+ case "AND" :
2869
+ case "&" :
2870
+ case "OR" :
2871
+ case "|" :
2872
+ if (myStack.IsEmpty() || myStack.Size() < 2)
2873
+ throw "Stack is empty, can not perform [" + strTok.val + "]";
2874
+ objOp1 = null;
2875
+ objOp2 = null;
2876
+ objTmp1 = null;
2877
+ objTmp2 = null;
2878
+ objOp2 = myStack.Pop();
2879
+ objOp1 = myStack.Pop();
2880
+ if (objOp1.isVariable)
2881
+ objOp1 = _getVariable(objOp1.val, myvarArr);
2882
+ if (objOp2.isVariable)
2883
+ objOp2 = _getVariable(objOp2.val, myvarArr);
2884
+
2885
+ if (
2886
+ (objOp1.isBoolean && objOp2.isBoolean) ||
2887
+ (objOp1.isNumber && objOp2.isNumber) ||
2888
+ (objOp1.isNumber && objOp2.isBoolean) ||
2889
+ (objOp1.isBoolean && objOp2.isNumber)
2890
+ )
2891
+ {
2892
+ objTmp1 = Tokenizer.toBoolean(objOp1.val);
2893
+ objTmp2 = Tokenizer.toBoolean(objOp2.val);
2894
+ if (strTok.val == "AND" || strTok.val == "&")
2895
+ myStack.Push(Tokenizer.makeToken((objTmp1 && objTmp2),Tokenizer.TOKEN_TYPE.BOOLEAN));
2896
+ else if (strTok.val == "OR" || strTok.val == "|")
2897
+ myStack.Push(Tokenizer.makeToken((objTmp1 || objTmp2),Tokenizer.TOKEN_TYPE.BOOLEAN));
2898
+ }
2899
+ else
2900
+ throw "Logical operator requires LHS & RHS of boolean type!";
2901
+ break;
2902
+ }
2903
+ break;
2904
+ case Tokenizer.TOKEN_TYPE.FUNCTION :
2905
+ _HandleFunctions(strTok, myStack, dtFormat, myvarArr);
2906
+ break;
2907
+ default :
2908
+ myStack.Push(strTok);
2909
+ break;
2910
+ }
2911
+ intIndex++;
2912
+ }
2913
+ if (myStack.IsEmpty() || myStack.Size() > 1 || myStack.Get(0).isVariable)
2914
+ throw "Unable to evaluate expression!";
2915
+ else
2916
+ return myStack.Pop().val;
2917
+ }
2918
+ }
2919
+ };})(Tokenizer,DateParser);
2920
+ })(window);
2921
+
2922
+
2923
+ })(window);
embedded/toolset/toolset-common/expression-parser/parser.php ADDED
@@ -0,0 +1,2892 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ * Toolset Parser, advanced parser for arithmetic,logical and comparision expressions
5
+ * by Nikos M. <nikos.m@icanlocalize.com>
6
+ *
7
+ * Main Features:
8
+ * + user variables
9
+ * + support mathematical, and date functions
10
+ * + limited date parsing
11
+ *
12
+ * Additional Features:
13
+ * + typed tokens
14
+ * + typed user variables
15
+ * + added string literals
16
+ * + support advanced mathematical, string and date functions
17
+ * + support advanced date operations (like (date + 3 days) or (3 days=date1-date2)) (not yet)
18
+ * + support typecasting
19
+ * + can parse and format every localized PHP date format
20
+ * + precompilation of expressions into functions
21
+ * + faster, optimized code
22
+ * + use of closures for encapsulation and better access
23
+ * + heavy refactoring, and various bug fixes
24
+ *
25
+ * adapted to PHP form Toolset_Parser js version
26
+ * inspired by JS Expression Evaluator by Prasad P. Khandekar
27
+ *
28
+ **/
29
+
30
+ class Toolset_Regex
31
+ {
32
+ private $_regex='';
33
+
34
+ public function Toolset_Regex($rx,$opts='')
35
+ {
36
+ // remove flags not supported by PHP
37
+ $this->_regex='/'.$rx.'/'.str_replace('g','',$opts); // PHP does not support 'g' modifier
38
+ }
39
+
40
+ public function test($str)
41
+ {
42
+ return (preg_match($this->_regex,$str)==1);
43
+ }
44
+ }
45
+
46
+ class Toolset_Functions
47
+ {
48
+ private static $_cookies=null;
49
+ private static $_regexs=array();
50
+ private static $_params=array(
51
+ 'user'=>array(
52
+ 'ID'=>0,
53
+ 'role'=>'',
54
+ 'roles'=>array(),
55
+ 'login'=>'',
56
+ 'display_name'=>''
57
+ )
58
+ );
59
+
60
+ public static function setParams($params)
61
+ {
62
+ self::$_params=array_merge(self::$_params,$params);
63
+ }
64
+
65
+ public static function Cookie($name)
66
+ {
67
+ if (!isset($_cookies)) $_cookies=&$_COOKIE;
68
+
69
+ return (isset($_cookies[$name]))?$_cookies[$name]:'';
70
+ }
71
+
72
+ public static function User($att='')
73
+ {
74
+ $att=strtoupper($att);
75
+
76
+ switch ($att)
77
+ {
78
+ case 'ID':
79
+ return (string)(self::$_params['user']['ID'].'');
80
+ case 'NAME':
81
+ return self::$_params['user']['display_name'];
82
+ case 'ROLE':
83
+ return self::$_params['user']['role'];
84
+ case 'LOGIN':
85
+ return self::$_params['user']['login'];
86
+ default:
87
+ return '';
88
+ }
89
+ return '';
90
+ }
91
+
92
+ public static function Regex($rx, $opts='') {return new Toolset_Regex($rx, $opts);}
93
+
94
+ public static function Contains(&$a, $v) {return in_array($v,$a);}
95
+ }
96
+
97
+ class Toolset_Date
98
+ {
99
+ private $_timestamp;
100
+
101
+ /* getdate params
102
+ "seconds" Numeric representation of seconds 0 to 59
103
+ "minutes" Numeric representation of minutes 0 to 59
104
+ "hours" Numeric representation of hours 0 to 23
105
+ "mday" Numeric representation of the day of the month 1 to 31
106
+ "wday" Numeric representation of the day of the week 0 (for Sunday) through 6 (for Saturday)
107
+ "mon" Numeric representation of a month 1 through 12
108
+ "year" A full numeric representation of a year, 4 digits Examples: 1999 or 2003
109
+ "yday" Numeric representation of the day of the year 0 through 365
110
+ "weekday" A full textual representation of the day of the week Sunday through Saturday
111
+ "month" A full textual representation of a month, such as January or March
112
+ */
113
+ private $_date=array(
114
+ 'hour'=>0,
115
+ 'min'=>0,
116
+ 'sec'=>0,
117
+ 'day_of_month'=>0,
118
+ 'day_of_week'=>0,
119
+ 'day_of_year'=>0,
120
+ 'day_of_week_string'=>'',
121
+ 'month_string'=>'',
122
+ 'month'=>0,
123
+ 'year'=>0
124
+ );
125
+
126
+ private static $_today=false;
127
+
128
+ public static function setToday($date)
129
+ {
130
+ self::$_today=$date;
131
+ }
132
+
133
+ public static function getToday()
134
+ {
135
+ if (self::$_today)
136
+ return new Toolset_Date(self::$_today);
137
+
138
+ $today=new Toolset_Date();
139
+ return $today->setDateByTimestamp();
140
+ }
141
+
142
+ public function Toolset_Date($date=null)
143
+ {
144
+ if (isset($date))
145
+ $this->setDate($date);
146
+ }
147
+
148
+
149
+ public function getDate($key=null)
150
+ {
151
+ if (!isset($key) || !in_array($key, array_keys($this->_date)))
152
+ return $this->_date;
153
+ else
154
+ return $this->_date[$key];
155
+ }
156
+
157
+ public function setDate($date)
158
+ {
159
+ $hasYear=false;
160
+ $hasMonth=false;
161
+ $hasDay=false;
162
+
163
+ foreach ($date as $k=>$v)
164
+ {
165
+ if ($k=='year') $hasYear=true;
166
+ if ($k=='month') $hasMonth=true;
167
+ if ($k=='day_of_year') $hasDay=true;
168
+
169
+ if (isset($this->_date[$k]))
170
+ $this->_date[$k]=$v;
171
+ }
172
+
173
+ // fill all values
174
+ if ($hasYear && $hasMonth && $hasDay)
175
+ $this->setDateByTimestamp($this->getTimestamp());
176
+
177
+ return $this;
178
+ }
179
+
180
+ public function getTimestamp()
181
+ {
182
+ if (class_exists("DateTime")) {
183
+ $date = new DateTime("{$this->_date['year']}-{$this->_date['month']}-{$this->_date['day_of_month']} {$this->_date['hour']}:{$this->_date['min']}:{$this->_date['sec']}");
184
+ return (method_exists('DateTime', 'getTimestamp')) ? $date->getTimestamp() : $date->format('U');
185
+ } else
186
+ return mktime ($this->_date['hour'], $this->_date['min'], $this->_date['sec'], $this->_date['month'], $this->_date['day_of_month'], $this->_date['year'] /*[, int $is_dst = -1 ]*/);
187
+ }
188
+
189
+ public function getNormalizedTimestamp()
190
+ {
191
+ if (class_exists("DateTime")) {
192
+ $date = new DateTime("{$this->_date['year']}-{$this->_date['month']}-{$this->_date['day_of_month']}");
193
+ return (method_exists('DateTime', 'getTimestamp')) ? $date->getTimestamp() : $date->format('U');
194
+ } else
195
+ return mktime (0, 0, 0, $this->_date['day_of_month'], $this->_date['month'], $this->_date['year'] /*[, int $is_dst = -1 ]*/);
196
+ }
197
+
198
+ public function setDateByTimestamp($time=null)
199
+ {
200
+ if (!isset($time)) $time=time();
201
+
202
+ $dat=getdate($time);
203
+ $date=array(
204
+ 'hour'=>0,
205
+ 'min'=>0,
206
+ 'sec'=>0,
207
+ 'month'=>$dat['mon'],
208
+ 'month_string'=>$dat['month'],
209
+ 'day_of_month'=>$dat['mday'],
210
+ 'day_of_week'=>$dat['wday'],
211
+ 'day_of_week_string'=>$dat['weekday'],
212
+ 'day_of_year'=>$dat['yday'],
213
+ 'year'=>$dat['year']
214
+ );
215
+
216
+ $this->_date=$date;
217
+
218
+ return $this;
219
+ }
220
+
221
+ public function format($format)
222
+ {
223
+ //return date($format, $this->getTimestamp());
224
+
225
+ // handle localized format
226
+ return Toolset_DateParser::formatDate($this, $format);
227
+ }
228
+ }
229
+
230
+ class Toolset_DateParser
231
+ {
232
+ private static $_ZONE_NAMES = array('AM' => 'AM','PM' => 'PM');
233
+ private static $_MONTH_NAMES = array('January','February','March','April','May','June','July','August','September','October','November','December');
234
+ private static $_DAY_NAMES = array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');
235
+ private static $_ENGLISH_MONTH_NAMES = array('January','February','March','April','May','June','July','August','September','October','November','December');
236
+ private static $_ENGLISH_DAY_NAMES = array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');
237
+
238
+ private static function _to_int($str)
239
+ {
240
+ // return the integer representation of the string given as argument
241
+ return intval($str);
242
+ }
243
+
244
+ private static function _escape_regexp($str)
245
+ {
246
+ // return string with special characters escaped
247
+ //return preg_replace('#([\-\.\*\+\?\^\$\{\}\(\)\|\[\]\/\\])#', '\\$1', $str);
248
+ return preg_quote($str, "/");
249
+ }
250
+
251
+ private static function _str_pad($n, $c)
252
+ {
253
+ if (strlen($n = $n . '') < $c)
254
+ {
255
+ return implode('0',array_fill((++$c) - strlen($n))). $n;
256
+ }
257
+ return $n;
258
+ }
259
+
260
+ private static function _is_string($s)
261
+ {
262
+ return is_string($s)?true:false;
263
+ }
264
+
265
+ public static function cmp($a, $b){ return $a['position'] - $b['position']; }
266
+
267
+ public static function parseDate($date, $supposed_format)
268
+ {
269
+ // if already a date object
270
+ if ($date instanceof Toolset_Date)
271
+ {
272
+ $date->setDate(array('hour'=>0,'min'=>0,'sec'=>0)); // normalize time part
273
+ return $date;
274
+ }
275
+
276
+ if (
277
+ !isset($date) ||
278
+ !self::_is_string($date) ||
279
+ !isset($supposed_format) ||
280
+ !self::_is_string($supposed_format)
281
+ )
282
+ return false;
283
+
284
+ // treat argument as a string
285
+ $str_date = (string)$date . '';
286
+ $supposed_format = (string)$supposed_format.'';
287
+
288
+ // if value is given
289
+ if ($str_date != '' && $supposed_format != '')
290
+ {
291
+ //echo '<br/>Date given<br />';
292
+ // prepare the format by removing white space from it
293
+ // and also escape characters that could have special meaning in a regular expression
294
+ $format = self::_escape_regexp(preg_replace('/\s/','',$supposed_format));
295
+
296
+ // allowed characters in date's format
297
+ $format_chars = array('d','D','j','l','N','S','w','F','m','M','n','Y','y');
298
+
299
+ // "matches" will contain the characters defining the date's format
300
+ $matches = array();
301
+
302
+ // "regexp" will contain the regular expression built for each of the characters used in the date's format
303
+ $regexp = array();
304
+
305
+ // iterate through the allowed characters in date's format
306
+ for ($i = 0; $i < count($format_chars); $i++)
307
+ {
308
+ // if character is found in the date's format
309
+ if (($position = strpos($format,$format_chars[$i])) > -1)
310
+
311
+ // save it, alongside the character's position
312
+ $matches[]=array('character'=> $format_chars[$i], 'position'=> $position);
313
+ }
314
+
315
+ // sort characters defining the date's format based on their position, ascending
316
+ usort($matches,array('Toolset_DateParser','cmp'));
317
+
318
+ // iterate through the characters defining the date's format
319
+ for ($index=0; $index<count($matches); $index++)
320
+ {
321
+ $match=$matches[$index];
322
+
323
+ // add to the array of regular expressions, based on the character
324
+ switch ($match['character'])
325
+ {
326
+
327
+ case 'd': $regexp[]='0[1-9]|[12][0-9]|3[01]'; break;
328
+ case 'D': $regexp[]='[a-z]{3}'; break;
329
+ case 'j': $regexp[]='[1-9]|[12][0-9]|3[01]'; break;
330
+ case 'l': $regexp[]='[a-z]+'; break;
331
+ case 'N': $regexp[]='[1-7]'; break;
332
+ case 'S': $regexp[]='st|nd|rd|th'; break;
333
+ case 'w': $regexp[]='[0-6]'; break;
334
+ case 'F': $regexp[]='[a-z]+'; break;
335
+ case 'm': $regexp[]='0[1-9]|1[012]+'; break;
336
+ case 'M': $regexp[]='[a-z]{3}'; break;
337
+ case 'n': $regexp[]='[1-9]|1[012]'; break;
338
+ case 'Y': $regexp[]='[0-9]{4}'; break;
339
+ case 'y': $regexp[]='[0-9]{2}'; break;
340
+
341
+ }
342
+ }
343
+
344
+ // if we have an array of regular expressions
345
+ if (!empty($regexp))
346
+ {
347
+
348
+ // we will replace characters in the date's format in reversed order
349
+ $matches=array_reverse($matches);
350
+
351
+ // iterate through the characters in date's format
352
+ for ($index=0; $index<count($matches); $index++)
353
+ {
354
+ $match=$matches[$index];
355
+
356
+ // replace each character with the appropriate regular expression
357
+ $format = str_replace($match['character'],'(' . $regexp[count($regexp) - $index - 1] . ')', $format);
358
+ }
359
+
360
+ // the final regular expression
361
+ //$regexp = '/^' . $format . '$/ig';
362
+ $regexp = '/^' . $format . '$/i';
363
+
364
+ //echo '<br /><textarea>'.$regexp.'</textarea><br />';
365
+
366
+ //preg_match_all('/^(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[012]+)\/([0-9]{2})$/i','13/10/12',$foo);
367
+ //print_r($foo);
368
+
369
+ // if regular expression was matched
370
+ if (preg_match_all($regexp, preg_replace('/\s/', '', $str_date),$segments))
371
+ {
372
+ //echo '<br/>Regex matched<br />';
373
+ //print_r($segments);
374
+
375
+ // check if date is a valid date (i.e. there's no February 31)
376
+ $english_days = self::$_ENGLISH_DAY_NAMES;
377
+ $english_months = self::$_ENGLISH_MONTH_NAMES;
378
+
379
+ // by default, we assume the date is valid
380
+ $valid = true;
381
+
382
+ // reverse back the characters in the date's format
383
+ $matches=array_reverse($matches);
384
+
385
+ // iterate through the characters in the date's format
386
+ for ($index=0; $index<count($matches); $index++)
387
+ {
388
+ $match=$matches[$index];
389
+
390
+ // if the date is not valid, don't look further
391
+ if (!$valid) break; //return true;
392
+
393
+ // based on the character
394
+ switch ($match['character'])
395
+ {
396
+
397
+ case 'm':
398
+ case 'n':
399
+
400
+ // extract the month from the value entered by the user
401
+ $original_month = self::_to_int($segments[$index+1][0]);
402
+
403
+ break;
404
+
405
+ case 'd':
406
+ case 'j':
407
+
408
+ // extract the day from the value entered by the user
409
+ $original_day = self::_to_int($segments[$index+1][0]);
410
+
411
+ break;
412
+
413
+ case 'D':
414
+ case 'l':
415
+ case 'F':
416
+ case 'M':
417
+
418
+ // if day is given as day name, we'll check against the names in the used language
419
+ if ($match['character'] == 'D' || $match['character'] == 'l') $iterable = self::$_DAY_NAMES;
420
+
421
+ // if month is given as month name, we'll check against the names in the used language
422
+ else $iterable = self::$_MONTH_NAMES;
423
+
424
+ // by default, we assume the day or month was not entered correctly
425
+ $valid = false;
426
+
427
+ // iterate through the month/days in the used language
428
+ for ($key=0; $key<count($iterable); $key++)
429
+ {
430
+ // if month/day was entered correctly, don't look further
431
+ if ($valid) break; //return true;
432
+
433
+ $value=$iterable[$key];
434
+
435
+ // if month/day was entered correctly
436
+ if (strtolower($segments[$index+1][0]) == strtolower(substr($value, 0, ($match['character'] == 'D' || $match['character'] == 'M' ? 3 : strlen($value)))))
437
+ {
438
+
439
+ // extract the day/month from the value entered by the user
440
+ switch ($match['character'])
441
+ {
442
+
443
+ case 'D': $segments[$index+1][0] = substr($english_days[$key],0, 3); break;
444
+ case 'l': $segments[$index+1][0] = $english_days[$key]; break;
445
+ case 'F': $segments[$index+1][0] = $english_months[$key]; $original_month = $key + 1; break;
446
+ case 'M': $segments[$index+1][0] = substr($english_months[$key],0, 3); $original_month = $key + 1; break;
447
+
448
+ }
449
+
450
+ // day/month value is valid
451
+ $valid = true;
452
+
453
+ }
454
+
455
+ }
456
+
457
+ break;
458
+
459
+ case 'Y':
460
+
461
+ // extract the year from the value entered by the user
462
+ $original_year = self::_to_int($segments[$index+1][0]);
463
+
464
+ break;
465
+
466
+ case 'y':
467
+
468
+ // extract the year from the value entered by the user
469
+ $original_year = '19' + self::_to_int($segments[$index+1][0]);
470
+
471
+ break;
472
+
473
+ }
474
+ }
475
+
476
+ // if everything is ok so far
477
+ if ($valid)
478
+ {
479
+ //echo '<br/>Date valid 1<br />';
480
+
481
+ // generate a Date object using the values entered by the user
482
+ // (handle also the case when original_month and/or original_day are undefined - i.e date format is "Y-m" or "Y")
483
+ /* print_r(array(
484
+ 'year'=>$original_year,
485
+ 'month'=>$original_month,
486
+ 'day'=>$original_day,
487
+ ));*/
488
+
489
+ // if, after that, the date is the same as the date entered by the user
490
+ //if (date.getFullYear() == original_year && date.getDate() == (original_day || 1) && date.getMonth() == ((original_month || 1) - 1))
491
+ //var_dump(checkdate(10, 12, 2012));
492
+ if (checkdate ((int)$original_month, (int)$original_day, (int)$original_year))
493
+ {
494
+ // normalize time part, only date part checked
495
+ $date = new Toolset_Date(array(
496
+ 'year'=>$original_year,
497
+ 'month'=>$original_month,
498
+ 'day_of_month'=>$original_day,
499
+ ));
500
+ $date->setDate(array('hour'=>0,'min'=>0,'sec'=>0));
501
+ // return the date as our date object
502
+ //echo '<br/>Date valid 2<br />';
503
+ return $date;
504
+ }
505
+ }
506
+ }
507
+ }
508
+ }
509
+ // if script gets this far, return false as something must've went wrong
510
+ return false;
511
+ }
512
+
513
+ public static function formatDate($date, $format, $isTimestamp=false)
514
+ {
515
+
516
+ // if not a date object
517
+ /*if (!isset($date) || !($date instanceof Toolset_Date))
518
+ {
519
+ return '';
520
+ }
521
+ $date->setDate(array('hour'=>0,'min'=>0,'sec'=>0)); // normalize time
522
+ return $date->format($format);*/
523
+
524
+ if ($isTimestamp)
525
+ {
526
+ $dat=new Toolset_Date();
527
+ $date=$dat->setDateByTimestamp($date);
528
+ }
529
+
530
+ // if not a date object
531
+ if (!isset($date) || !($date instanceof Toolset_Date))
532
+ {
533
+ return '';
534
+ }
535
+
536
+ $date->setDate(array('hour'=>0,'min'=>0,'sec'=>0)); // normalize time part
537
+
538
+ $result = '';
539
+
540
+ // extract parts of the date:
541
+ // day number, 1 - 31
542
+ $j = $date->getDate('day_of_month');
543
+
544
+ // day of the week, 0 - 6, Sunday - Saturday
545
+ $w = $date->getDate('day_of_week');
546
+
547
+ // the name of the day of the week Sunday - Saturday
548
+ $l = self::$_DAY_NAMES[$w];
549
+
550
+ // the month number, 1 - 12
551
+ $n = $date->getDate('month');// + 1;
552
+
553
+ // the month name, January - December
554
+ $f = self::$_MONTH_NAMES[$n - 1];
555
+
556
+ // the year (as a string)
557
+ $y = (string)$date->getDate('year') . '';
558
+
559
+ // iterate through the characters in the format
560
+ for ($i = 0; $i < strlen($format); $i++)
561
+ {
562
+
563
+ // extract the current character
564
+ $chr = $format[$i];
565
+
566
+ // see what character it is
567
+ switch($chr)
568
+ {
569
+ // year as two digits
570
+ case 'y': $y = substr($y,2);
571
+
572
+ // year as four digits
573
+ case 'Y': $result .= $y; break;
574
+
575
+ // month number, prefixed with 0
576
+ case 'm': $n = self::_str_pad($n, 2);
577
+
578
+ // month number, not prefixed with 0
579
+ case 'n': $result .= $n; break;
580
+
581
+ // month name, three letters
582
+ case 'M': $f = substr($f,0,3);
583
+
584
+ // full month name
585
+ case 'F': $result .= $f; break;
586
+
587
+ // day number, prefixed with 0
588
+ case 'd': $j = self::_str_pad($j, 2);
589
+
590
+ // day number not prefixed with 0
591
+ case 'j': $result .= $j; break;
592
+
593
+ // day name, three letters
594
+ case 'D': $l = substr($l, 0, 3);
595
+
596
+ // full day name
597
+ case 'l': $result .= $l; break;
598
+
599
+ // ISO-8601 numeric representation of the day of the week, 1 - 7
600
+ case 'N': $w++;
601
+
602
+ // day of the week, 0 - 6
603
+ case 'w': $result .= $w; break;
604
+
605
+ // English ordinal suffix for the day of the month, 2 characters
606
+ // (st, nd, rd or th (works well with j))
607
+ case 'S':
608
+
609
+ if ($j % 10 == 1 && $j != '11') $result .= 'st';
610
+
611
+ else if ($j % 10 == 2 && $j != '12') $result .= 'nd';
612
+
613
+ else if ($j % 10 == 3 && $j != '13') $result .= 'rd';
614
+
615
+ else $result .= 'th';
616
+
617
+ break;
618
+
619
+ // this is probably the separator
620
+ default: $result .= $chr;
621
+
622
+ }
623
+
624
+ }
625
+ // return formated date
626
+ return $result;
627
+ }
628
+
629
+ public static function setDateLocaleStrings($dn=null, $mn=null, $zn=null)
630
+ {
631
+ if (isset($mn))
632
+ {
633
+ self::$_MONTH_NAMES = $mn;
634
+ }
635
+ if (isset($dn))
636
+ {
637
+ self::$_DAY_NAMES = $dn;
638
+ }
639
+ if (isset($zn))
640
+ self::$_ZONE_NAMES = $zn;
641
+ }
642
+
643
+ public static function isDate($val, $format, &$getDate=null)
644
+ {
645
+ $date=self::parseDate($val,$format);
646
+ if ($date!==false)
647
+ {
648
+ //echo '<hr />Date correct<hr />';
649
+ if (isset($getDate))
650
+ {
651
+ $getDate['date']=$date;
652
+ }
653
+ return true;
654
+ }
655
+ return false;
656
+ }
657
+
658
+ public static function currentDate()
659
+ {
660
+ return Toolset_Date::getToday();
661
+ }
662
+ }
663
+
664
+ class Toolset_Stack
665
+ {
666
+ // Stack object constructor
667
+ private $arrStack=array();
668
+ private $intIndex=0;
669
+
670
+ // Converts stack contents into a comma separated string
671
+ public function toString()
672
+ {
673
+ $intCntr = 0;
674
+ $strRet = "";
675
+ if ($this->intIndex == 0) return null;
676
+ for ($intCntr = 0; $intCntr < $this->intIndex; $intCntr++)
677
+ {
678
+ if ($strRet == '')
679
+ $strRet .= print_r($this->arrStack[$intCntr]->val,true);
680
+ else
681
+ $strRet .= "," . print_r($this->arrStack[$intCntr]->val,true);
682
+ }
683
+ return $strRet;
684
+ }
685
+
686
+ // Returns size of stack
687
+ public function Size()
688
+ {
689
+ return $this->intIndex;
690
+ }
691
+
692
+ // This method tells us if this Stack object is empty
693
+ public function IsEmpty()
694
+ {
695
+ return ($this->intIndex == 0)?true:false;
696
+ }
697
+
698
+ // This method pushes a new element onto the top of the stack
699
+ public function Push($newData)
700
+ {
701
+ $this->arrStack[$this->intIndex++] = $newData;
702
+ }
703
+
704
+ // This method pops the top element off of the stack
705
+ public function Pop()
706
+ {
707
+ $retVal = null;
708
+ if ($this->intIndex > 0)
709
+ {
710
+ $retVal = $this->arrStack[--$this->intIndex];
711
+ }
712
+ return $retVal;
713
+ }
714
+
715
+ // Gets an element at a particular offset from top of the stack
716
+ function Get($intPos)
717
+ {
718
+ if ($intPos >= 0 && $intPos < $this->intIndex)
719
+ $retVal = $this->arrStack[$this->intIndex - $intPos - 1];
720
+ return $retVal;
721
+ }
722
+ }
723
+
724
+ class Toolset_Tokenizer
725
+ {
726
+
727
+ // private members
728
+ private static $_tok_map_prefix = '__TOKEN_MAP_PREFIX__';
729
+ private static $_Alpha = '';
730
+ private static $_lstAlpha = '';
731
+ private static $_lstVariablePrefix = '';
732
+ private static $_lstDigits = "0123456789";
733
+ private static $_lstArithOps = array("^","*","/","%","+","-");
734
+ private static $_lstLogicOps = array("NOT","!","OR","|","AND","&");
735
+ private static $_lstCompaOps = array("<","<=",">",">=","<>","=","lt","lte","gt","gte","ne","eq");
736
+ private static $_lstFuncOps = array(
737
+ "AVG","ABS","ACOS","ARRAY","ASC","ASIN","ATAN",
738
+ "CHR","CONTAINS","COOKIE","COS",
739
+ "DATE","FIX","HEX","IIF","LCASE","LEN","LEFT","LOG",
740
+ "MAX","MID","MIN","NUM","RAND","REGEX","RIGHT","ROUND",
741
+ "SIN","SQRT","STR","TAN","TODAY","UCASE","USER", "EMPTY", "empty"
742
+ );
743
+
744
+ private static $_UNARY_NEGATIVE = "-";
745
+ private static $_UNARY_NEGATION = "!";
746
+ private static $_ARG_TERMINAL = "?";
747
+ private static $_EMPTY_TOKEN;
748
+ private static $_EMPTY_STRING;
749
+ private static $_TOKEN_TYPES = array(
750
+ '__DEFAULT__'=>0,
751
+ 'STRING_LITERAL'=>8,
752
+ 'REGEX'=> 83,
753
+ 'ARRAY'=>81,
754
+ 'ARRAY_LITERAL'=>82,
755
+ 'DATE'=>1,
756
+ 'ARITHMETIC_OP'=>2,
757
+ 'LOGICAL_OP'=>3,
758
+ 'COMPARISON_OP'=>4,
759
+ 'NUMBER'=>5,
760
+ 'BOOLEAN'=>6,
761
+ 'VARIABLE'=>7,
762
+ 'FUNCTION'=>9,
763
+ 'COMMA'=>10,
764
+ 'LEFT_PAREN'=>11,
765
+ 'LEFT_BRACKET'=>111,
766
+ 'RIGHT_PAREN'=>12,
767
+ 'RIGHT_BRACKET'=>122,
768
+ 'ARG_TERMINAL'=>13,
769
+ 'UNARY_NEGATIVE'=>14,
770
+ 'UNARY_NEGATION'=>15,
771
+ 'EMPTY_TOKEN'=>30,
772
+ 'UNKNOWN'=>40
773
+ );
774
+
775
+ public static $TOKEN_TYPE;
776
+ public static $EMPTY_TOKEN;
777
+ public static $EMPTY_STRING;
778
+ public static $UNARY_NEGATIVE;
779
+ public static $UNARY_NEGATION;
780
+ public static $ARG_TERMINAL;
781
+
782
+ private static function _isDefined($s)
783
+ {
784
+ return (isset($s));
785
+ }
786
+
787
+ private static function _isDigit($c)
788
+ {
789
+ if (!self::_isDefined($c))
790
+ return false;
791
+ return (($c!='' && strpos(self::$_lstDigits,$c) >= 0)?true:false);
792
+ }
793
+
794
+ private static function _isAlpha($c)
795
+ {
796
+ if (!self::_isDefined($c))
797
+ return false;
798
+ return (($c!='' && strpos(self::$_lstAlpha,$c) >= 0)?true:false);
799
+ }
800
+
801
+ private static function _isOperator($s)
802
+ {
803
+ if (!self::_isDefined($s))
804
+ return false;
805
+ return (in_array($s,self::$_lstArithOps)?true:false);
806
+ }
807
+
808
+ private static function _isLogicOperator($s)
809
+ {
810
+ if (!self::_isDefined($s))
811
+ return false;
812
+ return (in_array($s,self::$_lstLogicOps)?true:false);
813
+ }
814
+
815
+ private static function _isCompOperator($s)
816
+ {
817
+ if (!self::_isDefined($s))
818
+ return false;
819
+ return (in_array($s,self::$_lstCompaOps)?true:false);
820
+ }
821
+
822
+ private static function _isFunction($s)
823
+ {
824
+ if (!self::_isDefined($s))
825
+ return false;
826
+ return (in_array($s,self::$_lstFuncOps)?true:false);
827
+ }
828
+
829
+ private static function _isVariableName($s)
830
+ {
831
+ if (!self::_isDefined($s))
832
+ return false;
833
+ $c=($s=='')?'':$s{0};
834
+ return (($c!='' && strpos(self::$_lstVariablePrefix,$c) >= 0)?true:false);
835
+ }
836
+
837
+ public static function isDateInstance($s)
838
+ {
839
+ if (!self::_isDefined($s))
840
+ return false;
841
+ if ($s instanceof Toolset_Date)
842
+ return true;
843
+ return false;
844
+ }
845
+
846
+ public static function isArrayInstance($s)
847
+ {
848
+ if (!self::_isDefined($s))
849
+ return false;
850
+ if (is_array($s))
851
+ return true;
852
+ return false;
853
+ }
854
+
855
+ public static function isRegExpInstance($s)
856
+ {
857
+ if (!self::_isDefined($s))
858
+ return false;
859
+ if ($s instanceof Toolset_Regex)
860
+ return true;
861
+ return false;
862
+ }
863
+
864
+ public static function isNumber($s)
865
+ {
866
+ if (!self::_isDefined($s)) return false;
867
+ //if (_isDateInstance(s) || _isRegExpInstance(s) || _isArrayInstance(s)) return false;
868
+ if (is_numeric($s) && !is_nan((float)$s))
869
+ return true;
870
+ return false;
871
+ }
872
+
873
+ public static function isBoolean($s)
874
+ {
875
+ if (!self::_isDefined($s))
876
+ return false;
877
+
878
+ if (is_bool($s)) return true;
879
+
880
+ if (strtoupper((string)$s)=='TRUE' || strtoupper((string)$s)=='FALSE')
881
+ return true;
882
+
883
+ return false;
884
+ }
885
+
886
+ private static function _ltrim($s, $ch=' ')
887
+ {
888
+ return ltrim($s,$ch);
889
+ }
890
+
891
+ private static function _rtrim($s, $ch=' ')
892
+ {
893
+ return rtrim($s,$ch);
894
+ }
895
+
896
+ private static function _trim($s, $ch=' ')
897
+ {
898
+ return trim($s,$ch);
899
+ }
900
+
901
+ // build maps for fast lookup
902
+ private static function _buildMaps()
903
+ {
904
+ self::$_Alpha = "abcdefghijklmnopqrstuvwxyz";
905
+ self::$_lstAlpha = self::$_Alpha . strtoupper(self::$_Alpha);
906
+ self::$_lstVariablePrefix = '_$' . self::$_lstAlpha;
907
+ }
908
+
909
+ public static function init()
910
+ {
911
+ static $isInited=false;
912
+
913
+ if (!$isInited)
914
+ {
915
+ self::_buildMaps();
916
+ self::$TOKEN_TYPE = self::$_TOKEN_TYPES;
917
+ self::$_EMPTY_TOKEN = self::makeToken('', self::$_TOKEN_TYPES['EMPTY_TOKEN']);
918
+ self::$_EMPTY_STRING = self::makeToken('', self::$_TOKEN_TYPES['STRING_LITERAL']);
919
+ self::$EMPTY_TOKEN = self::$_EMPTY_TOKEN;
920
+ self::$EMPTY_STRING = self::$_EMPTY_STRING;
921
+ self::$UNARY_NEGATIVE = self::makeToken(self::$_UNARY_NEGATIVE, self::$_TOKEN_TYPES['UNARY_NEGATIVE']);
922
+ self::$UNARY_NEGATION = self::makeToken(self::$_UNARY_NEGATION, self::$_TOKEN_TYPES['UNARY_NEGATION']);
923
+ self::$ARG_TERMINAL = self::makeToken(self::$_ARG_TERMINAL, self::$_TOKEN_TYPES['ARG_TERMINAL']);
924
+ $isInited=true;
925
+ }
926
+ }
927
+
928
+ public static function makeToken($tok, $force_type=null/*, $debug=false*/)
929
+ {
930
+ /*if ($debug)
931
+ {
932
+ cred_log($force_type);
933
+ }*/
934
+ $token=(object)array(
935
+ 'val'=>$tok,
936
+ 'type'=>self::$_TOKEN_TYPES['UNKNOWN'],
937
+ 'isStringLiteral'=>false,
938
+ 'isArray'=>false,
939
+ 'isRegex'=>false,
940
+ 'isDate'=>false,
941
+ 'isFunction'=>false,
942
+ 'isNumber'=>false,
943
+ 'isBoolean'=>false,
944
+ 'isOp'=>false,
945
+ 'isArithmeticOp'=>false,
946
+ 'isLogicOp'=>false,
947
+ 'isCompOp'=>false,
948
+ 'isParen'=>false,
949
+ 'isLeftParen'=>false,
950
+ 'isRightParen'=>false,
951
+ 'isComma'=>false,
952
+ 'isVariable'=>false,
953
+ 'isArgTerminal'=>false,
954
+ 'isUnaryNegative'=>false,
955
+ 'isUnaryNegation'=>false,
956
+ 'isEmpty'=>false,
957
+ );
958
+
959
+ if (!isset($force_type))
960
+ $force_type=self::$_TOKEN_TYPES['__DEFAULT__'];
961
+
962
+ switch ($force_type)
963
+ {
964
+ case self::$_TOKEN_TYPES['EMPTY_TOKEN']:
965
+ $token->type=self::$_TOKEN_TYPES['EMPTY_TOKEN'];
966
+ $token->isEmpty=true;
967
+ $token->val='';
968
+ break;
969
+ case self::$_TOKEN_TYPES['STRING_LITERAL']:
970
+ $token->type=self::$_TOKEN_TYPES['STRING_LITERAL'];
971
+ $token->isStringLiteral=true;
972
+ $token->val=(string)$tok;
973
+ /*if ($debug)
974
+ {
975
+ cred_log('---------');
976
+ cred_log($token);
977
+ cred_log('---------');
978
+ }*/
979
+ break;
980
+ case self::$_TOKEN_TYPES['DATE']:
981
+ if (self::isDateInstance($tok))
982
+ {
983
+ $token->type=self::$_TOKEN_TYPES['DATE'];
984
+ $token->isDate=true;
985
+ }
986
+ break;
987
+ case self::$_TOKEN_TYPES['ARRAY']:
988
+ if (!self::isArrayInstance($tok))
989
+ {
990
+ $token->val=array($tok);
991
+ }
992
+ $token->type=self::$_TOKEN_TYPES['ARRAY'];
993
+ $token->isArray=true;
994
+ break;
995
+ case self::$_TOKEN_TYPES['REGEX']:
996
+ if (!self::isRegExpInstance($tok))
997
+ {
998
+ $token->val=new Toolset_Regex($tok);
999
+ }
1000
+ $token->type=self::$_TOKEN_TYPES['REGEX'];
1001
+ $token->isRegex=true;
1002
+ break;
1003
+ case self::$_TOKEN_TYPES['COMMA']:
1004
+ $token->type=self::$_TOKEN_TYPES['COMMA'];
1005
+ $token->isComma=true;
1006
+ $token->val=',';
1007
+ break;
1008
+ case self::$_TOKEN_TYPES['LEFT_PAREN']:
1009
+ $token->type=self::$_TOKEN_TYPES['LEFT_PAREN'];
1010
+ $token->isLeftParen=true;
1011
+ $token->isParen=true;
1012
+ $token->val='(';
1013
+ break;
1014
+ case self::$_TOKEN_TYPES['RIGHT_PAREN']:
1015
+ $token->type=self::$_TOKEN_TYPES['RIGHT_PAREN'];
1016
+ $token->isRightParen=true;
1017
+ $token->isParen=true;
1018
+ $token->val=')';
1019
+ break;
1020
+ case self::$_TOKEN_TYPES['ARG_TERMINAL']:
1021
+ $token->type=self::$_TOKEN_TYPES['ARG_TERMINAL'];
1022
+ $token->isArgTerminal=true;
1023
+ $token->val=self::$_ARG_TERMINAL;
1024
+ break;
1025
+ case self::$_TOKEN_TYPES['UNARY_NEGATIVE']:
1026
+ $token->type=self::$_TOKEN_TYPES['UNARY_NEGATIVE'];
1027
+ $token->isUnaryNegative=true;
1028
+ $token->val=self::$_UNARY_NEGATIVE;
1029
+ $token->isArithmeticOp=true;
1030
+ $token->isOp=true;
1031
+ break;
1032
+ case self::$_TOKEN_TYPES['UNARY_NEGATION']:
1033
+ $token->type=self::$_TOKEN_TYPES['UNARY_NEGATION'];
1034
+ $token->isUnaryNegation=true;
1035
+ $token->val=self::$_UNARY_NEGATION;
1036
+ $token->isLogicOp=true;
1037
+ $token->isOp=true;
1038
+ break;
1039
+ case self::$_TOKEN_TYPES['NUMBER']:
1040
+ $token->type=self::$_TOKEN_TYPES['NUMBER'];
1041
+ $token->isNumber=true;
1042
+ if (is_string($tok))
1043
+ $token->val=(float)($tok);
1044
+ elseif (is_bool($tok))
1045
+ $token->val=((bool)$tok===true)?1:0;
1046
+ else
1047
+ $token->val=(float)$tok;
1048
+ break;
1049
+ case self::$_TOKEN_TYPES['BOOLEAN']:
1050
+ $token->type=self::$_TOKEN_TYPES['BOOLEAN'];
1051
+ $token->isBoolean=true;
1052
+ if (is_bool($tok))
1053
+ $token->val=(bool)$tok;
1054
+ elseif (is_string($tok))
1055
+ $token->val=(strtoupper($tok)=='TRUE')?true:false;
1056
+ elseif (is_numeric($tok))
1057
+ $token->val=((float)$tok != 0)?true:false;
1058
+ else
1059
+ $token->val=(bool)$tok;
1060
+ break;
1061
+ case self::$_TOKEN_TYPES['VARIABLE']:
1062
+ $token->type=self::$_TOKEN_TYPES['VARIABLE'];
1063
+ $token->isVariable=true;
1064
+ break;
1065
+ case self::$_TOKEN_TYPES['__DEFAULT__']:
1066
+ default:
1067
+ if (
1068
+ (is_object($tok) && isset($tok->_isStringLiteral) && $tok->_isStringLiteral)
1069
+ )
1070
+ {
1071
+ $token->type=self::$_TOKEN_TYPES['STRING_LITERAL'];
1072
+ $token->isStringLiteral=true;
1073
+ $token->val=(string)$tok->val;
1074
+ }
1075
+ // date token
1076
+ elseif (self::isDateInstance($tok))
1077
+ {
1078
+ $token->type=self::$_TOKEN_TYPES['DATE'];
1079
+ $token->isDate=true;
1080
+ }
1081
+ // array token
1082
+ elseif (self::isArrayInstance($tok))
1083
+ {
1084
+ $token->type=self::$_TOKEN_TYPES['ARRAY'];
1085
+ $token->isArray=true;
1086
+ }
1087
+ // regex token
1088
+ elseif (self::isRegExpInstance($tok))
1089
+ {
1090
+ $token->type=self::$_TOKEN_TYPES['REGEX'];
1091
+ $token->isRegex=true;
1092
+ }
1093
+ elseif ($tok==',')
1094
+ {
1095
+ $token->type=self::$_TOKEN_TYPES['COMMA'];
1096
+ $token->isComma=true;
1097
+ $token->val=',';
1098
+ }
1099
+ elseif ($tok=='(')
1100
+ {
1101
+ $token->type=self::$_TOKEN_TYPES['LEFT_PAREN'];
1102
+ $token->isLeftParen=true;
1103
+ $token->isParen=true;
1104
+ $token->val='(';
1105
+ $token->isOp=true;
1106
+ }
1107
+ elseif ($tok==')')
1108
+ {
1109
+ $token->type=self::$_TOKEN_TYPES['RIGHT_PAREN'];
1110
+ $token->isRightParen=true;
1111
+ $token->isParen=true;
1112
+ $token->val=')';
1113
+ //token.isOp=true;
1114
+ }
1115
+ /*else if (tok=='{')
1116
+ {
1117
+ token.type=_TOKEN_TYPES.LEFT_BRACKET;
1118
+ token.isLeftBracket=true;
1119
+ token.isBracket=true;
1120
+ token.val='{';
1121
+ token.isOp=true;
1122
+ }
1123
+ else if (tok=='}')
1124
+ {
1125
+ token.type=_TOKEN_TYPES.RIGHT_BRACKET;
1126
+ token.isRightBracket=true;
1127
+ token.isBracket=true;
1128
+ token.val='}';
1129
+ //token.isOp=true;
1130
+ }*/
1131
+ elseif (self::isNumber($tok))
1132
+ {
1133
+ $token->type=self::$_TOKEN_TYPES['NUMBER'];
1134
+ $token->isNumber=true;
1135
+ if (is_string($tok))
1136
+ $token->val=(float)($tok);
1137
+ else if (is_bool($tok))
1138
+ $token->val=((bool)$tok===true)?1:0;
1139
+ else
1140
+ $token->val=(float)$tok;
1141
+ }
1142
+ elseif (self::isBoolean($tok))
1143
+ {
1144
+ $token->type=self::$_TOKEN_TYPES['BOOLEAN'];
1145
+ $token->isBoolean=true;
1146
+ if (is_bool($tok))
1147
+ $token->val=(bool)$tok;
1148
+ else if (is_string($tok))
1149
+ $token->val=(strtoupper($tok)=='TRUE')?true:false;
1150
+ else if (is_numeric($tok))
1151
+ $token->val=((float)$tok != 0)?true:false;
1152
+ else
1153
+ $token->val=(bool)$tok;
1154
+ }
1155
+ elseif (self::_isOperator($tok))
1156
+ {
1157
+ $token->type=self::$_TOKEN_TYPES['ARITHMETIC_OP'];
1158
+ $token->isArithmeticOp=true;
1159
+ $token->isOp=true;
1160
+
1161
+ }
1162
+ elseif (self::_isLogicOperator($tok))
1163
+ {
1164
+ $token->type=self::$_TOKEN_TYPES['LOGICAL_OP'];
1165
+ $token->isLogicOp=true;
1166
+ $token->isOp=true;
1167
+ }
1168
+ elseif (self::_isCompOperator($tok))
1169
+ {
1170
+ $token->type=self::$_TOKEN_TYPES['COMPARISON_OP'];
1171
+ $token->isCompOp=true;
1172
+ $token->isOp=true;
1173
+ }
1174
+ elseif (self::_isFunction($tok))
1175
+ {
1176
+ $token->type=self::$_TOKEN_TYPES['FUNCTION'];
1177
+ $token->isFunction=true;
1178
+ $token->val=(string)$tok;
1179
+ }
1180
+ elseif (self::_isVariableName($tok))
1181
+ {
1182
+ $token->type=self::$_TOKEN_TYPES['VARIABLE'];
1183
+ $token->isVariable=true;
1184
+ }
1185
+ break;
1186
+ }
1187
+ if ($token->isOp || $token->isFunction)
1188
+ {
1189
+ $intRet = 0;
1190
+
1191
+ switch($token->val)
1192
+ {
1193
+ case "+" :
1194
+ case "-" :
1195
+ $intRet = 50;
1196
+ break;
1197
+ case "*" :
1198
+ case "/" :
1199
+ case "%" :
1200
+ $intRet = 60;
1201
+ break;
1202
+ case "^" :
1203
+ $intRet = 70;
1204
+ break;
1205
+ case self::$_UNARY_NEGATIVE:
1206
+ case self::$_UNARY_NEGATION:
1207
+ case "!" :
1208
+ case "NOT" :
1209
+ $intRet = 100;
1210
+ break;
1211
+ case "(" :
1212
+ $intRet = 1000;
1213
+ break;
1214
+ /*case "{" :
1215
+ intRet = 500; // as function
1216
+ break;*/
1217
+ case "AND" :
1218
+ case "&" :
1219
+ $intRet = 35;
1220
+ break;
1221
+ case "OR" :
1222
+ case "|" :
1223
+ $intRet = 30;
1224
+ break;
1225
+ case ">" :
1226
+ case ">=" :
1227
+ case "<" :
1228
+ case "<=" :
1229
+ case "=" :
1230
+ case "<>" :
1231
+ case "gt" :
1232
+ case "gte" :
1233
+ case "lt" :
1234
+ case "lte" :
1235
+ case "eq" :
1236
+ case "ne" :
1237
+ $intRet = 40;
1238
+ break;
1239
+ default :
1240
+ if ($token->isFunction)
1241
+ $intRet = 500;
1242
+ else
1243
+ $intRet = 0;
1244
+ break;
1245
+ }
1246
+ $token->precedence=$intRet;
1247
+ }
1248
+ else
1249
+ $token->precedence=0;
1250
+ return $token;
1251
+ }
1252
+
1253
+ public static function cloneToken($tok)
1254
+ {
1255
+ $newtok=(object)array();
1256
+
1257
+ foreach ($tok as $at=>$val)
1258
+ {
1259
+ if (self::isDateInstance($tok->$at))
1260
+ $newtok->$at=new Toolset_Date($tok->$at->getDate());
1261
+ else
1262
+ $newtok->$at=$tok->$at;
1263
+ }
1264
+ return $newtok;
1265
+ }
1266
+
1267
+ public static function isString($a)
1268
+ {
1269
+ if (!self::_isDefined($a)) return false;
1270
+ return (is_string($a))?true:false;
1271
+ }
1272
+
1273
+ public static function isDate($pstrVal, $format, &$getDate)
1274
+ {
1275
+ if (!self::_isDefined($pstrVal))
1276
+ return false;
1277
+ if (self::isDateInstance($pstrVal))
1278
+ {
1279
+ if (isset($getDate))
1280
+ $getDate['date']=$pstrVal;
1281
+ return true;
1282
+ }
1283
+ return Toolset_DateParser::isDate($pstrVal, $format, $getDate);
1284
+ }
1285
+
1286
+ public static function toArray($v)
1287
+ {
1288
+ if (self::isArrayInstance($v))
1289
+ return $v;
1290
+ else return array($v);
1291
+ }
1292
+
1293
+ public static function toNumber($pobjVal)
1294
+ {
1295
+ if (is_numeric($pobjVal))
1296
+ return (float)$pobjVal;
1297
+ else
1298
+ {
1299
+ $dblRet = (float)$pobjVal;
1300
+ return $dblRet;
1301
+ }
1302
+ }
1303
+
1304
+ public static function toBoolean($pobjVal)
1305
+ {
1306
+ //var_dump($pobjVal);
1307
+ if (!isset($pobjVal))
1308
+ throw new Exception("Boolean value is not defined!");
1309
+ else if (is_bool($pobjVal))
1310
+ return(bool)$pobjVal;
1311
+ else if (is_numeric($pobjVal))
1312
+ return (bool)(((float)$pobjVal) != 0.0);
1313
+ else if (strtoupper((string)$pobjVal)=='TRUE')
1314
+ return true;
1315
+ else if (strtoupper((string)$pobjVal)=='FALSE')
1316
+ return false;
1317
+ return null;
1318
+ }
1319
+
1320
+ public static function Tokanize($pstrExpression)
1321
+ {
1322
+ // build fast lookup maps
1323
+ self::init();
1324
+
1325
+ $intCntr = 0;
1326
+ $intBraces = 0;
1327
+ $intBrackets = 0;
1328
+ $intIndex = 0;
1329
+ $strToken = "";
1330
+ $arrTokens = array();
1331
+ $pstrExpression = self::_trim($pstrExpression);
1332
+ while ($intCntr < strlen($pstrExpression))
1333
+ {
1334
+ $prevToken = self::$_EMPTY_TOKEN;
1335
+ $chrChar = substr($pstrExpression,$intCntr, 1);
1336
+ switch ($chrChar)
1337
+ {
1338
+ case " " :
1339
+ if ($strToken!= '')
1340
+ {
1341
+ $arrTokens[$intIndex] = self::makeToken($strToken);
1342
+ $intIndex++;
1343
+ $strToken = "";
1344
+ }
1345
+ break;
1346
+ //case "{":
1347
+ case "(":
1348
+ //(chrChar=='(')?intBraces++:intBrackets++;
1349
+ $intBraces++;
1350
+ if ($strToken!='')
1351
+ {
1352
+ $arrTokens[$intIndex] = self::makeToken($strToken);
1353
+ $intIndex++;
1354
+ $strToken = "";
1355
+ }
1356
+ $arrTokens[$intIndex] = self::makeToken($chrChar);
1357
+ $intIndex++;
1358
+ break;
1359
+ //case "}" :
1360
+ case ")" :
1361
+ //(chrChar==')')?intBraces--:intBrackets--;
1362
+ $intBraces--;
1363
+ if ($strToken!='')
1364
+ {
1365
+ $arrTokens[$intIndex] = self::makeToken($strToken);
1366
+ $intIndex++;
1367
+ $strToken = "";
1368
+ }
1369
+ $arrTokens[$intIndex] = self::makeToken($chrChar);
1370
+ $intIndex++;
1371
+ break;
1372
+ case "^" :
1373
+ case "*" :
1374
+ case "/" :
1375
+ case "%" :
1376
+ case "&" :
1377
+ case "|" :
1378
+ case "," :
1379
+ case "!" :
1380
+ if ($strToken!='')
1381
+ {
1382
+ $arrTokens[$intIndex] = self::makeToken($strToken);
1383
+ $intIndex++;
1384
+ $strToken = "";
1385
+ }
1386
+ $arrTokens[$intIndex] = self::makeToken($chrChar);
1387
+ $intIndex++;
1388
+ break;
1389
+ case "-" :
1390
+ if ($strToken!='')
1391
+ {
1392
+ $arrTokens[$intIndex] = self::makeToken($strToken);
1393
+ $intIndex++;
1394
+ $strToken = "";
1395
+ }
1396
+ $chrNext = substr($pstrExpression,$intCntr + 1, 1);
1397
+ if (count($arrTokens) > 0)
1398
+ $prevToken = $arrTokens[$intIndex - 1];
1399
+ if (/*intCntr == 0 ||*/(($prevToken->isArithmeticOp ||
1400
+ $prevToken->isLeftParen || $prevToken->isComma) &&
1401
+ (self::_isDigit($chrNext) || $chrNext == "(")))
1402
+ {
1403
+ // Negative Number
1404
+ $strToken .= $chrChar;
1405
+ }
1406
+ else
1407
+ {
1408
+ $arrTokens[$intIndex] = self::makeToken($chrChar);
1409
+ $intIndex++;
1410
+ $strToken = "";
1411
+ }
1412
+ break;
1413
+ case "+" :
1414
+ if ($strToken!='')
1415
+ {
1416
+ $arrTokens[$intIndex] = self::makeToken($strToken);
1417
+ $intIndex++;
1418
+ $strToken = "";
1419
+ }
1420
+ $chrNext = substr($pstrExpression,$intCntr + 1, 1);
1421
+ if (count($arrTokens) > 0)
1422
+ $prevToken = $arrTokens[$intIndex - 1];
1423
+ if (/*intCntr == 0 ||*/ (($prevToken->isArithmeticOp ||
1424
+ $prevToken->isLeftParen || $prevToken->isComma) &&
1425
+ (self::_isDigit($chrNext) || $chrNext == "(")))
1426
+ {
1427
+ // positive Number
1428
+ $strToken .= $chrChar;
1429
+ }
1430
+ else
1431
+ {
1432
+ $arrTokens[$intIndex] = self::makeToken($chrChar);
1433
+ $intIndex++;
1434
+ $strToken = "";
1435
+ }
1436
+ break;
1437
+ case "<" :
1438
+ $chrNext = substr($pstrExpression,$intCntr + 1, 1);
1439
+ if ($strToken!='')
1440
+ {
1441
+ $arrTokens[$intIndex] = self::makeToken($strToken);
1442
+ $intIndex++;
1443
+ $strToken = "";
1444
+ }
1445
+ if ($chrNext == "=")
1446
+ {
1447
+ $arrTokens[$intIndex] = self::makeToken($chrChar . "=");
1448
+ $intIndex++;
1449
+ $intCntr++;
1450
+ }
1451
+ else if ($chrNext == ">")
1452
+ {
1453
+ $arrTokens[$intIndex] = self::makeToken($chrChar . ">");
1454
+ $intIndex++;
1455
+ $intCntr++;
1456
+ }
1457
+ else
1458
+ {
1459
+ $arrTokens[$intIndex] = self::makeToken($chrChar);
1460
+ $intIndex++;
1461
+ }
1462
+ break;
1463
+ case ">" :
1464
+ $chrNext = substr($pstrExpression,$intCntr + 1, 1);
1465
+ if ($strToken!='')
1466
+ {
1467
+ $arrTokens[$intIndex] = self::makeToken($strToken);
1468
+ $intIndex++;
1469
+ $strToken = "";
1470
+ }
1471
+ if ($chrNext == "=")
1472
+ {
1473
+ $arrTokens[$intIndex] = self::makeToken($chrChar . "=");
1474
+ $intIndex++;
1475
+ $intCntr++;
1476
+ }
1477
+ else
1478
+ {
1479
+ $arrTokens[$intIndex] = self::makeToken($chrChar);
1480
+ $intIndex++;
1481
+ }
1482
+ break;
1483
+ case "=" :
1484
+ if ($strToken!='')
1485
+ {
1486
+ $arrTokens[$intIndex] = self::makeToken($strToken);
1487
+ $intIndex++;
1488
+ $strToken = "";
1489
+ }
1490
+ $arrTokens[$intIndex] = self::makeToken($chrChar);
1491
+ $intIndex++;
1492
+ break;
1493
+ case "'" :
1494
+ case "\"" :
1495
+ if ($strToken!='')
1496
+ {
1497
+ $arrTokens[$intIndex] = self::makeToken($strToken);
1498
+ $intIndex++;
1499
+ $strToken = "";
1500
+ }
1501
+ /*
1502
+ var found=false;
1503
+ var initCnt=intCntr;
1504
+ while (!found)
1505
+ {
1506
+ intPos = pstrExpression.indexOf(chrChar, intCntr + 1);
1507
+ if (intPos < 0)
1508
+ throw "Unterminated string constant";
1509
+ else
1510
+ {
1511
+ if (pstrExpression.charAt(intPos-1)!='\\') // not escape quote
1512
+ {
1513
+ found=true;
1514
+ strToken += pstrExpression.substring(initCnt + 1, intPos);
1515
+ // replace all escaped quotes inside string
1516
+ var strTok2=strToken.replace('\\'+chrChar,chrChar);
1517
+ while (strToken!=strTok2)
1518
+ {
1519
+ strToken=strTok2
1520
+ strTok2=strToken.replace('\\'+chrChar,chrChar);
1521
+ }
1522
+ strToken=new String(strTok2);
1523
+ strToken._isStringLiteral=true;
1524
+ arrTokens[intIndex] = _makeToken(strToken);
1525
+ intIndex++;
1526
+ strToken = "";
1527
+ intCntr = intPos;
1528
+ }
1529
+ else
1530
+ {
1531
+ intCntr=intPos;
1532
+ }
1533
+ }
1534
+ }*/
1535
+ $intPos = strpos($pstrExpression,$chrChar, $intCntr + 1);
1536
+ if ($intPos < 0)
1537
+ throw new Exception("Unterminated string constant");
1538
+ else
1539
+ {
1540
+ $strToken .= substr($pstrExpression,$intCntr + 1, $intPos-$intCntr-1);
1541
+ $strToken=(object)array('val'=>$strToken,'_isStringLiteral'=>true);
1542
+ $arrTokens[$intIndex] = self::makeToken($strToken);
1543
+ $intIndex++;
1544
+ $strToken = "";
1545
+ $intCntr = $intPos;
1546
+ }
1547
+ break;
1548
+ default :
1549
+ $strToken .= $chrChar;
1550
+ break;
1551
+ }
1552
+ $intCntr++;
1553
+ }
1554
+ if ($intBraces > 0)
1555
+ throw new Exception("Unbalanced parenthesis!");
1556
+
1557
+ if ($strToken!='')
1558
+ $arrTokens[$intIndex] = self::makeToken($strToken);
1559
+ return $arrTokens;
1560
+ }
1561
+ }
1562
+
1563
+
1564
+
1565
+ class Toolset_Parser
1566
+ {
1567
+
1568
+ private $strInFix = null;
1569
+ private $arrVars = array();
1570
+ private $arrTokens = null;
1571
+ private $arrPostFix = null;
1572
+ private $dtFormat = "d/m/Y";
1573
+
1574
+ /*------------------------------------------------------------------------------
1575
+ * NAME : HandleFunctions
1576
+ * PURPOSE : Execute built-in functions
1577
+ * PARAMETERS : pstrTok - The current function name
1578
+ * pStack - Operand stack
1579
+ * RETURNS : Nothing, the result is pushed back onto the stack.
1580
+ *----------------------------------------------------------------------------*/
1581
+ private function _HandleFunctions($pstrTok, &$pStack, $pdtFormat, &$parrVars)
1582
+ {
1583
+ if (!$pstrTok->isFunction)
1584
+ throw new Exception("Unsupported function token [" . $pstrTok->val . "]");
1585
+
1586
+ $varTmp = $pstrTok->val;
1587
+ $arrArgs = array();
1588
+ $varTerm = Toolset_Tokenizer::$ARG_TERMINAL;
1589
+ while (!$pStack->IsEmpty())
1590
+ {
1591
+ $varTerm = $pStack->Pop();
1592
+ if (!$varTerm->isArgTerminal)
1593
+ $arrArgs[] = $varTerm;
1594
+ else
1595
+ break;
1596
+ }
1597
+
1598
+ switch ($varTmp)
1599
+ {
1600
+ case "ARRAY" :
1601
+
1602
+ $arrArray=array();
1603
+
1604
+ $objTmp = 0;
1605
+ $intCntr = count($arrArgs);
1606
+ while (--$intCntr >= 0)
1607
+ {
1608
+ $varTerm = $arrArgs[$intCntr];
1609
+ if ($varTerm->isVariable)
1610
+ {
1611
+ if (!isset($parrVars[$varTerm->val]))
1612
+ throw new Exception("Variable [" . $varTerm->val . "] not defined");
1613
+ else
1614
+ $varTerm = $parrVars[$varTerm->val];
1615
+ }
1616
+ $arrArray=array_merge($arrArray,Toolset_Tokenizer::toArray($varTerm->val));
1617
+ }
1618
+ $pStack->Push(Toolset_Tokenizer::makeToken($arrArray,Toolset_Tokenizer::$TOKEN_TYPE['ARRAY']));
1619
+ break;
1620
+ case "TODAY" :
1621
+ $pStack->Push(Toolset_Tokenizer::makeToken(Toolset_DateParser::currentDate(), Toolset_Tokenizer::$TOKEN_TYPE['DATE']));
1622
+ break;
1623
+ case "ACOS" :
1624
+ case "ASIN" :
1625
+ case "ATAN" :
1626
+ throw new Exception("Function [" . $varTmp . "] is not implemented!");
1627
+ break;
1628
+ case "ABS" :
1629
+ case "CHR" :
1630
+ case "COS" :
1631
+ case "FIX" :
1632
+ case "HEX" :
1633
+ case "LOG" :
1634
+ case "RAND" :
1635
+ case "ROUND" :
1636
+ case "SIN" :
1637
+ case "SQRT" :
1638
+ case "TAN" :
1639
+ if ($varTmp != "RAND")
1640
+ {
1641
+ if (count($arrArgs) < 1)
1642
+ throw new Exception($varTmp . " requires at least one argument!");
1643
+ else if (count($arrArgs) > 1)
1644
+ throw new Exception($varTmp . " requires only one argument!");
1645
+ }
1646
+ else
1647
+ {
1648
+ if (count($arrArgs) < 1)
1649
+ throw new Exception($varTmp . " requires at least one argument!");
1650
+ else if (count($arrArgs) > 2)
1651
+ throw new Exception($varTmp . " requires at most two arguments!");
1652
+ }
1653
+ $varTerm = $arrArgs[0];
1654
+ if ($varTerm->isVariable)
1655
+ {
1656
+ if (!isset($parrVars[$varTerm->val]))
1657
+ throw new Exception("Variable [" . $varTerm->val . "] not defined");
1658
+ else
1659
+ $varTerm = $parrVars[$varTerm->val];
1660
+ }
1661
+
1662
+ $objTmp=$varTerm->val;
1663
+
1664
+ $rand_min=$rand_max=0;
1665
+
1666
+ if ( is_numeric( $objTmp ) === false )
1667
+ throw new Exception($varTmp . " operates on numeric operands only!");
1668
+ else
1669
+ {
1670
+ $objTmp = Toolset_Tokenizer::toNumber($varTerm->val);
1671
+ if ($varTmp == "RAND")
1672
+ {
1673
+ $rand_max=floor($objTmp);
1674
+ if (count($arrArgs) == 2)
1675
+ {
1676
+ $varTerm = $arrArgs[1];
1677
+ if ($varTerm->isVariable)
1678
+ {
1679
+ if (!isset($parrVars[$varTerm->val]))
1680
+ throw new Exception("Variable [" . $varTerm->val . "] not defined");
1681
+ else
1682
+ $varTerm = $parrVars[$varTerm->val];
1683
+ }
1684
+
1685
+ if (!$varTerm->isNumber)
1686
+ throw new Exception($varTmp . " operates on numeric operands only!");
1687
+
1688
+ $objTmp = Toolset_Tokenizer::toNumber($varTerm->val);
1689
+
1690
+ $rand_min=floor($objTmp);
1691
+ }
1692
+ }
1693
+ }
1694
+
1695
+ if ($varTmp == "ABS")
1696
+ $pStack->Push(Toolset_Tokenizer::makeToken(abs($objTmp),Toolset_Tokenizer::$TOKEN_TYPE['NUMBER']));
1697
+ else if ($varTmp == "CHR")// TODO check what happens when $objTmp is empty; what does chr() return?
1698
+ $pStack->Push(Toolset_Tokenizer::makeToken(chr($objTmp),Toolset_Tokenizer::$TOKEN_TYPE['STRING_LITERAL']));
1699
+ else if ($varTmp == "COS")
1700
+ $pStack->Push(Toolset_Tokenizer::makeToken(cos($objTmp),Toolset_Tokenizer::$TOKEN_TYPE['NUMBER']));
1701
+ else if ($varTmp == "FIX")
1702
+ $pStack->Push(Toolset_Tokenizer::makeToken(floor($objTmp),Toolset_Tokenizer::$TOKEN_TYPE['NUMBER']));
1703
+ else if ($varTmp == "HEX")
1704
+ $pStack->Push(Toolset_Tokenizer::makeToken(dechex($objTmp),Toolset_Tokenizer::$TOKEN_TYPE['STRING_LITERAL']));
1705
+ else if ($varTmp == "LOG")
1706
+ $pStack->Push(Toolset_Tokenizer::makeToken(log($objTmp),Toolset_Tokenizer::$TOKEN_TYPE['NUMBER']));
1707
+ else if ($varTmp == "RAND")
1708
+ $pStack->Push(Toolset_Tokenizer::makeToken(mt_rand($rand_min,$rand_max),Toolset_Tokenizer::$TOKEN_TYPE['NUMBER']));
1709
+ else if ($varTmp == "ROUND")
1710
+ $pStack->Push(Toolset_Tokenizer::makeToken(round($objTmp),Toolset_Tokenizer::$TOKEN_TYPE['NUMBER']));
1711
+ else if ($varTmp == "SIN")
1712
+ $pStack->Push(Toolset_Tokenizer::makeToken(sin($objTmp),Toolset_Tokenizer::$TOKEN_TYPE['NUMBER']));
1713
+ else if ($varTmp == "SQRT")
1714
+ $pStack->Push(Toolset_Tokenizer::makeToken(sqrt($objTmp),Toolset_Tokenizer::$TOKEN_TYPE['NUMBER']));
1715
+ else if ($varTmp == "TAN")
1716
+ $pStack->Push(Toolset_Tokenizer::makeToken(tan($objTmp),Toolset_Tokenizer::$TOKEN_TYPE['NUMBER']));
1717
+ break;
1718
+ case "STR" :
1719
+ if (count($arrArgs) < 1)
1720
+ throw new Exception($varTmp . " requires at least one argument!");
1721
+ else if (count($arrArgs) > 2)
1722
+ throw new Exception($varTmp . " requires at most two arguments!");
1723
+ $varTerm = $arrArgs[count($arrArgs)-1];
1724
+ if ($varTerm->isVariable)
1725
+ {
1726
+ if (!isset($parrVars[$varTerm->val]))
1727
+ throw new Exception("Variable [" . $varTerm->val . "] not defined");
1728
+ else
1729
+ $varTerm = $parrVars[$varTerm->val];
1730
+ }
1731
+ // if date, output formated date string
1732
+ if ($varTerm->isDate)
1733
+ {
1734
+ $format='';
1735
+ if (count($arrArgs)==2)
1736
+ {
1737
+ $varFormat = $arrArgs[0];
1738
+ if ($varFormat->isVariable)
1739
+ {
1740
+ if (!isset($parrVars[$varFormat->val]))
1741
+ throw new Exception("Variable [" . $varFormat->val . "] not defined");
1742
+ else
1743
+ $varFormat = $parrVars[$varFormat->val];
1744
+ }
1745
+
1746
+ if (!$varFormat->isStringLiteral)
1747
+ throw new Exception("format argument for " . $varTmp . " must be a string!");
1748
+ $format=$varFormat->val;
1749
+ }
1750
+ $pStack->Push(Toolset_Tokenizer::makeToken(Toolset_DateParser::formatDate($varTerm->val, $format),Toolset_Tokenizer::$TOKEN_TYPE['STRING_LITERAL']));
1751
+ }
1752
+ else // just convert to string
1753
+ $pStack->Push(Toolset_Tokenizer::makeToken((string)$varTerm->val.'',Toolset_Tokenizer::$TOKEN_TYPE['STRING_LITERAL']));
1754
+ break;
1755
+ case "ASC" :
1756
+ if (count($arrArgs) > 1)
1757
+ throw new Exception($varTmp . " requires only one argument!");
1758
+ else if (count($arrArgs) < 1)
1759
+ throw new Exception($varTmp . " requires at least one argument!");
1760
+ $varTerm = $arrArgs[0];
1761
+ if ($varTerm->isVariable)
1762
+ {
1763
+ if (!isset($parrVars[$varTerm->val]))
1764
+ throw new Exception("Variable [" . $varTerm->val . "] not defined");
1765
+ else
1766
+ $varTerm = $parrVars[$varTerm]->val;
1767
+ }
1768
+
1769
+ if( $varTerm->isNumber )
1770
+ {
1771
+ $varTerm->val = (string) $varTerm->val;
1772
+ $varTerm->isStringLiteral = true;
1773
+ }
1774
+
1775
+ if (!$varTerm->isStringLiteral)
1776
+ {
1777
+ throw new Exception($varTmp . " requires a string type operand!");
1778
+ }
1779
+ else
1780
+ {
1781
+ if ( strlen( $varTerm->val ) > 0 )
1782
+ {
1783
+ $ascii_char = ord($varTerm->val{0});
1784
+ }
1785
+ else
1786
+ {
1787
+ $ascii_char = 0;
1788
+ }
1789
+ $pStack->Push(Toolset_Tokenizer::makeToken($ascii_char,Toolset_Tokenizer::$TOKEN_TYPE['NUMBER']));
1790
+ }
1791
+ break;
1792
+ case "REGEX" :
1793
+ if (count($arrArgs) < 1)
1794
+ throw new Exception($varTmp . " requires at least one argument!");
1795
+ else if (count($arrArgs) > 2)
1796
+ throw new Exception($varTmp . " requires at most two arguments!");
1797
+
1798
+ $varTerm = $arrArgs[count($arrArgs)-1];
1799
+ if ($varTerm->isVariable)
1800
+ {
1801
+ if (!isset($parrVars[$varTerm->val]))
1802
+ throw new Exception("Variable [" . $varTerm->val . "] not defined");
1803
+ else
1804
+ $varTerm = $parrVars[$varTerm->val];
1805
+ }
1806
+
1807
+ if (!$varTerm->isStringLiteral)
1808
+ throw new Exception($varTmp . " operates on string type operands!");
1809
+
1810
+ $opts=Toolset_Tokenizer::$EMPTY_STRING;
1811
+ if (count($arrArgs)==2)
1812
+ {
1813
+ $opts = $arrArgs[0];
1814
+ if ($opts->isVariable)
1815
+ {
1816
+ if (!isset($parrVars[$opts->val]))
1817
+ throw new Exception("Variable [" . $opts->val . "] not defined");
1818
+ else
1819
+ $opts = $parrVars[$opts->val];
1820
+ }
1821
+
1822
+ if (!$opts->isStringLiteral)
1823
+ throw new Exception($varTmp . " operates on string type operands!");
1824
+ }
1825
+ $pStack->Push(Toolset_Tokenizer::makeToken(Toolset_Functions::Regex($varTerm->val, $opts->val),Toolset_Tokenizer::$TOKEN_TYPE['REGEX']));
1826
+ break;
1827
+ case "LCASE" :
1828
+ case "UCASE" :
1829
+ case "NUM" :
1830
+ if (count($arrArgs) < 1)
1831
+ throw new Exception($varTmp . " requires at least one argument!");
1832
+ else if (count($arrArgs) > 1)
1833
+ throw new Exception($varTmp . " requires only one argument!");
1834
+
1835
+ $varTerm = $arrArgs[0];
1836
+ if ($varTerm->isVariable)
1837
+ {
1838
+ if (!isset($parrVars[$varTerm->val]))
1839
+ throw new Exception("Variable [" . $varTerm->val . "] not defined");
1840
+ else
1841
+ $varTerm = $parrVars[$varTerm->val];
1842
+ }
1843
+
1844
+ if( $varTerm->isNumber )
1845
+ {
1846
+ $varTerm->val = (string) $varTerm->val;
1847
+ $varTerm->isStringLiteral = true;
1848
+ }
1849
+
1850
+ if (!$varTerm->isStringLiteral && $varTmp != "NUM")
1851
+ throw new Exception($varTmp . " requires a string type operand!");
1852
+ else
1853
+ {
1854
+ if ($varTmp == "LCASE")
1855
+ {
1856
+ $pStack->Push(Toolset_Tokenizer::makeToken(strtolower($varTerm->val),Toolset_Tokenizer::$TOKEN_TYPE['STRING_LITERAL']));
1857
+ }
1858
+ else if ($varTmp == "UCASE")
1859
+ {
1860
+ $pStack->Push(Toolset_Tokenizer::makeToken(strtoupper($varTerm->val),Toolset_Tokenizer::$TOKEN_TYPE['STRING_LITERAL']));
1861
+ }
1862
+ else if ($varTmp == "NUM")
1863
+ {
1864
+ $objTmp=Toolset_Tokenizer::toNumber($varTerm->val)+0.0;
1865
+ if (is_nan($objTmp))
1866
+ throw new Exception($varTmp . " cannot convert [" . $varTerm->val . "] to number!");
1867
+ $pStack->Push(Toolset_Tokenizer::makeToken($objTmp,Toolset_Tokenizer::$TOKEN_TYPE['NUMBER']));
1868
+ }
1869
+ }
1870
+ break;
1871
+ case "LEN" :
1872
+ if (count($arrArgs) < 1)
1873
+ throw new Exception($varTmp . " requires at least one argument!");
1874
+ else if (count($arrArgs) > 1)
1875
+ throw new Exception($varTmp . " requires only one argument!");
1876
+
1877
+ $varTerm = $arrArgs[0];
1878
+ if ($varTerm->isVariable)
1879
+ {
1880
+ if (!isset($parrVars[$varTerm->val]))
1881
+ throw new Exception("Variable [" . $varTerm->val . "] not defined");
1882
+ else
1883
+ $varTerm = $parrVars[$varTerm->val];
1884
+ }
1885
+
1886
+ if (!$varTerm->isArray && !$varTerm->isStringLiteral)
1887
+ throw new Exception($varTmp . " requires a string or array type operand!");
1888
+ else
1889
+ {
1890
+ if ($varTerm->isStringLiteral)
1891
+ $pStack->Push(Toolset_Tokenizer::makeToken(strlen($varTerm->val),Toolset_Tokenizer::$TOKEN_TYPE['NUMBER']));
1892
+ else
1893
+ $pStack->Push(Toolset_Tokenizer::makeToken(count($varTerm->val),Toolset_Tokenizer::$TOKEN_TYPE['NUMBER']));
1894
+ }
1895
+ break;
1896
+ case "USER" :
1897
+ if (count($arrArgs) < 1)
1898
+ throw new Exception($varTmp . " requires at least one argument!");
1899
+ else if (count($arrArgs) > 1)
1900
+ throw new Exception($varTmp . " requires only one argument!");
1901
+
1902
+ $varTerm = $arrArgs[0];
1903
+ if ($varTerm->isVariable)
1904
+ {
1905
+ if (!isset($parrVars[$varTerm->val]))
1906
+ throw new Exception("Variable [" . $varTerm->val . "] not defined");
1907
+ else
1908
+ $varTerm = $parrVars[$varTerm->val];
1909
+ }
1910
+
1911
+ if (!$varTerm->isStringLiteral)
1912
+ throw new Exception($varTmp . " requires a string type operand!");
1913
+ else
1914
+ {
1915
+ $pStack->Push(Toolset_Tokenizer::makeToken(Toolset_Functions::User($varTerm->val),Toolset_Tokenizer::$TOKEN_TYPE['STRING_LITERAL']));
1916
+ }
1917
+ break;
1918
+ case "COOKIE" :
1919
+ if (count($arrArgs) < 1)
1920
+ throw new Exception($varTmp . " requires at least one argument!");
1921
+ else if (count($arrArgs) > 1)
1922
+ throw new Exception($varTmp . " requires only one argument!");
1923
+
1924
+ $varTerm = $arrArgs[0];
1925
+ if ($varTerm->isVariable)
1926
+ {
1927
+ if (!isset($parrVars[$varTerm->val]))
1928
+ throw new Exception("Variable [" . $varTerm->val . "] not defined");
1929
+ else
1930
+ $varTerm = $parrVars[$varTerm->val];
1931
+ }
1932
+
1933
+ if (!$varTerm->isStringLiteral)
1934
+ throw new Exception($varTmp . " requires a string type operand!");
1935
+ else
1936
+ {
1937
+ $pStack->Push(Toolset_Tokenizer::makeToken(Toolset_Functions::Cookie($varTerm->val),Toolset_Tokenizer::$TOKEN_TYPE['STRING_LITERAL']));
1938
+ }
1939
+ break;
1940
+ case "CONTAINS" :
1941
+ if (count($arrArgs) < 2)
1942
+ throw new Exception($varTmp . " requires at least two arguments!");
1943
+ else if (count($arrArgs) > 2)
1944
+ throw new Exception($varTmp . " requires only two arguments!");
1945
+
1946
+ $varTerm = $arrArgs[1];
1947
+ if ($varTerm->isVariable)
1948
+ {
1949
+ if (!isset($parrVars[$varTerm->val]))
1950
+ throw new Exception("Variable [" . $varTerm->val . "] not defined");
1951
+ else
1952
+ $varTerm = $parrVars[$varTerm->val];
1953
+ }
1954
+ $varTerm2 = $arrArgs[0];
1955
+ if ($varTerm2->isVariable)
1956
+ {
1957
+ if (!isset($parrVars[$varTerm2->val]))
1958
+ throw new Exception("Variable [" . $varTerm2->val . "] not defined");
1959
+ else
1960
+ $varTerm2 = $parrVars[$varTerm2->val];
1961
+ }
1962
+
1963
+ if ( !$varTerm->isArray )
1964
+ throw new Exception($varTmp . " requires an array as first argument!");
1965
+ else
1966
+ {
1967
+ $found=Toolset_Functions::Contains($varTerm->val, $varTerm2->val); //in_array($varTerm2->val,$varTerm->val);
1968
+ $pStack->Push(Toolset_Tokenizer::makeToken($found,Toolset_Tokenizer::$TOKEN_TYPE['BOOLEAN']));
1969
+ }
1970
+ break;
1971
+ case "DATE" :
1972
+ if (count($arrArgs) < 2)
1973
+ throw new Exception($varTmp . " requires at least two arguments!");
1974
+ else if (count($arrArgs) > 2)
1975
+ throw new Exception($varTmp . " requires only two arguments!");
1976
+
1977
+ $varTerm = $arrArgs[1];
1978
+ if ($varTerm->isVariable)
1979
+ {
1980
+ if (!isset($parrVars[$varTerm->val]))
1981
+ throw new Exception("Variable [" . $varTerm->val . "] not defined");
1982
+ else
1983
+ $varTerm = $parrVars[$varTerm->val];
1984
+ }
1985
+ $varFormat = $arrArgs[0];
1986
+ if ($varFormat->isVariable)
1987
+ {
1988
+ if (!isset($parrVars[$varFormat->val]))
1989
+ throw new Exception("Variable [" . $varFormat->val . "] not defined");
1990
+ else
1991
+ $varFormat = $parrVars[$varFormat->val];
1992
+ }
1993
+
1994
+ $dateobj=array();
1995
+ if (
1996
+ (!$varTerm->isStringLiteral) ||
1997
+ (!$varFormat->isStringLiteral)
1998
+ )
1999
+ throw new Exception($varTmp . " requires string type operands!");
2000
+ else if (!Toolset_Tokenizer::isDate($varTerm->val, $varFormat->val, $dateobj))
2001
+ throw new Exception($varTmp . " can not convert [" . $varTerm->val . "] to a valid date with format [" . $varFormat->val . "]!");
2002
+ else
2003
+ {
2004
+ if (isset($dateobj['date']))
2005
+ $pStack->Push(Toolset_Tokenizer::makeToken($dateobj['date'],Toolset_Tokenizer::$TOKEN_TYPE['DATE']));
2006
+ else
2007
+ throw new Exception($varTmp . " unknown error");
2008
+ }
2009
+ break;
2010
+ case "empty" :
2011
+ case "EMPTY" :
2012
+ if (count($arrArgs) < 1)
2013
+ throw new Exception($varTmp . " requires at least one argument!");
2014
+ else if (count($arrArgs) > 1)
2015
+ throw new Exception($varTmp . " requires only one arguments!");
2016
+
2017
+ $varFormat = $arrArgs[0];
2018
+
2019
+ if( $varFormat->isEmpty )
2020
+ {
2021
+ $pStack->Push(Toolset_Tokenizer::makeToken(true,Toolset_Tokenizer::$TOKEN_TYPE['BOOLEAN']));
2022
+ }
2023
+ elseif( $varFormat->isStringLiteral && $varFormat->val === '' )
2024
+ {
2025
+ $pStack->Push(Toolset_Tokenizer::makeToken(true,Toolset_Tokenizer::$TOKEN_TYPE['BOOLEAN']));
2026
+ }
2027
+ elseif( $varFormat->isArray && count( $varFormat->val ) === 0 )
2028
+ {
2029
+ $pStack->Push(Toolset_Tokenizer::makeToken(true,Toolset_Tokenizer::$TOKEN_TYPE['BOOLEAN']));
2030
+ }
2031
+ elseif( $varFormat->isDate && !$varFormat->val )
2032
+ {
2033
+ $pStack->Push(Toolset_Tokenizer::makeToken(true,Toolset_Tokenizer::$TOKEN_TYPE['BOOLEAN']));
2034
+ }
2035
+ else
2036
+ {
2037
+ $pStack->Push(Toolset_Tokenizer::makeToken(false,Toolset_Tokenizer::$TOKEN_TYPE['BOOLEAN']));
2038
+ }
2039
+
2040
+ break;
2041
+ case "LEFT" :
2042
+ case "RIGHT" :
2043
+ if (count($arrArgs) < 2)
2044
+ throw new Exception($varTmp . " requires at least two arguments!");
2045
+ else if (count($arrArgs) > 2)
2046
+ throw new Exception($varTmp . " requires only two arguments!");
2047
+
2048
+ for ($intCntr = 0; $intCntr < count($arrArgs); $intCntr++)
2049
+ {
2050
+ $varTerm = $arrArgs[$intCntr];
2051
+ if ($varTerm->isVariable)
2052
+ {
2053
+ if (!isset($parrVars[$varTerm->val]))
2054
+ throw new Exception("Variable [" . $varTerm->val . "] not defined");
2055
+ else
2056
+ $varTerm = $parrVars[$varTerm->val];
2057
+ }
2058
+
2059
+ if( $varTerm->isNumber )
2060
+ {
2061
+ $arrArgs[1]->val = (string) $arrArgs[1]->val;
2062
+ $varTerm->isStringLiteral = true;
2063
+ }
2064
+
2065
+ if ($intCntr == 0 && !$varTerm->isNumber)
2066
+ throw new Exception($varTmp . " operator requires numeric length!");
2067
+ else if ($intCntr == 1 && !$varTerm->isStringLiteral)
2068
+ throw new Exception($varTmp . " operator requires a string operand!");
2069
+ $arrArgs[$intCntr] = $varTerm;
2070
+ }
2071
+ $varTerm = $arrArgs[1]->val;
2072
+ $objTmp = Toolset_Tokenizer::toNumber($arrArgs[0]->val);
2073
+ if ($varTmp == "LEFT")
2074
+ {
2075
+ $pStack->Push(Toolset_Tokenizer::makeToken(substr($varTerm,0, $objTmp),Toolset_Tokenizer::$TOKEN_TYPE['STRING_LITERAL']));
2076
+ }
2077
+ else
2078
+ {
2079
+ $pStack->Push(Toolset_Tokenizer::makeToken(substr($varTerm,(strlen($varTerm) - $objTmp), $objTmp),Toolset_Tokenizer::$TOKEN_TYPE['STRING_LITERAL']));
2080
+ }
2081
+ break;
2082
+ case "MID" :
2083
+ case "IIF" :
2084
+ if (count($arrArgs) < 3)
2085
+ throw new Exception($varTmp . " requires at least three arguments!");
2086
+ else if (count($arrArgs) > 3)
2087
+ throw new Exception($varTmp . " requires only three arguments!");
2088
+
2089
+ for ($intCntr = 0; $intCntr < count($arrArgs); $intCntr++)
2090
+ {
2091
+ $varTerm = $arrArgs[$intCntr];
2092
+ if ($varTerm->isVariable)
2093
+ {
2094
+ if (!isset($parrVars[$varTerm->val]))
2095
+ throw new Exception("Variable [" . $varTerm->val . "] not defined");
2096
+ else
2097
+ $varTerm = $parrVars[$varTerm->val];
2098
+ }
2099
+
2100
+ if( $varTerm->isNumber )
2101
+ {
2102
+ $arrArgs[2]->val = (string) $arrArgs[2]->val;
2103
+ $varTerm->isStringLiteral = true;
2104
+ }
2105
+
2106
+ if ($varTmp == "MID" && $intCntr <= 1 && !$varTerm->isNumber)
2107
+ throw new Exception($varTmp . " operator requires numeric lengths!");
2108
+ else if ($varTmp == "MID" && $intCntr == 2 && !$varTerm->isStringLiteral)
2109
+ throw new Exception($varTmp . " operator requires a string input!");
2110
+ // else if ($varTmp == "IIF" && $intCntr == 2 && !$varTerm->isBoolean && !$varTerm->isNumber)
2111
+ // throw new Exception($varTmp . " operator requires boolean condition!");
2112
+ $arrArgs[$intCntr] = $varTerm;
2113
+ }
2114
+ if ($varTmp == "MID")
2115
+ {
2116
+ $varTerm = $arrArgs[2]->val;
2117
+ $objOp1 = Toolset_Tokenizer::toNumber($arrArgs[1]->val);
2118
+ $objOp2 = Toolset_Tokenizer::toNumber($arrArgs[0]->val);
2119
+ $pStack->Push(Toolset_Tokenizer::makeToken(substr($varTerm,$objOp1, $objOp2-$objOp1),Toolset_Tokenizer::$TOKEN_TYPE['STRING_LITERAL']));
2120
+ }
2121
+ else
2122
+ {
2123
+ $varTerm = Toolset_Tokenizer::toBoolean($arrArgs[2]->val);
2124
+ if ($varTerm)
2125
+ $objOp1 = $arrArgs[1];
2126
+ else
2127
+ $objOp1 = $arrArgs[0];
2128
+ $pStack->Push($objOp1);
2129
+ }
2130
+ break;
2131
+ case "AVG" :
2132
+ case "MAX" :
2133
+ case "MIN" :
2134
+ if (count($arrArgs) < 1)
2135
+ throw new Exception($varTmp . " requires at least one operand!");
2136
+
2137
+ $_arr=array();
2138
+ $intCntr = count($arrArgs);
2139
+ while (--$intCntr>=0)
2140
+ {
2141
+ $varTerm = $arrArgs[$intCntr];
2142
+ if ($varTerm->isVariable)
2143
+ {
2144
+ if (!isset($parrVars[$varTerm->val]))
2145
+ throw new Exception("Variable [" . $varTerm->val . "] not defined");
2146
+ else
2147
+ $varTerm = $parrVars[$varTerm->val];
2148
+ }
2149
+ if (!$varTerm->isNumber && !$varTerm->isArray)
2150
+ throw new Exception($varTmp . " requires numeric or array operands only!");
2151
+
2152
+ if (!$varTerm->isArray)
2153
+ $_arr=array_merge($_arr,Toolset_Tokenizer::toArray(Toolset_Tokenizer::toNumber($varTerm->val)));
2154
+ else
2155
+ $_arr=array_merge($_arr,$varTerm->val);
2156
+ }
2157
+ $intCntr = -1;
2158
+ $objTmp = 0;
2159
+ while (++$intCntr < count($_arr))
2160
+ {
2161
+ $varTerm = $_arr[$intCntr];
2162
+ if ($varTmp == "AVG")
2163
+ $objTmp += $varTerm;
2164
+ else if ($varTmp == "MAX")
2165
+ {
2166
+ if ($intCntr == 0)
2167
+ $objTmp = $varTerm;
2168
+ else if ($objTmp < $varTerm)
2169
+ $objTmp = $varTerm;
2170
+ }
2171
+ else if ($varTmp == "MIN")
2172
+ {
2173
+ if ($intCntr == 0)
2174
+ $objTmp = $varTerm;
2175
+ else if ($objTmp > $varTerm)
2176
+ $objTmp = $varTerm;
2177
+ }
2178
+ }
2179
+ if ($varTmp == "AVG" && !empty($_arr))
2180
+ $pStack->Push(Toolset_Tokenizer::makeToken($objTmp/count($_arr),Toolset_Tokenizer::$TOKEN_TYPE['NUMBER']));
2181
+ else if ($varTmp == "AVG")
2182
+ $pStack->Push(Toolset_Tokenizer::makeToken(0,Toolset_Tokenizer::$TOKEN_TYPE['NUMBER']));
2183
+ else
2184
+ $pStack->Push(Toolset_Tokenizer::makeToken($objTmp,Toolset_Tokenizer::$TOKEN_TYPE['NUMBER']));
2185
+ unset($_arr);
2186
+ break;
2187
+ }
2188
+ }
2189
+
2190
+ /*------------------------------------------------------------------------------
2191
+ * NAME : InFixToPostFix
2192
+ * PURPOSE : Convert an Infix expression into a postfix (RPN) equivalent
2193
+ * PARAMETERS : Infix expression element array
2194
+ * RETURNS : array containing postfix expression element tokens
2195
+ *----------------------------------------------------------------------------*/
2196
+ private function _InFixToPostFix($arrToks)
2197
+ {
2198
+ $blnStart = false;
2199
+ $intIndex = 0;
2200
+ $arrPFix = array();
2201
+ $myStack = new Toolset_Stack();
2202
+
2203
+ // Infix to postfix converter
2204
+ for ($intCntr = 0; $intCntr < count($arrToks); $intCntr++)
2205
+ {
2206
+ /*echo '<br />Tok: <br />';
2207
+ print_r($arrToks);
2208
+ echo '<br />PF: <br />';
2209
+ print_r($arrPFix);
2210
+ echo '<br />';*/
2211
+
2212
+ $strTok = $arrToks[$intCntr];
2213
+ switch ($strTok->type)
2214
+ {
2215
+ case Toolset_Tokenizer::$TOKEN_TYPE['LEFT_PAREN'] :
2216
+ if ($myStack->Size() > 0 && $myStack->Get(0)->isFunction)
2217
+ {
2218
+ $arrPFix[$intIndex] = Toolset_Tokenizer::$ARG_TERMINAL;
2219
+ $intIndex++;
2220
+ }
2221
+ $myStack->Push($strTok);
2222
+ break;
2223
+ case Toolset_Tokenizer::$TOKEN_TYPE['RIGHT_PAREN'] :
2224
+ $blnStart = true;
2225
+ while (!$myStack->IsEmpty())
2226
+ {
2227
+ $strTok = $myStack->Pop();
2228
+ if (!$strTok->isLeftParen)
2229
+ {
2230
+ $arrPFix[$intIndex] = $strTok;
2231
+ $intIndex++;
2232
+ }
2233
+ else
2234
+ {
2235
+ $blnStart = false;
2236
+ break;
2237
+ }
2238
+ }
2239
+ if ($myStack->IsEmpty() && $blnStart)
2240
+ throw new Exception("Unbalanced parenthesis!");
2241
+ break;
2242
+ case Toolset_Tokenizer::$TOKEN_TYPE['COMMA'] :
2243
+ while (!$myStack->IsEmpty())
2244
+ {
2245
+ $strTok = $myStack->Get(0);
2246
+ if ($strTok->isLeftParen) break;
2247
+ $arrPFix[$intIndex] = $myStack->Pop();
2248
+ $intIndex++;
2249
+ }
2250
+ break;
2251
+ //case Tokenizer.TOKEN_TYPE.UNARY_NEGATIVE :
2252
+ //case Tokenizer.TOKEN_TYPE.UNARY_NEGATION :
2253
+ case Toolset_Tokenizer::$TOKEN_TYPE['ARITHMETIC_OP'] :
2254
+ case Toolset_Tokenizer::$TOKEN_TYPE['LOGICAL_OP'] :
2255
+ case Toolset_Tokenizer::$TOKEN_TYPE['COMPARISON_OP'] :
2256
+ switch ($strTok->val)
2257
+ {
2258
+ /*case "-" :
2259
+ case "+" :
2260
+ case "NOT" :
2261
+ case "!" :
2262
+ case "^" :
2263
+ case "*" :
2264
+ case "/" :
2265
+ case "%" :
2266
+ case "AND" :
2267
+ case "&" :
2268
+ case "OR" :
2269
+ case "|" :
2270
+ case ">" :
2271
+ case "<" :
2272
+ case "=" :
2273
+ case ">=" :
2274
+ case "<=" :
2275
+ case "<>" :*/
2276
+ default:
2277
+ if ($strTok->val=='-')
2278
+ {
2279
+ // check for unary negative operator.
2280
+ $strPrev = null;
2281
+ if ($intCntr > 0)
2282
+ $strPrev = $arrToks[$intCntr - 1];
2283
+ //$strNext = $arrToks[$intCntr + 1];
2284
+ if ($strPrev === null || $strPrev->isArithmeticOp || $strPrev->isLeftParen || $strPrev->isComma)
2285
+ {
2286
+ $strTok = Toolset_Tokenizer::$UNARY_NEGATIVE;
2287
+ }
2288
+ }
2289
+ if ($strTok->val=='+')
2290
+ {
2291
+ // check for unary + addition operator, we need to ignore this.
2292
+ $strPrev = null;
2293
+ if ($intCntr > 0)
2294
+ $strPrev = $arrToks[$intCntr - 1];
2295
+ //$strNext = $arrToks[$intCntr + 1];
2296
+ if ($strPrev === null || $strPrev->isArithmeticOp || $strPrev->isLeftParen || $strPrev->isComma)
2297
+ {
2298
+ break;
2299
+ }
2300
+ }
2301
+ $strTop = Toolset_Tokenizer::$EMPTY_TOKEN;
2302
+ if (!$myStack->IsEmpty()) $strTop = $myStack->Get(0);
2303
+ if ($myStack->IsEmpty() || (!$myStack->IsEmpty() && $strTop->isLeftParen))
2304
+ {
2305
+ $myStack->Push($strTok);
2306
+ }
2307
+ else if ($strTok->precedence >= $strTop->precedence)
2308
+ {
2309
+ $myStack->Push($strTok);
2310
+ }
2311
+ else
2312
+ {
2313
+ // Pop operators with precedence >= operator strTok
2314
+ while (!$myStack->IsEmpty())
2315
+ {
2316
+ $strTop = $myStack->Get(0);
2317
+ if ($strTop->isLeftParen || $strTop->precedence < $strTok->precedence)
2318
+ {
2319
+ break;
2320
+ }
2321
+ else
2322
+ {
2323
+ $arrPFix[$intIndex] = $myStack->Pop();
2324
+ $intIndex++;
2325
+ }
2326
+ }
2327
+ $myStack->Push($strTok);
2328
+ }
2329
+ break;
2330
+ }
2331
+ break;
2332
+ default :
2333
+ if ($strTok->type!=Toolset_Tokenizer::$TOKEN_TYPE['FUNCTION'])
2334
+ {
2335
+ $arrPFix[$intIndex] = $strTok;
2336
+ $intIndex++;
2337
+ }
2338
+ else
2339
+ {
2340
+ $strTop = Toolset_Tokenizer::$EMPTY_TOKEN;
2341
+ if (!$myStack->IsEmpty()) $strTop = $myStack->Get(0);
2342
+ if ($myStack->IsEmpty() || (!$myStack->IsEmpty() && $strTop->isLeftParen))
2343
+ {
2344
+ $myStack->Push($strTok);
2345
+ }
2346
+ else if ($strTok->precedence >= $strTop->precedence)
2347
+ {
2348
+ $myStack->Push($strTok);
2349
+ }
2350
+ else
2351
+ {
2352
+ // Pop operators with precedence >= operator in strTok
2353
+ while (!$myStack->IsEmpty())
2354
+ {
2355
+ $strTop = $myStack->Get(0);
2356
+ if ($strTop->val == "(" || $strTop->precedence < $strTok->precedence)
2357
+ {
2358
+ break;
2359
+ }
2360
+ else
2361
+ {
2362
+ $arrPFix[$intIndex] = $myStack->Pop();
2363
+ $intIndex++;
2364
+ }
2365
+ }
2366
+ $myStack->Push($strTok);
2367
+ }
2368
+ }
2369
+ break;
2370
+ }
2371
+ }
2372
+
2373
+ // Pop remaining operators from stack.
2374
+ while (!$myStack->IsEmpty())
2375
+ {
2376
+ $arrPFix[$intIndex] = $myStack->Pop();
2377
+ $intIndex++;
2378
+ }
2379
+ return $arrPFix;
2380
+ }
2381
+
2382
+ private function _AddNewVariable($varObj, &$varArr=null)
2383
+ {
2384
+ //cred_log($varObj);
2385
+ if (!isset($varArr))
2386
+ $varArr = &$this->arrVars;
2387
+
2388
+ if (!isset($varArr))
2389
+ $varArr = array();
2390
+
2391
+ $varName=$varObj['name'];
2392
+ $varToken=null;
2393
+ if (isset($varObj['withType']))
2394
+ {
2395
+ //cred_log($varObj['withType']);
2396
+ switch($varObj['withType'])
2397
+ {
2398
+ case 'boolean':
2399
+ $varToken=Toolset_Tokenizer::makeToken($varObj['val'],Toolset_Tokenizer::$TOKEN_TYPE['BOOLEAN']);
2400
+ break;
2401
+ case 'number':
2402
+ $varToken=Toolset_Tokenizer::makeToken($varObj['val'],Toolset_Tokenizer::$TOKEN_TYPE['NUMBER']);
2403
+ break;
2404
+ case 'array':
2405
+ $varToken=Toolset_Tokenizer::makeToken($varObj['val'],Toolset_Tokenizer::$TOKEN_TYPE['ARRAY']);
2406
+ break;
2407
+ case 'date':
2408
+ if (isset($varObj['format']))
2409
+ $format=$varObj['format'];
2410
+ else
2411
+ $format=$this->dtFormat;
2412
+ $varToken=Toolset_Tokenizer::makeToken(Toolset_DateParser::parseDate($varObj['val'], $format),Toolset_Tokenizer::$TOKEN_TYPE['DATE']);
2413
+ break;
2414
+ case 'string':
2415
+ default:
2416
+ //cred_log('STRING');
2417
+ //cred_log(Toolset_Tokenizer::$TOKEN_TYPE);
2418
+ $varToken=Toolset_Tokenizer::makeToken($varObj['val'],Toolset_Tokenizer::$TOKEN_TYPE['STRING_LITERAL']/*, true*/);
2419
+ break;
2420
+ }
2421
+ }
2422
+ else
2423
+ $varToken=Toolset_Tokenizer::makeToken($varObj['val'],Toolset_Tokenizer::$TOKEN_TYPE['STRING_LITERAL']);
2424
+
2425
+ //cred_log($varToken);
2426
+ $varArr[$varName] = $varToken;
2427
+ }
2428
+
2429
+ private function _dumpPostFix($pf)
2430
+ {
2431
+ $out='';
2432
+ for ($i=0; $i<count($pf); $i++)
2433
+ $out.=$pf[$i]->val.',';
2434
+ return $out;
2435
+ }
2436
+
2437
+ private function _clonePostFix($pf)
2438
+ {
2439
+ $newpf=array();
2440
+ for ($i=0; $i<count($pf); $i++)
2441
+ $newpf[$i]=Toolset_Tokenizer::cloneToken($pf[$i]);
2442
+ return $newpf;
2443
+ }
2444
+
2445
+ private function _ParseExpression()
2446
+ {
2447
+ $arrTokens = Toolset_Tokenizer::Tokanize($this->strInFix);
2448
+ if (!isset($arrTokens))
2449
+ throw new Exception("Unable to tokanize the expression!");
2450
+ if (count($arrTokens) <= 0)
2451
+ throw new Exception("Unable to tokanize the expression!");
2452
+
2453
+ //print_r($arrTokens);
2454
+
2455
+ $myarrPostFix = $this->_InFixToPostFix($arrTokens);
2456
+ if (!isset($myarrPostFix))
2457
+ throw new Exception("Unable to convert the expression to postfix form!");
2458
+ if (count($myarrPostFix) <= 0)
2459
+ throw new Exception("Unable to convert the expression to postfix form!");
2460
+ //print_r($myarrPostFix);
2461
+ return $myarrPostFix;
2462
+ }
2463
+
2464
+ private function _getVariable($strVarName, &$varArr=null)
2465
+ {
2466
+ if (!isset($varArr))
2467
+ $varArr=$this->arrVars;
2468
+
2469
+ if (!isset($varArr))
2470
+ throw new Exception("Variable values are not supplied!");
2471
+
2472
+ if (!isset($varArr[$strVarName]))
2473
+ throw new Exception("Variable [" . $strVarName . "] not defined");
2474
+
2475
+ //cred_log($varArr);
2476
+ return $varArr[$strVarName];
2477
+ }
2478
+
2479
+ // postfix function evaluator
2480
+ private function _EvaluateExpression(&$myarrPostFix, &$myvarArr)
2481
+ {
2482
+ if (!isset($myarrPostFix))
2483
+ $myarrPostFix=$this->_ParseExpression();
2484
+ if (count($myarrPostFix) == 0)
2485
+ throw new Exception("Unable to parse the expression!");
2486
+ if (!isset($myarrPostFix) || count($myarrPostFix)==0)
2487
+ {
2488
+ throw new Exception("Invalid postfix expression!");
2489
+ }
2490
+
2491
+ $intIndex = 0;
2492
+ $myStack = new Toolset_Stack();
2493
+
2494
+ //echo $this->_dumpPostFix($myarrPostFix);
2495
+
2496
+ while ($intIndex < count($myarrPostFix))
2497
+ {
2498
+ //echo $myStack->toString();
2499
+
2500
+ $strTok = $myarrPostFix[$intIndex];
2501
+ switch ($strTok->type)
2502
+ {
2503
+ case Toolset_Tokenizer::$TOKEN_TYPE['ARG_TERMINAL'] :
2504
+ $myStack->Push($strTok);
2505
+ break;
2506
+ case Toolset_Tokenizer::$TOKEN_TYPE['UNARY_NEGATIVE'] :
2507
+ if ($myStack->IsEmpty())
2508
+ throw new Exception("No operand to negate!");
2509
+
2510
+ $objOp1 = null;
2511
+ $objOp2 = null;
2512
+ $objOp1 = $myStack->Pop();
2513
+ if ($objOp1->isVariable)
2514
+ $objOp1 = $this->_getVariable($objOp1->val, $myvarArr);
2515
+
2516
+ $dblNo = Toolset_Tokenizer::toNumber($objOp1->val);
2517
+ if (is_nan($dblNo))
2518
+ throw new Exception("Not a numeric value!");
2519
+ else
2520
+ {
2521
+ $dblNo = (0 - $dblNo);
2522
+ $myStack->Push(Toolset_Tokenizer::makeToken($dblNo,Toolset_Tokenizer::$TOKEN_TYPE['NUMBER']));
2523
+ }
2524
+ break;
2525
+ case Toolset_Tokenizer::$TOKEN_TYPE['UNARY_NEGATION'] :
2526
+ if ($myStack->IsEmpty())
2527
+ throw new Exception("No operand on stack!");
2528
+
2529
+ $objOp1 = null;
2530
+ $objOp2 = null;
2531
+ $objOp1 = $myStack->Pop();
2532
+ if ($objOp1->isVariable)
2533
+ $objOp1 = $this->_getVariable($objOp1->val, $myvarArr);
2534
+
2535
+ $objOp1 = Toolset_Tokenizer::toBoolean($objOp1->val);
2536
+ if ($objOp1 === null)
2537
+ throw new Exception($strTok->val . " applied not on a boolean value!");
2538
+ else
2539
+ $myStack->Push(Toolset_Tokenizer::makeToken(!($objOp1),Toolset_Tokenizer::$TOKEN_TYPE['BOOLEAN']));
2540
+ break;
2541
+ case Toolset_Tokenizer::$TOKEN_TYPE['ARITHMETIC_OP'] :
2542
+ switch($strTok->val)
2543
+ {
2544
+ case "*" :
2545
+ case "/" :
2546
+ case "%" :
2547
+ case "^" :
2548
+ if ($myStack->IsEmpty() || $myStack->Size() < 2)
2549
+ throw new Exception("Stack is empty, can not perform [" . $strTok->val . "]");
2550
+ $objOp1 = null;
2551
+ $objOp2 = null;
2552
+ $objTmp = null;
2553
+ $objOp2 = $myStack->Pop();
2554
+ $objOp1 = $myStack->Pop();
2555
+ if ($objOp1->isVariable)
2556
+ $objOp1 = $this->_getVariable($objOp1->val, $myvarArr);
2557
+ if ($objOp2->isVariable)
2558
+ $objOp2 = $this->_getVariable($objOp2->val, $myvarArr);
2559
+
2560
+ if (!$objOp1->isNumber || !$objOp2->isNumber)
2561
+ throw new Exception("Either one of the operand is not a number can not perform [" . $strTok->val . "]");
2562
+
2563
+ $dblVal1 = Toolset_Tokenizer::toNumber($objOp1->val);
2564
+ $dblVal2 = Toolset_Tokenizer::toNumber($objOp2->val);
2565
+ if (is_nan($dblVal1) || is_nan($dblVal2))
2566
+ throw new Exception("Either one of the operand is not a number can not perform [" . $strTok->val . "]");
2567
+
2568
+ if ($strTok->val == "^")
2569
+ $myStack->Push(Toolset_Tokenizer::makeToken(pow($dblVal1, $dblVal2),Toolset_Tokenizer::$TOKEN_TYPE['NUMBER']));
2570
+ else if ($strTok->val == "*")
2571
+ $myStack->Push(Toolset_Tokenizer::makeToken(($dblVal1 * $dblVal2),Toolset_Tokenizer::$TOKEN_TYPE['NUMBER']));
2572
+ else if ($strTok->val == "/")
2573
+ $myStack->Push(Toolset_Tokenizer::makeToken(($dblVal1 / $dblVal2),Toolset_Tokenizer::$TOKEN_TYPE['NUMBER']));
2574
+ else
2575
+ $myStack->Push(Toolset_Tokenizer::makeToken(($dblVal1 % $dblVal2),Toolset_Tokenizer::$TOKEN_TYPE['NUMBER']));
2576
+ break;
2577
+ case "+" :
2578
+ case "-" :
2579
+ if ($myStack->IsEmpty() || $myStack->Size() < 2)
2580
+ throw new Exception("Stack is empty, can not perform [" . $strTok->val . "]");
2581
+
2582
+ $objOp1 = null;
2583
+ $objOp2 = null;
2584
+ $objTmp1 = null;
2585
+ $objTmp2 = null;
2586
+ $strOp = (($strTok->val == "+") ? "Addition" : "Substraction");
2587
+ $objOp2 = $myStack->Pop();
2588
+ $objOp1 = $myStack->Pop();
2589
+ if ($objOp1->isVariable)
2590
+ $objOp1 = $this->_getVariable($objOp1->val, $myvarArr);
2591
+ if ($objOp2->isVariable)
2592
+ $objOp2 = $this->_getVariable($objOp2->val, $myvarArr);
2593
+
2594
+ if ($objOp1->isNumber && $objOp2->isNumber)
2595
+ {
2596
+ // Number addition
2597
+ $dblVal1 = Toolset_Tokenizer::toNumber($objOp1->val);
2598
+ $dblVal2 = Toolset_Tokenizer::toNumber($objOp2->val);
2599
+ if ($strTok->val == "+")
2600
+ $myStack->Push(Toolset_Tokenizer::makeToken(($dblVal1 + $dblVal2),Toolset_Tokenizer::$TOKEN_TYPE['NUMBER']));
2601
+ else
2602
+ $myStack->Push(Toolset_Tokenizer::makeToken(($dblVal1 - $dblVal2),Toolset_Tokenizer::$TOKEN_TYPE['NUMBER']));
2603
+ }
2604
+ else if ($objOp1->isStringLiteral && $objOp2->isStringLiteral)
2605
+ {
2606
+ if ($strTok->val == "+")
2607
+ $myStack->Push(Toolset_Tokenizer::makeToken(($objOp1->val . $objOp2->val),Toolset_Tokenizer::$TOKEN_TYPE['STRING_LITERAL']));
2608
+ else
2609
+ throw new Exception($strOp . " not supported for strings!");
2610
+ }
2611
+ else
2612
+ throw new Exception($strOp . " not supported for other types than numbers and strings!");
2613
+ break;
2614
+ }
2615
+ break;
2616
+ case Toolset_Tokenizer::$TOKEN_TYPE['COMPARISON_OP'] :
2617
+ switch($strTok->val)
2618
+ {
2619
+ case "=" :
2620
+ case "<" :
2621
+ case ">" :
2622
+ case "<>" :
2623
+ case "<=" :
2624
+ case ">=" :
2625
+ case "eq" :
2626
+ case "lt" :
2627
+ case "gt" :
2628
+ case "ne" :
2629
+ case "lte" :
2630
+ case "gte" :
2631
+
2632
+ if ($myStack->IsEmpty() || $myStack->Size() < 2)
2633
+ throw new Exception("Stack is empty, can not perform [" . $strTok->val . "]");
2634
+ $objOp1 = null;
2635
+ $objOp2 = null;
2636
+ $objTmp1 = null;
2637
+ $objTmp2 = null;
2638
+ $objOp2 = $myStack->Pop();
2639
+ $objOp1 = $myStack->Pop();
2640
+ //cred_log(array($objOp1, $objOp2));
2641
+ if ($objOp1->isVariable)
2642
+ $objOp1 = $this->_getVariable($objOp1->val, $myvarArr);
2643
+ if ($objOp2->isVariable)
2644
+ $objOp2 = $this->_getVariable($objOp2->val, $myvarArr);
2645
+
2646
+ //cred_log(array($objOp1, $objOp2));
2647
+ if ($objOp1->isStringLiteral && $objOp2->isNumber)
2648
+ {
2649
+ $dblVal1 = (string)$objOp1->val;
2650
+ $dblVal2 = (string)$objOp2->val;
2651
+ }
2652
+ else if ($objOp1->isNumber && $objOp2->isStringLiteral)
2653
+ {
2654
+ $dblVal1 = (string)$objOp1->val;
2655
+ $dblVal2 = (string)$objOp2->val;
2656
+ }
2657
+ else if ($objOp1->isNumber && $objOp2->isNumber)
2658
+ {
2659
+ $dblVal1 = Toolset_Tokenizer::toNumber($objOp1->val);
2660
+ $dblVal2 = Toolset_Tokenizer::toNumber($objOp2->val);
2661
+ }
2662
+ else if ($objOp1->isNumber && $objOp2->isBoolean)
2663
+ {
2664
+ $dblVal1 = Toolset_Tokenizer::toNumber($objOp1->val);
2665
+ $dblVal2 = Toolset_Tokenizer::toNumber($objOp2->val);
2666
+ }
2667
+ else if ($objOp2->isNumber && $objOp1->isBoolean)
2668
+ {
2669
+ $dblVal1 = Toolset_Tokenizer::toNumber($objOp1->val);
2670
+ $dblVal2 = Toolset_Tokenizer::toNumber($objOp2->val);
2671
+ }
2672
+ else if ($objOp1->isDate && $objOp2->isDate)
2673
+ {
2674
+ $dblVal1 = $objOp1->val->getNormalizedTimestamp();
2675
+ $dblVal2 = $objOp2->val->getNormalizedTimestamp();
2676
+ }
2677
+ else if ($objOp1->isStringLiteral && $objOp2->isStringLiteral)
2678
+ {
2679
+ $dblVal1=(string)$objOp1->val;
2680
+ $dblVal2=(string)$objOp2->val;
2681
+ }
2682
+ else if ($objOp1->isBoolean && $objOp2->isBoolean)
2683
+ {
2684
+ if ($strTok->val == "=" || $strTok->val == "<>" || $strTok->val == "eq" || $strTok->val == "ne")
2685
+ {
2686
+ $dblVal1 = Toolset_Tokenizer::toBoolean($objOp1->val);
2687
+ $dblVal2 = Toolset_Tokenizer::toBoolean($objOp2->val);
2688
+ }
2689
+ else
2690
+ throw new Exception($strTok->val + " not supported for boolean values!");
2691
+ }
2692
+ else if (
2693
+ ($strTok->val=='=' || $strTok->val=='<>' || $strTok->val=='eq' || $strTok->val=='ne') &&
2694
+ ($objOp1->isStringLiteral && $objOp2->isRegex)
2695
+ )
2696
+ {
2697
+ if ($strTok->val=='=' || $strTok->val=='eq')
2698
+ $myStack->Push(Toolset_Tokenizer::makeToken(($objOp2->val->test((string)$objOp1->val)),Toolset_Tokenizer::$TOKEN_TYPE['BOOLEAN']));
2699
+ else
2700
+ $myStack->Push(Toolset_Tokenizer::makeToken(!($objOp2->val->test((string)$objOp1->val)),Toolset_Tokenizer::$TOKEN_TYPE['BOOLEAN']));
2701
+ break;
2702
+ }
2703
+ else if (
2704
+ ($strTok->val=='=' || $strTok->val=='<>' || $strTok->val=='eq' || $strTok->val=='ne') &&
2705
+ ($objOp2->isStringLiteral && $objOp1->isRegex)
2706
+ )
2707
+ {
2708
+ if ($strTok->val=='=' || $strTok->val=='eq')
2709
+ $myStack->Push(Toolset_Tokenizer::makeToken(($objOp1->val->test((string)$objOp2->val)),Toolset_Tokenizer::$TOKEN_TYPE['BOOLEAN']));
2710
+ else
2711
+ $myStack->Push(Toolset_Tokenizer::makeToken(!($objOp1->val->test((string)$objOp2->val)),Toolset_Tokenizer::$TOKEN_TYPE['BOOLEAN']));
2712
+ break;
2713
+ }
2714
+ else if (
2715
+ ($strTok->val=='=' || $strTok->val=='<>' || $strTok->val=='eq' || $strTok->val=='ne') &&
2716
+ ($objOp1->isArray && ($objOp2->isStringLiteral || $objOp2->isNumber))
2717
+ )
2718
+ {
2719
+ if ($strTok->val=='=' || $strTok->val=='eq')
2720
+ $myStack->Push(Toolset_Tokenizer::makeToken(Toolset_Functions::Contains($objOp1->val,$objOp2->val),Toolset_Tokenizer::$TOKEN_TYPE['BOOLEAN']));
2721
+ else
2722
+ $myStack->Push(Toolset_Tokenizer::makeToken(!Toolset_Functions::Contains($objOp1->val,$objOp2->val),Toolset_Tokenizer::$TOKEN_TYPE['BOOLEAN']));
2723
+ break;
2724
+ }
2725
+ else if (
2726
+ ($strTok->val=='=' || $strTok->val=='<>' || $strTok->val=='eq' || $strTok->val=='ne') &&
2727
+ ($objOp2->isArray && ($objOp1->isStringLiteral || $objOp1->isNumber))
2728
+ )
2729
+ {
2730
+ if ($strTok->val=='=' || $strTok->val=='eq')
2731
+ $myStack->Push(Toolset_Tokenizer::makeToken(Toolset_Functions::Contains($objOp2->val,$objOp1->val),Toolset_Tokenizer::$TOKEN_TYPE['BOOLEAN']));
2732
+ else
2733
+ $myStack->Push(Toolset_Tokenizer::makeToken(!Toolset_Functions::Contains($objOp2->val,$objOp1->val),Toolset_Tokenizer::$TOKEN_TYPE['BOOLEAN']));
2734
+ break;
2735
+ }
2736
+ else
2737
+ throw new Exception("For " . $strTok->val . " operator LHS & RHS should be of same data type!");
2738
+
2739
+ if ($strTok->val == "=" || $strTok->val == "eq")
2740
+ $myStack->Push(Toolset_Tokenizer::makeToken(($dblVal1 == $dblVal2),Toolset_Tokenizer::$TOKEN_TYPE['BOOLEAN']));
2741
+ else if ($strTok->val == "<>" || $strTok->val == "ne")
2742
+ $myStack->Push(Toolset_Tokenizer::makeToken(($dblVal1 != $dblVal2),Toolset_Tokenizer::$TOKEN_TYPE['BOOLEAN']));
2743
+ else if ($strTok->val == ">" || $strTok->val == "gt")
2744
+ $myStack->Push(Toolset_Tokenizer::makeToken(($dblVal1 > $dblVal2),Toolset_Tokenizer::$TOKEN_TYPE['BOOLEAN']));
2745
+ else if ($strTok->val == "<" || $strTok->val == "lt")
2746
+ $myStack->Push(Toolset_Tokenizer::makeToken(($dblVal1 < $dblVal2),Toolset_Tokenizer::$TOKEN_TYPE['BOOLEAN']));
2747
+ else if ($strTok->val == "<=" || $strTok->val == "lte")
2748
+ $myStack->Push(Toolset_Tokenizer::makeToken(($dblVal1 <= $dblVal2),Toolset_Tokenizer::$TOKEN_TYPE['BOOLEAN']));
2749
+ else if ($strTok->val == ">=" || $strTok->val == "gte")
2750
+ $myStack->Push(Toolset_Tokenizer::makeToken(($dblVal1 >= $dblVal2),Toolset_Tokenizer::$TOKEN_TYPE['BOOLEAN']));
2751
+ break;
2752
+ }
2753
+ break;
2754
+ case Toolset_Tokenizer::$TOKEN_TYPE['LOGICAL_OP'] :
2755
+ switch($strTok->val)
2756
+ {
2757
+ case 'NOT' :
2758
+ case '!' :
2759
+ if ($myStack->IsEmpty())
2760
+ throw new Exception("No operand on stack!");
2761
+
2762
+ $objOp1 = null;
2763
+ $objOp2 = null;
2764
+ $objOp1 = $myStack->Pop();
2765
+ if ($objOp1->isVariable)
2766
+ $objOp1 = $this->_getVariable($objOp1->val, $myvarArr);
2767
+
2768
+ $objOp1 = Toolset_Tokenizer::toBoolean($objOp1->val);
2769
+ if ($objOp1 === null)
2770
+ throw new Exception($strTok->val . " applied not on a boolean value!");
2771
+ else
2772
+ $myStack->Push(Toolset_Tokenizer::makeToken(!($objOp1),Toolset_Tokenizer::$TOKEN_TYPE['BOOLEAN']));
2773
+ break;
2774
+ case "AND" :
2775
+ case "&" :
2776
+ case "OR" :
2777
+ case "|" :
2778
+ if ($myStack->IsEmpty() || $myStack->Size() < 2)
2779
+ throw new Exception("Stack is empty, can not perform [" . $strTok->val . "]");
2780
+ $objOp1 = null;
2781
+ $objOp2 = null;
2782
+ $objTmp1 = null;
2783
+ $objTmp2 = null;
2784
+ $objOp2 = $myStack->Pop();
2785
+ $objOp1 = $myStack->Pop();
2786
+ if ($objOp1->isVariable)
2787
+ $objOp1 = $this->_getVariable($objOp1->val, $myvarArr);
2788
+ if ($objOp2->isVariable)
2789
+ $objOp2 = $this->_getVariable($objOp2->val, $myvarArr);
2790
+
2791
+ if (
2792
+ ($objOp1->isBoolean && $objOp2->isBoolean) ||
2793
+ ($objOp1->isNumber && $objOp2->isNumber) ||
2794
+ ($objOp1->isNumber && $objOp2->isBoolean) ||
2795
+ ($objOp1->isBoolean && $objOp2->isNumber)
2796
+ )
2797
+ {
2798
+ $objTmp1 = Toolset_Tokenizer::toBoolean($objOp1->val);
2799
+ $objTmp2 = Toolset_Tokenizer::toBoolean($objOp2->val);
2800
+ if ($strTok->val == "AND" || $strTok->val == "&")
2801
+ $myStack->Push(Toolset_Tokenizer::makeToken(($objTmp1 && $objTmp2),Toolset_Tokenizer::$TOKEN_TYPE['BOOLEAN']));
2802
+ else if ($strTok->val == "OR" || $strTok->val == "|")
2803
+ $myStack->Push(Toolset_Tokenizer::makeToken(($objTmp1 || $objTmp2),Toolset_Tokenizer::$TOKEN_TYPE['BOOLEAN']));
2804
+ }
2805
+ else
2806
+ throw new Exception("Logical operator requires LHS & RHS of boolean type!");
2807
+ break;
2808
+ }
2809
+ break;
2810
+ case Toolset_Tokenizer::$TOKEN_TYPE['FUNCTION'] :
2811
+ $this->_HandleFunctions($strTok, $myStack, $this->dtFormat, $myvarArr);
2812
+ break;
2813
+ default :
2814
+ $myStack->Push($strTok);
2815
+ break;
2816
+ }
2817
+ $intIndex++;
2818
+
2819
+ //echo (string)$myStack->toString();
2820
+ }
2821
+ if ($myStack->IsEmpty() || $myStack->Size() > 1 || $myStack->Get(0)->isVariable)
2822
+ throw new Exception("Unable to evaluate expression!");
2823
+ else
2824
+ return $myStack->Pop()->val;
2825
+ }
2826
+
2827
+ // delegate here
2828
+ public static function setParams($params)
2829
+ {
2830
+ Toolset_Functions::setParams((array)$params);
2831
+ }
2832
+
2833
+ public function Toolset_Parser($exp=null)
2834
+ {
2835
+ if (isset($exp) && $exp!==null)
2836
+ {
2837
+ $this->strInFix = $exp;
2838
+ $this->arrTokens=$this->arrPostFix=null;
2839
+ }
2840
+ // init tokenizer here, else tokens become undefined on addVar
2841
+ Toolset_Tokenizer::init();
2842
+ }
2843
+
2844
+ public function dateLocales($a=null,$b=null,$c=null)
2845
+ {
2846
+ Toolset_DateParser::setDateLocaleStrings($a,$b,$c);
2847
+ return $this;
2848
+ }
2849
+
2850
+ public function dateFormat($df)
2851
+ {
2852
+ $this->dtFormat = $df;
2853
+ return $this;
2854
+ }
2855
+
2856
+ public function expression($exp)
2857
+ {
2858
+ $this->strInFix = $exp;
2859
+ $this->arrTokens=$this->arrPostFix=null;
2860
+ return $this;
2861
+ }
2862
+
2863
+ public function addVar($_var)
2864
+ {
2865
+ $this->_AddNewVariable($_var, $this->arrVars);
2866
+ return $this;
2867
+ }
2868
+
2869
+ public function parse()
2870
+ {
2871
+ $this->arrPostFix=$this->_ParseExpression();
2872
+ return $this->_dumpPostFix($this->arrPostFix);
2873
+ }
2874
+
2875
+ public function evaluate()
2876
+ {
2877
+ return $this->_EvaluateExpression($this->arrPostFix, $this->arrVars);
2878
+ }
2879
+
2880
+ public function reset()
2881
+ {
2882
+ $this->arrVars = array();
2883
+ $this->strInFix=$this->arrTokens=$this->arrPostFix=null;
2884
+ return $this;
2885
+ }
2886
+
2887
+ public function dump()
2888
+ {
2889
+ return $this->_dumpPostFix($this->arrPostFix);
2890
+ }
2891
+ //this.preCompile = function(_exp){if (typeof(_exp)=='undefined') _exp=strInFix; return _getPrecompiledExpression(_exp);};
2892
+ }
embedded/toolset/toolset-common/functions.php ADDED
@@ -0,0 +1,622 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Common functions.
4
+ */
5
+ define( 'ICL_COMMON_FUNCTIONS', true );
6
+
7
+ // for retro compatibility with WP < 3.5
8
+ if( !function_exists('wp_normalize_path') ){
9
+ function wp_normalize_path( $path ) {
10
+ $path = str_replace( '\\', '/', $path );
11
+ $path = preg_replace( '|/+|','/', $path );
12
+ return $path;
13
+ }
14
+ }
15
+
16
+ /**
17
+ * Calculates relative path for given file.
18
+ *
19
+ * @param type $file Absolute path to file
20
+ * @return string Relative path
21
+ */
22
+ function icl_get_file_relpath( $file ) {
23
+ // website url form DB
24
+ $url = get_option('siteurl');
25
+ // fix the protocol
26
+ $base_root = set_url_scheme( $url );
27
+
28
+ // normalise windows paths
29
+ $path_to_file = wp_normalize_path($file);
30
+ // get file directory
31
+ $file_dir = wp_normalize_path( dirname( $path_to_file ) );
32
+ // get the path to 'wp-content'
33
+ $from_content_dir = wp_normalize_path( realpath( WP_CONTENT_DIR ) );
34
+ // get wp-content dirname
35
+ $content_dir = wp_normalize_path( basename(WP_CONTENT_DIR) );
36
+
37
+ // remove absolute path part until 'wp-content' folder
38
+ $path = str_replace( $from_content_dir, '', $file_dir);
39
+ // add wp-content dir to path
40
+ $path = wp_normalize_path( $content_dir.$path );
41
+
42
+ // build url
43
+ $relpath = $base_root . '/' . $path;
44
+
45
+ return $relpath;
46
+ }
47
+
48
+ /**
49
+ * Fix WP's multiarray parsing.
50
+ *
51
+ * @param type $arg
52
+ * @param type $defaults
53
+ * @return type
54
+ */
55
+ function wpv_parse_args_recursive( $arg, $defaults ) {
56
+ $temp = false;
57
+ if ( isset( $arg[0] ) ) {
58
+ $temp = $arg[0];
59
+ } else if ( isset( $defaults[0] ) ) {
60
+ $temp = $defaults[0];
61
+ }
62
+ $arg = wp_parse_args( $arg, $defaults );
63
+ if ( $temp ) {
64
+ $arg[0] = $temp;
65
+ }
66
+ foreach ( $defaults as $default_setting_parent => $default_setting ) {
67
+ if ( !is_array( $default_setting ) ) {
68
+ if ( !isset( $arg[$default_setting_parent] ) ) {
69
+ $arg[$default_setting_parent] = $default_setting;
70
+ }
71
+ continue;
72
+ }
73
+ if ( !isset( $arg[$default_setting_parent] ) ) {
74
+ $arg[$default_setting_parent] = $defaults[$default_setting_parent];
75
+ }
76
+ $arg[$default_setting_parent] = wpv_parse_args_recursive( $arg[$default_setting_parent],
77
+ $defaults[$default_setting_parent] );
78
+ }
79
+
80
+ return $arg;
81
+ }
82
+
83
+ /*
84
+ * Extra check for date for shortcode in shortcode. Called as filter in wpv_condition bellow.
85
+ *
86
+ * @note As of 1.9 this is not used in Views anymore
87
+ */
88
+
89
+ function wpv_add_time_functions( $value ) {
90
+ return wpv_filter_parse_date( $value );
91
+ }
92
+
93
+ /**
94
+ * Condition function to evaluate and display given block based on expressions
95
+ * 'args' => arguments for evaluation fields
96
+ *
97
+ * Supported actions and symbols:
98
+ *
99
+ * Integer and floating-point numbers
100
+ * Math operators: +, -, *, /
101
+ * Comparison operators: &lt;, &gt;, =, &lt;=, &gt;=, !=
102
+ * Boolean operators: AND, OR, NOT
103
+ * Nested expressions - several levels of brackets
104
+ * Variables defined as shortcode parameters starting with a dollar sign
105
+ * empty() function that checks for blank or non-existing fields
106
+ *
107
+ *
108
+ * @note As of 1.9, this is not used in Views anymore, seems to be used on the toolset-forms library
109
+ */
110
+ function wpv_condition( $atts, $post_to_check = null ) {
111
+ extract(
112
+ shortcode_atts( array('evaluate' => FALSE), $atts )
113
+ );
114
+
115
+ // Do not overwrite global post
116
+ // global $post;
117
+
118
+ // if in admin, get the post from the URL
119
+ if ( is_admin() ) {
120
+ if ( empty($post_to_check->ID) ) {
121
+ // Get post
122
+ if ( isset( $_GET['post'] ) ) {
123
+ $post_id = (int) $_GET['post'];
124
+ } else if ( isset( $_POST['post_ID'] ) ) {
125
+ $post_id = (int) $_POST['post_ID'];
126
+ } else {
127
+ $post_id = 0;
128
+ }
129
+ if ( $post_id ) {
130
+ $post = get_post( $post_id );
131
+ }
132
+ } else {
133
+ $post = $post_to_check;
134
+ }
135
+ }
136
+ if ( empty($post->ID) ) {
137
+ global $post;
138
+ }
139
+ $has_post = true;
140
+ if ( empty($post->ID) ) {
141
+ // Will not execute any condition that involves custom fields
142
+ $has_post = false;
143
+ }
144
+
145
+ global $wplogger;
146
+
147
+ if ( $has_post ) {
148
+ do_action( 'wpv_condition', $post );
149
+ }
150
+
151
+ $logging_string = "Original expression: " . $evaluate;
152
+
153
+ add_filter( 'wpv-extra-condition-filters', 'wpv_add_time_functions' );
154
+ $evaluate = apply_filters( 'wpv-extra-condition-filters', $evaluate );
155
+
156
+ $logging_string .= "; After extra conditions: " . $evaluate;
157
+
158
+ // evaluate empty() statements for variables
159
+ if ( $has_post ) {
160
+ $empties = preg_match_all( "/empty\(\s*\\$(\w+)\s*\)/", $evaluate, $matches );
161
+ if ( $empties && $empties > 0 ) {
162
+ for ( $i = 0; $i < $empties; $i++ ) {
163
+ $match_var = get_post_meta( $post->ID, $atts[$matches[1][$i]], true );
164
+ $is_empty = '1=0';
165
+
166
+ // mark as empty only nulls and ""
167
+ // if ( is_null( $match_var ) || strlen( $match_var ) == 0 ) {
168
+ if ( is_null( $match_var )
169
+ || ( is_string( $match_var ) && strlen( $match_var ) == 0 )
170
+ || ( is_array( $match_var ) && empty( $match_var ) ) ) {
171
+ $is_empty = '1=1';
172
+ }
173
+ $evaluate = str_replace( $matches[0][$i], $is_empty, $evaluate );
174
+ $logging_string .= "; After empty: " . $evaluate;
175
+ }
176
+ }
177
+ }
178
+
179
+ // find variables that are to be used as strings.
180
+ // eg '$f1'
181
+ // will replace $f1 with the actual field value
182
+ if ( $has_post ) {
183
+ $strings_count = preg_match_all( '/(\'[\$\w^\']*\')/', $evaluate, $matches );
184
+ if ( $strings_count && $strings_count > 0 ) {
185
+ for ( $i = 0; $i < $strings_count; $i++ ) {
186
+ $string = $matches[1][$i];
187
+ // remove single quotes from string literals to get value only
188
+ $string = (strpos( $string, '\'' ) === 0) ? substr( $string, 1,
189
+ strlen( $string ) - 2 ) : $string;
190
+ if ( strpos( $string, '$' ) === 0 ) {
191
+ $variable_name = substr( $string, 1 ); // omit dollar sign
192
+ if ( isset( $atts[$variable_name] ) ) {
193
+ $string = get_post_meta( $post->ID, $atts[$variable_name], true );
194
+ $evaluate = str_replace( $matches[1][$i], "'" . $string . "'", $evaluate );
195
+ $logging_string .= "; After variables I: " . $evaluate;
196
+ }
197
+ }
198
+ }
199
+ }
200
+ }
201
+
202
+ // find string variables and evaluate
203
+ $strings_count = preg_match_all( '/((\$\w+)|(\'[^\']*\'))\s*([\!<>\=]+)\s*((\$\w+)|(\'[^\']*\'))/',
204
+ $evaluate, $matches );
205
+
206
+ // get all string comparisons - with variables and/or literals
207
+ if ( $strings_count && $strings_count > 0 ) {
208
+ for ( $i = 0; $i < $strings_count; $i++ ) {
209
+
210
+ // get both sides and sign
211
+ $first_string = $matches[1][$i];
212
+ $second_string = $matches[5][$i];
213
+ $math_sign = $matches[4][$i];
214
+
215
+ // remove single quotes from string literals to get value only
216
+ $first_string = (strpos( $first_string, '\'' ) === 0) ? substr( $first_string,
217
+ 1, strlen( $first_string ) - 2 ) : $first_string;
218
+ $second_string = (strpos( $second_string, '\'' ) === 0) ? substr( $second_string,
219
+ 1, strlen( $second_string ) - 2 ) : $second_string;
220
+
221
+ // replace variables with text representation
222
+ if ( strpos( $first_string, '$' ) === 0 && $has_post ) {
223
+ $variable_name = substr( $first_string, 1 ); // omit dollar sign
224
+ if ( isset( $atts[$variable_name] ) ) {
225
+ $first_string = get_post_meta( $post->ID,
226
+ $atts[$variable_name], true );
227
+ } else {
228
+ $first_string = '';
229
+ }
230
+ }
231
+ if ( strpos( $second_string, '$' ) === 0 && $has_post ) {
232
+ $variable_name = substr( $second_string, 1 );
233
+ if ( isset( $atts[$variable_name] ) ) {
234
+ $second_string = get_post_meta( $post->ID,
235
+ $atts[$variable_name], true );
236
+ } else {
237
+ $second_string = '';
238
+ }
239
+ }
240
+
241
+ // don't do string comparison if variables are numbers
242
+ if ( !(is_numeric( $first_string ) && is_numeric( $second_string )) ) {
243
+ // compare string and return true or false
244
+ $compared_str_result = wpv_compare_strings( $first_string,
245
+ $second_string, $math_sign );
246
+
247
+ if ( $compared_str_result ) {
248
+ $evaluate = str_replace( $matches[0][$i], '1=1', $evaluate );
249
+ } else {
250
+ $evaluate = str_replace( $matches[0][$i], '1=0', $evaluate );
251
+ }
252
+ } else {
253
+ $evaluate = str_replace( $matches[1][$i], $first_string, $evaluate );
254
+ $evaluate = str_replace( $matches[5][$i], $second_string, $evaluate );
255
+ }
256
+ $logging_string .= "; After variables II: " . $evaluate;
257
+ }
258
+ }
259
+
260
+ // find remaining strings that maybe numeric values.
261
+ // This handles 1='1'
262
+ $strings_count = preg_match_all( '/(\'[^\']*\')/', $evaluate, $matches );
263
+ if ( $strings_count && $strings_count > 0 ) {
264
+ for ( $i = 0; $i < $strings_count; $i++ ) {
265
+ $string = $matches[1][$i];
266
+ // remove single quotes from string literals to get value only
267
+ $string = (strpos( $string, '\'' ) === 0) ? substr( $string, 1, strlen( $string ) - 2 ) : $string;
268
+ if ( is_numeric( $string ) ) {
269
+ $evaluate = str_replace( $matches[1][$i], $string, $evaluate );
270
+ $logging_string .= "; After variables III: " . $evaluate;
271
+ }
272
+ }
273
+ }
274
+
275
+
276
+ // find all variable placeholders in expression
277
+ if ( $has_post ) {
278
+ $count = preg_match_all( '/\$(\w+)/', $evaluate, $matches );
279
+
280
+ $logging_string .= "; Variable placeholders: " . var_export( $matches[1],
281
+ true );
282
+
283
+ // replace all variables with their values listed as shortcode parameters
284
+ if ( $count && $count > 0 ) {
285
+ // sort array by length desc, fix str_replace incorrect replacement
286
+ $matches[1] = wpv_sort_matches_by_length( $matches[1] );
287
+
288
+ foreach ( $matches[1] as $match ) {
289
+ if ( isset( $atts[$match] ) ) {
290
+ $meta = get_post_meta( $post->ID, $atts[$match], true );
291
+ if ( empty( $meta ) ) {
292
+ $meta = "0";
293
+ }
294
+ } else {
295
+ $meta = "0";
296
+ }
297
+ $evaluate = str_replace( '$' . $match, $meta, $evaluate );
298
+ $logging_string .= "; After variables IV: " . $evaluate;
299
+ }
300
+ }
301
+ }
302
+
303
+ $logging_string .= "; End evaluated expression: " . $evaluate;
304
+
305
+ $wplogger->log( $logging_string, WPLOG_DEBUG );
306
+ // evaluate the prepared expression using the custom eval script
307
+ $result = wpv_evaluate_expression( $evaluate );
308
+
309
+ if ( $has_post ) {
310
+ do_action( 'wpv_condition_end', $post );
311
+ }
312
+
313
+ // return true, false or error string to the conditional caller
314
+ return $result;
315
+ }
316
+
317
+ function wpv_eval_check_syntax( $code ) {
318
+ return @eval( 'return true;' . $code );
319
+ }
320
+
321
+ /**
322
+ *
323
+ * Sort matches array by length so evaluate longest variable names first
324
+ *
325
+ * Otherwise the str_replace would break a field named $f11 if there is another field named $f1
326
+ *
327
+ * @param array $matches all variable names
328
+ */
329
+ function wpv_sort_matches_by_length( $matches ) {
330
+ $length = count( $matches );
331
+ for ( $i = 0; $i < $length; $i++ ) {
332
+ $max = strlen( $matches[$i] );
333
+ $max_index = $i;
334
+
335
+ // find the longest variable
336
+ for ( $j = $i + 1; $j < $length; $j++ ) {
337
+ if ( strlen( $matches[$j] ) > $max ) {
338
+ $max = $matches[$j];
339
+ $max_index = $j;
340
+ }
341
+ }
342
+
343
+ // swap
344
+ $temp = $matches[$i];
345
+ $matches[$i] = $matches[$max_index];
346
+ $matches[$max_index] = $temp;
347
+ }
348
+
349
+ return $matches;
350
+
351
+ }
352
+
353
+ /**
354
+ * Boolean function for string comparison
355
+ *
356
+ * @param string $first first string to be compared
357
+ * @param string $second second string for comparison
358
+ *
359
+ *
360
+ */
361
+ function wpv_compare_strings( $first, $second, $sign ) {
362
+ // get comparison results
363
+ $comparison = strcmp( $first, $second );
364
+
365
+ // verify cases 'less than' and 'less than or equal': <, <=
366
+ if ( $comparison < 0 && ($sign == '<' || $sign == '<=') ) {
367
+ return true;
368
+ }
369
+
370
+ // verify cases 'greater than' and 'greater than or equal': >, >=
371
+ if ( $comparison > 0 && ($sign == '>' || $sign == '>=') ) {
372
+ return true;
373
+ }
374
+
375
+ // verify equal cases: =, <=, >=
376
+ if ( $comparison == 0 && ($sign == '=' || $sign == '<=' || $sign == '>=') ) {
377
+ return true;
378
+ }
379
+
380
+ // verify != case
381
+ if ( $comparison != 0 && $sign == '!=' ) {
382
+ return true;
383
+ }
384
+
385
+ // or result is incorrect
386
+ return false;
387
+ }
388
+
389
+ /**
390
+ *
391
+ * Function that prepares the expression and calls eval()
392
+ * Validates the input for a list of whitechars and handles internal errors if any
393
+ *
394
+ * @param string $expression the expression to be evaluated
395
+ */
396
+ function wpv_evaluate_expression( $expression ){
397
+ //Replace AND, OR, ==
398
+ $expression = strtoupper( $expression );
399
+ $expression = str_replace( "AND", "&&", $expression );
400
+ $expression = str_replace( "OR", "||", $expression );
401
+ $expression = str_replace( "NOT", "!", $expression );
402
+ $expression = str_replace( "=", "==", $expression );
403
+ $expression = str_replace( "<==", "<=", $expression );
404
+ $expression = str_replace( ">==", ">=", $expression );
405
+ $expression = str_replace( "!==", "!=", $expression ); // due to the line above
406
+ // validate against allowed input characters
407
+ $count = preg_match( '/[0-9+-\=\*\/<>&\!\|\s\(\)]+/', $expression, $matches );
408
+
409
+ // find out if there is full match for the entire expression
410
+ if ( $count > 0 ) {
411
+ if ( strlen( $matches[0] ) == strlen( $expression ) ) {
412
+ $valid_eval = wpv_eval_check_syntax( "return $expression;" );
413
+ if ( $valid_eval ) {
414
+ return eval( "return $expression;" );
415
+ } else {
416
+ return __( "Error while parsing the evaluate expression",
417
+ 'wpv-views' );
418
+ }
419
+ } else {
420
+ return __( "Conditional expression includes illegal characters",
421
+ 'wpv-views' );
422
+ }
423
+ } else {
424
+ return __( "Correct conditional expression has not been found",
425
+ 'wpv-views' );
426
+ }
427
+
428
+ }
429
+
430
+ /**
431
+ * class WPV_wpcf_switch_post_from_attr_id
432
+ *
433
+ * This class handles the "id" attribute in a wpv-post-xxxxx shortcode
434
+ * and sets the global $id, $post, and $authordata
435
+ *
436
+ * It also handles types. eg [types field='my-field' id='233']
437
+ *
438
+ * id can be a integer to refer directly to a post
439
+ * id can be $parent to refer to the parent
440
+ * id can be $current_page or refer to the current page
441
+ *
442
+ * id can also refer to a related post type
443
+ * eg. for a stay the related post types could be guest and room
444
+ * [types field='my-field' id='$guest']
445
+ * [types field='my-field' id='$room']
446
+ */
447
+ class WPV_wpcf_switch_post_from_attr_id
448
+ {
449
+
450
+ function __construct( $atts ){
451
+ $this->found = false;
452
+
453
+ if ( isset( $atts['id'] ) ) {
454
+
455
+ global $post, $authordata, $id, $WPV_wpcf_post_relationship;
456
+
457
+ $post_id = 0;
458
+
459
+ if ( strpos( $atts['id'], '$' ) === 0 ) {
460
+ // Handle the parent if the id is $parent
461
+ if ( $atts['id'] == '$parent' && isset( $post->post_parent ) ) {
462
+ $post_id = $post->post_parent;
463
+ } else if ( $atts['id'] == '$current_page' ) {
464
+ if ( is_single() || is_page() ) {
465
+ global $wp_query;
466
+
467
+ if ( isset( $wp_query->posts[0] ) ) {
468
+ $current_post = $wp_query->posts[0];
469
+ $post_id = $current_post->ID;
470
+ }
471
+ }
472
+ } else {
473
+ // See if Views has the variable
474
+ global $WP_Views;
475
+ if ( isset( $WP_Views ) ) {
476
+ $post_id = $WP_Views->get_variable( $atts['id'] . '_id' );
477
+ }
478
+ if ( $post_id == 0 ) {
479
+ // Try the local storage.
480
+ if ( isset( $WPV_wpcf_post_relationship[$atts['id'] . '_id'] ) ) {
481
+ $post_id = $WPV_wpcf_post_relationship[$atts['id'] . '_id'];
482
+ }
483
+ }
484
+ }
485
+ } else {
486
+ $post_id = intval( $atts['id'] );
487
+ }
488
+
489
+ if ( $post_id > 0 ) {
490
+
491
+ $this->found = true;
492
+
493
+ // save original post
494
+ $this->post = ( isset( $post ) && ( $post instanceof WP_Post ) ) ? clone $post : null;
495
+ if ( $authordata ) {
496
+ $this->authordata = clone $authordata;
497
+ } else {
498
+ $this->authordata = null;
499
+ }
500
+ $this->id = $id;
501
+
502
+ // set the global post values
503
+ $id = $post_id;
504
+ $post = get_post( $id );
505
+ $authordata = new WP_User( $post->post_author );
506
+ }
507
+ }
508
+
509
+ }
510
+
511
+ function __destruct(){
512
+ if ( $this->found ) {
513
+ global $post, $authordata, $id;
514
+
515
+ // restore the global post values.
516
+ $post = ( isset( $this->post ) && ( $this->post instanceof WP_Post ) ) ? clone $this->post : null;
517
+ if ( $this->authordata ) {
518
+ $authordata = clone $this->authordata;
519
+ } else {
520
+ $authordata = null;
521
+ }
522
+ $id = $this->id;
523
+ }
524
+
525
+ }
526
+
527
+ }
528
+
529
+ // Add a filter on the content so that we can record any related posts.
530
+ // These can then be used ine id of Types and Views shortcodes
531
+ // eg. for a stay we can have
532
+ // [types field='my-field' id="$room"] displays my-field from the related room
533
+ // [wpv-post-title id="$room"] display the title of the related room
534
+
535
+ add_filter( 'the_content', 'WPV_wpcf_record_post_relationship_belongs', 0, 1 );
536
+
537
+ $WPV_wpcf_post_relationship = Array();
538
+
539
+ function WPV_wpcf_record_post_relationship_belongs( $content ) {
540
+
541
+ global $post, $WPV_wpcf_post_relationship;
542
+ static $related = array();
543
+
544
+ if ( !empty( $post->ID ) && function_exists( 'wpcf_pr_get_belongs' ) ) {
545
+
546
+ if ( !isset( $related[$post->post_type] ) ) {
547
+ $related[$post->post_type] = wpcf_pr_get_belongs( $post->post_type );
548
+ }
549
+ if ( is_array( $related[$post->post_type] ) ) {
550
+ foreach ( $related[$post->post_type] as $post_type => $data ) {
551
+ $related_id = wpcf_pr_post_get_belongs( $post->ID, $post_type );
552
+ if ( $related_id ) {
553
+ $WPV_wpcf_post_relationship['$' . $post_type . '_id'] = $related_id;
554
+ } else {
555
+ $WPV_wpcf_post_relationship['$' . $post_type . '_id'] = 0;
556
+ }
557
+ }
558
+ }
559
+ }
560
+
561
+
562
+ return $content;
563
+ }
564
+
565
+ /**
566
+ * Form for Enlimbo calls for wpv-control shortcode calls
567
+ *
568
+ * @param mixed $elements
569
+ * @return string
570
+ */
571
+ function wpv_form_control( $elements ) {
572
+ static $form = NULL;
573
+ require_once 'classes/control_forms.php';
574
+ if ( is_null( $form ) ) {
575
+ $form = new Enlimbo_Control_Forms();
576
+ }
577
+ return $form->renderElements( $elements );
578
+ }
579
+
580
+ /**
581
+ * Dismiss message.
582
+ *
583
+ * @param type $message_id
584
+ * @param string $message
585
+ * @param type $class
586
+ */
587
+ function wpv_add_dismiss_message( $message_id, $message,
588
+ $clear_dismissed = false, $class = 'updated' ) {
589
+ $dismissed_messages = get_option( 'wpv-dismissed-messages', array() );
590
+ if ( $clear_dismissed ) {
591
+ if ( isset( $dismissed_messages[$message_id] ) ) {
592
+ unset( $dismissed_messages[$message_id] );
593
+ update_option( 'wpv-dismissed-messages', $dismissed_messages );
594
+ }
595
+ }
596
+ if ( !array_key_exists( $message_id, $dismissed_messages ) ) {
597
+ $message = $message . '<div style="float:right; margin:-15px 0 0 15px;"><a onclick="jQuery(this).parent().parent().fadeOut();jQuery.get(\''
598
+ . admin_url( 'admin-ajax.php?action=wpv_dismiss_message&amp;message_id='
599
+ . $message_id . '&amp;_wpnonce='
600
+ . wp_create_nonce( 'dismiss_message' ) ) . '\');return false;"'
601
+ . 'class="button-secondary" href="javascript:void(0);">'
602
+ . __( "Don't show this message again", 'wpv-views' ) . '</a></div>';
603
+ wpv_admin_message_store( $message_id, $message, false );
604
+ }
605
+ }
606
+
607
+ add_action( 'wp_ajax_wpv_dismiss_message', 'wpv_dismiss_message_ajax' );
608
+
609
+ /**
610
+ * Dismiss message AJAX.
611
+ */
612
+ function wpv_dismiss_message_ajax() {
613
+ if ( isset( $_GET['message_id'] ) && isset( $_GET['_wpnonce'] )
614
+ && wp_verify_nonce( $_GET['_wpnonce'], 'dismiss_message' ) ) {
615
+ $dismissed_messages = get_option( 'wpv-dismissed-messages', array() );
616
+ $dismissed_image_val = isset( $_GET['timestamp'] ) ? $_GET['timestamp'] : 1;
617
+ $dismissed_messages[strval( $_GET['message_id'] )] = $dismissed_image_val;
618
+ update_option( 'wpv-dismissed-messages', $dismissed_messages );
619
+ }
620
+ die( 'ajax' );
621
+ }
622
+
embedded/toolset/toolset-common/localization/locale/orig/views.po ADDED
@@ -0,0 +1,4528 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # This file was generated by WPML
2
+ # WPML is a WordPress plugin that can turn any WordPress site into a full featured multilingual content management system.
3
+ # https://wpml.org
4
+ msgid ""
5
+ msgstr ""
6
+ "Content-Type: text/plain; charset=utf-8\n"
7
+ "Content-Transfer-Encoding: 8bit\n"
8
+ "Project-Id-Version: \n"
9
+ "POT-Creation-Date: \n"
10
+ "PO-Revision-Date: \n"
11
+ "Last-Translator: \n"
12
+ "Language-Team: \n"
13
+ "MIME-Version: 1.0\n"
14
+
15
+ msgid "Required"
16
+ msgstr ""
17
+
18
+ msgid "Email"
19
+ msgstr ""
20
+
21
+ msgid "Date"
22
+ msgstr ""
23
+
24
+ msgid "Digits"
25
+ msgstr ""
26
+
27
+ msgid "Numeric"
28
+ msgstr ""
29
+
30
+ msgid "You must define the $operator parameter for Wpcf_Cake_Validation::comparison()"
31
+ msgstr ""
32
+
33
+ msgid "You must define a regular expression for Wpcf_Cake_Validation::custom()"
34
+ msgstr ""
35
+
36
+ msgid "Could not find %s class, unable to complete validation."
37
+ msgstr ""
38
+
39
+ msgid "Method %s does not exist on %s unable to complete validation."
40
+ msgstr ""
41
+
42
+ msgid "Error while parsing the evaluate expression"
43
+ msgstr ""
44
+
45
+ msgid "Conditional expression includes illegal characters"
46
+ msgstr ""
47
+
48
+ msgid "Correct conditional expression has not been found"
49
+ msgstr ""
50
+
51
+ msgid "Don't show this message again"
52
+ msgstr ""
53
+
54
+ msgid "Clear"
55
+ msgstr ""
56
+
57
+ msgid "Default"
58
+ msgstr ""
59
+
60
+ msgid "Select Color"
61
+ msgstr ""
62
+
63
+ msgid "Delete"
64
+ msgstr ""
65
+
66
+ msgid "Hour"
67
+ msgstr ""
68
+
69
+ msgid "Minute"
70
+ msgstr ""
71
+
72
+ msgid "Select date"
73
+ msgstr ""
74
+
75
+ msgid "Input format: %s"
76
+ msgstr ""
77
+
78
+ msgid "Select file"
79
+ msgstr ""
80
+
81
+ msgid "Select %s"
82
+ msgstr ""
83
+
84
+ msgid "Toolset"
85
+ msgstr ""
86
+
87
+ msgid "Use as field value"
88
+ msgstr ""
89
+
90
+ msgid "Please note that not all video and audio formats are supported by the WordPress media player. Before you upload media files, have a look at %ssupported media formats%s."
91
+ msgstr ""
92
+
93
+ msgid "Edit Skype button"
94
+ msgstr ""
95
+
96
+ msgid "Enter your Skype Name"
97
+ msgstr ""
98
+
99
+ msgid "Select a button from below"
100
+ msgstr ""
101
+
102
+ msgid "Skype buttons with status"
103
+ msgstr ""
104
+
105
+ msgid "If you choose to show your Skype status, your Skype button will always reflect your availability on Skype. This status will be shown to everyone, whether they’re in your contact list or not."
106
+ msgstr ""
107
+
108
+ msgid "Save"
109
+ msgstr ""
110
+
111
+ msgid "You must define the $operator parameter for WPToolset_Cake_Validation::comparison()"
112
+ msgstr ""
113
+
114
+ msgid "You must define a regular expression for WPToolset_Cake_Validation::custom()"
115
+ msgstr ""
116
+
117
+ msgid "Delete %s"
118
+ msgstr ""
119
+
120
+ msgid "Add new %s"
121
+ msgstr ""
122
+
123
+ msgid "Get Types and Views"
124
+ msgstr ""
125
+
126
+ msgid "Once you have installed the full versions of Types and Views you'll be able to create and edit your own content types, layouts and listings."
127
+ msgstr ""
128
+
129
+ msgid "<a href=\"%s\" target=\"_blank\">Learn more</a>"
130
+ msgstr ""
131
+
132
+ msgid "Your theme was created using <strong>Types</strong> and <strong>Views</strong>. Developers use these two plugins to build complex websites, without coding."
133
+ msgstr ""
134
+
135
+ msgid "Right now, you're using the embedded version, which creates the layout but doesn't include the editing interface. You can upgrade to the full version and customize your site yourself - you don't even need to know how to program!"
136
+ msgstr ""
137
+
138
+ msgid "Every purchase of Views entitles you to commercial-grade support and upgrades for one year."
139
+ msgstr ""
140
+
141
+ msgid "You can use Types and Views for as many themes and websites as you like."
142
+ msgstr ""
143
+
144
+ msgid "View templates"
145
+ msgstr ""
146
+
147
+ msgid "Post View"
148
+ msgstr ""
149
+
150
+ msgid "Taxonomy View"
151
+ msgstr ""
152
+
153
+ msgid "User View"
154
+ msgstr ""
155
+
156
+ msgid "Views"
157
+ msgstr ""
158
+
159
+ msgid "Types"
160
+ msgstr ""
161
+
162
+ msgid "Fields"
163
+ msgstr ""
164
+
165
+ msgid "Go to"
166
+ msgstr ""
167
+
168
+ msgid "User ID"
169
+ msgstr ""
170
+
171
+ msgid "Basic"
172
+ msgstr ""
173
+
174
+ msgid "User Email"
175
+ msgstr ""
176
+
177
+ msgid "User Login"
178
+ msgstr ""
179
+
180
+ msgid "First Name"
181
+ msgstr ""
182
+
183
+ msgid "Last Name"
184
+ msgstr ""
185
+
186
+ msgid "Nickname"
187
+ msgstr ""
188
+
189
+ msgid "Display Name"
190
+ msgstr ""
191
+
192
+ msgid "Description"
193
+ msgstr ""
194
+
195
+ msgid "Yahoo IM"
196
+ msgstr ""
197
+
198
+ msgid "Jabber"
199
+ msgstr ""
200
+
201
+ msgid "AIM"
202
+ msgstr ""
203
+
204
+ msgid "User Url"
205
+ msgstr ""
206
+
207
+ msgid "Registration Date"
208
+ msgstr ""
209
+
210
+ msgid "User Status"
211
+ msgstr ""
212
+
213
+ msgid "User Spam Status"
214
+ msgstr ""
215
+
216
+ msgid "Translatable string"
217
+ msgstr ""
218
+
219
+ msgid "Users fields"
220
+ msgstr ""
221
+
222
+ msgid "User fields"
223
+ msgstr ""
224
+
225
+ msgid "Types fields"
226
+ msgstr ""
227
+
228
+ msgid "Post View"
229
+ msgstr ""
230
+
231
+ msgid "Taxonomy View"
232
+ msgstr ""
233
+
234
+ msgid "User View"
235
+ msgstr ""
236
+
237
+ msgid "Field"
238
+ msgstr ""
239
+
240
+ msgid "View"
241
+ msgstr ""
242
+
243
+ msgid "Taxonomy"
244
+ msgstr ""
245
+
246
+ msgid "Other Fields"
247
+ msgstr ""
248
+
249
+ msgid "Search"
250
+ msgstr ""
251
+
252
+ msgid "Clear"
253
+ msgstr ""
254
+
255
+ msgid "Some pointer hints have been hidden on this page. %sShow them again%s"
256
+ msgstr ""
257
+
258
+ msgid "Do you want to apply to all?"
259
+ msgstr ""
260
+
261
+ msgid "%d %s uses a different Content Template."
262
+ msgstr ""
263
+
264
+ msgid "%d %s use a different Content Template."
265
+ msgstr ""
266
+
267
+ msgid "Update %s now"
268
+ msgstr ""
269
+
270
+ msgid "Success!"
271
+ msgstr ""
272
+
273
+ msgid "All %ss were updated"
274
+ msgstr ""
275
+
276
+ msgid "Close"
277
+ msgstr ""
278
+
279
+ msgid "This View does not list posts"
280
+ msgstr ""
281
+
282
+ msgid "Filter MetaHTML is empty"
283
+ msgstr ""
284
+
285
+ msgid "Something on the filter_controls_mode is broken"
286
+ msgstr ""
287
+
288
+ msgid "post relationship"
289
+ msgstr ""
290
+
291
+ msgid "Your View contains more URL based filters than parametric search controls in the Filter HTML textarea"
292
+ msgstr ""
293
+
294
+ msgid "Your View contains more parametric search controls in the Filter HTML textarea than URL based filters"
295
+ msgstr ""
296
+
297
+ msgid "Cancel"
298
+ msgstr ""
299
+
300
+ msgid "Add New Content Template"
301
+ msgstr ""
302
+
303
+ msgid "Edit Content Template"
304
+ msgstr ""
305
+
306
+ msgid "New Content Template"
307
+ msgstr ""
308
+
309
+ msgid "View Views-Templates"
310
+ msgstr ""
311
+
312
+ msgid "Search Content Templates"
313
+ msgstr ""
314
+
315
+ msgid "No Content Templates found"
316
+ msgstr ""
317
+
318
+ msgid "No Content Templates found in Trash"
319
+ msgstr ""
320
+
321
+ msgid "Content Template"
322
+ msgstr ""
323
+
324
+ msgid "None"
325
+ msgstr ""
326
+
327
+ msgid "<strong>Content template debug: </strong>Calling function is <strong>%s</strong>"
328
+ msgstr ""
329
+
330
+ msgid "Insert Views Shortcode"
331
+ msgstr ""
332
+
333
+ msgid "Convert URLs to point to translated content in Views and Content Templates"
334
+ msgstr ""
335
+
336
+ msgid "Save"
337
+ msgstr ""
338
+
339
+ msgid "Settings Saved"
340
+ msgstr ""
341
+
342
+ msgid "A View loads content from the database and displays it anyway you choose."
343
+ msgstr ""
344
+
345
+ msgid "The Query section lets you choose the content to load."
346
+ msgstr ""
347
+
348
+ msgid "A basic query selects all items of a chosen type."
349
+ msgstr ""
350
+
351
+ msgid "You can refine the selection by adding filters."
352
+ msgstr ""
353
+
354
+ msgid "At the bottom of this page you will find the Layout section, where you control the output."
355
+ msgstr ""
356
+
357
+ msgid "The Front-end Filter section includes the pagination controls, allowing visitors to choose which results page to show."
358
+ msgstr ""
359
+
360
+ msgid "Creating paginated listings with Views"
361
+ msgstr ""
362
+
363
+ msgid "The Front-end Filter section includes the slider controls, allowing visitors switch between slides."
364
+ msgstr ""
365
+
366
+ msgid "At the bottom of this page you will find a slide Content Template, where you design slides."
367
+ msgstr ""
368
+
369
+ msgid "Creating sliders with Views"
370
+ msgstr ""
371
+
372
+ msgid "Building a View for a parametric search:"
373
+ msgstr ""
374
+
375
+ msgid "Select which content to load in the 'Content selection' section."
376
+ msgstr ""
377
+
378
+ msgid "Add filter inputs to the 'Filter HTML/CSS/JS' section."
379
+ msgstr ""
380
+
381
+ msgid "Select advanced search options in the 'Parametric search settings' section."
382
+ msgstr ""
383
+
384
+ msgid "Design the search results output in the 'Layout HTML/CSS/JS' section."
385
+ msgstr ""
386
+
387
+ msgid "Remember to click on Update after you complete each section and before you continue to the next section."
388
+ msgstr ""
389
+
390
+ msgid "Creating parametric searches with Views"
391
+ msgstr ""
392
+
393
+ msgid "The Front-end filter section lets you add pagination, slider controls and parametric search to the View."
394
+ msgstr ""
395
+
396
+ msgid "The pagination section lets you break the results into separate pages."
397
+ msgstr ""
398
+
399
+ msgid "This way, you can display a large number of results, in shorter pages."
400
+ msgstr ""
401
+
402
+ msgid "You can insert next/previous links and page selectors, for navigating directly to a specific page."
403
+ msgstr ""
404
+
405
+ msgid "The first part of this section lets you choose how pagination works."
406
+ msgstr ""
407
+
408
+ msgid "Select how many results to show in each page and how pages transition."
409
+ msgstr ""
410
+
411
+ msgid "The second part of this section lets you design the pagination controls that would appear on the page for visitors."
412
+ msgstr ""
413
+
414
+ msgid "The toolbar above the HTML editor includes buttons for inserting various controls."
415
+ msgstr ""
416
+
417
+ msgid "Besides pagination, you can also insert parametric search filters and content search controls."
418
+ msgstr ""
419
+
420
+ msgid "The pagination section lets you build sliders with Views."
421
+ msgstr ""
422
+
423
+ msgid "The View will display each slide at a time and allow visitors to switch between slides using next/previous links and slide selectors."
424
+ msgstr ""
425
+
426
+ msgid "The first part of this section lets you choose how the slider pagination works."
427
+ msgstr ""
428
+
429
+ msgid "Select how many results to show in each slide and how slides transition."
430
+ msgstr ""
431
+
432
+ msgid "The second part of this section lets you design the transition controls for the slider."
433
+ msgstr ""
434
+
435
+ msgid "The toolbar above the HTML editor includes buttons for inserting the slide transition controls."
436
+ msgstr ""
437
+
438
+ msgid "Using pagination you can also implement sliders."
439
+ msgstr ""
440
+
441
+ msgid "Learn how to create sliders with Views."
442
+ msgstr ""
443
+
444
+ msgid "Besides pagination and slider transition controls, you can also insert parametric search filters and content search controls."
445
+ msgstr ""
446
+
447
+ msgid "Learn how to create parametric searches with Views."
448
+ msgstr ""
449
+
450
+ msgid "To create a parametric search, position the cursor between the %s and %s shortcodes and click on the ‘Filters’ button to insert filter elements."
451
+ msgstr ""
452
+
453
+ msgid "Your parametric search can contain any custom field or taxonomy that this View queries."
454
+ msgstr ""
455
+
456
+ msgid "You can also click on the \"Search\" button to add a search box for visitors"
457
+ msgstr ""
458
+
459
+ msgid "Use HTML and CSS to style the filter."
460
+ msgstr ""
461
+
462
+ msgid "Remember to include the ‘Submit’ button for the form."
463
+ msgstr ""
464
+
465
+ msgid "This View uses pagination, but pagination controls are still not inserted into the filter HTML section."
466
+ msgstr ""
467
+
468
+ msgid "Would you like to insert them now?"
469
+ msgstr ""
470
+
471
+ msgid "Automatically insert pagination controls"
472
+ msgstr ""
473
+
474
+ msgid "No - I will add pagination controls manually"
475
+ msgstr ""
476
+
477
+ msgid "This View uses AJAX pagination to implement a slider."
478
+ msgstr ""
479
+
480
+ msgid "However, pagination controls are still not inserted into the filter HTML section."
481
+ msgstr ""
482
+
483
+ msgid "We've just inserted shortcodes that display the pagination."
484
+ msgstr ""
485
+
486
+ msgid "You will see the following shortcodes inside the filter HTML box below."
487
+ msgstr ""
488
+
489
+ msgid "To style the pagination, add your HTML around the pagination shortcodes."
490
+ msgstr ""
491
+
492
+ msgid "You can always insert these shortcodes manually by clicking on the ‘Pagination’ button below."
493
+ msgstr ""
494
+
495
+ msgid "The layout HTML box lets you output your View results and style them on your page."
496
+ msgstr ""
497
+
498
+ msgid "Click on the Layout Wizard to select the style of your Views loop and the fields you want to display."
499
+ msgstr ""
500
+
501
+ msgid "You can also insert fields manually by positioning the cursor inside between the %s and %s tags, and clicking on the Fields button."
502
+ msgstr ""
503
+
504
+ msgid "The Content Template button will let you add, or even create, a Content template to insert directly into your view."
505
+ msgstr ""
506
+
507
+ msgid "Learn more about layouts and building your View loop"
508
+ msgstr ""
509
+
510
+ msgid "Layout wizard"
511
+ msgstr ""
512
+
513
+ msgid "a guided wizard that lets you create layouts, with different styles and content."
514
+ msgstr ""
515
+
516
+ msgid "Recommended if you are new to Views."
517
+ msgstr ""
518
+
519
+ msgid "once you know how the layout loop works, add any field to it, using any formating style."
520
+ msgstr ""
521
+
522
+ msgid "Good for building your own unique loops."
523
+ msgstr ""
524
+
525
+ msgid "add complete blocks into the View loop using Content Templates."
526
+ msgstr ""
527
+
528
+ msgid "This method makes it easy to create complex layouts with simple editing."
529
+ msgstr ""
530
+
531
+ msgid "Media"
532
+ msgstr ""
533
+
534
+ msgid "add images and other media items to the View."
535
+ msgstr ""
536
+
537
+ msgid "Besides these buttons, you can edit the HTML content yourself by writing your own HTML and CSS."
538
+ msgstr ""
539
+
540
+ msgid "The View will iterate through the the results and display them one by one."
541
+ msgstr ""
542
+
543
+ msgid "Learn more by reading the %sViews Loop documentation%s."
544
+ msgstr ""
545
+
546
+ msgid "Hide these instructions"
547
+ msgstr ""
548
+
549
+ msgid "The Layout Wizard just added shortcodes for the fields that you selected to the HTML box."
550
+ msgstr ""
551
+
552
+ msgid "See how the shortcodes appear inside the loop."
553
+ msgstr ""
554
+
555
+ msgid "You can change the appearance by adding HTML and CSS around these shortcodes."
556
+ msgstr ""
557
+
558
+ msgid "You can add HTML code, fields, media and entire Content Templates to the editor."
559
+ msgstr ""
560
+
561
+ msgid "You just added a shortcode for a Content Template to this View."
562
+ msgstr ""
563
+
564
+ msgid "A Content Template works like a subroutine."
565
+ msgstr ""
566
+
567
+ msgid "You can edit its content in one place and use it in several places in the View."
568
+ msgstr ""
569
+
570
+ msgid "You just connected a Content Template to this View."
571
+ msgstr ""
572
+
573
+ msgid "Edit the new Content Template"
574
+ msgstr ""
575
+
576
+ msgid "This Content Template lets you design slides in this slider. Add any field you need to display and design them using HTML and CSS. To style the slide transition controls, scroll up the the filter section."
577
+ msgstr ""
578
+
579
+ msgid "This Content Template lets you design how each item in this grid will be displayed. A default shortcode that displays the post link has been added. You can edit this and add any field you need to display and design them using HTML and CSS."
580
+ msgstr ""
581
+
582
+ msgid "To change what gets displayed, scroll up the the filter section."
583
+ msgstr ""
584
+
585
+ msgid "You are viewing the read-only version of this View. To edit it, you need to get Views plugin."
586
+ msgstr ""
587
+
588
+ msgid "Get Views"
589
+ msgstr ""
590
+
591
+ msgid "You are viewing the read-only version of this Content Template. To edit it, you need to get Views plugin."
592
+ msgstr ""
593
+
594
+ msgid "This Content Template replaces the content area of the posts that you assign it to."
595
+ msgstr ""
596
+
597
+ msgid "It can be used to tweak the content of a post when it is displayed alone or in an archive page."
598
+ msgstr ""
599
+
600
+ msgid "You can also call this Template using a shortcode [wpv-post-body view_template=\"XX\"] to render specific information about the current post."
601
+ msgstr ""
602
+
603
+ msgid "You can add shortcodes to post fields, and also your own HTML and CSS to style the fields and design the page template."
604
+ msgstr ""
605
+
606
+ msgid "Content Template documentation"
607
+ msgstr ""
608
+
609
+ msgid "TwoYou are viewing the read-only version of this WordPress Archive. To edit it, you need to get Views plugin."
610
+ msgstr ""
611
+
612
+ msgid "This WordPress Archive replaces the natural archive loops created by WordPress."
613
+ msgstr ""
614
+
615
+ msgid "WordPress Archives documentation"
616
+ msgstr ""
617
+
618
+ msgid "OneYou are viewing the read-only version of this WordPress Archive. To edit it, you need to get Views plugin."
619
+ msgstr ""
620
+
621
+ msgid "Views will provide a Layout Wizard to select the style of your Views loop and the fields you want to display."
622
+ msgstr ""
623
+
624
+ msgid "You can also insert fields manually."
625
+ msgstr ""
626
+
627
+ msgid "The full Views plugin will let you add, or even create, a Content template to insert directly into your Layout."
628
+ msgstr ""
629
+
630
+ msgid "Besides these helpers, you can edit the HTML content yourself by writing your own HTML and CSS."
631
+ msgstr ""
632
+
633
+ msgid "Title and description"
634
+ msgstr ""
635
+
636
+ msgid "Each View has a title and an optional description. These are used for you, to identify different Views. The title and the description don't appear anywhere on the site's public pages."
637
+ msgstr ""
638
+
639
+ msgid "Content to load"
640
+ msgstr ""
641
+
642
+ msgid "Choose between posts, taxonomy and users and then select the specific content type to load. For posts, you can select multiple content types."
643
+ msgstr ""
644
+
645
+ msgid "Query options"
646
+ msgstr ""
647
+
648
+ msgid "This section includes additional options for what content to load. You will see different options for posts, taxonomy and users."
649
+ msgstr ""
650
+
651
+ msgid "Ordering"
652
+ msgstr ""
653
+
654
+ msgid "Choose how to order the results that the View gets from the database. You can select the sorting key and direction."
655
+ msgstr ""
656
+
657
+ msgid "Limit and offset"
658
+ msgstr ""
659
+
660
+ msgid "You can limit the number of results returned by the query and set an offset. Please note that this option is not intended for pagination and sliders, but for static limit and offset settings."
661
+ msgstr ""
662
+
663
+ msgid "Query filter"
664
+ msgstr ""
665
+
666
+ msgid "You can filter the View query by status, custom fields, taxonomy, users fields and even content search depending on the content that you are going to load. Click on 'Add another filter' and then select the filter type. A View may have as many filters as you like."
667
+ msgstr ""
668
+
669
+ msgid "Pagination and sliders settings"
670
+ msgstr ""
671
+
672
+ msgid "You can use a View to display paginated results and sliders. Both are built using 'Pagination'. For paginated listings, choose to update the entire page. For sliders, choose to update only the View."
673
+ msgstr ""
674
+
675
+ msgid "Filter HTML/CSS/JS"
676
+ msgstr ""
677
+
678
+ msgid "In this section you can add pagination controls, slider controls and parametric searches. If you enabled pagination, you need to insert the pagination controls here. They are used for both paged results and sliders. For parametric searches, insert 'filter' elements. The output of this section is displayed via the [wpv-filter-meta-html] shortcode in the Combined Output section."
679
+ msgstr ""
680
+
681
+ msgid "Parametric search"
682
+ msgstr ""
683
+
684
+ msgid "In this section you can choose when to refresh the Views results and which options to show in form inputs."
685
+ msgstr ""
686
+
687
+ msgid "View HTML output"
688
+ msgstr ""
689
+
690
+ msgid "This HTML determines what the View outputs for the query results. Use the Layout wizard to create a new layout. Then, edit it by adding fields, HTML, media and anything else in the toolbar. The output of this section is displayed via the [wpv-layout-meta-html] in the Combined Output section."
691
+ msgstr ""
692
+
693
+ msgid "Templates for this View"
694
+ msgstr ""
695
+
696
+ msgid "A View may include templates. These templates make it easy to output complex structures without having to repeat them in the View HTML. Click on the 'Content Template' button in the Layout HTML section to add Content Templates here."
697
+ msgstr ""
698
+
699
+ msgid "Combined Output"
700
+ msgstr ""
701
+
702
+ msgid "This HTML box lets you control how the Filter and Layout sections of this Views are displayed. The [wpv-filter-meta-html] shortcode displays the output of the Filter section. The [wpv-layout-meta-html] shortcode displays the output of the Layout section. You can add your HTML and fields to rearrange and style the output."
703
+ msgstr ""
704
+
705
+ msgid "Loop selection"
706
+ msgstr ""
707
+
708
+ msgid "Choose which listing page to customize. The WordPress archive will display the exact same content as WordPress normally does, but you can design it using the View HTML."
709
+ msgstr ""
710
+
711
+ msgid "Module Manager"
712
+ msgstr ""
713
+
714
+ msgid "With Modules, you can easily reuse your designs in different websites and create your own library of building blocks."
715
+ msgstr ""
716
+
717
+ msgid "Home/Blog"
718
+ msgstr ""
719
+
720
+ msgid "Search results"
721
+ msgstr ""
722
+
723
+ msgid "Author archives"
724
+ msgstr ""
725
+
726
+ msgid "Year archives"
727
+ msgstr ""
728
+
729
+ msgid "Month archives"
730
+ msgstr ""
731
+
732
+ msgid "Day archives"
733
+ msgstr ""
734
+
735
+ msgid "%s using \"%s\""
736
+ msgstr ""
737
+
738
+ msgid "There are no Views being used for Post Type archive loops."
739
+ msgstr ""
740
+
741
+ msgid "Edit"
742
+ msgstr ""
743
+
744
+ msgid "Create a new View for this listing page"
745
+ msgstr ""
746
+
747
+ msgid "There are no Views being used for Taxonomy archive loops."
748
+ msgstr ""
749
+
750
+ msgid "post type <strong>%s</strong>"
751
+ msgstr ""
752
+
753
+ msgid "taxonomy <strong>%s</strong>"
754
+ msgstr ""
755
+
756
+ msgid "This View isn't being used for any archive loops."
757
+ msgstr ""
758
+
759
+ msgid "This View is being used for these archive loops: %s"
760
+ msgstr ""
761
+
762
+ msgid "OK"
763
+ msgstr ""
764
+
765
+ msgid "<span style=\"color:red\">*</span> A different WordPress Archive is already assigned to this item"
766
+ msgstr ""
767
+
768
+ msgid "A WordPress Archive with that name already exists. Please use another name."
769
+ msgstr ""
770
+
771
+ msgid "Loop"
772
+ msgstr ""
773
+
774
+ msgid "Use this View"
775
+ msgstr ""
776
+
777
+ msgid "Use this View for these archive loops:"
778
+ msgstr ""
779
+
780
+ msgid "Post type loops"
781
+ msgstr ""
782
+
783
+ msgid "Taxonomy loops"
784
+ msgstr ""
785
+
786
+ msgid "Add new WordPress Archive"
787
+ msgstr ""
788
+
789
+ msgid "What loop will this Archive be used for?"
790
+ msgstr ""
791
+
792
+ msgid "WordPress Native Archives"
793
+ msgstr ""
794
+
795
+ msgid "Post Type Archives"
796
+ msgstr ""
797
+
798
+ msgid "Taxonomy Archives"
799
+ msgstr ""
800
+
801
+ msgid "Name this WordPress Archive"
802
+ msgstr ""
803
+
804
+ msgid "WordPress Archive name"
805
+ msgstr ""
806
+
807
+ msgid "Add new Archive"
808
+ msgstr ""
809
+
810
+ msgid "Accept"
811
+ msgstr ""
812
+
813
+ msgid "custom field"
814
+ msgstr ""
815
+
816
+ msgid "taxonomy"
817
+ msgstr ""
818
+
819
+ msgid "The url_param is missing from the wpv-control shortcode argument."
820
+ msgstr ""
821
+
822
+ msgid "The \"type\" or \"field\" needs to be set in the wpv-control shortcode argument."
823
+ msgstr ""
824
+
825
+ msgid "Types plugin is required."
826
+ msgstr ""
827
+
828
+ msgid "Empty field values or incorrect field defined. "
829
+ msgstr ""
830
+
831
+ msgid "Select date"
832
+ msgstr ""
833
+
834
+ msgid "You need the Types plugin to render this parametric search control"
835
+ msgstr ""
836
+
837
+ msgid "The url_param argument is missing from the wpv-control-set shortcode."
838
+ msgstr ""
839
+
840
+ msgid "The ancestors argument is missing from the wpv-control-set shortcode."
841
+ msgstr ""
842
+
843
+ msgid "The type argument needs to be set in the wpv-control-item shortcode."
844
+ msgstr ""
845
+
846
+ msgid "The ancestor_type argument is missing from the wpv-control-item shortcode."
847
+ msgstr ""
848
+
849
+ msgid "The post types listed in this View do not have ancestors."
850
+ msgstr ""
851
+
852
+ msgid "The ancestor_type argument refers to a post type that is not included in the ancestors tree."
853
+ msgstr ""
854
+
855
+ msgid "The ancestors argument does not end with a valid parent for the returned post types on this View."
856
+ msgstr ""
857
+
858
+ msgid "There seems to be some kind of infinite loop happening."
859
+ msgstr ""
860
+
861
+ msgid "Reset"
862
+ msgstr ""
863
+
864
+ msgid "This View uses an auxiliar query: it has pagination and limit&offset settings, and WordPress can not perform a single Query to handle both."
865
+ msgstr ""
866
+
867
+ msgid "Export"
868
+ msgstr ""
869
+
870
+ msgid "Import"
871
+ msgstr ""
872
+
873
+ msgid "Could not read the Views import file."
874
+ msgstr ""
875
+
876
+ msgid "Unable to open zip file"
877
+ msgstr ""
878
+
879
+ msgid "The Simple XML library is missing."
880
+ msgstr ""
881
+
882
+ msgid "The XML file (%s) could not be read."
883
+ msgstr ""
884
+
885
+ msgid "The XML could not be read."
886
+ msgstr ""
887
+
888
+ msgid "Failed to update view-template - %s."
889
+ msgstr ""
890
+
891
+ msgid "Failed to update Content Template - %s."
892
+ msgstr ""
893
+
894
+ msgid "Failed to create Content Template - %s."
895
+ msgstr ""
896
+
897
+ msgid "%d Content Templates found in the file. %d have been created and %d have been over written."
898
+ msgstr ""
899
+
900
+ msgid "%d existing Content Templates were deleted."
901
+ msgstr ""
902
+
903
+ msgid "Failed to update view - %s."
904
+ msgstr ""
905
+
906
+ msgid "Failed to create view - %s."
907
+ msgstr ""
908
+
909
+ msgid "%d Views found in the file. %d have been created and %d have been over written."
910
+ msgstr ""
911
+
912
+ msgid "%d existing Views were deleted."
913
+ msgstr ""
914
+
915
+ msgid "This Views have filters by IDs that were not correctly imported because they filter by posts that do not exist. Please review them: "
916
+ msgstr ""
917
+
918
+ msgid "This Views filter by post IDs using a shortcode attribute. You may need to modify the Views shortcodes if post IDs have changed during import: "
919
+ msgstr ""
920
+
921
+ msgid "%s could not be found"
922
+ msgstr ""
923
+
924
+ msgid "Settings updated"
925
+ msgstr ""
926
+
927
+ msgid "WordPress Archives and Content Templates settings updated"
928
+ msgstr ""
929
+
930
+ msgid "Import Views, WordPress Archives and Content Templates for your Theme"
931
+ msgstr ""
932
+
933
+ msgid "Import Views, WordPress Archives and Content Templates"
934
+ msgstr ""
935
+
936
+ msgid "Settings"
937
+ msgstr ""
938
+
939
+ msgid "Bulk overwrite if View or WordPress Archive exists"
940
+ msgstr ""
941
+
942
+ msgid "Delete any existing Views or WordPress Archives that are not in the import"
943
+ msgstr ""
944
+
945
+ msgid "Bulk overwrite if Content Template exists"
946
+ msgstr ""
947
+
948
+ msgid "Delete any existing Content Templates that are not in the import"
949
+ msgstr ""
950
+
951
+ msgid "Overwrite Views settings"
952
+ msgstr ""
953
+
954
+ msgid "Import the Views XML file placed in the Views Embedded folder"
955
+ msgstr ""
956
+
957
+ msgid "Select the Views XML file to upload from your computer"
958
+ msgstr ""
959
+
960
+ msgid "Upload file"
961
+ msgstr ""
962
+
963
+ msgid "Content Templates"
964
+ msgstr ""
965
+
966
+ msgid "Error during View import"
967
+ msgstr ""
968
+
969
+ msgid "Error during Content Template import"
970
+ msgstr ""
971
+
972
+ msgid "Views elements in this Module"
973
+ msgstr ""
974
+
975
+ msgid "Page %s"
976
+ msgstr ""
977
+
978
+ msgid "Current post body"
979
+ msgstr ""
980
+
981
+ msgid "Title"
982
+ msgstr ""
983
+
984
+ msgid "ID"
985
+ msgstr ""
986
+
987
+ msgid "Name"
988
+ msgstr ""
989
+
990
+ msgid "User"
991
+ msgstr ""
992
+
993
+ msgid "Object received from cache. MySQL query was cached in"
994
+ msgstr ""
995
+
996
+ msgid "Enable line breaks"
997
+ msgstr ""
998
+
999
+ msgid "Enable syntax higlighter"
1000
+ msgstr ""
1001
+
1002
+ msgid "Notice: Syntax higlighter can cause performance issues for large blocks of code"
1003
+ msgstr ""
1004
+
1005
+ msgid "Page info"
1006
+ msgstr ""
1007
+
1008
+ msgid "Current page"
1009
+ msgstr ""
1010
+
1011
+ msgid "Total memory used"
1012
+ msgstr ""
1013
+
1014
+ msgid "Render time"
1015
+ msgstr ""
1016
+
1017
+ msgid "Total MySQL queries"
1018
+ msgstr ""
1019
+
1020
+ msgid "CPU usage"
1021
+ msgstr ""
1022
+
1023
+ msgid "Elements info"
1024
+ msgstr ""
1025
+
1026
+ msgid "Post body"
1027
+ msgstr ""
1028
+
1029
+ msgid "WordPress Archive"
1030
+ msgstr ""
1031
+
1032
+ msgid "Kind of element"
1033
+ msgstr ""
1034
+
1035
+ msgid "Memory used"
1036
+ msgstr ""
1037
+
1038
+ msgid "Summary"
1039
+ msgstr ""
1040
+
1041
+ msgid "Additional info"
1042
+ msgstr ""
1043
+
1044
+ msgid "Query args"
1045
+ msgstr ""
1046
+
1047
+ msgid "Loading"
1048
+ msgstr ""
1049
+
1050
+ msgid "Hide"
1051
+ msgstr ""
1052
+
1053
+ msgid "Show"
1054
+ msgstr ""
1055
+
1056
+ msgid "MySQL query"
1057
+ msgstr ""
1058
+
1059
+ msgid "Items found"
1060
+ msgstr ""
1061
+
1062
+ msgid "Query results"
1063
+ msgstr ""
1064
+
1065
+ msgid "Filters"
1066
+ msgstr ""
1067
+
1068
+ msgid "Loop"
1069
+ msgstr ""
1070
+
1071
+ msgid "Template results"
1072
+ msgstr ""
1073
+
1074
+ msgid "Post body data"
1075
+ msgstr ""
1076
+
1077
+ msgid "Received array"
1078
+ msgstr ""
1079
+
1080
+ msgid "Original content"
1081
+ msgstr ""
1082
+
1083
+ msgid "Shortcodes"
1084
+ msgstr ""
1085
+
1086
+ msgid "Attributes"
1087
+ msgstr ""
1088
+
1089
+ msgid "Query"
1090
+ msgstr ""
1091
+
1092
+ msgid "Info"
1093
+ msgstr ""
1094
+
1095
+ msgid "Output"
1096
+ msgstr ""
1097
+
1098
+ msgid "Nested elements"
1099
+ msgstr ""
1100
+
1101
+ msgid "Output (RAW)"
1102
+ msgstr ""
1103
+
1104
+ msgid "Views/Content Templates debug information"
1105
+ msgstr ""
1106
+
1107
+ msgid "You attempted to edit a View that doesn&#8217;t exist. Perhaps it was deleted?"
1108
+ msgstr ""
1109
+
1110
+ msgid "You can�t edit this View because it is in the Trash. Please restore it and try again."
1111
+ msgstr ""
1112
+
1113
+ msgid "Preview View"
1114
+ msgstr ""
1115
+
1116
+ msgid "Learn how to display Views"
1117
+ msgstr ""
1118
+
1119
+ msgid "Preview Content Template"
1120
+ msgstr ""
1121
+
1122
+ msgid "Preview WordPress Archive"
1123
+ msgstr ""
1124
+
1125
+ msgid "Preview Layouts Loop View"
1126
+ msgstr ""
1127
+
1128
+ msgid " (post type archive)"
1129
+ msgstr ""
1130
+
1131
+ msgid " (taxonomy archive)"
1132
+ msgstr ""
1133
+
1134
+ msgid "This View loads <strong>%s</strong>"
1135
+ msgstr ""
1136
+
1137
+ msgid "Results are "
1138
+ msgstr ""
1139
+
1140
+ msgid "Select posts with custom field:"
1141
+ msgstr ""
1142
+
1143
+ msgid "Select posts with taxonomy:"
1144
+ msgstr ""
1145
+
1146
+ msgid "Select users with usermeta field:"
1147
+ msgstr ""
1148
+
1149
+ msgid ""
1150
+ msgstr ""
1151
+
1152
+ msgid "Slug of this View: "
1153
+ msgstr ""
1154
+
1155
+ msgid "The query section determines what content the View loads from the database"
1156
+ msgstr ""
1157
+
1158
+ msgid "The filter section lets you set up pagination and parametric search, which let visitors control the View query"
1159
+ msgstr ""
1160
+
1161
+ msgid "The layout section styles the View output on the page."
1162
+ msgstr ""
1163
+
1164
+ msgid "What to see this in action?"
1165
+ msgstr ""
1166
+
1167
+ msgid "Slug of this Content Template: "
1168
+ msgstr ""
1169
+
1170
+ msgid "Slug of this WordPress Archive: "
1171
+ msgstr ""
1172
+
1173
+ msgid "The loop section determines which listing page to customize"
1174
+ msgstr ""
1175
+
1176
+ msgid "This WordPress Archive is not used on any archive loops"
1177
+ msgstr ""
1178
+
1179
+ msgid "This WordPress Archive is used in the following archive loops: "
1180
+ msgstr ""
1181
+
1182
+ msgid "Content selection"
1183
+ msgstr ""
1184
+
1185
+ msgid "No filters set"
1186
+ msgstr ""
1187
+
1188
+ msgid "Pagination and Slider settings"
1189
+ msgstr ""
1190
+
1191
+ msgid "Filter HTML"
1192
+ msgstr ""
1193
+
1194
+ msgid "Layout HTML"
1195
+ msgstr ""
1196
+
1197
+ msgid "Insert search form from View - %s"
1198
+ msgstr ""
1199
+
1200
+ msgid "No target posts were found that use this View"
1201
+ msgstr ""
1202
+
1203
+ msgid "You first need to insert the View named %s in a post or page to show its results"
1204
+ msgstr ""
1205
+
1206
+ msgid "When the form is submitted, go to the results page:"
1207
+ msgstr ""
1208
+
1209
+ msgid "Insert shortcode"
1210
+ msgstr ""
1211
+
1212
+ msgid "Insert translatable string"
1213
+ msgstr ""
1214
+
1215
+ msgid "Insert search term shortcode"
1216
+ msgstr ""
1217
+
1218
+ msgid "Delete"
1219
+ msgstr ""
1220
+
1221
+ msgid "String to translate"
1222
+ msgstr ""
1223
+
1224
+ msgid "WPML context"
1225
+ msgstr ""
1226
+
1227
+ msgid "URL parameter to watch (optional)"
1228
+ msgstr ""
1229
+
1230
+ msgid "Slug"
1231
+ msgstr ""
1232
+
1233
+ msgid "Title with a link"
1234
+ msgstr ""
1235
+
1236
+ msgid "Body"
1237
+ msgstr ""
1238
+
1239
+ msgid "Excerpt"
1240
+ msgstr ""
1241
+
1242
+ msgid "Author"
1243
+ msgstr ""
1244
+
1245
+ msgid "Date"
1246
+ msgstr ""
1247
+
1248
+ msgid "URL"
1249
+ msgstr ""
1250
+
1251
+ msgid "Featured image"
1252
+ msgstr ""
1253
+
1254
+ msgid "Comments number"
1255
+ msgstr ""
1256
+
1257
+ msgid "Edit Link"
1258
+ msgstr ""
1259
+
1260
+ msgid "Post type"
1261
+ msgstr ""
1262
+
1263
+ msgid "Post status"
1264
+ msgstr ""
1265
+
1266
+ msgid "Post class"
1267
+ msgstr ""
1268
+
1269
+ msgid "Comment title"
1270
+ msgstr ""
1271
+
1272
+ msgid "Comment body"
1273
+ msgstr ""
1274
+
1275
+ msgid "Comment Author"
1276
+ msgstr ""
1277
+
1278
+ msgid "Comment Date"
1279
+ msgstr ""
1280
+
1281
+ msgid "Taxonomy title"
1282
+ msgstr ""
1283
+
1284
+ msgid "Taxonomy title with a link"
1285
+ msgstr ""
1286
+
1287
+ msgid "Taxonomy URL"
1288
+ msgstr ""
1289
+
1290
+ msgid "Taxonomy slug"
1291
+ msgstr ""
1292
+
1293
+ msgid "Taxonomy description"
1294
+ msgstr ""
1295
+
1296
+ msgid "Taxonomy post count"
1297
+ msgstr ""
1298
+
1299
+ msgid "Taxonomy page info"
1300
+ msgstr ""
1301
+
1302
+ msgid "Bloginfo value"
1303
+ msgstr ""
1304
+
1305
+ msgid "Search term"
1306
+ msgstr ""
1307
+
1308
+ msgid "Archive link"
1309
+ msgstr ""
1310
+
1311
+ msgid "Current user info"
1312
+ msgstr ""
1313
+
1314
+ msgid "Show user data"
1315
+ msgstr ""
1316
+
1317
+ msgid "Add to cart button"
1318
+ msgstr ""
1319
+
1320
+ msgid "Add to cart box"
1321
+ msgstr ""
1322
+
1323
+ msgid "Edit "
1324
+ msgstr ""
1325
+
1326
+ msgid "Edit This"
1327
+ msgstr ""
1328
+
1329
+ msgid "No Comments"
1330
+ msgstr ""
1331
+
1332
+ msgid "1 Comment"
1333
+ msgstr ""
1334
+
1335
+ msgid "% Comments"
1336
+ msgstr ""
1337
+
1338
+ msgid "Content template"
1339
+ msgstr ""
1340
+
1341
+ msgid "Archive"
1342
+ msgstr ""
1343
+
1344
+ msgid "Parametric search form"
1345
+ msgstr ""
1346
+
1347
+ msgid "Category"
1348
+ msgstr ""
1349
+
1350
+ msgid "all post types"
1351
+ msgstr ""
1352
+
1353
+ msgid "All post types"
1354
+ msgstr ""
1355
+
1356
+ msgid "%s"
1357
+ msgstr ""
1358
+
1359
+ msgid "terms of the taxonomy %s"
1360
+ msgstr ""
1361
+
1362
+ msgid "This View selects terms of the taxonomy %s"
1363
+ msgstr ""
1364
+
1365
+ msgid "terms of a taxonomy that no longer exists"
1366
+ msgstr ""
1367
+
1368
+ msgid "This View selects terms of a taxonomy that no longer exists"
1369
+ msgstr ""
1370
+
1371
+ msgid "users with any role"
1372
+ msgstr ""
1373
+
1374
+ msgid "users with role %s"
1375
+ msgstr ""
1376
+
1377
+ msgid "This View selects users with any role"
1378
+ msgstr ""
1379
+
1380
+ msgid "This View selects users with role %s"
1381
+ msgstr ""
1382
+
1383
+ msgid "post date"
1384
+ msgstr ""
1385
+
1386
+ msgid "post title"
1387
+ msgstr ""
1388
+
1389
+ msgid "post ID"
1390
+ msgstr ""
1391
+
1392
+ msgid "menu order"
1393
+ msgstr ""
1394
+
1395
+ msgid "random order"
1396
+ msgstr ""
1397
+
1398
+ msgid "Field - %s"
1399
+ msgstr ""
1400
+
1401
+ msgid "descending"
1402
+ msgstr ""
1403
+
1404
+ msgid "ascending"
1405
+ msgstr ""
1406
+
1407
+ msgid "term count"
1408
+ msgstr ""
1409
+
1410
+ msgid "term name"
1411
+ msgstr ""
1412
+
1413
+ msgid "term slug"
1414
+ msgstr ""
1415
+
1416
+ msgid "term group"
1417
+ msgstr ""
1418
+
1419
+ msgid "no specific criteria"
1420
+ msgstr ""
1421
+
1422
+ msgid "user login"
1423
+ msgstr ""
1424
+
1425
+ msgid "user ID"
1426
+ msgstr ""
1427
+
1428
+ msgid "user name"
1429
+ msgstr ""
1430
+
1431
+ msgid "display name"
1432
+ msgstr ""
1433
+
1434
+ msgid "user nicename"
1435
+ msgstr ""
1436
+
1437
+ msgid "user email"
1438
+ msgstr ""
1439
+
1440
+ msgid "user url"
1441
+ msgstr ""
1442
+
1443
+ msgid "user registered date"
1444
+ msgstr ""
1445
+
1446
+ msgid "user post count"
1447
+ msgstr ""
1448
+
1449
+ msgid "ordered by <strong>%s</strong> in <strong>%s</strong> order"
1450
+ msgstr ""
1451
+
1452
+ msgid " ordered by %s, %s"
1453
+ msgstr ""
1454
+
1455
+ msgid "All results loaded"
1456
+ msgstr ""
1457
+
1458
+ msgid "Fade"
1459
+ msgstr ""
1460
+
1461
+ msgid "Slide horizontally"
1462
+ msgstr ""
1463
+
1464
+ msgid "Slide vertically"
1465
+ msgstr ""
1466
+
1467
+ msgid "Slide Left"
1468
+ msgstr ""
1469
+
1470
+ msgid "Slide Right"
1471
+ msgstr ""
1472
+
1473
+ msgid "Slide Up"
1474
+ msgstr ""
1475
+
1476
+ msgid "Slide Down"
1477
+ msgstr ""
1478
+
1479
+ msgid "No pagination"
1480
+ msgstr ""
1481
+
1482
+ msgid "Select posts with <strong>%s</strong> as the <strong>author</strong>."
1483
+ msgstr ""
1484
+
1485
+ msgid "None set"
1486
+ msgstr ""
1487
+
1488
+ msgid "Select posts with the author's <strong>%s</strong> determined by the URL parameter <strong>\"%s\"</strong>"
1489
+ msgstr ""
1490
+
1491
+ msgid " eg. yoursite/page-with-this-view/?<strong>%s</strong>=%s"
1492
+ msgstr ""
1493
+
1494
+ msgid "Select posts which author's <strong>%s</strong> is set by the View shortcode attribute <strong>\"%s\"</strong>"
1495
+ msgstr ""
1496
+
1497
+ msgid " eg. [wpv-view name=\"%s\" <strong>%s</strong>=\"%s\"]"
1498
+ msgstr ""
1499
+
1500
+ msgid " OR"
1501
+ msgstr ""
1502
+
1503
+ msgid " AND"
1504
+ msgstr ""
1505
+
1506
+ msgid " OR "
1507
+ msgstr ""
1508
+
1509
+ msgid " AND "
1510
+ msgstr ""
1511
+
1512
+ msgid "Categories"
1513
+ msgstr ""
1514
+
1515
+ msgid "is <strong>One</strong> of these"
1516
+ msgstr ""
1517
+
1518
+ msgid "is <strong>All</strong> of these"
1519
+ msgstr ""
1520
+
1521
+ msgid "is <strong>Not one</strong> of these"
1522
+ msgstr ""
1523
+
1524
+ msgid "the same as the <strong>current page</strong>"
1525
+ msgstr ""
1526
+
1527
+ msgid "set by the View shortcode attribute "
1528
+ msgstr ""
1529
+
1530
+ msgid "set by the URL parameter "
1531
+ msgstr ""
1532
+
1533
+ msgid "set by the parent view."
1534
+ msgstr ""
1535
+
1536
+ msgid "using the operator"
1537
+ msgstr ""
1538
+
1539
+ msgid "eg. [wpv-view name=\"view-name\" <strong>%s=\"xxxx\"</strong>]"
1540
+ msgstr ""
1541
+
1542
+ msgid "eg. http://www.example.com/page/?<strong>%s=xxxx</strong>"
1543
+ msgstr ""
1544
+
1545
+ msgid "Select posts that are <strong>children</strong> of the <strong>Post with ID set by the shortcode attribute %s</strong>."
1546
+ msgstr ""
1547
+
1548
+ msgid " eg. [wpv-view name=\"view-name\" <strong>%s=\"123\"</strong>]"
1549
+ msgstr ""
1550
+
1551
+ msgid "Select posts that are <strong>children</strong> of the <strong>Post with ID set by the URL parameter %s</strong>."
1552
+ msgstr ""
1553
+
1554
+ msgid " eg. http://www.example.com/my-page/?<strong>%s=123</strong>"
1555
+ msgstr ""
1556
+
1557
+ msgid "Select posts that are children of <strong>%s</strong>."
1558
+ msgstr ""
1559
+
1560
+ msgid "Include only posts "
1561
+ msgstr ""
1562
+
1563
+ msgid "Exclude posts "
1564
+ msgstr ""
1565
+
1566
+ msgid "with the following <strong>IDs</strong>: %s"
1567
+ msgstr ""
1568
+
1569
+ msgid "with IDs determined by the URL parameter <strong>\"%s\"</strong>"
1570
+ msgstr ""
1571
+
1572
+ msgid " eg. yoursite/page-with-this-view/?<strong>%s</strong>=1"
1573
+ msgstr ""
1574
+
1575
+ msgid "which IDs is set by the View shortcode attribute <strong>\"%s\"</strong>"
1576
+ msgstr ""
1577
+
1578
+ msgid " eg. [wpv-view name=\"%s\" <strong>%s</strong>=\"1\"]"
1579
+ msgstr ""
1580
+
1581
+ msgid "parent is <strong>%s</strong>"
1582
+ msgstr ""
1583
+
1584
+ msgid "Select posts whose parent is <strong>%s</strong>."
1585
+ msgstr ""
1586
+
1587
+ msgid "Select taxonomy whose parent is <strong>%s</strong>."
1588
+ msgstr ""
1589
+
1590
+ msgid "Filter by <strong>search</strong> term: <strong>%s</strong>"
1591
+ msgstr ""
1592
+
1593
+ msgid "Filter by this search term: <strong>%s</strong>."
1594
+ msgstr ""
1595
+
1596
+ msgid "Show a <strong>search box</strong> for visitors"
1597
+ msgstr ""
1598
+
1599
+ msgid "Show a <strong>search box</strong> for visitors."
1600
+ msgstr ""
1601
+
1602
+ msgid "Filter by <strong>search box</strong>"
1603
+ msgstr ""
1604
+
1605
+ msgid "The search box will be added <strong>manually</strong>.<br /><code>eg. [wpv-filter-search-box]</code>"
1606
+ msgstr ""
1607
+
1608
+ msgid "Taxonomy is <strong>One</strong> of these"
1609
+ msgstr ""
1610
+
1611
+ msgid "Taxonomy is set by the current page"
1612
+ msgstr ""
1613
+
1614
+ msgid "Select users <strong>(%s)</strong> who have role <strong>%s</strong>"
1615
+ msgstr ""
1616
+
1617
+ msgid "Select all users with role <strong>%s</strong>, except of <strong>(%s)</strong>"
1618
+ msgstr ""
1619
+
1620
+ msgid "Select all users with role <strong>%s</strong>"
1621
+ msgstr ""
1622
+
1623
+ msgid "Select users with the <strong>%s</strong> determined by the URL parameter <strong>\"%s\"</strong> and with role <strong>\"%s\"</strong>"
1624
+ msgstr ""
1625
+
1626
+ msgid "Select all users with role <strong>%s</strong>, except of <strong>%s</strong> determined by the URL parameter <strong>\"%s\"</strong>"
1627
+ msgstr ""
1628
+
1629
+ msgid "Select users with <strong>%s</strong> set by the View shortcode attribute <strong>\"%s\"</strong> and with role <strong>\"%s\"</strong>"
1630
+ msgstr ""
1631
+
1632
+ msgid "Select all users with role <strong>%s</strong>, except of <strong>%s</strong> set by the View shortcode attribute <strong>\"%s\"</strong>"
1633
+ msgstr ""
1634
+
1635
+ msgid "status of "
1636
+ msgstr ""
1637
+
1638
+ msgid "Select posts with status of "
1639
+ msgstr ""
1640
+
1641
+ msgid " or "
1642
+ msgstr ""
1643
+
1644
+ msgid "any status."
1645
+ msgstr ""
1646
+
1647
+ msgid "Do not apply any filter based on status."
1648
+ msgstr ""
1649
+
1650
+ msgid "Select posts with the <strong>author</strong> the same as the <strong>current logged in user</strong>."
1651
+ msgstr ""
1652
+
1653
+ msgid "Select posts with the <strong>author set by the parent View</strong>."
1654
+ msgstr ""
1655
+
1656
+ msgid "Select posts with the <strong>author the same as the current page</strong>."
1657
+ msgstr ""
1658
+
1659
+ msgid "Select posts that are <strong>children</strong> of the <strong>Post where this View is inserted</strong>."
1660
+ msgstr ""
1661
+
1662
+ msgid "Select posts that are a <strong>children</strong> of the <strong>Post set by parent View</strong>."
1663
+ msgstr ""
1664
+
1665
+ msgid "parent is the <strong>current page</strong>"
1666
+ msgstr ""
1667
+
1668
+ msgid "Select posts whose parent is the <strong>current page</strong>."
1669
+ msgstr ""
1670
+
1671
+ msgid "Select taxonomy whose parent is the value set by the <strong>parent view</strong>."
1672
+ msgstr ""
1673
+
1674
+ msgid "Displays a View"
1675
+ msgstr ""
1676
+
1677
+ msgid "WP Views"
1678
+ msgstr ""
1679
+
1680
+ msgid "No Views defined. You can add them <a%s>here</a>."
1681
+ msgstr ""
1682
+
1683
+ msgid "Displays the filter section of a View."
1684
+ msgstr ""
1685
+
1686
+ msgid "WP Views Filter"
1687
+ msgstr ""
1688
+
1689
+ msgid "No Views with frontend forms defined. You can add them <a%s>here</a>."
1690
+ msgstr ""
1691
+
1692
+ msgid "Edit view"
1693
+ msgstr ""
1694
+
1695
+ msgid "Title:"
1696
+ msgstr ""
1697
+
1698
+ msgid "View:"
1699
+ msgstr ""
1700
+
1701
+ msgid "Target page:"
1702
+ msgstr ""
1703
+
1704
+ msgid "You have <strong>Views</strong> import pending. %sClick here to import%s | %sDismiss this message%s"
1705
+ msgstr ""
1706
+
1707
+ msgid "Add New View"
1708
+ msgstr ""
1709
+
1710
+ msgid "Edit View"
1711
+ msgstr ""
1712
+
1713
+ msgid "New View"
1714
+ msgstr ""
1715
+
1716
+ msgid "View Views"
1717
+ msgstr ""
1718
+
1719
+ msgid "Search Views"
1720
+ msgstr ""
1721
+
1722
+ msgid "No views found"
1723
+ msgstr ""
1724
+
1725
+ msgid "No views found in Trash"
1726
+ msgstr ""
1727
+
1728
+ msgid "Embedded View"
1729
+ msgstr ""
1730
+
1731
+ msgid "Embedded Content Template"
1732
+ msgstr ""
1733
+
1734
+ msgid "Embedded WordPress Archive"
1735
+ msgstr ""
1736
+
1737
+ msgid "Import Views for theme"
1738
+ msgstr ""
1739
+
1740
+ msgid "View not found"
1741
+ msgstr ""
1742
+
1743
+ msgid "Insert Views Shortcodes"
1744
+ msgstr ""
1745
+
1746
+ msgid "Thumbnail"
1747
+ msgstr ""
1748
+
1749
+ msgid "Got it! Don't show this message again"
1750
+ msgstr ""
1751
+
1752
+ msgid "Getting started"
1753
+ msgstr ""
1754
+
1755
+ msgid "Views Import"
1756
+ msgstr ""
1757
+
1758
+ msgid "Views import complete"
1759
+ msgstr ""
1760
+
1761
+ msgid "WP Views Embedded was <strong>deactivated</strong>! You are already running the complete WP Views plugin, so this one is not needed anymore."
1762
+ msgstr ""
1763
+
1764
+ msgid "Views are lists and groups of content, like a listing or showcase page. On your theme the following Views are defined:"
1765
+ msgstr ""
1766
+
1767
+ msgid "Content Templates are applied to pages to create different layouts. On your theme the following Content Templates are defined:"
1768
+ msgstr ""
1769
+
1770
+ msgid "If you want to edit these or create your own you can purchase the full version of <strong>Views</strong> from %s"
1771
+ msgstr ""
1772
+
1773
+ msgid "Select one %s"
1774
+ msgstr ""
1775
+
1776
+ msgid "Any %s"
1777
+ msgstr ""
1778
+
1779
+ msgid "Types ancestors tree not valid."
1780
+ msgstr ""
1781
+
1782
+ msgid "Please follow the tip hint below. "
1783
+ msgstr ""
1784
+
1785
+ msgid "The post types selected in this View do not have Types ancestors"
1786
+ msgstr ""
1787
+
1788
+ msgid "Post relationship"
1789
+ msgstr ""
1790
+
1791
+ msgid "The view has been succesfully updated"
1792
+ msgstr ""
1793
+
1794
+ msgid "Please make a valid selection."
1795
+ msgstr ""
1796
+
1797
+ msgid "Something bad happend with shortcode building, check the console"
1798
+ msgstr ""
1799
+
1800
+ msgid "The value for \"Refer to this field as\" is mandatory, please provide one."
1801
+ msgstr ""
1802
+
1803
+ msgid "Please make a valid tree selection."
1804
+ msgstr ""
1805
+
1806
+ msgid "This field can not be left empty"
1807
+ msgstr ""
1808
+
1809
+ msgid "\" is a reserved word for "
1810
+ msgstr ""
1811
+
1812
+ msgid "Change this value to avoid conflicts"
1813
+ msgstr ""
1814
+
1815
+ msgid "Error: AJAX returned "
1816
+ msgstr ""
1817
+
1818
+ msgid "Error: "
1819
+ msgstr ""
1820
+
1821
+ msgid "There are problems inserting your data. Check the console. "
1822
+ msgstr ""
1823
+
1824
+ msgid "Please select at least one post type to fiter by."
1825
+ msgstr ""
1826
+
1827
+ msgid "Something went wrong loading data "
1828
+ msgstr ""
1829
+
1830
+ msgid "Something went wrong while bulding model."
1831
+ msgstr ""
1832
+
1833
+ msgid "the same as set by the URL parameter"
1834
+ msgstr ""
1835
+
1836
+ msgid "Something went wrong in building the filter "
1837
+ msgstr ""
1838
+
1839
+ msgid "Basic filters"
1840
+ msgstr ""
1841
+
1842
+ msgid "Select one tree"
1843
+ msgstr ""
1844
+
1845
+ msgid "Submit button"
1846
+ msgstr ""
1847
+
1848
+ msgid "Insert input"
1849
+ msgstr ""
1850
+
1851
+ msgid "Create a submit button for this parametric search."
1852
+ msgstr ""
1853
+
1854
+ msgid "Clear form"
1855
+ msgstr ""
1856
+
1857
+ msgid "Consider adding a label before inserting the button."
1858
+ msgstr ""
1859
+
1860
+ msgid "Spinner"
1861
+ msgstr ""
1862
+
1863
+ msgid "Place cursor within the [wpv-filter-controls][/wpv-filter-controls] tags."
1864
+ msgstr ""
1865
+
1866
+ msgid "Place cursor within the [wpv-filter-start][wpv-filter-end] tags."
1867
+ msgstr ""
1868
+
1869
+ msgid "Place your cursor inside [wpv-control] tags."
1870
+ msgstr ""
1871
+
1872
+ msgid "You should select a [wpv-control] short tag instead of "
1873
+ msgstr ""
1874
+
1875
+ msgid "Place your cursor over a [wpv-control] or a [wpv-control-set] tag to edit it."
1876
+ msgstr ""
1877
+
1878
+ msgid "To edit this filter, place your cursor over the [wpv-control-set] tag."
1879
+ msgstr ""
1880
+
1881
+ msgid "Warning: the cursor is inside another short code, this may cause problems."
1882
+ msgstr ""
1883
+
1884
+ msgid "Edit filter field"
1885
+ msgstr ""
1886
+
1887
+ msgid "Update input"
1888
+ msgstr ""
1889
+
1890
+ msgid "There are problems inserting the shortcode."
1891
+ msgstr ""
1892
+
1893
+ msgid "Button label:"
1894
+ msgstr ""
1895
+
1896
+ msgid "Button classname:"
1897
+ msgstr ""
1898
+
1899
+ msgid "Expand"
1900
+ msgstr ""
1901
+
1902
+ msgid "Please provide at least one non-empty value, you are free to live some of them empty."
1903
+ msgstr ""
1904
+
1905
+ msgid "You should define a callback for your ajax call to async load data"
1906
+ msgstr ""
1907
+
1908
+ msgid "This View already has a content search filter. If you insert a search control to the HTML, the existing search filter will be removed."
1909
+ msgstr ""
1910
+
1911
+ msgid "Post author"
1912
+ msgstr ""
1913
+
1914
+ msgid "Edit this filter"
1915
+ msgstr ""
1916
+
1917
+ msgid "Delete this filter"
1918
+ msgstr ""
1919
+
1920
+ msgid "Post Author"
1921
+ msgstr ""
1922
+
1923
+ msgid "Updated"
1924
+ msgstr ""
1925
+
1926
+ msgid "Not saved"
1927
+ msgstr ""
1928
+
1929
+ msgid "%sLearn about filtering by Post Author%s"
1930
+ msgstr ""
1931
+
1932
+ msgid "Post author is the same as the logged in user"
1933
+ msgstr ""
1934
+
1935
+ msgid "Post author is "
1936
+ msgstr ""
1937
+
1938
+ msgid "Post author is set by the parent View"
1939
+ msgstr ""
1940
+
1941
+ msgid "Post author is the author of the current page"
1942
+ msgstr ""
1943
+
1944
+ msgid "Post author's "
1945
+ msgstr ""
1946
+
1947
+ msgid " is set by this URL parameter: "
1948
+ msgstr ""
1949
+
1950
+ msgid " is set by this View shortcode attribute: "
1951
+ msgstr ""
1952
+
1953
+ msgid " is not a valid taxonomy for the post types you are trying to display."
1954
+ msgstr ""
1955
+
1956
+ msgid "%sLearn about filtering by taxonomy%s"
1957
+ msgstr ""
1958
+
1959
+ msgid "Delete this filter by %s"
1960
+ msgstr ""
1961
+
1962
+ msgid "Value: "
1963
+ msgstr ""
1964
+
1965
+ msgid "Taxonomy name"
1966
+ msgstr ""
1967
+
1968
+ msgid "Shortcode attribute"
1969
+ msgstr ""
1970
+
1971
+ msgid "URL parameter"
1972
+ msgstr ""
1973
+
1974
+ msgid "Operator"
1975
+ msgstr ""
1976
+
1977
+ msgid "IN"
1978
+ msgstr ""
1979
+
1980
+ msgid "NOT IN"
1981
+ msgstr ""
1982
+
1983
+ msgid "AND"
1984
+ msgstr ""
1985
+
1986
+ msgid "Select posts with taxonomy: "
1987
+ msgstr ""
1988
+
1989
+ msgid "Taxonomy relationship:"
1990
+ msgstr ""
1991
+
1992
+ msgid "Relationship to use when querying with multiple taxonomies:"
1993
+ msgstr ""
1994
+
1995
+ msgid "OR"
1996
+ msgstr ""
1997
+
1998
+ msgid "Taxonomy is:"
1999
+ msgstr ""
2000
+
2001
+ msgid "Any of the following"
2002
+ msgstr ""
2003
+
2004
+ msgid "NOT one of the following"
2005
+ msgstr ""
2006
+
2007
+ msgid "All of the following"
2008
+ msgstr ""
2009
+
2010
+ msgid "Value set by the current page"
2011
+ msgstr ""
2012
+
2013
+ msgid "Value set by View shortcode attribute"
2014
+ msgstr ""
2015
+
2016
+ msgid "Value set by URL parameter"
2017
+ msgstr ""
2018
+
2019
+ msgid "Value set by parent view"
2020
+ msgstr ""
2021
+
2022
+ msgid "Custom field - %s"
2023
+ msgstr ""
2024
+
2025
+ msgid "%sLearn about filtering by custom fields%s"
2026
+ msgstr ""
2027
+
2028
+ msgid "Custom field"
2029
+ msgstr ""
2030
+
2031
+ msgid "Constant"
2032
+ msgstr ""
2033
+
2034
+ msgid "Remove"
2035
+ msgstr ""
2036
+
2037
+ msgid "Add another value"
2038
+ msgstr ""
2039
+
2040
+ msgid "%1$s%2$s, %3$s"
2041
+ msgstr ""
2042
+
2043
+ msgid "Select posts with custom field: "
2044
+ msgstr ""
2045
+
2046
+ msgid "Custom field relationship:"
2047
+ msgstr ""
2048
+
2049
+ msgid "Relationship to use when querying with multiple custom fields:"
2050
+ msgstr ""
2051
+
2052
+ msgid "Comparison function:"
2053
+ msgstr ""
2054
+
2055
+ msgid "Post id"
2056
+ msgstr ""
2057
+
2058
+ msgid "Post Ids"
2059
+ msgstr ""
2060
+
2061
+ msgid "%sLearn about filtering by Post ID%s"
2062
+ msgstr ""
2063
+
2064
+ msgid "The View will filter posts to"
2065
+ msgstr ""
2066
+
2067
+ msgid "include"
2068
+ msgstr ""
2069
+
2070
+ msgid "exclude"
2071
+ msgstr ""
2072
+
2073
+ msgid "Posts with those IDs: "
2074
+ msgstr ""
2075
+
2076
+ msgid "Posts with IDs set by this URL parameter: "
2077
+ msgstr ""
2078
+
2079
+ msgid "Posts with IDs set by the View shortcode attribute: "
2080
+ msgstr ""
2081
+
2082
+ msgid "Post parent"
2083
+ msgstr ""
2084
+
2085
+ msgid "%sLearn about filtering by Post Parent%s"
2086
+ msgstr ""
2087
+
2088
+ msgid "Taxonomy parent"
2089
+ msgstr ""
2090
+
2091
+ msgid "This View has a filter for a taxonomy that no longer exists. Please select one taxonomy and update the Content selection section."
2092
+ msgstr ""
2093
+
2094
+ msgid "This mode is not available. Please select one taxonomy and update the Content selection section."
2095
+ msgstr ""
2096
+
2097
+ msgid "Parent is the current page"
2098
+ msgstr ""
2099
+
2100
+ msgid "Parent is:"
2101
+ msgstr ""
2102
+
2103
+ msgid "Parent is the taxonomy selected by the <strong>parent view</strong>"
2104
+ msgstr ""
2105
+
2106
+ msgid "Post relationship - Post is a child of"
2107
+ msgstr ""
2108
+
2109
+ msgid "Post Relationship - Post is a child of"
2110
+ msgstr ""
2111
+
2112
+ msgid "There is no post type selected in the Content selection setion"
2113
+ msgstr ""
2114
+
2115
+ msgid "Post type <strong>%s</strong> doesn't belong to any other post type"
2116
+ msgstr ""
2117
+
2118
+ msgid "Post type <strong>%s</strong> is a child of <strong>%s</strong> post type"
2119
+ msgstr ""
2120
+
2121
+ msgid " and "
2122
+ msgstr ""
2123
+
2124
+ msgid "Post type <strong>%s</strong> is a child of <strong>%s</strong> post types"
2125
+ msgstr ""
2126
+
2127
+ msgid "Post where this View is inserted"
2128
+ msgstr ""
2129
+
2130
+ msgid "Post set by parent View"
2131
+ msgstr ""
2132
+
2133
+ msgid "Post with ID set by the shortcode attribute"
2134
+ msgstr ""
2135
+
2136
+ msgid "Post with ID set by the URL parameter"
2137
+ msgstr ""
2138
+
2139
+ msgid "Specific:"
2140
+ msgstr ""
2141
+
2142
+ msgid "Querying and Displaying Child Posts"
2143
+ msgstr ""
2144
+
2145
+ msgid "Post search"
2146
+ msgstr ""
2147
+
2148
+ msgid "%sLearn about filtering for a specific text string%s"
2149
+ msgstr ""
2150
+
2151
+ msgid "Taxonomy search"
2152
+ msgstr ""
2153
+
2154
+ msgid "Where to search: "
2155
+ msgstr ""
2156
+
2157
+ msgid "Post content and title"
2158
+ msgstr ""
2159
+
2160
+ msgid "Just post titles"
2161
+ msgstr ""
2162
+
2163
+ msgid "Search for a specific text:"
2164
+ msgstr ""
2165
+
2166
+ msgid "I’ll add the search box to the HTML manually"
2167
+ msgstr ""
2168
+
2169
+ msgid "Post Status"
2170
+ msgstr ""
2171
+
2172
+ msgid "Taxonomy term"
2173
+ msgstr ""
2174
+
2175
+ msgid "Remove this filter"
2176
+ msgstr ""
2177
+
2178
+ msgid "Taxonomy term: "
2179
+ msgstr ""
2180
+
2181
+ msgid "is one of these"
2182
+ msgstr ""
2183
+
2184
+ msgid "set by the current page"
2185
+ msgstr ""
2186
+
2187
+ msgid "User field - %s"
2188
+ msgstr ""
2189
+
2190
+ msgid "%sLearn about filtering by user fields%s"
2191
+ msgstr ""
2192
+
2193
+ msgid "User field"
2194
+ msgstr ""
2195
+
2196
+ msgid "Select users with usermeta field: "
2197
+ msgstr ""
2198
+
2199
+ msgid "Usermeta field relationship:"
2200
+ msgstr ""
2201
+
2202
+ msgid "Relationship to use when querying with multiple user fields:"
2203
+ msgstr ""
2204
+
2205
+ msgid "Specific users"
2206
+ msgstr ""
2207
+
2208
+ msgid "username"
2209
+ msgstr ""
2210
+
2211
+ msgid " and "
2212
+ msgstr ""
2213
+
2214
+ msgid " ordered by "
2215
+ msgstr ""
2216
+
2217
+ msgid ", limit to 1 item"
2218
+ msgstr ""
2219
+
2220
+ msgid ", limit to %d items"
2221
+ msgstr ""
2222
+
2223
+ msgid ", skip first item"
2224
+ msgstr ""
2225
+
2226
+ msgid ", skip %d items"
2227
+ msgstr ""
2228
+
2229
+ msgid "This View displays"
2230
+ msgstr ""
2231
+
2232
+ msgid "Users with this display name "
2233
+ msgstr ""
2234
+
2235
+ msgid "Users with "
2236
+ msgstr ""
2237
+
2238
+ msgid " set by this URL parameter: "
2239
+ msgstr ""
2240
+
2241
+ msgid " set by this View shortcode attribute: "
2242
+ msgstr ""
2243
+
2244
+ msgid "Type for search users"
2245
+ msgstr ""
2246
+
2247
+ msgid "No users matched your criteria"
2248
+ msgstr ""
2249
+
2250
+ msgid "Searching"
2251
+ msgstr ""
2252
+
2253
+ msgid "View updated."
2254
+ msgstr ""
2255
+
2256
+ msgid "Custom field updated."
2257
+ msgstr ""
2258
+
2259
+ msgid "Custom field deleted."
2260
+ msgstr ""
2261
+
2262
+ msgid "View restored to revision from %s"
2263
+ msgstr ""
2264
+
2265
+ msgid "View published."
2266
+ msgstr ""
2267
+
2268
+ msgid "View saved."
2269
+ msgstr ""
2270
+
2271
+ msgid "View submitted."
2272
+ msgstr ""
2273
+
2274
+ msgid "View scheduled for: <strong>%1$s</strong>."
2275
+ msgstr ""
2276
+
2277
+ msgid "M j, Y @ G:i"
2278
+ msgstr ""
2279
+
2280
+ msgid "View draft updated"
2281
+ msgstr ""
2282
+
2283
+ msgid "Content template updated."
2284
+ msgstr ""
2285
+
2286
+ msgid "Content template restored to revision from %s"
2287
+ msgstr ""
2288
+
2289
+ msgid "Content template published."
2290
+ msgstr ""
2291
+
2292
+ msgid "Content template saved."
2293
+ msgstr ""
2294
+
2295
+ msgid "Content template submitted."
2296
+ msgstr ""
2297
+
2298
+ msgid "Content template scheduled for: <strong>%1$s</strong>."
2299
+ msgstr ""
2300
+
2301
+ msgid "Content template draft updated"
2302
+ msgstr ""
2303
+
2304
+ msgid "Previous page"
2305
+ msgstr ""
2306
+
2307
+ msgid "Next page"
2308
+ msgstr ""
2309
+
2310
+ msgid "Unnamed View"
2311
+ msgstr ""
2312
+
2313
+ msgid "A View with that name already exists. Please use another name."
2314
+ msgstr ""
2315
+
2316
+ msgid "slide"
2317
+ msgstr ""
2318
+
2319
+ msgid "grid"
2320
+ msgstr ""
2321
+
2322
+ msgid "The View could not be created."
2323
+ msgstr ""
2324
+
2325
+ msgid "Displaying "
2326
+ msgstr ""
2327
+
2328
+ msgid " of "
2329
+ msgstr ""
2330
+
2331
+ msgid "Items per page"
2332
+ msgstr ""
2333
+
2334
+ msgid "Display all items"
2335
+ msgstr ""
2336
+
2337
+ msgid "Display 20 items per page"
2338
+ msgstr ""
2339
+
2340
+ msgid "<a href='%s' target='_blank'>Go to the Settings page &raquo;</a>"
2341
+ msgstr ""
2342
+
2343
+ msgid "Learn about different layouts"
2344
+ msgstr ""
2345
+
2346
+ msgid "Can't insert content in to shortcode"
2347
+ msgstr ""
2348
+
2349
+ msgid "Error occured"
2350
+ msgstr ""
2351
+
2352
+ msgid "Insert"
2353
+ msgstr ""
2354
+
2355
+ msgid "Next"
2356
+ msgstr ""
2357
+
2358
+ msgid "Insert a layout"
2359
+ msgstr ""
2360
+
2361
+ msgid "Layout style"
2362
+ msgstr ""
2363
+
2364
+ msgid "Choose fields"
2365
+ msgstr ""
2366
+
2367
+ msgid "Insert to the view"
2368
+ msgstr ""
2369
+
2370
+ msgid "Select the style of the layout to insert"
2371
+ msgstr ""
2372
+
2373
+ msgid "Unformatted"
2374
+ msgstr ""
2375
+
2376
+ msgid "Bootstrap grid"
2377
+ msgstr ""
2378
+
2379
+ msgid "You need to set the Bootstrap version used in your theme."
2380
+ msgstr ""
2381
+
2382
+ msgid "Table-based grid"
2383
+ msgstr ""
2384
+
2385
+ msgid "Table"
2386
+ msgstr ""
2387
+
2388
+ msgid "Unordered list"
2389
+ msgstr ""
2390
+
2391
+ msgid "Ordered list"
2392
+ msgstr ""
2393
+
2394
+ msgid "Bootstrap grid options"
2395
+ msgstr ""
2396
+
2397
+ msgid "Number of columns"
2398
+ msgstr ""
2399
+
2400
+ msgid "Add container"
2401
+ msgstr ""
2402
+
2403
+ msgid "Add .row class"
2404
+ msgstr ""
2405
+
2406
+ msgid "Compact HTML structure"
2407
+ msgstr ""
2408
+
2409
+ msgid "Detailed HTML structure"
2410
+ msgstr ""
2411
+
2412
+ msgid "Table-based grid options"
2413
+ msgstr ""
2414
+
2415
+ msgid "Table options"
2416
+ msgstr ""
2417
+
2418
+ msgid "Include field names in table headings"
2419
+ msgstr ""
2420
+
2421
+ msgid "Select the fields to include in the layout"
2422
+ msgstr ""
2423
+
2424
+ msgid "Add field"
2425
+ msgstr ""
2426
+
2427
+ msgid "Where do you want to insert this layout?"
2428
+ msgstr ""
2429
+
2430
+ msgid "In the current cursor position"
2431
+ msgstr ""
2432
+
2433
+ msgid "Replace existing layout"
2434
+ msgstr ""
2435
+
2436
+ msgid "Previous"
2437
+ msgstr ""
2438
+
2439
+ msgid "Next"
2440
+ msgstr ""
2441
+
2442
+ msgid "Insert a filter field"
2443
+ msgstr ""
2444
+
2445
+ msgid "Preview"
2446
+ msgstr ""
2447
+
2448
+ msgid "Select what to filter to see the preview here"
2449
+ msgstr ""
2450
+
2451
+ msgid "Defaults"
2452
+ msgstr ""
2453
+
2454
+ msgid "Select what to filter by :"
2455
+ msgstr ""
2456
+
2457
+ msgid "--- Please select ---"
2458
+ msgstr ""
2459
+
2460
+ msgid "Use this kind of input:"
2461
+ msgstr ""
2462
+
2463
+ msgid "Types ancestors:"
2464
+ msgstr ""
2465
+
2466
+ msgid "Checkbox label:"
2467
+ msgstr ""
2468
+
2469
+ msgid "When the checkbox is not checked:"
2470
+ msgstr ""
2471
+
2472
+ msgid "Return all results"
2473
+ msgstr ""
2474
+
2475
+ msgid "Return only results with this field unchecked"
2476
+ msgstr ""
2477
+
2478
+ msgid "Default label:"
2479
+ msgstr ""
2480
+
2481
+ msgid "Options for this input:"
2482
+ msgstr ""
2483
+
2484
+ msgid "Use existing custom field values"
2485
+ msgstr ""
2486
+
2487
+ msgid "Use manually entered values"
2488
+ msgstr ""
2489
+
2490
+ msgid "Values:"
2491
+ msgstr ""
2492
+
2493
+ msgid "Display values:"
2494
+ msgstr ""
2495
+
2496
+ msgid "Default value:"
2497
+ msgstr ""
2498
+
2499
+ msgid "Leave blank for no default"
2500
+ msgstr ""
2501
+
2502
+ msgid "Format of the options:"
2503
+ msgstr ""
2504
+
2505
+ msgid "You can use placeholders like %%NAME%% or %%COUNT%%"
2506
+ msgstr ""
2507
+
2508
+ msgid "Leave empty to display just the option name"
2509
+ msgstr ""
2510
+
2511
+ msgid "Sort values:"
2512
+ msgstr ""
2513
+
2514
+ msgid "Taxonomy order:"
2515
+ msgstr ""
2516
+
2517
+ msgid "Taxonomy order by:"
2518
+ msgstr ""
2519
+
2520
+ msgid "Hide empty terms:"
2521
+ msgstr ""
2522
+
2523
+ msgid "Do not show taxonomy terms with no posts attached"
2524
+ msgstr ""
2525
+
2526
+ msgid "Advanced:"
2527
+ msgstr ""
2528
+
2529
+ msgid "Refer to this field as:"
2530
+ msgstr ""
2531
+
2532
+ msgid "Compare this values as:"
2533
+ msgstr ""
2534
+
2535
+ msgid "Search results for \"%s\""
2536
+ msgstr ""
2537
+
2538
+ msgid "Search results for \"%s\" in trashed WordPress Archives"
2539
+ msgstr ""
2540
+
2541
+ msgid "Search WordPress Archives"
2542
+ msgstr ""
2543
+
2544
+ msgid "This WordPress Archive isn't being used for any loops."
2545
+ msgstr ""
2546
+
2547
+ msgid "No WordPress Archives in trash matched your criteria."
2548
+ msgstr ""
2549
+
2550
+ msgid "No WordPress Archives in trash."
2551
+ msgstr ""
2552
+
2553
+ msgid "No WordPress Archives matched your criteria."
2554
+ msgstr ""
2555
+
2556
+ msgid "WordPress Archives"
2557
+ msgstr ""
2558
+
2559
+ msgid "WordPress Archive moved to the Trash"
2560
+ msgstr ""
2561
+
2562
+ msgid "Undo"
2563
+ msgstr ""
2564
+
2565
+ msgid "WordPress Archive restored from the Trash"
2566
+ msgstr ""
2567
+
2568
+ msgid "WordPress Archive permanently deleted"
2569
+ msgstr ""
2570
+
2571
+ msgid "All loops have a WordPress Archive assigned"
2572
+ msgstr ""
2573
+
2574
+ msgid "Arrange by"
2575
+ msgstr ""
2576
+
2577
+ msgid "Usage"
2578
+ msgstr ""
2579
+
2580
+ msgid "WordPress Archives let you customize the output of standard Archive pages."
2581
+ msgstr ""
2582
+
2583
+ msgid "Create your first WordPress Archive"
2584
+ msgstr ""
2585
+
2586
+ msgid "Published"
2587
+ msgstr ""
2588
+
2589
+ msgid "Trash"
2590
+ msgstr ""
2591
+
2592
+ msgid "Archive usage"
2593
+ msgstr ""
2594
+
2595
+ msgid "Action"
2596
+ msgstr ""
2597
+
2598
+ msgid "Choose"
2599
+ msgstr ""
2600
+
2601
+ msgid "Change archive usage"
2602
+ msgstr ""
2603
+
2604
+ msgid "Move to trash"
2605
+ msgstr ""
2606
+
2607
+ msgid "Restore from trash"
2608
+ msgstr ""
2609
+
2610
+ msgid "Return"
2611
+ msgstr ""
2612
+
2613
+ msgid "Archive loop"
2614
+ msgstr ""
2615
+
2616
+ msgid "WordPress Archive used"
2617
+ msgstr ""
2618
+
2619
+ msgid "Used for"
2620
+ msgstr ""
2621
+
2622
+ msgid "Create a WordPres Archive for this loop"
2623
+ msgstr ""
2624
+
2625
+ msgid "Change"
2626
+ msgstr ""
2627
+
2628
+ msgid "Search results for \"%s\" in trashed Content Templates"
2629
+ msgstr ""
2630
+
2631
+ msgid "No Content Templates in trash matched your criteria."
2632
+ msgstr ""
2633
+
2634
+ msgid "No Content Templates matched your criteria."
2635
+ msgstr ""
2636
+
2637
+ msgid "No Content Templates in trash."
2638
+ msgstr ""
2639
+
2640
+ msgid "Enter new title"
2641
+ msgstr ""
2642
+
2643
+ msgid "There are %s single posts that are currently using this template."
2644
+ msgstr ""
2645
+
2646
+ msgid "Clear single %s"
2647
+ msgstr ""
2648
+
2649
+ msgid "There is no general Content Template asigned to single %s, but %s individual %s have a Content Template asigned to them."
2650
+ msgstr ""
2651
+
2652
+ msgid "Would you like to clear them?"
2653
+ msgstr ""
2654
+
2655
+ msgid " (single)"
2656
+ msgstr ""
2657
+
2658
+ msgid "Bind %u %s "
2659
+ msgstr ""
2660
+
2661
+ msgid "No Post types/Taxonomies assigned"
2662
+ msgstr ""
2663
+
2664
+ msgid "Content template for "
2665
+ msgstr ""
2666
+
2667
+ msgid "Create a Content Template for single %s"
2668
+ msgstr ""
2669
+
2670
+ msgid "Clear %d %s"
2671
+ msgstr ""
2672
+
2673
+ msgid "Add a new Content Template for this post type"
2674
+ msgstr ""
2675
+
2676
+ msgid "Add a new Content Template for this taxonomy"
2677
+ msgstr ""
2678
+
2679
+ msgid "Content Template moved to the Trash"
2680
+ msgstr ""
2681
+
2682
+ msgid "Content Template restored from the Trash"
2683
+ msgstr ""
2684
+
2685
+ msgid "Content Template permanently deleted"
2686
+ msgstr ""
2687
+
2688
+ msgid "Usage for single page"
2689
+ msgstr ""
2690
+
2691
+ msgid "Usage for custom post archives"
2692
+ msgstr ""
2693
+
2694
+ msgid "Usage for taxonomy archives"
2695
+ msgstr ""
2696
+
2697
+ msgid "Search Views:"
2698
+ msgstr ""
2699
+
2700
+ msgid "Content Templates let you design single pages."
2701
+ msgstr ""
2702
+
2703
+ msgid "Add new Content Template"
2704
+ msgstr ""
2705
+
2706
+ msgid "Used on"
2707
+ msgstr ""
2708
+
2709
+ msgid "Change template usage"
2710
+ msgstr ""
2711
+
2712
+ msgid "Duplicate"
2713
+ msgstr ""
2714
+
2715
+ msgid "Delete Content Template"
2716
+ msgstr ""
2717
+
2718
+ msgid "Are you sure you want to delete it?"
2719
+ msgstr ""
2720
+
2721
+ msgid "Duplicate Content Template"
2722
+ msgstr ""
2723
+
2724
+ msgid "Name this Content Template"
2725
+ msgstr ""
2726
+
2727
+ msgid "Enter name here"
2728
+ msgstr ""
2729
+
2730
+ msgid "Template used"
2731
+ msgstr ""
2732
+
2733
+ msgid "Change Content Template"
2734
+ msgstr ""
2735
+
2736
+ msgid "Content updated"
2737
+ msgstr ""
2738
+
2739
+ msgid "Content not saved"
2740
+ msgstr ""
2741
+
2742
+ msgid "Update"
2743
+ msgstr ""
2744
+
2745
+ msgid "Open CSS editor"
2746
+ msgstr ""
2747
+
2748
+ msgid "Close CSS editor"
2749
+ msgstr ""
2750
+
2751
+ msgid "Open JS editor"
2752
+ msgstr ""
2753
+
2754
+ msgid "Close JS editor"
2755
+ msgstr ""
2756
+
2757
+ msgid "Data updated"
2758
+ msgstr ""
2759
+
2760
+ msgid "Data not saved"
2761
+ msgstr ""
2762
+
2763
+ msgid "Filter by <strong>%s</strong>"
2764
+ msgstr ""
2765
+
2766
+ msgid "Your %s filters are using an internal \"OR\" kind of relationship, and dependant parametric search for that filters needs \"AND\" relationships."
2767
+ msgstr ""
2768
+
2769
+ msgid "Close advanced options"
2770
+ msgstr ""
2771
+
2772
+ msgid "Advanced options"
2773
+ msgstr ""
2774
+
2775
+ msgid "Pagination"
2776
+ msgstr ""
2777
+
2778
+ msgid "Parametric search settings"
2779
+ msgstr ""
2780
+
2781
+ msgid "Would you like to make this parametric search a dependant one?"
2782
+ msgstr ""
2783
+
2784
+ msgid "Insert submit button"
2785
+ msgstr ""
2786
+
2787
+ msgid "Create a reset button for this parametric search."
2788
+ msgstr ""
2789
+
2790
+ msgid "Insert clear form button"
2791
+ msgstr ""
2792
+
2793
+ msgid "Create a spinner container for this parametric search."
2794
+ msgstr ""
2795
+
2796
+ msgid "Container type:"
2797
+ msgstr ""
2798
+
2799
+ msgid "Division"
2800
+ msgstr ""
2801
+
2802
+ msgid "Paragraph"
2803
+ msgstr ""
2804
+
2805
+ msgid "Span"
2806
+ msgstr ""
2807
+
2808
+ msgid "Container classname:"
2809
+ msgstr ""
2810
+
2811
+ msgid "Spinner:"
2812
+ msgstr ""
2813
+
2814
+ msgid "Do not show the spinner"
2815
+ msgstr ""
2816
+
2817
+ msgid "Show the spinner before the text"
2818
+ msgstr ""
2819
+
2820
+ msgid "Show the spinner after the text"
2821
+ msgstr ""
2822
+
2823
+ msgid "Content:"
2824
+ msgstr ""
2825
+
2826
+ msgid "Insert spinner container"
2827
+ msgstr ""
2828
+
2829
+ msgid "Only Views listing posts can have parametric search inputs."
2830
+ msgstr ""
2831
+
2832
+ msgid "This View has some query filters that are missing from the form. Maybe you have removed them:"
2833
+ msgstr ""
2834
+
2835
+ msgid "Can they also be removed from the query filtering?"
2836
+ msgstr ""
2837
+
2838
+ msgid "Yes (recommended)"
2839
+ msgstr ""
2840
+
2841
+ msgid "No"
2842
+ msgstr ""
2843
+
2844
+ msgid "When to update the Views results"
2845
+ msgstr ""
2846
+
2847
+ msgid "Update the View results only when submitting the form"
2848
+ msgstr ""
2849
+
2850
+ msgid "Update the View results every time an input changes"
2851
+ msgstr ""
2852
+
2853
+ msgid "Which options to display in the form inputs"
2854
+ msgstr ""
2855
+
2856
+ msgid "Fix filters relationship"
2857
+ msgstr ""
2858
+
2859
+ msgid "Always show all values for inputs"
2860
+ msgstr ""
2861
+
2862
+ msgid "Show only available options for each input"
2863
+ msgstr ""
2864
+
2865
+ msgid "Choose if you want to hide or disable irrelevant options for inputs:"
2866
+ msgstr ""
2867
+
2868
+ msgid "Input type"
2869
+ msgstr ""
2870
+
2871
+ msgid "Disable / Hide"
2872
+ msgstr ""
2873
+
2874
+ msgid "Select dropdown"
2875
+ msgstr ""
2876
+
2877
+ msgid "Disable"
2878
+ msgstr ""
2879
+
2880
+ msgid "Multi-select"
2881
+ msgstr ""
2882
+
2883
+ msgid "Radio inputs"
2884
+ msgstr ""
2885
+
2886
+ msgid "Checkboxes"
2887
+ msgstr ""
2888
+
2889
+ msgid "Spinners settings"
2890
+ msgstr ""
2891
+
2892
+ msgid "You can display a spinner when the View results update"
2893
+ msgstr ""
2894
+
2895
+ msgid "No spinner graphics"
2896
+ msgstr ""
2897
+
2898
+ msgid "Custom spinner graphics"
2899
+ msgstr ""
2900
+
2901
+ msgid "Upload Image"
2902
+ msgstr ""
2903
+
2904
+ msgid "Built in Views spinner graphics"
2905
+ msgstr ""
2906
+
2907
+ msgid "Javascript settings"
2908
+ msgstr ""
2909
+
2910
+ msgid "You can execute the following javascript callbacks before and after the View results are updated."
2911
+ msgstr ""
2912
+
2913
+ msgid "Javascript function to execute before every AJAX update:"
2914
+ msgstr ""
2915
+
2916
+ msgid "Javascript function to execute after every AJAX update:"
2917
+ msgstr ""
2918
+
2919
+ msgid "Submit button settings"
2920
+ msgstr ""
2921
+
2922
+ msgid "When the parametric search updates the results on the fly, how should the submit button work?"
2923
+ msgstr ""
2924
+
2925
+ msgid "Submit the form without reloading the page"
2926
+ msgstr ""
2927
+
2928
+ msgid "Submit the form and reload the page"
2929
+ msgstr ""
2930
+
2931
+ msgid "Do not show this button"
2932
+ msgstr ""
2933
+
2934
+ msgid "There are no parametric search inputs in this View."
2935
+ msgstr ""
2936
+
2937
+ msgid "Learn more about parametric search"
2938
+ msgstr ""
2939
+
2940
+ msgid "Filter the results"
2941
+ msgstr ""
2942
+
2943
+ msgid "%sLearn about filtering by usermeta fields%s"
2944
+ msgstr ""
2945
+
2946
+ msgid "Add a filter"
2947
+ msgstr ""
2948
+
2949
+ msgid "Add another filter"
2950
+ msgstr ""
2951
+
2952
+ msgid "This field can not be empty"
2953
+ msgstr ""
2954
+
2955
+ msgid "Only lowercase letters, numbers, hyphens and underscores allowed as URL parameters"
2956
+ msgstr ""
2957
+
2958
+ msgid "Only lowercase letters and numbers allowed as shortcode attributes"
2959
+ msgstr ""
2960
+
2961
+ msgid "This is a word reserved by WordPress"
2962
+ msgstr ""
2963
+
2964
+ msgid "This is a word reserved by any of the ToolSet plugins"
2965
+ msgstr ""
2966
+
2967
+ msgid "There is a post type named like that"
2968
+ msgstr ""
2969
+
2970
+ msgid "There is a taxonomy named like that"
2971
+ msgstr ""
2972
+
2973
+ msgid "The posts you want to display are not hierarchical, so this filter will not work"
2974
+ msgstr ""
2975
+
2976
+ msgid "The taxonomy you want to display has changed, so this filter needs some action"
2977
+ msgstr ""
2978
+
2979
+ msgid "or %sEdit the filter and delete specific taxonomy filters%s"
2980
+ msgstr ""
2981
+
2982
+ msgid "or %sEdit the filter and delete specific custom field filters%s"
2983
+ msgstr ""
2984
+
2985
+ msgid "or %sEdit the filter and delete specific usermeta field filters%s"
2986
+ msgstr ""
2987
+
2988
+ msgid "Relationship to use when querying with multiple usermeta fields:"
2989
+ msgstr ""
2990
+
2991
+ msgid "Select what to filter by:"
2992
+ msgstr ""
2993
+
2994
+ msgid "Add filter"
2995
+ msgstr ""
2996
+
2997
+ msgid "Delete taxonomy filters"
2998
+ msgstr ""
2999
+
3000
+ msgid "There are more than one taxonomy filters. What would you like to do?"
3001
+ msgstr ""
3002
+
3003
+ msgid "Delete all taxonomy filters"
3004
+ msgstr ""
3005
+
3006
+ msgid "Delete custom field filters"
3007
+ msgstr ""
3008
+
3009
+ msgid "There are more than one custom field filters. What would you like to do?"
3010
+ msgstr ""
3011
+
3012
+ msgid "Delete all custom field filters"
3013
+ msgstr ""
3014
+
3015
+ msgid "Delete usermeta field filters"
3016
+ msgstr ""
3017
+
3018
+ msgid "There are more than one usermeta field filters. What would you like to do?"
3019
+ msgstr ""
3020
+
3021
+ msgid "Delete all usermeta field filters"
3022
+ msgstr ""
3023
+
3024
+ msgid "Aditional Javascript files"
3025
+ msgstr ""
3026
+
3027
+ msgid "Data saved"
3028
+ msgstr ""
3029
+
3030
+ msgid "Additional Javascript files"
3031
+ msgstr ""
3032
+
3033
+ msgid "Pointer header"
3034
+ msgstr ""
3035
+
3036
+ msgid "Tooltip content. Lorem ipsum dolor et umni der lanos"
3037
+ msgstr ""
3038
+
3039
+ msgid "Additional Javascript files to be loaded with this View (comma separated): "
3040
+ msgstr ""
3041
+
3042
+ msgid "Layout HTML/CSS/JS"
3043
+ msgstr ""
3044
+
3045
+ msgid "Content Template was successfully assigned to view."
3046
+ msgstr ""
3047
+
3048
+ msgid "This Content Template already assigned to this view."
3049
+ msgstr ""
3050
+
3051
+ msgid "Content Template was successfully unassigned from view."
3052
+ msgstr ""
3053
+
3054
+ msgid "Content Template was successfully updated."
3055
+ msgstr ""
3056
+
3057
+ msgid "No Content Templates assigned to this view"
3058
+ msgstr ""
3059
+
3060
+ msgid "There are no Content Templates for this View. You can add a Content Template using the Content Template button in the Layout editor tool bar."
3061
+ msgstr ""
3062
+
3063
+ msgid "A Content Template with that name already exists. Please use another name."
3064
+ msgstr ""
3065
+
3066
+ msgid "Remove this Content Template"
3067
+ msgstr ""
3068
+
3069
+ msgid "Limit and offset options updated"
3070
+ msgstr ""
3071
+
3072
+ msgid "Limit and offset options not saved"
3073
+ msgstr ""
3074
+
3075
+ msgid "Display "
3076
+ msgstr ""
3077
+
3078
+ msgid "No limit"
3079
+ msgstr ""
3080
+
3081
+ msgid "items "
3082
+ msgstr ""
3083
+
3084
+ msgid "Skip first"
3085
+ msgstr ""
3086
+
3087
+ msgid "items"
3088
+ msgstr ""
3089
+
3090
+ msgid "Loops selection"
3091
+ msgstr ""
3092
+
3093
+ msgid "Loop selection updated"
3094
+ msgstr ""
3095
+
3096
+ msgid "Loop selection not saved"
3097
+ msgstr ""
3098
+
3099
+ msgid "ID"
3100
+ msgstr ""
3101
+
3102
+ msgid "Count"
3103
+ msgstr ""
3104
+
3105
+ msgid "Name"
3106
+ msgstr ""
3107
+
3108
+ msgid "Slug"
3109
+ msgstr ""
3110
+
3111
+ msgid "Term_group"
3112
+ msgstr ""
3113
+
3114
+ msgid "None"
3115
+ msgstr ""
3116
+
3117
+ msgid "user login"
3118
+ msgstr ""
3119
+
3120
+ msgid "user id"
3121
+ msgstr ""
3122
+
3123
+ msgid "user name"
3124
+ msgstr ""
3125
+
3126
+ msgid "user display name"
3127
+ msgstr ""
3128
+
3129
+ msgid "user nicename"
3130
+ msgstr ""
3131
+
3132
+ msgid "user email"
3133
+ msgstr ""
3134
+
3135
+ msgid "user url"
3136
+ msgstr ""
3137
+
3138
+ msgid "user registered date"
3139
+ msgstr ""
3140
+
3141
+ msgid "user post count"
3142
+ msgstr ""
3143
+
3144
+ msgid "Sorting options updated"
3145
+ msgstr ""
3146
+
3147
+ msgid "Sorting options not saved"
3148
+ msgstr ""
3149
+
3150
+ msgid "Order by: "
3151
+ msgstr ""
3152
+
3153
+ msgid "Pagination and random ordering do not work together and would produce unexpected results. Please disable pagination or random ordering."
3154
+ msgstr ""
3155
+
3156
+ msgid "post id"
3157
+ msgstr ""
3158
+
3159
+ msgid "last modified"
3160
+ msgstr ""
3161
+
3162
+ msgid "Descending"
3163
+ msgstr ""
3164
+
3165
+ msgid "Ascending"
3166
+ msgstr ""
3167
+
3168
+ msgid "This is a preview"
3169
+ msgstr ""
3170
+
3171
+ msgid "Choose pagination control type"
3172
+ msgstr ""
3173
+
3174
+ msgid "Showing page"
3175
+ msgstr ""
3176
+
3177
+ msgid "Choose page"
3178
+ msgstr ""
3179
+
3180
+ msgid "of"
3181
+ msgstr ""
3182
+
3183
+ msgid "Pagination and Sliders settings"
3184
+ msgstr ""
3185
+
3186
+ msgid "Fade fast"
3187
+ msgstr ""
3188
+
3189
+ msgid "Fade slow"
3190
+ msgstr ""
3191
+
3192
+ msgid "Pagination settings updated"
3193
+ msgstr ""
3194
+
3195
+ msgid "Pagination settings not saved"
3196
+ msgstr ""
3197
+
3198
+ msgid "All query results will display."
3199
+ msgstr ""
3200
+
3201
+ msgid "Pagination enabled with manual transition"
3202
+ msgstr ""
3203
+
3204
+ msgid "The query results will display in pages, which visitors will switch."
3205
+ msgstr ""
3206
+
3207
+ msgid "Pagination enabled with automatic transition"
3208
+ msgstr ""
3209
+
3210
+ msgid "The query results will display in pages, which will switch automatically (good for sliders)."
3211
+ msgstr ""
3212
+
3213
+ msgid "Options for manual pagination"
3214
+ msgstr ""
3215
+
3216
+ msgid "Number of items per page:"
3217
+ msgstr ""
3218
+
3219
+ msgid "Pagination updates the entire page"
3220
+ msgstr ""
3221
+
3222
+ msgid "Pagination updates only the view (use AJAX)"
3223
+ msgstr ""
3224
+
3225
+ msgid "Transition effect:"
3226
+ msgstr ""
3227
+
3228
+ msgid "with duration"
3229
+ msgstr ""
3230
+
3231
+ msgid "miliseconds"
3232
+ msgstr ""
3233
+
3234
+ msgid "Please add a numeric value"
3235
+ msgstr ""
3236
+
3237
+ msgid "Preload images before transition"
3238
+ msgstr ""
3239
+
3240
+ msgid "Options for automatic pagination"
3241
+ msgstr ""
3242
+
3243
+ msgid "Show each page for:"
3244
+ msgstr ""
3245
+
3246
+ msgid "seconds"
3247
+ msgstr ""
3248
+
3249
+ msgid " <- Please add a numeric value"
3250
+ msgstr ""
3251
+
3252
+ msgid "Cache pages"
3253
+ msgstr ""
3254
+
3255
+ msgid "Pre-load the next and previous pages - avoids loading delays when users move between pages"
3256
+ msgstr ""
3257
+
3258
+ msgid "Pages to pre-load: "
3259
+ msgstr ""
3260
+
3261
+ msgid "Spinners"
3262
+ msgstr ""
3263
+
3264
+ msgid "Spinner graphics from Views"
3265
+ msgstr ""
3266
+
3267
+ msgid "My custom spinner graphics"
3268
+ msgstr ""
3269
+
3270
+ msgid "Callback function"
3271
+ msgstr ""
3272
+
3273
+ msgid "Javascript function to execute after the pagination transition has been completed:"
3274
+ msgstr ""
3275
+
3276
+ msgid "Would you like to insert transition controls for the pagination?"
3277
+ msgstr ""
3278
+
3279
+ msgid "Pagination controls"
3280
+ msgstr ""
3281
+
3282
+ msgid "Current page number"
3283
+ msgstr ""
3284
+
3285
+ msgid "Number of pages"
3286
+ msgstr ""
3287
+
3288
+ msgid "Page selector using"
3289
+ msgstr ""
3290
+
3291
+ msgid "dropdown"
3292
+ msgstr ""
3293
+
3294
+ msgid "links"
3295
+ msgstr ""
3296
+
3297
+ msgid "Next and previous page controls"
3298
+ msgstr ""
3299
+
3300
+ msgid "Pagination display"
3301
+ msgstr ""
3302
+
3303
+ msgid "Don't show pagination controls if there is only one page"
3304
+ msgstr ""
3305
+
3306
+ msgid "Insert pagination"
3307
+ msgstr ""
3308
+
3309
+ msgid "What pagination controls would you like to insert?"
3310
+ msgstr ""
3311
+
3312
+ msgid "Query options updated"
3313
+ msgstr ""
3314
+
3315
+ msgid "Query options not saved"
3316
+ msgstr ""
3317
+
3318
+ msgid "Don't include current page in query result"
3319
+ msgstr ""
3320
+
3321
+ msgid "Don't show empty terms"
3322
+ msgstr ""
3323
+
3324
+ msgid "Include terms that have non-empty descendants"
3325
+ msgstr ""
3326
+
3327
+ msgid "Include children in the post count"
3328
+ msgstr ""
3329
+
3330
+ msgid "Don't show current logged user."
3331
+ msgstr ""
3332
+
3333
+ msgid "Content selection updated"
3334
+ msgstr ""
3335
+
3336
+ msgid "Content selection not saved"
3337
+ msgstr ""
3338
+
3339
+ msgid "This View will display:"
3340
+ msgstr ""
3341
+
3342
+ msgid "Post types"
3343
+ msgstr ""
3344
+
3345
+ msgid "Users"
3346
+ msgstr ""
3347
+
3348
+ msgid "Any role"
3349
+ msgstr ""
3350
+
3351
+ msgid "No post type has been selected, so this View will list posts of any type."
3352
+ msgstr ""
3353
+
3354
+ msgid "If this is not what you want to do, please select any post type from the checkboxes above."
3355
+ msgstr ""
3356
+
3357
+ msgid "No taxonomy has been selected, so this View will list nothing. Maybe the selected taxonomy no longer exists?"
3358
+ msgstr ""
3359
+
3360
+ msgid "Please select any of the available taxonomies from the list above."
3361
+ msgstr ""
3362
+
3363
+ msgid "Search results for \"%s\" in trashed Views"
3364
+ msgstr ""
3365
+
3366
+ msgid "Enter title here"
3367
+ msgstr ""
3368
+
3369
+ msgid "Now give this View a name"
3370
+ msgstr ""
3371
+
3372
+ msgid "No Views in trash matched your criteria."
3373
+ msgstr ""
3374
+
3375
+ msgid "No Views in trash."
3376
+ msgstr ""
3377
+
3378
+ msgid "No Views matched your criteria."
3379
+ msgstr ""
3380
+
3381
+ msgid "Add new View"
3382
+ msgstr ""
3383
+
3384
+ msgid "View moved to the Trash"
3385
+ msgstr ""
3386
+
3387
+ msgid "View restored from the Trash"
3388
+ msgstr ""
3389
+
3390
+ msgid "View permanently deleted"
3391
+ msgstr ""
3392
+
3393
+ msgid "Views load content from the database and display on the site."
3394
+ msgstr ""
3395
+
3396
+ msgid "Create your first View"
3397
+ msgstr ""
3398
+
3399
+ msgid "Add a new View"
3400
+ msgstr ""
3401
+
3402
+ msgid "A View loads content from the database and displays with your HTML."
3403
+ msgstr ""
3404
+
3405
+ msgid " What kind of display do you want to create?"
3406
+ msgstr ""
3407
+
3408
+ msgid "Display all results"
3409
+ msgstr ""
3410
+
3411
+ msgid "The View will output all the results returned from the query section."
3412
+ msgstr ""
3413
+
3414
+ msgid "Display the results with pagination"
3415
+ msgstr ""
3416
+
3417
+ msgid "The View will display the query results in pages."
3418
+ msgstr ""
3419
+
3420
+ msgid "Display the results as a slider"
3421
+ msgstr ""
3422
+
3423
+ msgid "The View will display the query results as slides."
3424
+ msgstr ""
3425
+
3426
+ msgid "Display the results as a parametric search"
3427
+ msgstr ""
3428
+
3429
+ msgid "Visitors will be able to search through your content using different search criteria."
3430
+ msgstr ""
3431
+
3432
+ msgid "Full custom display mode"
3433
+ msgstr ""
3434
+
3435
+ msgid "See all the View controls open and set up things manually.."
3436
+ msgstr ""
3437
+
3438
+ msgid "Name this View"
3439
+ msgstr ""
3440
+
3441
+ msgid "Create View"
3442
+ msgstr ""
3443
+
3444
+ msgid "Delete View"
3445
+ msgstr ""
3446
+
3447
+ msgid "Are you sure want delete this View? "
3448
+ msgstr ""
3449
+
3450
+ msgid "Please use the Scan button first to be sure that it is not used anywhere."
3451
+ msgstr ""
3452
+
3453
+ msgid "Duplicate View"
3454
+ msgstr ""
3455
+
3456
+ msgid "Scan"
3457
+ msgstr ""
3458
+
3459
+ msgid "Nothing found"
3460
+ msgstr ""
3461
+
3462
+ msgid "An Unexpected HTTP Error occurred during the API request."
3463
+ msgstr ""
3464
+
3465
+ msgid "An unknown error occurred."
3466
+ msgstr ""
3467
+
3468
+ msgid "No content templates found"
3469
+ msgstr ""
3470
+
3471
+ msgid "No content templates found in Trash"
3472
+ msgstr ""
3473
+
3474
+ msgid "Syntax Highlight On"
3475
+ msgstr ""
3476
+
3477
+ msgid "Syntax Highlight Off"
3478
+ msgstr ""
3479
+
3480
+ msgid "Content Template Settings"
3481
+ msgstr ""
3482
+
3483
+ msgid "Content Template CSS and JS"
3484
+ msgstr ""
3485
+
3486
+ msgid "Edit content template"
3487
+ msgstr ""
3488
+
3489
+ msgid "There are no Content Templates being used for single post types."
3490
+ msgstr ""
3491
+
3492
+ msgid "There are no Content Templates being used for post types in taxonomy archive loops."
3493
+ msgstr ""
3494
+
3495
+ msgid "%d %ss use a different template:"
3496
+ msgstr ""
3497
+
3498
+ msgid "Update all %ss now"
3499
+ msgstr ""
3500
+
3501
+ msgid "<span id=\"%s\">%d</span> %ss have updated to use this template."
3502
+ msgstr ""
3503
+
3504
+ msgid "All %s are using this template"
3505
+ msgstr ""
3506
+
3507
+ msgid "There are no %s"
3508
+ msgstr ""
3509
+
3510
+ msgid "There are no Content Templates being used for Taxonomy archive loops."
3511
+ msgstr ""
3512
+
3513
+ msgid "<strong>This template includes single-ended shortcodes</strong>. Please close all shortcodes to avoid processing errors. %sRead more%s"
3514
+ msgstr ""
3515
+
3516
+ msgid "Click to toggle"
3517
+ msgstr ""
3518
+
3519
+ msgid "All %ss were successfully updated"
3520
+ msgstr ""
3521
+
3522
+ msgid "This Content Template will display in the ‘content’ area of "
3523
+ msgstr ""
3524
+
3525
+ msgid " the content types you assign it to."
3526
+ msgstr ""
3527
+
3528
+ msgid "It starts empty and you should add fields to it. To add fields, click on the V icon below. You can add HTML and CSS to style the fields and design the page template."
3529
+ msgstr ""
3530
+
3531
+ msgid "Add description"
3532
+ msgstr ""
3533
+
3534
+ msgid "Describe this Content Template"
3535
+ msgstr ""
3536
+
3537
+ msgid "Here you can modify specific CSS and javascript to be used with this Content Template."
3538
+ msgstr ""
3539
+
3540
+ msgid "Open CSS editor"
3541
+ msgstr ""
3542
+
3543
+ msgid "CSS"
3544
+ msgstr ""
3545
+
3546
+ msgid "This is used to add custom CSS to a Content Template."
3547
+ msgstr ""
3548
+
3549
+ msgid "Close CSS editor"
3550
+ msgstr ""
3551
+
3552
+ msgid "Open JS editor"
3553
+ msgstr ""
3554
+
3555
+ msgid "JS"
3556
+ msgstr ""
3557
+
3558
+ msgid "This is used to add custom javascript to a Content Template."
3559
+ msgstr ""
3560
+
3561
+ msgid "Close JS editor"
3562
+ msgstr ""
3563
+
3564
+ msgid "Output mode"
3565
+ msgstr ""
3566
+
3567
+ msgid "Auto-insert paragraphs"
3568
+ msgstr ""
3569
+
3570
+ msgid "Manual paragraphs"
3571
+ msgstr ""
3572
+
3573
+ msgid "Automaticaly paragraph (Normal WordPress output) - add paragraphs an breaks and resolve shortcodes"
3574
+ msgstr ""
3575
+
3576
+ msgid "Manual paragraph (Raw output) - only resolve shortcodes without adding line breaks or paragraphs"
3577
+ msgstr ""
3578
+
3579
+ msgid "Note"
3580
+ msgstr ""
3581
+
3582
+ msgid "These settings are synced with the post in the origin language and you can't change them here. They can only be changed on the post in the original language."
3583
+ msgstr ""
3584
+
3585
+ msgid "Use this Content Template for:"
3586
+ msgstr ""
3587
+
3588
+ msgid "Editing instructions"
3589
+ msgstr ""
3590
+
3591
+ msgid "Theme support for Content Templates"
3592
+ msgstr ""
3593
+
3594
+ msgid "Content Templates modify the content when called from"
3595
+ msgstr ""
3596
+
3597
+ msgid "function. Some themes don't use"
3598
+ msgstr ""
3599
+
3600
+ msgid "function but define their own function."
3601
+ msgstr ""
3602
+
3603
+ msgid "If Content Templates don't work with your theme then you can enter the name of the function your theme uses here:"
3604
+ msgstr ""
3605
+
3606
+ msgid "Don't know the name of your theme function?"
3607
+ msgstr ""
3608
+
3609
+ msgid "Enable debugging and go to a page that should display a Content Template and Views will display the call function name."
3610
+ msgstr ""
3611
+
3612
+ msgid "Settings saved"
3613
+ msgstr ""
3614
+
3615
+ msgid "Translating with WPML"
3616
+ msgstr ""
3617
+
3618
+ msgid "Congratulations! You are running Views and WPML with the String Translation module, so you can easily translate everything."
3619
+ msgstr ""
3620
+
3621
+ msgid "To translate static texts, wrap them in <strong>[wpml-string][/wpml-string]</strong> shortcodes."
3622
+ msgstr ""
3623
+
3624
+ msgid "You are running Views and WPML, but missing the String Translation module."
3625
+ msgstr ""
3626
+
3627
+ msgid "The String Translation"
3628
+ msgstr ""
3629
+
3630
+ msgid "allows translating static texts in your Views and Content Templates."
3631
+ msgstr ""
3632
+
3633
+ msgid "How would you like to translate Content Templates?"
3634
+ msgstr ""
3635
+
3636
+ msgid "Use the same Content Templates for all languages"
3637
+ msgstr ""
3638
+
3639
+ msgid "Create different Content Templates for each language"
3640
+ msgstr ""
3641
+
3642
+ msgid "Need help?"
3643
+ msgstr ""
3644
+
3645
+ msgid "Translating Views and Content Templates with WPML"
3646
+ msgstr ""
3647
+
3648
+ msgid "For single:"
3649
+ msgstr ""
3650
+
3651
+ msgid "For archive loop:"
3652
+ msgstr ""
3653
+
3654
+ msgid "Post Types"
3655
+ msgstr ""
3656
+
3657
+ msgid "Use this Content Template (Single)"
3658
+ msgstr ""
3659
+
3660
+ msgid "Use this Content Template (Archive loop)"
3661
+ msgstr ""
3662
+
3663
+ msgid "Use this Content Template"
3664
+ msgstr ""
3665
+
3666
+ msgid "Single pages:"
3667
+ msgstr ""
3668
+
3669
+ msgid "Templates updated"
3670
+ msgstr ""
3671
+
3672
+ msgid "Post archives:"
3673
+ msgstr ""
3674
+
3675
+ msgid "There are no custom post types archives"
3676
+ msgstr ""
3677
+
3678
+ msgid "Taxonomy archives:"
3679
+ msgstr ""
3680
+
3681
+ msgid "<span style=\"color:red\">*</span> A different Content Template is already assigned to this item"
3682
+ msgstr ""
3683
+
3684
+ msgid "You can’t edit this View because it is in the Trash. Please restore it and try again."
3685
+ msgstr ""
3686
+
3687
+ msgid "Screen Options Tab"
3688
+ msgstr ""
3689
+
3690
+ msgid "The parametric search settings section has unsaved changes, so you can not hide it"
3691
+ msgstr ""
3692
+
3693
+ msgid "Pagination requires the Filter HTML section to be visible."
3694
+ msgstr ""
3695
+
3696
+ msgid "This section has unsaved changes, so you can not hide it"
3697
+ msgstr ""
3698
+
3699
+ msgid "Display Query section help"
3700
+ msgstr ""
3701
+
3702
+ msgid "Display Filter section help"
3703
+ msgstr ""
3704
+
3705
+ msgid "Display Layout section help"
3706
+ msgstr ""
3707
+
3708
+ msgid "View purpose"
3709
+ msgstr ""
3710
+
3711
+ msgid "All"
3712
+ msgstr ""
3713
+
3714
+ msgid "Slider"
3715
+ msgstr ""
3716
+
3717
+ msgid "Parametric"
3718
+ msgstr ""
3719
+
3720
+ msgid "Bootstrap Grid"
3721
+ msgstr ""
3722
+
3723
+ msgid "Full"
3724
+ msgstr ""
3725
+
3726
+ msgid "Note that those Screen Options are set per View."
3727
+ msgstr ""
3728
+
3729
+ msgid "Saved"
3730
+ msgstr ""
3731
+
3732
+ msgid "View saved"
3733
+ msgstr ""
3734
+
3735
+ msgid "View not saved"
3736
+ msgstr ""
3737
+
3738
+ msgid "View moved to trash"
3739
+ msgstr ""
3740
+
3741
+ msgid "View not moved to trash"
3742
+ msgstr ""
3743
+
3744
+ msgid "Title and description updated"
3745
+ msgstr ""
3746
+
3747
+ msgid "Title and description not saved"
3748
+ msgstr ""
3749
+
3750
+ msgid "Show on screen"
3751
+ msgstr ""
3752
+
3753
+ msgid "Query section"
3754
+ msgstr ""
3755
+
3756
+ msgid "Filter section"
3757
+ msgstr ""
3758
+
3759
+ msgid "Layout section"
3760
+ msgstr ""
3761
+
3762
+ msgid "Screen Options"
3763
+ msgstr ""
3764
+
3765
+ msgid "Return to the Layout"
3766
+ msgstr ""
3767
+
3768
+ msgid "Done editing this View?"
3769
+ msgstr ""
3770
+
3771
+ msgid "Close this window and return to the Layout"
3772
+ msgstr ""
3773
+
3774
+ msgid "Save all sections at once"
3775
+ msgstr ""
3776
+
3777
+ msgid "Enter title here"
3778
+ msgstr ""
3779
+
3780
+ msgid "Slug of this View"
3781
+ msgstr ""
3782
+
3783
+ msgid "Describe this View"
3784
+ msgstr ""
3785
+
3786
+ msgid "Done setting up this View?"
3787
+ msgstr ""
3788
+
3789
+ msgid "Taxonomy fields"
3790
+ msgstr ""
3791
+
3792
+ msgid "Using Content Template"
3793
+ msgstr ""
3794
+
3795
+ msgid "You can not leave the title empty."
3796
+ msgstr ""
3797
+
3798
+ msgid "You can not leave the slug empty."
3799
+ msgstr ""
3800
+
3801
+ msgid "The slug can only contain lowercase letters, numbers or dashes."
3802
+ msgstr ""
3803
+
3804
+ msgid "A %s with that name already exists. Please use another name."
3805
+ msgstr ""
3806
+
3807
+ msgid "A %s with that slug already exists. Please use another slug."
3808
+ msgstr ""
3809
+
3810
+ msgid "The View could not be created"
3811
+ msgstr ""
3812
+
3813
+ msgid "Slug not set in the AJAX call"
3814
+ msgstr ""
3815
+
3816
+ msgid "Single pages"
3817
+ msgstr ""
3818
+
3819
+ msgid "Post type archives"
3820
+ msgstr ""
3821
+
3822
+ msgid "Taxonomy archives"
3823
+ msgstr ""
3824
+
3825
+ msgid "Content template name"
3826
+ msgstr ""
3827
+
3828
+ msgid "Don’t use any Content Template for this Post Type"
3829
+ msgstr ""
3830
+
3831
+ msgid "Change Post Type"
3832
+ msgstr ""
3833
+
3834
+ msgid "Don’t use any Content Template for this Taxonomy"
3835
+ msgstr ""
3836
+
3837
+ msgid "Change Taxonomy"
3838
+ msgstr ""
3839
+
3840
+ msgid " use this content template. What do you want to do?"
3841
+ msgstr ""
3842
+
3843
+ msgid "Name of WordPress Archive for"
3844
+ msgstr ""
3845
+
3846
+ msgid "Select WordPress Archive For Loop"
3847
+ msgstr ""
3848
+
3849
+ msgid "Archive views"
3850
+ msgstr ""
3851
+
3852
+ msgid "Don't use a WordPress Archive for this loop"
3853
+ msgstr ""
3854
+
3855
+ msgid "What content will this template be for?"
3856
+ msgstr ""
3857
+
3858
+ msgid "Don't assign to any post type"
3859
+ msgstr ""
3860
+
3861
+ msgid "There are no single post types to assign Content Templates to"
3862
+ msgstr ""
3863
+
3864
+ msgid "There are no post type archives to assign Content Templates to"
3865
+ msgstr ""
3866
+
3867
+ msgid "There are no taxonomy archives to assign Content Templates to"
3868
+ msgstr ""
3869
+
3870
+ msgid "Create a template"
3871
+ msgstr ""
3872
+
3873
+ msgid "A Content Template that is already connected to this View"
3874
+ msgstr ""
3875
+
3876
+ msgid "Connect an existing Content template to this View"
3877
+ msgstr ""
3878
+
3879
+ msgid "Create a new Content Template for this View"
3880
+ msgstr ""
3881
+
3882
+ msgid "Insert shortcode to editor"
3883
+ msgstr ""
3884
+
3885
+ msgid "Add template"
3886
+ msgstr ""
3887
+
3888
+ msgid "Remove the Content Template from the view"
3889
+ msgstr ""
3890
+
3891
+ msgid "This will remove the link between your view and the Content Template. The Content Template will not be deleted."
3892
+ msgstr ""
3893
+
3894
+ msgid "Change Types"
3895
+ msgstr ""
3896
+
3897
+ msgid "Content template in use"
3898
+ msgstr ""
3899
+
3900
+ msgid "Choose a different content template for them: "
3901
+ msgstr ""
3902
+
3903
+ msgid "Select Content Template"
3904
+ msgstr ""
3905
+
3906
+ msgid "Don't use any content template for these items"
3907
+ msgstr ""
3908
+
3909
+ msgid "Ordered List"
3910
+ msgstr ""
3911
+
3912
+ msgid "Unordered List"
3913
+ msgstr ""
3914
+
3915
+ msgid "Grid"
3916
+ msgstr ""
3917
+
3918
+ msgid "Single view for "
3919
+ msgstr ""
3920
+
3921
+ msgid "Archive view for "
3922
+ msgstr ""
3923
+
3924
+ msgid "Loop view for "
3925
+ msgstr ""
3926
+
3927
+ msgid "This View displays results for an"
3928
+ msgstr ""
3929
+
3930
+ msgid "existing WordPress query"
3931
+ msgstr ""
3932
+
3933
+ msgid "No filters selected."
3934
+ msgstr ""
3935
+
3936
+ msgid "You attempted to edit a WordPress Archive that doesn&#8217;t exist. Perhaps it was deleted?"
3937
+ msgstr ""
3938
+
3939
+ msgid "You can’t edit this WordPress Archive because it is in the Trash. Please restore it and try again."
3940
+ msgstr ""
3941
+
3942
+ msgid "Edit WordPress Archive"
3943
+ msgstr ""
3944
+
3945
+ msgid "Edit Layouts Loop View"
3946
+ msgstr ""
3947
+
3948
+ msgid "Loop section"
3949
+ msgstr ""
3950
+
3951
+ msgid "Slug of this WordPress Archive"
3952
+ msgstr ""
3953
+
3954
+ msgid "The layout section styles the WordPress Archive output on the page."
3955
+ msgstr ""
3956
+
3957
+ msgid "The layout-style and fields that you selected generate meta HTML. This meta HTML includes shortcodes and HTML, which you can edit, to fully customize the appearance of this View's content output section."
3958
+ msgstr ""
3959
+
3960
+ msgid "Generate the new layout content"
3961
+ msgstr ""
3962
+
3963
+ msgid "dismiss"
3964
+ msgstr ""
3965
+
3966
+ msgid "The view layout settings will be copied from the original"
3967
+ msgstr ""
3968
+
3969
+ msgid "Using Content Template:"
3970
+ msgstr ""
3971
+
3972
+ msgid "Using Content template:"
3973
+ msgstr ""
3974
+
3975
+ msgid "Fields to include:"
3976
+ msgstr ""
3977
+
3978
+ msgid "Click on <strong>Add field</strong> to insert additional fields. Drag them to reorder, or delete fields that you don't need."
3979
+ msgstr ""
3980
+
3981
+ msgid "Click on <strong>Add field</strong> to insert fields to this View."
3982
+ msgstr ""
3983
+
3984
+ msgid "Prefix"
3985
+ msgstr ""
3986
+
3987
+ msgid "Row Title"
3988
+ msgstr ""
3989
+
3990
+ msgid "Suffix"
3991
+ msgstr ""
3992
+
3993
+ msgid "Want to add complex fields?"
3994
+ msgstr ""
3995
+
3996
+ msgid "Learn about using Content Templates to customize fields."
3997
+ msgstr ""
3998
+
3999
+ msgid "Want to display posts that belong to this taxonomy? Learn about %sinserting child Views to Taxonomy Views%s."
4000
+ msgstr ""
4001
+
4002
+ msgid "Are you sure you want to change the layout?"
4003
+ msgstr ""
4004
+
4005
+ msgid "It appears that you made modifications to the layout."
4006
+ msgstr ""
4007
+
4008
+ msgid " - Use to layout child taxonomy terms"
4009
+ msgstr ""
4010
+
4011
+ msgid " - Use to layout posts for the current taxonomy term"
4012
+ msgstr ""
4013
+
4014
+ msgid "This View selects Taxonomy of type %s"
4015
+ msgstr ""
4016
+
4017
+ msgid ", ordered by %s, %s"
4018
+ msgstr ""
4019
+
4020
+ msgid "Views Pagination"
4021
+ msgstr ""
4022
+
4023
+ msgid "Use as spinner image"
4024
+ msgstr ""
4025
+
4026
+ msgid "View/Edit Meta HTML"
4027
+ msgstr ""
4028
+
4029
+ msgid "<strong>Meta HTML</strong> - This is used to layout the posts found. It gets generated from the View Layout settings and can be modified to suit."
4030
+ msgstr ""
4031
+
4032
+ msgid "Changes can't be applied. It appears that you made manual modifications to the Meta HTML."
4033
+ msgstr ""
4034
+
4035
+ msgid "(your edits will be displayed and you can apply them again)"
4036
+ msgstr ""
4037
+
4038
+ msgid "<strong>Your edits are shown below:</strong>"
4039
+ msgstr ""
4040
+
4041
+ msgid "* These updates will take effect when you save the view."
4042
+ msgstr ""
4043
+
4044
+ msgid "Edit CSS"
4045
+ msgstr ""
4046
+
4047
+ msgid "<strong>CSS</strong> - This is used to add custom CSS to a View layout."
4048
+ msgstr ""
4049
+
4050
+ msgid "Edit JS"
4051
+ msgstr ""
4052
+
4053
+ msgid "<strong>JS</strong> - This is used to add custom javascript to a View layout."
4054
+ msgstr ""
4055
+
4056
+ msgid "Manage Media"
4057
+ msgstr ""
4058
+
4059
+ msgid "<strong>Media</strong> - This is used to add images to a View output."
4060
+ msgstr ""
4061
+
4062
+ msgid "Upload images"
4063
+ msgstr ""
4064
+
4065
+ msgid "Add Media"
4066
+ msgstr ""
4067
+
4068
+ msgid "Edit media items"
4069
+ msgstr ""
4070
+
4071
+ msgid "Edit media items"
4072
+ msgstr ""
4073
+
4074
+ msgid "Close Media manager"
4075
+ msgstr ""
4076
+
4077
+ msgid "Layout style:"
4078
+ msgstr ""
4079
+
4080
+ msgid "Layout the items using a HTML table"
4081
+ msgstr ""
4082
+
4083
+ msgid "Number of columns:"
4084
+ msgstr ""
4085
+
4086
+ msgid "Create a table of items with a column for each field"
4087
+ msgstr ""
4088
+
4089
+ msgid "Items are added to an ordered list"
4090
+ msgstr ""
4091
+
4092
+ msgid "Items are added to an unordered list"
4093
+ msgstr ""
4094
+
4095
+ msgid "* Views requires Types 1.0.2 or greater for best results when adding fields."
4096
+ msgstr ""
4097
+
4098
+ msgid "Log into <a href=\"%s\">your account</a> and go to <a href=\"%s\">affiliate settings</a> for details."
4099
+ msgstr ""
4100
+
4101
+ msgid "Views Import / Export"
4102
+ msgstr ""
4103
+
4104
+ msgid "Export Views, WordPress Archives and Content Templates"
4105
+ msgstr ""
4106
+
4107
+ msgid "Download all Views, WordPress Archives and Content Templates"
4108
+ msgstr ""
4109
+
4110
+ msgid "When importing to theme:"
4111
+ msgstr ""
4112
+
4113
+ msgid "ask user for approval"
4114
+ msgstr ""
4115
+
4116
+ msgid "import automatically"
4117
+ msgstr ""
4118
+
4119
+ msgid "Affiliate details for theme designers:"
4120
+ msgstr ""
4121
+
4122
+ msgid "Affiliate ID:"
4123
+ msgstr ""
4124
+
4125
+ msgid "Affiliate Key:"
4126
+ msgstr ""
4127
+
4128
+ msgid "You only need to enter affiliate settings if you are a theme designer and want to receive affiliate commission."
4129
+ msgstr ""
4130
+
4131
+ msgid "Filter"
4132
+ msgstr ""
4133
+
4134
+ msgid "This View displays results for an <strong>existing WordPress query</strong>"
4135
+ msgstr ""
4136
+
4137
+ msgid "How this Content Template is used"
4138
+ msgstr ""
4139
+
4140
+ msgid "Fields used"
4141
+ msgstr ""
4142
+
4143
+ msgid "Import/Export"
4144
+ msgstr ""
4145
+
4146
+ msgid "Help"
4147
+ msgstr ""
4148
+
4149
+ msgid "Use <strong>Content Templates</strong> to design single pages in your site. "
4150
+ msgstr ""
4151
+
4152
+ msgid "This page lists the <strong>Content Templates</strong> that you have created and allows you to create new ones."
4153
+ msgstr ""
4154
+
4155
+ msgid "The ‘arrange by’ line, at the top of the page, lets you list the <strong>Content Templates</strong> by their name or by how they are used in the site."
4156
+ msgstr ""
4157
+
4158
+ msgid "Click on the name of a Content Template to edit it or create new <strong>Content Templates</strong> using the ‘Add’ buttons."
4159
+ msgstr ""
4160
+
4161
+ msgid "Content Templates online help"
4162
+ msgstr ""
4163
+
4164
+ msgid "<strong>Content Templates</strong> let you design single pages in your site."
4165
+ msgstr ""
4166
+
4167
+ msgid "To Create a <strong>Content Template</strong>:"
4168
+ msgstr ""
4169
+
4170
+ msgid "Set the title."
4171
+ msgstr ""
4172
+
4173
+ msgid "Add fields to the body. Use the V icon to insert basic fields, custom fields, taxonomy and Views. If you are using CRED, use the C icon to insert CRED forms."
4174
+ msgstr ""
4175
+
4176
+ msgid "Style the output by adding HTML around shortcodes."
4177
+ msgstr ""
4178
+
4179
+ msgid "Use <strong>Views</strong> to load content from the database and display it anyway you choose."
4180
+ msgstr ""
4181
+
4182
+ msgid "This page lists the <strong>Views</strong> in your site. Under ‘actions’, you will find ‘duplicate’ and ‘delete’ for Views."
4183
+ msgstr ""
4184
+
4185
+ msgid "Click on a <strong>Views</strong> name to edit it or create new Views."
4186
+ msgstr ""
4187
+
4188
+ msgid "Views online help"
4189
+ msgstr ""
4190
+
4191
+ msgid "Use <strong>WordPress Archives</strong> to style and design standard listing and archive pages."
4192
+ msgstr ""
4193
+
4194
+ msgid "This page lists the <strong>WordPress Archives</strong> in your site."
4195
+ msgstr ""
4196
+
4197
+ msgid "The ‘arrange by’ line, at the top of the page, lets you list the <strong>WordPress Archives</strong> by their name or by how they are used in the site."
4198
+ msgstr ""
4199
+
4200
+ msgid "Click on the name of a <strong>WordPress Archives</strong> to edit it or create new WordPress Archives using the ‘Add’ buttons."
4201
+ msgstr ""
4202
+
4203
+ msgid "WordPress Archives online help"
4204
+ msgstr ""
4205
+
4206
+ msgid "Use <strong>Views</strong> to filter and display lists in complex and interesting ways. Read more about Views in our user guide:"
4207
+ msgstr ""
4208
+
4209
+ msgid "This page gives you an overview of the Views you have created."
4210
+ msgstr ""
4211
+
4212
+ msgid "It has the following options:"
4213
+ msgstr ""
4214
+
4215
+ msgid "<strong>Add New</strong>: Add a New View"
4216
+ msgstr ""
4217
+
4218
+ msgid "If you hover over a View's name you also have these options:"
4219
+ msgstr ""
4220
+
4221
+ msgid "<strong>Edit</strong>: Click to edit the View<br />\n"
4222
+ msgstr ""
4223
+
4224
+ msgid "<strong>Quick Edit</strong>: click to get quick editing options for the View, such as title, slug and date"
4225
+ msgstr ""
4226
+
4227
+ msgid "<strong>Trash</strong>: Move the View to Trash"
4228
+ msgstr ""
4229
+
4230
+ msgid "If you need additional help with Content Templates you can visit our <a href='%s' target='_blank'>support forum &raquo;</a>."
4231
+ msgstr ""
4232
+
4233
+ msgid "<strong>WordPress Archives</strong> let you style and design standard listing and archive pages."
4234
+ msgstr ""
4235
+
4236
+ msgid "To create a <strong>WordPress Archive</strong>:"
4237
+ msgstr ""
4238
+
4239
+ msgid "Set the title"
4240
+ msgstr ""
4241
+
4242
+ msgid "Select on which listing pages it displays"
4243
+ msgstr ""
4244
+
4245
+ msgid "Design the output for the View by inserting fields and styling with HTML"
4246
+ msgstr ""
4247
+
4248
+ msgid "<strong>Views</strong> load content from the database and display it anyway you choose."
4249
+ msgstr ""
4250
+
4251
+ msgid "To make it easier to use Views, we’ve created different preset usage modes for <strong>Views</strong>. Each usage mode emphasizes the features that you need and hides the ones that are not needed."
4252
+ msgstr ""
4253
+
4254
+ msgid "You can switch between the different <strong>Views</strong> usage mode by opening the ‘Screen options’ tab."
4255
+ msgstr ""
4256
+
4257
+ msgid "To create a <strong>View</strong>:"
4258
+ msgstr ""
4259
+
4260
+ msgid "Select the content to load"
4261
+ msgstr ""
4262
+
4263
+ msgid "Optionally, apply a filter to the query"
4264
+ msgstr ""
4265
+
4266
+ msgid "If needed, enable pagination and front-end filters"
4267
+ msgstr ""
4268
+
4269
+ msgid "When you are done, remember to add the <strong>View</strong> to your content. You can do that by inserting the <strong>View</strong> as a shortcode to content or displaying it as a widget."
4270
+ msgstr ""
4271
+
4272
+ msgid "This View was not saved correctly. You may need to increase the number of post variables allowed in PHP. <a href=\"%s\">How to increase max_post_vars setting</a>."
4273
+ msgstr ""
4274
+
4275
+ msgid "Views sync"
4276
+ msgstr ""
4277
+
4278
+ msgid "Duplicate view from original"
4279
+ msgstr ""
4280
+
4281
+ msgid "Duplicate view to translations"
4282
+ msgstr ""
4283
+
4284
+ msgid "You can get the details in the <a href=\"%s\" title=\"Documentation on the shortcodes within shortcodes\">documentation page</a>."
4285
+ msgstr ""
4286
+
4287
+ msgid "You can get the details in the <a href=\"%s\" title=\"Documentation on the Views debug tool\">documentation page</a>."
4288
+ msgstr ""
4289
+
4290
+ msgid "You can get the details in the <a href=\"%s\" title=\"Documentation on the Views Maps plugin\">documentation page</a>."
4291
+ msgstr ""
4292
+
4293
+ msgid "Bootstrap version overriden by the Layouts plugin settings to use Bootstrap v.%s"
4294
+ msgstr ""
4295
+
4296
+ msgid "You can get the details in the <a href=\"%s\" title=\"Documentation on the Bootstrap Layouts\">documentation page</a>."
4297
+ msgstr ""
4298
+
4299
+ msgid "You can only use an image file here"
4300
+ msgstr ""
4301
+
4302
+ msgid "You need to place your cursor between the [wpv-filter-start] and the [wpv-filter-end] shortcodes"
4303
+ msgstr ""
4304
+
4305
+ msgid "You need to place your cursor between the [wpv-layout-start] and the [wpv-layout-end] shortcodes"
4306
+ msgstr ""
4307
+
4308
+ msgid "This is an optional placeholder to wrap the pagination shortcodes. The content of this shortcode will only be displayed if there is more than one page of results."
4309
+ msgstr ""
4310
+
4311
+ msgid "Displays the current page number"
4312
+ msgstr ""
4313
+
4314
+ msgid "Displays the maximum number of pages found by the Views Query."
4315
+ msgstr ""
4316
+
4317
+ msgid "Displays a pager with the current page selected. Depending on the value of the <em>style</em> parameter it displays a list of links to the other pages or a drop-down list to select another page."
4318
+ msgstr ""
4319
+
4320
+ msgid "Display a <em>Previous</em> link to move to the previous page."
4321
+ msgstr ""
4322
+
4323
+ msgid "Display a <em>Next</em> link to move to the next page."
4324
+ msgstr ""
4325
+
4326
+ msgid "Views Settings"
4327
+ msgstr ""
4328
+
4329
+ msgid "Third-party shortcode arguments"
4330
+ msgstr ""
4331
+
4332
+ msgid "List of custom and third-party shortcodes you want to be able to use as Views shortcode arguments."
4333
+ msgstr ""
4334
+
4335
+ msgid "For example, to support [wpv-post-title id=\"[my-custom-shortcode]\"] add <strong>my-custom-shortcode</strong> as a third-party shortcode argument below."
4336
+ msgstr ""
4337
+
4338
+ msgid "Shortcode name"
4339
+ msgstr ""
4340
+
4341
+ msgid "Add"
4342
+ msgstr ""
4343
+
4344
+ msgid "Only letters, numbers, underscores and dashes"
4345
+ msgstr ""
4346
+
4347
+ msgid "That shortcode already exists"
4348
+ msgstr ""
4349
+
4350
+ msgid "An error ocurred"
4351
+ msgstr ""
4352
+
4353
+ msgid "Debug mode"
4354
+ msgstr ""
4355
+
4356
+ msgid "Enabling Views debug will open a popup on every page showing a Views element."
4357
+ msgstr ""
4358
+
4359
+ msgid "This popup will show usefull information about the elements being displayed: time needed to render, memory used, shortcodes details..."
4360
+ msgstr ""
4361
+
4362
+ msgid "There are two modes: compact and full. Compact mode will give you an overview of the elements rendered. The full mode will display a complete report with all the object involved on the page."
4363
+ msgstr ""
4364
+
4365
+ msgid "Enable Views debug mode"
4366
+ msgstr ""
4367
+
4368
+ msgid "Compact debug mode"
4369
+ msgstr ""
4370
+
4371
+ msgid "Full debug mode"
4372
+ msgstr ""
4373
+
4374
+ msgid "Did a new window just open?"
4375
+ msgstr ""
4376
+
4377
+ msgid "Yes, it worked"
4378
+ msgstr ""
4379
+
4380
+ msgid "No, nothing opened"
4381
+ msgstr ""
4382
+
4383
+ msgid "Views debugger is ready for use. Thanks for checking it"
4384
+ msgstr ""
4385
+
4386
+ msgid "Seems like your browser is blocking popups. You should allow all popup windows from this site to use the Views debugger."
4387
+ msgstr ""
4388
+
4389
+ msgid "Please refer to the following links for documentation related to the most used browsers:"
4390
+ msgstr ""
4391
+
4392
+ msgid "Views debugger will need to open a popup window. Your browser may block it, so let's check that it's working for you."
4393
+ msgstr ""
4394
+
4395
+ msgid "Test the debugger window"
4396
+ msgstr ""
4397
+
4398
+ msgid "It's OK, skip this test"
4399
+ msgstr ""
4400
+
4401
+ msgid "Test debugger window"
4402
+ msgstr ""
4403
+
4404
+ msgid "It works!"
4405
+ msgstr ""
4406
+
4407
+ msgid "You can close this window and click 'Yes, it worked' in the Views settings page."
4408
+ msgstr ""
4409
+
4410
+ msgid "Map plugin"
4411
+ msgstr ""
4412
+
4413
+ msgid "Enabling Views Maps will add the Google Maps API and the Views Maps plugin to your site."
4414
+ msgstr ""
4415
+
4416
+ msgid "This will let you create maps on your site and use Views to plot WordPress posts on a Google Map."
4417
+ msgstr ""
4418
+
4419
+ msgid "Enable Views Map Plugin"
4420
+ msgstr ""
4421
+
4422
+ msgid "Frontend Edit Links"
4423
+ msgstr ""
4424
+
4425
+ msgid "You can enable/disable the edit links on the frontend for Views, Content Templates and WordPress Archives. Remember that the frontend edit links are only visible to administrators."
4426
+ msgstr ""
4427
+
4428
+ msgid "Enable edit links on the frontend"
4429
+ msgstr ""
4430
+
4431
+ msgid "Bootstrap Layouts"
4432
+ msgstr ""
4433
+
4434
+ msgid "You can set here the Bootstrap version that you want to use, based on the one <strong>provided by your theme</strong>. We will then generate the right markup in the Views Layouts Wizard when using the Bootstrap Grid option."
4435
+ msgstr ""
4436
+
4437
+ msgid "Bootstrap version not set"
4438
+ msgstr ""
4439
+
4440
+ msgid "Bootstrap v. 2.0"
4441
+ msgstr ""
4442
+
4443
+ msgid "Bootstrap v. 3.0"
4444
+ msgstr ""
4445
+
4446
+ msgid "Hidden custom fields"
4447
+ msgstr ""
4448
+
4449
+ msgid "The following private custom fields are showing in the Views GUI:"
4450
+ msgstr ""
4451
+
4452
+ msgid "No private custom fields are showing in the Views GUI."
4453
+ msgstr ""
4454
+
4455
+ msgid "Views Help"
4456
+ msgstr ""
4457
+
4458
+ msgid "Building Websites with Views"
4459
+ msgstr ""
4460
+
4461
+ msgid "Views plugin lets you design single pages, display content from the database and customize standard listing pages."
4462
+ msgstr ""
4463
+
4464
+ msgid "Here are the things that you can create with Views plugin:"
4465
+ msgstr ""
4466
+
4467
+ msgid "A View loads content from the database and displays it anyway you choose. Use Views to create content lists, sliders, parametric searches and more.\n"
4468
+ msgstr ""
4469
+
4470
+ msgid "Create a new View"
4471
+ msgstr ""
4472
+
4473
+ msgid "Content Templates let you design single pages using fields, taxonomy and HTML. With Content Templates, you can design the output for posts, pages and custom post types."
4474
+ msgstr ""
4475
+
4476
+ msgid "Create a new Content Template"
4477
+ msgstr ""
4478
+
4479
+ msgid "WordPress Archives let you customize standard listing pages. You will be able to customize the blog, custom post archives, taxonomy pages and other standard listing pages."
4480
+ msgstr ""
4481
+
4482
+ msgid "Create a new WordPress Archive"
4483
+ msgstr ""
4484
+
4485
+ msgid "Learning Views"
4486
+ msgstr ""
4487
+
4488
+ msgid "Views Training"
4489
+ msgstr ""
4490
+
4491
+ msgid "an interactive course that takes you through the basics and advanced features of Views."
4492
+ msgstr ""
4493
+
4494
+ msgid "Learn by building a real site, using sample data and step-by-step tutorials that we’ve prepared for you."
4495
+ msgstr ""
4496
+
4497
+ msgid "Views Documentation"
4498
+ msgstr ""
4499
+
4500
+ msgid "a complete reference library for everything in Views."
4501
+ msgstr ""
4502
+
4503
+ msgid "Support forum"
4504
+ msgstr ""
4505
+
4506
+ msgid "need any technical help? Our support staff are waiting for you in our forum."
4507
+ msgstr ""
4508
+
4509
+ msgid "Views subscription"
4510
+ msgstr ""
4511
+
4512
+ msgid "wp-types.com subscription email"
4513
+ msgstr ""
4514
+
4515
+ msgid "wp-types.com subscription key"
4516
+ msgstr ""
4517
+
4518
+ msgid "Save subscription details"
4519
+ msgstr ""
4520
+
4521
+ msgid "Saving. Please wait..."
4522
+ msgstr ""
4523
+
4524
+ msgid "Views 1.3.1 is compatible with Types version 1.4.0.2 or greater. Please update Types. | <a href=\"%1$s\">Dismiss</a>"
4525
+ msgstr ""
4526
+
4527
+ msgid "Views 1.3.1 is compatible with CRED version 1.2.3 or greater. Please update CRED. | <a href=\"%1$s\">Dismiss</a>"
4528
+ msgstr ""
embedded/toolset/toolset-common/localization/locale/views-ar.mo ADDED
Binary file
embedded/toolset/toolset-common/localization/locale/views-bg_BG.mo ADDED
Binary file
embedded/toolset/toolset-common/localization/locale/views-de_DE.mo ADDED
Binary file
embedded/toolset/toolset-common/localization/locale/views-el.mo ADDED
Binary file
embedded/toolset/toolset-common/localization/locale/views-es_ES.mo ADDED
Binary file
embedded/toolset/toolset-common/localization/locale/views-fr_FR.mo ADDED
Binary file
embedded/toolset/toolset-common/localization/locale/views-he_IL.mo ADDED
Binary file
embedded/toolset/toolset-common/localization/locale/views-it_IT.mo ADDED
Binary file
embedded/toolset/toolset-common/localization/locale/views-ja.mo ADDED
Binary file
embedded/toolset/toolset-common/localization/locale/views-ko_KR.mo ADDED
Binary file
embedded/toolset/toolset-common/localization/locale/views-nl_NL.mo ADDED
Binary file
embedded/toolset/toolset-common/localization/locale/views-pl_PL.mo ADDED
Binary file
embedded/toolset/toolset-common/localization/locale/views-pt_BR.mo ADDED
Binary file
embedded/toolset/toolset-common/localization/locale/views-pt_PT.mo ADDED
Binary file
embedded/toolset/toolset-common/localization/locale/views-ru_RU.mo ADDED
Binary file
embedded/toolset/toolset-common/localization/locale/views-sv_SE.mo ADDED
Binary file
embedded/toolset/toolset-common/localization/locale/views-uk.mo ADDED
Binary file
embedded/toolset/toolset-common/localization/locale/views-vi.mo ADDED
Binary file
embedded/toolset/toolset-common/localization/locale/views-zh_CN.mo ADDED
Binary file
embedded/toolset/toolset-common/localization/locale/views-zh_TW.mo ADDED
Binary file
embedded/toolset/toolset-common/localization/wpt-localization.php ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * wpt-localization.php
5
+ *
6
+ * Common localization for shared code on the Toolset and also common way for adding textdomains
7
+ *
8
+ * @since Jul 18 2014
9
+ */
10
+
11
+ if ( defined( 'WPT_LOCALIZATION' ) ) {
12
+ return;
13
+ }
14
+
15
+ define( 'WPT_LOCALIZATION', true );
16
+ define( 'WPT_LOCALIZATION_ABSPATH', dirname( __FILE__ ) . '/locale' );
17
+
18
+ /*
19
+ * WPToolset_Localization
20
+ *
21
+ * Methods for registering textdomains
22
+ *
23
+ */
24
+
25
+ class WPToolset_Localization {
26
+
27
+ /*
28
+ * @param $textdomain (string) the textdomain to use
29
+ * @param $path (string) the path to the folder containing the mo files
30
+ * @param $mo_file (string) the .mo file name, using %s as a placeholder for the locale - do not add the .mo extension!
31
+ */
32
+
33
+ function __construct( $textdomain = 'wpv-views', $path = WPT_LOCALIZATION_ABSPATH, $mo_name = 'views-%s' ) {
34
+ // Set instance properties
35
+ $this->textdomain = $textdomain;
36
+ $this->path = $path;
37
+ $this->mo_name = $mo_name;
38
+ $this->mo_processed_name = '';
39
+ // Set init action
40
+ add_action( 'init', array( $this, 'load_textdomain' ) );
41
+ }
42
+
43
+ /*
44
+ * load_textdomain
45
+ *
46
+ * Initializes localization given a textdomain, a path and a .mo file name
47
+ *
48
+ * @uses load_textdomain
49
+ *
50
+ * @since July 18, 2014
51
+ */
52
+
53
+ function load_textdomain() {
54
+ $locale = get_locale();
55
+ $this->mo_processed_name = sprintf( $this->mo_name, $locale );
56
+ load_textdomain( $this->textdomain, $this->path . '/' . $this->mo_processed_name . '.mo' );
57
+ }
58
+
59
+ }
60
+
61
+ new WPToolset_Localization();
embedded/toolset/toolset-common/readme.md ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ # Toolset Common
2
+
3
+ A collection of php, javascript and CSS libraries, utilities and models to be used with Toolsets plugins.
4
+
5
+ ## Install:
6
+
7
+ Fetch the toolset-common library using composer:
8
+
9
+ composer install --no-autoloader
embedded/toolset/toolset-common/res/css/colorbox.css ADDED
@@ -0,0 +1,88 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* -------- */
2
+ /* Colorbox */
3
+ /* -------- */
4
+
5
+ /* This file contains styles for default Colorbox elements only */
6
+ /* TODO: This file can be removed, we can load it from common */
7
+
8
+ body.disable-scrollbar {
9
+ overflow: hidden;
10
+ }
11
+
12
+ #colorbox,
13
+ #cboxOverlay,
14
+ #cboxWrapper {
15
+ position:absolute;
16
+ top:0;
17
+ left:0;
18
+ z-index:10000;
19
+ /* overflow:hidden;*/
20
+ }
21
+
22
+ #cboxOverlay {
23
+ position:fixed;
24
+ width:100%;
25
+ max-width: 100%;
26
+ height:100%;
27
+ background: #000;
28
+ }
29
+ #cboxMiddleLeft,
30
+ #cboxBottomLeft {
31
+ clear:left;
32
+ }
33
+ #cboxContent {
34
+ position:relative;
35
+ }
36
+ #cboxLoadedContent {
37
+ overflow:visible!important;
38
+ -webkit-overflow-scrolling: touch;
39
+ }
40
+ #cboxTitle {
41
+ margin:0;
42
+ }
43
+ #cboxLoadingOverlay,
44
+ #cboxLoadingGraphic {
45
+ position:absolute;
46
+ top:0;
47
+ left:0;
48
+ width:100%;
49
+ height:100%;
50
+ }
51
+ #cboxPrevious,
52
+ #cboxNext,
53
+ #cboxClose,
54
+ #cboxSlideshow {
55
+ cursor:pointer;
56
+ }
57
+ .cboxPhoto {
58
+ display:block;
59
+ float:left;
60
+ margin:auto;
61
+ max-width:none;
62
+ border:0;
63
+ -ms-interpolation-mode:bicubic;
64
+ }
65
+ .cboxIframe {
66
+ display:block;
67
+ width:100%;
68
+ height:100%;
69
+ border:0;
70
+ }
71
+ #colorbox,
72
+ #cboxContent,
73
+ #cboxLoadedContent {
74
+ -webkit-box-sizing:content-box;
75
+ -moz-box-sizing:content-box;
76
+ box-sizing:content-box;
77
+ }
78
+
79
+ .cboxIE #cboxTopLeft,
80
+ .cboxIE #cboxTopCenter,
81
+ .cboxIE #cboxTopRight,
82
+ .cboxIE #cboxBottomLeft,
83
+ .cboxIE #cboxBottomCenter,
84
+ .cboxIE #cboxBottomRight,
85
+ .cboxIE #cboxMiddleLeft,
86
+ .cboxIE #cboxMiddleRight {
87
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF,endColorstr=#00FFFFFF);
88
+ }
embedded/toolset/toolset-common/res/css/toolset-common.css ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* ----------------------------------------------------------------------------
2
+ Common styles for all the Toolset family
3
+ ---------------------------------------------------------------------------- */
4
+
5
+ /* ----------------------------------------------------------------------------
6
+ Toolset Primary Button Style - use with .button.button-primary-toolset classnames
7
+ ---------------------------------------------------------------------------- */
8
+
9
+ .wp-core-ui .button-primary-toolset {
10
+ background: #f6921e;
11
+ border-color: #EF6223;
12
+ -webkit-box-shadow: inset 0 1px 0 rgba(239, 239, 239, 0.5), 0 1px 0 rgba(0,0,0,.15);
13
+ box-shadow: inset 0 1px 0 rgba(239, 239, 239, 0.5), 0 1px 0 rgba(0,0,0,.15);
14
+ color: #fff !important;
15
+ text-decoration: none;
16
+ }
17
+
18
+ .wp-core-ui .button-primary-toolset.hover,
19
+ .wp-core-ui .button-primary-toolset:hover,
20
+ .wp-core-ui .button-primary-toolset.focus,
21
+ .wp-core-ui .button-primary-toolset:focus {
22
+ background: #EF6223;
23
+ border-color: #EF6223;
24
+ -webkit-box-shadow: inset 0 1px 0 rgba(239, 239, 239, 0.5);
25
+ box-shadow: inset 0 1px 0 rgba(239, 239, 239, 0.5);
26
+ color: #fff !important;
27
+ }
28
+
29
+ .wp-core-ui .button-primary-toolset.focus,
30
+ .wp-core-ui .button-primary-toolset:focus {
31
+ border-color: #EF6223;
32
+ -webkit-box-shadow: inset 0 1px 0 rgba(120,200,230,0.6), 1px 1px 2px rgba(0,0,0,0.4);
33
+ box-shadow: inset 0 1px 0 rgba(120,200,230,0.6), 1px 1px 2px rgba(0,0,0,0.4);
34
+ }
35
+
36
+ .wp-core-ui .button-primary-toolset.active,
37
+ .wp-core-ui .button-primary-toolset.active:hover,
38
+ .wp-core-ui .button-primary-toolset.active:focus,
39
+ .wp-core-ui .button-primary-toolset:active {
40
+ background: #f6921e;
41
+ border-color: #EF6223;
42
+ color: rgba(255,255,255,0.95);
43
+ -webkit-box-shadow: inset 0 1px 0 rgba(0,0,0,0.1);
44
+ box-shadow: inset 0 1px 0 rgba(0,0,0,0.1);
45
+ }
46
+
47
+ .wp-core-ui .button-primary-toolset[disabled],
48
+ .wp-core-ui .button-primary-toolset:disabled,
49
+ .wp-core-ui .button-primary-toolset.disabled {
50
+ color: #94cde7 !important;
51
+ background: #298cba !important;
52
+ border-color: #1b607f !important;
53
+ -webkit-box-shadow: none !important;
54
+ box-shadow: none !important;
55
+ text-shadow: 0 -1px 0 rgba(0,0,0,0.1) !important;
56
+ cursor: default;
57
+ }
58
+
59
+ /* ----------------------------------------------------------------------------
60
+ Generic CSS to be applied anywhere
61
+ ---------------------------------------------------------------------------- */
62
+ .padding-top-30{padding-top:30px;}
63
+
64
+ /* ----------------------------------------------------------------------------
65
+ Design with Toolset icon
66
+ ---------------------------------------------------------------------------- */
67
+ #wpadminbar ul#wp-admin-bar-root-default> li.toolset-edit-link { white-space: nowrap; }
68
+
69
+ #wpadminbar ul#wp-admin-bar-root-default> li.toolset-edit-link> a { position:relative; }
70
+ #wpadminbar ul#wp-admin-bar-root-default> li.toolset-edit-link> a:before {
71
+ font-family: "onthegosystems-icons"!important;
72
+ content: "\f11a";
73
+ top:2px;
74
+ }
embedded/toolset/toolset-common/res/css/toolset-menu-icon.css ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ a[href="admin.php?page=dd_layouts"] .wp-menu-image img{
2
+ position: relative;
3
+ top: -2px;
4
+ }
5
+
6
+ a[href="admin.php?page=types_access"] .wp-menu-image img{
7
+ position: relative;
8
+ top: -3px;
9
+ }
10
+
11
+ a[href="admin.php?page=wpcf-ctt"] .wp-menu-image img{
12
+ position: relative;
13
+ top: -2px;
14
+ }
15
+
16
+ a[href="admin.php?page=ModuleManager_Modules"] .wp-menu-image img{
17
+ position: relative;
18
+ top: -4px;
19
+ }
20
+
21
+ a[href="admin.php?page=CRED_Forms"] .wp-menu-image img{
22
+ position: relative;
23
+ top: -2px;
24
+ }
25
+
26
+ a[href="admin.php?page=views"] .wp-menu-image img{
27
+ position: relative;
28
+ top: -1px;
29
+ }
embedded/toolset/toolset-common/res/css/toolset-promotion.css ADDED
@@ -0,0 +1,164 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ .toolset-modal
3
+ {
4
+ font-family: "Open Sans";
5
+ font-size: 15px;
6
+ width: 550px;
7
+ background-color: #fff;
8
+ padding: 45px 0 20px 0;
9
+ position: relative;
10
+
11
+ -webkit-box-shadow: 5px 5px 15px 0px rgba(50, 50, 50, 0.38);
12
+ -moz-box-shadow: 5px 5px 15px 0px rgba(50, 50, 50, 0.38);
13
+ box-shadow: 5px 5px 15px 0px rgba(50, 50, 50, 0.38);
14
+
15
+ }
16
+
17
+ .toolset-modal h2
18
+ {
19
+ color: #fff;
20
+ position: relative;
21
+ background-color: #333;
22
+ padding: 10px 30px;
23
+ font-size: 24px;
24
+ line-height: 30px;
25
+ font-weight: 300;
26
+ margin: 0;
27
+ }
28
+
29
+ .toolset-modal .icon-toolset-logo
30
+ {
31
+ color: #f05a28;
32
+ position: absolute;
33
+ top: 6px;
34
+ left: 23px;
35
+ font-size: 53px;
36
+ background: transparent url(../images/toolset.promotion/toolset.png) no-repeat 7px 3px;
37
+ width: 55px;
38
+ height: 55px;
39
+ }
40
+
41
+ .toolset-modal .icon-toolset-logo:before
42
+ {
43
+ content: none;
44
+ display: none;
45
+ }
46
+
47
+ .toolset-modal ul:before
48
+ {
49
+ content: "";
50
+ display: table;
51
+ }
52
+
53
+ .toolset-modal .content
54
+ {
55
+ padding: 0 28px;
56
+ }
57
+
58
+ .toolset-modal ul
59
+ {
60
+ display: table-row;
61
+ }
62
+
63
+ .toolset-modal li:first-child
64
+ {
65
+ min-width: 75px;
66
+ }
67
+
68
+ .toolset-modal li:last-child
69
+ {
70
+ padding-right: 0;
71
+ min-width: 115px;
72
+ }
73
+
74
+ .toolset-modal li
75
+ ,.js-close-promotional-message
76
+ {
77
+ background: transparent url(../images/toolset.promotion/icons.png) no-repeat;
78
+ }
79
+
80
+ .toolset-modal li
81
+ {
82
+ display: table-cell;
83
+ font-size: 13px;
84
+ font-weight: 700;
85
+ height: 46px;
86
+ padding: 0 20px 0 38px;
87
+ }
88
+
89
+
90
+ .toolset-modal li.layout{background-position: 0 -65px}
91
+ .toolset-modal li.toolset-search{background-position: 0 -130px}
92
+ .toolset-modal li.list {background-position: 0 -195px}
93
+ .toolset-modal li.form {background-position: 0 -260px}
94
+ .toolset-modal li.more {background-position: 0 -325px}
95
+
96
+ .toolset-modal .full img
97
+ {
98
+ padding-bottom: 19px;
99
+ }
100
+
101
+ .toolset-modal .full
102
+ {
103
+ background: transparent url(../images/toolset.promotion/full.jpg) no-repeat;
104
+ padding-left: 298px;
105
+ min-height: 160px;
106
+ font-size: 15px;
107
+ margin: 10px 0 0 0;
108
+ }
109
+
110
+ .toolset-modal .icons
111
+ {
112
+ border: 1px solid #777;
113
+ border-width: 1px 0;
114
+ padding-top: 10px;
115
+ }
116
+
117
+ .toolset-modal .description
118
+ {
119
+ font-size: 13px;
120
+ color: #4d4d4d;
121
+ margin: 10px 0 20px 0;
122
+ }
123
+
124
+ .toolset-modal em
125
+ {
126
+ font-weight: 600;
127
+ }
128
+
129
+ .toolset-modal .button
130
+ {
131
+ padding: 10px 15px;
132
+ background-color: #f05a28;
133
+ color: #fff;
134
+ text-decoration: none;
135
+ margin-top: -10px;
136
+ height: auto;
137
+ font-size: 18px;
138
+ line-height: 1em;
139
+ }
140
+
141
+ .toolset-modal .learn
142
+ {
143
+ font-size: 15px;
144
+ color: #f05a28;
145
+ display: inline-block;
146
+ margin-left: 20px;
147
+ }
148
+
149
+ .ddl-dialogs-container
150
+ {
151
+ display: none;
152
+ }
153
+
154
+ .js-close-promotional-message
155
+ {
156
+ background-position: 0 -480px;
157
+ cursor: pointer;
158
+ display: block;
159
+ height: 20px;
160
+ position: absolute;
161
+ right: -10px;
162
+ top: -10px;
163
+ width: 20px;
164
+ }
embedded/toolset/toolset-common/res/css/wpv-wp-pointer.css ADDED
@@ -0,0 +1,4 @@
 
 
 
 
1
+ .wpv_wp_pointer_clear_ignores {
2
+ margin-top : 20px;
3
+ font-style : italic;
4
+ }
embedded/toolset/toolset-common/res/images/question.png ADDED
Binary file
embedded/toolset/toolset-common/res/images/toolset.promotion/full.jpg ADDED
Binary file
embedded/toolset/toolset-common/res/images/toolset.promotion/icons.png ADDED
Binary file
embedded/toolset/toolset-common/res/images/toolset.promotion/toolset.png ADDED
Binary file
embedded/toolset/toolset-common/res/js/jquery.colorbox-min.js ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ /*!
2
+ Colorbox v1.4.31 - 2013-09-25
3
+ jQuery lightbox and modal window plugin
4
+ (c) 2013 Jack Moore - http://www.jacklmoore.com/colorbox
5
+ license: http://www.opensource.org/licenses/mit-license.php
6
+ */
7
+ (function(e,t,i){function o(i,o,n){var r=t.createElement(i);return o&&(r.id=Z+o),n&&(r.style.cssText=n),e(r)}function n(){return i.innerHeight?i.innerHeight:e(i).height()}function r(e){var t=k.length,i=(z+e)%t;return 0>i?t+i:i}function h(e,t){return Math.round((/%/.test(e)?("x"===t?E.width():n())/100:1)*parseInt(e,10))}function s(e,t){return e.photo||e.photoRegex.test(t)}function l(e,t){return e.retinaUrl&&i.devicePixelRatio>1?t.replace(e.photoRegex,e.retinaSuffix):t}function a(e){"contains"in g[0]&&!g[0].contains(e.target)&&(e.stopPropagation(),g.focus())}function d(){var t,i=e.data(N,Y);null==i?(B=e.extend({},X),console&&console.log&&console.log("Error: cboxElement missing settings object")):B=e.extend({},i);for(t in B)e.isFunction(B[t])&&"on"!==t.slice(0,2)&&(B[t]=B[t].call(N));B.rel=B.rel||N.rel||e(N).data("rel")||"nofollow",B.href=B.href||e(N).attr("href"),B.title=B.title||N.title,"string"==typeof B.href&&(B.href=e.trim(B.href))}function c(i,o){e(t).trigger(i),st.trigger(i),e.isFunction(o)&&o.call(N)}function u(i){q||(N=i,d(),k=e(N),z=0,"nofollow"!==B.rel&&(k=e("."+et).filter(function(){var t,i=e.data(this,Y);return i&&(t=e(this).data("rel")||i.rel||this.rel),t===B.rel}),z=k.index(N),-1===z&&(k=k.add(N),z=k.length-1)),w.css({opacity:parseFloat(B.opacity),cursor:B.overlayClose?"pointer":"auto",visibility:"visible"}).show(),J&&g.add(w).removeClass(J),B.className&&g.add(w).addClass(B.className),J=B.className,B.closeButton?K.html(B.close).appendTo(y):K.appendTo("<div/>"),U||(U=$=!0,g.css({visibility:"hidden",display:"block"}),H=o(lt,"LoadedContent","width:0; height:0; overflow:hidden"),y.css({width:"",height:""}).append(H),O=x.height()+C.height()+y.outerHeight(!0)-y.height(),_=b.width()+T.width()+y.outerWidth(!0)-y.width(),D=H.outerHeight(!0),A=H.outerWidth(!0),B.w=h(B.initialWidth,"x"),B.h=h(B.initialHeight,"y"),H.css({width:"",height:B.h}),Q.position(),c(tt,B.onOpen),P.add(L).hide(),g.focus(),B.trapFocus&&t.addEventListener&&(t.addEventListener("focus",a,!0),st.one(rt,function(){t.removeEventListener("focus",a,!0)})),B.returnFocus&&st.one(rt,function(){e(N).focus()})),m())}function f(){!g&&t.body&&(V=!1,E=e(i),g=o(lt).attr({id:Y,"class":e.support.opacity===!1?Z+"IE":"",role:"dialog",tabindex:"-1"}).hide(),w=o(lt,"Overlay").hide(),F=e([o(lt,"LoadingOverlay")[0],o(lt,"LoadingGraphic")[0]]),v=o(lt,"Wrapper"),y=o(lt,"Content").append(L=o(lt,"Title"),S=o(lt,"Current"),I=e('<button type="button"/>').attr({id:Z+"Previous"}),R=e('<button type="button"/>').attr({id:Z+"Next"}),M=o("button","Slideshow"),F),K=e('<button type="button"/>').attr({id:Z+"Close"}),v.append(o(lt).append(o(lt,"TopLeft"),x=o(lt,"TopCenter"),o(lt,"TopRight")),o(lt,!1,"clear:left").append(b=o(lt,"MiddleLeft"),y,T=o(lt,"MiddleRight")),o(lt,!1,"clear:left").append(o(lt,"BottomLeft"),C=o(lt,"BottomCenter"),o(lt,"BottomRight"))).find("div div").css({"float":"left"}),W=o(lt,!1,"position:absolute; width:9999px; visibility:hidden; display:none"),P=R.add(I).add(S).add(M),e(t.body).append(w,g.append(v,W)))}function p(){function i(e){e.which>1||e.shiftKey||e.altKey||e.metaKey||e.ctrlKey||(e.preventDefault(),u(this))}return g?(V||(V=!0,R.click(function(){Q.next()}),I.click(function(){Q.prev()}),K.click(function(){Q.close()}),w.click(function(){B.overlayClose&&Q.close()}),e(t).bind("keydown."+Z,function(e){var t=e.keyCode;U&&B.escKey&&27===t&&(e.preventDefault(),Q.close()),U&&B.arrowKey&&k[1]&&!e.altKey&&(37===t?(e.preventDefault(),I.click()):39===t&&(e.preventDefault(),R.click()))}),e.isFunction(e.fn.on)?e(t).on("click."+Z,"."+et,i):e("."+et).live("click."+Z,i)),!0):!1}function m(){var n,r,a,u=Q.prep,f=++at;$=!0,j=!1,N=k[z],d(),c(ht),c(it,B.onLoad),B.h=B.height?h(B.height,"y")-D-O:B.innerHeight&&h(B.innerHeight,"y"),B.w=B.width?h(B.width,"x")-A-_:B.innerWidth&&h(B.innerWidth,"x"),B.mw=B.w,B.mh=B.h,B.maxWidth&&(B.mw=h(B.maxWidth,"x")-A-_,B.mw=B.w&&B.w<B.mw?B.w:B.mw),B.maxHeight&&(B.mh=h(B.maxHeight,"y")-D-O,B.mh=B.h&&B.h<B.mh?B.h:B.mh),n=B.href,G=setTimeout(function(){F.show()},100),B.inline?(a=o(lt).hide().insertBefore(e(n)[0]),st.one(ht,function(){a.replaceWith(H.children())}),u(e(n))):B.iframe?u(" "):B.html?u(B.html):s(B,n)?(n=l(B,n),j=t.createElement("img"),e(j).addClass(Z+"Photo").bind("error",function(){B.title=!1,u(o(lt,"Error").html(B.imgError))}).one("load",function(){var t;f===at&&(e.each(["alt","longdesc","aria-describedby"],function(t,i){var o=e(N).attr(i)||e(N).attr("data-"+i);o&&j.setAttribute(i,o)}),B.retinaImage&&i.devicePixelRatio>1&&(j.height=j.height/i.devicePixelRatio,j.width=j.width/i.devicePixelRatio),B.scalePhotos&&(r=function(){j.height-=j.height*t,j.width-=j.width*t},B.mw&&j.width>B.mw&&(t=(j.width-B.mw)/j.width,r()),B.mh&&j.height>B.mh&&(t=(j.height-B.mh)/j.height,r())),B.h&&(j.style.marginTop=Math.max(B.mh-j.height,0)/2+"px"),k[1]&&(B.loop||k[z+1])&&(j.style.cursor="pointer",j.onclick=function(){Q.next()}),j.style.width=j.width+"px",j.style.height=j.height+"px",setTimeout(function(){u(j)},1))}),setTimeout(function(){j.src=n},1)):n&&W.load(n,B.data,function(t,i){f===at&&u("error"===i?o(lt,"Error").html(B.xhrError):e(this).contents())})}var w,g,v,y,x,b,T,C,k,E,H,W,F,L,S,M,R,I,K,P,B,O,_,D,A,N,z,j,U,$,q,G,Q,J,V,X={html:!1,photo:!1,iframe:!1,inline:!1,transition:"elastic",speed:300,fadeOut:300,width:!1,initialWidth:"600",innerWidth:!1,maxWidth:!1,height:!1,initialHeight:"450",innerHeight:!1,maxHeight:!1,scalePhotos:!0,scrolling:!0,href:!1,title:!1,rel:!1,opacity:.9,preloading:!0,className:!1,overlayClose:!0,escKey:!0,arrowKey:!0,top:!1,bottom:!1,left:!1,right:!1,fixed:!1,data:void 0,closeButton:!0,fastIframe:!0,open:!1,reposition:!0,loop:!0,slideshow:!1,slideshowAuto:!0,slideshowSpeed:2500,slideshowStart:"start slideshow",slideshowStop:"stop slideshow",photoRegex:/\.(gif|png|jp(e|g|eg)|bmp|ico|webp)((#|\?).*)?$/i,retinaImage:!1,retinaUrl:!1,retinaSuffix:"@2x.$1",current:"image {current} of {total}",previous:"previous",next:"next",close:"close",xhrError:"This content failed to load.",imgError:"This image failed to load.",returnFocus:!0,trapFocus:!0,onOpen:!1,onLoad:!1,onComplete:!1,onCleanup:!1,onClosed:!1},Y="colorbox",Z="cbox",et=Z+"Element",tt=Z+"_open",it=Z+"_load",ot=Z+"_complete",nt=Z+"_cleanup",rt=Z+"_closed",ht=Z+"_purge",st=e("<a/>"),lt="div",at=0,dt={},ct=function(){function e(){clearTimeout(h)}function t(){(B.loop||k[z+1])&&(e(),h=setTimeout(Q.next,B.slideshowSpeed))}function i(){M.html(B.slideshowStop).unbind(l).one(l,o),st.bind(ot,t).bind(it,e),g.removeClass(s+"off").addClass(s+"on")}function o(){e(),st.unbind(ot,t).unbind(it,e),M.html(B.slideshowStart).unbind(l).one(l,function(){Q.next(),i()}),g.removeClass(s+"on").addClass(s+"off")}function n(){r=!1,M.hide(),e(),st.unbind(ot,t).unbind(it,e),g.removeClass(s+"off "+s+"on")}var r,h,s=Z+"Slideshow_",l="click."+Z;return function(){r?B.slideshow||(st.unbind(nt,n),n()):B.slideshow&&k[1]&&(r=!0,st.one(nt,n),B.slideshowAuto?i():o(),M.show())}}();e.colorbox||(e(f),Q=e.fn[Y]=e[Y]=function(t,i){var o=this;if(t=t||{},f(),p()){if(e.isFunction(o))o=e("<a/>"),t.open=!0;else if(!o[0])return o;i&&(t.onComplete=i),o.each(function(){e.data(this,Y,e.extend({},e.data(this,Y)||X,t))}).addClass(et),(e.isFunction(t.open)&&t.open.call(o)||t.open)&&u(o[0])}return o},Q.position=function(t,i){function o(){x[0].style.width=C[0].style.width=y[0].style.width=parseInt(g[0].style.width,10)-_+"px",y[0].style.height=b[0].style.height=T[0].style.height=parseInt(g[0].style.height,10)-O+"px"}var r,s,l,a=0,d=0,c=g.offset();if(E.unbind("resize."+Z),g.css({top:-9e4,left:-9e4}),s=E.scrollTop(),l=E.scrollLeft(),B.fixed?(c.top-=s,c.left-=l,g.css({position:"fixed"})):(a=s,d=l,g.css({position:"absolute"})),d+=B.right!==!1?Math.max(E.width()-B.w-A-_-h(B.right,"x"),0):B.left!==!1?h(B.left,"x"):Math.round(Math.max(E.width()-B.w-A-_,0)/2),a+=B.bottom!==!1?Math.max(n()-B.h-D-O-h(B.bottom,"y"),0):B.top!==!1?h(B.top,"y"):Math.round(Math.max(n()-B.h-D-O,0)/2),g.css({top:c.top,left:c.left,visibility:"visible"}),v[0].style.width=v[0].style.height="9999px",r={width:B.w+A+_,height:B.h+D+O,top:a,left:d},t){var u=0;e.each(r,function(e){return r[e]!==dt[e]?(u=t,void 0):void 0}),t=u}dt=r,t||g.css(r),g.dequeue().animate(r,{duration:t||0,complete:function(){o(),$=!1,v[0].style.width=B.w+A+_+"px",v[0].style.height=B.h+D+O+"px",B.reposition&&setTimeout(function(){E.bind("resize."+Z,Q.position)},1),i&&i()},step:o})},Q.resize=function(e){var t;U&&(e=e||{},e.width&&(B.w=h(e.width,"x")-A-_),e.innerWidth&&(B.w=h(e.innerWidth,"x")),H.css({width:B.w}),e.height&&(B.h=h(e.height,"y")-D-O),e.innerHeight&&(B.h=h(e.innerHeight,"y")),e.innerHeight||e.height||(t=H.scrollTop(),H.css({height:"auto"}),B.h=H.height()),H.css({height:B.h}),t&&H.scrollTop(t),Q.position("none"===B.transition?0:B.speed))},Q.prep=function(i){function n(){return B.w=B.w||H.width(),B.w=B.mw&&B.mw<B.w?B.mw:B.w,B.w}function h(){return B.h=B.h||H.height(),B.h=B.mh&&B.mh<B.h?B.mh:B.h,B.h}if(U){var a,d="none"===B.transition?0:B.speed;H.empty().remove(),H=o(lt,"LoadedContent").append(i),H.hide().appendTo(W.show()).css({width:n(),overflow:B.scrolling?"auto":"hidden"}).css({height:h()}).prependTo(y),W.hide(),e(j).css({"float":"none"}),a=function(){function i(){e.support.opacity===!1&&g[0].style.removeAttribute("filter")}var n,h,a=k.length,u="frameBorder",f="allowTransparency";U&&(h=function(){clearTimeout(G),F.hide(),c(ot,B.onComplete)},L.html(B.title).add(H).show(),a>1?("string"==typeof B.current&&S.html(B.current.replace("{current}",z+1).replace("{total}",a)).show(),R[B.loop||a-1>z?"show":"hide"]().html(B.next),I[B.loop||z?"show":"hide"]().html(B.previous),ct(),B.preloading&&e.each([r(-1),r(1)],function(){var i,o,n=k[this],r=e.data(n,Y);r&&r.href?(i=r.href,e.isFunction(i)&&(i=i.call(n))):i=e(n).attr("href"),i&&s(r,i)&&(i=l(r,i),o=t.createElement("img"),o.src=i)})):P.hide(),B.iframe?(n=o("iframe")[0],u in n&&(n[u]=0),f in n&&(n[f]="true"),B.scrolling||(n.scrolling="no"),e(n).attr({src:B.href,name:(new Date).getTime(),"class":Z+"Iframe",allowFullScreen:!0,webkitAllowFullScreen:!0,mozallowfullscreen:!0}).one("load",h).appendTo(H),st.one(ht,function(){n.src="//about:blank"}),B.fastIframe&&e(n).trigger("load")):h(),"fade"===B.transition?g.fadeTo(d,1,i):i())},"fade"===B.transition?g.fadeTo(d,0,function(){Q.position(0,a)}):Q.position(d,a)}},Q.next=function(){!$&&k[1]&&(B.loop||k[z+1])&&(z=r(1),u(k[z]))},Q.prev=function(){!$&&k[1]&&(B.loop||z)&&(z=r(-1),u(k[z]))},Q.close=function(){U&&!q&&(q=!0,U=!1,c(nt,B.onCleanup),E.unbind("."+Z),w.fadeTo(B.fadeOut||0,0),g.stop().fadeTo(B.fadeOut||0,0,function(){g.add(w).css({opacity:1,cursor:"auto"}).hide(),c(ht),H.empty().remove(),setTimeout(function(){q=!1,c(rt,B.onClosed)},1)}))},Q.remove=function(){g&&(g.stop(),e.colorbox.close(),g.stop().remove(),w.remove(),q=!1,g=null,e("."+et).removeData(Y).removeClass(et),e(t).unbind("click."+Z))},Q.element=function(){return e(N)},Q.settings=X)})(jQuery,document,window);
embedded/toolset/toolset-common/res/js/toolset-promotion.js ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ var Toolset_Promotion = Toolset_Promotion || {};
2
+
3
+ Toolset_Promotion = function($){
4
+ var self = this;
5
+
6
+ self.init = function(){
7
+ self.toolset_open_promotional_message();
8
+ };
9
+
10
+ self.toolset_open_promotional_message = function(){
11
+ var $el = $('.js-open-promotional-message')
12
+ , template = $('#js-buy-toolset-embedded-message').html()
13
+ , $container = $('#js-buy-toolset-embedded-message-wrap');
14
+
15
+ $container.html( _.template( template ) );
16
+
17
+ $(document).on('click', $el.selector, function(event){
18
+ event.preventDefault();
19
+ $.colorbox({
20
+ href: $container.selector,
21
+ inline: true,
22
+ open: true,
23
+ closeButton: false,
24
+ fixed: true,
25
+ top: false,
26
+ width:'554px',
27
+ onComplete: function() {
28
+
29
+ },
30
+ onCleanup: function() {
31
+
32
+ },
33
+ opacity: .2
34
+ });
35
+ })
36
+ $('.js-close-promotional-message').on('click', function(){
37
+ $.colorbox.close();
38
+ });
39
+ };
40
+
41
+ self.init();
42
+
43
+ };
44
+
45
+ ;(function($){
46
+ var toolset_promotion_message = new Toolset_Promotion($);
47
+ }(jQuery));
embedded/toolset/toolset-common/res/js/wpv-wp-pointer.js ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ function wpv_wp_pointer_ignore( option, nonce, value, id ) {
2
+
3
+ jQuery.ajaxSetup({async:false});
4
+ jQuery.post(ajaxurl, {
5
+ action: 'wpv_wp_pointer_set_ignore',
6
+ option: option,
7
+ wpv_nonce: nonce,
8
+ value: value
9
+ }, function(data) {
10
+ }
11
+ );
12
+
13
+ if (value == 'ignore') {
14
+ jQuery('#wpv_wp_pointer_clear_ignores_' + id).fadeIn();
15
+ }
16
+ }
17
+
embedded/toolset/toolset-common/toolset-forms/api.php ADDED
@@ -0,0 +1,93 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ *
5
+ *
6
+ */
7
+
8
+ function wptoolset_form( $form_id, $config = array() ){
9
+ global $wptoolset_forms;
10
+ $html = $wptoolset_forms->form( $form_id, $config );
11
+ return apply_filters( 'wptoolset_form', $html, $config );
12
+ }
13
+
14
+ function wptoolset_form_field( $form_id, $config, $value = array() ){
15
+ global $wptoolset_forms;
16
+ $html = $wptoolset_forms->field( $form_id, $config, $value );
17
+ return apply_filters( 'wptoolset_fieldform', $html, $config, $form_id );
18
+ }
19
+
20
+ //function wptoolset_form_field_edit( $form_id, $config ){
21
+ // global $wptoolset_forms;
22
+ // $html = $wptoolset_forms->fieldEdit( $form_id, $config );
23
+ // return apply_filters( 'wptoolset_fieldform_edit', $html, $config, $form_id );
24
+ //}
25
+
26
+ function wptoolset_form_validate_field( $form_id, $config, $value ){
27
+ global $wptoolset_forms;
28
+ return $wptoolset_forms->validate_field( $form_id, $config, $value );
29
+ }
30
+
31
+ function wptoolset_form_conditional_check( $config ){
32
+ global $wptoolset_forms;
33
+ return $wptoolset_forms->checkConditional( $config );
34
+ }
35
+
36
+ function wptoolset_form_add_conditional( $form_id, $config ){
37
+ global $wptoolset_forms;
38
+ return $wptoolset_forms->addConditional( $form_id, $config );
39
+ }
40
+
41
+ function wptoolset_form_filter_types_field( $field, $post_id = null, $_post_wpcf = array() ){
42
+ global $wptoolset_forms;
43
+ return $wptoolset_forms->filterTypesField( $field, $post_id, $_post_wpcf );
44
+ }
45
+
46
+ function wptoolset_form_field_add_filters( $type ){
47
+ global $wptoolset_forms;
48
+ $wptoolset_forms->addFieldFilters( $type );
49
+ }
50
+
51
+ function wptoolset_form_get_conditional_data( $post_id ){
52
+ global $wptoolset_forms;
53
+ return $wptoolset_forms->getConditionalData( $post_id );
54
+ }
55
+
56
+ function wptoolset_strtotime( $date, $format = null ){
57
+ global $wptoolset_forms;
58
+ return $wptoolset_forms->strtotime( $date, $format );
59
+ }
60
+
61
+ function wptoolset_timetodate( $timestamp, $format = null ){
62
+ global $wptoolset_forms;
63
+ return $wptoolset_forms->timetodate( $timestamp, $format );
64
+ }
65
+
66
+ /**
67
+ * wptoolset_esc_like
68
+ *
69
+ * In WordPress 4.0, like_escape() was deprecated, due to incorrect
70
+ * documentation and improper sanitization leading to a history of misuse
71
+ * To maintain compatibility with versions of WP before 4.0, we duplicate the
72
+ * logic of the replacement, wpdb::esc_like()
73
+ *
74
+ * @see wpdb::esc_like() for more details on proper use.
75
+ *
76
+ * @global object $wpdb
77
+ *
78
+ * @param string $text The raw text to be escaped.
79
+ * @return string Text in the form of a LIKE phrase. Not SQL safe. Run through
80
+ * wpdb::prepare() before use.
81
+ */
82
+ function wptoolset_esc_like( $like )
83
+ {
84
+ global $wpdb;
85
+ if ( method_exists( $wpdb, 'esc_like' ) ) {
86
+ return $wpdb->esc_like( $like );
87
+ }
88
+ if ( version_compare( get_bloginfo('version'), '4' ) < 0 ) {
89
+ return like_escape( $like );
90
+ }
91
+ return addcslashes( $like, '_%\\' );
92
+ }
93
+
embedded/toolset/toolset-common/toolset-forms/bootstrap.php ADDED
@@ -0,0 +1,309 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ *
5
+ *
6
+ */
7
+ require_once 'api.php';
8
+
9
+ define('WPTOOLSET_FORMS_VERSION', '0.1.1');
10
+ define('WPTOOLSET_FORMS_ABSPATH', dirname(__FILE__));
11
+
12
+ /**
13
+ * check we are as a embedded?
14
+ */
15
+ if (defined('WPCF_RUNNING_EMBEDDED') && WPCF_RUNNING_EMBEDDED) {
16
+ define('WPTOOLSET_FORMS_RELPATH', wpcf_get_file_url(__FILE__, false));
17
+ }
18
+ /**
19
+ * setup WPTOOLSET_FORMS_RELPATH for plugin
20
+ */
21
+ if (!defined('WPTOOLSET_FORMS_RELPATH')) {
22
+ define('WPTOOLSET_FORMS_RELPATH', plugins_url('', __FILE__));
23
+ }
24
+ if (!defined('WPTOOLSET_COMMON_PATH')) {
25
+ define('WPTOOLSET_COMMON_PATH', plugin_dir_path(__FILE__));
26
+ }
27
+
28
+ class WPToolset_Forms_Bootstrap {
29
+
30
+ private $__forms;
31
+
32
+ public final function __construct() {
33
+ // Custom conditinal AJAX check
34
+ add_action('wp_ajax_wptoolset_custom_conditional', array($this, 'ajaxCustomConditional'));
35
+
36
+ // Date conditinal AJAX check
37
+ add_action('wp_ajax_wptoolset_conditional', array($this, 'ajaxConditional'));
38
+
39
+ // Date extended localization AJAX callback
40
+ add_action('wp_ajax_wpt_localize_extended_date', array($this, 'wpt_localize_extended_date'));
41
+ add_action('wp_ajax_nopriv_wpt_localize_extended_date', array($this, 'wpt_localize_extended_date'));
42
+
43
+ // Taxonomy term suggest AJAX callback
44
+ add_action('wp_ajax_wpt_suggest_taxonomy_term', array($this, 'wpt_suggest_taxonomy_term'));
45
+ add_action('wp_ajax_nopriv_wpt_suggest_taxonomy_term', array($this, 'wpt_suggest_taxonomy_term'));
46
+
47
+ add_filter('sanitize_file_name', array($this, 'sanitize_file_name'));
48
+
49
+ add_filter('wptoolset_filter_wptoolset_repdrag_image', array($this, 'set_default_repdrag_image'), 10, 1);
50
+ /**
51
+ * common class for calendar
52
+ */
53
+ require_once WPTOOLSET_FORMS_ABSPATH . '/classes/class.date.scripts.php';
54
+ new WPToolset_Field_Date_Scripts();
55
+
56
+ add_action('pre_get_posts', array($this, 'pre_get_posts'));
57
+ }
58
+
59
+ // returns HTML
60
+ public function field($form_id, $config, $value) {
61
+ $form = $this->form($form_id, array());
62
+ return $form->metaform($config, $config['name'], $value);
63
+ }
64
+
65
+ // returns HTML
66
+ // public function fieldEdit($form_id, $config) {
67
+ // $form = $this->form( $form_id, array() );
68
+ // return $form->editform( $config );
69
+ // }
70
+
71
+ public function form($form_id, $config = array()) {
72
+ if (isset($this->__forms[$form_id])) {
73
+ return $this->__forms[$form_id];
74
+ }
75
+ require_once WPTOOLSET_FORMS_ABSPATH . '/classes/class.form_factory.php';
76
+ return $this->__forms[$form_id] = new FormFactory($form_id, $config);
77
+ }
78
+
79
+ public function validate_field($form_id, $config, $value) {
80
+ if (empty($config['validation'])) {
81
+ return true;
82
+ }
83
+ $form = $this->form($form_id, array());
84
+ return $form->validateField($config, $value);
85
+ }
86
+
87
+ public function ajaxCustomConditional() {
88
+ require_once WPTOOLSET_FORMS_ABSPATH . '/classes/class.conditional.php';
89
+ WPToolset_Forms_Conditional::ajaxCustomConditional();
90
+ }
91
+
92
+ public function checkConditional($config) {
93
+ if (empty($config['conditional'])) {
94
+ return true;
95
+ }
96
+ require_once WPTOOLSET_FORMS_ABSPATH . '/classes/class.conditional.php';
97
+ return WPToolset_Forms_Conditional::evaluate($config['conditional']);
98
+ }
99
+
100
+ public function addConditional($form_id, $config) {
101
+ $this->form($form_id)->addConditional($config);
102
+ }
103
+
104
+ public function ajaxConditional() {
105
+ $data = $_POST['conditions'];
106
+ $data['values'] = $_POST['values'];
107
+ echo $this->checkConditional(array('conditional' => $data));
108
+ die();
109
+ }
110
+
111
+ public function wpt_localize_extended_date() {
112
+ if (!isset($_POST['date'])) {
113
+ die();
114
+ }
115
+ $date = $_POST['date'];
116
+ $date_format = '';
117
+ if (isset($_POST['date-format'])) {
118
+ $date_format = $_POST['date-format'];
119
+ }
120
+ if ($date_format == '') {
121
+ $date_format = get_option('date_format');
122
+ }
123
+ $date = adodb_mktime(0, 0, 0, substr($date, 2, 2), substr($date, 0, 2), substr($date, 4, 4));
124
+ $date_format = str_replace('\\\\', '\\', $date_format);
125
+ echo json_encode(array('display' => adodb_date($date_format, $date), 'timestamp' => $date));
126
+ die();
127
+ }
128
+
129
+ /**
130
+ * wpt_suggest_taxonomy_term
131
+ *
132
+ * Renders the suggestions when adding new flat taxonomy terms on a CRED form
133
+ *
134
+ * Needs a non-empty q attribute and can take an optional non-empty taxonomy attribute on the $_REQUEST
135
+ *
136
+ * @since 1.5.0
137
+ */
138
+ public function wpt_suggest_taxonomy_term() {
139
+ if (
140
+ !isset($_REQUEST['q']) || $_REQUEST['q'] == ''
141
+ ) {
142
+ die();
143
+ }
144
+ global $wpdb;
145
+ $values_to_prepare = array();
146
+ if (function_exists("wpv_esc_like")) {
147
+ $term_name = '%' . wpv_esc_like($_REQUEST['q']) . '%';
148
+ } else {
149
+ if (function_exists("cred_wrap_esc_like")) {
150
+ $term_name = '%' . cred_wrap_esc_like($_REQUEST['q']) . '%';
151
+ }
152
+ }
153
+ $values_to_prepare[] = $term_name;
154
+
155
+ $tax_join = "";
156
+ $tax_where = "";
157
+ if (
158
+ isset($_REQUEST['taxonomy']) && $_REQUEST['taxonomy'] != ''
159
+ ) {
160
+ $tax_join = " JOIN {$wpdb->term_taxonomy} tt ON t.term_id = tt.term_id ";
161
+ $tax_where = " AND tt.taxonomy = %s ";
162
+ $values_to_prepare[] = $_REQUEST['taxonomy'];
163
+ }
164
+ //
165
+ $results = $wpdb->get_results(
166
+ $wpdb->prepare(
167
+ "SELECT name FROM {$wpdb->terms} t {$tax_join}
168
+ WHERE t.name LIKE %s
169
+ {$tax_where}
170
+ ORDER BY name DESC
171
+ LIMIT 5", $values_to_prepare
172
+ )
173
+ );
174
+ foreach ($results as $row) {
175
+ echo $row->name . "\n";
176
+ }
177
+
178
+ die();
179
+ }
180
+
181
+ public function filterTypesField($field, $post_id = null, $_post_wpcf = array()) {
182
+ require_once WPTOOLSET_FORMS_ABSPATH . '/classes/class.types.php';
183
+ return WPToolset_Types::filterField($field, $post_id, $_post_wpcf);
184
+ }
185
+
186
+ public function addFieldFilters($type) {
187
+ if ($class = $this->form('generic')->loadFieldClass($type)) {
188
+ call_user_func(array($class, 'addFilters'));
189
+ call_user_func(array($class, 'addActions'));
190
+ }
191
+ }
192
+
193
+ public function getConditionalData($form_id) {
194
+ return $this->form($form_id)->getConditionalClass()->getData();
195
+ }
196
+
197
+ public function strtotime($date, $format = null) {
198
+ require_once WPTOOLSET_FORMS_ABSPATH . '/classes/class.date.php';
199
+ return WPToolset_Field_Date::strtotime($date, $format);
200
+ }
201
+
202
+ public function timetodate($timestamp, $format = null) {
203
+ require_once WPTOOLSET_FORMS_ABSPATH . '/classes/class.date.php';
204
+ return WPToolset_Field_Date::timetodate($timestamp, $format);
205
+ }
206
+
207
+ public function sanitize_file_name($filename) {
208
+ /**
209
+ * replace german special characters
210
+ */
211
+ if( function_exists('mb_detect_encoding') ){
212
+ $encoding = mb_detect_encoding( $filename );
213
+
214
+ if( strpos( strtolower( $encoding ), 'utf' ) !== false ){
215
+ return $filename;
216
+ }
217
+ }
218
+
219
+
220
+ $de_from = array('ä', 'ö', 'ü', 'ß', 'Ä', 'Ö', 'Ü');
221
+ $de_to = array('ae', 'oe', 'ue', 'ss', 'Ae', 'Oe', 'Ue');
222
+ $filename = str_replace($de_from, $de_to, $filename);
223
+ /**
224
+ * replace polish special characters
225
+ */
226
+ $pl_from = array('ą', 'ć', 'ę', 'ł', 'ń', 'ó', 'ś', 'ź', 'ż', 'Ą', 'Ć', 'Ę', 'Ł', 'Ń', 'Ó', 'Ś', 'Ź', 'Ż');
227
+ $pl_to = array('a', 'c', 'e', 'l', 'n', 'o', 's', 'z', 'z', 'A', 'C', 'E', 'L', 'N', 'O', 'S', 'Z', 'Z');
228
+ $filename = str_replace($pl_from, $pl_to, $filename);
229
+ /**
230
+ * remove special characters
231
+ */
232
+ $filename = preg_replace('/[^A-Za-z0-9\._@]/', '-', $filename);
233
+ $filename = preg_replace('/%20/', '-', $filename);
234
+ return $filename;
235
+ }
236
+
237
+ public function set_default_repdrag_image($image) {
238
+ return WPTOOLSET_FORMS_RELPATH . '/images/move.png';
239
+ }
240
+
241
+ /**
242
+ * add custom post type to query when they use category or tags taxonomy.
243
+ */
244
+ public function pre_get_posts($query) {
245
+ if (is_admin()) {
246
+ return;
247
+ }
248
+ /**
249
+ * do that only for main query
250
+ */
251
+ if (!$query->is_main_query()) {
252
+ return;
253
+ }
254
+ $types_cpt = get_option('wpcf-custom-types');
255
+ if (!is_array($types_cpt) || empty($types_cpt)) {
256
+ return;
257
+ }
258
+ $cpt_to_add = array();
259
+ /**
260
+ * check category
261
+ */
262
+ if (is_category()) {
263
+ foreach ($types_cpt as $cpt_slug => $cpt) {
264
+ if (array_key_exists('taxonomies', $cpt) && is_array($cpt['taxonomies'])) {
265
+ foreach ($cpt['taxonomies'] as $tax_slug => $value) {
266
+ if ('category' == $tax_slug && $value) {
267
+ $cpt_to_add[] = $cpt_slug;
268
+ }
269
+ }
270
+ }
271
+ }
272
+ }
273
+ /**
274
+ * check tags
275
+ */
276
+ if (is_tag()) {
277
+ foreach ($types_cpt as $cpt_slug => $cpt) {
278
+ if (array_key_exists('taxonomies', $cpt) && is_array($cpt['taxonomies'])) {
279
+ foreach ($cpt['taxonomies'] as $tax_slug => $value) {
280
+ if ('post_tag' == $tax_slug && $value) {
281
+ $cpt_to_add[] = $cpt_slug;
282
+ }
283
+ }
284
+ }
285
+ }
286
+ }
287
+ /**
288
+ * change query if some CPT use this
289
+ */
290
+ if (!empty($cpt_to_add)) {
291
+ /**
292
+ * remeber if is empty, then is post
293
+ */
294
+ $current_types = $query->get('post_type');
295
+ if (empty($current_types)) {
296
+ $cpt_to_add[] = 'post';
297
+ } elseif (is_array($current_types)) {
298
+ $cpt_to_add = array_merge($current_types, $cpt_to_add);
299
+ } elseif (is_string($current_types)) {
300
+ $cpt_to_add[] = $current_types;
301
+ }
302
+ $query->set('post_type', $cpt_to_add);
303
+ }
304
+ return;
305
+ }
306
+
307
+ }
308
+
309
+ $GLOBALS['wptoolset_forms'] = new WPToolset_Forms_Bootstrap();
embedded/toolset/toolset-common/toolset-forms/classes/abstract.field.php ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ * Field Abstraction
5
+ * @author onTheGo System
6
+ *
7
+ */
8
+ abstract class FieldAbstract {
9
+ //global name of field
10
+ protected $_nameField;
11
+ //field config
12
+ protected $_data;
13
+ //config for enlimbo
14
+ protected $_metaform;
15
+
16
+ abstract public function init();
17
+ abstract public function set_nameField($nameField);
18
+ abstract public function get_nameField();
19
+ abstract public function set_data($data);
20
+ abstract public function get_data();
21
+ abstract public function set_metaform($metaform);
22
+ abstract public function get_metaform();
23
+
24
+ abstract public function getId();
25
+ abstract public function getName();
26
+ abstract public function getType();
27
+ abstract public function getValue();
28
+ abstract public function getAttr();
29
+ abstract public function getTitle();
30
+ abstract public function getDescription();
31
+ abstract public function getData();
32
+ abstract public function getValidationData();
33
+ abstract public function setValidationData($validation);
34
+ }
embedded/toolset/toolset-common/toolset-forms/classes/abstract.form.php ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ abstract class FormAbstract {
4
+ /*
5
+ * Create and return form as string
6
+ */
7
+ abstract public function createForm($nameForm);
8
+ /*
9
+ * Create and display form
10
+ */
11
+ abstract public function displayForm($nameForm);
12
+ /*
13
+ * Check id forms
14
+ */
15
+ abstract public function formNameExists(&$nameForm);
16
+ /*
17
+ * Get Field Object from type
18
+ */
19
+ abstract public function getFieldObject($data, $global_name_field, $value);
20
+ /*
21
+ * Add field to a form
22
+ */
23
+ abstract public function addFormField($data);
24
+ /*
25
+ * Loads field (queue script and styles)
26
+ */
27
+ abstract public function loadField( $data, $global_name_field, $value );
28
+ /*
29
+ * Single field form (not added to form fields)
30
+ */
31
+ abstract public function metaform( $config, $global_name_field, $value );
32
+ /*
33
+ * Single field edit form (not added to form fields)
34
+ */
35
+ // abstract public function editform( $config );
36
+ /*
37
+ * Checks if validation is required and inits it per form
38
+ */
39
+ abstract protected function _checkValidation( $config );
40
+ /*
41
+ * checkConditional
42
+ */
43
+ abstract protected function _checkConditional( $config );
44
+ /*
45
+ * repetitive
46
+ */
47
+ abstract protected function _repetitive();
48
+ }
embedded/toolset/toolset-common/toolset-forms/classes/class.audio.php ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ require_once 'class.file.php';
3
+
4
+ /**
5
+ * Description of class
6
+ *
7
+ * @author Srdjan
8
+ *
9
+ *
10
+ */
11
+ class WPToolset_Field_Audio extends WPToolset_Field_File
12
+ {
13
+ protected $_settings = array('min_wp_version' => '3.6');
14
+
15
+ public function metaform()
16
+ {
17
+ $validation = $this->getValidationData();
18
+ $validation = self::addTypeValidation($validation);
19
+ $this->setValidationData($validation);
20
+ return parent::metaform();
21
+ }
22
+
23
+ public static function addTypeValidation($validation) {
24
+ $validation['extension'] = array(
25
+ 'args' => array(
26
+ 'extension',
27
+ '16svx|2sf|8svx|aac|aif|aifc|aiff|amr|ape|asf|ast|au|aup|band|brstm|bwf|cdda|cust|dsf|dwd|flac|gsf|gsm|gym|it|jam|la|ly|m4a|m4p|mid|minipsf|mng|mod|mp1|mp2|mp3|mp4|mpc|mscz|mt2|mus|niff|nsf|off|ofr|ofs|ogg|ots|pac|psf|psf2|psflib|ptb|qsf|ra|raw|rka|rm|rmj|s3m|shn|sib|sid|smp|spc|spx|ssf|swa|tta|txm|usf|vgm|voc|vox|vqf|wav|wma|wv|xm|ym',
28
+ ),
29
+ 'message' => __( 'You can add only audio.', 'wpv-views' ),
30
+ );
31
+ return $validation;
32
+ }
33
+ }
embedded/toolset/toolset-common/toolset-forms/classes/class.button.php ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ require_once 'class.textfield.php';
3
+
4
+ /**
5
+ * Description of class
6
+ *
7
+ * @author Franko
8
+ */
9
+ class WPToolset_Field_Button extends WPToolset_Field_Textfield
10
+ {
11
+
12
+ public function metaform() {
13
+ $config = $this->_config;
14
+ $metaform = array();
15
+ $metaform[] = array(
16
+ '#type' => 'button',
17
+ '#title' => $this->title,
18
+ '#description' => $this->description,
19
+ '#name' => $this->name,
20
+ '#value' => $this->value,
21
+ '#validate' => $config['validation']
22
+ );
23
+ return $metaform;
24
+ }
25
+ }
embedded/toolset/toolset-common/toolset-forms/classes/class.checkbox.php ADDED
@@ -0,0 +1,66 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ *
5
+ */
6
+ require_once 'class.field_factory.php';
7
+
8
+ /**
9
+ * Description of class
10
+ *
11
+ * @author Srdjan
12
+ */
13
+ class WPToolset_Field_Checkbox extends FieldFactory
14
+ {
15
+ public function metaform()
16
+ {
17
+ global $post;
18
+ $value = $this->getValue();
19
+ $data = $this->getData();
20
+ $checked = null;
21
+
22
+ /**
23
+ * autocheck for new posts
24
+ */
25
+ if (isset($post) && 'auto-draft' == $post->post_status && array_key_exists( 'checked', $data ) && $data['checked']) {
26
+ $checked = true;
27
+ }
28
+ /**
29
+ * is checked?
30
+ */
31
+ if ( isset($data['options']) && array_key_exists( 'checked', $data['options'] ) ) {
32
+ $checked = $data['options']['checked'];
33
+ }
34
+ /**
35
+ * if is a default value, there value is 1 or default_value
36
+ */
37
+ if (
38
+ array_key_exists('default_value', $data)
39
+ && ( 'y' === $value || $value === $data['default_value'])
40
+ ) {
41
+ $checked = true;
42
+ }
43
+
44
+ // Comment out broken code. This tries to set the previous state after validation fails
45
+ //if (!$checked&&$this->getValue()==1) {
46
+ // $checked=true;
47
+ //}
48
+
49
+ /**
50
+ * metaform
51
+ */
52
+ $form = array(
53
+ '#type' => 'checkbox',
54
+ '#value' => $value,
55
+ '#default_value' => array_key_exists( 'default_value', $data )? $data['default_value']:null,
56
+ '#name' => $this->getName(),
57
+ '#description' => $this->getDescription(),
58
+ '#title' => $this->getTitle(),
59
+ '#validate' => $this->getValidationData(),
60
+ '#after' => '<input type="hidden" name="_wptoolset_checkbox[' . $this->getId() . ']" value="1" />',
61
+ '#checked' => $checked,
62
+ '#repetitive' => $this->isRepetitive(),
63
+ );
64
+ return array($form);
65
+ }
66
+ }
embedded/toolset/toolset-common/toolset-forms/classes/class.checkboxes.php ADDED
@@ -0,0 +1,90 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Description of class
4
+ *
5
+ * @author Srdjan
6
+ *
7
+ *
8
+ */
9
+
10
+ require_once 'class.field_factory.php';
11
+
12
+ class WPToolset_Field_Checkboxes extends FieldFactory
13
+ {
14
+ public function metaform()
15
+ {
16
+ global $post;
17
+ $value = $this->getValue();
18
+ $data = $this->getData();
19
+ $name = $this->getName();
20
+
21
+ $form = array();
22
+ $_options = array();
23
+ if (isset($data['options'])) {
24
+ foreach ( $data['options'] as $option_key => $option ) {
25
+
26
+ $checked = isset( $option['checked'] ) ? $option['checked'] : !empty( $value[$option_key] );
27
+
28
+ if (isset($post) && 'auto-draft' == $post->post_status && array_key_exists( 'checked', $option ) && $option['checked']) {
29
+ $checked = true;
30
+ }
31
+
32
+ // Comment out broken code. This tries to set the previous state after validation fails
33
+ //$_values=$this->getValue();
34
+ //if (!$checked&&isset($value)&&!empty($value)&&is_array($value)&&in_array($option['value'],$value)) {
35
+ // $checked=true;
36
+ //}
37
+
38
+ $_options[$option_key] = array(
39
+ '#value' => $option['value'],
40
+ '#title' => $option['title'],
41
+ '#type' => 'checkbox',
42
+ '#default_value' => $checked,
43
+ '#name' => $option['name']."[]",
44
+ //'#inline' => true,
45
+ );
46
+
47
+ if ( isset( $option['data-value'] ) ) {
48
+ //Fixing https://icanlocalize.basecamphq.com/projects/7393061-toolset/todo_items/188528502/comments
49
+ $_options[$option_key]['#attributes'] = array('data-value' => $option['data-value']);
50
+ }
51
+
52
+ if ( !is_admin() ) {// TODO maybe add a doing_ajax() check too, what if we want to load a form using AJAX?
53
+ $clases = array(
54
+ 'wpt-form-item',
55
+ 'wpt-form-item-checkbox',
56
+ 'checkbox-'.sanitize_title($option['title'])
57
+ );
58
+ /**
59
+ * filter: cred_checkboxes_class
60
+ * @param array $clases current array of classes
61
+ * @parem array $option current option
62
+ * @param string field type
63
+ *
64
+ * @return array
65
+ */
66
+ $clases = apply_filters( 'cred_item_li_class', $clases, $option, 'checkboxes' );
67
+ $_options[$option_key]['#before'] = sprintf(
68
+ '<li class="%s">',
69
+ implode(' ', $clases)
70
+ );
71
+ $_options[$option_key]['#after'] = '</li>';
72
+ $_options[$option_key]['#pattern'] = '<BEFORE><PREFIX><ELEMENT><LABEL><ERROR><SUFFIX><DESCRIPTION><AFTER>';
73
+ }
74
+ }
75
+ }
76
+ $metaform = array(
77
+ '#type' => 'checkboxes',
78
+ '#options' => $_options,
79
+ '#description' => $this->getDescription(),
80
+ );
81
+ if ( is_admin() ) {
82
+ $metaform['#title'] = $this->getTitle();
83
+ $metaform['#after'] = '<input type="hidden" name="_wptoolset_checkbox[' . $this->getId() . ']" value="1" />';
84
+ } else {
85
+ $metaform['#before'] = '<ul class="wpt-form-set wpt-form-set-checkboxes wpt-form-set-checkboxes-' . $name . '">';
86
+ $metaform['#after'] = '</ul>';
87
+ }
88
+ return array($metaform);
89
+ }
90
+ }
embedded/toolset/toolset-common/toolset-forms/classes/class.colorpicker.php ADDED
@@ -0,0 +1,106 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ *
5
+ */
6
+ require_once 'class.field_factory.php';
7
+
8
+ /**
9
+ * Description of class
10
+ *
11
+ * @author Srdjan
12
+ */
13
+ class WPToolset_Field_Colorpicker extends FieldFactory
14
+ {
15
+ public function init()
16
+ {
17
+ if ( !is_admin() ) {
18
+ wp_enqueue_style( 'wp-color-picker' );
19
+ wp_enqueue_script(
20
+ 'iris',
21
+ admin_url( 'js/iris.min.js' ),
22
+ array( 'jquery-ui-draggable', 'jquery-ui-slider', 'jquery-touch-punch' ),
23
+ false,
24
+ 1
25
+ );
26
+ wp_enqueue_script(
27
+ 'wp-color-picker',
28
+ admin_url( 'js/color-picker.min.js' ),
29
+ array( 'iris' ),
30
+ false,
31
+ 1
32
+ );
33
+ $colorpicker_l10n = array(
34
+ 'clear' => __( 'Clear' ),
35
+ 'defaultString' => __( 'Default', 'wpv-views' ),
36
+ 'pick' => __( 'Select', 'wpv-views' )." Color"
37
+ );
38
+ wp_localize_script( 'wp-color-picker', 'wpColorPickerL10n', $colorpicker_l10n );
39
+ }
40
+ wp_register_script(
41
+ 'wptoolset-field-colorpicker',
42
+ WPTOOLSET_FORMS_RELPATH . '/js/colorpicker.js',
43
+ array('iris'),
44
+ WPTOOLSET_FORMS_VERSION,
45
+ true
46
+ );
47
+ wp_enqueue_script( 'wptoolset-field-colorpicker' );
48
+ $this->set_placeholder_as_attribute();
49
+ }
50
+
51
+ static public function registerScripts()
52
+ {
53
+ }
54
+
55
+ public function enqueueScripts()
56
+ {
57
+
58
+ }
59
+
60
+ public function addTypeValidation($validation) {
61
+ $validation['hexadecimal'] = array(
62
+ 'args' => array(
63
+ 'hexadecimal'
64
+ ),
65
+ 'message' => __( 'You can add valid hexadecimal.', 'wpv-views' ),
66
+ );
67
+ return $validation;
68
+ }
69
+
70
+ public function metaform()
71
+ {
72
+ $validation = $this->getValidationData();
73
+ $validation = $this->addTypeValidation($validation);
74
+ $this->setValidationData($validation);
75
+
76
+ $attributes = $this->getAttr();
77
+ if ( isset($attributes['class'] ) ) {
78
+ $attributes['class'] .= ' ';
79
+ } else {
80
+ $attributes['class'] = '';
81
+ }
82
+ $attributes['class'] = 'js-wpt-colorpicker';
83
+
84
+ $form = array();
85
+ $form['name'] = array(
86
+ '#type' => 'textfield',
87
+ '#title' => $this->getTitle(),
88
+ '#description' => $this->getDescription(),
89
+ '#value' => $this->getValue(),
90
+ '#name' => $this->getName(),
91
+ '#attributes' => $attributes,
92
+ '#validate' => $validation,
93
+ '#after' => '',
94
+ '#repetitive' => $this->isRepetitive(),
95
+ );
96
+ return $form;
97
+ }
98
+
99
+ public static function filterValidationValue($value)
100
+ {
101
+ if ( isset( $value['datepicker'] ) ) {
102
+ return $value['datepicker'];
103
+ }
104
+ return $value;
105
+ }
106
+ }
embedded/toolset/toolset-common/toolset-forms/classes/class.conditional.php ADDED
@@ -0,0 +1,534 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * - Checks conditionals when form is displayed and values changed
5
+ * - Checks simple conditionals using JS
6
+ * - Checks custom conditinals via AJAX/PHP
7
+ * - PHP simple and custom checks available using class methods
8
+ *
9
+ * Simple conditionals
10
+ *
11
+ * Data
12
+ * [id] - Trigger ID to match data-wpt-id
13
+ * [type] - field type (trigger)
14
+ * [operator] - operator
15
+ * [args] - array(value, value2...)
16
+ *
17
+ * Example
18
+ * $config['conditional'] = array(
19
+ * 'relation' => 'OR'|'AND',
20
+ * 'conditions' => array(
21
+ * array(
22
+ * 'id' => 'wpcf-text',
23
+ * 'type' => 'textfield',
24
+ * 'operator' => '==',
25
+ * 'args' => array('show')
26
+ * ),
27
+ * array(
28
+ * 'id' => 'wpcf-date',
29
+ * 'type' => 'date',
30
+ * 'operator' => 'beetween',
31
+ * 'args' => array('21/01/2014', '24/01/2014') // Accepts timestamps or string date
32
+ * )
33
+ * ),
34
+ * );
35
+ *
36
+ * Custom conditionals
37
+ *
38
+ * Variable name should match trigger ID - data-wpt-id
39
+ * Example
40
+ * $config['conditional'] = array(
41
+ * 'custom' => '($wpcf-text = show) OR ($wpcf-date > '21-01-2014')'
42
+ * );
43
+ */
44
+ if (!defined('ICL_COMMON_FUNCTIONS')) {
45
+ require_once WPTOOLSET_COMMON_PATH . '/functions.php';
46
+ }
47
+ if (!function_exists('wpv_filter_parse_date')) {
48
+ require_once WPTOOLSET_COMMON_PATH . '/wpv-filter-date-embedded.php';
49
+ }
50
+
51
+ require_once WPTOOLSET_COMMON_PATH . '/expression-parser/parser.php';
52
+
53
+ /**
54
+ * Class description
55
+ *
56
+ * @todo BUG common function wpv_condition has some flaws
57
+ * (dashed names, mixed checks for string and numeric values causes failure)
58
+ *
59
+ * @author Srdjan
60
+ */
61
+ if ( !class_exists('WPToolset_Forms_Conditional') ){
62
+ class WPToolset_Forms_Conditional {
63
+
64
+ private $__formID;
65
+ protected $_collected = array(), $_triggers = array(), $_fields = array(), $_custom_triggers = array(), $_custom_fields = array();
66
+
67
+ /**
68
+ * Register and enqueue scripts and actions.
69
+ *
70
+ * @param type $formID
71
+ */
72
+ public function __construct($formID) {
73
+ $this->__formID = trim($formID, '#');
74
+ // Register and enqueue
75
+ wp_register_script('wptoolset-form-conditional', WPTOOLSET_FORMS_RELPATH . '/js/conditional.js', array('jquery', 'jquery-effects-scale'), WPTOOLSET_FORMS_VERSION, true);
76
+ wp_enqueue_script('wptoolset-form-conditional');
77
+ $js_data = array(
78
+ 'ajaxurl' => admin_url('admin-ajax.php', null),
79
+ );
80
+ wp_localize_script('wptoolset-form-conditional', 'wptConditional', $js_data);
81
+
82
+ wp_register_script('wptoolset-parser', icl_get_file_relpath(dirname(dirname(__FILE__))) . '/expression-parser/js/parser.js', array('jquery'), WPTOOLSET_FORMS_VERSION, true);
83
+ wp_enqueue_script('wptoolset-parser');
84
+ $js_data = array(
85
+ 'ajaxurl' => admin_url('admin-ajax.php', null),
86
+ );
87
+ // Render settings
88
+ add_action('admin_print_footer_scripts', array($this, 'renderJsonData'), 30);
89
+ add_action('wp_footer', array($this, 'renderJsonData'), 30);
90
+ // Check conditional and hide field
91
+ add_action('wptoolset_field_class', array($this, 'actionFieldClass'));
92
+ }
93
+
94
+ /**
95
+ * Collects data.
96
+ *
97
+ * Called from form_factory.
98
+ *
99
+ * @param type $config
100
+ */
101
+ public function add($config) {
102
+ if (!empty($config['conditional'])) {
103
+ $this->_collected[$config['id']] = $config['conditional'];
104
+ return;
105
+ }
106
+ }
107
+
108
+ /**
109
+ * Sets JSON data to be used with conditional.js
110
+ */
111
+ protected function _parseData() {
112
+ foreach ($this->_collected as $id => $config) {
113
+ if (!empty($config['custom'])) {
114
+
115
+ $evaluate = $config['custom'];
116
+ //###############################################################################################
117
+ //https://icanlocalize.basecamphq.com/projects/7393061-toolset/todo_items/193583580/comments
118
+ //Fix REGEX conditions that contains \ that is stripped out
119
+ if (strpos($evaluate, "REGEX") === false) {
120
+ $evaluate = wpv_filter_parse_date($evaluate);
121
+ $evaluate = self::handle_user_function($evaluate);
122
+ }
123
+ //###############################################################################################
124
+ $fields = self::extractFields($evaluate);
125
+
126
+ foreach ($fields as $field) {
127
+ $this->_custom_fields[$id]['custom'] = $evaluate;
128
+ $this->_custom_fields[$id]['triggers'][] = $field;
129
+ $this->_custom_triggers[$field][] = $id;
130
+ }
131
+ } else {
132
+ if (isset($config) && isset($config['conditions'])) {
133
+ if (isset($config) && isset($config['relation']))
134
+ $this->_fields[$id]['relation'] = $config['relation'];
135
+
136
+ foreach ($config['conditions'] as &$c) {
137
+ /*
138
+ * $c[id] - field id
139
+ * $c[type] - field type
140
+ * $c[operator] - operator
141
+ * $c[args] - array(value, [value2]...)
142
+ */
143
+ if (!isset($this->_triggers[$c['id']]))
144
+ $this->_triggers[$c['id']] = array();
145
+ $c['args'] = apply_filters('wptoolset_conditional_args_js', $c['args'], $c['type']);
146
+ $this->_fields[$id]['conditions'][] = $c;
147
+ if (!in_array($id, $this->_triggers[$c['id']]))
148
+ $this->_triggers[$c['id']][] = $id;
149
+ }
150
+ }
151
+ }
152
+ }
153
+ }
154
+
155
+ /**
156
+ * Renders JSON data in footer to be used with conditional.js
157
+ */
158
+ public function renderJsonData() {
159
+ $this->_parseData();
160
+ if (!empty($this->_triggers)) {
161
+ echo '<script type="text/javascript">wptCondTriggers["#'
162
+ . $this->__formID . '"] = ' . json_encode($this->_triggers) . ';</script>';
163
+ }
164
+ if (!empty($this->_fields)) {
165
+ echo '<script type="text/javascript">wptCondFields["#'
166
+ . $this->__formID . '"] = ' . json_encode($this->_fields) . ';</script>';
167
+ }
168
+ if (!empty($this->_custom_triggers)) {
169
+ echo '<script type="text/javascript">wptCondCustomTriggers["#'
170
+ . $this->__formID . '"] = ' . json_encode($this->_custom_triggers) . ';</script>';
171
+ }
172
+ if (!empty($this->_custom_fields)) {
173
+ echo '<script type="text/javascript">wptCondCustomFields["#'
174
+ . $this->__formID . '"] = ' . json_encode($this->_custom_fields) . ';</script>';
175
+ }
176
+ }
177
+
178
+ /**
179
+ * Compares values.
180
+ *
181
+ * @param array $config
182
+ * @param array $values
183
+ * @return type
184
+ */
185
+ public static function evaluate($config) {
186
+ // Custom conditional
187
+ if (!empty($config['custom'])) {
188
+ return self::evaluateCustom($config['custom'], $config['values']);
189
+ }
190
+
191
+ /**
192
+ * check conditions
193
+ */
194
+ if (!array_key_exists('conditions', $config)) {
195
+ return true;
196
+ }
197
+
198
+ $passedOne = false;
199
+ $passedAll = true;
200
+ $relation = $config['relation'];
201
+
202
+ foreach ($config['conditions'] as $c) {
203
+ // Add filters
204
+ wptoolset_form_field_add_filters($c['type']);
205
+ $c['args'] = apply_filters('wptoolset_conditional_args_php', $c['args'], $c['type']);
206
+ $value = isset($config['values'][$c['id']]) ? $config['values'][$c['id']] : null;
207
+ $value = apply_filters('wptoolset_conditional_value_php', $value, $c['type']);
208
+ $compare = $c['args'][0];
209
+ switch ($c['operator']) {
210
+ case '=':
211
+ case '==':
212
+ $passed = $value == $compare;
213
+ break;
214
+
215
+ case '>':
216
+ $passed = floatval($value) > floatval($compare);
217
+ break;
218
+
219
+ case '>=':
220
+ $passed = floatval($value) >= floatval($compare);
221
+ break;
222
+
223
+ case '<':
224
+ $passed = floatval($value) < floatval($compare);
225
+ break;
226
+
227
+ case '<=':
228
+ $passed = floatval($value) <= floatval($compare);
229
+ break;
230
+
231
+ case '===':
232
+ $passed = $value === $compare;
233
+ break;
234
+
235
+ case '!==':
236
+ $passed = $value !== $compare;
237
+ break;
238
+
239
+ case '<>':
240
+ $passed = $value <> $compare;
241
+ break;
242
+
243
+ case 'between':
244
+ $passed = floatval($value) > floatval($compare) && floatval($value) < floatval($c['args'][1]);
245
+ break;
246
+
247
+ default:
248
+ $passed = false;
249
+ break;
250
+ }
251
+ if (!$passed) {
252
+ $passedAll = false;
253
+ } else {
254
+ $passedOne = true;
255
+ }
256
+ }
257
+ if ($relation == 'AND' && $passedAll) {
258
+ return true;
259
+ }
260
+ if ($relation == 'OR' && $passedOne) {
261
+ return true;
262
+ }
263
+ return false;
264
+ }
265
+
266
+ /**
267
+ * Evaluates conditions using custom conditional statement.
268
+ *
269
+ * @uses wpv_condition()
270
+ *
271
+ * @param type $post
272
+ * @param type $evaluate
273
+ * @return boolean
274
+ */
275
+ public static function evaluateCustom($evaluate, $values) {
276
+ //###############################################################################################
277
+ //https://icanlocalize.basecamphq.com/projects/7393061-toolset/todo_items/193583580/comments
278
+ //Fix REGEX conditions that contains \ that is stripped out
279
+ if (strpos($evaluate, "REGEX") === false) {
280
+ $evaluate = trim(stripslashes($evaluate));
281
+ // Check dates
282
+ $evaluate = wpv_filter_parse_date($evaluate);
283
+ $evaluate = self::handle_user_function($evaluate);
284
+ }
285
+
286
+ $fields = self::extractFields($evaluate);
287
+ $evaluate = self::_update_values_in_expression($evaluate, $fields, $values);
288
+
289
+ $check = false;
290
+ try {
291
+ $parser = new Toolset_Parser($evaluate);
292
+ $parser->parse();
293
+ $check = $parser->evaluate();
294
+ } catch (Exception $e) {
295
+ $check = false;
296
+ }
297
+ return $check;
298
+ }
299
+
300
+ static function sortByLength($a, $b) {
301
+ return strlen($b) - strlen($a);
302
+ }
303
+
304
+ private static function _update_values_in_expression($evaluate, $fields, $values) {
305
+ // use string replace to replace any fields with their values.
306
+ // Sort by length just in case a field name contians a shorter version of another field name.
307
+ // eg. $my-field and $my-field-2
308
+
309
+ $keys = array_keys($fields);
310
+ usort($keys, 'WPToolset_Forms_Conditional::sortByLength');
311
+
312
+ foreach ($keys as $key) {
313
+ $is_numeric = false;
314
+ $is_array = false;
315
+ $value = isset($values[$fields[$key]]) ? $values[$fields[$key]] : '';
316
+ if ($value == '') {
317
+ $value = "''";
318
+ }
319
+ if (is_numeric($value)) {
320
+ $value = '\'' . $value . '\'';
321
+ $is_numeric = true;
322
+ }
323
+
324
+ if ('array' === gettype($value)) {
325
+ $is_array = true;
326
+ // workaround for datepicker data to cover all cases
327
+ if (array_key_exists('timestamp', $value)) {
328
+ if (is_numeric($value['timestamp'])) {
329
+ $value = $value['timestamp'];
330
+ } else if (is_array($value['timestamp'])) {
331
+ $value = implode(',', array_values($value['timestamp']));
332
+ }
333
+ } else if (array_key_exists('datepicker', $value)) {
334
+ if (is_numeric($value['datepicker'])) {
335
+ $value = $value['datepicker'];
336
+ } else if (is_array($value['datepicker'])) {
337
+ $value = implode(',', array_values($value['datepicker']));
338
+ }
339
+ } else {
340
+ $value = implode(',', array_values($value));
341
+ }
342
+ }
343
+
344
+ if (!empty($value) && $value != "''" && !$is_numeric && !$is_array) {
345
+ $value = '\'' . $value . '\'';
346
+ }
347
+
348
+ // First replace the $(field_name) format
349
+ $evaluate = str_replace('$(' . $fields[$key] . ')', $value, $evaluate);
350
+ // next replace the $field_name format
351
+ $evaluate = str_replace('$' . $fields[$key], $value, $evaluate);
352
+ }
353
+ return $evaluate;
354
+ }
355
+
356
+ /**
357
+ * Extracts fields from custom conditional statement.
358
+ *
359
+ * @param type $evaluate
360
+ * @return type
361
+ */
362
+ public static function extractFields($evaluate) {
363
+ //###############################################################################################
364
+ //https://icanlocalize.basecamphq.com/projects/7393061-toolset/todo_items/193583580/comments
365
+ //Fix REGEX conditions that contains \ that is stripped out
366
+ if (strpos($evaluate, "REGEX") === false) {
367
+ $evaluate = trim(stripslashes($evaluate));
368
+ // Check dates
369
+ $evaluate = wpv_filter_parse_date($evaluate);
370
+ $evaluate = self::handle_user_function($evaluate);
371
+ }
372
+
373
+ // Add quotes = > < >= <= === <> !==
374
+ $strings_count = preg_match_all('/[=|==|===|<=|<==|<===|>=|>==|>===|\!===|\!==|\!=|<>]\s(?!\$)(\w*)[\)|\$|\W]/', $evaluate, $matches);
375
+
376
+ if (!empty($matches[1])) {
377
+ foreach ($matches[1] as $temp_match) {
378
+ $temp_replace = is_numeric($temp_match) ? $temp_match : '\'' . $temp_match . '\'';
379
+ $evaluate = str_replace(' ' . $temp_match . ')', ' ' . $temp_replace . ')', $evaluate);
380
+ }
381
+ }
382
+ // if new version $(field-value) use this regex
383
+ if (preg_match('/\$\(([^()]+)\)/', $evaluate)) {
384
+ preg_match_all('/\$\(([^()]+)\)/', $evaluate, $matches);
385
+ }
386
+ // if old version $field-value use this other
387
+ else {
388
+ preg_match_all('/\$([^\s]*)/', $evaluate, $matches);
389
+ }
390
+
391
+
392
+ $fields = array();
393
+ if (!empty($matches)) {
394
+ foreach ($matches[1] as $field_name) {
395
+ $fields[trim($field_name, '()')] = trim($field_name, '()');
396
+ }
397
+ }
398
+
399
+ return $fields;
400
+ }
401
+
402
+ public static function handle_user_function($evaluate) {
403
+ $evaluate = stripcslashes($evaluate);
404
+ $occurrences = preg_match_all('/(\\w+)\(([^\)]*)\)/', $evaluate, $matches);
405
+
406
+ if ($occurrences > 0) {
407
+ for ($i = 0; $i < $occurrences; $i++) {
408
+ $result = false;
409
+ $function = $matches[1][$i];
410
+ $field = isset($matches[2]) ? rtrim($matches[2][$i], ',') : '';
411
+
412
+ if ($function === 'USER') {
413
+ $result = WPV_Handle_Users_Functions::get_user_field($field);
414
+ }
415
+
416
+ if ($result) {
417
+ $evaluate = str_replace($matches[0][$i], $result, $evaluate);
418
+ }
419
+ }
420
+ }
421
+
422
+ return $evaluate;
423
+ }
424
+
425
+ /**
426
+ * Custom conditional AJAX check (called from bootstrap.php)
427
+ */
428
+ public static function ajaxCustomConditional() {
429
+ $res = array('passed' => array(), 'failed' => array());
430
+ $conditional = stripslashes_deep($_POST['conditions']);
431
+ foreach ($conditional as $k => $c) {
432
+ $post_values = stripslashes_deep($_POST['values']);
433
+ $values = array();
434
+ foreach ($post_values as $fid => $value) {
435
+ if (isset($_POST['field_types'][$fid])) {
436
+ $field_type = stripslashes_deep($_POST['field_types'][$fid]);
437
+ wptoolset_form_field_add_filters($field_type);
438
+ $value = apply_filters('wptoolset_conditional_value_php', $value, $field_type);
439
+ }
440
+ $values[$fid] = $value;
441
+ }
442
+ if ($passed = self::evaluateCustom($c, $values)) {
443
+ $res['passed'][] = $k;
444
+ } else {
445
+ $res['failed'][] = $k;
446
+ }
447
+ }
448
+ echo json_encode($res);
449
+ die();
450
+ }
451
+
452
+ /**
453
+ * Checks conditional and hides field.
454
+ *
455
+ * @param type $config
456
+ */
457
+ public function actionFieldClass($config) {
458
+ if (
459
+ !empty($config['conditional']) && array_key_exists('conditions', $config['conditional']) && !self::evaluate($config['conditional'])
460
+ ) {
461
+ echo ' wpt-hidden js-wpt-remove-on-submit js-wpt-validation-ignore';
462
+ }
463
+ }
464
+
465
+ /**
466
+ * Returns collected JSON data
467
+ *
468
+ * @return type
469
+ */
470
+ public function getData() {
471
+ $this->_parseData();
472
+ return array(
473
+ 'triggers' => $this->_triggers,
474
+ 'fields' => $this->_fields,
475
+ 'custom_triggers' => $this->_custom_triggers,
476
+ 'custom_fields' => $this->_custom_fields,
477
+ );
478
+ }
479
+
480
+ }
481
+ }
482
+
483
+ if (!class_exists('WPV_Handle_Users_Functions')) {
484
+
485
+ class WPV_Handle_Users_Functions {
486
+
487
+ private static $field;
488
+
489
+ public static function get_user_field($field) {
490
+ if (!$field)
491
+ return false;
492
+
493
+ self::$field = str_replace("'", '', $field);
494
+
495
+ $ret = self::get_info();
496
+
497
+ if ($ret !== false)
498
+ return "'" . $ret . "'";
499
+
500
+ return false;
501
+ }
502
+
503
+ private static function get_info() {
504
+ if (!is_user_logged_in()) {
505
+ return false;
506
+ }
507
+ global $current_user;
508
+
509
+ get_currentuserinfo();
510
+
511
+ switch (self::$field) {
512
+ case 'role':
513
+ return isset($current_user->roles[0]) ? $current_user->roles[0] : 'Subscriber';
514
+ break;
515
+ case 'login':
516
+ return $current_user->data->user_login;
517
+ break;
518
+ case 'name':
519
+ return $current_user->data->display_name;
520
+ break;
521
+ case 'id':
522
+ return $current_user->data->ID;
523
+ break;
524
+ default:
525
+ return $current_user->data->ID;
526
+ break;
527
+ }
528
+
529
+ return false;
530
+ }
531
+
532
+ }
533
+
534
+ }
embedded/toolset/toolset-common/toolset-forms/classes/class.cred.php ADDED
@@ -0,0 +1,90 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Types fields specific
4
+ */
5
+ require_once 'class.types.php';
6
+ require_once 'class.conditional.php';
7
+
8
+ /**
9
+ * Class description
10
+ *
11
+ * @author Srdjan
12
+ */
13
+ if ( !class_exists('WPToolset_Cred') ){
14
+ class WPToolset_Cred
15
+ {
16
+
17
+ /**
18
+ * Filters validation.
19
+ *
20
+ * Loop over validation settings and create array of validation rules.
21
+ * array( $rule => array( 'args' => array, 'message' => string ), ... )
22
+ *
23
+ * @param array|string $field settings array (as stored in DB) or field ID
24
+ * @return array array( $rule => array( 'args' => array, 'message' => string ), ... )
25
+ */
26
+ public static function filterValidation( $config ){
27
+ /* Placeholder for field value '$value'.
28
+ *
29
+ * Used for validation settings.
30
+ * Field value is not processed here, instead string '$value' is used
31
+ * to be replaced with actual value when needed.
32
+ *
33
+ * For example:
34
+ * validation['rangelength'] = array(
35
+ * 'args' => array( '$value', 5, 12 ),
36
+ * 'message' => 'Value length between %s and %s required'
37
+ * );
38
+ * validation['reqiuired'] = array(
39
+ * 'args' => array( '$value', true ),
40
+ * 'message' => 'This field is required'
41
+ * );
42
+ *
43
+ * Types have default and custom messages defined on it's side.
44
+ */
45
+ $value = '$value';
46
+ $validation = array();
47
+ if ( isset( $config['data']['validate'] ) ) {
48
+ foreach ( $config['data']['validate'] as $rule => $settings ) {
49
+ if ( $settings['active'] ) {
50
+ $validation[$rule] = array(
51
+ 'args' => isset( $settings['args'] ) ? array_unshift( $value,
52
+ $settings['args'] ) : array($value, true),
53
+ 'message' => $settings['message']
54
+ );
55
+ }
56
+ }
57
+ }
58
+ return $validation;
59
+ }
60
+
61
+ /**
62
+ * Filters conditional.
63
+ *
64
+ * We'll just handle this as a custom conditional
65
+ *
66
+ * Custom conditional
67
+ * Main properties:
68
+ * [custom] - custom statement made by user, note that $xxxx should match
69
+ * IDs of fields that passed this filter.
70
+ * [values] - same as for regular conditional
71
+ *
72
+ * [conditional] => Array(
73
+ [custom] => ($wpcf-my-date = DATE(01,02,2014)) OR ($wpcf-my-date > DATE(07,02,2014))
74
+ [values] => Array(
75
+ [wpcf-my-date] => 32508691200
76
+ )
77
+ )
78
+ *
79
+ * @param array|string $field settings array (as stored in DB) or field ID
80
+ * @param int $post_id Post or user ID to fetch meta data to check against
81
+ * @return array
82
+ */
83
+ public static function filterConditional( $if, $post_id ){
84
+
85
+ $data = WPToolset_Types::getCustomConditional($if, '', WPToolset_Types::getConditionalValues($post_id));
86
+ return $data;
87
+ }
88
+
89
+ }
90
+ }
embedded/toolset/toolset-common/toolset-forms/classes/class.credaudio.php ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ require_once 'class.credfile.php';
3
+ require_once 'class.audio.php';
4
+
5
+ /**
6
+ * Description of class
7
+ *
8
+ * @author Srdjan
9
+ *
10
+ *
11
+ */
12
+ class WPToolset_Field_Credaudio extends WPToolset_Field_Credfile
13
+ {
14
+ protected $_settings = array('min_wp_version' => '3.6');
15
+
16
+ public function metaform()
17
+ {
18
+ //TODO: check if this getValidationData does not break PHP Validation _cakePHP required file.
19
+ $validation = $this->getValidationData();
20
+ $validation = WPToolset_Field_Audio::addTypeValidation($validation);
21
+ $this->setValidationData($validation);
22
+ return parent::metaform();
23
+ }
24
+ }
embedded/toolset/toolset-common/toolset-forms/classes/class.credfile.php ADDED
@@ -0,0 +1,227 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ *
5
+ *
6
+ */
7
+ require_once 'class.textfield.php';
8
+
9
+ /**
10
+ * Description of class
11
+ *
12
+ * @author Francesco / Srdjan
13
+ */
14
+ class WPToolset_Field_Credfile extends WPToolset_Field_Textfield {
15
+
16
+ public $disable_progress_bar;
17
+
18
+ public static function get_image_sizes($size = '') {
19
+
20
+ global $_wp_additional_image_sizes;
21
+
22
+ $sizes = array();
23
+ $get_intermediate_image_sizes = get_intermediate_image_sizes();
24
+
25
+ // Create the full array with sizes and crop info
26
+ foreach ($get_intermediate_image_sizes as $_size) {
27
+
28
+ if (in_array($_size, array('thumbnail', 'medium', 'large'))) {
29
+
30
+ $sizes[$_size]['width'] = get_option($_size . '_size_w');
31
+ $sizes[$_size]['height'] = get_option($_size . '_size_h');
32
+ $sizes[$_size]['crop'] = (bool) get_option($_size . '_crop');
33
+ } elseif (isset($_wp_additional_image_sizes[$_size])) {
34
+
35
+ $sizes[$_size] = array(
36
+ 'width' => $_wp_additional_image_sizes[$_size]['width'],
37
+ 'height' => $_wp_additional_image_sizes[$_size]['height'],
38
+ 'crop' => $_wp_additional_image_sizes[$_size]['crop']
39
+ );
40
+ }
41
+ }
42
+
43
+ // Get only 1 size if found
44
+ if ($size) {
45
+
46
+ if (isset($sizes[$size])) {
47
+ return $sizes[$size];
48
+ } else {
49
+ return false;
50
+ }
51
+ }
52
+
53
+ return $sizes;
54
+ }
55
+
56
+ public function init() {
57
+ wp_register_script('wpt-field-credfile', WPTOOLSET_FORMS_RELPATH . '/js/credfile.js', array('wptoolset-forms'), WPTOOLSET_FORMS_VERSION, true);
58
+ wp_enqueue_script('wpt-field-credfile');
59
+
60
+ $this->disable_progress_bar = version_compare(CRED_FE_VERSION, '1.3.6.2', '<=');
61
+ if ($this->disable_progress_bar)
62
+ return;
63
+
64
+ //Add settings switch in order to use AJAX JQUERY UPLOAD or not
65
+ $scriptpath = WPTOOLSET_FORMS_RELPATH . '/js/jquery_upload/';
66
+ $stylepath = WPTOOLSET_FORMS_RELPATH . '/js/jquery_upload/';
67
+
68
+ wp_enqueue_style('progress_bar-style', $stylepath . 'progress_bar.css');
69
+
70
+ if (!wp_script_is('jquery')) {
71
+ wp_enqueue_script('jquery', $scriptpath . 'jquery.min.js', array(), '', false);
72
+ }
73
+ wp_enqueue_script('jquery-ui-script', $scriptpath . 'jquery-ui.min.js', array('jquery'), '', true);
74
+ wp_enqueue_script('jquery-ui-widget-script', $scriptpath . 'jquery.ui.widget.js', array('jquery'), '', true);
75
+ //wp_enqueue_script('jtmpl-script', $scriptpath . 'tmpl.min.js', array('jquery'), '', true);
76
+ wp_enqueue_script('load-image-all-script', $scriptpath . 'load-image.all.min.js', array('jquery'), '', true);
77
+ //wp_enqueue_script('canvas-to-blob-script', $scriptpath . 'canvas-to-blob.min.js', array('jquery'), '', true);
78
+ //wp_enqueue_script('jquery-blueimp-gallery-script', $scriptpath . 'jquery.blueimp-gallery.min.js', array('jquery'), '', true);
79
+ wp_enqueue_script('jquery-iframe-transport-script', $scriptpath . 'jquery.iframe-transport.js', array('jquery'), '', true);
80
+ wp_enqueue_script('jquery-fileupload-script', $scriptpath . 'jquery.fileupload.js', array('jquery'), '', true);
81
+ wp_enqueue_script('jquery-fileupload-process-script', $scriptpath . 'jquery.fileupload-process.js', array('jquery'), '', true);
82
+ wp_enqueue_script('jquery-fileupload-image-script', $scriptpath . 'jquery.fileupload-image.js', array('jquery'), '', true);
83
+ wp_enqueue_script('jquery-fileupload-audio-script', $scriptpath . 'jquery.fileupload-audio.js', array('jquery'), '', true);
84
+ wp_enqueue_script('jquery-fileupload-video-script', $scriptpath . 'jquery.fileupload-video.js', array('jquery'), '', true);
85
+ wp_enqueue_script('jquery-fileupload-validate-script', $scriptpath . 'jquery.fileupload-validate.js', array('jquery'), '', true);
86
+ wp_enqueue_script('jquery-fileupload-ui-script', $scriptpath . 'jquery.fileupload-ui.js', array('jquery'), '', true);
87
+ wp_enqueue_script('jquery-fileupload-jquery-ui-script', $scriptpath . 'jquery.fileupload-jquery-ui.js', array('jquery'), '', true);
88
+ wp_enqueue_script('my_ajax_file_uploader', $scriptpath . 'file_upload.js', array('jquery'));
89
+
90
+ //require_once WPTOOLSET_COMMON_PATH . "/utility/utils.php";
91
+ //wp_localize_script('my_ajax_file_uploader_thing', 'settings', array('ajaxurl' => admin_url('admin-ajax.php'), 'nonce' => wp_create_nonce('uploader_nonce')));
92
+ wp_localize_script('my_ajax_file_uploader', 'settings', array('media_settings' => self::get_image_sizes('thumbnail'), 'ajaxurl' => plugins_url("submit.php", __FILE__), 'nonce' => wp_create_nonce('ajax_nonce')));
93
+ }
94
+
95
+ public static function registerScripts() {
96
+
97
+ }
98
+
99
+ public static function registerStyles() {
100
+
101
+ }
102
+
103
+ public function enqueueScripts() {
104
+
105
+ }
106
+
107
+ public function enqueueStyles() {
108
+
109
+ }
110
+
111
+ public function metaform() {
112
+ $value = $this->getValue();
113
+ $name = $this->getName();
114
+ if (isset($this->_data['title'])) {
115
+ $title = $this->_data['title'];
116
+ } else {
117
+ $title = $name;
118
+ }
119
+
120
+ $id = str_replace(array("[", "]"), "", $name);
121
+ $delete_input_showhide = '';
122
+ $button_extra_classnames = '';
123
+
124
+ $has_image = false;
125
+ $is_empty = false;
126
+
127
+ if (empty($value)) {
128
+ $value = ''; // NOTE we need to set it to an empty string because sometimes it is NULL on repeating fields
129
+ $is_empty = true;
130
+ $delete_input_showhide = ' style="display:none"';
131
+ }
132
+
133
+ if ($name == '_featured_image') {
134
+ $title = __('Featured Image', 'wpv-views');
135
+ if (!$is_empty) {
136
+ if (preg_match('/src="([\w\d\:\/\._-]*)"/', $value, $_v)) {
137
+ $value = $_v[1];
138
+ }
139
+ }
140
+ }
141
+
142
+ if (!$is_empty) {
143
+ $pathinfo = pathinfo($value);
144
+ // TODO we should check against the allowed mime types, not file extensions
145
+ if (isset($pathinfo['extension']) && in_array(strtolower($pathinfo['extension']), array('png', 'gif', 'jpg', 'jpeg', 'bmp', 'tif'))) {
146
+ $has_image = true;
147
+ }
148
+ }
149
+
150
+ if (array_key_exists('use_bootstrap', $this->_data) && $this->_data['use_bootstrap']) {
151
+ $button_extra_classnames = ' btn btn-default btn-sm';
152
+ }
153
+
154
+ $preview_file = ''; //WPTOOLSET_FORMS_RELPATH . '/images/icon-attachment32.png';
155
+ $attr_hidden = array(
156
+ 'id' => $id . "_hidden",
157
+ 'class' => 'js-wpv-credfile-hidden',
158
+ 'data-wpt-type' => 'file'
159
+ );
160
+ $attr_file = array(
161
+ 'id' => $id . "_file",
162
+ 'class' => 'js-wpt-credfile-upload-file wpt-credfile-upload-file',
163
+ 'alt' => $value,
164
+ 'res' => $value
165
+ );
166
+
167
+ if (!$is_empty) {
168
+ $preview_file = $value;
169
+ // Set attributes
170
+ $attr_file['disabled'] = 'disabled';
171
+ $attr_file['style'] = 'display:none';
172
+ } else {
173
+ $attr_hidden['disabled'] = 'disabled';
174
+ }
175
+
176
+ $form = array();
177
+
178
+ $form[] = array(
179
+ '#type' => 'markup',
180
+ '#markup' => '<input type="button" style="display:none" data-action="undo" class="js-wpt-credfile-undo wpt-credfile-undo' . $button_extra_classnames . '" value="' . esc_attr(__('Restore original', 'wpv-views')) . '" />',
181
+ );
182
+ $form[] = array(
183
+ '#type' => 'markup',
184
+ '#markup' => '<input type="button"' . $delete_input_showhide . ' data-action="delete" class="js-wpt-credfile-delete wpt-credfile-delete' . $button_extra_classnames . '" value="' . esc_attr(__('Clear', 'wpv-views')) . '" />',
185
+ );
186
+ $form[] = array(
187
+ '#type' => 'hidden',
188
+ '#name' => $name,
189
+ '#value' => $value,
190
+ '#attributes' => $attr_hidden,
191
+ );
192
+ $form[] = array(
193
+ '#type' => 'file',
194
+ '#name' => $name,
195
+ '#value' => $value,
196
+ '#title' => $title,
197
+ '#before' => '',
198
+ '#after' => '',
199
+ '#attributes' => $attr_file,
200
+ '#validate' => $this->getValidationData(),
201
+ '#repetitive' => $this->isRepetitive(),
202
+ );
203
+
204
+ if (!$this->disable_progress_bar) {
205
+ //Progress Bar
206
+ $form[] = array(
207
+ '#type' => 'markup',
208
+ '#markup' => '<div id="progress_' . $id . '" class="meter" style="display:none;"><span class = "progress-bar" style="width:0;"></span></div>',
209
+ );
210
+ }
211
+
212
+ if ($has_image) {
213
+ $form[] = array(
214
+ '#type' => 'markup',
215
+ '#markup' => '<span class="js-wpt-credfile-preview wpt-credfile-preview"><img id="' . $id . '_image" src="' . $preview_file . '" title="' . $preview_file . '" alt="' . $preview_file . '" class="js-wpt-credfile-preview-item wpt-credfile-preview-item" /></span>',
216
+ );
217
+ } else {
218
+ //if ( !$is_empty )
219
+ $form[] = array(
220
+ '#type' => 'markup',
221
+ '#markup' => '<span class="js-wpt-credfile-preview wpt-credfile-preview">' . $preview_file . '</span>',
222
+ );
223
+ }
224
+ return $form;
225
+ }
226
+
227
+ }
embedded/toolset/toolset-common/toolset-forms/classes/class.credimage.php ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ require_once 'class.credfile.php';
3
+ require_once 'class.image.php';
4
+
5
+ /**
6
+ * Description of class
7
+ *
8
+ * @author Srdjan
9
+ *
10
+ *
11
+ */
12
+ class WPToolset_Field_Credimage extends WPToolset_Field_Credfile
13
+ {
14
+ public function metaform()
15
+ {
16
+ //TODO: check if this getValidationData does not break PHP Validation _cakePHP required file.
17
+ $validation = $this->getValidationData();
18
+ $validation = WPToolset_Field_Image::addTypeValidation($validation);
19
+ $this->setValidationData($validation);
20
+ return parent::metaform();
21
+ }
22
+ }
embedded/toolset/toolset-common/toolset-forms/classes/class.credvideo.php ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ require_once 'class.credfile.php';
3
+ require_once 'class.video.php';
4
+
5
+ /**
6
+ * Description of class
7
+ *
8
+ * @author Srdjan
9
+ *
10
+ *
11
+ */
12
+ class WPToolset_Field_Credvideo extends WPToolset_Field_Credfile
13
+ {
14
+ protected $_settings = array('min_wp_version' => '3.6');
15
+
16
+ public function metaform()
17
+ {
18
+ //TODO: check if this getValidationData does not break PHP Validation _cakePHP required file.
19
+ $validation = $this->getValidationData();
20
+ $validation = WPToolset_Field_Video::addTypeValidation($validation);
21
+ $this->setValidationData($validation);
22
+ return parent::metaform();
23
+ }
24
+ }
embedded/toolset/toolset-common/toolset-forms/classes/class.date.php ADDED
@@ -0,0 +1,418 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ require_once 'class.field_factory.php';
4
+ if (!function_exists('adodb_mktime')) {
5
+ require_once WPTOOLSET_FORMS_ABSPATH . '/lib/adodb-time.inc.php';
6
+ }
7
+
8
+ /**
9
+ * Description of class
10
+ *
11
+ * @author Srdjan
12
+ */
13
+ class WPToolset_Field_Date extends FieldFactory {
14
+
15
+ // 15/10/1582 00:00 - 31/12/3000 23:59
16
+ protected static $_mintimestamp = -12219292800, $_maxtimestamp = 32535215940;
17
+
18
+ public function init() {
19
+ $this->set_placeholder_as_attribute();
20
+ }
21
+
22
+ public static function registerScripts() {
23
+
24
+ }
25
+
26
+ public static function registerStyles() {
27
+
28
+ }
29
+
30
+ public static function addFilters() {
31
+ if (has_filter('wptoolset_validation_value_date', array('WPToolset_Field_Date', 'filterValidationValue'))) {
32
+ return;
33
+ }
34
+ // Filter validation
35
+ add_filter('wptoolset_validation_value_date', array('WPToolset_Field_Date', 'filterValidationValue'));
36
+ add_filter('wptoolset_validation_rule_js', array('WPToolset_Field_Date', 'filterValidationRuleJs'));
37
+ add_filter('wptoolset_validation_args_php', array('WPToolset_Field_Date', 'filterValidationArgsPhp'), 10, 2);
38
+ // Filter conditional
39
+ add_filter('wptoolset_conditional_args_php', array('WPToolset_Field_Date', 'filterConditionalArgsPhp'), 10, 2);
40
+ add_filter('wptoolset_conditional_value_php', array('WPToolset_Field_Date', 'filterConditionalValuePhp'), 10, 2);
41
+ add_filter('wptoolset_conditional_args_js', array('WPToolset_Field_Date', 'filterConditionalArgsJs'), 10, 2);
42
+ }
43
+
44
+ public function enqueueScripts() {
45
+
46
+ }
47
+
48
+ public function enqueueStyles() {
49
+
50
+ }
51
+
52
+ public function metaform() {
53
+ $time_value = $this->getValue();
54
+ $datepicker = $hour = $minute = null;
55
+ $timestamp = null;
56
+ $readonly = false;
57
+ if (is_admin()) {
58
+ if (is_array($time_value) && array_key_exists('timestamp', $time_value) && $time_value) {
59
+ $timestamp = $time_value['timestamp'];
60
+ }
61
+ $datepicker = self::timetodate($timestamp);
62
+ $hour = self::timetodate($timestamp, 'H');
63
+ $minute = self::timetodate($timestamp, 'i');
64
+ } else {
65
+ // We are on a CRED form, on frontend, so getVAlue returns nothing or a string or an array of the kind array( 'datepicker' =>, 'hour' =>, 'minute' => )
66
+ // Note that even if the array is passed, 'hour' and 'minute' will only be passed if there are any
67
+ if (!empty($time_value)) {
68
+ if (is_array($time_value)) {
69
+ if (isset($time_value['timestamp']) && is_numeric($time_value['timestamp']) && self::_isTimestampInRange($time_value['timestamp'])) {
70
+ $timestamp = $time_value['timestamp'];
71
+ $datepicker = self::timetodate($timestamp);
72
+ } elseif (isset($time_value['datepicker']) && $time_value['datepicker'] !== false && is_numeric($time_value['datepicker']) && self::_isTimestampInRange($time_value['datepicker'])) {
73
+ $timestamp = $time_value['datepicker'];
74
+ $datepicker = self::timetodate($timestamp);
75
+ }
76
+ $hour = self::timetodate($timestamp, 'H');
77
+ if (isset($time_value['hour']) && is_numeric($time_value['hour'])) {
78
+ $hour = $time_value['hour'];
79
+ }
80
+ $minute = self::timetodate($timestamp, 'i');
81
+ if (isset($time_value['minute']) && is_numeric($time_value['minute'])) {
82
+ $minute = $time_value['minute'];
83
+ }
84
+ } else {
85
+ if (is_numeric($time_value) && self::_isTimestampInRange($time_value)) {
86
+ $timestamp = $time_value;
87
+ $datepicker = self::timetodate($timestamp);
88
+ } else {
89
+ $timestamp = self::strtotime($time_value);
90
+ $datepicker = $time_value;
91
+ }
92
+ $hour = self::timetodate($timestamp, 'H');
93
+ $minute = self::timetodate($timestamp, 'i');
94
+ }
95
+ }
96
+ }
97
+ $data = $this->getData();
98
+
99
+ if (!$timestamp) {
100
+ // If there is no timestamp, we need to make it an empty string
101
+ // A false value would render the hidden field with a value of 1
102
+ $timestamp = '';
103
+ $datepicker = null;
104
+ }
105
+
106
+ $def_class = 'js-wpt-date';
107
+
108
+ $def_class_aux = 'js-wpt-date-auxiliar';
109
+
110
+ if (isset($data['attribute']) && isset($data['attribute']['readonly']) && $data['attribute']['readonly'] == 'readonly') {
111
+ $def_class .= ' js-wpv-date-readonly';
112
+ $def_class_aux .= ' js-wpt-date-readonly';
113
+ $readonly = true;
114
+ }
115
+
116
+ $form = array();
117
+
118
+ $validate = $this->getValidationData();
119
+ $title = $this->getTitle();
120
+
121
+ if (isset($validate['required']) && !empty($title)) {
122
+ // Asterisk
123
+ $title .= '&#42;';
124
+ }
125
+
126
+ $attr_visible = array(
127
+ 'class' => $def_class,
128
+ 'style' => 'display:inline;width:150px;position:relative;',
129
+ 'readonly' => 'readonly',
130
+ 'title' => esc_attr(__('Select', 'wpv-views')) . " Date"
131
+ );
132
+ $attr_hidden = array('class' => $def_class_aux, 'data-ts' => $timestamp, 'data-wpt-type' => 'date');
133
+
134
+ if (isset($data['attribute']) && isset($data['attribute']['placeholder'])) {
135
+ $attr_visible['placeholder'] = $data['attribute']['placeholder'];
136
+ }
137
+
138
+ $form[] = array(
139
+ '#type' => 'textfield',
140
+ '#title' => $title,
141
+ '#description' => $this->getDescription(),
142
+ '#attributes' => $attr_visible,
143
+ '#name' => $this->getName() . '[display-only]',
144
+ '#value' => $datepicker,
145
+ '#inline' => true,
146
+ );
147
+ $form[] = array(
148
+ '#type' => 'hidden',
149
+ '#title' => $title,
150
+ '#attributes' => $attr_hidden,
151
+ '#name' => $this->getName() . '[datepicker]',
152
+ '#value' => $timestamp,
153
+ '#validate' => $validate,
154
+ '#repetitive' => $this->isRepetitive(),
155
+ );
156
+
157
+ /*
158
+ // This was the old implementaton
159
+ // We have implemented the above one because we need a hidden field to hold the timestamp
160
+ // And the visible text input field to display the date string to the user
161
+ $form[] = array(
162
+ '#type' => 'textfield',
163
+ '#title' => $this->getTitle(),
164
+ '#attributes' => array('class' => $def_class, 'style' => 'width:150px;'),
165
+ '#name' => $this->getName() . '[datepicker]',
166
+ '#value' => $timestamp,
167
+ '#validate' => $this->getValidationData(),
168
+ '#repetitive' => $this->isRepetitive(),
169
+ );
170
+ */
171
+ if (!empty($data['add_time'])) {
172
+ // Shared attributes
173
+ $attributes_hour_minute = array();
174
+ if ($readonly) {
175
+ $attributes_hour_minute['disabled'] = 'disabled';
176
+ }
177
+ if (array_key_exists('use_bootstrap', $this->_data) && $this->_data['use_bootstrap']) {
178
+ $attributes_hour_minute['style'] = 'display:inline;width:auto;';
179
+ }
180
+
181
+ // Hour
182
+ $hours = 24;
183
+ $options = array();
184
+ for ($index = 0; $index < $hours; $index++) {
185
+ $prefix = $index < 10 ? '0' : '';
186
+ $options[$index] = array(
187
+ '#title' => $prefix . strval($index),
188
+ '#value' => $index,
189
+ );
190
+ }
191
+ $hour_element = array(
192
+ '#type' => 'select',
193
+ '#before' => '<span class="wpt-form-label">' . __('Hour', 'wpv-views') . '</span>',
194
+ '#options' => $options,
195
+ '#default_value' => $hour,
196
+ '#name' => $this->getName() . '[hour]',
197
+ '#inline' => true,
198
+ '#attributes' => array('title' => esc_attr(__('Select', 'wpv-views')) . " Date"),
199
+ );
200
+ if (!empty($attributes_hour_minute)) {
201
+ $hour_element['#attributes'] = $attributes_hour_minute;
202
+ }
203
+ $form[] = $hour_element;
204
+ // Minutes
205
+ $minutes = 60;
206
+ $options = array();
207
+ for ($index = 0; $index < $minutes; $index++) {
208
+ $prefix = $index < 10 ? '0' : '';
209
+ $options[$index] = array(
210
+ '#title' => $prefix . strval($index),
211
+ '#value' => $index,
212
+ );
213
+ }
214
+ $minute_element = array(
215
+ '#type' => 'select',
216
+ '#before' => '<span class="wpt-form-label">' . __('Minute', 'wpv-views') . '</span>',
217
+ '#options' => $options,
218
+ '#default_value' => $minute,
219
+ '#name' => $this->getName() . '[minute]',
220
+ '#inline' => true,
221
+ '#attributes' => array('title' => esc_attr(__('Select minute', 'wpv-views'))),
222
+ );
223
+ if (!empty($attributes_hour_minute)) {
224
+ $minute_element['#attributes'] = $attributes_hour_minute;
225
+ }
226
+ $form[] = $minute_element;
227
+ }
228
+
229
+ $form[] = array(
230
+ '#type' => 'markup',
231
+ '#inline' => true,
232
+ '#markup' => sprintf(
233
+ '<input type="button" class="button button-secondary js-wpt-date-clear wpt-date-clear" value="%s" %s/>', esc_attr(__('Clear', 'wpv-views')) . " Date",
234
+ /**
235
+ * show button if array is empty or timestamp in array is
236
+ * empty
237
+ */ (
238
+ empty($time_value) || !isset($time_value['timestamp']) || (isset($time_value['timestamp']) && empty($time_value['timestamp']))
239
+ ) ? 'style="display:none" ' : ''
240
+ ),
241
+ );
242
+ return $form;
243
+ }
244
+
245
+ public static function getDateFormat() {
246
+ return WPToolset_Field_Date_Scripts::getDateFormat();
247
+ }
248
+
249
+ protected function _dateToStrftime($format) {
250
+ $format = str_replace('d', '%d', $format);
251
+ $format = str_replace('D', '%a', $format);
252
+ $format = str_replace('j', '%e', $format);
253
+ $format = str_replace('l', '%A', $format);
254
+ $format = str_replace('N', '%u', $format);
255
+ $format = str_replace('w', '%w', $format);
256
+
257
+ $format = str_replace('W', '%W', $format);
258
+
259
+ $format = str_replace('F', '%B', $format);
260
+ $format = str_replace('m', '%m', $format);
261
+ $format = str_replace('M', '%b', $format);
262
+ $format = str_replace('n', '%m', $format);
263
+
264
+ $format = str_replace('o', '%g', $format);
265
+ $format = str_replace('Y', '%Y', $format);
266
+ $format = str_replace('y', '%y', $format);
267
+
268
+ return $format;
269
+ }
270
+
271
+ public static function filterValidationValue($value) {
272
+ /**
273
+ * validate fimestamp range is possible
274
+ */
275
+ if (isset($value['timestamp'])) {
276
+ return $value['timestamp'];
277
+ }
278
+ if (isset($value['datepicker'])) {
279
+ return $value['datepicker'];
280
+ }
281
+ return $value;
282
+ }
283
+
284
+ public static function filterValidationRuleJs($rule) {
285
+ if ($rule == 'date') {
286
+ return 'dateADODB_STAMP';
287
+ } else {
288
+ return $rule;
289
+ }
290
+ }
291
+
292
+ public static function filterValidationArgsPhp($args, $rule) {
293
+ if ($rule == 'date') {
294
+ return array('$value', self::getDateFormat());
295
+ }
296
+ return $args;
297
+ }
298
+
299
+ public static function filterConditionalArgsJs($args, $type) {
300
+ if ($type == 'date') {
301
+ foreach ($args as &$arg) {
302
+ if (!is_numeric($arg)) {
303
+ // Well it should be a numeric timestamp indeed
304
+ $arg = self::strtotime($arg);
305
+ }
306
+ }
307
+ }
308
+ return $args;
309
+ }
310
+
311
+ public static function filterConditionalArgsPhp($args, $type) {
312
+ if ($type == 'date') {
313
+ foreach ($args as &$arg) {
314
+ $arg = self::filterConditionalValuePhp($arg, $type);
315
+ }
316
+ }
317
+ return $args;
318
+ }
319
+
320
+ public static function filterConditionalValuePhp($value, $type) {
321
+ if ($type == 'date') {
322
+ if (!is_numeric($value)) {
323
+ // Well it should be a numeric timestamp indeed
324
+ $value = self::strtotime($value);
325
+ }
326
+ // Use timestamp with PHP
327
+ // Convert back/forward to have rounded timestamp (no H and i)
328
+ // TODO review this because we should not play with timestamps generated on adodb_xxx functions
329
+ //$value = self::strtotime( self::timetodate( $value ) );
330
+ }
331
+ return $value;
332
+ }
333
+
334
+ // We need to keep this for backwards compatibility
335
+ // Note that this function will only convert dates coming on a string:
336
+ // - in english
337
+ // - inside the valid PHP date range
338
+ // We are only using this when the value being checked is not a timestamp
339
+ // And we have tried to avoid that situation from happening
340
+ // But for old implementation, this happens for date conditions on conditional fields
341
+ public static function strtotime($value, $format = null) {
342
+ if (is_null($format)) {
343
+ $format = self::getDateFormat();
344
+ }
345
+ /**
346
+ * add exception to handle short year
347
+ */
348
+ if ('d/m/y' == $format) {
349
+ preg_match_all('/(\d{2})/', $value, $value);
350
+ $value[0][2] += $value[0][2] < 70 ? 2000 : 1900;
351
+ $value = implode('-', $value[0]);
352
+ }
353
+ if (strpos($format, 'd/m/Y') !== false) {
354
+ // strtotime requires a dash or dot separator to determine dd/mm/yyyy format
355
+ preg_match('/\d{2}\/\d{2}\/\d{4}/', $value, $matches);
356
+ if (!empty($matches)) {
357
+ foreach ($matches as $match) {
358
+ $value = str_replace($match, str_replace('/', '-', $match), $value);
359
+ }
360
+ }
361
+ }
362
+ try {
363
+ $date = new DateTime($value);
364
+ } catch (Exception $e) {
365
+ return false;
366
+ }
367
+ $timestamp = $date->format("U");
368
+ return self::_isTimestampInRange($timestamp) ? $timestamp : false;
369
+ }
370
+
371
+ // TODO review this because we should not play with timestamps generated on adodb_xxx functions
372
+ public static function timetodate($timestamp, $format = null) {
373
+ return WPToolset_Field_Date_Scripts::timetodate($timestamp, $format);
374
+ }
375
+
376
+ protected static function _isTimestampInRange($timestamp) {
377
+ return WPToolset_Field_Date_Scripts::_isTimestampInRange($timestamp);
378
+ }
379
+
380
+ /**
381
+ * DEPRECATED
382
+ *
383
+ * This is not used anymore
384
+ */
385
+ public static function timeIsValid($time) {
386
+ /*
387
+ * http://php.net/manual/en/function.strtotime.php
388
+ * The valid range of a timestamp is typically
389
+ * from Fri, 13 Dec 1901 20:45:54 UTC
390
+ * to Tue, 19 Jan 2038 03:14:07 UTC.
391
+ * (These are the dates that correspond to the minimum
392
+ * and maximum values for a 32-bit signed integer.)
393
+ * Additionally, not all platforms support negative timestamps,
394
+ * therefore your date range may be limited to no earlier than
395
+ * the Unix epoch.
396
+ * This means that e.g. dates prior to Jan 1, 1970 will not
397
+ * work on Windows, some Linux distributions,
398
+ * and a few other operating systems.
399
+ * PHP 5.1.0 and newer versions overcome this limitation though.
400
+ */
401
+ // MIN 'Jan 1, 1970' - 0 | Fri, 13 Dec 1901 20:45:54 UTC
402
+ $_min_time = self::timeNegativeSupported() ? -2147483646 : 0;
403
+ // MAX 'Tue, 19 Jan 2038 03:14:07 UTC' - 2147483647
404
+ $_max_time = 2147483647;
405
+
406
+ return is_numeric($time) && $_min_time <= intval($time) && intval($time) <= $_max_time;
407
+ }
408
+
409
+ /**
410
+ * DEPRECATED
411
+ *
412
+ * This is not used anymore
413
+ */
414
+ public static function timeNegativeSupported() {
415
+ return strtotime('Fri, 13 Dec 1950 20:45:54 UTC') === -601010046;
416
+ }
417
+
418
+ }
embedded/toolset/toolset-common/toolset-forms/classes/class.date.scripts.php ADDED
@@ -0,0 +1,190 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if (!function_exists('adodb_mktime')) {
3
+ require_once WPTOOLSET_FORMS_ABSPATH . '/lib/adodb-time.inc.php';
4
+ }
5
+
6
+ class WPToolset_Field_Date_Scripts
7
+ {
8
+
9
+ public static $_supported_date_formats = array(
10
+ 'F j, Y', //December 23, 2011
11
+ 'Y/m/d', // 2011/12/23
12
+ 'm/d/Y', // 12/23/2011
13
+ 'd/m/Y', // 23/22/2011
14
+ 'd/m/y', // 23/22/11
15
+ );
16
+
17
+ public $_supported_date_formats_text = array(
18
+ 'F j, Y' => 'Month dd, yyyy',
19
+ 'Y/m/d' => 'yyyy/mm/dd',
20
+ 'm/d/Y' => 'mm/dd/yyyy',
21
+ 'd/m/Y' => 'dd/mm/yyyy',
22
+ 'd/m/y' => 'dd/mm/yy',
23
+ );
24
+
25
+ // 15/10/1582 00:00 - 31/12/3000 23:59
26
+ protected static $_mintimestamp = -12219292800;
27
+ protected static $_maxtimestamp = 32535215940;
28
+
29
+ public function __construct()
30
+ {
31
+ global $pagenow;
32
+ if (
33
+ //for front-end
34
+ !is_admin() ||
35
+ //for edit group pages
36
+ ( ( isset($_GET['page']) && ($_GET['page'] == 'wpcf-edit-usermeta' || $_GET['page'] == 'wpcf-edit') ) ||
37
+ //for edit pages including profile pages
38
+ ($pagenow == 'profile.php' || $pagenow == 'post-new.php' || $pagenow == 'user-edit.php' || $pagenow == 'user-new.php' || $pagenow == 'post.php' || $pagenow == 'admin-ajax.php') && is_admin() ) ){
39
+ add_action( 'admin_enqueue_scripts', array( $this,'date_enqueue_scripts' ) );
40
+ if ( defined('CRED_FE_VERSION')) {
41
+ add_action( 'wp_enqueue_scripts', array( $this, 'date_enqueue_scripts' ) );
42
+ }
43
+ }
44
+ $this->localization_slug = false;
45
+ }
46
+
47
+ public function date_enqueue_scripts()
48
+ {
49
+ /**
50
+ * prevent load scripts on custom field group edit screen
51
+ */
52
+ if ( is_admin() ) {
53
+ $screen = get_current_screen();
54
+ if ( 'types_page_wpcf-edit' == $screen->id ) {
55
+ return;
56
+ }
57
+ }
58
+ /**
59
+ * styles
60
+ */
61
+ wp_register_style(
62
+ 'wptoolset-field-datepicker',
63
+ WPTOOLSET_FORMS_RELPATH . '/css/wpt-jquery-ui/jquery-ui-1.11.4.custom.css',
64
+ array(),
65
+ '1.11.4'
66
+ );
67
+
68
+ /**
69
+ * check first is wptoolset-forms registered?
70
+ */
71
+ if (!wp_script_is('wptoolset-forms', 'registered')) {
72
+ wp_register_script(
73
+ 'wptoolset-forms',
74
+ WPTOOLSET_FORMS_RELPATH . '/js/main.js',
75
+ array('jquery', 'underscore', 'suggest'),
76
+ WPTOOLSET_FORMS_VERSION,
77
+ true
78
+ );
79
+ }
80
+
81
+ /**
82
+ * scripts
83
+ */
84
+ wp_register_script(
85
+ 'wptoolset-field-date',
86
+ WPTOOLSET_FORMS_RELPATH . '/js/date.js',
87
+ array('jquery-ui-datepicker', 'wptoolset-forms'),
88
+ WPTOOLSET_FORMS_VERSION,
89
+ true
90
+ );
91
+ // Localize datepicker
92
+ if ( in_array( self::getDateFormat(), self::$_supported_date_formats ) ) {
93
+ /*
94
+ $locale = str_replace( '_', '-', strtolower( get_locale() ) );
95
+ $file = WPTOOLSET_FORMS_ABSPATH . '/js/i18n/jquery.ui.datepicker-' . $locale . '.js';
96
+ if ( file_exists( $file ) ) {
97
+ wp_register_script(
98
+ 'wptoolset-field-date-localized',
99
+ WPTOOLSET_FORMS_RELPATH . '/js/i18n/jquery.ui.datepicker-' . $locale . '.js',
100
+ array('jquery-ui-datepicker'),
101
+ WPTOOLSET_FORMS_VERSION,
102
+ true
103
+ );
104
+ }
105
+ */
106
+ $lang = get_locale();
107
+ $lang = str_replace('_', '-', $lang);
108
+ // TODO integrate this with WPML lang
109
+ if ( file_exists( WPTOOLSET_FORMS_ABSPATH . '/js/i18n/jquery.ui.datepicker-' . $lang . '.js' ) ) {
110
+ if ( !wp_script_is( 'jquery-ui-datepicker-local-' . $lang, 'registered' ) ) {
111
+ wp_register_script( 'jquery-ui-datepicker-local-' . $lang, WPTOOLSET_FORMS_RELPATH . '/js/i18n/jquery.ui.datepicker-' . $lang . '.js', array('jquery-ui-core', 'jquery', 'jquery-ui-datepicker'), WPTOOLSET_FORMS_VERSION, true );
112
+ $this->localization_slug = $lang;
113
+ }
114
+ } else {
115
+ $lang = substr($lang, 0, 2);
116
+ if ( file_exists( WPTOOLSET_FORMS_ABSPATH . '/js/i18n/jquery.ui.datepicker-' . $lang . '.js' ) ) {
117
+ if ( !wp_script_is( 'jquery-ui-datepicker-local-' . $lang, 'registered' ) ) {
118
+ wp_register_script( 'jquery-ui-datepicker-local-' . $lang, WPTOOLSET_FORMS_RELPATH . '/js/i18n/jquery.ui.datepicker-' . $lang . '.js', array('jquery-ui-core', 'jquery', 'jquery-ui-datepicker'), WPTOOLSET_FORMS_VERSION, true );
119
+ $this->localization_slug = $lang;
120
+ }
121
+ }
122
+ }
123
+ }
124
+ /**
125
+ * styles
126
+ */
127
+ wp_enqueue_style( 'wptoolset-field-datepicker' );
128
+ /**
129
+ * scripts
130
+ */
131
+ wp_enqueue_script( 'wptoolset-field-date' );
132
+ $date_format = self::getDateFormat();
133
+ $js_date_format = $this->_convertPhpToJs( $date_format );
134
+ $calendar_image = WPTOOLSET_FORMS_RELPATH . '/images/calendar.gif';
135
+ $calendar_image = apply_filters( 'wptoolset_filter_wptoolset_calendar_image', $calendar_image );
136
+ $calendar_image_readonly = WPTOOLSET_FORMS_RELPATH . '/images/calendar-readonly.gif';
137
+ $calendar_image_readonly = apply_filters( 'wptoolset_filter_wptoolset_calendar_image_readonly', $calendar_image_readonly );
138
+ $js_data = array(
139
+ 'buttonImage' => $calendar_image,
140
+ 'buttonText' => __( 'Select date', 'wpv-views' ),
141
+ 'dateFormat' => $js_date_format,
142
+ 'dateFormatPhp' => $date_format,
143
+ 'dateFormatNote' => esc_js( sprintf( __( 'Input format: %s', 'wpv-views' ), $date_format ) ),
144
+ 'yearMin' => intval( self::timetodate( self::$_mintimestamp, 'Y' ) ) + 1,
145
+ 'yearMax' => self::timetodate( self::$_maxtimestamp, 'Y' ),
146
+ 'ajaxurl' => admin_url('admin-ajax.php', null),
147
+ 'readonly' => esc_js( __( 'This is a read-only date input', 'wpv-views' ) ),
148
+ 'readonly_image' => $calendar_image_readonly,
149
+ );
150
+ wp_localize_script( 'wptoolset-field-date', 'wptDateData', $js_data );
151
+ if ( $this->localization_slug && !wp_script_is( 'jquery-ui-datepicker-local-' . $this->localization_slug ) ) {
152
+ wp_enqueue_script( 'jquery-ui-datepicker-local-' . $this->localization_slug );
153
+ }
154
+ }
155
+
156
+ protected function _convertPhpToJs( $date_format )
157
+ {
158
+ $date_format = str_replace( 'd', 'dd', $date_format );
159
+ $date_format = str_replace( 'j', 'd', $date_format );
160
+ $date_format = str_replace( 'l', 'DD', $date_format );
161
+ $date_format = str_replace( 'm', 'mm', $date_format );
162
+ $date_format = str_replace( 'n', 'm', $date_format );
163
+ $date_format = str_replace( 'F', 'MM', $date_format );
164
+ $date_format = str_replace( 'y', 'y', $date_format );
165
+ $date_format = str_replace( 'Y', 'yy', $date_format );
166
+
167
+ return $date_format;
168
+ }
169
+
170
+ public static function getDateFormat() {
171
+ $date_format = get_option( 'date_format' );
172
+ if ( !in_array( $date_format, self::$_supported_date_formats ) ) {
173
+ $date_format = 'F j, Y';
174
+ }
175
+ return $date_format;
176
+ }
177
+
178
+ public static function timetodate( $timestamp, $format = null )
179
+ {
180
+ if ( is_null( $format ) ) {
181
+ $format = self::getDateFormat();
182
+ }
183
+ return self::_isTimestampInRange( $timestamp ) ? @adodb_date( $format, $timestamp ) : false;
184
+ }
185
+
186
+ public static function _isTimestampInRange( $timestamp )
187
+ {
188
+ return self::$_mintimestamp <= $timestamp && $timestamp <= self::$_maxtimestamp;
189
+ }
190
+ }
embedded/toolset/toolset-common/toolset-forms/classes/class.eforms.php ADDED
@@ -0,0 +1,1228 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /* Copyright 2011 enlimbo lancers (email : lancers@enlimbo.net)
4
+
5
+ This program is free software; you can redistribute it and/or
6
+ modify it under the terms of the GNU General Public License
7
+ as published by the Free Software Foundation; either version 2
8
+ of the License, or (at your option) any later version.
9
+
10
+ This program is distributed in the hope that it will be useful,
11
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ GNU General Public License for more details.
14
+
15
+ You should have received a copy of the GNU General Public License
16
+ along with this program; if not, write to the Free Software
17
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18
+ */
19
+
20
+ /**
21
+ * Enlimbo Forms class for form creation
22
+ *
23
+ * @package Enlimbo
24
+ * @subpackage Forms
25
+ * @copyright enlimbo lancers 2012
26
+ * @license GPLv2 or later
27
+ * @version 1.1
28
+ * @link http://enlimbo.net/forms
29
+ * @author srdjan <srdjan@enlimbo.net>
30
+ *
31
+ *
32
+ */
33
+ /*
34
+ Element attributes
35
+
36
+ General rules when adding attributes to an element using strings in chunks
37
+ * always start the chunk with a space and do not end the chunk with another space
38
+ * mind the closing tags and add a space when needed
39
+ */
40
+ class Enlimbo_Forms {
41
+
42
+ /**
43
+ * @var string
44
+ */
45
+ private $_id;
46
+
47
+ /**
48
+ * @var array
49
+ */
50
+ private $_errors = array();
51
+
52
+ /**
53
+ * @var array
54
+ */
55
+ private $_elements = array();
56
+
57
+ /**
58
+ * @var array
59
+ */
60
+ private $_count = array();
61
+
62
+ /**
63
+ * @var string
64
+ */
65
+ public $css_class = 'wpt-form';
66
+
67
+ /**
68
+ * @var string
69
+ */
70
+ private $_validationFunc = '';
71
+
72
+ /**
73
+ * @var array
74
+ */
75
+ public $form_settings = array();
76
+
77
+ public function __construct($id) {
78
+ /**
79
+ * default settings
80
+ */
81
+ $this->form_settings = array(
82
+ 'has_media_button' => true,
83
+ 'use_bootstrap' => false,
84
+ );
85
+ $this->_id = $id;
86
+ if (!is_admin() || (defined('DOING_AJAX') && DOING_AJAX)) {
87
+ // TODO check also doing_ajax as this gives false positives
88
+ $cred_form_id = preg_replace('/^cred_form_(\d+)_\d+$/', "$1", $this->_id);
89
+ $form_settings = get_post_meta($cred_form_id, '_cred_form_settings', true);
90
+ if (isset($form_settings->form)) {
91
+ $this->form_settings = $form_settings->form;
92
+ }
93
+ unset($form_settings);
94
+ /**
95
+ * check CRED setting for bootstrap: only on frontend
96
+ */
97
+ $cred_cred_settings = get_option('cred_cred_settings');
98
+ if (is_array($cred_cred_settings)) {
99
+ $this->form_settings['use_bootstrap'] = array_key_exists('use_bootstrap', $cred_cred_settings) && $cred_cred_settings['use_bootstrap'];
100
+ }
101
+ }
102
+ }
103
+
104
+ /**
105
+ * Auto handler
106
+ *
107
+ * Renders.
108
+ *
109
+ * @param array $element
110
+ * @return HTML formatted output
111
+ */
112
+ public function autoHandle($id, $form) {
113
+ // Auto-add nonce field
114
+ $form['nonce'] = array(
115
+ '#type' => 'hidden',
116
+ '#name' => '_nonce',
117
+ '#value' => md5($id),
118
+ );
119
+
120
+ $this->_id = $id;
121
+ $this->_elements = $form;
122
+
123
+ // get submitted data
124
+ if ($this->isSubmitted()) {
125
+
126
+ // check if errors (validation)
127
+ $this->validate($this->_elements);
128
+
129
+ // callback
130
+ if (empty($this->_errors)) {
131
+
132
+ if (isset($form['#form']['callback'])) {
133
+ if (is_array($form['#form']['callback'])) {
134
+ foreach ($form['#form']['callback'] as $callback) {
135
+ if (is_callable($callback)) {
136
+ call_user_func($callback, $this);
137
+ }
138
+ }
139
+ } else {
140
+ if (is_callable($form['#form']['callback'])) {
141
+ call_user_func($form['#form']['callback'], $this);
142
+ }
143
+ }
144
+ }
145
+ // Maybe triggered by callback function
146
+ if (empty($this->_errors)) {
147
+ // redirect
148
+ if (!isset($form['#form']['redirection'])) {
149
+ header('Location: ' . $_SERVER['REQUEST_URI']);
150
+ } else if ($form['#form']['redirection'] != false) {
151
+ header('Location: ' . $form['#form']['redirection']);
152
+ }
153
+ }
154
+ }
155
+ }
156
+ }
157
+
158
+ /**
159
+ * Checks if form is submitted.
160
+ *
161
+ * @param type $id
162
+ * @return type
163
+ */
164
+ public function isSubmitted($id = '') {
165
+ if (empty($id)) {
166
+ $id = $this->_id;
167
+ }
168
+ return (isset($_REQUEST['_nonce']) && md5($_REQUEST['_nonce']) == $id);
169
+ }
170
+
171
+ /**
172
+ * Sets validation function.
173
+ *
174
+ * @param type $class
175
+ */
176
+ // public function setValidationFunc($func)
177
+ // {
178
+ // $this->_validationFunc = $func;
179
+ // }
180
+
181
+ /**
182
+ * Loops over elements and validates them.
183
+ *
184
+ * @param type $elements
185
+ */
186
+ public function validate(&$elements) {
187
+ foreach ($elements as $key => &$element) {
188
+ if (!isset($element['#type']) || !$this->_isValidType($element['#type'])) {
189
+ continue;
190
+ }
191
+ if ($element['#type'] != 'fieldset') {
192
+ if (isset($element['#name']) && !in_array($element['#type'], array('submit', 'reset'))) {
193
+ if ($this->isSubmitted()) {
194
+ // Set submitted data
195
+ if (!in_array($element['#type'], array('checkboxes')) && empty($element['#forced_value'])) {
196
+ $element['#value'] = $this->getSubmittedData($element);
197
+ } else if (!empty($element['#options']) && empty($element['#forced_value'])) {
198
+ foreach ($element['#options'] as $option_key => $option) {
199
+ $option['#type'] = 'checkbox';
200
+ $element['#options'][$option_key]['#value'] = $this->getSubmittedData($option);
201
+ }
202
+ }
203
+ }
204
+ }
205
+ // Validate
206
+ if (isset($element['#validate'])) {
207
+ $this->validateElement($element);
208
+ }
209
+ } else if (isset($element['#type']) && $element['#type'] == 'fieldset') {
210
+ $this->validate($element);
211
+ } else if (is_array($element)) {
212
+ $this->validate($element);
213
+ }
214
+ }
215
+ }
216
+
217
+ /**
218
+ * Validates element.
219
+ *
220
+ * @param type $element
221
+ */
222
+ public function validateElement(&$element) {
223
+ $value = isset($element['#value']) ? $element['#value'] : null;
224
+ if (is_null($value) && isset($element['#default_value'])) {
225
+ $value = $element['#default_value'];
226
+ }
227
+ $element = apply_filters('wptoolset_form_' . $this->_id . '_validate_field', $element, $value);
228
+ if (isset($element['error'])) {
229
+ $this->_errors = true;
230
+ $_errors = $element['error']->get_error_data();
231
+ $element['#error'] = $_errors[0];
232
+ }
233
+ }
234
+
235
+ /**
236
+ * Checks if there are errors.
237
+ *
238
+ * @return type
239
+ */
240
+ public function isError() {
241
+ return $this->_errors;
242
+ }
243
+
244
+ /**
245
+ * Sets errors to true.
246
+ */
247
+ public function triggerError() {
248
+ $this->_errors = true;
249
+ }
250
+
251
+ /**
252
+ * Renders form.
253
+ *
254
+ * @return type
255
+ */
256
+ public function renderForm() {
257
+ // loop over elements and render them
258
+ return $this->renderElements($this->_elements);
259
+ }
260
+
261
+ /**
262
+ * Counts element types.
263
+ *
264
+ * @param type $type
265
+ * @return type
266
+ */
267
+ private function _count($type) {
268
+ if (!isset($this->_count[$type])) {
269
+ $this->_count[$type] = 0;
270
+ }
271
+ $this->_count[$type] += 1;
272
+ return $this->_count[$type];
273
+ }
274
+
275
+ /**
276
+ * Check if element is of valid type
277
+ *
278
+ * @param string $type
279
+ * @return boolean
280
+ */
281
+ private function _isValidType($type) {
282
+ return in_array($type, array('select', 'checkboxes', 'checkbox', 'radios',
283
+ 'radio', 'textfield', 'textarea', 'file', 'submit', 'reset',
284
+ 'hidden', 'fieldset', 'markup', 'button', 'password'));
285
+ }
286
+
287
+ /**
288
+ * Renders elements.
289
+ *
290
+ * @param type $elements
291
+ * @return type
292
+ */
293
+ public function renderElements($elements) {
294
+ $output = '';
295
+ if (!isset($elements))
296
+ return $output;
297
+ foreach ($elements as $key => $element) {
298
+ if (!isset($element['#type']) || !$this->_isValidType($element['#type'])) {
299
+ continue;
300
+ }
301
+ if ($element['#type'] != 'fieldset') {
302
+
303
+ /**
304
+ * Temporary fixing validation for checkbox/radios/skype because _cakeValidation is not working for thats
305
+ * https://icanlocalize.basecamphq.com/projects/7393061-toolset/todo_items/186243370/comments
306
+ */
307
+ if (!is_admin()) {
308
+ if ($element['#type'] == 'radios') {
309
+ if (isset($element['#error'])) {
310
+ if (isset($element['#options']) && count($element['#options']) > 0 && !isset($element['#options'][0]['#error']))
311
+ $element['#options'][0]['#error'] = $element['#error'];
312
+ }
313
+ }
314
+ }
315
+ //##################################################################################################
316
+
317
+ $output .= $this->renderElement($element);
318
+ } else if (isset($element['#type']) && $element['#type'] == 'fieldset') {
319
+ $buffer = $this->renderElements($element);
320
+ $output .= $this->fieldset($element, 'wrap', $buffer);
321
+ } else if (is_array($element)) {
322
+ $output .= $this->renderElements($element);
323
+ }
324
+ }
325
+ return $output;
326
+ }
327
+
328
+ /**
329
+ * Renders element.
330
+ *
331
+ * Depending on element type, it calls class methods.
332
+ *
333
+ * @param array $element
334
+ * @return HTML formatted output
335
+ */
336
+ public function renderElement($element) {
337
+ $method = $element['#type'];
338
+ if (!isset($element['#name']) && !in_array($element['#type'], array('markup', 'checkboxes'))) {
339
+ if (!isset($element['#attributes']['name'])) {
340
+ return '#name or #attributes[\'name\'] required!';
341
+ } else {
342
+ $element['#name'] = $element['#attributes']['name'];
343
+ }
344
+ }
345
+ if (is_callable(array($this, $method))) {
346
+ $custom_field_title = '';
347
+ if (isset($element['#title']) && !empty($element['#title'])) {
348
+ $custom_field_title = $element['#title'];
349
+ }
350
+
351
+ if (empty($custom_field_title) && isset($element['#name']) && !empty($element['#name'])) {
352
+ $custom_field_title = $element['#name'];
353
+ }
354
+ if (!isset($element['#id'])) {
355
+ if (isset($element['#attributes']['id'])) {
356
+ $element['#id'] = $element['#attributes']['id'];
357
+ } else {
358
+ $_id = isset($this->_id) ? $this->_id . '-' : '';
359
+ $element['#id'] = "{$_id}{$element['#type']}-"
360
+ . $this->_count($element['#type']) . '-' . time();
361
+ }
362
+ }
363
+
364
+ if (isset($this->_errors[$element['#id']])) {
365
+ $element['#error'] = $this->_errors[$element['#id']];
366
+ }
367
+ // Add JS validation
368
+ if (!empty($element['#validate'])) {
369
+ if (isset($element['#validate']['required']) && !empty($element['#title'])) {
370
+ // Asterisk
371
+ $element['#title'] .= '&#42;';
372
+ }
373
+ $element['#attributes']['data-wpt-validate'] = esc_html(self::json_encode(apply_filters('wptoolset_forms_field_js_validation_data_' . $this->_id, $element['#validate'])));
374
+ $element['#attributes']['data-wpt-field-title'] = esc_js($custom_field_title);
375
+ }
376
+ if ($element['#type'] == 'radios' && !empty($element['#options'])) {
377
+ foreach ($element['#options'] as &$option) {
378
+ if (!empty($option['#validate'])) {
379
+ $option['#attributes']['data-wpt-validate'] = esc_html(self::json_encode(apply_filters('wptoolset_forms_field_js_validation_data_' . $this->_id, $option['#validate'])));
380
+ $option['#attributes']['data-wpt-field-title'] = esc_js($custom_field_title);
381
+ }
382
+ }
383
+ }
384
+ /**
385
+ * WPML - lock CF is has option "copy from original".
386
+ */
387
+ if (is_admin() && function_exists('wpcf_wpml_field_is_copied') && wpcf_wpml_field_is_copied($element)) {
388
+ $element['#title'] .= sprintf(
389
+ '<img src="%s/images/locked.png" alt="%s" title="%s" style="position:relative;left:2px;top:2px;" />', WPCF_EMBEDDED_RES_RELPATH, __('This field is locked for editing because WPML will copy its value from the original language.', 'wpcf'), __('This field is locked for editing because WPML will copy its value from the original language.', 'wpcf')
390
+ );
391
+ $element['#attributes']['readonly'] = true;
392
+ }
393
+ return $this->{$method}($element);
394
+ }
395
+ }
396
+
397
+ /**
398
+ * Sets other element attributes.
399
+ *
400
+ * @param array $element
401
+ * @return string
402
+ */
403
+ private function _setElementAttributes($element) {
404
+ $attributes = '';
405
+
406
+ $classes = array();
407
+ $classes[] = $this->css_class . '-' . $element['#type'];
408
+ $classes[] = 'form-' . $element['#type'];
409
+
410
+ if ($this->form_settings['use_bootstrap']) {
411
+ switch ($element['#type']) {
412
+ case 'hidden':
413
+ case 'button':
414
+ case 'submit':
415
+ case 'radio':
416
+ case 'checkbox':
417
+ case 'file':
418
+ //https://onthegosystems.myjetbrains.com/youtrack/issue/cred-162
419
+ case 'option':
420
+ break;
421
+ default:
422
+ $classes[] = 'form-control';
423
+ }
424
+ } else {
425
+ if ('hidden' != $element['#type']) {
426
+ $classes[] = $element['#type'];
427
+ }
428
+ }
429
+
430
+ if (isset($element['#attributes']) && !empty($element['#attributes'])
431
+ ) {
432
+ if (isset($element['#attributes']['class'])) {
433
+ $element['#attributes']['class'] .= ' ' . implode(' ', $classes);
434
+ } else {
435
+ $element['#attributes']['class'] = implode(' ', $classes);
436
+ }
437
+ } else {
438
+ $element['#attributes'] = array(
439
+ 'class' => implode(' ', $classes)
440
+ );
441
+ }
442
+
443
+
444
+ foreach ($element['#attributes'] as $attribute => $value) {
445
+ // Prevent undesired elements
446
+ if (in_array($attribute, array('id', 'name'))) {
447
+ continue;
448
+ }
449
+ // Don't set disabled for checkbox
450
+ if ($attribute == 'disabled' && $element['#type'] == 'checkbox') {
451
+ continue;
452
+ }
453
+ // Set return string
454
+ $attributes .= ' ' . $attribute . '="' . $value . '"';
455
+ }
456
+
457
+ return $attributes;
458
+ }
459
+
460
+ /**
461
+ * Sets render elements.
462
+ *
463
+ * @param array $element
464
+ */
465
+ private function _setRender($element) {
466
+ if (!isset($element['#id'])) {
467
+ if (isset($element['#attributes']['id'])) {
468
+ $element['#id'] = $element['#attributes']['id'];
469
+ } else {
470
+ $element['#id'] = 'form-' . mt_rand();
471
+ }
472
+ }
473
+ $element['_attributes_string'] = $this->_setElementAttributes($element);
474
+ $element['_render'] = array();
475
+ $element['_render']['prefix'] = isset($element['#prefix']) ? $element['#prefix'] . "\r\n" : '';
476
+ $element['_render']['suffix'] = isset($element['#suffix']) ? $element['#suffix'] . "\r\n" : '';
477
+ $element['_render']['before'] = isset($element['#before']) ? $element['#before'] . "\r\n" : '';
478
+ $element['_render']['after'] = isset($element['#after']) ? $element['#after'] . "\r\n" : '';
479
+ $element['_render']['title'] = $this->_setElementTitle($element);
480
+ $element['_render']['description'] = isset($element['#description']) ? $this->_setElementDescription($element) : '';
481
+ $element['_render']['error'] = $this->renderError($element) . "\r\n";
482
+ /**
483
+ * label
484
+ */
485
+ $element['_render']['label'] = '';
486
+ if (isset($element['#title'])) {
487
+ $classes = array();
488
+ $classes[] = sprintf('%s-label', $this->css_class);
489
+ $classes[] = sprintf('%s-%s-label', $this->css_class, $element['#type']);
490
+ if ($this->form_settings['use_bootstrap']) {
491
+ switch ($element['#type']) {
492
+ case 'checkbox':
493
+ case 'radio':
494
+ $classes[] = 'control-label';
495
+ break;
496
+ }
497
+ }
498
+ $element['_render']['label'] .= sprintf(
499
+ '<label class="%s" for="%s">', implode(' ', $classes), $element['#id']
500
+ );
501
+ $element['_render']['label'] .= stripslashes($element['#title']);
502
+ $element['_render']['label'] .= '</label>';
503
+ }
504
+ return $element;
505
+ }
506
+
507
+ /**
508
+ * Applies pattern to output.
509
+ *
510
+ * Pass element property #pattern to get custom renedered element.
511
+ *
512
+ * @param array $pattern
513
+ * Accepts: <prefix><suffix><label><title><desription><error>
514
+ * @param array $element
515
+ */
516
+ private function _pattern($pattern, $element) {
517
+ $pattern = strtolower($pattern);
518
+ foreach ($element['_render'] as $key => $value) {
519
+ $pattern = str_replace('<' . strtolower($key) . '>', $value, $pattern);
520
+ }
521
+ return $pattern;
522
+ }
523
+
524
+ /**
525
+ * Wrapps element in <div></div>.
526
+ *
527
+ * @param arrat $element
528
+ * @param string $output
529
+ * @return string
530
+ */
531
+ private function _wrapElement($element, $output) {
532
+ if (!empty($element['#inline'])) {
533
+ return $output;
534
+ }
535
+ $classes = array();
536
+ $classes[] = 'form-item';
537
+ $classes[] = 'form-item-' . $element['#type'];
538
+ $classes[] = $this->css_class . '-item';
539
+ $classes[] = $this->css_class . '-item-' . $element['#type'];
540
+ if ($this->form_settings['use_bootstrap']) {
541
+ $classes[] = 'form-group';
542
+ }
543
+ if (preg_match('/_hidden$/', $element['#id']) && !is_admin()) {
544
+ $classes[] = 'wpt-form-hide-container';
545
+ }
546
+ if (is_admin()) {
547
+ return sprintf(
548
+ '<div id="%s-wrapper" class="%s">%s</div>', $element['#id'], implode(' ', $classes), $output
549
+ );
550
+ }
551
+ return $output;
552
+ }
553
+
554
+ /**
555
+ * Returns HTML formatted output for element's title.
556
+ *
557
+ * @param string $element
558
+ * @return string
559
+ */
560
+ private function _setElementTitle($element) {
561
+ $output = '';
562
+ if (isset($element['#title'])) {
563
+ $output .= '<div class="title '
564
+ . $this->css_class . '-title '
565
+ . $this->css_class . '-title-' . $element['#type'] . ' '
566
+ . 'title-' . $element['#type'] . '">'
567
+ . stripslashes($element['#title'])
568
+ . "</div>\r\n";
569
+ }
570
+ return $output;
571
+ }
572
+
573
+ /**
574
+ * Returns HTML formatted output for element's description.
575
+ *
576
+ * @param array $element
577
+ * @return string
578
+ */
579
+ private function _setElementDescription($element) {
580
+ if (empty($element['#description']))
581
+ return '';
582
+ $element['#description'] = stripslashes($element['#description']);
583
+ $output = "\r\n"
584
+ . '<div class="description '
585
+ . $this->css_class . '-description '
586
+ . $this->css_class . '-description-' . $element['#type'] . ' '
587
+ . 'description-' . $element['#type'] . '">'
588
+ . $element['#description'] . "</div>\r\n";
589
+ return $output;
590
+ }
591
+
592
+ /**
593
+ * Returns HTML formatted element's error message.
594
+ *
595
+ * Pass #supress_errors in #form element to avoid error rendering.
596
+ *
597
+ * @param array $element
598
+ * @return string
599
+ */
600
+ public function renderError($element) {
601
+ if (!isset($element['#error'])) {
602
+ return '';
603
+ }
604
+ $output = '<label class="' . $this->css_class . '-error" for="'
605
+ . $element['#id'] . '" generated="true">'
606
+ . $element['#error'] . '</label>' . "\r\n";
607
+ // $output = '<div class="form-error '
608
+ // . $this->css_class . '-error '
609
+ // . $this->css_class . '-form-error '
610
+ // . $this->css_class . '-' . $element['#type'] . '-error '
611
+ // . $element['#type'] . '-error form-error-label'
612
+ // . '">' . $element['#error'] . '</div>'
613
+ // . "\r\n";
614
+ return $output;
615
+ }
616
+
617
+ /**
618
+ * Returns HTML formatted output for fieldset.
619
+ *
620
+ * @param array $element
621
+ * @param string $action open|close|wrap
622
+ * @param string $wrap_content HTML formatted output of child elements
623
+ * @return string
624
+ */
625
+ public function fieldset($element, $action = 'open', $wrap_content = '') {
626
+ $collapsible_open = '<div class="fieldset-wrapper">';
627
+ $collapsible_close = '</div>';
628
+ $legend_class = '';
629
+ if (!isset($element['#id'])) {
630
+ $element['#id'] = 'fieldset-' . $this->_count('fieldset');
631
+ }
632
+ if (!isset($element['_attributes_string'])) {
633
+ $element['_attributes_string'] = $this->_setElementAttributes($element);
634
+ }
635
+ if ((isset($element['#collapsible']) && $element['#collapsible']) || (isset($element['#collapsed']) && $element['#collapsed'])) {
636
+ $collapsible_open = '<div class="collapsible fieldset-wrapper">';
637
+ $collapsible_close = '</div>';
638
+ $legend_class = ' class="legend-expanded"';
639
+ }
640
+ if (isset($element['#collapsed']) && $element['#collapsed']) {
641
+ $collapsible_open = str_replace('class="', 'class="collapsed ', $collapsible_open);
642
+ $legend_class = ' class="legend-collapsed"';
643
+ }
644
+ $output = '';
645
+ switch ($action) {
646
+ case 'close':
647
+ $output .= $collapsible_close . "</fieldset>\r\n";
648
+ $output .= isset($element['#suffix']) ? $element['#suffix']
649
+ . "\r\n" : '';
650
+ $output .= "\n\r";
651
+ break;
652
+
653
+ case 'open':
654
+ $output .= $collapsible_open;
655
+ $output .= isset($element['#prefix']) ? $element['#prefix']
656
+ . "\r\n" : '';
657
+ $output .= '<fieldset' . $element['_attributes_string']
658
+ . ' id="' . $element['#id'] . '">' . "\r\n";
659
+ $output .= isset($element['#title']) ? '<legend'
660
+ . $legend_class . '>'
661
+ . stripslashes($element['#title'])
662
+ . "</legend>\r\n" : '';
663
+ $output .=
664
+ isset($element['#description']) ? $this->_setElementDescription($element) : '';
665
+ $output .= "\n\r";
666
+ break;
667
+
668
+ case 'wrap':
669
+ if (!empty($wrap_content)) {
670
+ $output .= isset($element['#prefix']) ? $element['#prefix'] : '';
671
+ $output .= '<fieldset' . $element['_attributes_string']
672
+ . ' id="' . $element['#id'] . '">' . "\r\n";
673
+ $output .= '<legend' . $legend_class . '>'
674
+ . stripslashes($element['#title'])
675
+ . "</legend>\r\n"
676
+ . $collapsible_open;
677
+ $output .= isset($element['#description']) ? $this->_setElementDescription($element) : '';
678
+ $output .= $wrap_content . $collapsible_close
679
+ . "</fieldset>\r\n";
680
+ $output .=
681
+ isset($element['#suffix']) ? $element['#suffix'] : '';
682
+ $output .= "\n\r";
683
+ }
684
+ break;
685
+ }
686
+ return $output;
687
+ }
688
+
689
+ /**
690
+ * Returns HTML formatted output for checkbox element.
691
+ *
692
+ * @param array $element
693
+ * @return string
694
+ */
695
+ public function checkbox($element) {
696
+ $element['#type'] = 'checkbox';
697
+ $element = $this->_setRender($element);
698
+ $element['_render']['element'] = '<input type="checkbox"';
699
+ foreach (array('id', 'name') as $key) {
700
+ $element['_render']['element'] .= sprintf(' %s="%s"', $key, $element['#' . $key]);
701
+ }
702
+ /**
703
+ * type and data_id
704
+ */
705
+ $element['_render']['element'] .= sprintf(' data-wpt-type="%s"', __FUNCTION__);
706
+ $element['_render']['element'] .= $this->_getDataWptId($element);
707
+
708
+ $element['_render']['element'] .= ' value="';
709
+ /**
710
+ * Specific: if value is empty force 1 to be rendered
711
+ * but if is defined default value, use default
712
+ */
713
+ $value = 1;
714
+ if (array_key_exists('#default_value', $element)) {
715
+ $value = $element['#default_value'];
716
+ }
717
+ $element['_render']['element'] .= ( empty($element['#value']) && !preg_match('/^0$/', $element['#value']) ) ? $value : esc_attr($element['#value']);
718
+ $element['_render']['element'] .= '"' . $element['_attributes_string'];
719
+ if (
720
+ (
721
+ !$this->isSubmitted() && (
722
+ (!empty($element['#default_value']) && $element['#default_value'] == $element['#value'] ) || ( isset($element['#checked']) && $element['#checked'] )
723
+ )
724
+ ) || ($this->isSubmitted() && !empty($element['#value']))
725
+ ) {
726
+ $element['_render']['element'] .= ' checked="checked"';
727
+ }
728
+ if (!empty($element['#attributes']['disabled']) || !empty($element['#disable'])) {
729
+ $element['_render']['element'] .= ' onclick="javascript:return false; if(this.checked == 1){this.checked=1; return true;}else{this.checked=0; return false;}"';
730
+ }
731
+ $element['_render']['element'] .= ' />';
732
+
733
+ $pattern = $this->_getStatndardPatern($element, '<BEFORE><PREFIX><ELEMENT>&nbsp;<LABEL><ERROR><SUFFIX><DESCRIPTION><AFTER>');
734
+ $output = $this->_pattern($pattern, $element);
735
+ $output = $this->_wrapElement($element, $output);
736
+ return $output . "\r\n";
737
+ }
738
+
739
+ /**
740
+ * Returns HTML formatted output for checkboxes element.
741
+ *
742
+ * Renders more than one checkboxes provided as elements in '#options'
743
+ * array element.
744
+ *
745
+ * @param array $element
746
+ * @return string
747
+ */
748
+ public function checkboxes($element) {
749
+ $element['#type'] = 'checkboxes';
750
+ $element = $this->_setRender($element);
751
+ $clone = $element;
752
+ $clone['#type'] = 'checkbox';
753
+ $element['_render']['element'] = '';
754
+ foreach ($element['#options'] as $ID => $value) {
755
+ if (!is_array($value)) {
756
+ $value = array('#title' => $ID, '#value' => $value, '#name' => $element['#name'] . '[]');
757
+ }
758
+ $element['_render']['element'] .= $this->checkbox($value);
759
+ }
760
+ $pattern = $this->_getStatndardPatern($element, '<BEFORE><PREFIX><TITLE><DESCRIPTION><ELEMENT><SUFFIX><AFTER>');
761
+ $output = $this->_pattern($pattern, $element);
762
+ $output = $this->_wrapElement($element, $output);
763
+ return $output;
764
+ }
765
+
766
+ /**
767
+ * Returns HTML formatted output for radio element.
768
+ *
769
+ * @param array $element
770
+ * @return string
771
+ */
772
+ public function radio($element) {
773
+ $element['#type'] = 'radio';
774
+ $element = $this->_setRender($element);
775
+ $element['_render']['element'] = '<input type="radio" id="'
776
+ . $element['#id'] . '" name="'
777
+ . $element['#name'] . '" value="';
778
+ $element['_render']['element'] .= isset($element['#value']) ? htmlspecialchars($element['#value']) : $this->_count['radio'];
779
+ $element['_render']['element'] .= '"';
780
+ $element['_render']['element'] .= $element['_attributes_string'];
781
+ $element['_render']['element'] .= (