Code Monkey home page Code Monkey logo

aikau's Introduction

Aikau

About Aikau

What is Aikau?

Aikau is a meta-framework of custom JavaScript widgets designed to work with Alfresco. It is dependant upon the Surf framework but is not dependent upon Alfresco Share application.

The framework provides a suite of widgets that can be referenced in JSON models to build complete pages. These page models can be defined in WebScripts or remotely stored and rendered from an Alfresco Repository. This means that it possible to dynamically create and render new pages from within an application without needing to restart the server.

Release notes for the latest version of Aikau are available on GitHub.

Simple Third Party Customizations

The page models are intended to be dynamically customizable through Surf extension modules meaning that a client (such as Alfresco Share) can be dynamically customized by third parties without needing to write any code. The modular approach means that it is easy for 3rd parties to provide custom widgets that are either completely new or extend the Aikau base. Aikau extends the AMD (Asynchronous Module Definition) paradigm such that; a single widget encapsulates all of the HTML, CSS, JavaScript and localization properties that it needs and Surf ensures that only the required resources required by a page are loaded by the browser.

Cross-Framework Compatible

Surf uses the Dojo framework for AMD module loading and Aikau widgets make use of the Dojo templating capabilities but it is not limited to any single JavaScript framework. Aikau is intended to work with any JavaScript library by design and its widget library already makes use of JQuery, YUI, TinyMCE, Code Mirror and Sinon.

Testing

The atomic nature of the widgets means that they are easily unit testable and Aikau makes use of the Intern JavaScript testing framework, driven by Grunt and uses Vagrant for multi-platform, cross-browser testing. It uses node-coverage to capture code coverage results of its unit tests.

Learning Aikau

We've written a tutorial that takes you through the process of building a standalone Aikau client. We're in the process of converting it into GitHub markdown files - the chapters that have been converted so far start here.

There is also an Alfresco Wiki page that collates avaialble Aikau educational material.

Contributing to Aikau

We will gladly be welcoming contributions from the Alfresco Community - however, we would be grateful if you could please review and adhere to the contribution acceptance criteria before generating any pull requests.

Setup instructions are available for Linux, Windows and OS X

aikau's People

Contributors

afaust avatar alexbalmus avatar anechifor avatar aonode avatar astrachan avatar aviriel avatar bogdanbocancea avatar bogdanioan-gabor avatar ciprianchelaru avatar davidcognite avatar dbilligmaier avatar epurashu avatar evasques avatar fkleon avatar gbroadbent avatar jottley avatar kevinroast avatar martindoyleuk avatar npmcdn-to-unpkg-bot avatar ohej avatar rgauss avatar rpopa avatar rrajoria avatar skopf avatar tbedford avatar tpage-alfresco avatar tunaaksoy avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

aikau's Issues

InlineEditProperty does not honour label property.

If you set a label configuration for InlineEditProperty you might expect it to behave as it does in Property. It should be rendered right before the value but it doesn't it just doesn't show the label.

It seems to be a trivial issue related to the template used for the widget. Using a custom template like this it works:

<span class="alfresco-renderers-InlineEditProperty ${renderedValueClass}">
   <span class="label">${label}</span>
   <span data-dojo-attach-point="renderedValueNode" data-dojo-attach-event="onkeypress:onKeyPress,ondijitclick:onClickRenderedValue" class="inlineEditValue ${renderedValueClass}" tabindex="0">${!renderedValue}</span>
   <span data-dojo-attach-point="editNode" class="editor hidden" data-dojo-attach-event="onkeypress:onValueEntryKeyPress,onclick:suppressFocusRequest">
      <span data-dojo-attach-point="formWidgetNode"></span>
      <span class="action save" data-dojo-attach-point="saveLinkNode" data-dojo-attach-event="ondijitclick:onSave" tabindex="0">${saveLabel}</span>
      <span class="action cancel" data-dojo-attach-event="ondijitclick:onCancel" tabindex="0">${cancelLabel}</span>
   </span>
   <img class="editIcon" src="${editIconImageSrc}" alt="${editAltText}" title="${editAltText}" data-dojo-attach-point="editIconNode" data-dojo-attach-event="ondijitclick:onEditClick"/>
</span>

FilteringSelect and MultiSelectInput form controls do not show any options to use

Aikau 1.0.39.5 + Alfresco 5.1.e.

I try to add a text field with autocomplete (or something like that) to the form dialog to select users.

The following control works good:

{
    name: "alfresco/forms/controls/Select",
    config: {
        fieldId: "select1",
        label: "Select a person",
        name: "select1",
        optionsConfig: {
            publishTopic: "ALF_GET_FORM_CONTROL_OPTIONS",
            publishPayload: {
                url: AlfConstants.PROXY_URI + "api/people",
                itemsAttribute: "people",
                labelAttribute: "userName",
                valueAttribute: "userName"
            }
        }
    }
}

So I suggest that FilteringSelect and MultiSelectInput should work in similar way, but they don't:

{
    name: "alfresco/forms/controls/FilteringSelect",
    config: {
        fieldId: "people1",
        name: "people1",
        label: "People",
        optionsConfig: {
            queryAttribute: "value",
            publishTopic: "ALF_GET_FORM_CONTROL_OPTIONS",
            publishPayload: {
                url: AlfConstants.PROXY_URI + "api/people",
                itemsAttribute: "people",
                labelAttribute: "userName",
                valueAttribute: "userName"
            }
        }
    }
}, {
    name: "alfresco/forms/controls/MultiSelectInput",
    config: {
        label: "people2",
        name: "people2",
        optionsConfig: {
            queryAttribute: "label",
            publishTopic: "ALF_GET_FORM_CONTROL_OPTIONS",
            publishPayload: {
                url: AlfConstants.PROXY_URI + "api/people",
                itemsAttribute: "people",
                labelAttribute: "userName",
                valueAttribute: "userName"
            }
        }
    }
}

FilteringSelect does not show any suggestions and always shows "The value entered in not valid", but request is sent and correct response is returned from the repository
selection_108

MultiSelectInput does not even sending request and shows "Loading" all the time:
selection_109

Any ideas what to do with it? Usually I think that I do something incorrectly, but in this time Axel Faust said that it may be a bug. I copy the discussion from IRC here, maybe it can help:
I found why all of the widgets using ServiceStore won't work with the OptionsService (and potentially other services to load options). A bug has been introduced when some cloud related changes were included back in October. The change in question is 9f082b7#diff-ef5813a119e4ee7498950e45fb286a95R395. This causes an early response (the progress pub) to the pubSub from ServiceStore providing the raw, unprocessed options. ServiceStore then unsubcribes and does not receive the actual pub payload from the OptionsService with the processed options.

AlfList adds redundant pubSubScope prefix to alfResponseTopic for data load

When an AlfList instance is used with a non-empty pubSubScope, the payload of the data load pub will contain both the alfResponseScope set to the pubSubScope and the alfResponseTopic prefixed with the pubSubScope. Any custom service that uses both alfResponseTopic and alfResponseScope to pub a response with the actual data will not reach the AlfList instance due to the effective response publish topic being double-prefixed with the pubSubScope of the AlfList instance.

The full setup to reproduce this is defined in this gist: https://gist.github.com/AFaust/b2b55bfa15eecbd6c7ef

In short, the relevant config / code snippets are

  1. service operation
onLoadSimpleList : function test_SimpleListService__onLoadSimpleList(payload)
        {
            // this response only works for AlfList with an empty pubSubScope
            this.alfPublish(payload.alfResponseTopic + '_SUCCESS', {
                // this is accessed as fallback - only after payload.response.items failed
                items : [/* ... actual items ... */],
                // this is not actually mapped by AlfList - only payload.response.metadata is accessed
                metadata : {}
            }, false, false, payload.alfResponseScope || '');
        }
  1. list config
model.jsonModel = {
    widgets : [{
    name : 'alfresco/lists/AlfList',
    config : {
        loadDataPublishTopic : 'LOAD_SIMPLE_LIST',
        // this causes AlfList not to receive the response from the service
        pubSubScope : 'Test',
        widgets : [/* ... list views ... */]
         }
    }]
};

This is using Aikau 1.0.60 on Alfresco 5.0.3

Tutorial 18 - Cannot get document preview

Hi David,

