Commit abc3c31415ca75889914a2b7053274857a3ac3a8

Authored by yekolia
1 parent c8de5f4b

New:

- Adding support of euDock lib for fisheyes menu in native JS.

Known bugs:
  - It doesn't work in 'object_alignment mode'.

Amelioration:
  - Recode the entire with jQuery: it will permit to reduce size of code and make it simplier.
web/CXM_jquery_eudock.anubis 0 → 100644
  1 +/*
  2 + * Created by PyramIDE.
  3 + * User: Jeremy
  4 + * Date: 18/09/2012
  5 + * Time: 17:28
  6 + *
  7 + * To change this template use Tools | Options | Coding | Edit Standard Headers.
  8 + */
  9 +
  10 +read calexium_lib/web/CXM_making_a_web_site.anubis
  11 +read calexium_lib/web/CXM_jquery.anubis
  12 +read calexium_lib/web/CXM_jquery_eudock_types.anubis
  13 +read tools/basis.anubis
  14 +read system/string.anubis
  15 +read system/convert.anubis
  16 +
  17 +/********************************************************************************************************/
  18 +/********************************************************************************************************/
  19 +/********************************************************************************************************/
  20 +/********************************************************************************************************/
  21 +/**************************************** ATTENTION !!! *******************************************/
  22 +/************* Le mode 'object_alignment' n'est pas fonctionnel : NE PAS L'UTILISER ! ****************/
  23 +/************************ Un recodage en jQuery de la lib JS est à prévoir **************************/
  24 +/********************************************************************************************************/
  25 +/********************************************************************************************************/
  26 +/********************************************************************************************************/
  27 +/********************************************************************************************************/
  28 +
  29 +/* jQuery euDock initialization */
  30 +public define List(HTML_Head_Tag)
  31 + jquery_eudock_init
  32 + (
  33 + String web_dir,
  34 + )
  35 + =
  36 + [
  37 + js(js_file("/js/jquery/euDock.2.0.js")),
  38 + //js(js_file("/js/jquery/euDock.Blank.js")), // not needed for now
  39 + //js(js_file("/js/jquery/euDock.DivMousePos.js")), // not needed for now
  40 + //js(js_file("/js/jquery/euDock.Ghost.js")), // not needed for now
  41 + js(js_file("/js/jquery/euDock.Image.js")),
  42 + //js(js_file("/js/jquery/euDock.Label.js")) // not needed for now
  43 + ]
  44 + .
  45 +
  46 +/* Recursive format of the bar */
  47 +define String
  48 + _jquery_eudock_format_bar
  49 + (
  50 + List(JQ_eudock_imagebar) bar_images,
  51 + String formatted
  52 + )
  53 + =
  54 + if bar_images is
  55 + {
  56 + [] then formatted,
  57 + [ h . t ] then
  58 + if h is
  59 + {
  60 + jq_eudock_bar_top(image) then
  61 + if t is
  62 + {
  63 + [] then _jquery_eudock_format_bar(t, formatted+"top :{euImage:{image:'"+image.image_url+"'}}"),
  64 + [ h . t] then _jquery_eudock_format_bar(t, formatted+"top :{euImage:{image:'"+image.image_url+"'}},")
  65 + },
  66 + jq_eudock_bar_vertical(image) then
  67 + if t is
  68 + {
  69 + [] then _jquery_eudock_format_bar(t, formatted+"vertical :{euImage:{image:'"+image.image_url+"'}}"),
  70 + [ h . t] then _jquery_eudock_format_bar(t, formatted+"vertical :{euImage:{image:'"+image.image_url+"'}},")
  71 + },
  72 + jq_eudock_bar_bottom(image) then
  73 + if t is
  74 + {
  75 + [] then _jquery_eudock_format_bar(t, formatted+"bottom :{euImage:{image:'"+image.image_url+"'}}"),
  76 + [ h . t] then _jquery_eudock_format_bar(t, formatted+"bottom :{euImage:{image:'"+image.image_url+"'}},")
  77 + },
  78 + jq_eudock_bar_left(image) then
  79 + if t is
  80 + {
  81 + [] then _jquery_eudock_format_bar(t, formatted+"left :{euImage:{image:'"+image.image_url+"'}}"),
  82 + [ h . t] then _jquery_eudock_format_bar(t, formatted+"left :{euImage:{image:'"+image.image_url+"'}},")
  83 + },
  84 + jq_eudock_bar_horizontal(image) then
  85 + if t is
  86 + {
  87 + [] then _jquery_eudock_format_bar(t, formatted+"horizontal :{euImage:{image:'"+image.image_url+"'}}"),
  88 + [ h . t] then _jquery_eudock_format_bar(t, formatted+"horizontal :{euImage:{image:'"+image.image_url+"'}},")
  89 + },
  90 + jq_eudock_bar_right(image) then
  91 + if t is
  92 + {
  93 + [] then _jquery_eudock_format_bar(t, formatted+"right :{euImage:{image:'"+image.image_url+"'}}"),
  94 + [ h . t] then _jquery_eudock_format_bar(t, formatted+"right :{euImage:{image:'"+image.image_url+"'}},")
  95 + }
  96 + }
  97 + }
  98 + .
  99 +
  100 +/* Format the bar */
  101 +define String
  102 + jquery_eudock_format_bar
  103 + (
  104 + String dockname,
  105 + JQ_eudock_bar bar
  106 + )
  107 + =
  108 + dockname+".setBar({"+
  109 + _jquery_eudock_format_bar(bar.bar_images, "")+
  110 + "});"
  111 + .
  112 +
  113 +/* Format 1 icon */
  114 +define String
  115 + _jquery_eudock_format_icon
  116 + (
  117 + String dockname,
  118 + JQ_euDock_Icon icon
  119 + )
  120 + =
  121 + if icon is jq_eudock_icon(icon_image, link) then
  122 + " "+dockname+".addIcon(new Array({euImage:{image:'"+icon_image.image_url+"'}}), {link:'"+link+"'});\n" // space added at the beginning to avoid any js syntax error
  123 + .
  124 +
  125 +/* Format icons */
  126 +define String
  127 + _jquery_eudock_format_icons
  128 + (
  129 + String dockname,
  130 + List(JQ_euDock_Icon) icons,
  131 + String formatted
  132 + )
  133 + =
  134 + if icons is
  135 + {
  136 + [] then formatted,
  137 + [ h . t ] then
  138 + _jquery_eudock_format_icons(dockname, t, formatted+ _jquery_eudock_format_icon(dockname, h))
  139 + }
  140 + .
  141 +
  142 +/* Format icons */
  143 +define String
  144 + jquery_eudock_format_icons
  145 + (
  146 + String dockname,
  147 + List(JQ_euDock_Icon) icons
  148 + )
  149 + =
  150 + _jquery_eudock_format_icons(dockname, icons, "")
  151 + .
  152 +
  153 +/* Format alignment */
  154 +define String
  155 + jquery_eudock_format_alignment
  156 + (
  157 + String dockname,
  158 + JQ_euDock_alignment alignment
  159 + )
  160 + =
  161 + if alignment is
  162 + {
  163 + jq_eudock_screen_alignment(a, o) then
  164 + dockname+".setScreenAlign("+jq_eudock_align_to_string(a)+", "+o+");",
  165 + jq_eudock_object_alignment(o_id, o_al, o, p) then
  166 + dockname+".setObjectAlign('"+o_id+"', "+jq_eudock_object_align_to_string(o_al)+", "+o+", "+jq_eudock_position_to_string(p)+");",
  167 + jq_eudock_fixed_alignment(x, y, p) then
  168 + dockname+".setPointAlign("+x+", "+y+", "+jq_eudock_position_to_string(p)+");"
  169 + }
  170 + // "+dockname+".setScreenAlign("+jq_eudock_position_to_string(position)+",0);
  171 + .
  172 +
  173 +/* Creation of an euDock */
  174 +public define HTML_Partial_Content
  175 + jquery_eudock
  176 + (
  177 + JQ_euDock dock
  178 + )
  179 + =
  180 + with dockname="dock_"+now, // dock name is suffixed with a timestamp to guarantee its uniqueness
  181 + if dock is jq_eudock(bar, icons, icon_offset, alignment) then
  182 + partial_content
  183 + (
  184 + [
  185 + js_inline(script("", "
  186 + euEnv.imageBasePath=\"\";
  187 + var "+dockname+"=new euDock();
  188 + "+jquery_eudock_format_alignment(dockname, alignment)+"
  189 + "+jquery_eudock_format_bar(dockname, bar)+"
  190 + "+dockname+".setIconsOffset("+icon_offset+");
  191 + "+jquery_eudock_format_icons(dockname, icons)+"
  192 + "))
  193 + ],
  194 + literal("") // euDock does not need to return HTML content => it's javascript only !
  195 + )
  196 + .
... ...
web/CXM_jquery_eudock_types.anubis 0 → 100644
  1 +/*
  2 + * Created by PyramIDE.
  3 + * User: Jeremy
  4 + * Date: 18/09/2012
  5 + * Time: 17:48
  6 + *
  7 + * To change this template use Tools | Options | Coding | Edit Standard Headers.
  8 + */
  9 +
  10 +read calexium_lib/web/CXM_making_a_web_site.anubis
  11 +read calexium_lib/web/CXM_jquery.anubis
  12 +read tools/basis.anubis
  13 +read system/string.anubis
  14 +read system/convert.anubis
  15 +
  16 +/* jQuery euDock "euImage" type */
  17 +public type JQ_euDock_euImage:
  18 + jq_eudock_euimage(String image_url) // url must be set from web server root. example: "/images/mydock/icon-1.png"
  19 +.
  20 +
  21 +/* jQuery euDock image bar type */
  22 +public type JQ_eudock_imagebar:
  23 + jq_eudock_bar_top(JQ_euDock_euImage image),
  24 + jq_eudock_bar_vertical(JQ_euDock_euImage image),
  25 + jq_eudock_bar_bottom(JQ_euDock_euImage image),
  26 + jq_eudock_bar_left(JQ_euDock_euImage image),
  27 + jq_eudock_bar_horizontal(JQ_euDock_euImage image),
  28 + jq_eudock_bar_right(JQ_euDock_euImage image)
  29 +.
  30 +
  31 +/* jQuery euDock bar type */
  32 +public type JQ_eudock_bar:
  33 + jq_eudock_bar(List(JQ_eudock_imagebar) bar_images)
  34 +.
  35 +
  36 +/* jQuery euDock align type */
  37 +public type JQ_eudock_align:
  38 + jq_eudock_align_top,
  39 + jq_eudock_align_left,
  40 + jq_eudock_align_bottom,
  41 + jq_eudock_align_right
  42 +.
  43 +
  44 +/* JQ_eudock_align to string */
  45 +public define String
  46 + jq_eudock_align_to_string
  47 + (
  48 + JQ_eudock_align a
  49 + )
  50 + =
  51 + if a is
  52 + {
  53 + jq_eudock_align_top then "euUP",
  54 + jq_eudock_align_left then "euLEFT",
  55 + jq_eudock_align_bottom then "euDOWN",
  56 + jq_eudock_align_right then "euRIGHT"
  57 + }
  58 + .
  59 +
  60 +/* string to JQ_eudock_align */
  61 +public define JQ_eudock_align
  62 + string_to_jq_eudock_align
  63 + (
  64 + String s
  65 + )
  66 + =
  67 + if s="euUP" then jq_eudock_align_top
  68 + else if s="euLEFT" then jq_eudock_align_left
  69 + else if s="euDOWN" then jq_eudock_align_bottom
  70 + else if s="euRIGHT" then jq_eudock_align_right
  71 + else jq_eudock_align_top // we decide that top position is default.
  72 + .
  73 +
  74 +/* jQuery euDock position type */
  75 +public type JQ_eudock_position:
  76 + jq_eudock_position_top,
  77 + jq_eudock_position_left,
  78 + jq_eudock_position_bottom,
  79 + jq_eudock_position_right,
  80 + jq_eudock_position_horizontal,
  81 + jq_eudock_position_vertical
  82 +.
  83 +
  84 +/* JQ_eudock_position to string */
  85 +public define String
  86 + jq_eudock_position_to_string
  87 + (
  88 + JQ_eudock_position p
  89 + )
  90 + =
  91 + if p is
  92 + {
  93 + jq_eudock_position_top then "euUP",
  94 + jq_eudock_position_left then "euLEFT",
  95 + jq_eudock_position_bottom then "euDOWN",
  96 + jq_eudock_position_right then "euRIGHT",
  97 + jq_eudock_position_horizontal then "euHORIZONTAL",
  98 + jq_eudock_position_vertical then "euVERTICAL"
  99 + }
  100 + .
  101 +
  102 +/* string to JQ_eudock_position */
  103 +public define JQ_eudock_position
  104 + string_to_jq_eudock_position
  105 + (
  106 + String s
  107 + )
  108 + =
  109 + if s="euUP" then jq_eudock_position_top
  110 + else if s="euLEFT" then jq_eudock_position_left
  111 + else if s="euDOWN" then jq_eudock_position_bottom
  112 + else if s="euRIGHT" then jq_eudock_position_right
  113 + else if s="euHORIZONTAL" then jq_eudock_position_horizontal
  114 + else if s="euVERTICAL" then jq_eudock_position_vertical
  115 + else jq_eudock_position_top // we decide that top position is default.
  116 + .
  117 +
  118 +/* jQuery euDock objectAlign type */
  119 +public type JQ_eudock_object_align:
  120 + jq_eudock_object_align_top,
  121 + jq_eudock_object_align_left,
  122 + jq_eudock_object_align_bottom,
  123 + jq_eudock_object_align_right,
  124 + jq_eudock_object_align_center
  125 +.
  126 +
  127 +/* JQ_eudock_object_align to string */
  128 +public define String
  129 + jq_eudock_object_align_to_string
  130 + (
  131 + JQ_eudock_object_align oa
  132 + )
  133 + =
  134 + if oa is
  135 + {
  136 + jq_eudock_object_align_top then "euUP",
  137 + jq_eudock_object_align_left then "euLEFT",
  138 + jq_eudock_object_align_bottom then "euDOWN",
  139 + jq_eudock_object_align_right then "euRIGHT",
  140 + jq_eudock_object_align_center then "euCENTER"
  141 + }
  142 + .
  143 +
  144 +/* string to JQ_eudock_object_align */
  145 +public define JQ_eudock_object_align
  146 + string_to_jq_eudock_object_align
  147 + (
  148 + String s
  149 + )
  150 + =
  151 + if s="euUP" then jq_eudock_object_align_top
  152 + else if s="euLEFT" then jq_eudock_object_align_left
  153 + else if s="euDOWN" then jq_eudock_object_align_bottom
  154 + else if s="euRIGHT" then jq_eudock_object_align_right
  155 + else if s="euCENTER" then jq_eudock_object_align_center
  156 + else jq_eudock_object_align_top // we decide that top position is default.
  157 + .
  158 +
  159 +/* jQuery euDock alignment */
  160 +public type JQ_euDock_alignment:
  161 + jq_eudock_screen_alignment(
  162 + JQ_eudock_align align,
  163 + Int offset /* see icon_offset in JQ_euDock type definition */
  164 + ),
  165 + jq_eudock_object_alignment(
  166 + String object_id,
  167 + JQ_eudock_object_align object_align,
  168 + Int offset, /* see icon_offset in JQ_euDock type definition */
  169 + JQ_eudock_position position
  170 + ),
  171 + jq_eudock_fixed_alignment(
  172 + Int x,
  173 + Int y,
  174 + JQ_eudock_position position
  175 + )
  176 +.
  177 +
  178 +/* jQuery euDock icon type */
  179 +public type JQ_euDock_Icon:
  180 + jq_eudock_icon(
  181 + JQ_euDock_euImage icon_image,
  182 + String link
  183 + )
  184 +.
  185 +
  186 +/* jQuery "euDock" type */
  187 +public type JQ_euDock:
  188 + jq_eudock(
  189 + JQ_eudock_bar bar, // it's the "graphical bar" under icons.
  190 + List(JQ_euDock_Icon) icons,
  191 + Int icon_offset, // number of icons should be let in "blank space". Example: if icon size is 32px and icon_offset is 2 => the first icon is displayed 64px from the "left" border of the dock and the last icon is displayed 64px from the "right" border of the dock
  192 + JQ_euDock_alignment alignment // dock position
  193 + )
  194 +.
... ...