I have followed tutorial 18 but cannot get it to show a page with a preview. The "No Document Details Provided" error message appears if I call the page without the store, id etc.( ie http://localhost:8090/aikau-sample/page/ap/ws/document) but if I call the same page passing in the store id etc, ie http://localhost:8090/aikau-sample/page/ap/ws/document/workspace/SpacesStore/5fa74ad3-9b5b-461b-9df5-de407f1f4fe7 then it just shows a blank page. Do you have the home.js and document.js so I can have a look at where I am going wrong.

Brian

Use Alfresco share document library full window view as an embedded content in a social intranet iframe

Hi!

We'd like to show Alfresco Content as part of our IBM Connections social intranet since our Alfresco one service is much more accepted for enterprise sync and share than the ESN is although the features are quite similar. So we'd use the generic html widget which allows us to embed any web page into an iframe inside connections.

I could make an iframe with src=.../webdav/... show the library content but that is ugly.

We'd prefeer to show the share library as full window like it is possible in share. Is there any URL parameter to call that view in an iframe? Would you say this is a good or a bad idea?

Or should we go deeper and develop our own pages for that purpose? (Would better like to stay on the standard pages for maintenance reasons)

iframe on webdav:
2016-02-18 09_29_38-twitter

iframe on std-UI
2016-02-18 16_51_12-twitter

iframe on full window tile view;
2016-02-18 16_52_49-twitter

We'd like to use the last one within our social intranet.

Can you provide some link information on how this can be the best solution for that?

Thank you in advance!

Feat: Client-side JS logging setup

Hey there,
I am currently using the "alfresco/services/LoggingService" to log client side activity.
As you must know, client-side logging can be a performance pit even if you setup log filters, so sometimes I need to deactivate logging on all pages. I can of course rely on maven profiles to setup my logging preference during build and then I will need to redeploy my webapp, but it would be really nice if I could configure :

  • Default logging preference to which the LoggingService should fallback in case of absence of specific configuration
  • Whether or not specific config in pages should override the default logging preference

in a property file

Logs not showing

I'm trying to execute the chapter 4.

I've added this block of code into the home.get.js file's services section:

{ name: "alfresco/services/LoggingService", config: { loggingPreferences: { enabled: true, all: true } } },
Everything keep working, but I can't see the log message created using this:

this.alfLog("log", "Setting greeting message!");

Errors refreshing web scripts with two or more Aikau JARs in Share

During my tests and change "liberation" in the context of #958 I noticed that two Aikau web scripts cause errors during web script refreshs (and initial Share startup) due to having URL conflicts with web scripts from an earlier Aikau release.

Broken Web Scripts
03110005 Web Script document org/alfresco/aikau/1.0.61/webscripts/sanitize-response.get.desc.xml is attempting to define the url '/sanitize/response:GET' already defined by org/alfresco/aikau/sanitize-response.get.desc.xml (classpath:alfresco/site-webscripts/org/alfresco/aikau/1.0.61/webscripts/sanitize-response.get.desc.xml)
03110004 Web Script document org/alfresco/aikau/1.0.61/webscripts/sanitize-data.post.desc.xml is attempting to define the url '/sanitize/data:POST' already defined by org/alfresco/aikau/sanitize-data.post.desc.xml (classpath:alfresco/site-webscripts/org/alfresco/aikau/1.0.61/webscripts/sanitize-data.post.desc.xml)

This was found running Alfresco 5.0.3 with a local Aikau 1.0.61 build (from my branch Aikau-958) while 1.0.52 and 1.0.60 JARs were also deployed in the web app. Both 1.0.52 and 1.0.60 include the sanitize-response.get.desc.xml in the same path (without a version identifier) and only the introduction of the version identifier in the path for 1.0.61 now causes the conflict. Previously the (undefined / arbitrary) load order of the classpath prevented this issue. The URL of those web scripts should probably include the version identifier as well to avoid such issues when multiple Aikau JARs are present.

Problem setting up test environment on windows

I am starting to experiment on aikau unit testing.

After few unsuccessful local trials I came to understand that local test are not reliable, I am now trying running the tests against a VirtualBox VM, and I am hitting these errors:

  ====================================

   AIKAU UNIT TESTS (Ctrl-C to abort)
  ====================================
  FAILED

  [previous messages h/dden ...]
  PROGRESS                                   STATUS                       LAST STARTED TEST
    - Test Previous Page Button Disables (on scroll) [Chrome v47.0.2526.111 on Linux]
                                             Requested Envs: 2            Environment: Complete
    - Test Link Value [Chrome v47.0.2526.111 on Linux]
  ----------------------------------------   Tested Envs:    1            Suite name:  Complete
    - Test Find Next [Chrome v47.0.2526.111 on Linux]
  ====================....................   Total tests:    4524         Test name:   Complete
  Download as ZIP Action Tests
  ----------------------------------------   Passed:         2248 (49.7%)

                                             Failed:         12 (0.3%)    REPORTER INFO
  ERRORS
  Percent complete: 50%                      Skipped:        2 (0.0%)     Last called method: runEnd
  N/A
  Tunnel status:    Active                   Errors:         1

  Time taken:       36 minutes 14 seconds    Warnings:       1

  Time Remaining:   40 mins remaining        Deprecations:   0


  DEPRECATIONS
  FAILED
  N/A
  ========================================
    - Test Thumbnail Navigation [Chrome v47.0.2526.111 on Linux]
    - Test Link Value [Chrome v47.0.2526.111 on Linux]
    - Test First Page is active [Chrome v47.0.2526.111 on Linux]
    - Test Find Next [Chrome v47.0.2526.111 on Linux]
    - Test Find Previous [Chrome v47.0.2526.111 on Linux]
  Download as ZIP Action Tests
    - Test non-legacy action version [Chrome v47.0.2526.111 on Linux]


  ERRORS

  firefox on any platform (Unknown)
    - [POST http://192.168.56.4:4444/wd/hub/session / {"desiredCapabilities":{"browserName":"firefox","selenium-version":"2.44.0","name":"src/test/resources/intern",...


  WARNINGS

  "firefox on any platform"
    - Unable to retrieve environment info


  DEPRECATIONS

  N/A






========================
===== ENVIRONMENTS =====
========================

"Chrome on any platform" was fulfilled by "Chrome v47.0.2526.111 on Linux"
"Firefox on any platform" was fulfilled by "true"

====================
===== FAILED =====
====================

--- Chrome v47.0.2526.111 on Linux ---

Inherited DND Configuration Tests
"Check prepopulated nested widget configuration"
[POST http://192.168.56.4:4444/wd/hub/session/db84cbf8-dd35-49a1-b8d0-f0bd2e3440a8/element/326/click] unknown error: Element is not clickable at point (829, 232). Other element would receive the click: <div class="dijitDialogUnderlay _underlay" tabindex="-1" data-dojo-attach-point="node" id="ALF_DROPPED_ITEM_CONFIGURATION_DIALOG_underlay" style="width: 1009px; height: 661px;"></div>
  (Session info: chrome=47.0.2526.111)
  (Driver info: chromedriver=2.15.322448 (52179c1b310fec1797c81ea9a20326839860b7d3),platform=Linux 3.13.0-74-generic x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 33 milliseconds
Build info: version: '2.46.0', revision: '87c69e2', time: '2015-06-04 16:16:47'
System info: host: 'vagrant-ubuntu-trusty-64', ip: '10.0.2.15', os.name: 'Linux', os.arch: 'amd64', os.version: '3.13.0-74-generic', java.version: '1.7.0_91'
Session ID: 8b34468d354a52aa008706a3722e94da
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities [{platform=LINUX, acceptSslCerts=true, javascriptEnabled=true, browserName=chrome, chrome={userDataDir=/tmp/.com.google.Chrome.TjbO5y}, rotatable=false, locationContextEnabled=true, mobileEmulationEnabled=false, version=47.0.2526.111, takesHeapSnapshot=true, cssSelectorsEnabled=true, databaseEnabled=false, handlesAlerts=true, browserConnectionEnabled=false, webStorageEnabled=true, nativeEvents=true, applicationCacheEnabled=false, takesScreenshot=true}]

Site Picker Tests
"Can choose single site"
[POST http://192.168.56.4:4444/wd/hub/session/db84cbf8-dd35-49a1-b8d0-f0bd2e3440a8/element/1223/click] unknown error: Element is not clickable at point (551, 276). Other element would receive the click: <div data-dojo-attach-point="viewsNode" data-aikau-loading-message="Loading..." data-aikau-rendering-message="Please wait while the view is rendered..." class="alfresco-lists-AlfList__views rendered-view">...</div>
  (Session info: chrome=47.0.2526.111)
  (Driver info: chromedriver=2.15.322448 (52179c1b310fec1797c81ea9a20326839860b7d3),platform=Linux 3.13.0-74-generic x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 37 milliseconds
Build info: version: '2.46.0', revision: '87c69e2', time: '2015-06-04 16:16:47'
System info: host: 'vagrant-ubuntu-trusty-64', ip: '10.0.2.15', os.name: 'Linux', os.arch: 'amd64', os.version: '3.13.0-74-generic', java.version: '1.7.0_91'
Session ID: 8b34468d354a52aa008706a3722e94da
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities [{platform=LINUX, acceptSslCerts=true, javascriptEnabled=true, browserName=chrome, chrome={userDataDir=/tmp/.com.google.Chrome.TjbO5y}, rotatable=false, locationContextEnabled=true, mobileEmulationEnabled=false, version=47.0.2526.111, takesHeapSnapshot=true, cssSelectorsEnabled=true, databaseEnabled=false, handlesAlerts=true, browserConnectionEnabled=false, webStorageEnabled=true, nativeEvents=true, applicationCacheEnabled=false, takesScreenshot=true}]
"Can choose multiple sites"
[POST http://192.168.56.4:4444/wd/hub/session/db84cbf8-dd35-49a1-b8d0-f0bd2e3440a8/element/1224/click] unknown error: Element is not clickable at point (536, 43). Other element would receive the click: <div class="dijitDialogUnderlay _underlay" tabindex="-1" data-dojo-attach-point="node" id="6050c889-6405-4249-82a5-41107c6addfb_underlay" style="width: 1009px; height: 661px;"></div>
  (Session info: chrome=47.0.2526.111)
  (Driver info: chromedriver=2.15.322448 (52179c1b310fec1797c81ea9a20326839860b7d3),platform=Linux 3.13.0-74-generic x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 39 milliseconds
Build info: version: '2.46.0', revision: '87c69e2', time: '2015-06-04 16:16:47'
System info: host: 'vagrant-ubuntu-trusty-64', ip: '10.0.2.15', os.name: 'Linux', os.arch: 'amd64', os.version: '3.13.0-74-generic', java.version: '1.7.0_91'
Session ID: 8b34468d354a52aa008706a3722e94da
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities [{platform=LINUX, acceptSslCerts=true, javascriptEnabled=true, browserName=chrome, chrome={userDataDir=/tmp/.com.google.Chrome.TjbO5y}, rotatable=false, locationContextEnabled=true, mobileEmulationEnabled=false, version=47.0.2526.111, takesHeapSnapshot=true, cssSelectorsEnabled=true, databaseEnabled=false, handlesAlerts=true, browserConnectionEnabled=false, webStorageEnabled=true, nativeEvents=true, applicationCacheEnabled=false, takesScreenshot=true}]

List Local Storage (2)
"When there is no hash, the current filter is set as the hash"
The URL hash was not set to the current filter: expected 'http://192.168.56.1:8089/aikau/page/tp/ws/ListLocalStorageFallback?listType=CurrentFilterWithLocalStorage#key1=value1&key2=value2' to include '#key2=value2&key1=value1'

Local Storage for Lists Tests (5)
"When there is no hash and local storage is available the current filter should still be used"
Current filter was not used: expected 'http://192.168.56.1:8089/aikau/page/tp/ws/ListLocalStorageFallback?listType=CurrentFilter#key1=value1&key2=value2' to include '#key2=value2&key1=value1'

PdfJs Previewer Tests
"Test Previous Page Button Disables (on scroll)"
The previous page button was not disabled when scrolling back to the top of the viewer
"Test Thumbnail Navigation"
The second page was not active after clicking it's thumbnail
"Test Link Value"
The link was not generated correctly: http://192.168.56.1:8089/aikau/page/tp/ws/PdfJsPreview#page=6
"Test First Page is active"
The first page was not active before starting find tests: expected [ depth: 1 ] to have a length of 1 but got 0
"Test Find Next"
The second page did not become the active page as we went to the next search result
"Test Find Previous"
The first page did not become the active page as we went to the previous search result

Download as ZIP Action Tests
"Test non-legacy action version"
[POST http://192.168.56.4:4444/wd/hub/session/db84cbf8-dd35-49a1-b8d0-f0bd2e3440a8/element/3176/click] unknown error: Element is not clickable at point (40, 131). Other element would receive the click: <table class="dijit dijitReset dijitMenuTable dijitMenuActive dijitMenu dijitMenuFocused dijitFocused" role="menu" tabindex="-1" cellspacing="0" id="ACTIONS_ITEM_1_GROUP" widgetid="ACTIONS_ITEM_1_GROUP" style="top: 0px; visibility: visible;">...</table>
  (Session info: chrome=47.0.2526.111)
  (Driver info: chromedriver=2.15.322448 (52179c1b310fec1797c81ea9a20326839860b7d3),platform=Linux 3.13.0-74-generic x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 15 milliseconds
Build info: version: '2.46.0', revision: '87c69e2', time: '2015-06-04 16:16:47'
System info: host: 'vagrant-ubuntu-trusty-64', ip: '10.0.2.15', os.name: 'Linux', os.arch: 'amd64', os.version: '3.13.0-74-generic', java.version: '1.7.0_91'
Session ID: 8b34468d354a52aa008706a3722e94da
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities [{platform=LINUX, acceptSslCerts=true, javascriptEnabled=true, browserName=chrome, chrome={userDataDir=/tmp/.com.google.Chrome.TjbO5y}, rotatable=false, locationContextEnabled=true, mobileEmulationEnabled=false, version=47.0.2526.111, takesHeapSnapshot=true, cssSelectorsEnabled=true, databaseEnabled=false, handlesAlerts=true, browserConnectionEnabled=false, webStorageEnabled=true, nativeEvents=true, applicationCacheEnabled=false, takesScreenshot=true}]

====================
===== SKIPPED =====
====================

--- Chrome v47.0.2526.111 on Linux ---

Dashlet Tests
"Resizing dashlet stores height"
Test skipped because test environment is "chrome on any platform"

Infinite Scrolling Dashlet Tests
"Resizing first dashlet prompts data-load"
Test skipped because test environment is "chrome on any platform"


==================
===== ERRORS =====
==================

firefox on any platform (Unknown)
"[POST http://192.168.56.4:4444/wd/hub/session / {"desiredCapabilities":{"browserName":"firefox","selenium-version":"2.44.0","name":"src/test/resources/intern","idle-timeout":60}}] Unable to connect to host 127.0.0.1 on port 7055 after 45000 ms. Firefox console output:
r GMPProvider
1453308636586   addons.manager  DEBUG   Provider finished startup: GMPProvider
1453308636586   addons.manager  DEBUG   Starting provider: PluginProvider
1453308636586   addons.manager  DEBUG   Registering shutdown blocker for PluginProvider
1453308636586   addons.manager  DEBUG   Provider finished startup: PluginProvider
1453308636587   addons.manager  DEBUG   Completed startup sequence
1453308636666   DeferredSave.extensions.json    DEBUG   Save changes
1453308636667   addons.xpi      DEBUG   Updating XPIState for {"id":"[email protected]","syncGUID":"qKhgLrEsEpoE","location":"app-profile","version":"2.46.0","type":"extension","internalName":null,"updateURL":null,"updateKey":null,"optionsURL":null,"optionsType":null,"aboutURL":null,"iconURL":null,"icon64URL":null,"defaultLocale":{"name":"Firefox WebDriver","description":"WebDriver implementation for Firefox","creator":"Simon Stewart","homepageURL":null},"visible":true,"active":false,"userDisabled":false,"appDisabled":false,"descriptor":"/tmp/anonymous4264647846486076396webdriver-profile/extensions/[email protected]","installDate":1453308636000,"updateDate":1453308636000,"applyBackgroundUpdates":1,"bootstrap":false,"size":8445045,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":true,"hasBinaryComponents":true,"strictCompatibility":false,"locales":[],"targetApplications":[{"id":"{ec8030f7-c20a-464f-9b0e-13a3a9e97384}","minVersion":"3.0","maxVersion":"66.*"}],"targetPlatforms":[{"os":"Darwin","abi":null},{"os":"SunOS","abi":null},{"os":"FreeBSD","abi":null},{"os":"OpenBSD","abi":null},{"os":"WINNT","abi":"x86-msvc"},{"os":"Linux","abi":null}],"multiprocessCompatible":false,"signedState":0}
1453308636667   addons.xpi      DEBUG   getModTime: Recursive scan of [email protected]
1453308636672   DeferredSave.extensions.json    DEBUG   Save changes
1453308636672   addons.xpi      DEBUG   Updating XPIState for {"id":"[email protected]","syncGUID":"qKhgLrEsEpoE","location":"app-profile","version":"2.46.0","type":"extension","internalName":null,"updateURL":null,"updateKey":null,"optionsURL":null,"optionsType":null,"aboutURL":null,"iconURL":null,"icon64URL":null,"defaultLocale":{"name":"Firefox WebDriver","description":"WebDriver implementation for Firefox","creator":"Simon Stewart","homepageURL":null},"visible":true,"active":false,"userDisabled":false,"appDisabled":true,"descriptor":"/tmp/anonymous4264647846486076396webdriver-profile/extensions/[email protected]","installDate":1453308636000,"updateDate":1453308636000,"applyBackgroundUpdates":1,"bootstrap":false,"size":8445045,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":true,"hasBinaryComponents":true,"strictCompatibility":false,"locales":[],"targetApplications":[{"id":"{ec8030f7-c20a-464f-9b0e-13a3a9e97384}","minVersion":"3.0","maxVersion":"66.*"}],"targetPlatforms":[{"os":"Darwin","abi":null},{"os":"SunOS","abi":null},{"os":"FreeBSD","abi":null},{"os":"OpenBSD","abi":null},{"os":"WINNT","abi":"x86-msvc"},{"os":"Linux","abi":null}],"multiprocessCompatible":false,"signedState":0}
1453308636730   addons.manager  DEBUG   Starting provider: <unnamed-provider>
1453308636730   addons.manager  DEBUG   Registering shutdown blocker for <unnamed-provider>
1453308636730   addons.manager  DEBUG   Provider finished startup: <unnamed-provider>
1453308636778   DeferredSave.extensions.json    DEBUG   Starting write
1453308636881   addons.repository       DEBUG   No addons.json found.
1453308636881   DeferredSave.addons.json        DEBUG   Save changes
1453308636883   DeferredSave.addons.json        DEBUG   Starting timer
1453308636893   addons.manager  DEBUG   Starting provider: PreviousExperimentProvider
1453308636893   addons.manager  DEBUG   Registering shutdown blocker for PreviousExperimentProvider
1453308636893   addons.manager  DEBUG   Provider finished startup: PreviousExperimentProvider
1453308636896   DeferredSave.extensions.json    DEBUG   Write succeeded
1453308636896   addons.xpi-utils        DEBUG   XPI Database saved, setting schema version preference to 17
1453308636935   DeferredSave.addons.json        DEBUG   Starting write
1453308636946   DeferredSave.addons.json        DEBUG   Write succeeded
"
[POST http://192.168.56.4:4444/wd/hub/session / {"desiredCapabilities":{"browserName":"firefox","selenium-version":"2.44.0","name":"src/test/resources/intern","idle-timeout":60}}] Unable to connect to host 127.0.0.1 on port 7055 after 45000 ms. Firefox console output:
r GMPProvider
1453308636586   addons.manager  DEBUG   Provider finished startup: GMPProvider
1453308636586   addons.manager  DEBUG   Starting provider: PluginProvider
1453308636586   addons.manager  DEBUG   Registering shutdown blocker for PluginProvider
1453308636586   addons.manager  DEBUG   Provider finished startup: PluginProvider
1453308636587   addons.manager  DEBUG   Completed startup sequence
1453308636666   DeferredSave.extensions.json    DEBUG   Save changes
1453308636667   addons.xpi      DEBUG   Updating XPIState for {"id":"[email protected]","syncGUID":"qKhgLrEsEpoE","location":"app-profile","version":"2.46.0","type":"extension","internalName":null,"updateURL":null,"updateKey":null,"optionsURL":null,"optionsType":null,"aboutURL":null,"iconURL":null,"icon64URL":null,"defaultLocale":{"name":"Firefox WebDriver","description":"WebDriver implementation for Firefox","creator":"Simon Stewart","homepageURL":null},"visible":true,"active":false,"userDisabled":false,"appDisabled":false,"descriptor":"/tmp/anonymous4264647846486076396webdriver-profile/extensions/[email protected]","installDate":1453308636000,"updateDate":1453308636000,"applyBackgroundUpdates":1,"bootstrap":false,"size":8445045,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":true,"hasBinaryComponents":true,"strictCompatibility":false,"locales":[],"targetApplications":[{"id":"{ec8030f7-c20a-464f-9b0e-13a3a9e97384}","minVersion":"3.0","maxVersion":"66.*"}],"targetPlatforms":[{"os":"Darwin","abi":null},{"os":"SunOS","abi":null},{"os":"FreeBSD","abi":null},{"os":"OpenBSD","abi":null},{"os":"WINNT","abi":"x86-msvc"},{"os":"Linux","abi":null}],"multiprocessCompatible":false,"signedState":0}
1453308636667   addons.xpi      DEBUG   getModTime: Recursive scan of [email protected]
1453308636672   DeferredSave.extensions.json    DEBUG   Save changes
1453308636672   addons.xpi      DEBUG   Updating XPIState for {"id":"[email protected]","syncGUID":"qKhgLrEsEpoE","location":"app-profile","version":"2.46.0","type":"extension","internalName":null,"updateURL":null,"updateKey":null,"optionsURL":null,"optionsType":null,"aboutURL":null,"iconURL":null,"icon64URL":null,"defaultLocale":{"name":"Firefox WebDriver","description":"WebDriver implementation for Firefox","creator":"Simon Stewart","homepageURL":null},"visible":true,"active":false,"userDisabled":false,"appDisabled":true,"descriptor":"/tmp/anonymous4264647846486076396webdriver-profile/extensions/[email protected]","installDate":1453308636000,"updateDate":1453308636000,"applyBackgroundUpdates":1,"bootstrap":false,"size":8445045,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":true,"hasBinaryComponents":true,"strictCompatibility":false,"locales":[],"targetApplications":[{"id":"{ec8030f7-c20a-464f-9b0e-13a3a9e97384}","minVersion":"3.0","maxVersion":"66.*"}],"targetPlatforms":[{"os":"Darwin","abi":null},{"os":"SunOS","abi":null},{"os":"FreeBSD","abi":null},{"os":"OpenBSD","abi":null},{"os":"WINNT","abi":"x86-msvc"},{"os":"Linux","abi":null}],"multiprocessCompatible":false,"signedState":0}
1453308636730   addons.manager  DEBUG   Starting provider: <unnamed-provider>
1453308636730   addons.manager  DEBUG   Registering shutdown blocker for <unnamed-provider>
1453308636730   addons.manager  DEBUG   Provider finished startup: <unnamed-provider>
1453308636778   DeferredSave.extensions.json    DEBUG   Starting write
1453308636881   addons.repository       DEBUG   No addons.json found.
1453308636881   DeferredSave.addons.json        DEBUG   Save changes
1453308636883   DeferredSave.addons.json        DEBUG   Starting timer
1453308636893   addons.manager  DEBUG   Starting provider: PreviousExperimentProvider
1453308636893   addons.manager  DEBUG   Registering shutdown blocker for PreviousExperimentProvider
1453308636893   addons.manager  DEBUG   Provider finished startup: PreviousExperimentProvider
1453308636896   DeferredSave.extensions.json    DEBUG   Write succeeded
1453308636896   addons.xpi-utils        DEBUG   XPI Database saved, setting schema version preference to 17
1453308636935   DeferredSave.addons.json        DEBUG   Starting write
1453308636946   DeferredSave.addons.json        DEBUG   Write succeeded

    at Server.createSession (C:\test\my-aikau\aikau\node_modules\intern\node_modules\leadfoot\Server.js:307:15)
    at C:/test/my-aikau/aikau/node_modules/intern/lib/executors/Runner.js:190:22
    at retry (C:/test/my-aikau/aikau/node_modules/intern/lib/util.js:723:13)
    at C:\test\my-aikau\aikau\node_modules\intern\node_modules\dojo\Promise.js:156:41
    at runCallbacks (C:\test\my-aikau\aikau\node_modules\intern\node_modules\dojo\Promise.js:19:22)
    at C:\test\my-aikau\aikau\node_modules\intern\node_modules\dojo\Promise.js:103:21
    at run (C:\test\my-aikau\aikau\node_modules\intern\node_modules\dojo\Promise.js:51:33)
    at C:\test\my-aikau\aikau\node_modules\intern\node_modules\dojo\nextTick.js:35:17
    at nextTickCallbackWith0Args (node.js:452:9)
    at process._tickCallback (node.js:381:13)


====================
===== WARNINGS =====
====================

"firefox on any platform"
"Unable to retrieve environment info"


Error: Run failed due to one or more suite errors
  at emitLocalCoverage  <node_modules\intern\lib\executors\Executor.js:342:18>
  at finishSuite  <node_modules\intern\lib\executors\Executor.js:359:15>
  at <node_modules\intern\lib\executors\Executor.js:367:8>
  at <node_modules\intern\node_modules\dojo\Promise.ts:393:15>
  at runCallbacks  <node_modules\intern\node_modules\dojo\Promise.ts:11:11>
  at <node_modules\intern\node_modules\dojo\Promise.ts:317:4>
  at run  <node_modules\intern\node_modules\dojo\Promise.ts:237:7>
  at <node_modules\intern\node_modules\dojo\nextTick.ts:44:3>
  at nextTickCallbackWith0Args  <node.js:452:9>
  at process._tickCallback  <node.js:381:13>
Warning: Test failure; check output above for details. Use --force to continue.

Aborted due to warnings.


Execution Time (2016-01-20 16:13:32 UTC)
waitServer:server   2m 14.8s  ████████ 6%
intern:dev         36m 26.8s  █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ 94%
Total 38m 55.9s

My understanding is that errors are shown once we get to Firefox tests.


I understand that vagrant is running tests against a VirtualBox VM in headless mode. Is there a way to configure that VM to have more RAM/CPU cores to speed up tests ?

incomplete sentence

in Tutorial6.md

The only truly important line in this file (in the context of Aikau) is the element.

it should be changed into

... the url element.

Override core styles

What would be the best way to override the core css so as to bring in sweeping changes (like change fonts for instance) to all widgets?

Search Page Appearance

Hi Dave,

I have made some changes in search page . All of sudden i see a change in my page which looks similar to Toggle developer view (check in the below screenshot) without apply debug mode. Ca you just help me out with this issue.

Thanks
Anooj

CheckBox value issue

Hi,

I am using the following checkBox widget in the form dialog:

editPropertiesAndAssociations.push({
   name: "alfresco/forms/controls/CheckBox",
   config: {
      name: "prop_" + property.name.replace(type + ":", type + "_"),
      label: "{itemData.prop_" + property.name.replace(type + ":", type + "_") +
         ".displayValue}",
      value: "{itemData.prop_" + property.name.replace(type + ":", type + "_") +
         ".displayValue}"
   }
});

If the checkbox config value is value: false, the dialog checkBox will be in uncheck state its fine but the problem is when I assign value as value: "{itemData.prop_" + property.name.replace(type + ":", type + "_") + ".displayValue}" then the checkbox is always in check state its doesn't considering the given value and I checke the value of "{itemData.prop_" + property.name.replace(type + ":", type + "_") + ".displayValue}" by assigning it into lable.

do you have any suggestion.

Thanks
kumar

An easier way to replace browserTitlePrefix for all pages

I tried to replace the faceted-search page's title:

var pageTitleWidget = widgetUtils.findObject(model.jsonModel.widgets, "id", "HEADER_TITLE");

if(pageTitleWidget != null){
    pageTitleWidget.config.browserTitlePrefix = msg.get("faceted.search.page.custom.title.prefix");
}

This code works, but then I have to repeat the same thing for the search config form, and I guess, for all new pages built with Aikau.
Is there any easier way of doing that? Something like we used to do replacing the property "page.title" ?

_valueChangeOf_ BaseFormControl not published when inside ControlRow on Form processing completion

I have a problem where the value of any form control extended from BaseFormControl does not publish its value once the form widgets have been processed if it is inside the ControlRow widget.

In a form I was working on I wanted to show/hide form controls based upon the value of another control. I noticed the visibilityConfig rules stopped working on the controls placed within the ControlRow. After looking at the pub/sub log I could see that the controls inside the ControlRow were not publishing to the valueChangeOf topic when the page loaded.

After walking through what was happening in the javascript debugger console I have discovered that the BaseFormControl widgets inside the ControlRow create deferred objects with their publishValue: function alfresco_forms_controls_BaseFormControl__publishValue function. However they are never resolved as this occurs after the onWidgetAddedToDocument: function alfresco_forms_controls_BaseFormControl__onWidgetAddedToDocument function is called in which the resolution of the deferredValuePublication property the deferred objects were set to is executed.

The issue seems to come from that the publishChildValue: function alfresco_forms_LayoutMixin__publishChildValue function is called after the child widget has executed the onWidgetAddedToDocument: function alfresco_forms_controls_BaseFormControl__onWidgetAddedToDocument

I have created a test page with the following widgets to demonstrate the issue:

{
    name : "alfresco/forms/Form",
    config : {
        id : "FORM_WITHOUT_CONTROL_ROW",
        okButtonPublishTopic : "SAVE_FORM_WITHOUT_CONTROL_ROW",
        okButtonLabel : "Save Form 1",
        widgets : [
                {
                    name : "alfresco/forms/controls/CheckBox",
                    config : {
                        fieldId : "control_a",
                        name : "control_a",
                        label : "Control A",
                        description : "When selected this should show the field Control B",
                        value : true
                    }
                },
                {
                    name : "alfresco/forms/controls/TextBox",
                    config : {
                        fieldId : "control_b",
                        name : "control_b",
                        label : "Control B",
                        description : "This should be shown when check box Control A is checked",
                        visibilityConfig : {
                            initialValue : false,
                            rules : [ {
                                targetId : "control_a",
                                is : [ true ]
                            } ]
                        }
                    }
                }, {
                    name : "alfresco/forms/controls/TextBox",
                    config : {
                        fieldId : "control_c",
                        name : "control_c",
                        label : "Control C"
                    }
                }, {
                    name : "alfresco/forms/controls/TextBox",
                    config : {
                        fieldId : "control_d",
                        name : "control_d",
                        label : "Control D"
                    }
                } ]
    }
},
{
    name : "alfresco/forms/Form",
    config : {
        id : "FORM_WITH_CONTROL_ROW",
        okButtonPublishTopic : "SAVE_FORM_WITH_CONTROL_ROW",
        okButtonLabel : "Save Form 2",
        widgets : [
                {
                    name : "alfresco/forms/ControlRow",
                    config : {
                        title : "Control Row For Controls E & F",
                        widgets : [
                                {
                                    name : "alfresco/forms/controls/CheckBox",
                                    config : {
                                        fieldId : "control_e",
                                        name : "control_e",
                                        label : "Control E",
                                        description : "When selected this should show the field Control F",
                                        value : true
                                    }
                                },
                                {
                                    name : "alfresco/forms/controls/TextBox",
                                    config : {
                                        fieldId : "control_f",
                                        name : "control_f",
                                        label : "Control F",
                                        description : "This should be shown when check box Control E is checked",
                                        visibilityConfig : {
                                            initialValue : false,
                                            rules : [ {
                                                targetId : "control_e",
                                                is : [ true ]
                                            } ]
                                        }
                                    }
                                } ]
                    }
                }, {
                    name : "alfresco/forms/controls/TextBox",
                    config : {
                        fieldId : "control_g",
                        name : "control_g",
                        label : "Control G"
                    }
                }, {
                    name : "alfresco/forms/controls/TextBox",
                    config : {
                        fieldId : "control_h",
                        name : "control_h",
                        label : "Control H"
                    }
                } ]
    }
},
{
    name : "alfresco/forms/Form",
    config : {
        id : "FORM_WITH_CONTROL_ROW_ALL_WIDGETS_INSIDE",
        okButtonPublishTopic : "SAVE_FORM_WITH_CONTROL_ROW_ALL_WIDGETS_INSIDE",
        okButtonLabel : "Save Form 3",
        widgets : [ {
            name : "alfresco/forms/ControlRow",
            config : {
                title : "Control Row For Controls I,J,K,L",
                widgets : [
                        {
                            name : "alfresco/forms/controls/CheckBox",
                            config : {
                                fieldId : "control_i",
                                name : "control_i",
                                label : "Control I",
                                description : "When selected this should show the field Control J",
                                value : true
                            }
                        },
                        {
                            name : "alfresco/forms/controls/TextBox",
                            config : {
                                name : "control_j",
                                label : "Control J",
                                description : "This should be shown when check box Control I is checked",
                                visibilityConfig : {
                                    initialValue : false,
                                    rules : [ {
                                        targetId : "control_i",
                                        is : [ true ]
                                    } ]
                                }
                            }
                        }, {
                            name : "alfresco/forms/controls/TextBox",
                            config : {
                                fieldId : "control_k",
                                name : "control_k",
                                label : "Control K"
                            }
                        }, {
                            name : "alfresco/forms/controls/TextBox",
                            config : {
                                fieldId : "control_l",
                                name : "control_l",
                                label : "Control L"
                            }
                        } ]
            }
        } ]
    }
}

I have tested this issue out in Safari 9.1 and Google Chrome 49.0.2623.110

Title in head does not display correctly for i18n and umlauts

I've notice that title in html head (<head><title>) does not display correctly for aikau based pages.
Pages that are "old" Surf pages shows correctly.

For example the search page should show "Sök" in Swedish, but is shown as "S&ouml;k".
All localisation properties files are encoded for umlauts, and it shows correctly in all other parts of an aikau page.

If needed I can provide you with the Swedish localization amps.
I've tested this with 5.1.c now, but it is the same for 5.0 Community versions as well.

BreadcrumbTrail with enabled useHash and reload of the page

I'm not sure is it a bug report or feature request, but is it possible to make Breadcrumb trail to show the path to the current directory when reloading the page or returning back to the document library from the document page?

  1. Simple configuration:
{
  name: "alfresco/documentlibrary/AlfBreadcrumbTrail",
  config: {
    useHash: true
  }
},
{
  name: "alfresco/documentlibrary/AlfDocumentList",
  config: {
    rootNode: "alfresco://user/home",
    rawData: true,
    useHash: true,
    widgets: [
      {
        name: "alfresco/documentlibrary/views/AlfSimpleView"
      }
    ]
  }
}

  1. Go to some folder, the hash will be added to URL, breadcrumbtrail will be extended.
    selection_110
  2. Open this URL (reload the page). Document library parses the hash, breadcrumbtrail - no.
    selection_111
  3. Go to the next folder. Connection with breadcrumbtrail is reestablished.
    selection_113

Looks like it should either work in all cases or don't work at all.

payload communication with "ALF_CREATE_FORM_DIALOG_REQUEST"

Hello,

I have a picker and a textbox, when I select one item on picker the value go to the texbox

but when my picker is in a "ALF_CREATE_FORM_DIALOG_REQUEST" my payload is send but he is empty

when I click on "save" in the from dialog I'm sending payload but my function "_onPublish" is not called, I don't see a good way to do this

 var temp = {
    name : "alfresco/buttons/AlfButton",
    config : {
        label : "old",
        publishTopic : "ALF_CREATE_FORM_DIALOG_REQUEST",
        publishPayloadType: "PROCESS",
        publishPayloadModifiers: ["processCurrentItemTokens"],
        formSubmissionPayloadMixin: this.TutorialTopic,
        publishPayload : {
            dialogTitle : "Create Group",
            dialogConfirmationButtonTitle : "Create",
            dialogCancellationButtonTitle : "Cancel",
            formSubmissionTopic : this.TutorialTopic, // on lance ça
            fixedWidth : true,
            widgets : [ {
                name : "tutorial/pickerPeople"
            }

            ]
        }
    }
 } 

in the doc I can read that formSubmissionTopic is sending the "form value"

I have to admit I didn't really understand things like "publishPayloadType: "PROCESS" or "publishPayloadModifiers: ["processCurrentItemTokens"],

sending payload 🎱
peoplePicker.js => (the button 'btn' was used when I first try to send my payload without form control) I think he sould be working even if now he is inside the form control no ?

 postCreate: function example_widgets_InputWidget__postCreate() {
                this.inherited(arguments);

                this.picker = new SimplePicker({
                   label: this.message("Pick user"),
                   loadDataPublishTopic: "ALF_CRUD_GET_ALL",
                   loadDataPublishPayload: {
                       url: "api/people"
                   },
                   itemsProperty: "people",
                   itemKey: "userName",
                   propertyToRender: "userName",
                   availableItemsLabel: "available people",
                   pickedItemsLabel: "currently selected people",
                   singleItemMode: true
                });
                this.picker.placeAt(this.inputTopicNode);

                 var btn = new AlfButton({
                    label: "Publish",
                    onClick: lang.hitch(this, '_onPublish')
                });

                btn.placeAt(this.publishTopicNode);

            },

            _onPublish: function example_widgets_InputWidget__onPublish() {
                this.alfPublish(this.TutorialTopic, this.picker.getValue());
                this.alfLog("log", "on publie le payload");
            }

receving payload
label.js =>

postCreate: function example_widget_renderWidget__postCreate() {
                this.alfSubscribe(this.TutorialTopic, lang.hitch(this, "_onPayloadReceive"));


                this.textArea = new TextBox({
                    id: "id", 
                    fieldId: "fieldId",
                        name: "name",
                        label: "label",
                        description: "description"
                 });
                this.textArea.placeAt(this.inputTopicNode);


                this.alfSubscribe(this.TutorialTopic, function(payload) {

                });
            },

           __onPayloadReceive: function example_widgets_renderWidget__onPayloadReceive(payload) {

                try{
                this.alfLog("log", this.textArea.setValue(payload[0].userName));
                this.textArea.setValue(payload[0].userName);
                }
                catch (e){
                    this.textArea.setValue("nothing");
                    this.alfLog("log", "nothing"+e.message);
                }
            }_

        });

thank you in advance

Manage aspects action

Hi,

I configured the ManageAspects action:

    name : "alfresco/renderers/PublishAction",
    config : {
        label : "Manage Aspects",
        publishTopic : "ALF_SINGLE_DOCUMENT_ACTION_REQUEST",
        publishPayloadType : "PROCESS",
        publishPayloadModifiers : [ "processCurrentItemTokens" ],
        publishPayload : {
            action : "onActionManageAspects",
            document : "{node}"
        }
    }

The dialog will not open because the nodeRef contains '://'. In the ManageAspectsService, the following code is used for node retrieval:

  onAspects: function alfresco_services_actions_ManageAspectsService__onAspects(item) {
     this.serviceXhr({url: AlfConstants.PROXY_URI + "slingshot/doclib/aspects/node/" + item.nodeRef,
                      method: "GET",
                      item: item,

I have a problem with editing association of a datalist.

I am trying to create a custom page in alfresco using Aikau to list and edit dataLists.

I have created a custom dataList, which takes another custom dataList as its association(multiplicity 1:1). This association is mandatory.

I am able to edit the properties of datalist by the help of the webscript "api/{item_kind}/{item_id}/formprocessor" (item_kind = node, item_id = nodeRef). But I am not able to change the associations.

Is there any inbuilt function to edit association?

Thanks in advance.

Form controls inside a ControlRow in a Dialog created using the ALF_CREATE_DIALOG_REQUEST not publishing to _valueChangeOf_ topic when form is rendered

Form controls, that are inside a ControlRow, that are in a Form, that have been created in a Dialog using ALF_CREATE_DIALOG_REQUEST will not initially publish their value to the valueChangeOf topic unless the Forms config has the the property "value:{}".

I came across this as we are creating a dialog that contains a DynamicForm that is updated by a select control in the same dialog window. I noticed that only the controls not inside ControlRows were publishing to the valueChangeOf topic.

A Form without the "value:{}" set but just on the page seems to work fine.

As a work around I have just included "value:{}" in the Form config
Here is an example demonstrating the behaviour. If you filter the PubSub log by valueChangeOf you will see Control C does not publish its value:

{
        name : "alfresco/forms/Form",
        config : {
            widgets : [ {
                name : "alfresco/forms/ControlRow",
                config : {
                    title : "Control Row 1",
                    widgets : [ {
                        name : "alfresco/forms/controls/TextBox",
                        config : {
                            fieldId : "control_a",
                            name : "control_a",
                            label : "Control A"
                        }
                    } ]
                }
            }, {
                name : "alfresco/forms/controls/TextBox",
                config : {
                    fieldId : "control_b",
                    name : "control_b",
                    label : "Control B"
                }
            } ]
        }
    }, {
        name : "alfresco/buttons/AlfButton",
        config : {
            label : "Show Form",
            publishTopic : "ALF_CREATE_DIALOG_REQUEST",
            publishPayload : {
                dialogId : "DIALOG",
                dialogTitle : "DIALOG FORM WITH CONTROL ROW",
                widgetsContent : [ {
                    name : "alfresco/forms/Form",
                    config : {
                        //value : {},
                        widgets : [ {
                            name : "alfresco/forms/ControlRow",
                            config : {
                                title : "Control Row 2",
                                widgets : [ {
                                    name : "alfresco/forms/controls/TextBox",
                                    config : {
                                        fieldId : "control_c",
                                        name : "control_c",
                                        label : "Control C"
                                    }
                                } ]
                            }
                        }, {
                            name : "alfresco/forms/controls/TextBox",
                            config : {
                                fieldId : "control_d",
                                name : "control_d",
                                label : "Control D"
                            }
                        } ]
                    }
                } ],
                widgetsButtons : [ {
                    name : "alfresco/buttons/AlfButton",
                    config : {
                        label : "Close dialog",
                        publishTopic : "CUSTOM_TOPIC"
                    }
                } ]
            }
        }
    }, {
        name : "alfresco/buttons/AlfButton",
        config : {
            label : "Show Form with value : {}",
            publishTopic : "ALF_CREATE_DIALOG_REQUEST",
            publishPayload : {
                dialogId : "DIALOG",
                dialogTitle : "DIALOG FORM WITH CONTROL ROW",
                widgetsContent : [ {
                    name : "alfresco/forms/Form",
                    config : {
                        value : {},//Addition of this property means that Control e will now have its value published to the _valueChangeOf_ topic when the form is loaded
                        widgets : [ {
                            name : "alfresco/forms/ControlRow",
                            config : {
                                title : "Control Row 3",
                                widgets : [ {
                                    name : "alfresco/forms/controls/TextBox",
                                    config : {
                                        fieldId : "control_e",
                                        name : "control_e",
                                        label : "Control E"
                                    }
                                } ]
                            }
                        }, {
                            name : "alfresco/forms/controls/TextBox",
                            config : {
                                fieldId : "control_f",
                                name : "control_f",
                                label : "Control F"
                            }
                        } ]
                    }
                } ],
                widgetsButtons : [ {
                    name : "alfresco/buttons/AlfButton",
                    config : {
                        label : "Close dialog",
                        publishTopic : "CUSTOM_TOPIC"
                    }
                } ]
            }
        }
    }, {
        name : "alfresco/buttons/AlfButton",
        config : {
            label : "Show Form Dialog",
            publishTopic : "ALF_CREATE_FORM_DIALOG_REQUEST",
            publishPayload : {
                dialogId : "FORM_DIALOG",
                dialogTitle : "FORM DIALOG WITH CONTROL ROW",
                formSubmissionTopic : "SAVE_FORM_4",
                widgets : [ {
                    name : "alfresco/forms/ControlRow",
                    config : {
                        title : "Control Row 4",
                        widgets : [ {
                            name : "alfresco/forms/controls/TextBox",
                            config : {
                                fieldId : "control_g",
                                name : "control_g",
                                label : "Control G"
                            }
                        } ]
                    }
                }, {
                    name : "alfresco/forms/controls/TextBox",
                    config : {
                        fieldId : "control_h",
                        name : "control_h",
                        label : "Control H"
                    }
                } ]
            }
        }
    },{
        name: "alfresco/logging/DebugLog"
    }

This was tested against version 1.0.62

Show tag property in search results

Hi Dave,

Could you please explain me the following. I would like to show the tags in the faceted search result page. I am referring to your blogpost: https://www.alfresco.com/blogs/developer/2015/04/01/adding-views-to-filtered-search/.

I did first a test. This works:

var fctSearchRes = widgetUtils.findObject(model.jsonModel, "id", "FCTSRCH_SEARCH_RESULT");
fctSearchRes.config.widgetsBelow = [ {
    name : "alfresco/renderers/Property",
    config : {
        propertyToRender : "description"
    }
}];

Now I want to add the tags and I did the following:

var fctSearchRes = widgetUtils.findObject(model.jsonModel, "id", "FCTSRCH_SEARCH_RESULT");
fctSearchRes.config.widgetsBelow = [ {
    name : " alfresco/renderers/ReadOnlyTag"
}];

Nothing. Then I did the following:

var fctSearchRes = widgetUtils.findObject(model.jsonModel, "id", "FCTSRCH_SEARCH_RESULT");
fctSearchRes.config.widgetsBelow = [ {
    name : "alfresco/renderers/Property",
    config : {
        propertyToRender : "tags"
    }
}];

I get a number, so I looked at the getRenderedProperty function in alfresco/renderers/Property.js. The following explains why I get a number back.

 } else if (ObjectTypeUtils.isArray(property)) {
            value = property.length;
} 

Is this a bug? Is it not better to add something like the following:

for(var i=0; i<property.length; i++){
   var object = property[i];
   value = value + this.getRenderedProperty(object) + ",";
}

Or is there another way to show the tags properly?

Rick

Easy way to add custom actions

Hi,

So far, I really like the Aikau framework. Only what I am missing is an easy way to add custom actions (in document list). Like the ActionFormProcessor of Share. Actions makes it very easy to add additional business logic to you're solution. You can add an onActionFormDialog and you can create an action that will send all additional parameters. Is there a way to do this in Aikau? I noticed the onActionSimpleRepoAction in the code. Only this is limited. It provides only the action name and actionedUponNoderef (used for workflow).

Do you support this already? If not, can you provide a sample that illustrates sending the payload information as params to a backend API (to initiate the action)? I don't mind to build the backend myself (that is not the challenging part). But a sample would be great!

Thank you for you're time.

Rick

alfresco/upload/_UploadsDisplayMixin can't be used as a mixin / declare can't build consistent linearization

I tried to build a custom upload progress display (the default one is quite ugly / simplistic) by using alfresco/renderers/Progress as the base and mixin in alfresco/upload/_UploadsDisplayMixin, configuring the widgetsForProgressDialog property on the alfresco/services/UploadService to use the custom progress widget in the dialog. This fails since the "super classes" of alfresco/upload/_UploadsDisplayMixin cause Dojo declare to fail in its super class linearization phase.

Custom widget module (prodyna/upload/SimpleUploadProgress):

define([ 'dojo/_base/declare', 'alfresco/renderers/Progress', 'alfresco/upload/_UploadsDisplayMixin'], function(declare, Progress, UploadsDisplayMixin )
{
    return declare([ Progress, _UploadsDisplayMixin ], {/** ... implementation ... */ });
});

(Simplified) page JSON configuration:

model.jsonModel = {services : [{
        name : 'alfresco/services/UploadService',
        config : {
            widgetsForProgressDialog : [ {
                name : 'prodyna/upload/SimpleUploadProgress',
                assignTo : 'uploadDisplayWidget',
                config : {}
            } ]
        }
    }]};

During service initialization, the alfresco_core_CoreWidgetProcessing__processWidgets operation fails when constructing the custom widget with the exception message "declare: can't build consistent linearization"

Since the mixin is "only" supposed to define an interface (JSDoc of the module), it should not include dijit/_WidgetBase nor dijit/_TemplatedMixin as super classes.

This affects Aikau 1.0.51 on Alfresco 5.0.d

Render filter issue

We are creating a custom page using Aikau for custom datalists. We are able to add and remove the custom datalist items. We have been able to provide edit functionality also but only for properties. We are facing problem while editing associations.
In this case associations are other datalist items. To accomplish this we are using edit form dialog and "api/node/{nodeRef}/formprocessor" as formSubmissionPayloadMixin URL. We are rendering "alfresco/forms/controls/DojoSelect" to add the association. Depending on the add form control value attribute we are rendering the form control to remove the association.

renderFilter: [{
target: "",
property: "value",
renderOnAbsentProperty: true,
values: ["no"]
}]
This is the render filter we are using to remove association. If the association is not changed during edit then the remove form control should not be rendered. We are not sure what value to use in the target attribute. We know the add form control widgetId. What could be the value for target attribute?

side effect in Tutorial17

Step 5 in Tutorial17 describes a shortcut for displaying the preview. But there is a side effect: documents that needs a transformation for previewing e.g. powerpoint are no longer previewed. A download link is displayed instead. I do not know if it is a bug or the intended behavior of this shortcut.

Project trying to compile against Java 1.3

I don't know why, but I tried to install this project, and I got the error logs below.
That's weird, because it was working yesterday, and it still works for other Alfresco SDK projects without having to "force" java version.

In order to be able to fix it, I had to include this on the pom.xml file:

maven-compiler-plugin
3.2

1.7
1.7

user@machine:/Projetos/testes/aikau-client$ mvn install
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Aikau Client 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.3:resources (default-resources) @ aikau-client ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory /home/user/Projetos/testes/aikau-client/src/main/resources
[INFO]
[INFO] --- maven-compiler-plugin:2.0.2:compile (default-compile) @ aikau-client ---
[INFO] Compiling 8 source files to /home/user/Projetos/testes/aikau-client/target/classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.315s
[INFO] Finished at: Tue Mar 17 09:41:29 BRT 2015
[INFO] Final Memory: 19M/982M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.0.2:compile (default-compile) on project aikau-client: Compilation failure: Compilation failure:
[ERROR] /home/user/Projetos/testes/aikau-client/src/main/java/org/alfresco/AikauServletRequestWrapper.java:[39,15] error: generics are not supported in -source 1.3
[ERROR]
[ERROR](use -source 5 or higher to enable generics)
[ERROR] /home/user/Projetos/testes/aikau-client/src/main/java/org/alfresco/AikauServletRequestWrapper.java:[61,5] error: annotations are not supported in -source 1.3
[ERROR]
[ERROR](use -source 5 or higher to enable annotations)
[ERROR] /home/user/Projetos/testes/aikau-client/src/main/java/org/alfresco/AikauServletRequestWrapper.java:[111,24] error: for-each loops are not supported in -source 1.3
[ERROR]
[ERROR](use -source 5 or higher to enable for-each loops)
[ERROR] /home/user/Projetos/testes/aikau-client/src/main/java/org/alfresco/AikauPageViewResolver.java:[46,5] error: annotations are not supported in -source 1.3
[ERROR]
[ERROR](use -source 5 or higher to enable annotations)
[ERROR] /home/user/Projetos/testes/aikau-client/src/main/java/org/alfresco/AikauLogoutController.java:[65,5] error: annotations are not supported in -source 1.3
[ERROR]
[ERROR](use -source 5 or higher to enable annotations)
[ERROR] /home/user/Projetos/testes/aikau-client/src/main/java/org/alfresco/AikauUser.java:[46,35] error: generics are not supported in -source 1.3
[ERROR]
[ERROR](use -source 5 or higher to enable generics)
[ERROR] /home/user/Projetos/testes/aikau-client/src/main/java/org/alfresco/AikauUser.java:[54,5] error: annotations are not supported in -source 1.3
[ERROR]
[ERROR](use -source 5 or higher to enable annotations)
[ERROR] /home/user/Projetos/testes/aikau-client/src/main/java/org/alfresco/AikauAuthenticationFilter.java:[45,30] error: generics are not supported in -source 1.3
[ERROR]
[ERROR](use -source 5 or higher to enable generics)
[ERROR] /home/user/Projetos/testes/aikau-client/src/main/java/org/alfresco/AikauPageView.java:[82,5] error: annotations are not supported in -source 1.3
[ERROR]
[ERROR](use -source 5 or higher to enable annotations)
[ERROR] /home/user/Projetos/testes/aikau-client/src/main/java/org/alfresco/AikauLoginController.java:[63,5] error: annotations are not supported in -source 1.3
[ERROR]
[ERROR](use -source 5 or higher to enable annotations)
[ERROR] /home/user/Projetos/testes/aikau-client/src/main/java/org/alfresco/AikauLoginController.java:[127,49] error: for-each loops are not supported in -source 1.3
[ERROR]
[ERROR](use -source 5 or higher to enable for-each loops)
[ERROR] /home/user/Projetos/testes/aikau-client/src/main/java/org/alfresco/AikauUserFactory.java:[79,5] error: annotations are not supported in -source 1.3
[ERROR]
[ERROR](use -source 5 or higher to enable annotations)
[ERROR] /home/user/Projetos/testes/aikau-client/src/main/java/org/alfresco/AikauUserFactory.java:[102,67] error: generics are not supported in -source 1.3
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
user@machine:
/Projetos/testes/aikau-client$ java -version
java version "1.7.0_76"
Java(TM) SE Runtime Environment (build 1.7.0_76-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.76-b04, mixed mode)
user@machine:~/Projetos/testes/aikau-client$ java -version
java version "1.7.0_76"
Java(TM) SE Runtime Environment (build 1.7.0_76-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.76-b04, mixed mode)

Button Emabling

I have used Alfbutton widget in one of my dialog box.
While Initializing the button i have set the disabled property to true.
I need to set the same disabled property to false once I get my response.
Here I have tried by changing widgetsbuttons.config.disabled=false
but my button is not getting enabled any suggestions on how to enable the button

Tutorial 17 documentation wrong value

Hi,

just pointing out a typo in the documentation where: Add a new alfresco/layout/HorizontalLayout into the page and place the alfresco/documentlibrary/AlfDocumentList as the first widget into the widgets array of its configuration.

The HorizontalLayout is maybe meant to be HorizontalWidgets?

Thanks.

alfresco/forms/controls/FileSelect does not publish value correctly

When submitting a form with the fileSelect control the value is published incorrectly;
"files_field": [ {} ]

I have used the example from the unit test (Aikau/aikau/src/test/resources/testApp/WEB-INF/classes/alfresco/site-webscripts/alfresco/forms/controls/FileSelect.get.js); I have tested it against Aikau version 1.0.56.4.

{
         id: "STANDARD_FORM",
         name: "alfresco/forms/Form",
         config: {
            okButtonPublishTopic: "PUBLISH_FORM_DATA",
            cancelButtonPublishTopic: "CANCEL_FORM_DATA",
            widgets: [
               {
                  name: "alfresco/forms/ControlRow",
                  config: {
                     widgets: [
                        {
                           id: "FILE_SELECT",
                           name: "alfresco/forms/controls/FileSelect",
                           config: {
                              label: "File(s) selector",
                              name: "files_field",
                              value: "",
                              requirementConfig: {
                                 initialValue: true
                              }
                           }
                        },
                        {
                           id: "FILE_SELECT",
                           name: "alfresco/forms/controls/FileSelect",
                           config: {
                              label: "File(s) selector (clear on select)",
                              name: "files_field",
                              value: "",
                              recreateControlOnSelect: true,
                              requirementConfig: {
                                 initialValue: true
                              }
                           }
                        }
                     ]
                  }
               }
            ]
         }
      },
      {
         name: "alfresco/logging/DebugLog"
      }

Attribute bugs for 'alfresco/forms/controls/Select' control

I´ve built a form dialog with a select control inside. I followed https://github.com/Alfresco/Aikau/blob/master/tutorial/chapters/Tutorial8.md#step-5-add-a-user-select-control tutorial but I had to hack to get this working. My control grab data from my own service so i´ve confiured this way:

{
           name: "alfresco/forms/controls/Select",
           config: {
              fieldId: "accountingHouseOptions",
              label: "Asesoria",
              description: "create_new_business_site.accountingHouseParent.label",
              name: "accountingHouseParent",
              optionsConfig: {
                  publishTopic: "ZZ_GET_AVAILABLE_ACCOUNTING_HOUSE_OPTIONS",
                  publishPayload: {valueSubscriptionTopic: "ZZ_SET_AVAILABLE_ACCOUNTING_HOUSE_OPTIONS"},
              labelAttribute: "shortName"
              valueAttribute: "shortNameValue"
                  //valueSubscriptionTopic: "ZZ_SET_AVAILABLE_ACCOUNTING_HOUSE_OPTIONS"
              }
           }
        };

To make this work:

  1. valueSubscriptionTopic doesn´t work, I had to get the correct one from "payload.responseTopic" inside my service and publish it when 'options' done.
  2. valueAttribute: doesn´t work (labelAttribute does) I think because getValue: function alfresco_forms_controls_BaseFormControl__getValue() {..} is defaulting the attribute name in the payload to look for (it has to be 'value') So if I publish a payload with option values in "value" attribute, it works.
  3. labelAttribute has to be an optionsConfig child, not publishPayload as in tutorial.

Rendering of large widget structures / AlfList views can take a very long time

The current way that complex, nested widget structures are rendered includes various inefficiencies that appear to have a nasty, non-linear effect on the time it takes to render e.g. a list of 50 entries with 50 very simple columns.

The demonstrator test case in my gist https://gist.github.com/AFaust/1d1450ffe8829371ad04 renders such a list of 50 entries with 50 columns. On IE 11 it can take around 30 seconds for the initial rendition. Firefox (45) appears to be better at handling the use case with around 6-10s. Since I don't use (or even install) Chrome, I can't say how it fares.
In other use cases when we have used a paginating, sortable list, we've additionally observed that destroying the previous page can also take a significant time (~5s on IE11 for a 50 rows and ~20 coumns case).

Sure, any use case that involves excessive complexity can expect to suffer some performance degredation. But it is hard to explain to an end-user / customer, why only 50x50 values are enough to grind his web app to a halt.

In the last week and a half I have built completely separate "high performance" variants of the ListRenderer, Row, Cell, Property and InlineEditProperty widgets (and mixins CoreWidgetProcessing / MultiItemRendererMixin), and also applied some optimisations to secondary widgets such as the Actions renderer, to effectively bring down rendering time to ~10-15% and nearly eliminate overhead of destroying the previous list page.

The main issues we identified as causing significant overheads were:

  • construction of the entire view in the live DOM (i.e. each widget is attached to the live DOM during dijit/_WidgetBase create() and only then are children processed)
  • use of replacement tokens in widget HTML templates disables caching in dijit/_TemplatedMixin
  • synchronous destruction of the entire view while still in the live DOM
  • relatively expansive workaround in Dojo 1.10 dom-construct _empty() for potential memory leak in IE <= 9 (https://github.com/dojo/dojo/blob/master/dom-construct.js#L304)
  • generic processing of widget template for potential attach points / events (scales with number of tags in HTML)
  • premature initialization of secondary widgets / DOM structures that may not be used on every element (Actions menu, inline edit DOM fragments, which could be initialized on the first "mouse hover" of a duration of 100ms or more)
  • application of inline styles (declared in widget config) on each instance instead of using dynamically applied CSS rules, i.e. using a shared cell/column/property identifier
  • evaluation / application of ALL declarative widget config parameters as potential DOM attributes in dijit/_WidgetBase _applyAttributes even though 99+% are typically irrelevant
  • repeated construction of dateFormats in alfresco/core/TemporalUtils (could be cached by i18nScope)
  • inclusion of WidgetInfo debug widget on every level (it would be nice if that could be declaratively disabled for an entire sub-structure of widgets in the JSON model, even in debug mode)

The primary changes I have included in our widget / mixin variants are:

  • introduction of new lifecycle hooks postAttach (when widget is added to live DOM) and prepareDestroy (when widget is about to be destroyed)
  • default prepareDestroy will unsubscribe / remove all event registrations
  • redefinition of destroy to synchronously detach widget (and substructure) from live DOM, call prepareDestroy on self, call either prepareDestroy/destroy on any children (depending on support of new lifecycle hook) and schedule for asynchronous "real" destruction
  • use detached documentFragment nodes to collect all widgets during a processWidgets() call and only attach to live DOM when all widgets have been processed (including children structures)
  • (recursively) call postAttach on any (compatible) widget when it has been attached to the live DOM (via the containing documentFragment)
  • replaced use of HTML templates with dynamically constructed DOM (custom buildRendering()) and explicit variable / event attachment for very frequently used widgets (Row, Cell, Property, InlineEditProperty)
  • dynamically create CSS rules for inline styles of widgets when configured with a special property (a 'dynamicCssRuleClass' name to bind the rules to, which is combined with the class name of our custom root widget module variant)
  • delayed initialization of secondary functionality (InlineEditProperty edit icon + hover, Actions menu) until user is hovering on actual widget for at least 100ms
  • added parameter for declarative JSON model to explicitly disable WidgetInfo even in debug mode (defaults to true in our high performance widget / mixin variants)

I won't suggest that the majority of my changes need to be included in / considered for Aikau core, but I feel very strongly about the need for an enhanced widget lifecycle, especially for potentially nested / large widget structures. Both the construction in detached DOM and asynchronous destruction in a detached DOM had the most significant impact on overall performance when we ignore the HTML widget template / event attachment overhead, which could be addressed on a widget-by-widget basis outside of Aikau core.

The following screenshots showcase the profiling results of the test case from my gist, running in IE 11 (Win 7 64bit), on Alfresco 5.0.3 and Aikau 1.0.60

aikau-large-list-render-perf-ieresponsiveness
aikau-large-list-render-perf-ieprofiler
aikau-large-list-render-perf-ieprofiler-domaccess
aikau-large-list-render-perf-ieprofiler-widgetbase_create-calltree

PdfJS and thumbnail.get.js error

Hi,
Since aikau v1.0.39.5 (Alfresco 5.1.e), I'm facing issues when using AlfDocumentPreview widgets on PDF documents.
Steps to reproduce: (I detect this on my home made aikau page, but it can be reproduced on any aikau page which contains preview widget like faceted page):
1- Open faceted seach share page, and run query returning pdf and office documents ('pdf or xls')
2- Click on the thumbnail widget of the pdf file: open pdf preview, works fine.
3- Click on the thumbnail widget of the xls file: open xls preview, works fine.
4- Click on the thumbnail widget of the pdf file: error.
Since a txt or MSoffice document has been previewed, it is not possible anymore to preview any pdf document (need page reload).

Log output: org.springframework.extensions.webscripts.WebScriptException: 03150001 The content node was not specified so the content cannot be streamed to the client: classpath*:alfresco/templates/webscripts/org/alfresco/repository/thumbnail/thumbnail.get.js)

PdfJs tries to get pdf thumbnail at following url which always return null value : /share/proxy/alfresco/api/node/workspace/SpacesStore/1a0b110f-1e09-4ca2-b367-fe25e4964a4e/content/thumbnails/pdf?c=force&noCache=1460754387703

Using last aikau release (1.0.63), pdf preview are just not loading.....

Any idea ?
Vincent

Dojo package location prefixed by another package name ends up not loading widget / service code

This issue is very likely related to the Surf library but since it is encountered solely when using Aikau, I'm filing it here.

When multiple Dojo packages have been configured in a way where the source location of a package A is prefixed with the name of another package B, any widgets / services of package A referenced in JSON model will not work as their source code is not contained in the aggregated JS file. As far as I was able to determine via debugging, this is the result of a second, redundant package mapping process.

<config evaluator="string-compare" condition="WebFramework">
   <web-framework>
      <dojo-pages>
         <packages>
            <!-- a  package mapping ending in a location prefixed by another package name is problematic -->
            <package name="A" location="B/path/to/files" />
            <package name="B" location="js/B/path/to/files" />
         </packages>
      </dojo-pages>
   </web-framework>
</config>
model.jsonModel = { widgets : [{name : 'A/moduleId'}] /* ... */ };

During dependency collection, the DojoDependencyHandler.getPath(String, String) operation is called to resolve a (potentially relative) module ID to the source path of the JS (or CSS, HTML, properties) file.
While outputting the aggregated dependency source, the DojoDependencyHandler.getPath(String, String) operation is called again with the already resolved source path. When the first folder in the path happens to be a name of a Dojo package, that packages location is prefixed to the already resolved path.

The result of this redundant mapping of package locations is that the DojoDependencyHandler.outputDependency(String, String, DojoDependencies) operation can't find a resource input stream for the invalid path and returns the String "null", which will be output as the "source" of the module. The output in the aggregated JS file looks like this

'A/moduleId':function(){
null},

I have compiled a set of test files in the following gist: https://gist.github.com/AFaust/f1c3930c336a33e6fcb8

This was found in 5.0.d using Aikau 1.0.51 but appears to also be present in 5.0.3 (which might have had newer Spring libraries).

The example of course is using a constructed constellation, but we have actually arrived naturally in a such a situation with two separate, independant modules. Our Aikau library module defines a package "prodyna" with a location "js/prodyna" (using common Aikau root path) while our Enhanced Search module (predating Aikau and faceted search page) now defines a package "enhanced-search" with location "prodyna/enhanced-search/dojo" for a custom SearchBox widget. The location was chosen to keep all source files relating to that module in one distinct root.

A workaround exists by simply refactoring the module packages structures, but a long term solution should prevent accidental conflicts with modules not under the control of a customer / developer.

AlfTabContainer + AlfList

If I create a new tab in AlfTabContainer using tabAdditionTopic and a tab contains AlfList, then the list is not rendered (shows alflist.no.data.message) until I select another tab and then select again this newly created tab. Any way to solve it?

var tabs = {
   name: "alfresco/layout/AlfTabContainer",
   config: {
      tabSelectionTopic: "SELECT_TAB_TOPIC",
      tabDisablementTopic: "DISABLE_TAB_TOPIC",
      tabAdditionTopic: "ADD_TAB_TOPIC",
      tabDeletionTopic: "DELETE_TAB_TOPIC",
      widgets: []
   }
};

var newTab = {
   widgets: [{
      name: "alfresco/lists/AlfList",
      title: "Title",
      config: {
         loadDataPublishTopic: "ALF_CRUD_GET_ALL",
         loadDataPublishPayload: {
            url: "api/groups?sortBy=displayName&zone=APP.DEFAULT"
         },
         itemsProperty: "data",
         widgets: [{
            name: "alfresco/lists/views/AlfListView",
            config: {
               widgets: [{
                  name: "alfresco/lists/views/layouts/Row",
                  config: {
                     widgets: [{
                        name: "alfresco/lists/views/layouts/Cell",
                        config: {
                           widgets: [{
                              name: "alfresco/renderers/Property",
                              config: {
                                 propertyToRender: "displayName"
                              }
                           }]
                        }
                     }]
                  }
               }]
            }
         }]
      }
   }]
};

var AddButton = {
   name:"alfresco/buttons/AlfButton",
   config: {
      label: "Add tab",
      publishTopic: "ADD_TAB_TOPIC",
      publishPayload: newTab
   }
}

Can't get the dynamics value of widgets

I have a webscript wich get all the workflow I wan't to show, I want to add args depending on checkbox

var list = {
           name: "alfresco/lists/AlfList",        
           config: {
              loadDataPublishTopic: "GET_DATA_WF",
              loadDataPublishPayload: {
                 filtre: checkbox.config.value
              },
              itemsProperty: "data"
           }
        };
var checkbox = {
          id: "ID_CHECK",
          name: "alfresco/forms/controls/DojoCheckBox",
          config: {
            fieldId: "idCheckboxGroup",
            name: "groupFilter",
            label: "Groupe",
            //description: "",
            value: "{value}",
           // onChange:     
          }
        };

In my widget (I know this code is wrong but It's for be more clear of what I would like to do)
I'm able to get the valu of the config (like name or even value) but If I change by checking or un-checking my checkbox, value won't change in my logs

  onGetData: function wfTab_wfTabFilter__onGetData(payload) {

          var url = AlfConstants.PROXY_URI+"wfTab/filter";

         var test = lang.getObject("filtre", false, payload);

      //   var checkboxValue = payload.getValue();


          this.alfLog("warn", "value of the checkbox" +checkboxValue);

Search Result Bulk Download

Hi Dave,

I have customized the search page by creating a new webscript with name Custom Search.
In that page I have added a selector and a select items menu list.
i have also added a service which includes the download functionality
but my functionality is not working as per the requirement
The changes are as follows
I made chenges in
1.The custom-search.js page which is the replace for faceted-search.js
2. CustomSearchResult.js which is the replace for AlfSearchResult.js
3. CustomSearchResult.html which is the replace for AlfSearchResult.html
4.The service file which I'm calling inside the custom-search.js
I made all these made follow the aikau tutorial for UsersAndGroups
Please help me out

capture3
capture4
capture5
capture6
capture1
capture2

Tutorial 13 - margins / paddings ?

I followed the Tutorial 1-13. It's awesome and gives an opportunity to start working with Aikau. Thank you very much.

But I met one bug (yeh, only one) that I cannot fix. After moving the table with groups to the HorizontalWidgets -> ClassicWindow, the table does not fit the widget. I removed all "widthPc" configurations and I use MacBook, so the width of the screen for websites is 1280px.

selection_047

As I understand, the problem is that the name of the groups are too long. You had the same default groups in the table in the tutorial (like ALFRESCO_MODEL_ADMINISTRATORS) and the length of the text in the cells was ok for your screen. So the question is:
Is it normal behaviour of the nesting widgets? So if the table is bigger than a block (ClassicWindow), then users will have the same bug that I have? Or is it a way to solve this?

Missing service/constants/Default file.

I am seeing the in /alfresco/core/Page.js file is referring service/constants/Default javascript, but I could not see the file physically in the Aikau source tree.
Does this file is generated during build? or wrongly referenced in the Page.js file.

Link to Page.js

Aikau - Google Chrome

I'm trying to use some features of your code but, the aikau pages doesn't work on Chrome? In FireFox I open the page and works, but in Chrome doesn't work.

Not possible to open searchresultLink in new tab

Hi,

I customized the share advanced-search-page to be able to search on custom object-types. In the resultpage I created a table view and I want to make the link behind the document-name to open in a new page. According to the documentation, this should be possible (alfresco/services/_NavigationServiceTopicMixin.newTarget) and alfresco/services/NavigationService.navigateToPage

else if (data.target === this.newTarget) { window.open(url); }

However, when you look at alfresco/renderers/_SearchResultLinkMixin.generateSearchLinkPayload the following is hardcoded and not merged with the publishPayload entered while instantiating the widget
var payload = { type: "PAGE_RELATIVE", target: "CURRENT", url: null };

There is no way to overwrite this setting

CRUDForm available via dialog service

It's nice to be able to call the form dialog via the form service, but it would be nicer if the crud form is also exposed via this service, perhaps via a payload attribute of the ALF_CREATE_FORM_DIALOG_REQUEST topic.

Create a button who acts on all the results in a AlfSearchList or AlfList

What I've seen so far there is only the publishPayloadType: "CURRENT_ITEM" which works fine on the item in a list.

My goal is to create a button on a AlfSearchList in this case which takes all the results and send it to a repo call and fire an Action.
So what I've done so far:

var widget = widgetUtils.findObject(model.jsonModel.widgets, "id", "FCTSRCH_RESULTS_MENU_BAR");
var action = {
    name: "alfresco/buttons/AlfButton",
    config: {
        label: "DOWNLOAD EVERYTHING",
        publishTopic: "ALF_DOWNLOAD_AS_ZIP",
        subscriptionTopic: "ALF_SEARCH_REQUEST",
        publishPayload: {
            documents: "data"
        }
    }
};
widget.config.widgets.push(action);

So how this button should work in theory is that it should fire Topic ALF_DOWNLOAD_AS_ZIP with the data of ALF_SEARCH_REQUEST.

It would be great if there is an extra predefined publishPayloadType like "ALL_ITEMS".

Incorrect locale sent in Accept-Language header (in IE11)

https://issues.alfresco.com/jira/browse/AKU-612 introduced an attempt to manually derive the "Accept-Language" header from the navigator object. Unforunately, this breaks / overrides the correct Accept-Language header already set by some browsers (like IE11) and may introduce incorrect values.
I.e. my system has been installed in locale de_DE but I usually set the browser content language to just en or de. Regardless of what I set in IE 11, Aikau XHR requests always send de-de in Accept-Language. If I override the getDefaultHeaders in my services to delete the custom-constructed value, the Accept-Language header is set by IE and correct.

As far as I could determine from https://msdn.microsoft.com/en-us/library/ms535867%28v=vs.85%29.aspx there is no property in IE navigator object to determine the correct content language as defined by the user. I would prefer CoreXhr not try to "guess" the header value if the browser is already providing it. Otherwise it should be fixed - the simplest (and most likely to be correct) option seems to be to inject the full Accept-Language header value provided in the initial request to the Aikau page as the default value.

This is using Aikau 1.0.51 on Alfresco 5.0.d

aikau-xhr-acceptlanguage

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.